diff --git a/.changeset/whole-beans-arrive.md b/.changeset/whole-beans-arrive.md
new file mode 100644
index 0000000000..c97004ce90
--- /dev/null
+++ b/.changeset/whole-beans-arrive.md
@@ -0,0 +1,5 @@
+---
+"shadcn": patch
+---
+
+add phosphor icons
diff --git a/apps/v4/app/(create)/components/icon-library-picker.tsx b/apps/v4/app/(create)/components/icon-library-picker.tsx
index 9b543fdf54..9d2f334f3d 100644
--- a/apps/v4/app/(create)/components/icon-library-picker.tsx
+++ b/apps/v4/app/(create)/components/icon-library-picker.tsx
@@ -39,6 +39,12 @@ const IconHugeicons = lazy(() =>
}))
)
+const IconPhosphor = lazy(() =>
+ import("@/registry/icons/icon-phosphor").then((mod) => ({
+ default: mod.IconPhosphor,
+ }))
+)
+
const PREVIEW_ICONS = {
lucide: [
"CopyIcon",
@@ -88,6 +94,22 @@ const PREVIEW_ICONS = {
"ArrowDown01Icon",
"ArrowRight01Icon",
],
+ phosphor: [
+ "CopyIcon",
+ "WarningCircleIcon",
+ "TrashIcon",
+ "ShareIcon",
+ "BagIcon",
+ "DotsThreeIcon",
+ "SpinnerIcon",
+ "PlusIcon",
+ "MinusIcon",
+ "ArrowLeftIcon",
+ "ArrowRightIcon",
+ "CheckIcon",
+ "CaretDownIcon",
+ "CaretRightIcon",
+ ],
}
const logos = {
@@ -154,6 +176,24 @@ const logos = {
>
),
+ phosphor: (
+
+
+
+
+ ),
}
export function IconLibraryPicker({
@@ -259,7 +299,9 @@ const IconLibraryPreview = memo(function IconLibraryPreview({
? IconLucide
: iconLibrary === "tabler"
? IconTabler
- : IconHugeicons
+ : iconLibrary === "hugeicons"
+ ? IconHugeicons
+ : IconPhosphor
return (
}))
)
+const IconPhosphor = lazy(() =>
+ import("@/registry/icons/icon-phosphor").then((mod) => ({
+ default: mod.IconPhosphor,
+ }))
+)
+
export function IconPlaceholder({
...props
}: {
@@ -43,6 +49,9 @@ export function IconPlaceholder({
{iconLibrary === "hugeicons" && (
)}
+ {iconLibrary === "phosphor" && (
+
+ )}
)
}
diff --git a/apps/v4/app/(create)/components/picker.tsx b/apps/v4/app/(create)/components/picker.tsx
index d680388222..45ac0591c3 100644
--- a/apps/v4/app/(create)/components/picker.tsx
+++ b/apps/v4/app/(create)/components/picker.tsx
@@ -138,6 +138,7 @@ function PickerSubTrigger({
lucide="ChevronRightIcon"
tabler="IconChevronRight"
hugeicons="ArrowRight01Icon"
+ phosphor="CaretRightIcon"
className="ml-auto"
/>
@@ -190,6 +191,7 @@ function PickerCheckboxItem({
lucide="CheckIcon"
tabler="IconCheck"
hugeicons="Tick02Icon"
+ phosphor="CheckIcon"
/>
@@ -230,6 +232,7 @@ function PickerRadioItem({
lucide="CheckIcon"
tabler="IconCheck"
hugeicons="Tick02Icon"
+ phosphor="CheckIcon"
className="size-4 pointer-coarse:size-5"
/>
diff --git a/apps/v4/app/(internal)/sink/components/dropdown-menu-demo.tsx b/apps/v4/app/(internal)/sink/components/dropdown-menu-demo.tsx
index ca922b654a..0aa2250e40 100644
--- a/apps/v4/app/(internal)/sink/components/dropdown-menu-demo.tsx
+++ b/apps/v4/app/(internal)/sink/components/dropdown-menu-demo.tsx
@@ -117,6 +117,7 @@ function DropdownMenuCheckboxes() {
lucide="UserIcon"
tabler="IconUser"
hugeicons="UserIcon"
+ phosphor="UserIcon"
/>
Profile
@@ -125,6 +126,7 @@ function DropdownMenuCheckboxes() {
lucide="CreditCardIcon"
tabler="IconCreditCard"
hugeicons="CreditCardIcon"
+ phosphor="CreditCardIcon"
/>
Billing
@@ -133,6 +135,7 @@ function DropdownMenuCheckboxes() {
lucide="SettingsIcon"
tabler="IconSettings"
hugeicons="SettingsIcon"
+ phosphor="GearIcon"
/>
Settings
@@ -167,6 +170,7 @@ function DropdownMenuCheckboxes() {
lucide="LogOutIcon"
tabler="IconLogout"
hugeicons="LogoutIcon"
+ phosphor="SignOutIcon"
/>
Sign Out
@@ -222,6 +226,7 @@ function DropdownMenuWithAvatar() {
lucide="ChevronsUpDownIcon"
tabler="IconChevronsUpDown"
hugeicons="ChevronUpDownIcon"
+ phosphor="CaretUpDownIcon"
className="text-muted-foreground ml-auto"
/>
@@ -251,6 +256,7 @@ function DropdownMenuWithAvatar() {
lucide="SparklesIcon"
tabler="IconSparkles"
hugeicons="SparklesIcon"
+ phosphor="SparklesIcon"
/>
Upgrade to Pro
@@ -262,6 +268,7 @@ function DropdownMenuWithAvatar() {
lucide="BadgeCheckIcon"
tabler="IconBadgeCheck"
hugeicons="BadgeCheckIcon"
+ phosphor="CheckCircleIcon"
/>
Account
@@ -270,6 +277,7 @@ function DropdownMenuWithAvatar() {
lucide="CreditCardIcon"
tabler="IconCreditCard"
hugeicons="CreditCardIcon"
+ phosphor="CreditCardIcon"
/>
Billing
@@ -278,6 +286,7 @@ function DropdownMenuWithAvatar() {
lucide="BellIcon"
tabler="IconBell"
hugeicons="BellIcon"
+ phosphor="BellIcon"
/>
Notifications
@@ -288,6 +297,7 @@ function DropdownMenuWithAvatar() {
lucide="LogOutIcon"
tabler="IconLogout"
hugeicons="LogoutIcon"
+ phosphor="SignOutIcon"
/>
Sign Out
@@ -341,6 +351,7 @@ function DropdownMenuAvatarOnly() {
lucide="SparklesIcon"
tabler="IconSparkles"
hugeicons="SparklesIcon"
+ phosphor="SparklesIcon"
/>
Upgrade to Pro
@@ -352,6 +363,7 @@ function DropdownMenuAvatarOnly() {
lucide="BadgeCheckIcon"
tabler="IconBadgeCheck"
hugeicons="BadgeCheckIcon"
+ phosphor="CheckCircleIcon"
/>
Account
@@ -360,6 +372,7 @@ function DropdownMenuAvatarOnly() {
lucide="CreditCardIcon"
tabler="IconCreditCard"
hugeicons="CreditCardIcon"
+ phosphor="CreditCardIcon"
/>
Billing
@@ -368,6 +381,7 @@ function DropdownMenuAvatarOnly() {
lucide="BellIcon"
tabler="IconBell"
hugeicons="BellIcon"
+ phosphor="BellIcon"
/>
Notifications
@@ -378,6 +392,7 @@ function DropdownMenuAvatarOnly() {
lucide="LogOutIcon"
tabler="IconLogout"
hugeicons="LogoutIcon"
+ phosphor="SignOutIcon"
/>
Sign Out
@@ -395,6 +410,7 @@ function DropdownMenuIconColor() {
lucide="MoreHorizontalIcon"
tabler="IconDots"
hugeicons="MoreHorizontalCircle01Icon"
+ phosphor="DotsThreeOutlineIcon"
/>
Toggle menu
@@ -406,6 +422,7 @@ function DropdownMenuIconColor() {
lucide="PencilIcon"
tabler="IconPencil"
hugeicons="EditIcon"
+ phosphor="PencilIcon"
/>
Edit
@@ -414,6 +431,7 @@ function DropdownMenuIconColor() {
lucide="ShareIcon"
tabler="IconShare"
hugeicons="ShareIcon"
+ phosphor="ShareIcon"
/>
Share
@@ -423,6 +441,7 @@ function DropdownMenuIconColor() {
lucide="TrashIcon"
tabler="IconTrash"
hugeicons="DeleteIcon"
+ phosphor="TrashIcon"
/>
Delete
diff --git a/apps/v4/package.json b/apps/v4/package.json
index dcd7599827..7b2ad9168a 100644
--- a/apps/v4/package.json
+++ b/apps/v4/package.json
@@ -30,6 +30,7 @@
"@hookform/resolvers": "^3.10.0",
"@hugeicons/core-free-icons": "^1.2.1",
"@hugeicons/react": "^1.1.1",
+ "@phosphor-icons/react": "^2.1.10",
"@radix-ui/react-accessible-icon": "^1.1.1",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-alert-dialog": "^1.1.5",
diff --git a/apps/v4/public/r/styles/base-lyra/accordion-example.json b/apps/v4/public/r/styles/base-lyra/accordion-example.json
index 984683abc8..b10b004647 100644
--- a/apps/v4/public/r/styles/base-lyra/accordion-example.json
+++ b/apps/v4/public/r/styles/base-lyra/accordion-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/accordion-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/bases/base/ui/accordion\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AccordionExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction AccordionBasic() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Is it accessible?\",\n content: \"Yes. It adheres to the WAI-ARIA design pattern.\",\n },\n {\n value: \"item-2\",\n trigger: \"Is it styled?\",\n content:\n \"Yes. It comes with default styles that matches the other components' aesthetic.\",\n },\n {\n value: \"item-3\",\n trigger: \"Is it animated?\",\n content:\n \"Yes. It's animated by default, but you can disable it if you prefer.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionMultiple() {\n const items = [\n {\n value: \"item-1\",\n trigger:\n \"What are the key considerations when implementing a comprehensive enterprise-level authentication system?\",\n content:\n \"Implementing a robust enterprise authentication system requires careful consideration of multiple factors. This includes secure password hashing and storage, multi-factor authentication (MFA) implementation, session management, OAuth2 and SSO integration, regular security audits, rate limiting to prevent brute force attacks, and maintaining detailed audit logs. Additionally, you'll need to consider scalability, performance impact, and compliance with relevant data protection regulations such as GDPR or HIPAA.\",\n },\n {\n value: \"item-2\",\n trigger:\n \"How does modern distributed system architecture handle eventual consistency and data synchronization across multiple regions?\",\n content:\n \"Modern distributed systems employ various strategies to maintain data consistency across regions. This often involves using techniques like CRDT (Conflict-Free Replicated Data Types), vector clocks, and gossip protocols. Systems might implement event sourcing patterns, utilize message queues for asynchronous updates, and employ sophisticated conflict resolution strategies. Popular solutions like Amazon's DynamoDB and Google's Spanner demonstrate different approaches to solving these challenges, balancing between consistency, availability, and partition tolerance as described in the CAP theorem.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionWithBorders() {\n const items = [\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content:\n \"We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members. There are no hidden fees or setup costs.\",\n },\n {\n value: \"security\",\n trigger: \"Is my data secure?\",\n content:\n \"Yes. We use end-to-end encryption, SOC 2 Type II compliance, and regular third-party security audits. All data is encrypted at rest and in transit using industry-standard protocols. We also offer optional two-factor authentication and single sign-on for enterprise customers.\",\n },\n {\n value: \"integration\",\n trigger: \"What integrations do you support?\",\n content: (\n <>\n
\n We integrate with 500+ popular tools including Slack, Zapier,\n Salesforce, HubSpot, and more. You can also build custom\n integrations using our REST API and webhooks.{\" \"}\n
\n \n Our API documentation includes code examples in 10+ programming\n languages.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n\nfunction AccordionInCard() {\n const items = [\n {\n value: \"plans\",\n trigger: \"What subscription plans do you offer?\",\n content: (\n <>\n \n We offer three subscription tiers: Starter ($9/month), Professional\n ($29/month), and Enterprise ($99/month). Each plan includes\n increasing storage limits, API access, priority support, and team\n collaboration features.\n
\n \n Annual billing is available with a 20% discount. All\n plans include a 14-day free trial with no credit card required.\n
\n \n View plans\n \n \n >\n ),\n },\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content: (\n <>\n \n Billing occurs automatically at the start of each billing cycle. We\n accept all major credit cards, PayPal, and ACH transfers for\n enterprise customers.\n
\n \n You'll receive an invoice via email after each payment. You can\n update your payment method or billing information anytime in your\n account settings. Failed payments will trigger automated retry\n attempts and email notifications.\n
\n >\n ),\n },\n {\n value: \"upgrade\",\n trigger: \"Can I upgrade or downgrade my plan?\",\n content: (\n <>\n \n Yes, you can change your plan at any time. When upgrading,\n you'll be charged a prorated amount for the remainder of your\n billing cycle and immediately gain access to new features.\n
\n \n When downgrading, the change takes effect at the end of your current\n billing period, and you'll retain access to premium features\n until then. No refunds are provided for downgrades.\n
\n >\n ),\n },\n {\n value: \"cancel\",\n trigger: \"How do I cancel my subscription?\",\n content: (\n <>\n \n You can cancel your subscription anytime from your account settings.\n There are no cancellation fees or penalties. Your access will\n continue until the end of your current billing period.\n
\n \n After cancellation, your data is retained for 30 days in case you\n want to reactivate. You can export all your data before or after\n canceling. We'd love to hear your feedback about why\n you're leaving.\n
\n >\n ),\n },\n {\n value: \"refund\",\n trigger: \"What is your refund policy?\",\n content: (\n <>\n \n We offer a 30-day money-back guarantee for new subscriptions. If\n you're not satisfied within the first 30 days, contact our\n support team for a full refund.\n
\n \n After 30 days, we don't provide refunds for partial billing\n periods, but you can cancel anytime to avoid future charges.\n Enterprise customers have custom refund terms outlined in their\n contracts.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n \n Subscription & Billing \n \n Common questions about your account, plans, and payments\n \n \n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n \n \n )\n}\n\nfunction AccordionWithDisabled() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Can I access my account history?\",\n content:\n \"Yes, you can view your complete account history including all transactions, plan changes, and support tickets in the Account History section of your dashboard.\",\n disabled: false,\n },\n {\n value: \"item-2\",\n trigger: \"Premium feature information\",\n content:\n \"This section contains information about premium features. Upgrade your plan to access this content.\",\n disabled: true,\n },\n {\n value: \"item-3\",\n trigger: \"How do I update my email address?\",\n content:\n \"You can update your email address in your account settings. You'll receive a verification email at your new address to confirm the change.\",\n disabled: false,\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/bases/base/ui/accordion\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AccordionExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction AccordionBasic() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Is it accessible?\",\n content: \"Yes. It adheres to the WAI-ARIA design pattern.\",\n },\n {\n value: \"item-2\",\n trigger: \"Is it styled?\",\n content:\n \"Yes. It comes with default styles that matches the other components' aesthetic.\",\n },\n {\n value: \"item-3\",\n trigger: \"Is it animated?\",\n content:\n \"Yes. It's animated by default, but you can disable it if you prefer.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionMultiple() {\n const items = [\n {\n value: \"item-1\",\n trigger:\n \"What are the key considerations when implementing a comprehensive enterprise-level authentication system?\",\n content:\n \"Implementing a robust enterprise authentication system requires careful consideration of multiple factors. This includes secure password hashing and storage, multi-factor authentication (MFA) implementation, session management, OAuth2 and SSO integration, regular security audits, rate limiting to prevent brute force attacks, and maintaining detailed audit logs. Additionally, you'll need to consider scalability, performance impact, and compliance with relevant data protection regulations such as GDPR or HIPAA.\",\n },\n {\n value: \"item-2\",\n trigger:\n \"How does modern distributed system architecture handle eventual consistency and data synchronization across multiple regions?\",\n content:\n \"Modern distributed systems employ various strategies to maintain data consistency across regions. This often involves using techniques like CRDT (Conflict-Free Replicated Data Types), vector clocks, and gossip protocols. Systems might implement event sourcing patterns, utilize message queues for asynchronous updates, and employ sophisticated conflict resolution strategies. Popular solutions like Amazon's DynamoDB and Google's Spanner demonstrate different approaches to solving these challenges, balancing between consistency, availability, and partition tolerance as described in the CAP theorem.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionWithBorders() {\n const items = [\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content:\n \"We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members. There are no hidden fees or setup costs.\",\n },\n {\n value: \"security\",\n trigger: \"Is my data secure?\",\n content:\n \"Yes. We use end-to-end encryption, SOC 2 Type II compliance, and regular third-party security audits. All data is encrypted at rest and in transit using industry-standard protocols. We also offer optional two-factor authentication and single sign-on for enterprise customers.\",\n },\n {\n value: \"integration\",\n trigger: \"What integrations do you support?\",\n content: (\n <>\n \n We integrate with 500+ popular tools including Slack, Zapier,\n Salesforce, HubSpot, and more. You can also build custom\n integrations using our REST API and webhooks.{\" \"}\n
\n \n Our API documentation includes code examples in 10+ programming\n languages.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n\nfunction AccordionInCard() {\n const items = [\n {\n value: \"plans\",\n trigger: \"What subscription plans do you offer?\",\n content: (\n <>\n \n We offer three subscription tiers: Starter ($9/month), Professional\n ($29/month), and Enterprise ($99/month). Each plan includes\n increasing storage limits, API access, priority support, and team\n collaboration features.\n
\n \n Annual billing is available with a 20% discount. All\n plans include a 14-day free trial with no credit card required.\n
\n \n View plans\n \n \n >\n ),\n },\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content: (\n <>\n \n Billing occurs automatically at the start of each billing cycle. We\n accept all major credit cards, PayPal, and ACH transfers for\n enterprise customers.\n
\n \n You'll receive an invoice via email after each payment. You can\n update your payment method or billing information anytime in your\n account settings. Failed payments will trigger automated retry\n attempts and email notifications.\n
\n >\n ),\n },\n {\n value: \"upgrade\",\n trigger: \"Can I upgrade or downgrade my plan?\",\n content: (\n <>\n \n Yes, you can change your plan at any time. When upgrading,\n you'll be charged a prorated amount for the remainder of your\n billing cycle and immediately gain access to new features.\n
\n \n When downgrading, the change takes effect at the end of your current\n billing period, and you'll retain access to premium features\n until then. No refunds are provided for downgrades.\n
\n >\n ),\n },\n {\n value: \"cancel\",\n trigger: \"How do I cancel my subscription?\",\n content: (\n <>\n \n You can cancel your subscription anytime from your account settings.\n There are no cancellation fees or penalties. Your access will\n continue until the end of your current billing period.\n
\n \n After cancellation, your data is retained for 30 days in case you\n want to reactivate. You can export all your data before or after\n canceling. We'd love to hear your feedback about why\n you're leaving.\n
\n >\n ),\n },\n {\n value: \"refund\",\n trigger: \"What is your refund policy?\",\n content: (\n <>\n \n We offer a 30-day money-back guarantee for new subscriptions. If\n you're not satisfied within the first 30 days, contact our\n support team for a full refund.\n
\n \n After 30 days, we don't provide refunds for partial billing\n periods, but you can cancel anytime to avoid future charges.\n Enterprise customers have custom refund terms outlined in their\n contracts.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n \n Subscription & Billing \n \n Common questions about your account, plans, and payments\n \n \n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n \n \n )\n}\n\nfunction AccordionWithDisabled() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Can I access my account history?\",\n content:\n \"Yes, you can view your complete account history including all transactions, plan changes, and support tickets in the Account History section of your dashboard.\",\n disabled: false,\n },\n {\n value: \"item-2\",\n trigger: \"Premium feature information\",\n content:\n \"This section contains information about premium features. Upgrade your plan to access this content.\",\n disabled: true,\n },\n {\n value: \"item-3\",\n trigger: \"How do I update my email address?\",\n content:\n \"You can update your email address in your account settings. You'll receive a verification email at your new address to confirm the change.\",\n disabled: false,\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/accordion.json b/apps/v4/public/r/styles/base-lyra/accordion.json
index 575ae8a7e2..beef25c92e 100644
--- a/apps/v4/public/r/styles/base-lyra/accordion.json
+++ b/apps/v4/public/r/styles/base-lyra/accordion.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/accordion.tsx",
- "content": "\"use client\"\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n \n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n \n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n \n \n {children}\n \n \n \n \n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n \n \n {children}\n
\n \n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n",
+ "content": "\"use client\"\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n \n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n \n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n \n \n {children}\n \n \n \n \n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n \n \n {children}\n
\n \n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/alert-dialog-example.json b/apps/v4/public/r/styles/base-lyra/alert-dialog-example.json
index 1570298266..9c1043e479 100644
--- a/apps/v4/public/r/styles/base-lyra/alert-dialog-example.json
+++ b/apps/v4/public/r/styles/base-lyra/alert-dialog-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/alert-dialog-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertDialogExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction AlertDialogBasic() {\n return (\n \n \n Default}\n />\n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmall() {\n return (\n \n \n Small} />\n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogWithMedia() {\n return (\n \n \n Default (Media)}\n />\n \n \n \n \n \n Are you absolutely sure? \n \n This will permanently delete your account and remove your data\n from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmallWithMedia() {\n return (\n \n \n Small (Media)}\n />\n\n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogDestructive() {\n return (\n \n \n Delete Chat}\n />\n \n \n \n \n \n Delete chat? \n \n This will permanently delete this chat conversation. View{\" \"}\n Settings delete any memories saved during this\n chat.\n \n \n \n Cancel \n Delete \n \n \n \n \n )\n}\n\nfunction AlertDialogInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Alert Dialog Example \n \n Click the button below to open an alert dialog.\n \n \n \n \n }>\n Open Alert Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertDialogExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction AlertDialogBasic() {\n return (\n \n \n Default}\n />\n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmall() {\n return (\n \n \n Small} />\n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogWithMedia() {\n return (\n \n \n Default (Media)}\n />\n \n \n \n \n \n Are you absolutely sure? \n \n This will permanently delete your account and remove your data\n from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmallWithMedia() {\n return (\n \n \n Small (Media)}\n />\n\n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogDestructive() {\n return (\n \n \n Delete Chat}\n />\n \n \n \n \n \n Delete chat? \n \n This will permanently delete this chat conversation. View{\" \"}\n Settings delete any memories saved during this\n chat.\n \n \n \n Cancel \n Delete \n \n \n \n \n )\n}\n\nfunction AlertDialogInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Alert Dialog Example \n \n Click the button below to open an alert dialog.\n \n \n \n \n }>\n Open Alert Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/alert-example.json b/apps/v4/public/r/styles/base-lyra/alert-example.json
index 3e0f5c3e06..a373268410 100644
--- a/apps/v4/public/r/styles/base-lyra/alert-example.json
+++ b/apps/v4/public/r/styles/base-lyra/alert-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-lyra/examples/alert-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Alert,\n AlertAction,\n AlertDescription,\n AlertTitle,\n} from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction AlertExample1() {\n return (\n \n \n
\n Success! Your changes have been saved. \n \n
\n Success! Your changes have been saved. \n \n This is an alert with title and description.\n \n \n
\n \n This one has a description only. No title. No icon.\n \n \n
\n \n )\n}\n\nfunction AlertExample2() {\n return (\n \n \n
\n \n \n Let's try one with icon, title and a link .\n \n \n
\n \n \n This one has an icon and a description only. No title.{\" \"}\n But it has a link and a second link .\n \n \n\n
\n \n Success! Your changes have been saved \n \n This is an alert with icon, title and description.\n \n \n
\n \n \n This is a very long alert title that demonstrates how the component\n handles extended text content and potentially wraps across multiple\n lines\n \n \n
\n \n \n This is a very long alert description that demonstrates how the\n component handles extended text content and potentially wraps across\n multiple lines\n \n \n
\n \n \n This is an extremely long alert title that spans multiple lines to\n demonstrate how the component handles very lengthy headings while\n maintaining readability and proper text wrapping behavior\n \n \n This is an equally long description that contains detailed\n information about the alert. It shows how the component can\n accommodate extensive content while preserving proper spacing,\n alignment, and readability across different screen sizes and\n viewport widths. This helps ensure the user experience remains\n consistent regardless of the content length.\n \n \n
\n \n )\n}\n\nfunction AlertExample3() {\n return (\n \n \n
\n \n Something went wrong! \n \n Your session has expired. Please log in again.\n \n \n
\n \n Unable to process your payment. \n \n \n Please verify your billing information and try\n again.\n
\n \n Check your card details \n Ensure sufficient funds \n Verify billing address \n \n \n \n
\n \n )\n}\n\nfunction AlertExample4() {\n return (\n \n \n
\n \n The selected emails have been marked as spam. \n \n Undo \n \n \n
\n \n The selected emails have been marked as spam. \n \n This is a very long alert title that demonstrates how the component\n handles extended text content.\n \n \n Badge \n \n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Alert,\n AlertAction,\n AlertDescription,\n AlertTitle,\n} from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction AlertExample1() {\n return (\n \n \n
\n Success! Your changes have been saved. \n \n
\n Success! Your changes have been saved. \n \n This is an alert with title and description.\n \n \n
\n \n This one has a description only. No title. No icon.\n \n \n
\n \n )\n}\n\nfunction AlertExample2() {\n return (\n \n \n
\n \n \n Let's try one with icon, title and a link .\n \n \n
\n \n \n This one has an icon and a description only. No title.{\" \"}\n But it has a link and a second link .\n \n \n\n
\n \n Success! Your changes have been saved \n \n This is an alert with icon, title and description.\n \n \n
\n \n \n This is a very long alert title that demonstrates how the component\n handles extended text content and potentially wraps across multiple\n lines\n \n \n
\n \n \n This is a very long alert description that demonstrates how the\n component handles extended text content and potentially wraps across\n multiple lines\n \n \n
\n \n \n This is an extremely long alert title that spans multiple lines to\n demonstrate how the component handles very lengthy headings while\n maintaining readability and proper text wrapping behavior\n \n \n This is an equally long description that contains detailed\n information about the alert. It shows how the component can\n accommodate extensive content while preserving proper spacing,\n alignment, and readability across different screen sizes and\n viewport widths. This helps ensure the user experience remains\n consistent regardless of the content length.\n \n \n
\n \n )\n}\n\nfunction AlertExample3() {\n return (\n \n \n
\n \n Something went wrong! \n \n Your session has expired. Please log in again.\n \n \n
\n \n Unable to process your payment. \n \n \n Please verify your billing information and try\n again.\n
\n \n Check your card details \n Ensure sufficient funds \n Verify billing address \n \n \n \n
\n \n )\n}\n\nfunction AlertExample4() {\n return (\n \n \n
\n \n The selected emails have been marked as spam. \n \n Undo \n \n \n
\n \n The selected emails have been marked as spam. \n \n This is a very long alert title that demonstrates how the component\n handles extended text content.\n \n \n Badge \n \n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/avatar-example.json b/apps/v4/public/r/styles/base-lyra/avatar-example.json
index 2009c3b694..0ee1fdc80d 100644
--- a/apps/v4/public/r/styles/base-lyra/avatar-example.json
+++ b/apps/v4/public/r/styles/base-lyra/avatar-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/avatar-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarBadge,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AvatarExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction AvatarSizes() {\n return (\n \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n
\n CN \n \n
\n CN \n \n
\n CN \n \n
\n \n )\n}\n\nfunction AvatarWithBadge() {\n return (\n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n \n )\n}\n\nfunction AvatarWithBadgeIcon() {\n return (\n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n \n )\n}\n\nfunction AvatarGroupExample() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n )\n}\n\nfunction AvatarGroupWithCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n )\n}\n\nfunction AvatarGroupWithIconCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n )\n}\n\nfunction AvatarInEmpty() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n \n Invite Members\n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarBadge,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AvatarExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction AvatarSizes() {\n return (\n \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n
\n CN \n \n
\n CN \n \n
\n CN \n \n
\n \n )\n}\n\nfunction AvatarWithBadge() {\n return (\n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n \n )\n}\n\nfunction AvatarWithBadgeIcon() {\n return (\n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n \n )\n}\n\nfunction AvatarGroupExample() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n )\n}\n\nfunction AvatarGroupWithCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n )\n}\n\nfunction AvatarGroupWithIconCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n )\n}\n\nfunction AvatarInEmpty() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n \n Invite Members\n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/badge-example.json b/apps/v4/public/r/styles/base-lyra/badge-example.json
index db2667aa1e..9667dc1755 100644
--- a/apps/v4/public/r/styles/base-lyra/badge-example.json
+++ b/apps/v4/public/r/styles/base-lyra/badge-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-lyra/examples/badge-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function BadgeExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction BadgeVariants() {\n return (\n \n \n Default \n Secondary \n Destructive \n Outline \n Ghost \n Link \n
\n \n )\n}\n\nfunction BadgeWithIconLeft() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeWithIconRight() {\n return (\n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n \n
\n \n )\n}\n\nfunction BadgeWithSpinner() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeAsLink() {\n return (\n \n \n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n
\n \n )\n}\n\nfunction BadgeLongText() {\n return (\n \n \n \n A badge with a lot of text to see how it wraps\n \n
\n \n )\n}\n\nfunction BadgeCustomColors() {\n return (\n \n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Red\n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function BadgeExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction BadgeVariants() {\n return (\n \n \n Default \n Secondary \n Destructive \n Outline \n Ghost \n Link \n
\n \n )\n}\n\nfunction BadgeWithIconLeft() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeWithIconRight() {\n return (\n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n \n
\n \n )\n}\n\nfunction BadgeWithSpinner() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeAsLink() {\n return (\n \n \n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n
\n \n )\n}\n\nfunction BadgeLongText() {\n return (\n \n \n \n A badge with a lot of text to see how it wraps\n \n
\n \n )\n}\n\nfunction BadgeCustomColors() {\n return (\n \n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Red\n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/breadcrumb.json b/apps/v4/public/r/styles/base-lyra/breadcrumb.json
index 1bf3f87f42..d903abfeba 100644
--- a/apps/v4/public/r/styles/base-lyra/breadcrumb.json
+++ b/apps/v4/public/r/styles/base-lyra/breadcrumb.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/breadcrumb.tsx",
- "content": "import * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbLink({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"a\">) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\"hover:text-foreground transition-colors\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"breadcrumb-link\",\n },\n })\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? (\n \n )}\n \n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n svg]:size-4 flex items-center justify-center\",\n className\n )}\n {...props}\n >\n \n More \n \n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n",
+ "content": "import * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbLink({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"a\">) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\"hover:text-foreground transition-colors\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"breadcrumb-link\",\n },\n })\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? (\n \n )}\n \n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n svg]:size-4 flex items-center justify-center\",\n className\n )}\n {...props}\n >\n \n More \n \n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/button-example.json b/apps/v4/public/r/styles/base-lyra/button-example.json
index 07bbd6cf65..50e7773318 100644
--- a/apps/v4/public/r/styles/base-lyra/button-example.json
+++ b/apps/v4/public/r/styles/base-lyra/button-example.json
@@ -9,7 +9,7 @@
"files": [
{
"path": "registry/base-lyra/examples/button-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonVariantsAndSizes() {\n return (\n \n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n Secondary \n Outline \n Ghost \n Destructive \n Link \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n\nfunction ButtonIconRight() {\n return (\n \n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n )\n}\n\nfunction ButtonIconLeft() {\n return (\n \n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n )\n}\n\nfunction ButtonIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonExamples() {\n return (\n \n \n
\n Cancel \n \n Submit{\" \"}\n \n \n
\n
\n Delete \n \n \n \n
\n
} nativeButton={false}>\n Link\n \n
\n \n )\n}\n\nfunction ButtonInvalidStates() {\n return (\n \n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonVariantsAndSizes() {\n return (\n \n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n Secondary \n Outline \n Ghost \n Destructive \n Link \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n\nfunction ButtonIconRight() {\n return (\n \n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n )\n}\n\nfunction ButtonIconLeft() {\n return (\n \n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n )\n}\n\nfunction ButtonIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonExamples() {\n return (\n \n \n
\n Cancel \n \n Submit{\" \"}\n \n \n
\n
\n Delete \n \n \n \n
\n
} nativeButton={false}>\n Link\n \n
\n \n )\n}\n\nfunction ButtonInvalidStates() {\n return (\n \n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/button-group-example.json b/apps/v4/public/r/styles/base-lyra/button-group-example.json
index 8969972199..2e4ad5e00a 100644
--- a/apps/v4/public/r/styles/base-lyra/button-group-example.json
+++ b/apps/v4/public/r/styles/base-lyra/button-group-example.json
@@ -18,7 +18,7 @@
"files": [
{
"path": "registry/base-lyra/examples/button-group-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupBasic() {\n return (\n \n \n \n Button \n Another Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInput() {\n return (\n \n \n \n Button \n \n \n \n \n Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithText() {\n return (\n \n \n \n Text \n Another Button \n \n \n }>\n GPU Size\n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithDropdown() {\n return (\n \n \n \n Update \n \n }\n >\n \n \n \n Disable \n \n Uninstall\n \n \n \n \n \n Follow \n \n }\n >\n \n \n \n \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Report Conversation\n \n \n \n Block User\n \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n
\n \n )\n}\n\nconst currencyItems = [\n { label: \"$\", value: \"$\" },\n { label: \"€\", value: \"€\" },\n { label: \"£\", value: \"£\" },\n]\n\nfunction ButtonGroupWithSelect() {\n return (\n \n \n Amount \n \n \n \n \n \n \n \n {currencyItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInputGroup() {\n return (\n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithFields() {\n return (\n \n \n \n Width \n \n \n \n \n W\n \n \n px\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithLike() {\n return (\n \n \n \n {\" \"}\n Like\n \n }\n nativeButton={false}\n >\n 1.2K\n \n \n \n )\n}\n\nconst durationItems = [\n { label: \"Hours\", value: \"hours\" },\n { label: \"Days\", value: \"days\" },\n { label: \"Weeks\", value: \"weeks\" },\n]\n\nfunction ButtonGroupWithSelectAndInput() {\n return (\n \n \n \n \n \n \n \n \n {durationItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n }>\n \n \n Voice Mode \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupPagination() {\n return (\n \n \n \n \n Previous\n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n Next\n \n \n \n \n )\n}\n\nfunction ButtonGroupPaginationSplit() {\n return (\n \n \n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNavigation() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupTextAlignment() {\n return (\n \n \n Text Alignment \n \n \n Left\n \n \n Center\n \n \n Right\n \n \n Justify\n \n \n \n \n )\n}\n\nfunction ButtonGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupVerticalNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupBasic() {\n return (\n \n \n \n Button \n Another Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInput() {\n return (\n \n \n \n Button \n \n \n \n \n Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithText() {\n return (\n \n \n \n Text \n Another Button \n \n \n }>\n GPU Size\n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithDropdown() {\n return (\n \n \n \n Update \n \n }\n >\n \n \n \n Disable \n \n Uninstall\n \n \n \n \n \n Follow \n \n }\n >\n \n \n \n \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Report Conversation\n \n \n \n Block User\n \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n
\n \n )\n}\n\nconst currencyItems = [\n { label: \"$\", value: \"$\" },\n { label: \"€\", value: \"€\" },\n { label: \"£\", value: \"£\" },\n]\n\nfunction ButtonGroupWithSelect() {\n return (\n \n \n Amount \n \n \n \n \n \n \n \n {currencyItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInputGroup() {\n return (\n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithFields() {\n return (\n \n \n \n Width \n \n \n \n \n W\n \n \n px\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithLike() {\n return (\n \n \n \n {\" \"}\n Like\n \n }\n nativeButton={false}\n >\n 1.2K\n \n \n \n )\n}\n\nconst durationItems = [\n { label: \"Hours\", value: \"hours\" },\n { label: \"Days\", value: \"days\" },\n { label: \"Weeks\", value: \"weeks\" },\n]\n\nfunction ButtonGroupWithSelectAndInput() {\n return (\n \n \n \n \n \n \n \n \n {durationItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n }>\n \n \n Voice Mode \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupPagination() {\n return (\n \n \n \n \n Previous\n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n Next\n \n \n \n \n )\n}\n\nfunction ButtonGroupPaginationSplit() {\n return (\n \n \n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNavigation() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupTextAlignment() {\n return (\n \n \n Text Alignment \n \n \n Left\n \n \n Center\n \n \n Right\n \n \n Justify\n \n \n \n \n )\n}\n\nfunction ButtonGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupVerticalNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/calendar-example.json b/apps/v4/public/r/styles/base-lyra/calendar-example.json
index 594830b142..ccab7c5e65 100644
--- a/apps/v4/public/r/styles/base-lyra/calendar-example.json
+++ b/apps/v4/public/r/styles/base-lyra/calendar-example.json
@@ -15,7 +15,7 @@
"files": [
{
"path": "registry/base-lyra/examples/calendar-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { addDays, format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { es } from \"react-day-picker/locale\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar, CalendarDayButton } from \"@/registry/bases/base/ui/calendar\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CalendarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarSingle() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarMultiple() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarRange() {\n const [dateRange, setDateRange] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 12),\n to: addDays(new Date(new Date().getFullYear(), 0, 12), 30),\n })\n\n return (\n \n \n \n \n date > new Date() || date < new Date(\"1900-01-01\")\n }\n />\n \n \n \n )\n}\n\nfunction CalendarRangeMultipleMonths() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 3, 12),\n to: addDays(new Date(new Date().getFullYear(), 3, 12), 60),\n })\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarBookedDates() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n const bookedDates = Array.from(\n { length: 15 },\n (_, i) => new Date(new Date().getFullYear(), 1, 12 + i)\n )\n\n return (\n \n \n \n button]:line-through opacity-100\",\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithTime() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n\n return (\n \n \n \n \n \n \n \n \n Start Time \n \n \n \n \n \n \n \n \n End Time \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarCustomDays() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 11, 8),\n to: addDays(new Date(new Date().getFullYear(), 11, 8), 10),\n })\n\n return (\n \n \n \n {\n return date.toLocaleString(\"default\", { month: \"long\" })\n },\n }}\n components={{\n DayButton: ({ children, modifiers, day, ...props }) => {\n const isWeekend =\n day.date.getDay() === 0 || day.date.getDay() === 6\n\n return (\n \n {children}\n {!modifiers.outside && (\n {isWeekend ? \"$120\" : \"$100\"} \n )}\n \n )\n },\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithPresets() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 12)\n )\n const [currentMonth, setCurrentMonth] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 1)\n )\n\n return (\n \n \n \n \n \n \n {[\n { label: \"Today\", value: 0 },\n { label: \"Tomorrow\", value: 1 },\n { label: \"In 3 days\", value: 3 },\n { label: \"In a week\", value: 7 },\n { label: \"In 2 weeks\", value: 14 },\n ].map((preset) => (\n {\n const newDate = addDays(new Date(), preset.value)\n setDate(newDate)\n setCurrentMonth(\n new Date(newDate.getFullYear(), newDate.getMonth(), 1)\n )\n }}\n >\n {preset.label}\n \n ))}\n \n \n \n )\n}\n\nfunction DatePickerSimple() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n Date \n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n \n \n \n )\n}\n\nfunction DatePickerWithRange() {\n const [date, setDate] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 20),\n to: addDays(new Date(new Date().getFullYear(), 0, 20), 20),\n })\n\n return (\n \n \n Date Picker Range \n \n \n }\n >\n \n {date?.from ? (\n date.to ? (\n <>\n {format(date.from, \"LLL dd, y\")} -{\" \"}\n {format(date.to, \"LLL dd, y\")}\n >\n ) : (\n format(date.from, \"LLL dd, y\")\n )\n ) : (\n Pick a date \n )}\n \n \n \n \n \n \n \n )\n}\n\nfunction DataPickerWithDropdowns() {\n const [date, setDate] = React.useState()\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n \n \n Date\n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n setOpen(false)}\n >\n Done\n \n
\n \n \n \n \n )\n}\n\nfunction CalendarWeekNumbers() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n\n return (\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { addDays, format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { es } from \"react-day-picker/locale\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar, CalendarDayButton } from \"@/registry/bases/base/ui/calendar\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CalendarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarSingle() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarMultiple() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarRange() {\n const [dateRange, setDateRange] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 12),\n to: addDays(new Date(new Date().getFullYear(), 0, 12), 30),\n })\n\n return (\n \n \n \n \n date > new Date() || date < new Date(\"1900-01-01\")\n }\n />\n \n \n \n )\n}\n\nfunction CalendarRangeMultipleMonths() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 3, 12),\n to: addDays(new Date(new Date().getFullYear(), 3, 12), 60),\n })\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarBookedDates() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n const bookedDates = Array.from(\n { length: 15 },\n (_, i) => new Date(new Date().getFullYear(), 1, 12 + i)\n )\n\n return (\n \n \n \n button]:line-through opacity-100\",\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithTime() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n\n return (\n \n \n \n \n \n \n \n \n Start Time \n \n \n \n \n \n \n \n \n End Time \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarCustomDays() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 11, 8),\n to: addDays(new Date(new Date().getFullYear(), 11, 8), 10),\n })\n\n return (\n \n \n \n {\n return date.toLocaleString(\"default\", { month: \"long\" })\n },\n }}\n components={{\n DayButton: ({ children, modifiers, day, ...props }) => {\n const isWeekend =\n day.date.getDay() === 0 || day.date.getDay() === 6\n\n return (\n \n {children}\n {!modifiers.outside && (\n {isWeekend ? \"$120\" : \"$100\"} \n )}\n \n )\n },\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithPresets() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 12)\n )\n const [currentMonth, setCurrentMonth] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 1)\n )\n\n return (\n \n \n \n \n \n \n {[\n { label: \"Today\", value: 0 },\n { label: \"Tomorrow\", value: 1 },\n { label: \"In 3 days\", value: 3 },\n { label: \"In a week\", value: 7 },\n { label: \"In 2 weeks\", value: 14 },\n ].map((preset) => (\n {\n const newDate = addDays(new Date(), preset.value)\n setDate(newDate)\n setCurrentMonth(\n new Date(newDate.getFullYear(), newDate.getMonth(), 1)\n )\n }}\n >\n {preset.label}\n \n ))}\n \n \n \n )\n}\n\nfunction DatePickerSimple() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n Date \n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n \n \n \n )\n}\n\nfunction DatePickerWithRange() {\n const [date, setDate] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 20),\n to: addDays(new Date(new Date().getFullYear(), 0, 20), 20),\n })\n\n return (\n \n \n Date Picker Range \n \n \n }\n >\n \n {date?.from ? (\n date.to ? (\n <>\n {format(date.from, \"LLL dd, y\")} -{\" \"}\n {format(date.to, \"LLL dd, y\")}\n >\n ) : (\n format(date.from, \"LLL dd, y\")\n )\n ) : (\n Pick a date \n )}\n \n \n \n \n \n \n \n )\n}\n\nfunction DataPickerWithDropdowns() {\n const [date, setDate] = React.useState()\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n \n \n Date\n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n setOpen(false)}\n >\n Done\n \n
\n \n \n \n \n )\n}\n\nfunction CalendarWeekNumbers() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n\n return (\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/calendar.json b/apps/v4/public/r/styles/base-lyra/calendar.json
index 2e296880ee..5de2511806 100644
--- a/apps/v4/public/r/styles/base-lyra/calendar.json
+++ b/apps/v4/public/r/styles/base-lyra/calendar.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/ui/calendar.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button, buttonVariants } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps & {\n buttonVariant?: React.ComponentProps[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative cn-calendar-dropdown-root rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"cn-calendar-caption-label rounded-(--cell-radius) flex items-center gap-1 text-sm [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-(--cell-radius) bg-muted elative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:right-0 -z-0 isolate\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"rounded-r-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:left-0 -z-0 isolate\",\n defaultClassNames.range_end\n ),\n today: cn(\n \"bg-muted text-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n
\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n \n )\n }\n\n if (orientation === \"right\") {\n return (\n \n )\n }\n\n return (\n \n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n \n \n {children}\n
\n \n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button, buttonVariants } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps & {\n buttonVariant?: React.ComponentProps[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative cn-calendar-dropdown-root rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"cn-calendar-caption-label rounded-(--cell-radius) flex items-center gap-1 text-sm [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-(--cell-radius) bg-muted elative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:right-0 -z-0 isolate\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"rounded-r-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:left-0 -z-0 isolate\",\n defaultClassNames.range_end\n ),\n today: cn(\n \"bg-muted text-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n
\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n \n )\n }\n\n if (orientation === \"right\") {\n return (\n \n )\n }\n\n return (\n \n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n \n \n {children}\n
\n \n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/card-example.json b/apps/v4/public/r/styles/base-lyra/card-example.json
index 40d4c04424..c2251de459 100644
--- a/apps/v4/public/r/styles/base-lyra/card-example.json
+++ b/apps/v4/public/r/styles/base-lyra/card-example.json
@@ -13,7 +13,7 @@
"files": [
{
"path": "registry/base-lyra/examples/card-example.tsx",
- "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CardExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CardLogin() {\n return (\n \n \n \n Login to your account \n \n Enter your email below to login to your account\n \n \n \n \n \n \n \n Login\n \n \n Login with Google\n \n \n \n \n \n )\n}\n\nfunction CardMeetingNotes() {\n return (\n \n \n \n Meeting Notes \n \n Transcript from the meeting with the client.\n \n \n \n \n Transcribe\n \n \n \n \n \n Client requested dashboard redesign with focus on mobile\n responsiveness.\n
\n \n New analytics widgets for daily/weekly metrics \n Simplified navigation menu \n Dark mode support \n Timeline: 6 weeks \n Follow-up meeting scheduled for next Tuesday \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +8 \n \n \n \n \n )\n}\n\nfunction CardWithImage() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardWithImageSmall() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorder() {\n return (\n \n \n \n Header with Border \n \n This is a card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorder() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n\nfunction CardDefault() {\n return (\n \n \n \n Default Card \n \n This card uses the default size variant.\n \n \n \n \n The card component supports a size prop that defaults to\n "default" for standard spacing and sizing.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardSmall() {\n return (\n \n \n \n Small Card \n \n This card uses the small size variant.\n \n \n \n \n The card component supports a size prop that can be set to\n "sm" for a more compact appearance.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorderSmall() {\n return (\n \n \n \n Header with Border \n \n This is a small card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorderSmall() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n",
+ "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CardExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CardLogin() {\n return (\n \n \n \n Login to your account \n \n Enter your email below to login to your account\n \n \n \n \n \n \n \n Login\n \n \n Login with Google\n \n \n \n \n \n )\n}\n\nfunction CardMeetingNotes() {\n return (\n \n \n \n Meeting Notes \n \n Transcript from the meeting with the client.\n \n \n \n \n Transcribe\n \n \n \n \n \n Client requested dashboard redesign with focus on mobile\n responsiveness.\n
\n \n New analytics widgets for daily/weekly metrics \n Simplified navigation menu \n Dark mode support \n Timeline: 6 weeks \n Follow-up meeting scheduled for next Tuesday \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +8 \n \n \n \n \n )\n}\n\nfunction CardWithImage() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardWithImageSmall() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorder() {\n return (\n \n \n \n Header with Border \n \n This is a card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorder() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n\nfunction CardDefault() {\n return (\n \n \n \n Default Card \n \n This card uses the default size variant.\n \n \n \n \n The card component supports a size prop that defaults to\n "default" for standard spacing and sizing.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardSmall() {\n return (\n \n \n \n Small Card \n \n This card uses the small size variant.\n \n \n \n \n The card component supports a size prop that can be set to\n "sm" for a more compact appearance.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorderSmall() {\n return (\n \n \n \n Header with Border \n \n This is a small card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorderSmall() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/carousel.json b/apps/v4/public/r/styles/base-lyra/carousel.json
index 765eb9b561..4de2f3f7aa 100644
--- a/apps/v4/public/r/styles/base-lyra/carousel.json
+++ b/apps/v4/public/r/styles/base-lyra/carousel.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-lyra/ui/carousel.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType[0]\n api: ReturnType[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a \")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n \n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n
\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n \n \n Previous slide \n \n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n \n \n Next slide \n \n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType[0]\n api: ReturnType[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a \")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n \n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n
\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n \n \n Previous slide \n \n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n \n \n Next slide \n \n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/chart-example.json b/apps/v4/public/r/styles/base-lyra/chart-example.json
index 0a523932af..de9c9f80c2 100644
--- a/apps/v4/public/r/styles/base-lyra/chart-example.json
+++ b/apps/v4/public/r/styles/base-lyra/chart-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-lyra/examples/chart-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n Line,\n LineChart,\n Pie,\n PieChart,\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart,\n RadialBar,\n RadialBarChart,\n XAxis,\n} from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst areaChartData = [\n { month: \"January\", desktop: 186 },\n { month: \"February\", desktop: 305 },\n { month: \"March\", desktop: 237 },\n { month: \"April\", desktop: 73 },\n { month: \"May\", desktop: 209 },\n { month: \"June\", desktop: 214 },\n]\n\nconst areaChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nexport default function ChartExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction ChartAreaExample() {\n return (\n \n \n \n Area Chart \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n January - June 2024\n
\n
\n
\n \n \n \n )\n}\n\nconst barChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst barChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartBarExample() {\n return (\n \n \n \n Bar Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst lineChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst lineChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartLineExample() {\n return (\n \n \n \n Line Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n Showing total visitors for the last 6 months\n
\n
\n
\n \n \n \n )\n}\n\nconst pieChartData = [\n { browser: \"chrome\", visitors: 275, fill: \"var(--color-chrome)\" },\n { browser: \"safari\", visitors: 200, fill: \"var(--color-safari)\" },\n { browser: \"firefox\", visitors: 287, fill: \"var(--color-firefox)\" },\n { browser: \"edge\", visitors: 173, fill: \"var(--color-edge)\" },\n { browser: \"other\", visitors: 190, fill: \"var(--color-other)\" },\n]\n\nconst pieChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n chrome: {\n label: \"Chrome\",\n color: \"var(--chart-1)\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n firefox: {\n label: \"Firefox\",\n color: \"var(--chart-3)\",\n },\n edge: {\n label: \"Edge\",\n color: \"var(--chart-4)\",\n },\n other: {\n label: \"Other\",\n color: \"var(--chart-5)\",\n },\n} satisfies ChartConfig\n\nfunction ChartPieExample() {\n const totalVisitors = React.useMemo(() => {\n return pieChartData.reduce((acc, curr) => acc + curr.visitors, 0)\n }, [])\n\n return (\n \n \n \n Pie Chart - Donut with Text \n January - June 2024 \n \n \n \n \n }\n />\n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {totalVisitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst radarChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst radarChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadarExample() {\n return (\n \n \n \n Radar Chart - Multiple \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n }\n />\n \n \n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n January - June 2024\n
\n \n \n \n )\n}\n\nconst radialChartData = [\n { browser: \"safari\", visitors: 1260, fill: \"var(--color-safari)\" },\n]\n\nconst radialChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadialExample() {\n return (\n \n \n \n Radial Chart - Shape \n January - June 2024 \n \n \n \n \n \n \n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {radialChartData[0].visitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n Line,\n LineChart,\n Pie,\n PieChart,\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart,\n RadialBar,\n RadialBarChart,\n XAxis,\n} from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst areaChartData = [\n { month: \"January\", desktop: 186 },\n { month: \"February\", desktop: 305 },\n { month: \"March\", desktop: 237 },\n { month: \"April\", desktop: 73 },\n { month: \"May\", desktop: 209 },\n { month: \"June\", desktop: 214 },\n]\n\nconst areaChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nexport default function ChartExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction ChartAreaExample() {\n return (\n \n \n \n Area Chart \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n January - June 2024\n
\n
\n
\n \n \n \n )\n}\n\nconst barChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst barChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartBarExample() {\n return (\n \n \n \n Bar Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst lineChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst lineChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartLineExample() {\n return (\n \n \n \n Line Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n Showing total visitors for the last 6 months\n
\n
\n
\n \n \n \n )\n}\n\nconst pieChartData = [\n { browser: \"chrome\", visitors: 275, fill: \"var(--color-chrome)\" },\n { browser: \"safari\", visitors: 200, fill: \"var(--color-safari)\" },\n { browser: \"firefox\", visitors: 287, fill: \"var(--color-firefox)\" },\n { browser: \"edge\", visitors: 173, fill: \"var(--color-edge)\" },\n { browser: \"other\", visitors: 190, fill: \"var(--color-other)\" },\n]\n\nconst pieChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n chrome: {\n label: \"Chrome\",\n color: \"var(--chart-1)\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n firefox: {\n label: \"Firefox\",\n color: \"var(--chart-3)\",\n },\n edge: {\n label: \"Edge\",\n color: \"var(--chart-4)\",\n },\n other: {\n label: \"Other\",\n color: \"var(--chart-5)\",\n },\n} satisfies ChartConfig\n\nfunction ChartPieExample() {\n const totalVisitors = React.useMemo(() => {\n return pieChartData.reduce((acc, curr) => acc + curr.visitors, 0)\n }, [])\n\n return (\n \n \n \n Pie Chart - Donut with Text \n January - June 2024 \n \n \n \n \n }\n />\n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {totalVisitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst radarChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst radarChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadarExample() {\n return (\n \n \n \n Radar Chart - Multiple \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n }\n />\n \n \n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n January - June 2024\n
\n \n \n \n )\n}\n\nconst radialChartData = [\n { browser: \"safari\", visitors: 1260, fill: \"var(--color-safari)\" },\n]\n\nconst radialChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadialExample() {\n return (\n \n \n \n Radial Chart - Shape \n January - June 2024 \n \n \n \n \n \n \n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {radialChartData[0].visitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/chatgpt.json b/apps/v4/public/r/styles/base-lyra/chatgpt.json
index a636e31be4..cd24da9e2d 100644
--- a/apps/v4/public/r/styles/base-lyra/chatgpt.json
+++ b/apps/v4/public/r/styles/base-lyra/chatgpt.json
@@ -20,7 +20,7 @@
"files": [
{
"path": "registry/base-lyra/blocks/chatgpt.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ChatGPTBlock() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction PromptForm() {\n const [dictateEnabled, setDictateEnabled] = React.useState(false)\n\n return (\n \n \n \n Prompt\n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"rounded-4xl\"\n />\n }\n />\n }\n >\n \n \n \n Add files and more / \n \n \n \n \n \n \n Add photos & files\n \n \n \n Deep research\n \n \n \n Shopping research\n \n \n \n Create image\n \n \n \n \n Agent mode\n \n }\n />\n \n 35 left
\n \n More available for purchase\n
\n \n \n \n \n \n \n More\n \n \n \n \n \n \n Add sources\n \n \n \n Study and learn\n \n \n \n Web search\n \n \n \n Canvas\n \n \n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"ml-auto rounded-4xl\"\n />\n }\n >\n \n \n Dictate \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ModelSelector() {\n const [mode, setMode] = React.useState(\"auto\")\n const [model, setModel] = React.useState(\"gpt-5.1\")\n\n return (\n \n \n }\n >\n ChatGPT 5.1\n \n \n \n \n \n GPT-5.1\n \n \n \n - \n
\n Auto \n \n Decides how long to think\n \n \n \n \n \n - \n
\n Instant \n \n Answers right away\n \n \n \n \n \n - \n
\n Thinking \n \n Thinks longer for better answers\n \n \n \n \n \n \n \n \n \n Legacy models \n \n \n \n \n \n \n GPT-4\n \n \n GPT-4 Turbo\n \n \n GPT-3.5\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction GroupChatDialog() {\n return (\n \n \n }>\n Start Group Chat\n \n \n \n Use ChatGPT together \n \n Add people to your chats to plan, share ideas, and get creative.\n \n \n \n \n Learn more\n \n \n
Cancel \n
Start group chat \n
\n \n \n \n \n )\n}\n\nconst categories = [\n {\n id: \"homework\",\n label: \"Homework\",\n },\n {\n id: \"writing\",\n label: \"Writing\",\n },\n {\n id: \"health\",\n label: \"Health\",\n },\n {\n id: \"travel\",\n label: \"Travel\",\n },\n]\n\nfunction CreateProjectForm() {\n const [projectName, setProjectName] = React.useState(\"\")\n const [selectedCategory, setSelectedCategory] = React.useState(\n categories[0].id\n )\n const [memorySetting, setMemorySetting] = React.useState<\n \"default\" | \"project-only\"\n >(\"default\")\n const [selectedColor, setSelectedColor] = React.useState(\n \"var(--foreground)\"\n )\n\n return (\n \n \n \n Create Project \n \n Start a new project to keep chats, files, and custom instructions in\n one place.\n \n \n \n }\n >\n \n Memory \n \n \n \n {\n setMemorySetting(value as \"default\" | \"project-only\")\n }}\n >\n \n - \n
\n Default \n \n Project can access memories from outside chats, and\n vice versa.\n \n \n \n \n \n - \n
\n Project Only \n \n Project can only access its own memories. Its\n memories are hidden from outside chats.\n \n \n \n \n \n \n \n \n \n Note that this setting can't be changed later.\n \n \n \n \n \n \n \n \n \n \n Project Name\n \n \n {\n setProjectName(e.target.value)\n }}\n />\n \n \n \n }\n >\n \n \n \n \n {[\n \"var(--foreground)\",\n \"#fa423e\",\n \"#f59e0b\",\n \"#8b5cf6\",\n \"#ec4899\",\n \"#10b981\",\n \"#6366f1\",\n \"#14b8a6\",\n \"#f97316\",\n \"#fbbc04\",\n ].map((color) => (\n {\n setSelectedColor(color)\n }}\n >\n \n {color} \n \n ))}\n
\n \n \n \n \n \n {categories.map((category) => (\n {\n setSelectedCategory(\n selectedCategory === category.id\n ? null\n : category.id\n )\n }}\n />\n }\n >\n \n {category.label}\n \n ))}\n \n \n \n \n \n \n Projects keep chats, files, and custom instructions in one\n place. Use them for ongoing work, or just to keep things tidy.\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ChatGPTBlock() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction PromptForm() {\n const [dictateEnabled, setDictateEnabled] = React.useState(false)\n\n return (\n \n \n \n Prompt\n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"rounded-4xl\"\n />\n }\n />\n }\n >\n \n \n \n Add files and more / \n \n \n \n \n \n \n Add photos & files\n \n \n \n Deep research\n \n \n \n Shopping research\n \n \n \n Create image\n \n \n \n \n Agent mode\n \n }\n />\n \n 35 left
\n \n More available for purchase\n
\n \n \n \n \n \n \n More\n \n \n \n \n \n \n Add sources\n \n \n \n Study and learn\n \n \n \n Web search\n \n \n \n Canvas\n \n \n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"ml-auto rounded-4xl\"\n />\n }\n >\n \n \n Dictate \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ModelSelector() {\n const [mode, setMode] = React.useState(\"auto\")\n const [model, setModel] = React.useState(\"gpt-5.1\")\n\n return (\n \n \n }\n >\n ChatGPT 5.1\n \n \n \n \n \n GPT-5.1\n \n \n \n - \n
\n Auto \n \n Decides how long to think\n \n \n \n \n \n - \n
\n Instant \n \n Answers right away\n \n \n \n \n \n - \n
\n Thinking \n \n Thinks longer for better answers\n \n \n \n \n \n \n \n \n \n Legacy models \n \n \n \n \n \n \n GPT-4\n \n \n GPT-4 Turbo\n \n \n GPT-3.5\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction GroupChatDialog() {\n return (\n \n \n }>\n Start Group Chat\n \n \n \n Use ChatGPT together \n \n Add people to your chats to plan, share ideas, and get creative.\n \n \n \n \n Learn more\n \n \n
Cancel \n
Start group chat \n
\n \n \n \n \n )\n}\n\nconst categories = [\n {\n id: \"homework\",\n label: \"Homework\",\n },\n {\n id: \"writing\",\n label: \"Writing\",\n },\n {\n id: \"health\",\n label: \"Health\",\n },\n {\n id: \"travel\",\n label: \"Travel\",\n },\n]\n\nfunction CreateProjectForm() {\n const [projectName, setProjectName] = React.useState(\"\")\n const [selectedCategory, setSelectedCategory] = React.useState(\n categories[0].id\n )\n const [memorySetting, setMemorySetting] = React.useState<\n \"default\" | \"project-only\"\n >(\"default\")\n const [selectedColor, setSelectedColor] = React.useState(\n \"var(--foreground)\"\n )\n\n return (\n \n \n \n Create Project \n \n Start a new project to keep chats, files, and custom instructions in\n one place.\n \n \n \n }\n >\n \n Memory \n \n \n \n {\n setMemorySetting(value as \"default\" | \"project-only\")\n }}\n >\n \n - \n
\n Default \n \n Project can access memories from outside chats, and\n vice versa.\n \n \n \n \n \n - \n
\n Project Only \n \n Project can only access its own memories. Its\n memories are hidden from outside chats.\n \n \n \n \n \n \n \n \n \n Note that this setting can't be changed later.\n \n \n \n \n \n \n \n \n \n \n Project Name\n \n \n {\n setProjectName(e.target.value)\n }}\n />\n \n \n \n }\n >\n \n \n \n \n {[\n \"var(--foreground)\",\n \"#fa423e\",\n \"#f59e0b\",\n \"#8b5cf6\",\n \"#ec4899\",\n \"#10b981\",\n \"#6366f1\",\n \"#14b8a6\",\n \"#f97316\",\n \"#fbbc04\",\n ].map((color) => (\n {\n setSelectedColor(color)\n }}\n >\n \n {color} \n \n ))}\n
\n \n \n \n \n \n {categories.map((category) => (\n {\n setSelectedCategory(\n selectedCategory === category.id\n ? null\n : category.id\n )\n }}\n />\n }\n >\n \n {category.label}\n \n ))}\n \n \n \n \n \n \n Projects keep chats, files, and custom instructions in one\n place. Use them for ongoing work, or just to keep things tidy.\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/checkbox.json b/apps/v4/public/r/styles/base-lyra/checkbox.json
index 87912e27b3..6c89458e9f 100644
--- a/apps/v4/public/r/styles/base-lyra/checkbox.json
+++ b/apps/v4/public/r/styles/base-lyra/checkbox.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/checkbox.tsx",
- "content": "\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {\n return (\n \n svg]:size-3.5 grid place-content-center text-current transition-none\"\n >\n \n \n \n )\n}\n\nexport { Checkbox }\n",
+ "content": "\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {\n return (\n \n svg]:size-3.5 grid place-content-center text-current transition-none\"\n >\n \n \n \n )\n}\n\nexport { Checkbox }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/collapsible-example.json b/apps/v4/public/r/styles/base-lyra/collapsible-example.json
index d7f0bb605c..209ae3808b 100644
--- a/apps/v4/public/r/styles/base-lyra/collapsible-example.json
+++ b/apps/v4/public/r/styles/base-lyra/collapsible-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-lyra/examples/collapsible-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CollapsibleExample() {\n return (\n \n \n \n \n )\n}\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nfunction CollapsibleFileTree() {\n const fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [\n { name: \"favicon.ico\" },\n { name: \"logo.svg\" },\n { name: \"images\" },\n ],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n ]\n\n const renderItem = (fileItem: FileTreeItem) => {\n if (\"items\" in fileItem) {\n return (\n \n \n }\n >\n \n \n {fileItem.name}\n \n \n \n {fileItem.items.map((child) => renderItem(child))}\n
\n \n \n )\n }\n return (\n \n \n {fileItem.name} \n \n )\n }\n\n return (\n \n \n \n \n \n Explorer \n Outline \n \n \n \n \n \n {fileTree.map((item) => renderItem(item))}\n
\n \n \n \n )\n}\n\nfunction CollapsibleSettings() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n \n Radius \n \n Set the corner radius of the element.\n \n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n }\n >\n {isOpen ? (\n \n ) : (\n \n )}\n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CollapsibleExample() {\n return (\n \n \n \n \n )\n}\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nfunction CollapsibleFileTree() {\n const fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [\n { name: \"favicon.ico\" },\n { name: \"logo.svg\" },\n { name: \"images\" },\n ],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n ]\n\n const renderItem = (fileItem: FileTreeItem) => {\n if (\"items\" in fileItem) {\n return (\n \n \n }\n >\n \n \n {fileItem.name}\n \n \n \n {fileItem.items.map((child) => renderItem(child))}\n
\n \n \n )\n }\n return (\n \n \n {fileItem.name} \n \n )\n }\n\n return (\n \n \n \n \n \n Explorer \n Outline \n \n \n \n \n \n {fileTree.map((item) => renderItem(item))}\n
\n \n \n \n )\n}\n\nfunction CollapsibleSettings() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n \n Radius \n \n Set the corner radius of the element.\n \n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n }\n >\n {isOpen ? (\n \n ) : (\n \n )}\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/combobox-example.json b/apps/v4/public/r/styles/base-lyra/combobox-example.json
index a87118ed52..0e4f09d128 100644
--- a/apps/v4/public/r/styles/base-lyra/combobox-example.json
+++ b/apps/v4/public/r/styles/base-lyra/combobox-example.json
@@ -17,7 +17,7 @@
"files": [
{
"path": "registry/base-lyra/examples/combobox-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxCollection,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxInput,\n ComboboxItem,\n ComboboxLabel,\n ComboboxList,\n ComboboxSeparator,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ComboboxExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst countries = [\n { code: \"\", value: \"\", continent: \"\", label: \"Select country\" },\n { code: \"af\", value: \"afghanistan\", label: \"Afghanistan\", continent: \"Asia\" },\n { code: \"al\", value: \"albania\", label: \"Albania\", continent: \"Europe\" },\n { code: \"dz\", value: \"algeria\", label: \"Algeria\", continent: \"Africa\" },\n { code: \"ad\", value: \"andorra\", label: \"Andorra\", continent: \"Europe\" },\n { code: \"ao\", value: \"angola\", label: \"Angola\", continent: \"Africa\" },\n {\n code: \"ar\",\n value: \"argentina\",\n label: \"Argentina\",\n continent: \"South America\",\n },\n { code: \"am\", value: \"armenia\", label: \"Armenia\", continent: \"Asia\" },\n { code: \"au\", value: \"australia\", label: \"Australia\", continent: \"Oceania\" },\n { code: \"at\", value: \"austria\", label: \"Austria\", continent: \"Europe\" },\n { code: \"az\", value: \"azerbaijan\", label: \"Azerbaijan\", continent: \"Asia\" },\n {\n code: \"bs\",\n value: \"bahamas\",\n label: \"Bahamas\",\n continent: \"North America\",\n },\n { code: \"bh\", value: \"bahrain\", label: \"Bahrain\", continent: \"Asia\" },\n { code: \"bd\", value: \"bangladesh\", label: \"Bangladesh\", continent: \"Asia\" },\n {\n code: \"bb\",\n value: \"barbados\",\n label: \"Barbados\",\n continent: \"North America\",\n },\n { code: \"by\", value: \"belarus\", label: \"Belarus\", continent: \"Europe\" },\n { code: \"be\", value: \"belgium\", label: \"Belgium\", continent: \"Europe\" },\n { code: \"bz\", value: \"belize\", label: \"Belize\", continent: \"North America\" },\n { code: \"bj\", value: \"benin\", label: \"Benin\", continent: \"Africa\" },\n { code: \"bt\", value: \"bhutan\", label: \"Bhutan\", continent: \"Asia\" },\n {\n code: \"bo\",\n value: \"bolivia\",\n label: \"Bolivia\",\n continent: \"South America\",\n },\n {\n code: \"ba\",\n value: \"bosnia-and-herzegovina\",\n label: \"Bosnia and Herzegovina\",\n continent: \"Europe\",\n },\n { code: \"bw\", value: \"botswana\", label: \"Botswana\", continent: \"Africa\" },\n { code: \"br\", value: \"brazil\", label: \"Brazil\", continent: \"South America\" },\n { code: \"bn\", value: \"brunei\", label: \"Brunei\", continent: \"Asia\" },\n { code: \"bg\", value: \"bulgaria\", label: \"Bulgaria\", continent: \"Europe\" },\n {\n code: \"bf\",\n value: \"burkina-faso\",\n label: \"Burkina Faso\",\n continent: \"Africa\",\n },\n { code: \"bi\", value: \"burundi\", label: \"Burundi\", continent: \"Africa\" },\n { code: \"kh\", value: \"cambodia\", label: \"Cambodia\", continent: \"Asia\" },\n { code: \"cm\", value: \"cameroon\", label: \"Cameroon\", continent: \"Africa\" },\n { code: \"ca\", value: \"canada\", label: \"Canada\", continent: \"North America\" },\n { code: \"cv\", value: \"cape-verde\", label: \"Cape Verde\", continent: \"Africa\" },\n {\n code: \"cf\",\n value: \"central-african-republic\",\n label: \"Central African Republic\",\n continent: \"Africa\",\n },\n { code: \"td\", value: \"chad\", label: \"Chad\", continent: \"Africa\" },\n { code: \"cl\", value: \"chile\", label: \"Chile\", continent: \"South America\" },\n { code: \"cn\", value: \"china\", label: \"China\", continent: \"Asia\" },\n {\n code: \"co\",\n value: \"colombia\",\n label: \"Colombia\",\n continent: \"South America\",\n },\n { code: \"km\", value: \"comoros\", label: \"Comoros\", continent: \"Africa\" },\n { code: \"cg\", value: \"congo\", label: \"Congo\", continent: \"Africa\" },\n {\n code: \"cr\",\n value: \"costa-rica\",\n label: \"Costa Rica\",\n continent: \"North America\",\n },\n { code: \"hr\", value: \"croatia\", label: \"Croatia\", continent: \"Europe\" },\n { code: \"cu\", value: \"cuba\", label: \"Cuba\", continent: \"North America\" },\n { code: \"cy\", value: \"cyprus\", label: \"Cyprus\", continent: \"Asia\" },\n {\n code: \"cz\",\n value: \"czech-republic\",\n label: \"Czech Republic\",\n continent: \"Europe\",\n },\n { code: \"dk\", value: \"denmark\", label: \"Denmark\", continent: \"Europe\" },\n { code: \"dj\", value: \"djibouti\", label: \"Djibouti\", continent: \"Africa\" },\n {\n code: \"dm\",\n value: \"dominica\",\n label: \"Dominica\",\n continent: \"North America\",\n },\n {\n code: \"do\",\n value: \"dominican-republic\",\n label: \"Dominican Republic\",\n continent: \"North America\",\n },\n {\n code: \"ec\",\n value: \"ecuador\",\n label: \"Ecuador\",\n continent: \"South America\",\n },\n { code: \"eg\", value: \"egypt\", label: \"Egypt\", continent: \"Africa\" },\n {\n code: \"sv\",\n value: \"el-salvador\",\n label: \"El Salvador\",\n continent: \"North America\",\n },\n {\n code: \"gq\",\n value: \"equatorial-guinea\",\n label: \"Equatorial Guinea\",\n continent: \"Africa\",\n },\n { code: \"er\", value: \"eritrea\", label: \"Eritrea\", continent: \"Africa\" },\n { code: \"ee\", value: \"estonia\", label: \"Estonia\", continent: \"Europe\" },\n { code: \"et\", value: \"ethiopia\", label: \"Ethiopia\", continent: \"Africa\" },\n { code: \"fj\", value: \"fiji\", label: \"Fiji\", continent: \"Oceania\" },\n { code: \"fi\", value: \"finland\", label: \"Finland\", continent: \"Europe\" },\n { code: \"fr\", value: \"france\", label: \"France\", continent: \"Europe\" },\n { code: \"ga\", value: \"gabon\", label: \"Gabon\", continent: \"Africa\" },\n { code: \"gm\", value: \"gambia\", label: \"Gambia\", continent: \"Africa\" },\n { code: \"ge\", value: \"georgia\", label: \"Georgia\", continent: \"Asia\" },\n { code: \"de\", value: \"germany\", label: \"Germany\", continent: \"Europe\" },\n { code: \"gh\", value: \"ghana\", label: \"Ghana\", continent: \"Africa\" },\n { code: \"gr\", value: \"greece\", label: \"Greece\", continent: \"Europe\" },\n {\n code: \"gd\",\n value: \"grenada\",\n label: \"Grenada\",\n continent: \"North America\",\n },\n {\n code: \"gt\",\n value: \"guatemala\",\n label: \"Guatemala\",\n continent: \"North America\",\n },\n { code: \"gn\", value: \"guinea\", label: \"Guinea\", continent: \"Africa\" },\n {\n code: \"gw\",\n value: \"guinea-bissau\",\n label: \"Guinea-Bissau\",\n continent: \"Africa\",\n },\n { code: \"gy\", value: \"guyana\", label: \"Guyana\", continent: \"South America\" },\n { code: \"ht\", value: \"haiti\", label: \"Haiti\", continent: \"North America\" },\n {\n code: \"hn\",\n value: \"honduras\",\n label: \"Honduras\",\n continent: \"North America\",\n },\n { code: \"hu\", value: \"hungary\", label: \"Hungary\", continent: \"Europe\" },\n { code: \"is\", value: \"iceland\", label: \"Iceland\", continent: \"Europe\" },\n { code: \"in\", value: \"india\", label: \"India\", continent: \"Asia\" },\n { code: \"id\", value: \"indonesia\", label: \"Indonesia\", continent: \"Asia\" },\n { code: \"ir\", value: \"iran\", label: \"Iran\", continent: \"Asia\" },\n { code: \"iq\", value: \"iraq\", label: \"Iraq\", continent: \"Asia\" },\n { code: \"ie\", value: \"ireland\", label: \"Ireland\", continent: \"Europe\" },\n { code: \"il\", value: \"israel\", label: \"Israel\", continent: \"Asia\" },\n { code: \"it\", value: \"italy\", label: \"Italy\", continent: \"Europe\" },\n {\n code: \"jm\",\n value: \"jamaica\",\n label: \"Jamaica\",\n continent: \"North America\",\n },\n { code: \"jp\", value: \"japan\", label: \"Japan\", continent: \"Asia\" },\n { code: \"jo\", value: \"jordan\", label: \"Jordan\", continent: \"Asia\" },\n { code: \"kz\", value: \"kazakhstan\", label: \"Kazakhstan\", continent: \"Asia\" },\n { code: \"ke\", value: \"kenya\", label: \"Kenya\", continent: \"Africa\" },\n { code: \"kw\", value: \"kuwait\", label: \"Kuwait\", continent: \"Asia\" },\n { code: \"kg\", value: \"kyrgyzstan\", label: \"Kyrgyzstan\", continent: \"Asia\" },\n { code: \"la\", value: \"laos\", label: \"Laos\", continent: \"Asia\" },\n { code: \"lv\", value: \"latvia\", label: \"Latvia\", continent: \"Europe\" },\n { code: \"lb\", value: \"lebanon\", label: \"Lebanon\", continent: \"Asia\" },\n { code: \"ls\", value: \"lesotho\", label: \"Lesotho\", continent: \"Africa\" },\n { code: \"lr\", value: \"liberia\", label: \"Liberia\", continent: \"Africa\" },\n { code: \"ly\", value: \"libya\", label: \"Libya\", continent: \"Africa\" },\n {\n code: \"li\",\n value: \"liechtenstein\",\n label: \"Liechtenstein\",\n continent: \"Europe\",\n },\n { code: \"lt\", value: \"lithuania\", label: \"Lithuania\", continent: \"Europe\" },\n { code: \"lu\", value: \"luxembourg\", label: \"Luxembourg\", continent: \"Europe\" },\n { code: \"mg\", value: \"madagascar\", label: \"Madagascar\", continent: \"Africa\" },\n { code: \"mw\", value: \"malawi\", label: \"Malawi\", continent: \"Africa\" },\n { code: \"my\", value: \"malaysia\", label: \"Malaysia\", continent: \"Asia\" },\n { code: \"mv\", value: \"maldives\", label: \"Maldives\", continent: \"Asia\" },\n { code: \"ml\", value: \"mali\", label: \"Mali\", continent: \"Africa\" },\n { code: \"mt\", value: \"malta\", label: \"Malta\", continent: \"Europe\" },\n {\n code: \"mh\",\n value: \"marshall-islands\",\n label: \"Marshall Islands\",\n continent: \"Oceania\",\n },\n { code: \"mr\", value: \"mauritania\", label: \"Mauritania\", continent: \"Africa\" },\n { code: \"mu\", value: \"mauritius\", label: \"Mauritius\", continent: \"Africa\" },\n { code: \"mx\", value: \"mexico\", label: \"Mexico\", continent: \"North America\" },\n {\n code: \"fm\",\n value: \"micronesia\",\n label: \"Micronesia\",\n continent: \"Oceania\",\n },\n { code: \"md\", value: \"moldova\", label: \"Moldova\", continent: \"Europe\" },\n { code: \"mc\", value: \"monaco\", label: \"Monaco\", continent: \"Europe\" },\n { code: \"mn\", value: \"mongolia\", label: \"Mongolia\", continent: \"Asia\" },\n { code: \"me\", value: \"montenegro\", label: \"Montenegro\", continent: \"Europe\" },\n { code: \"ma\", value: \"morocco\", label: \"Morocco\", continent: \"Africa\" },\n { code: \"mz\", value: \"mozambique\", label: \"Mozambique\", continent: \"Africa\" },\n { code: \"mm\", value: \"myanmar\", label: \"Myanmar\", continent: \"Asia\" },\n { code: \"na\", value: \"namibia\", label: \"Namibia\", continent: \"Africa\" },\n { code: \"nr\", value: \"nauru\", label: \"Nauru\", continent: \"Oceania\" },\n { code: \"np\", value: \"nepal\", label: \"Nepal\", continent: \"Asia\" },\n {\n code: \"nl\",\n value: \"netherlands\",\n label: \"Netherlands\",\n continent: \"Europe\",\n },\n {\n code: \"nz\",\n value: \"new-zealand\",\n label: \"New Zealand\",\n continent: \"Oceania\",\n },\n {\n code: \"ni\",\n value: \"nicaragua\",\n label: \"Nicaragua\",\n continent: \"North America\",\n },\n { code: \"ne\", value: \"niger\", label: \"Niger\", continent: \"Africa\" },\n { code: \"ng\", value: \"nigeria\", label: \"Nigeria\", continent: \"Africa\" },\n { code: \"kp\", value: \"north-korea\", label: \"North Korea\", continent: \"Asia\" },\n {\n code: \"mk\",\n value: \"north-macedonia\",\n label: \"North Macedonia\",\n continent: \"Europe\",\n },\n { code: \"no\", value: \"norway\", label: \"Norway\", continent: \"Europe\" },\n { code: \"om\", value: \"oman\", label: \"Oman\", continent: \"Asia\" },\n { code: \"pk\", value: \"pakistan\", label: \"Pakistan\", continent: \"Asia\" },\n { code: \"pw\", value: \"palau\", label: \"Palau\", continent: \"Oceania\" },\n { code: \"ps\", value: \"palestine\", label: \"Palestine\", continent: \"Asia\" },\n { code: \"pa\", value: \"panama\", label: \"Panama\", continent: \"North America\" },\n {\n code: \"pg\",\n value: \"papua-new-guinea\",\n label: \"Papua New Guinea\",\n continent: \"Oceania\",\n },\n {\n code: \"py\",\n value: \"paraguay\",\n label: \"Paraguay\",\n continent: \"South America\",\n },\n { code: \"pe\", value: \"peru\", label: \"Peru\", continent: \"South America\" },\n { code: \"ph\", value: \"philippines\", label: \"Philippines\", continent: \"Asia\" },\n { code: \"pl\", value: \"poland\", label: \"Poland\", continent: \"Europe\" },\n { code: \"pt\", value: \"portugal\", label: \"Portugal\", continent: \"Europe\" },\n { code: \"qa\", value: \"qatar\", label: \"Qatar\", continent: \"Asia\" },\n { code: \"ro\", value: \"romania\", label: \"Romania\", continent: \"Europe\" },\n { code: \"ru\", value: \"russia\", label: \"Russia\", continent: \"Europe\" },\n { code: \"rw\", value: \"rwanda\", label: \"Rwanda\", continent: \"Africa\" },\n { code: \"ws\", value: \"samoa\", label: \"Samoa\", continent: \"Oceania\" },\n { code: \"sm\", value: \"san-marino\", label: \"San Marino\", continent: \"Europe\" },\n {\n code: \"sa\",\n value: \"saudi-arabia\",\n label: \"Saudi Arabia\",\n continent: \"Asia\",\n },\n { code: \"sn\", value: \"senegal\", label: \"Senegal\", continent: \"Africa\" },\n { code: \"rs\", value: \"serbia\", label: \"Serbia\", continent: \"Europe\" },\n { code: \"sc\", value: \"seychelles\", label: \"Seychelles\", continent: \"Africa\" },\n {\n code: \"sl\",\n value: \"sierra-leone\",\n label: \"Sierra Leone\",\n continent: \"Africa\",\n },\n { code: \"sg\", value: \"singapore\", label: \"Singapore\", continent: \"Asia\" },\n { code: \"sk\", value: \"slovakia\", label: \"Slovakia\", continent: \"Europe\" },\n { code: \"si\", value: \"slovenia\", label: \"Slovenia\", continent: \"Europe\" },\n {\n code: \"sb\",\n value: \"solomon-islands\",\n label: \"Solomon Islands\",\n continent: \"Oceania\",\n },\n { code: \"so\", value: \"somalia\", label: \"Somalia\", continent: \"Africa\" },\n {\n code: \"za\",\n value: \"south-africa\",\n label: \"South Africa\",\n continent: \"Africa\",\n },\n { code: \"kr\", value: \"south-korea\", label: \"South Korea\", continent: \"Asia\" },\n {\n code: \"ss\",\n value: \"south-sudan\",\n label: \"South Sudan\",\n continent: \"Africa\",\n },\n { code: \"es\", value: \"spain\", label: \"Spain\", continent: \"Europe\" },\n { code: \"lk\", value: \"sri-lanka\", label: \"Sri Lanka\", continent: \"Asia\" },\n { code: \"sd\", value: \"sudan\", label: \"Sudan\", continent: \"Africa\" },\n {\n code: \"sr\",\n value: \"suriname\",\n label: \"Suriname\",\n continent: \"South America\",\n },\n { code: \"se\", value: \"sweden\", label: \"Sweden\", continent: \"Europe\" },\n {\n code: \"ch\",\n value: \"switzerland\",\n label: \"Switzerland\",\n continent: \"Europe\",\n },\n { code: \"sy\", value: \"syria\", label: \"Syria\", continent: \"Asia\" },\n { code: \"tw\", value: \"taiwan\", label: \"Taiwan\", continent: \"Asia\" },\n { code: \"tj\", value: \"tajikistan\", label: \"Tajikistan\", continent: \"Asia\" },\n { code: \"tz\", value: \"tanzania\", label: \"Tanzania\", continent: \"Africa\" },\n { code: \"th\", value: \"thailand\", label: \"Thailand\", continent: \"Asia\" },\n { code: \"tl\", value: \"timor-leste\", label: \"Timor-Leste\", continent: \"Asia\" },\n { code: \"tg\", value: \"togo\", label: \"Togo\", continent: \"Africa\" },\n { code: \"to\", value: \"tonga\", label: \"Tonga\", continent: \"Oceania\" },\n {\n code: \"tt\",\n value: \"trinidad-and-tobago\",\n label: \"Trinidad and Tobago\",\n continent: \"North America\",\n },\n { code: \"tn\", value: \"tunisia\", label: \"Tunisia\", continent: \"Africa\" },\n { code: \"tr\", value: \"turkey\", label: \"Turkey\", continent: \"Asia\" },\n {\n code: \"tm\",\n value: \"turkmenistan\",\n label: \"Turkmenistan\",\n continent: \"Asia\",\n },\n { code: \"tv\", value: \"tuvalu\", label: \"Tuvalu\", continent: \"Oceania\" },\n { code: \"ug\", value: \"uganda\", label: \"Uganda\", continent: \"Africa\" },\n { code: \"ua\", value: \"ukraine\", label: \"Ukraine\", continent: \"Europe\" },\n {\n code: \"ae\",\n value: \"united-arab-emirates\",\n label: \"United Arab Emirates\",\n continent: \"Asia\",\n },\n {\n code: \"gb\",\n value: \"united-kingdom\",\n label: \"United Kingdom\",\n continent: \"Europe\",\n },\n {\n code: \"us\",\n value: \"united-states\",\n label: \"United States\",\n continent: \"North America\",\n },\n {\n code: \"uy\",\n value: \"uruguay\",\n label: \"Uruguay\",\n continent: \"South America\",\n },\n { code: \"uz\", value: \"uzbekistan\", label: \"Uzbekistan\", continent: \"Asia\" },\n { code: \"vu\", value: \"vanuatu\", label: \"Vanuatu\", continent: \"Oceania\" },\n {\n code: \"va\",\n value: \"vatican-city\",\n label: \"Vatican City\",\n continent: \"Europe\",\n },\n {\n code: \"ve\",\n value: \"venezuela\",\n label: \"Venezuela\",\n continent: \"South America\",\n },\n { code: \"vn\", value: \"vietnam\", label: \"Vietnam\", continent: \"Asia\" },\n { code: \"ye\", value: \"yemen\", label: \"Yemen\", continent: \"Asia\" },\n { code: \"zm\", value: \"zambia\", label: \"Zambia\", continent: \"Africa\" },\n { code: \"zw\", value: \"zimbabwe\", label: \"Zimbabwe\", continent: \"Africa\" },\n]\n\nconst timezones = [\n {\n value: \"Americas\",\n items: [\n \"(GMT-5) New York\",\n \"(GMT-8) Los Angeles\",\n \"(GMT-6) Chicago\",\n \"(GMT-5) Toronto\",\n \"(GMT-8) Vancouver\",\n \"(GMT-3) São Paulo\",\n ],\n },\n {\n value: \"Europe\",\n items: [\n \"(GMT+0) London\",\n \"(GMT+1) Paris\",\n \"(GMT+1) Berlin\",\n \"(GMT+1) Rome\",\n \"(GMT+1) Madrid\",\n \"(GMT+1) Amsterdam\",\n ],\n },\n {\n value: \"Asia/Pacific\",\n items: [\n \"(GMT+9) Tokyo\",\n \"(GMT+8) Shanghai\",\n \"(GMT+8) Singapore\",\n \"(GMT+4) Dubai\",\n \"(GMT+11) Sydney\",\n \"(GMT+9) Seoul\",\n ],\n },\n] as const\n\nfunction ComboboxBasic() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxDisabled() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInvalid() {\n return (\n \n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n Please select a valid framework. \n \n \n
\n \n )\n}\n\nfunction ComboboxWithClear() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroups() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroupsAndSeparator() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithForm() {\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n const formData = new FormData(event.target as HTMLFormElement)\n const framework = formData.get(\"framework\") as string\n toast(`You selected ${framework} as your framework.`)\n }\n\n return (\n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst largeListItems = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`)\n\nfunction ComboboxLargeList() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxAutoHighlight() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboxboxInputAddon() {\n return (\n \n \n \n \n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInPopup() {\n return (\n \n \n \n }\n >\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item.label}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultiple() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleDisabled() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleInvalid() {\n const anchor1 = useComboboxAnchor()\n const anchor2 = useComboboxAnchor()\n\n return (\n \n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Frameworks\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n Please select at least one framework.\n \n \n \n
\n \n )\n}\n\nfunction ComboboxMultipleNoRemove() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n \n {value}\n \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithCustomItems() {\n return (\n \n country.code !== \"\")}\n itemToStringValue={(country: (typeof countries)[number]) =>\n country.label\n }\n >\n \n \n No countries found. \n \n {(country) => (\n \n - \n
\n \n {country.label}\n \n \n {country.continent} ({country.code})\n \n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInDialog() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Framework \n \n Choose your preferred framework from the list below.\n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n setOpen(false)}\n >\n Cancel\n \n {\n toast(\"Framework selected.\")\n setOpen(false)\n }}\n >\n Confirm\n \n \n \n \n \n )\n}\n\nconst items = [\n {\n label: \"Select a framework\",\n value: null,\n },\n {\n label: \"React\",\n value: \"react\",\n },\n {\n label: \"Vue\",\n value: \"vue\",\n },\n {\n label: \"Angular\",\n value: \"angular\",\n },\n {\n label: \"Svelte\",\n value: \"svelte\",\n },\n {\n label: \"Solid\",\n value: \"solid\",\n },\n {\n label: \"Preact\",\n value: \"preact\",\n },\n {\n label: \"Next.js\",\n value: \"next.js\",\n },\n]\n\nfunction ComboboxWithOtherInputs() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Select a framework\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxCollection,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxInput,\n ComboboxItem,\n ComboboxLabel,\n ComboboxList,\n ComboboxSeparator,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ComboboxExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst countries = [\n { code: \"\", value: \"\", continent: \"\", label: \"Select country\" },\n { code: \"af\", value: \"afghanistan\", label: \"Afghanistan\", continent: \"Asia\" },\n { code: \"al\", value: \"albania\", label: \"Albania\", continent: \"Europe\" },\n { code: \"dz\", value: \"algeria\", label: \"Algeria\", continent: \"Africa\" },\n { code: \"ad\", value: \"andorra\", label: \"Andorra\", continent: \"Europe\" },\n { code: \"ao\", value: \"angola\", label: \"Angola\", continent: \"Africa\" },\n {\n code: \"ar\",\n value: \"argentina\",\n label: \"Argentina\",\n continent: \"South America\",\n },\n { code: \"am\", value: \"armenia\", label: \"Armenia\", continent: \"Asia\" },\n { code: \"au\", value: \"australia\", label: \"Australia\", continent: \"Oceania\" },\n { code: \"at\", value: \"austria\", label: \"Austria\", continent: \"Europe\" },\n { code: \"az\", value: \"azerbaijan\", label: \"Azerbaijan\", continent: \"Asia\" },\n {\n code: \"bs\",\n value: \"bahamas\",\n label: \"Bahamas\",\n continent: \"North America\",\n },\n { code: \"bh\", value: \"bahrain\", label: \"Bahrain\", continent: \"Asia\" },\n { code: \"bd\", value: \"bangladesh\", label: \"Bangladesh\", continent: \"Asia\" },\n {\n code: \"bb\",\n value: \"barbados\",\n label: \"Barbados\",\n continent: \"North America\",\n },\n { code: \"by\", value: \"belarus\", label: \"Belarus\", continent: \"Europe\" },\n { code: \"be\", value: \"belgium\", label: \"Belgium\", continent: \"Europe\" },\n { code: \"bz\", value: \"belize\", label: \"Belize\", continent: \"North America\" },\n { code: \"bj\", value: \"benin\", label: \"Benin\", continent: \"Africa\" },\n { code: \"bt\", value: \"bhutan\", label: \"Bhutan\", continent: \"Asia\" },\n {\n code: \"bo\",\n value: \"bolivia\",\n label: \"Bolivia\",\n continent: \"South America\",\n },\n {\n code: \"ba\",\n value: \"bosnia-and-herzegovina\",\n label: \"Bosnia and Herzegovina\",\n continent: \"Europe\",\n },\n { code: \"bw\", value: \"botswana\", label: \"Botswana\", continent: \"Africa\" },\n { code: \"br\", value: \"brazil\", label: \"Brazil\", continent: \"South America\" },\n { code: \"bn\", value: \"brunei\", label: \"Brunei\", continent: \"Asia\" },\n { code: \"bg\", value: \"bulgaria\", label: \"Bulgaria\", continent: \"Europe\" },\n {\n code: \"bf\",\n value: \"burkina-faso\",\n label: \"Burkina Faso\",\n continent: \"Africa\",\n },\n { code: \"bi\", value: \"burundi\", label: \"Burundi\", continent: \"Africa\" },\n { code: \"kh\", value: \"cambodia\", label: \"Cambodia\", continent: \"Asia\" },\n { code: \"cm\", value: \"cameroon\", label: \"Cameroon\", continent: \"Africa\" },\n { code: \"ca\", value: \"canada\", label: \"Canada\", continent: \"North America\" },\n { code: \"cv\", value: \"cape-verde\", label: \"Cape Verde\", continent: \"Africa\" },\n {\n code: \"cf\",\n value: \"central-african-republic\",\n label: \"Central African Republic\",\n continent: \"Africa\",\n },\n { code: \"td\", value: \"chad\", label: \"Chad\", continent: \"Africa\" },\n { code: \"cl\", value: \"chile\", label: \"Chile\", continent: \"South America\" },\n { code: \"cn\", value: \"china\", label: \"China\", continent: \"Asia\" },\n {\n code: \"co\",\n value: \"colombia\",\n label: \"Colombia\",\n continent: \"South America\",\n },\n { code: \"km\", value: \"comoros\", label: \"Comoros\", continent: \"Africa\" },\n { code: \"cg\", value: \"congo\", label: \"Congo\", continent: \"Africa\" },\n {\n code: \"cr\",\n value: \"costa-rica\",\n label: \"Costa Rica\",\n continent: \"North America\",\n },\n { code: \"hr\", value: \"croatia\", label: \"Croatia\", continent: \"Europe\" },\n { code: \"cu\", value: \"cuba\", label: \"Cuba\", continent: \"North America\" },\n { code: \"cy\", value: \"cyprus\", label: \"Cyprus\", continent: \"Asia\" },\n {\n code: \"cz\",\n value: \"czech-republic\",\n label: \"Czech Republic\",\n continent: \"Europe\",\n },\n { code: \"dk\", value: \"denmark\", label: \"Denmark\", continent: \"Europe\" },\n { code: \"dj\", value: \"djibouti\", label: \"Djibouti\", continent: \"Africa\" },\n {\n code: \"dm\",\n value: \"dominica\",\n label: \"Dominica\",\n continent: \"North America\",\n },\n {\n code: \"do\",\n value: \"dominican-republic\",\n label: \"Dominican Republic\",\n continent: \"North America\",\n },\n {\n code: \"ec\",\n value: \"ecuador\",\n label: \"Ecuador\",\n continent: \"South America\",\n },\n { code: \"eg\", value: \"egypt\", label: \"Egypt\", continent: \"Africa\" },\n {\n code: \"sv\",\n value: \"el-salvador\",\n label: \"El Salvador\",\n continent: \"North America\",\n },\n {\n code: \"gq\",\n value: \"equatorial-guinea\",\n label: \"Equatorial Guinea\",\n continent: \"Africa\",\n },\n { code: \"er\", value: \"eritrea\", label: \"Eritrea\", continent: \"Africa\" },\n { code: \"ee\", value: \"estonia\", label: \"Estonia\", continent: \"Europe\" },\n { code: \"et\", value: \"ethiopia\", label: \"Ethiopia\", continent: \"Africa\" },\n { code: \"fj\", value: \"fiji\", label: \"Fiji\", continent: \"Oceania\" },\n { code: \"fi\", value: \"finland\", label: \"Finland\", continent: \"Europe\" },\n { code: \"fr\", value: \"france\", label: \"France\", continent: \"Europe\" },\n { code: \"ga\", value: \"gabon\", label: \"Gabon\", continent: \"Africa\" },\n { code: \"gm\", value: \"gambia\", label: \"Gambia\", continent: \"Africa\" },\n { code: \"ge\", value: \"georgia\", label: \"Georgia\", continent: \"Asia\" },\n { code: \"de\", value: \"germany\", label: \"Germany\", continent: \"Europe\" },\n { code: \"gh\", value: \"ghana\", label: \"Ghana\", continent: \"Africa\" },\n { code: \"gr\", value: \"greece\", label: \"Greece\", continent: \"Europe\" },\n {\n code: \"gd\",\n value: \"grenada\",\n label: \"Grenada\",\n continent: \"North America\",\n },\n {\n code: \"gt\",\n value: \"guatemala\",\n label: \"Guatemala\",\n continent: \"North America\",\n },\n { code: \"gn\", value: \"guinea\", label: \"Guinea\", continent: \"Africa\" },\n {\n code: \"gw\",\n value: \"guinea-bissau\",\n label: \"Guinea-Bissau\",\n continent: \"Africa\",\n },\n { code: \"gy\", value: \"guyana\", label: \"Guyana\", continent: \"South America\" },\n { code: \"ht\", value: \"haiti\", label: \"Haiti\", continent: \"North America\" },\n {\n code: \"hn\",\n value: \"honduras\",\n label: \"Honduras\",\n continent: \"North America\",\n },\n { code: \"hu\", value: \"hungary\", label: \"Hungary\", continent: \"Europe\" },\n { code: \"is\", value: \"iceland\", label: \"Iceland\", continent: \"Europe\" },\n { code: \"in\", value: \"india\", label: \"India\", continent: \"Asia\" },\n { code: \"id\", value: \"indonesia\", label: \"Indonesia\", continent: \"Asia\" },\n { code: \"ir\", value: \"iran\", label: \"Iran\", continent: \"Asia\" },\n { code: \"iq\", value: \"iraq\", label: \"Iraq\", continent: \"Asia\" },\n { code: \"ie\", value: \"ireland\", label: \"Ireland\", continent: \"Europe\" },\n { code: \"il\", value: \"israel\", label: \"Israel\", continent: \"Asia\" },\n { code: \"it\", value: \"italy\", label: \"Italy\", continent: \"Europe\" },\n {\n code: \"jm\",\n value: \"jamaica\",\n label: \"Jamaica\",\n continent: \"North America\",\n },\n { code: \"jp\", value: \"japan\", label: \"Japan\", continent: \"Asia\" },\n { code: \"jo\", value: \"jordan\", label: \"Jordan\", continent: \"Asia\" },\n { code: \"kz\", value: \"kazakhstan\", label: \"Kazakhstan\", continent: \"Asia\" },\n { code: \"ke\", value: \"kenya\", label: \"Kenya\", continent: \"Africa\" },\n { code: \"kw\", value: \"kuwait\", label: \"Kuwait\", continent: \"Asia\" },\n { code: \"kg\", value: \"kyrgyzstan\", label: \"Kyrgyzstan\", continent: \"Asia\" },\n { code: \"la\", value: \"laos\", label: \"Laos\", continent: \"Asia\" },\n { code: \"lv\", value: \"latvia\", label: \"Latvia\", continent: \"Europe\" },\n { code: \"lb\", value: \"lebanon\", label: \"Lebanon\", continent: \"Asia\" },\n { code: \"ls\", value: \"lesotho\", label: \"Lesotho\", continent: \"Africa\" },\n { code: \"lr\", value: \"liberia\", label: \"Liberia\", continent: \"Africa\" },\n { code: \"ly\", value: \"libya\", label: \"Libya\", continent: \"Africa\" },\n {\n code: \"li\",\n value: \"liechtenstein\",\n label: \"Liechtenstein\",\n continent: \"Europe\",\n },\n { code: \"lt\", value: \"lithuania\", label: \"Lithuania\", continent: \"Europe\" },\n { code: \"lu\", value: \"luxembourg\", label: \"Luxembourg\", continent: \"Europe\" },\n { code: \"mg\", value: \"madagascar\", label: \"Madagascar\", continent: \"Africa\" },\n { code: \"mw\", value: \"malawi\", label: \"Malawi\", continent: \"Africa\" },\n { code: \"my\", value: \"malaysia\", label: \"Malaysia\", continent: \"Asia\" },\n { code: \"mv\", value: \"maldives\", label: \"Maldives\", continent: \"Asia\" },\n { code: \"ml\", value: \"mali\", label: \"Mali\", continent: \"Africa\" },\n { code: \"mt\", value: \"malta\", label: \"Malta\", continent: \"Europe\" },\n {\n code: \"mh\",\n value: \"marshall-islands\",\n label: \"Marshall Islands\",\n continent: \"Oceania\",\n },\n { code: \"mr\", value: \"mauritania\", label: \"Mauritania\", continent: \"Africa\" },\n { code: \"mu\", value: \"mauritius\", label: \"Mauritius\", continent: \"Africa\" },\n { code: \"mx\", value: \"mexico\", label: \"Mexico\", continent: \"North America\" },\n {\n code: \"fm\",\n value: \"micronesia\",\n label: \"Micronesia\",\n continent: \"Oceania\",\n },\n { code: \"md\", value: \"moldova\", label: \"Moldova\", continent: \"Europe\" },\n { code: \"mc\", value: \"monaco\", label: \"Monaco\", continent: \"Europe\" },\n { code: \"mn\", value: \"mongolia\", label: \"Mongolia\", continent: \"Asia\" },\n { code: \"me\", value: \"montenegro\", label: \"Montenegro\", continent: \"Europe\" },\n { code: \"ma\", value: \"morocco\", label: \"Morocco\", continent: \"Africa\" },\n { code: \"mz\", value: \"mozambique\", label: \"Mozambique\", continent: \"Africa\" },\n { code: \"mm\", value: \"myanmar\", label: \"Myanmar\", continent: \"Asia\" },\n { code: \"na\", value: \"namibia\", label: \"Namibia\", continent: \"Africa\" },\n { code: \"nr\", value: \"nauru\", label: \"Nauru\", continent: \"Oceania\" },\n { code: \"np\", value: \"nepal\", label: \"Nepal\", continent: \"Asia\" },\n {\n code: \"nl\",\n value: \"netherlands\",\n label: \"Netherlands\",\n continent: \"Europe\",\n },\n {\n code: \"nz\",\n value: \"new-zealand\",\n label: \"New Zealand\",\n continent: \"Oceania\",\n },\n {\n code: \"ni\",\n value: \"nicaragua\",\n label: \"Nicaragua\",\n continent: \"North America\",\n },\n { code: \"ne\", value: \"niger\", label: \"Niger\", continent: \"Africa\" },\n { code: \"ng\", value: \"nigeria\", label: \"Nigeria\", continent: \"Africa\" },\n { code: \"kp\", value: \"north-korea\", label: \"North Korea\", continent: \"Asia\" },\n {\n code: \"mk\",\n value: \"north-macedonia\",\n label: \"North Macedonia\",\n continent: \"Europe\",\n },\n { code: \"no\", value: \"norway\", label: \"Norway\", continent: \"Europe\" },\n { code: \"om\", value: \"oman\", label: \"Oman\", continent: \"Asia\" },\n { code: \"pk\", value: \"pakistan\", label: \"Pakistan\", continent: \"Asia\" },\n { code: \"pw\", value: \"palau\", label: \"Palau\", continent: \"Oceania\" },\n { code: \"ps\", value: \"palestine\", label: \"Palestine\", continent: \"Asia\" },\n { code: \"pa\", value: \"panama\", label: \"Panama\", continent: \"North America\" },\n {\n code: \"pg\",\n value: \"papua-new-guinea\",\n label: \"Papua New Guinea\",\n continent: \"Oceania\",\n },\n {\n code: \"py\",\n value: \"paraguay\",\n label: \"Paraguay\",\n continent: \"South America\",\n },\n { code: \"pe\", value: \"peru\", label: \"Peru\", continent: \"South America\" },\n { code: \"ph\", value: \"philippines\", label: \"Philippines\", continent: \"Asia\" },\n { code: \"pl\", value: \"poland\", label: \"Poland\", continent: \"Europe\" },\n { code: \"pt\", value: \"portugal\", label: \"Portugal\", continent: \"Europe\" },\n { code: \"qa\", value: \"qatar\", label: \"Qatar\", continent: \"Asia\" },\n { code: \"ro\", value: \"romania\", label: \"Romania\", continent: \"Europe\" },\n { code: \"ru\", value: \"russia\", label: \"Russia\", continent: \"Europe\" },\n { code: \"rw\", value: \"rwanda\", label: \"Rwanda\", continent: \"Africa\" },\n { code: \"ws\", value: \"samoa\", label: \"Samoa\", continent: \"Oceania\" },\n { code: \"sm\", value: \"san-marino\", label: \"San Marino\", continent: \"Europe\" },\n {\n code: \"sa\",\n value: \"saudi-arabia\",\n label: \"Saudi Arabia\",\n continent: \"Asia\",\n },\n { code: \"sn\", value: \"senegal\", label: \"Senegal\", continent: \"Africa\" },\n { code: \"rs\", value: \"serbia\", label: \"Serbia\", continent: \"Europe\" },\n { code: \"sc\", value: \"seychelles\", label: \"Seychelles\", continent: \"Africa\" },\n {\n code: \"sl\",\n value: \"sierra-leone\",\n label: \"Sierra Leone\",\n continent: \"Africa\",\n },\n { code: \"sg\", value: \"singapore\", label: \"Singapore\", continent: \"Asia\" },\n { code: \"sk\", value: \"slovakia\", label: \"Slovakia\", continent: \"Europe\" },\n { code: \"si\", value: \"slovenia\", label: \"Slovenia\", continent: \"Europe\" },\n {\n code: \"sb\",\n value: \"solomon-islands\",\n label: \"Solomon Islands\",\n continent: \"Oceania\",\n },\n { code: \"so\", value: \"somalia\", label: \"Somalia\", continent: \"Africa\" },\n {\n code: \"za\",\n value: \"south-africa\",\n label: \"South Africa\",\n continent: \"Africa\",\n },\n { code: \"kr\", value: \"south-korea\", label: \"South Korea\", continent: \"Asia\" },\n {\n code: \"ss\",\n value: \"south-sudan\",\n label: \"South Sudan\",\n continent: \"Africa\",\n },\n { code: \"es\", value: \"spain\", label: \"Spain\", continent: \"Europe\" },\n { code: \"lk\", value: \"sri-lanka\", label: \"Sri Lanka\", continent: \"Asia\" },\n { code: \"sd\", value: \"sudan\", label: \"Sudan\", continent: \"Africa\" },\n {\n code: \"sr\",\n value: \"suriname\",\n label: \"Suriname\",\n continent: \"South America\",\n },\n { code: \"se\", value: \"sweden\", label: \"Sweden\", continent: \"Europe\" },\n {\n code: \"ch\",\n value: \"switzerland\",\n label: \"Switzerland\",\n continent: \"Europe\",\n },\n { code: \"sy\", value: \"syria\", label: \"Syria\", continent: \"Asia\" },\n { code: \"tw\", value: \"taiwan\", label: \"Taiwan\", continent: \"Asia\" },\n { code: \"tj\", value: \"tajikistan\", label: \"Tajikistan\", continent: \"Asia\" },\n { code: \"tz\", value: \"tanzania\", label: \"Tanzania\", continent: \"Africa\" },\n { code: \"th\", value: \"thailand\", label: \"Thailand\", continent: \"Asia\" },\n { code: \"tl\", value: \"timor-leste\", label: \"Timor-Leste\", continent: \"Asia\" },\n { code: \"tg\", value: \"togo\", label: \"Togo\", continent: \"Africa\" },\n { code: \"to\", value: \"tonga\", label: \"Tonga\", continent: \"Oceania\" },\n {\n code: \"tt\",\n value: \"trinidad-and-tobago\",\n label: \"Trinidad and Tobago\",\n continent: \"North America\",\n },\n { code: \"tn\", value: \"tunisia\", label: \"Tunisia\", continent: \"Africa\" },\n { code: \"tr\", value: \"turkey\", label: \"Turkey\", continent: \"Asia\" },\n {\n code: \"tm\",\n value: \"turkmenistan\",\n label: \"Turkmenistan\",\n continent: \"Asia\",\n },\n { code: \"tv\", value: \"tuvalu\", label: \"Tuvalu\", continent: \"Oceania\" },\n { code: \"ug\", value: \"uganda\", label: \"Uganda\", continent: \"Africa\" },\n { code: \"ua\", value: \"ukraine\", label: \"Ukraine\", continent: \"Europe\" },\n {\n code: \"ae\",\n value: \"united-arab-emirates\",\n label: \"United Arab Emirates\",\n continent: \"Asia\",\n },\n {\n code: \"gb\",\n value: \"united-kingdom\",\n label: \"United Kingdom\",\n continent: \"Europe\",\n },\n {\n code: \"us\",\n value: \"united-states\",\n label: \"United States\",\n continent: \"North America\",\n },\n {\n code: \"uy\",\n value: \"uruguay\",\n label: \"Uruguay\",\n continent: \"South America\",\n },\n { code: \"uz\", value: \"uzbekistan\", label: \"Uzbekistan\", continent: \"Asia\" },\n { code: \"vu\", value: \"vanuatu\", label: \"Vanuatu\", continent: \"Oceania\" },\n {\n code: \"va\",\n value: \"vatican-city\",\n label: \"Vatican City\",\n continent: \"Europe\",\n },\n {\n code: \"ve\",\n value: \"venezuela\",\n label: \"Venezuela\",\n continent: \"South America\",\n },\n { code: \"vn\", value: \"vietnam\", label: \"Vietnam\", continent: \"Asia\" },\n { code: \"ye\", value: \"yemen\", label: \"Yemen\", continent: \"Asia\" },\n { code: \"zm\", value: \"zambia\", label: \"Zambia\", continent: \"Africa\" },\n { code: \"zw\", value: \"zimbabwe\", label: \"Zimbabwe\", continent: \"Africa\" },\n]\n\nconst timezones = [\n {\n value: \"Americas\",\n items: [\n \"(GMT-5) New York\",\n \"(GMT-8) Los Angeles\",\n \"(GMT-6) Chicago\",\n \"(GMT-5) Toronto\",\n \"(GMT-8) Vancouver\",\n \"(GMT-3) São Paulo\",\n ],\n },\n {\n value: \"Europe\",\n items: [\n \"(GMT+0) London\",\n \"(GMT+1) Paris\",\n \"(GMT+1) Berlin\",\n \"(GMT+1) Rome\",\n \"(GMT+1) Madrid\",\n \"(GMT+1) Amsterdam\",\n ],\n },\n {\n value: \"Asia/Pacific\",\n items: [\n \"(GMT+9) Tokyo\",\n \"(GMT+8) Shanghai\",\n \"(GMT+8) Singapore\",\n \"(GMT+4) Dubai\",\n \"(GMT+11) Sydney\",\n \"(GMT+9) Seoul\",\n ],\n },\n] as const\n\nfunction ComboboxBasic() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxDisabled() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInvalid() {\n return (\n \n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n Please select a valid framework. \n \n \n
\n \n )\n}\n\nfunction ComboboxWithClear() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroups() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroupsAndSeparator() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithForm() {\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n const formData = new FormData(event.target as HTMLFormElement)\n const framework = formData.get(\"framework\") as string\n toast(`You selected ${framework} as your framework.`)\n }\n\n return (\n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst largeListItems = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`)\n\nfunction ComboboxLargeList() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxAutoHighlight() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboxboxInputAddon() {\n return (\n \n \n \n \n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInPopup() {\n return (\n \n \n \n }\n >\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item.label}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultiple() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleDisabled() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleInvalid() {\n const anchor1 = useComboboxAnchor()\n const anchor2 = useComboboxAnchor()\n\n return (\n \n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Frameworks\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n Please select at least one framework.\n \n \n \n
\n \n )\n}\n\nfunction ComboboxMultipleNoRemove() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n \n {value}\n \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithCustomItems() {\n return (\n \n country.code !== \"\")}\n itemToStringValue={(country: (typeof countries)[number]) =>\n country.label\n }\n >\n \n \n No countries found. \n \n {(country) => (\n \n - \n
\n \n {country.label}\n \n \n {country.continent} ({country.code})\n \n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInDialog() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Framework \n \n Choose your preferred framework from the list below.\n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n setOpen(false)}\n >\n Cancel\n \n {\n toast(\"Framework selected.\")\n setOpen(false)\n }}\n >\n Confirm\n \n \n \n \n \n )\n}\n\nconst items = [\n {\n label: \"Select a framework\",\n value: null,\n },\n {\n label: \"React\",\n value: \"react\",\n },\n {\n label: \"Vue\",\n value: \"vue\",\n },\n {\n label: \"Angular\",\n value: \"angular\",\n },\n {\n label: \"Svelte\",\n value: \"svelte\",\n },\n {\n label: \"Solid\",\n value: \"solid\",\n },\n {\n label: \"Preact\",\n value: \"preact\",\n },\n {\n label: \"Next.js\",\n value: \"next.js\",\n },\n]\n\nfunction ComboboxWithOtherInputs() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Select a framework\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/combobox.json b/apps/v4/public/r/styles/base-lyra/combobox.json
index dcf6bf7364..63851fa9b3 100644
--- a/apps/v4/public/r/styles/base-lyra/combobox.json
+++ b/apps/v4/public/r/styles/base-lyra/combobox.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/ui/combobox.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Combobox = ComboboxPrimitive.Root\n\nfunction ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return \n}\n\nfunction ComboboxTrigger({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Trigger.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {\n return (\n }\n className={cn(className)}\n {...props}\n >\n \n \n )\n}\n\nfunction ComboboxInput({\n className,\n children,\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n}: ComboboxPrimitive.Input.Props & {\n showTrigger?: boolean\n showClear?: boolean\n}) {\n return (\n \n }\n {...props}\n />\n \n {showTrigger && (\n }\n data-slot=\"input-group-button\"\n className=\"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent\"\n disabled={disabled}\n />\n )}\n {showClear && }\n \n {children}\n \n )\n}\n\nfunction ComboboxContent({\n className,\n side = \"bottom\",\n sideOffset = 6,\n align = \"start\",\n alignOffset = 0,\n anchor,\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick<\n ComboboxPrimitive.Positioner.Props,\n \"side\" | \"align\" | \"sideOffset\" | \"alignOffset\" | \"anchor\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction ComboboxItem({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Item.Props) {\n return (\n \n {children}\n }\n >\n \n \n \n )\n}\n\nfunction ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ComboboxLabel({\n className,\n ...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {\n return (\n \n )\n}\n\nfunction ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {\n return (\n \n )\n}\n\nfunction ComboboxSeparator({\n className,\n ...props\n}: ComboboxPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChips({\n className,\n ...props\n}: React.ComponentPropsWithRef &\n ComboboxPrimitive.Chips.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: ComboboxPrimitive.Chip.Props & {\n showRemove?: boolean\n}) {\n return (\n \n {children}\n {showRemove && (\n }\n className=\"-ml-1 opacity-50 hover:opacity-100\"\n data-slot=\"combobox-chip-remove\"\n >\n \n \n )}\n \n )\n}\n\nfunction ComboboxChipsInput({\n className,\n ...props\n}: ComboboxPrimitive.Input.Props) {\n return (\n \n )\n}\n\nfunction useComboboxAnchor() {\n return React.useRef(null)\n}\n\nexport {\n Combobox,\n ComboboxInput,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Combobox = ComboboxPrimitive.Root\n\nfunction ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return \n}\n\nfunction ComboboxTrigger({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Trigger.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {\n return (\n }\n className={cn(className)}\n {...props}\n >\n \n \n )\n}\n\nfunction ComboboxInput({\n className,\n children,\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n}: ComboboxPrimitive.Input.Props & {\n showTrigger?: boolean\n showClear?: boolean\n}) {\n return (\n \n }\n {...props}\n />\n \n {showTrigger && (\n }\n data-slot=\"input-group-button\"\n className=\"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent\"\n disabled={disabled}\n />\n )}\n {showClear && }\n \n {children}\n \n )\n}\n\nfunction ComboboxContent({\n className,\n side = \"bottom\",\n sideOffset = 6,\n align = \"start\",\n alignOffset = 0,\n anchor,\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick<\n ComboboxPrimitive.Positioner.Props,\n \"side\" | \"align\" | \"sideOffset\" | \"alignOffset\" | \"anchor\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction ComboboxItem({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Item.Props) {\n return (\n \n {children}\n }\n >\n \n \n \n )\n}\n\nfunction ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ComboboxLabel({\n className,\n ...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {\n return (\n \n )\n}\n\nfunction ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {\n return (\n \n )\n}\n\nfunction ComboboxSeparator({\n className,\n ...props\n}: ComboboxPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChips({\n className,\n ...props\n}: React.ComponentPropsWithRef &\n ComboboxPrimitive.Chips.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: ComboboxPrimitive.Chip.Props & {\n showRemove?: boolean\n}) {\n return (\n \n {children}\n {showRemove && (\n }\n className=\"-ml-1 opacity-50 hover:opacity-100\"\n data-slot=\"combobox-chip-remove\"\n >\n \n \n )}\n \n )\n}\n\nfunction ComboboxChipsInput({\n className,\n ...props\n}: ComboboxPrimitive.Input.Props) {\n return (\n \n )\n}\n\nfunction useComboboxAnchor() {\n return React.useRef(null)\n}\n\nexport {\n Combobox,\n ComboboxInput,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/command-example.json b/apps/v4/public/r/styles/base-lyra/command-example.json
index fcf66f9d35..26643f9cc1 100644
--- a/apps/v4/public/r/styles/base-lyra/command-example.json
+++ b/apps/v4/public/r/styles/base-lyra/command-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-lyra/examples/command-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from \"@/registry/bases/base/ui/command\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CommandExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction CommandBasic() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n Calendar \n Search Emoji \n Calculator \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithShortcuts() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithGroups() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandManyItems() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Home \n ⌘H \n \n \n \n Inbox \n ⌘I \n \n \n \n Documents \n ⌘D \n \n \n \n Folders \n ⌘F \n \n \n \n \n \n \n New File \n ⌘N \n \n \n \n New Folder \n ⇧⌘N \n \n \n \n Copy \n ⌘C \n \n \n \n Cut \n ⌘X \n \n \n \n Paste \n ⌘V \n \n \n \n Delete \n ⌫ \n \n \n \n \n \n \n Grid View \n \n \n \n List View \n \n \n \n Zoom In \n ⌘+ \n \n \n \n Zoom Out \n ⌘- \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n Notifications \n \n \n \n Help & Support \n \n \n \n \n \n \n Calculator \n \n \n \n Calendar \n \n \n \n Image Editor \n \n \n \n Code Editor \n \n \n \n \n \n
\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from \"@/registry/bases/base/ui/command\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CommandExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction CommandBasic() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n Calendar \n Search Emoji \n Calculator \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithShortcuts() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithGroups() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandManyItems() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Home \n ⌘H \n \n \n \n Inbox \n ⌘I \n \n \n \n Documents \n ⌘D \n \n \n \n Folders \n ⌘F \n \n \n \n \n \n \n New File \n ⌘N \n \n \n \n New Folder \n ⇧⌘N \n \n \n \n Copy \n ⌘C \n \n \n \n Cut \n ⌘X \n \n \n \n Paste \n ⌘V \n \n \n \n Delete \n ⌫ \n \n \n \n \n \n \n Grid View \n \n \n \n List View \n \n \n \n Zoom In \n ⌘+ \n \n \n \n Zoom Out \n ⌘- \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n Notifications \n \n \n \n Help & Support \n \n \n \n \n \n \n Calculator \n \n \n \n Calendar \n \n \n \n Image Editor \n \n \n \n Code Editor \n \n \n \n \n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/command.json b/apps/v4/public/r/styles/base-lyra/command.json
index b740525743..71125def9f 100644
--- a/apps/v4/public/r/styles/base-lyra/command.json
+++ b/apps/v4/public/r/styles/base-lyra/command.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/ui/command.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n InputGroup,\n InputGroupAddon,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: Omit, \"children\"> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n children: React.ReactNode\n}) {\n return (\n \n \n {title} \n {description} \n \n \n {children}\n \n \n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n
\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n InputGroup,\n InputGroupAddon,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: Omit, \"children\"> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n children: React.ReactNode\n}) {\n return (\n \n \n {title} \n {description} \n \n \n {children}\n \n \n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n
\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/component-example.json b/apps/v4/public/r/styles/base-lyra/component-example.json
index 117a9b244a..151806546f 100644
--- a/apps/v4/public/r/styles/base-lyra/component-example.json
+++ b/apps/v4/public/r/styles/base-lyra/component-example.json
@@ -18,7 +18,7 @@
"files": [
{
"path": "registry/base-lyra/examples/component-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport function ComponentExample() {\n return (\n \n \n \n \n )\n}\n\nfunction CardExample() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n }>\n \n Show Dialog\n \n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this\n device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n Warning\n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst roleItems = [\n { label: \"Developer\", value: \"developer\" },\n { label: \"Designer\", value: \"designer\" },\n { label: \"Manager\", value: \"manager\" },\n { label: \"Other\", value: \"other\" },\n]\n\nfunction FormExample() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n User Information \n Please fill in your details below \n \n \n }\n >\n \n More options \n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({\n ...notifications,\n sms: checked === true,\n })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n Account \n \n \n Profile\n ⇧⌘P \n \n \n \n Billing\n \n \n \n \n Settings\n \n \n \n \n Preferences \n \n \n Keyboard Shortcuts\n \n \n \n Language\n \n \n \n \n Notifications\n \n \n \n \n \n Notification Types\n \n \n setNotifications({\n ...notifications,\n push: checked === true,\n })\n }\n >\n \n Push Notifications\n \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Email Notifications\n \n \n \n \n \n \n \n \n \n \n Privacy & Security\n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport function ComponentExample() {\n return (\n \n \n \n \n )\n}\n\nfunction CardExample() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n }>\n \n Show Dialog\n \n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this\n device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n Warning\n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst roleItems = [\n { label: \"Developer\", value: \"developer\" },\n { label: \"Designer\", value: \"designer\" },\n { label: \"Manager\", value: \"manager\" },\n { label: \"Other\", value: \"other\" },\n]\n\nfunction FormExample() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n User Information \n Please fill in your details below \n \n \n }\n >\n \n More options \n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({\n ...notifications,\n sms: checked === true,\n })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n Account \n \n \n Profile\n ⇧⌘P \n \n \n \n Billing\n \n \n \n \n Settings\n \n \n \n \n Preferences \n \n \n Keyboard Shortcuts\n \n \n \n Language\n \n \n \n \n Notifications\n \n \n \n \n \n Notification Types\n \n \n setNotifications({\n ...notifications,\n push: checked === true,\n })\n }\n >\n \n Push Notifications\n \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Email Notifications\n \n \n \n \n \n \n \n \n \n \n Privacy & Security\n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/context-menu-example.json b/apps/v4/public/r/styles/base-lyra/context-menu-example.json
index fbe545e09d..4d8de6776f 100644
--- a/apps/v4/public/r/styles/base-lyra/context-menu-example.json
+++ b/apps/v4/public/r/styles/base-lyra/context-menu-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/context-menu-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuGroup,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from \"@/registry/bases/base/ui/context-menu\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ContextMenuExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ContextMenuBasic() {\n return (\n \n \n \n Right click here\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n )\n}\n\nfunction ContextMenuWithIcons() {\n return (\n \n \n \n Right click here\n \n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithShortcuts() {\n return (\n \n \n \n Right click here\n \n \n \n \n Back\n ⌘[ \n \n \n Forward\n ⌘] \n \n \n Reload\n ⌘R \n \n \n \n \n \n Save\n ⌘S \n \n \n Save As...\n ⇧⌘S \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithSubmenu() {\n return (\n \n \n \n Right click here\n \n \n \n \n Copy\n ⌘C \n \n \n Cut\n ⌘X \n \n \n \n More Tools \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n \n \n Developer Tools \n \n \n \n Delete \n \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithGroups() {\n return (\n \n \n \n Right click here\n \n \n \n File \n \n New File\n ⌘N \n \n \n Open File\n ⌘O \n \n \n Save\n ⌘S \n \n \n \n \n Edit \n \n Undo\n ⌘Z \n \n \n Redo\n ⇧⌘Z \n \n \n \n \n \n Cut\n ⌘X \n \n \n Copy\n ⌘C \n \n \n Paste\n ⌘V \n \n \n \n \n \n Delete\n ⌫ \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithCheckboxes() {\n return (\n \n \n \n Right click here\n \n \n \n \n Show Bookmarks Bar\n \n Show Full URLs \n \n Show Developer Tools\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithRadio() {\n const [user, setUser] = React.useState(\"pedro\")\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n Right click here\n \n \n \n People \n \n \n Pedro Duarte\n \n \n Colm Tuite\n \n \n \n \n \n Theme \n \n Light \n Dark \n System \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithDestructive() {\n return (\n \n \n \n Right click here\n \n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n \n \n Archive\n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithSides() {\n return (\n \n \n \n \n Right click (top)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (right)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (bottom)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (left)\n \n \n \n Back \n Forward \n Reload \n \n \n \n
\n \n )\n}\n\nfunction ContextMenuInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Context Menu Example \n \n Right click on the area below to see the context menu.\n \n \n \n \n Right click here\n \n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n \n More Options \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n \n \n Developer Tools \n \n \n \n \n \n \n \n Delete\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuGroup,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from \"@/registry/bases/base/ui/context-menu\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ContextMenuExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ContextMenuBasic() {\n return (\n \n \n \n Right click here\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n )\n}\n\nfunction ContextMenuWithIcons() {\n return (\n \n \n \n Right click here\n \n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithShortcuts() {\n return (\n \n \n \n Right click here\n \n \n \n \n Back\n ⌘[ \n \n \n Forward\n ⌘] \n \n \n Reload\n ⌘R \n \n \n \n \n \n Save\n ⌘S \n \n \n Save As...\n ⇧⌘S \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithSubmenu() {\n return (\n \n \n \n Right click here\n \n \n \n \n Copy\n ⌘C \n \n \n Cut\n ⌘X \n \n \n \n More Tools \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n \n \n Developer Tools \n \n \n \n Delete \n \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithGroups() {\n return (\n \n \n \n Right click here\n \n \n \n File \n \n New File\n ⌘N \n \n \n Open File\n ⌘O \n \n \n Save\n ⌘S \n \n \n \n \n Edit \n \n Undo\n ⌘Z \n \n \n Redo\n ⇧⌘Z \n \n \n \n \n \n Cut\n ⌘X \n \n \n Copy\n ⌘C \n \n \n Paste\n ⌘V \n \n \n \n \n \n Delete\n ⌫ \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithCheckboxes() {\n return (\n \n \n \n Right click here\n \n \n \n \n Show Bookmarks Bar\n \n Show Full URLs \n \n Show Developer Tools\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithRadio() {\n const [user, setUser] = React.useState(\"pedro\")\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n Right click here\n \n \n \n People \n \n \n Pedro Duarte\n \n \n Colm Tuite\n \n \n \n \n \n Theme \n \n Light \n Dark \n System \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithDestructive() {\n return (\n \n \n \n Right click here\n \n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n \n \n Archive\n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithSides() {\n return (\n \n \n \n \n Right click (top)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (right)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (bottom)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (left)\n \n \n \n Back \n Forward \n Reload \n \n \n \n
\n \n )\n}\n\nfunction ContextMenuInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Context Menu Example \n \n Right click on the area below to see the context menu.\n \n \n \n \n Right click here\n \n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n \n More Options \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n \n \n Developer Tools \n \n \n \n \n \n \n \n Delete\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/context-menu.json b/apps/v4/public/r/styles/base-lyra/context-menu.json
index 82ad4b16c7..a6896437ec 100644
--- a/apps/v4/public/r/styles/base-lyra/context-menu.json
+++ b/apps/v4/public/r/styles/base-lyra/context-menu.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/context-menu.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ContextMenu as ContextMenuPrimitive } from \"@base-ui/react/context-menu\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {\n return \n}\n\nfunction ContextMenuPortal({ ...props }: ContextMenuPrimitive.Portal.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuTrigger({\n className,\n ...props\n}: ContextMenuPrimitive.Trigger.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuContent({\n className,\n align = \"start\",\n alignOffset = 4,\n side = \"right\",\n sideOffset = 0,\n ...props\n}: ContextMenuPrimitive.Popup.Props &\n Pick<\n ContextMenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ContextMenuGroup({ ...props }: ContextMenuPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: ContextMenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n \n )\n}\n\nfunction ContextMenuSub({ ...props }: ContextMenuPrimitive.SubmenuRoot.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ContextMenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ContextMenuSubContent({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: ContextMenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: ContextMenuPrimitive.RadioGroup.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: ContextMenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: ContextMenuPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ContextMenu as ContextMenuPrimitive } from \"@base-ui/react/context-menu\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {\n return \n}\n\nfunction ContextMenuPortal({ ...props }: ContextMenuPrimitive.Portal.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuTrigger({\n className,\n ...props\n}: ContextMenuPrimitive.Trigger.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuContent({\n className,\n align = \"start\",\n alignOffset = 4,\n side = \"right\",\n sideOffset = 0,\n ...props\n}: ContextMenuPrimitive.Popup.Props &\n Pick<\n ContextMenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ContextMenuGroup({ ...props }: ContextMenuPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: ContextMenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n \n )\n}\n\nfunction ContextMenuSub({ ...props }: ContextMenuPrimitive.SubmenuRoot.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ContextMenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ContextMenuSubContent({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: ContextMenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: ContextMenuPrimitive.RadioGroup.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: ContextMenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: ContextMenuPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/dialog-example.json b/apps/v4/public/r/styles/base-lyra/dialog-example.json
index 868dcd9e0c..da3b359da3 100644
--- a/apps/v4/public/r/styles/base-lyra/dialog-example.json
+++ b/apps/v4/public/r/styles/base-lyra/dialog-example.json
@@ -21,7 +21,7 @@
"files": [
{
"path": "registry/base-lyra/examples/dialog-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Switch } from \"@/registry/bases/base/ui/switch\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function DialogExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction DialogWithForm() {\n return (\n \n \n \n \n \n )\n}\n\nfunction DialogScrollableContent() {\n return (\n \n \n }>\n Scrollable Content\n \n \n \n Scrollable Content \n \n This is a dialog with scrollable content.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n sunt in culpa qui officia deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n \n \n )\n}\n\nfunction DialogWithStickyFooter() {\n return (\n \n \n }>\n Sticky Footer\n \n \n \n Scrollable Content \n \n This is a dialog with scrollable content.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n sunt in culpa qui officia deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n }>\n Close\n \n \n \n \n \n )\n}\n\nfunction DialogNoCloseButton() {\n return (\n \n \n }>\n No Close Button\n \n \n \n No Close Button \n \n This dialog doesn't have a close button in the top-right\n corner.\n \n \n \n }>\n Close\n \n \n \n \n \n )\n}\n\nconst spokenLanguages = [\n { label: \"Auto\", value: \"auto\" },\n { label: \"English\", value: \"en\" },\n { label: \"Spanish\", value: \"es\" },\n { label: \"French\", value: \"fr\" },\n { label: \"German\", value: \"de\" },\n { label: \"Italian\", value: \"it\" },\n { label: \"Portuguese\", value: \"pt\" },\n { label: \"Russian\", value: \"ru\" },\n { label: \"Chinese\", value: \"zh\" },\n { label: \"Japanese\", value: \"ja\" },\n { label: \"Korean\", value: \"ko\" },\n { label: \"Arabic\", value: \"ar\" },\n { label: \"Hindi\", value: \"hi\" },\n { label: \"Bengali\", value: \"bn\" },\n { label: \"Telugu\", value: \"te\" },\n { label: \"Marathi\", value: \"mr\" },\n { label: \"Kannada\", value: \"kn\" },\n { label: \"Malayalam\", value: \"ml\" },\n]\n\nconst voices = [\n { label: \"Samantha\", value: \"samantha\" },\n { label: \"Alex\", value: \"alex\" },\n { label: \"Fred\", value: \"fred\" },\n { label: \"Victoria\", value: \"victoria\" },\n { label: \"Tom\", value: \"tom\" },\n { label: \"Karen\", value: \"karen\" },\n { label: \"Sam\", value: \"sam\" },\n { label: \"Daniel\", value: \"daniel\" },\n]\n\nconst themes = [\n { label: \"Light\", value: \"light\" },\n { label: \"Dark\", value: \"dark\" },\n { label: \"System\", value: \"system\" },\n]\n\nconst accents = [\n { label: \"Default\", value: \"default\" },\n { label: \"Red\", value: \"red\" },\n { label: \"Blue\", value: \"blue\" },\n { label: \"Green\", value: \"green\" },\n { label: \"Purple\", value: \"purple\" },\n { label: \"Pink\", value: \"pink\" },\n]\n\nfunction DialogChatSettings() {\n const [tab, setTab] = React.useState(\"general\")\n const [theme, setTheme] = React.useState(\"system\")\n const [accentColor, setAccentColor] = React.useState(\"default\")\n const [spokenLanguage, setSpokenLanguage] = React.useState(\"en\")\n const [voice, setVoice] = React.useState(\"samantha\")\n\n return (\n \n \n }>\n Chat Settings\n \n \n \n Chat Settings \n \n Customize your chat settings: theme, accent color, spoken\n language, voice, personality, and custom instructions.\n \n \n \n
setTab(e.target.value)}\n className=\"w-full md:hidden\"\n >\n General \n \n Notifications\n \n \n Personalization\n \n Security \n \n
\n \n General \n Notifications \n \n Personalization\n \n Security \n \n \n
\n \n \n \n Theme \n setTheme(value as string)}\n >\n \n \n \n \n \n {themes.map((theme) => (\n \n {theme.label}\n \n ))}\n \n \n \n \n \n \n \n Accent Color\n \n \n setAccentColor(value as string)\n }\n >\n \n \n \n \n \n {accents.map((accent) => (\n \n {accent.label}\n \n ))}\n \n \n \n \n \n \n \n \n Spoken Language\n \n \n For best results, select the language you mainly\n speak. If it's not listed, it may still be\n supported via auto-detection.\n \n \n \n setSpokenLanguage(value as string)\n }\n >\n \n \n \n \n \n {spokenLanguages.map((language) => (\n \n {language.label}\n \n ))}\n \n \n \n \n \n \n Voice \n setVoice(value as string)}\n >\n \n \n \n \n \n {voices.map((voice) => (\n \n {voice.label}\n \n ))}\n \n \n \n \n \n \n \n
\n \n \n Responses \n \n Get notified when ChatGPT responds to requests that take\n time, like research or image generation.\n \n \n \n \n \n Push notifications\n \n \n \n \n \n \n Tasks \n \n Get notified when tasks you've created have\n updates. Manage tasks \n \n \n \n \n \n Push notifications\n \n \n \n \n \n Email notifications\n \n \n \n \n \n \n
\n \n \n Nickname \n \n \n \n \n }\n >\n \n \n \n Used to identify you in the chat. N \n \n \n \n \n \n \n \n \n More about you \n \n Tell us more about yourself. This will be used to help\n us personalize your experience.\n \n \n \n \n \n \n \n \n \n Enable customizations\n \n \n Enable customizations to make ChatGPT more\n personalized.\n \n \n \n \n \n \n \n
\n \n \n \n \n Multi-factor authentication\n \n \n Enable multi-factor authentication to secure your\n account. If you do not have a two-factor\n authentication device, you can use a one-time code\n sent to your email.\n \n \n \n \n \n \n \n Log out \n \n Log out of your account on this device.\n \n \n \n Log Out\n \n \n \n \n \n Log out of all devices \n \n This will log you out of all devices, including the\n current session. It may take up to 30 minutes for the\n changes to take effect.\n \n \n \n Log Out All\n \n \n \n \n
\n \n
\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Switch } from \"@/registry/bases/base/ui/switch\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function DialogExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction DialogWithForm() {\n return (\n \n \n \n \n \n )\n}\n\nfunction DialogScrollableContent() {\n return (\n \n \n }>\n Scrollable Content\n \n \n \n Scrollable Content \n \n This is a dialog with scrollable content.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n sunt in culpa qui officia deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n \n \n )\n}\n\nfunction DialogWithStickyFooter() {\n return (\n \n \n }>\n Sticky Footer\n \n \n \n Scrollable Content \n \n This is a dialog with scrollable content.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n sunt in culpa qui officia deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n }>\n Close\n \n \n \n \n \n )\n}\n\nfunction DialogNoCloseButton() {\n return (\n \n \n }>\n No Close Button\n \n \n \n No Close Button \n \n This dialog doesn't have a close button in the top-right\n corner.\n \n \n \n }>\n Close\n \n \n \n \n \n )\n}\n\nconst spokenLanguages = [\n { label: \"Auto\", value: \"auto\" },\n { label: \"English\", value: \"en\" },\n { label: \"Spanish\", value: \"es\" },\n { label: \"French\", value: \"fr\" },\n { label: \"German\", value: \"de\" },\n { label: \"Italian\", value: \"it\" },\n { label: \"Portuguese\", value: \"pt\" },\n { label: \"Russian\", value: \"ru\" },\n { label: \"Chinese\", value: \"zh\" },\n { label: \"Japanese\", value: \"ja\" },\n { label: \"Korean\", value: \"ko\" },\n { label: \"Arabic\", value: \"ar\" },\n { label: \"Hindi\", value: \"hi\" },\n { label: \"Bengali\", value: \"bn\" },\n { label: \"Telugu\", value: \"te\" },\n { label: \"Marathi\", value: \"mr\" },\n { label: \"Kannada\", value: \"kn\" },\n { label: \"Malayalam\", value: \"ml\" },\n]\n\nconst voices = [\n { label: \"Samantha\", value: \"samantha\" },\n { label: \"Alex\", value: \"alex\" },\n { label: \"Fred\", value: \"fred\" },\n { label: \"Victoria\", value: \"victoria\" },\n { label: \"Tom\", value: \"tom\" },\n { label: \"Karen\", value: \"karen\" },\n { label: \"Sam\", value: \"sam\" },\n { label: \"Daniel\", value: \"daniel\" },\n]\n\nconst themes = [\n { label: \"Light\", value: \"light\" },\n { label: \"Dark\", value: \"dark\" },\n { label: \"System\", value: \"system\" },\n]\n\nconst accents = [\n { label: \"Default\", value: \"default\" },\n { label: \"Red\", value: \"red\" },\n { label: \"Blue\", value: \"blue\" },\n { label: \"Green\", value: \"green\" },\n { label: \"Purple\", value: \"purple\" },\n { label: \"Pink\", value: \"pink\" },\n]\n\nfunction DialogChatSettings() {\n const [tab, setTab] = React.useState(\"general\")\n const [theme, setTheme] = React.useState(\"system\")\n const [accentColor, setAccentColor] = React.useState(\"default\")\n const [spokenLanguage, setSpokenLanguage] = React.useState(\"en\")\n const [voice, setVoice] = React.useState(\"samantha\")\n\n return (\n \n \n }>\n Chat Settings\n \n \n \n Chat Settings \n \n Customize your chat settings: theme, accent color, spoken\n language, voice, personality, and custom instructions.\n \n \n \n
setTab(e.target.value)}\n className=\"w-full md:hidden\"\n >\n General \n \n Notifications\n \n \n Personalization\n \n Security \n \n
\n \n General \n Notifications \n \n Personalization\n \n Security \n \n \n
\n \n \n \n Theme \n setTheme(value as string)}\n >\n \n \n \n \n \n {themes.map((theme) => (\n \n {theme.label}\n \n ))}\n \n \n \n \n \n \n \n Accent Color\n \n \n setAccentColor(value as string)\n }\n >\n \n \n \n \n \n {accents.map((accent) => (\n \n {accent.label}\n \n ))}\n \n \n \n \n \n \n \n \n Spoken Language\n \n \n For best results, select the language you mainly\n speak. If it's not listed, it may still be\n supported via auto-detection.\n \n \n \n setSpokenLanguage(value as string)\n }\n >\n \n \n \n \n \n {spokenLanguages.map((language) => (\n \n {language.label}\n \n ))}\n \n \n \n \n \n \n Voice \n setVoice(value as string)}\n >\n \n \n \n \n \n {voices.map((voice) => (\n \n {voice.label}\n \n ))}\n \n \n \n \n \n \n \n
\n \n \n Responses \n \n Get notified when ChatGPT responds to requests that take\n time, like research or image generation.\n \n \n \n \n \n Push notifications\n \n \n \n \n \n \n Tasks \n \n Get notified when tasks you've created have\n updates. Manage tasks \n \n \n \n \n \n Push notifications\n \n \n \n \n \n Email notifications\n \n \n \n \n \n \n
\n \n \n Nickname \n \n \n \n \n }\n >\n \n \n \n Used to identify you in the chat. N \n \n \n \n \n \n \n \n \n More about you \n \n Tell us more about yourself. This will be used to help\n us personalize your experience.\n \n \n \n \n \n \n \n \n \n Enable customizations\n \n \n Enable customizations to make ChatGPT more\n personalized.\n \n \n \n \n \n \n \n
\n \n \n \n \n Multi-factor authentication\n \n \n Enable multi-factor authentication to secure your\n account. If you do not have a two-factor\n authentication device, you can use a one-time code\n sent to your email.\n \n \n \n \n \n \n \n Log out \n \n Log out of your account on this device.\n \n \n \n Log Out\n \n \n \n \n \n Log out of all devices \n \n This will log you out of all devices, including the\n current session. It may take up to 30 minutes for the\n changes to take effect.\n \n \n \n Log Out All\n \n \n \n \n
\n \n
\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/dialog.json b/apps/v4/public/r/styles/base-lyra/dialog.json
index f6301b32f7..c4eedf4d1a 100644
--- a/apps/v4/public/r/styles/base-lyra/dialog.json
+++ b/apps/v4/public/r/styles/base-lyra/dialog.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-lyra/ui/dialog.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return \n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return \n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return \n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n }\n >\n \n Close \n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n \n {children}\n {showCloseButton && (\n }>\n Close\n \n )}\n
\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return \n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return \n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return \n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n }\n >\n \n Close \n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n \n {children}\n {showCloseButton && (\n }>\n Close\n \n )}\n
\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/dropdown-menu-example.json b/apps/v4/public/r/styles/base-lyra/dropdown-menu-example.json
index bf30c05dfb..15df6651cd 100644
--- a/apps/v4/public/r/styles/base-lyra/dropdown-menu-example.json
+++ b/apps/v4/public/r/styles/base-lyra/dropdown-menu-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-lyra/examples/dropdown-menu-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function DropdownMenuExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuBasic() {\n return (\n \n \n }\n >\n Open\n \n \n \n My Account \n Profile \n Billing \n Settings \n \n \n GitHub \n Support \n API \n \n \n \n )\n}\n\nfunction DropdownMenuWithIcons() {\n return (\n \n \n }\n >\n Open\n \n \n \n \n Profile\n \n \n \n Billing\n \n \n \n Settings\n \n \n \n \n Log out\n \n \n \n \n )\n}\n\nfunction DropdownMenuWithShortcuts() {\n return (\n \n \n }\n >\n Open\n \n \n \n My Account \n \n Profile\n ⇧⌘P \n \n \n Billing\n ⌘B \n \n \n Settings\n ⌘S \n \n \n Keyboard shortcuts\n ⌘K \n \n \n \n \n Log out\n ⇧⌘Q \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithSubmenu() {\n return (\n \n \n }\n >\n Open\n \n \n \n Team \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n \n New Team\n ⌘+T \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithCheckboxes() {\n const [showStatusBar, setShowStatusBar] = React.useState(true)\n const [showActivityBar, setShowActivityBar] = React.useState(false)\n const [showPanel, setShowPanel] = React.useState(false)\n\n return (\n \n \n }\n >\n Checkboxes\n \n \n \n Appearance \n \n \n Status Bar\n \n \n \n Activity Bar\n \n \n \n Panel\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithRadio() {\n const [position, setPosition] = React.useState(\"bottom\")\n\n return (\n \n \n }\n >\n Radio Group\n \n \n \n Panel Position \n \n \n \n Top\n \n \n \n Bottom\n \n \n \n Right\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithCheckboxesIcons() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n\n return (\n \n \n }\n >\n Notifications\n \n \n \n Notification Preferences \n \n setNotifications({ ...notifications, email: checked === true })\n }\n >\n \n Email notifications\n \n \n setNotifications({ ...notifications, sms: checked === true })\n }\n >\n \n SMS notifications\n \n \n setNotifications({ ...notifications, push: checked === true })\n }\n >\n \n Push notifications\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithRadioIcons() {\n const [paymentMethod, setPaymentMethod] = React.useState(\"card\")\n\n return (\n \n \n }\n >\n Payment Method\n \n \n \n Select Payment Method \n \n \n \n Credit Card\n \n \n \n PayPal\n \n \n \n Bank Transfer\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithDestructive() {\n return (\n \n \n }\n >\n Actions\n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n Archive\n \n \n \n Delete\n \n \n \n \n )\n}\n\nfunction DropdownMenuWithAvatar() {\n const menuContent = (\n <>\n \n \n \n Account\n \n \n \n Billing\n \n \n \n Notifications\n \n \n \n \n \n Sign Out\n \n >\n )\n\n return (\n \n \n
\n \n }\n >\n \n \n CN \n \n \n shadcn \n \n shadcn@example.com\n \n
\n \n \n \n {menuContent}\n \n \n
\n \n }\n >\n \n \n LR \n \n \n \n {menuContent}\n \n \n
\n \n )\n}\n\nfunction DropdownMenuInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Dropdown Menu Example \n \n Click the button below to see the dropdown menu.\n \n \n \n }\n >\n Open Menu\n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n More Options \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n \n \n Delete\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuComplex() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n }\n >\n Complex Menu\n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({ ...notifications, email: checked === true })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({ ...notifications, sms: checked === true })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n Account \n \n \n Profile\n ⇧⌘P \n \n \n \n Billing\n \n \n \n \n Settings\n \n \n \n \n Preferences \n \n \n Keyboard Shortcuts\n \n \n \n Language\n \n \n \n \n Notifications\n \n \n \n \n \n Notification Types\n \n \n setNotifications({\n ...notifications,\n push: checked === true,\n })\n }\n >\n \n Push Notifications\n \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Email Notifications\n \n \n \n \n \n \n \n \n \n \n Privacy & Security\n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function DropdownMenuExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuBasic() {\n return (\n \n \n }\n >\n Open\n \n \n \n My Account \n Profile \n Billing \n Settings \n \n \n GitHub \n Support \n API \n \n \n \n )\n}\n\nfunction DropdownMenuWithIcons() {\n return (\n \n \n }\n >\n Open\n \n \n \n \n Profile\n \n \n \n Billing\n \n \n \n Settings\n \n \n \n \n Log out\n \n \n \n \n )\n}\n\nfunction DropdownMenuWithShortcuts() {\n return (\n \n \n }\n >\n Open\n \n \n \n My Account \n \n Profile\n ⇧⌘P \n \n \n Billing\n ⌘B \n \n \n Settings\n ⌘S \n \n \n Keyboard shortcuts\n ⌘K \n \n \n \n \n Log out\n ⇧⌘Q \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithSubmenu() {\n return (\n \n \n }\n >\n Open\n \n \n \n Team \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n \n New Team\n ⌘+T \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithCheckboxes() {\n const [showStatusBar, setShowStatusBar] = React.useState(true)\n const [showActivityBar, setShowActivityBar] = React.useState(false)\n const [showPanel, setShowPanel] = React.useState(false)\n\n return (\n \n \n }\n >\n Checkboxes\n \n \n \n Appearance \n \n \n Status Bar\n \n \n \n Activity Bar\n \n \n \n Panel\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithRadio() {\n const [position, setPosition] = React.useState(\"bottom\")\n\n return (\n \n \n }\n >\n Radio Group\n \n \n \n Panel Position \n \n \n \n Top\n \n \n \n Bottom\n \n \n \n Right\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithCheckboxesIcons() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n\n return (\n \n \n }\n >\n Notifications\n \n \n \n Notification Preferences \n \n setNotifications({ ...notifications, email: checked === true })\n }\n >\n \n Email notifications\n \n \n setNotifications({ ...notifications, sms: checked === true })\n }\n >\n \n SMS notifications\n \n \n setNotifications({ ...notifications, push: checked === true })\n }\n >\n \n Push notifications\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithRadioIcons() {\n const [paymentMethod, setPaymentMethod] = React.useState(\"card\")\n\n return (\n \n \n }\n >\n Payment Method\n \n \n \n Select Payment Method \n \n \n \n Credit Card\n \n \n \n PayPal\n \n \n \n Bank Transfer\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithDestructive() {\n return (\n \n \n }\n >\n Actions\n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n Archive\n \n \n \n Delete\n \n \n \n \n )\n}\n\nfunction DropdownMenuWithAvatar() {\n const menuContent = (\n <>\n \n \n \n Account\n \n \n \n Billing\n \n \n \n Notifications\n \n \n \n \n \n Sign Out\n \n >\n )\n\n return (\n \n \n
\n \n }\n >\n \n \n CN \n \n \n shadcn \n \n shadcn@example.com\n \n
\n \n \n \n {menuContent}\n \n \n
\n \n }\n >\n \n \n LR \n \n \n \n {menuContent}\n \n \n
\n \n )\n}\n\nfunction DropdownMenuInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Dropdown Menu Example \n \n Click the button below to see the dropdown menu.\n \n \n \n }\n >\n Open Menu\n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n More Options \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n \n \n Delete\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuComplex() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n }\n >\n Complex Menu\n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({ ...notifications, email: checked === true })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({ ...notifications, sms: checked === true })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n Account \n \n \n Profile\n ⇧⌘P \n \n \n \n Billing\n \n \n \n \n Settings\n \n \n \n \n Preferences \n \n \n Keyboard Shortcuts\n \n \n \n Language\n \n \n \n \n Notifications\n \n \n \n \n \n Notification Types\n \n \n setNotifications({\n ...notifications,\n push: checked === true,\n })\n }\n >\n \n Push Notifications\n \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Email Notifications\n \n \n \n \n \n \n \n \n \n \n Privacy & Security\n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/dropdown-menu.json b/apps/v4/public/r/styles/base-lyra/dropdown-menu.json
index d8b36aa8d2..4926e43573 100644
--- a/apps/v4/public/r/styles/base-lyra/dropdown-menu.json
+++ b/apps/v4/public/r/styles/base-lyra/dropdown-menu.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/dropdown-menu.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return \n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return \n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return \n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return \n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return \n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n \n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return \n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return \n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return \n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return \n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return \n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n \n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/empty-example.json b/apps/v4/public/r/styles/base-lyra/empty-example.json
index df8fff2198..1af8a81d20 100644
--- a/apps/v4/public/r/styles/base-lyra/empty-example.json
+++ b/apps/v4/public/r/styles/base-lyra/empty-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-lyra/examples/empty-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function EmptyExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction EmptyBasic() {\n return (\n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n\nfunction EmptyWithMutedBackground() {\n return (\n \n \n \n No results found \n \n No results found for your search. Try adjusting your search terms.\n \n \n \n Try again \n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n\nfunction EmptyWithBorder() {\n return (\n \n \n \n 404 - Not Found \n \n The page you're looking for doesn't exist. Try searching\n for what you need below.\n \n \n \n \n \n \n \n \n \n / \n \n \n \n Need help? Contact support \n \n \n \n \n )\n}\n\nfunction EmptyWithIcon() {\n return (\n \n \n \n \n \n \n Nothing to see here \n \n No posts have been created yet. Get started by{\" \"}\n creating your first post .\n \n \n \n \n \n New Post\n \n \n \n \n )\n}\n\nfunction EmptyWithMutedBackgroundAlt() {\n return (\n \n \n \n 404 - Not Found \n \n The page you're looking for doesn't exist. Try searching\n for what you need below.\n \n \n \n \n \n \n \n \n \n / \n \n \n \n Need help? Contact support \n \n \n \n \n )\n}\n\nfunction EmptyInCard() {\n return (\n \n \n \n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function EmptyExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction EmptyBasic() {\n return (\n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n\nfunction EmptyWithMutedBackground() {\n return (\n \n \n \n No results found \n \n No results found for your search. Try adjusting your search terms.\n \n \n \n Try again \n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n\nfunction EmptyWithBorder() {\n return (\n \n \n \n 404 - Not Found \n \n The page you're looking for doesn't exist. Try searching\n for what you need below.\n \n \n \n \n \n \n \n \n \n / \n \n \n \n Need help? Contact support \n \n \n \n \n )\n}\n\nfunction EmptyWithIcon() {\n return (\n \n \n \n \n \n \n Nothing to see here \n \n No posts have been created yet. Get started by{\" \"}\n creating your first post .\n \n \n \n \n \n New Post\n \n \n \n \n )\n}\n\nfunction EmptyWithMutedBackgroundAlt() {\n return (\n \n \n \n 404 - Not Found \n \n The page you're looking for doesn't exist. Try searching\n for what you need below.\n \n \n \n \n \n \n \n \n \n / \n \n \n \n Need help? Contact support \n \n \n \n \n )\n}\n\nfunction EmptyInCard() {\n return (\n \n \n \n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/github.json b/apps/v4/public/r/styles/base-lyra/github.json
index 62031535b7..466b259ebc 100644
--- a/apps/v4/public/r/styles/base-lyra/github.json
+++ b/apps/v4/public/r/styles/base-lyra/github.json
@@ -30,7 +30,7 @@
"files": [
{
"path": "registry/base-lyra/blocks/github.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxList,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/registry/bases/base/ui/command\"\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"@/registry/bases/base/ui/drawer\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemGroup,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function GithubBlock() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CodespacesCard() {\n const [isCreatingCodespace, setIsCreatingCodespace] = React.useState(false)\n\n return (\n \n \n \n \n \n Codespaces \n Local \n \n \n - \n
\n Codespaces \n \n Your workspaces in the cloud\n \n \n \n \n }\n >\n \n \n \n Create a codespace on main\n \n \n \n \n }\n />\n }\n >\n \n \n \n Codespace repository configuration\n \n \n \n \n \n \n New with options...\n \n \n \n Configure dev container\n \n \n \n Set up prebuilds\n \n \n \n \n \n \n Manage codespaces\n \n \n \n Share deep link\n \n \n \n What are codespaces?\n \n \n \n \n \n \n \n \n \n \n \n \n No codespaces \n \n You don't have any codespaces with this repository\n checked out\n \n \n \n {\n setIsCreatingCodespace(true)\n setTimeout(() => {\n setIsCreatingCodespace(false)\n }, 2000)\n }}\n disabled={isCreatingCodespace}\n >\n {isCreatingCodespace ? (\n \n ) : (\n \"\"\n )}\n Create Codespace\n \n \n Learn more about codespaces\n \n \n \n \n \n Codespace usage for this repository is paid for by{\" \"}\n shadcn .\n
\n \n \n - \n
\n \n \n Clone\n \n \n \n \n }\n >\n \n \n \n Which remote URL should I use?\n \n \n \n \n \n \n HTTPS \n SSH \n GitHub CLI \n \n \n
\n \n \n HTTPS URL\n \n \n \n \n \n \n \n \n \n \n Clone using the web URL.\n \n \n \n
\n \n \n SSH URL\n \n \n \n \n \n \n \n \n \n \n Use a password-protected SSH key.\n \n \n \n
\n \n \n CLI Command\n \n \n \n \n \n \n \n \n \n \n Work fast with our official CLI.{\" \"}\n Learn more \n \n \n \n
\n \n \n \n \n \n Open with GitHub Desktop\n \n \n \n Download ZIP\n \n
\n \n \n \n \n \n )\n}\n\nfunction RepositoryToolbar() {\n const [selectedBranch, setSelectedBranch] = React.useState(\"main\")\n return (\n \n \n
\n \n \n \n \n \n \n \n t \n \n \n
\n }>\n Add File\n \n \n \n \n \n \n Create new file\n \n \n \n Upload files\n \n \n \n \n
\n \n }\n />\n }\n >\n \n \n New Agent Task \n \n \n \n New Agent Task \n \n \n \n \n \n \n }\n />\n }\n >\n \n \n Select a branch \n \n \n \n \n Select a Branch\n \n \n \n No branches found \n \n \n {[\n \"main\",\n \"develop\",\n \"feature/123\",\n \"feature/user-authentication\",\n \"feature/dashboard-redesign\",\n \"bugfix/login-error\",\n \"hotfix/security-patch\",\n \"release/v2.0.0\",\n \"feature/api-integration\",\n \"bugfix/memory-leak\",\n \"feature/dark-mode\",\n \"feature/responsive-design\",\n \"bugfix/typo-fix\",\n \"feature/search-functionality\",\n \"release/v1.9.0\",\n \"feature/notifications\",\n \"bugfix/cache-issue\",\n \"feature/payment-gateway\",\n \"hotfix/critical-bug\",\n \"feature/admin-panel\",\n \"bugfix/validation-error\",\n \"feature/analytics\",\n \"release/v2.1.0\",\n ].map((branch) => (\n setSelectedBranch(branch)}\n data-checked={selectedBranch === branch}\n >\n {branch}\n \n ))}\n \n \n \n \n \n \n \n \n \n }\n />\n }\n >\n \n \n Select Agent \n \n \n \n \n \n This repository has no custom agents\n \n \n Custom agents are reusable instructions and tools in\n your repository.\n \n \n \n \n Create Custom Agent\n \n \n \n \n \n \n \n }\n >\n \n \n \n Start Task ⏎ \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction Navbar() {\n return (\n \n \n \n \n \n \n Open menu \n \n \n \n \n Menu \n \n \n \n Close \n \n \n \n \n \n } size=\"xs\">\n \n \n \n \n Home \n \n \n } size=\"xs\">\n \n \n \n \n Issues \n \n \n } size=\"xs\">\n \n \n \n \n Pull requests \n \n \n } size=\"xs\">\n \n \n \n \n Projects \n \n \n } size=\"xs\">\n \n \n \n \n Discussions \n \n \n } size=\"xs\">\n \n \n \n \n Codespaces \n \n \n } size=\"xs\">\n \n \n \n \n Copilot \n \n \n } size=\"xs\">\n \n \n \n \n Spark \n \n \n \n } size=\"xs\">\n \n \n \n \n Explore \n \n \n } size=\"xs\">\n \n \n \n \n Marketplace \n \n \n } size=\"xs\">\n \n \n \n \n MCP registry \n \n \n \n
\n \n \n \n \n }\n >\n \n \n SC \n \n \n \n \n \n - \n
\n \n \n SC \n \n \n \n \n shadcn\n \n \n shadcn@example.com\n \n \n \n \n \n \n \n \n \n Set status\n \n \n \n Single sign-on\n \n \n \n \n \n \n Profile\n \n \n \n Repositories\n \n \n \n Stars\n \n \n \n Gists\n \n \n \n Organizations\n \n \n \n Enterprises\n \n \n \n Sponsors\n \n \n \n \n \n \n Settings\n \n \n \n Copilot settings\n \n \n \n Feature preview\n \n \n \n Appearance\n \n \n \n Accessibility\n \n \n \n Upgrade\n \n \n \n \n \n \n Sign out\n \n \n \n \n \n \n )\n}\n\nconst usernames = [\n \"shadcn\",\n \"vercel\",\n \"nextjs\",\n \"tailwindlabs\",\n \"typescript-lang\",\n \"eslint\",\n \"prettier\",\n \"babel\",\n \"webpack\",\n \"rollup\",\n \"parcel\",\n \"vite\",\n \"react\",\n \"vue\",\n \"angular\",\n \"solid\",\n]\n\nfunction Contributors() {\n return (\n \n \n \n \n Contributors 312 \n \n \n \n \n {usernames.map((username) => (\n
\n \n {username.charAt(0)} \n \n ))}\n
\n \n \n \n + 810 contributors\n \n \n \n \n )\n}\n\nfunction Profile() {\n return (\n \n \n \n Profile \n Manage your profile information. \n \n \n \n \n \n Save Profile \n \n \n \n )\n}\n\nfunction ContributionsActivity() {\n return (\n \n \n \n Contributions & Activity \n \n Manage your contributions and activity visibility.\n \n \n \n \n \n \n \n Contributions & activity\n \n \n \n \n \n \n Make profile private and hide activity\n \n \n Enabling this will hide your contributions and activity\n from your GitHub profile and from social features like\n followers, stars, feeds, leaderboards and releases.\n \n \n \n \n \n \n \n Include private contributions on my profile\n \n \n Your contribution graph, achievements, and activity\n overview will show your private contributions without\n revealing any repository or organization information.{\" \"}\n Read more .\n \n \n \n \n \n \n \n \n \n Save Changes \n \n \n \n )\n}\n\nconst users = [\n \"shadcn\",\n \"maxleiter\",\n \"evilrabbit\",\n \"pranathip\",\n \"jorgezreik\",\n \"shuding\",\n \"rauchg\",\n]\n\nfunction AssignIssue() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n Assign Issue \n \n Select users to assign to this issue.\n \n \n \n }\n >\n \n \n Add user \n \n \n \n \n \n \n \n {(values) => (\n \n {values.map((username: string) => (\n \n \n \n {username.charAt(0)} \n \n {username}\n \n ))}\n 0 ? undefined : \"Select a item...\"\n }\n />\n \n )}\n \n \n \n No users found. \n \n {(username) => (\n \n \n \n {username.charAt(0)} \n \n {username}\n \n )}\n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxList,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/registry/bases/base/ui/command\"\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"@/registry/bases/base/ui/drawer\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemGroup,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function GithubBlock() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CodespacesCard() {\n const [isCreatingCodespace, setIsCreatingCodespace] = React.useState(false)\n\n return (\n \n \n \n \n \n Codespaces \n Local \n \n \n - \n
\n Codespaces \n \n Your workspaces in the cloud\n \n \n \n \n }\n >\n \n \n \n Create a codespace on main\n \n \n \n \n }\n />\n }\n >\n \n \n \n Codespace repository configuration\n \n \n \n \n \n \n New with options...\n \n \n \n Configure dev container\n \n \n \n Set up prebuilds\n \n \n \n \n \n \n Manage codespaces\n \n \n \n Share deep link\n \n \n \n What are codespaces?\n \n \n \n \n \n \n \n \n \n \n \n \n No codespaces \n \n You don't have any codespaces with this repository\n checked out\n \n \n \n {\n setIsCreatingCodespace(true)\n setTimeout(() => {\n setIsCreatingCodespace(false)\n }, 2000)\n }}\n disabled={isCreatingCodespace}\n >\n {isCreatingCodespace ? (\n \n ) : (\n \"\"\n )}\n Create Codespace\n \n \n Learn more about codespaces\n \n \n \n \n \n Codespace usage for this repository is paid for by{\" \"}\n shadcn .\n
\n \n \n - \n
\n \n \n Clone\n \n \n \n \n }\n >\n \n \n \n Which remote URL should I use?\n \n \n \n \n \n \n HTTPS \n SSH \n GitHub CLI \n \n \n
\n \n \n HTTPS URL\n \n \n \n \n \n \n \n \n \n \n Clone using the web URL.\n \n \n \n
\n \n \n SSH URL\n \n \n \n \n \n \n \n \n \n \n Use a password-protected SSH key.\n \n \n \n
\n \n \n CLI Command\n \n \n \n \n \n \n \n \n \n \n Work fast with our official CLI.{\" \"}\n Learn more \n \n \n \n
\n \n \n \n \n \n Open with GitHub Desktop\n \n \n \n Download ZIP\n \n
\n \n \n \n \n \n )\n}\n\nfunction RepositoryToolbar() {\n const [selectedBranch, setSelectedBranch] = React.useState(\"main\")\n return (\n \n \n
\n \n \n \n \n \n \n \n t \n \n \n
\n }>\n Add File\n \n \n \n \n \n \n Create new file\n \n \n \n Upload files\n \n \n \n \n
\n \n }\n />\n }\n >\n \n \n New Agent Task \n \n \n \n New Agent Task \n \n \n \n \n \n \n }\n />\n }\n >\n \n \n Select a branch \n \n \n \n \n Select a Branch\n \n \n \n No branches found \n \n \n {[\n \"main\",\n \"develop\",\n \"feature/123\",\n \"feature/user-authentication\",\n \"feature/dashboard-redesign\",\n \"bugfix/login-error\",\n \"hotfix/security-patch\",\n \"release/v2.0.0\",\n \"feature/api-integration\",\n \"bugfix/memory-leak\",\n \"feature/dark-mode\",\n \"feature/responsive-design\",\n \"bugfix/typo-fix\",\n \"feature/search-functionality\",\n \"release/v1.9.0\",\n \"feature/notifications\",\n \"bugfix/cache-issue\",\n \"feature/payment-gateway\",\n \"hotfix/critical-bug\",\n \"feature/admin-panel\",\n \"bugfix/validation-error\",\n \"feature/analytics\",\n \"release/v2.1.0\",\n ].map((branch) => (\n setSelectedBranch(branch)}\n data-checked={selectedBranch === branch}\n >\n {branch}\n \n ))}\n \n \n \n \n \n \n \n \n \n }\n />\n }\n >\n \n \n Select Agent \n \n \n \n \n \n This repository has no custom agents\n \n \n Custom agents are reusable instructions and tools in\n your repository.\n \n \n \n \n Create Custom Agent\n \n \n \n \n \n \n \n }\n >\n \n \n \n Start Task ⏎ \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction Navbar() {\n return (\n \n \n \n \n \n \n Open menu \n \n \n \n \n Menu \n \n \n \n Close \n \n \n \n \n \n } size=\"xs\">\n \n \n \n \n Home \n \n \n } size=\"xs\">\n \n \n \n \n Issues \n \n \n } size=\"xs\">\n \n \n \n \n Pull requests \n \n \n } size=\"xs\">\n \n \n \n \n Projects \n \n \n } size=\"xs\">\n \n \n \n \n Discussions \n \n \n } size=\"xs\">\n \n \n \n \n Codespaces \n \n \n } size=\"xs\">\n \n \n \n \n Copilot \n \n \n } size=\"xs\">\n \n \n \n \n Spark \n \n \n \n } size=\"xs\">\n \n \n \n \n Explore \n \n \n } size=\"xs\">\n \n \n \n \n Marketplace \n \n \n } size=\"xs\">\n \n \n \n \n MCP registry \n \n \n \n
\n \n \n \n \n }\n >\n \n \n SC \n \n \n \n \n \n - \n
\n \n \n SC \n \n \n \n \n shadcn\n \n \n shadcn@example.com\n \n \n \n \n \n \n \n \n \n Set status\n \n \n \n Single sign-on\n \n \n \n \n \n \n Profile\n \n \n \n Repositories\n \n \n \n Stars\n \n \n \n Gists\n \n \n \n Organizations\n \n \n \n Enterprises\n \n \n \n Sponsors\n \n \n \n \n \n \n Settings\n \n \n \n Copilot settings\n \n \n \n Feature preview\n \n \n \n Appearance\n \n \n \n Accessibility\n \n \n \n Upgrade\n \n \n \n \n \n \n Sign out\n \n \n \n \n \n \n )\n}\n\nconst usernames = [\n \"shadcn\",\n \"vercel\",\n \"nextjs\",\n \"tailwindlabs\",\n \"typescript-lang\",\n \"eslint\",\n \"prettier\",\n \"babel\",\n \"webpack\",\n \"rollup\",\n \"parcel\",\n \"vite\",\n \"react\",\n \"vue\",\n \"angular\",\n \"solid\",\n]\n\nfunction Contributors() {\n return (\n \n \n \n \n Contributors 312 \n \n \n \n \n {usernames.map((username) => (\n
\n \n {username.charAt(0)} \n \n ))}\n
\n \n \n \n + 810 contributors\n \n \n \n \n )\n}\n\nfunction Profile() {\n return (\n \n \n \n Profile \n Manage your profile information. \n \n \n \n \n \n Name \n \n \n Your name may appear around GitHub where you contribute or are\n mentioned. You can remove it at any time.\n \n \n \n Public Email \n \n \n m@shadcn.com\n \n \n m@gmail.com\n \n \n \n You can manage verified email addresses in your{\" \"}\n email settings .\n \n \n \n Bio \n \n \n You can @mention other users and organizations to\n link to them.\n \n \n \n \n \n \n Save Profile \n \n \n \n )\n}\n\nfunction ContributionsActivity() {\n return (\n \n \n \n Contributions & Activity \n \n Manage your contributions and activity visibility.\n \n \n \n \n \n \n \n Contributions & activity\n \n \n \n \n \n \n Make profile private and hide activity\n \n \n Enabling this will hide your contributions and activity\n from your GitHub profile and from social features like\n followers, stars, feeds, leaderboards and releases.\n \n \n \n \n \n \n \n Include private contributions on my profile\n \n \n Your contribution graph, achievements, and activity\n overview will show your private contributions without\n revealing any repository or organization information.{\" \"}\n Read more .\n \n \n \n \n \n \n \n \n \n Save Changes \n \n \n \n )\n}\n\nconst users = [\n \"shadcn\",\n \"maxleiter\",\n \"evilrabbit\",\n \"pranathip\",\n \"jorgezreik\",\n \"shuding\",\n \"rauchg\",\n]\n\nfunction AssignIssue() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n Assign Issue \n \n Select users to assign to this issue.\n \n \n \n }\n >\n \n \n Add user \n \n \n \n \n \n \n \n {(values) => (\n \n {values.map((username: string) => (\n \n \n \n {username.charAt(0)} \n \n {username}\n \n ))}\n 0 ? undefined : \"Select a item...\"\n }\n />\n \n )}\n \n \n \n No users found. \n \n {(username) => (\n \n \n \n {username.charAt(0)} \n \n {username}\n \n )}\n \n \n \n \n \n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/input-group-example.json b/apps/v4/public/r/styles/base-lyra/input-group-example.json
index 45d688b56a..e6df8720d1 100644
--- a/apps/v4/public/r/styles/base-lyra/input-group-example.json
+++ b/apps/v4/public/r/styles/base-lyra/input-group-example.json
@@ -20,7 +20,7 @@
"files": [
{
"path": "registry/base-lyra/examples/input-group-example.tsx",
- "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd, KbdGroup } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function InputGroupExample() {\n const [country, setCountry] = useState(\"+1\")\n\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupBasic() {\n return (\n \n \n \n \n Default (No Input Group)\n \n \n \n \n Input Group \n \n \n \n \n \n Disabled \n \n \n \n \n \n Invalid \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithAddons() {\n return (\n \n \n \n \n Addon (inline-start)\n \n \n \n \n \n \n \n \n \n \n Addon (inline-end)\n \n \n \n \n \n \n \n \n \n \n Addon (inline-start and inline-end)\n \n \n \n \n \n \n \n \n \n \n \n \n Addon (block-start) \n \n \n \n First Name \n \n \n \n \n \n Addon (block-end) \n \n \n \n 20/240 characters \n \n \n \n \n \n Multiple Icons \n \n \n \n \n toast(\"Copied to clipboard\")}\n >\n \n \n \n \n \n \n \n \n \n Description \n \n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n Label \n \n \n Label \n \n \n \n \n \n \n (optional) \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithButtons() {\n return (\n \n \n \n Button \n \n \n \n Default \n \n \n \n \n \n Outline \n \n \n \n \n \n Secondary \n \n \n \n \n \n Button \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithTooltip({\n country,\n setCountry,\n}: {\n country: string\n setCountry: (value: string) => void\n}) {\n return (\n \n \n \n Tooltip \n \n \n \n \n \n }\n >\n \n \n This is content in a tooltip. \n \n \n \n \n This is a description of the input group.\n \n \n \n Dropdown \n \n \n \n \n \n }\n >\n {country}{\" \"}\n \n \n \n setCountry(\"+1\")}>\n +1\n \n setCountry(\"+44\")}>\n +44\n \n setCountry(\"+46\")}>\n +46\n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n Popover \n \n \n } nativeButton={false}>\n \n \n \n \n \n \n Your connection is not secure. \n \n You should not enter any sensitive information on this site.\n \n \n \n \n \n https://\n \n \n \n toast(\"Added to favorites\")}\n >\n \n \n \n \n \n This is a description of the input group.\n \n \n \n Button Group \n \n https:// \n \n \n \n \n \n \n .com \n \n \n This is a description of the input group.\n \n \n \n \n )\n}\n\nfunction InputGroupWithKbd() {\n return (\n \n \n \n Input Group with Kbd \n \n \n \n ⌘K \n \n \n \n \n \n ⌘K \n \n \n \n \n Ask AI \n \n Tab \n \n \n \n \n \n \n \n \n \n Ctrl \n C \n \n \n \n \n \n Username \n \n \n \n \n \n
\n \n \n \n This username is available.\n \n \n \n \n \n \n \n 12 results \n \n \n \n \n \n \n Disabled \n \n \n \n First Name \n \n \n \n \n \n \n \n \n Last Name \n \n \n \n \n \n \n \n \n \n \n Loading ("data-disabled="true")\n \n \n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n \n )\n}\n\nfunction InputGroupInCard() {\n return (\n \n \n \n Card with Input Group \n This is a card with an input group. \n \n \n \n \n Email Address \n \n \n \n \n \n \n \n \n Website URL \n \n \n https:// \n \n \n \n \n \n \n \n \n \n Feedback & Comments\n \n \n \n \n 0/500 characters \n \n \n \n \n \n \n Cancel \n Submit \n \n \n \n )\n}\n\nfunction InputGroupTextareaExamples() {\n return (\n \n \n \n \n Default Textarea (No Input Group)\n \n \n \n \n \n Input Group\n \n \n \n \n \n This is a description of the input group.\n \n \n \n Invalid \n \n \n \n \n This is a description of the input group.\n \n \n \n Disabled \n \n \n \n \n This is a description of the input group.\n \n \n \n Addon (block-start) \n \n \n \n Ask, Search or Chat... \n \n \n \n \n This is a description of the input group.\n \n \n \n \n Addon (block-end)\n \n \n \n \n 0/280 characters \n \n \n Send \n \n \n \n \n \n Addon (Buttons) \n \n \n \n \n Cancel\n \n \n Post Comment\n \n \n \n \n \n Code Editor \n \n \n \n \n \n script.js\n \n \n \n \n \n \n \n \n \n Line 1, Column 1 \n JavaScript \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd, KbdGroup } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function InputGroupExample() {\n const [country, setCountry] = useState(\"+1\")\n\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupBasic() {\n return (\n \n \n \n \n Default (No Input Group)\n \n \n \n \n Input Group \n \n \n \n \n \n Disabled \n \n \n \n \n \n Invalid \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithAddons() {\n return (\n \n \n \n \n Addon (inline-start)\n \n \n \n \n \n \n \n \n \n \n Addon (inline-end)\n \n \n \n \n \n \n \n \n \n \n Addon (inline-start and inline-end)\n \n \n \n \n \n \n \n \n \n \n \n \n Addon (block-start) \n \n \n \n First Name \n \n \n \n \n \n Addon (block-end) \n \n \n \n 20/240 characters \n \n \n \n \n \n Multiple Icons \n \n \n \n \n toast(\"Copied to clipboard\")}\n >\n \n \n \n \n \n \n \n \n \n Description \n \n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n Label \n \n \n Label \n \n \n \n \n \n \n (optional) \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithButtons() {\n return (\n \n \n \n Button \n \n \n \n Default \n \n \n \n \n \n Outline \n \n \n \n \n \n Secondary \n \n \n \n \n \n Button \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithTooltip({\n country,\n setCountry,\n}: {\n country: string\n setCountry: (value: string) => void\n}) {\n return (\n \n \n \n Tooltip \n \n \n \n \n \n }\n >\n \n \n This is content in a tooltip. \n \n \n \n \n This is a description of the input group.\n \n \n \n Dropdown \n \n \n \n \n \n }\n >\n {country}{\" \"}\n \n \n \n setCountry(\"+1\")}>\n +1\n \n setCountry(\"+44\")}>\n +44\n \n setCountry(\"+46\")}>\n +46\n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n Popover \n \n \n } nativeButton={false}>\n \n \n \n \n \n \n Your connection is not secure. \n \n You should not enter any sensitive information on this site.\n \n \n \n \n \n https://\n \n \n \n toast(\"Added to favorites\")}\n >\n \n \n \n \n \n This is a description of the input group.\n \n \n \n Button Group \n \n https:// \n \n \n \n \n \n \n .com \n \n \n This is a description of the input group.\n \n \n \n \n )\n}\n\nfunction InputGroupWithKbd() {\n return (\n \n \n \n Input Group with Kbd \n \n \n \n ⌘K \n \n \n \n \n \n ⌘K \n \n \n \n \n Ask AI \n \n Tab \n \n \n \n \n \n \n \n \n \n Ctrl \n C \n \n \n \n \n \n Username \n \n \n \n \n \n
\n \n \n \n This username is available.\n \n \n \n \n \n \n \n 12 results \n \n \n \n \n \n \n Disabled \n \n \n \n First Name \n \n \n \n \n \n \n \n \n Last Name \n \n \n \n \n \n \n \n \n \n \n Loading ("data-disabled="true")\n \n \n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n \n )\n}\n\nfunction InputGroupInCard() {\n return (\n \n \n \n Card with Input Group \n This is a card with an input group. \n \n \n \n \n Email Address \n \n \n \n \n \n \n \n \n Website URL \n \n \n https:// \n \n \n \n \n \n \n \n \n \n Feedback & Comments\n \n \n \n \n 0/500 characters \n \n \n \n \n \n \n Cancel \n Submit \n \n \n \n )\n}\n\nfunction InputGroupTextareaExamples() {\n return (\n \n \n \n \n Default Textarea (No Input Group)\n \n \n \n \n \n Input Group\n \n \n \n \n \n This is a description of the input group.\n \n \n \n Invalid \n \n \n \n \n This is a description of the input group.\n \n \n \n Disabled \n \n \n \n \n This is a description of the input group.\n \n \n \n Addon (block-start) \n \n \n \n Ask, Search or Chat... \n \n \n \n \n This is a description of the input group.\n \n \n \n \n Addon (block-end)\n \n \n \n \n 0/280 characters \n \n \n Send \n \n \n \n \n \n Addon (Buttons) \n \n \n \n \n Cancel\n \n \n Post Comment\n \n \n \n \n \n Code Editor \n \n \n \n \n \n script.js\n \n \n \n \n \n \n \n \n \n Line 1, Column 1 \n JavaScript \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/input-otp-example.json b/apps/v4/public/r/styles/base-lyra/input-otp-example.json
index 43eeb2cc35..4e9b5f3c96 100644
--- a/apps/v4/public/r/styles/base-lyra/input-otp-example.json
+++ b/apps/v4/public/r/styles/base-lyra/input-otp-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-lyra/examples/input-otp-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS } from \"input-otp\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from \"@/registry/bases/base/ui/input-otp\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function InputOTPExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPSimple() {\n return (\n \n \n Simple \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPPattern() {\n return (\n \n \n Digits Only \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPWithSeparator() {\n const [value, setValue] = React.useState(\"123456\")\n\n return (\n \n \n With Separator \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPAlphanumeric() {\n return (\n \n \n Alphanumeric \n Accepts both letters and numbers. \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPDisabled() {\n return (\n \n \n Disabled \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPFourDigits() {\n return (\n \n \n 4 Digits \n Common pattern for PIN codes. \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPInvalid() {\n const [value, setValue] = React.useState(\"000000\")\n\n return (\n \n \n Invalid State \n \n Example showing the invalid error state.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPForm() {\n return (\n \n \n \n Verify your login \n \n Enter the verification code we sent to your email address:{\" \"}\n m@example.com .\n \n \n \n \n \n \n \n Verification code\n \n \n \n Resend Code\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n I no longer have access to this email address. \n \n \n \n \n \n \n Verify\n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS } from \"input-otp\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from \"@/registry/bases/base/ui/input-otp\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function InputOTPExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPSimple() {\n return (\n \n \n Simple \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPPattern() {\n return (\n \n \n Digits Only \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPWithSeparator() {\n const [value, setValue] = React.useState(\"123456\")\n\n return (\n \n \n With Separator \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPAlphanumeric() {\n return (\n \n \n Alphanumeric \n Accepts both letters and numbers. \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPDisabled() {\n return (\n \n \n Disabled \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPFourDigits() {\n return (\n \n \n 4 Digits \n Common pattern for PIN codes. \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPInvalid() {\n const [value, setValue] = React.useState(\"000000\")\n\n return (\n \n \n Invalid State \n \n Example showing the invalid error state.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPForm() {\n return (\n \n \n \n Verify your login \n \n Enter the verification code we sent to your email address:{\" \"}\n m@example.com .\n \n \n \n \n \n \n \n Verification code\n \n \n \n Resend Code\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n I no longer have access to this email address. \n \n \n \n \n \n \n Verify\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/input-otp.json b/apps/v4/public/r/styles/base-lyra/input-otp.json
index 55e8d0acb7..09d1764930 100644
--- a/apps/v4/public/r/styles/base-lyra/input-otp.json
+++ b/apps/v4/public/r/styles/base-lyra/input-otp.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-lyra/ui/input-otp.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps & {\n containerClassName?: string\n}) {\n return (\n \n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n \n {char}\n {hasFakeCaret && (\n
\n )}\n
\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n \n \n
\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps & {\n containerClassName?: string\n}) {\n return (\n \n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n \n {char}\n {hasFakeCaret && (\n
\n )}\n
\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n \n \n
\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/item-example.json b/apps/v4/public/r/styles/base-lyra/item-example.json
index 1eaf631449..8ecf0dfae5 100644
--- a/apps/v4/public/r/styles/base-lyra/item-example.json
+++ b/apps/v4/public/r/styles/base-lyra/item-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-lyra/examples/item-example.tsx",
- "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemHeader,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ItemExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DefaultVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction OutlineLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction MutedLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction DefaultItemGroup() {\n return (\n \n \n - \n
\n Item 1 \n First item in the group. \n \n \n - \n
\n Item 2 \n Second item in the group. \n \n \n - \n
\n Item 3 \n Third item in the group. \n \n \n \n \n )\n}\n\nfunction OutlineItemGroup() {\n return (\n \n \n - \n
\n \n \n \n Item 1 \n First item with icon. \n \n \n - \n
\n \n \n \n Item 2 \n Second item with icon. \n \n \n - \n
\n \n \n \n Item 3 \n Third item with icon. \n \n \n \n \n )\n}\n\nfunction MutedItemGroup() {\n return (\n \n \n - \n
\n Item 1 \n First item in muted group. \n \n \n \n Action\n \n \n \n - \n
\n Item 2 \n Second item in muted group. \n \n \n \n Action\n \n \n \n - \n
\n Item 3 \n Third item in muted group. \n \n \n \n Action\n \n \n \n \n \n )\n}\n\nfunction ItemSeparatorExample() {\n return (\n \n \n - \n
\n \n \n \n Inbox \n View all incoming messages. \n \n \n \n - \n
\n \n \n \n Sent \n View all sent messages. \n \n \n \n - \n
\n \n \n \n Drafts \n View all draft messages. \n \n \n \n - \n
\n \n \n \n Archive \n View archived messages. \n \n \n \n \n )\n}\n\nfunction ItemHeaderExamples() {\n return (\n \n - \n
\n Design System \n \n \n Component Library \n \n A comprehensive collection of reusable UI components for building\n consistent interfaces.\n \n \n \n - \n
\n Marketing \n \n \n Campaign Analytics \n \n Track performance metrics and engagement rates across all marketing\n channels.\n \n \n \n - \n
\n Engineering \n \n \n API Documentation \n \n Complete reference guide for all available endpoints and\n authentication methods.\n \n \n \n \n )\n}\n\nfunction ItemFooterExamples() {\n return (\n \n - \n
\n Quarterly Report Q4 2024 \n \n Financial overview including revenue, expenses, and growth metrics\n for the fourth quarter.\n \n \n \n \n Last updated 2 hours ago\n \n \n \n - \n
\n User Research Findings \n \n Insights from interviews and surveys conducted with 50+ users across\n different demographics.\n \n \n \n \n Created by Sarah Chen\n \n \n \n - \n
\n Product Roadmap \n \n Planned features and improvements scheduled for the next three\n months.\n \n \n \n 12 comments \n \n \n \n )\n}\n\nfunction ItemHeaderAndFooterExamples() {\n return (\n \n - \n
\n Team Project \n \n \n Website Redesign \n \n Complete overhaul of the company website with modern design\n principles and improved user experience.\n \n \n \n \n Updated 5 minutes ago\n \n \n \n - \n
\n Client Work \n \n \n Mobile App Development \n \n Building a cross-platform mobile application for iOS and Android\n with React Native.\n \n \n \n \n Status: In Progress\n \n \n \n - \n
\n Documentation \n \n \n API Integration Guide \n \n Step-by-step instructions for integrating third-party APIs with\n authentication and error handling.\n \n \n \n \n Category: Technical • 3 attachments\n \n \n \n \n )\n}\n\nfunction DefaultVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImageSmall() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImageExtraSmall() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n \n - \n
\n \n \n \n Document \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n \n Download \n \n \n \n )\n}\n\nfunction MutedVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n",
+ "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemHeader,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ItemExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DefaultVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction OutlineLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction MutedLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction DefaultItemGroup() {\n return (\n \n \n - \n
\n Item 1 \n First item in the group. \n \n \n - \n
\n Item 2 \n Second item in the group. \n \n \n - \n
\n Item 3 \n Third item in the group. \n \n \n \n \n )\n}\n\nfunction OutlineItemGroup() {\n return (\n \n \n - \n
\n \n \n \n Item 1 \n First item with icon. \n \n \n - \n
\n \n \n \n Item 2 \n Second item with icon. \n \n \n - \n
\n \n \n \n Item 3 \n Third item with icon. \n \n \n \n \n )\n}\n\nfunction MutedItemGroup() {\n return (\n \n \n - \n
\n Item 1 \n First item in muted group. \n \n \n \n Action\n \n \n \n - \n
\n Item 2 \n Second item in muted group. \n \n \n \n Action\n \n \n \n - \n
\n Item 3 \n Third item in muted group. \n \n \n \n Action\n \n \n \n \n \n )\n}\n\nfunction ItemSeparatorExample() {\n return (\n \n \n - \n
\n \n \n \n Inbox \n View all incoming messages. \n \n \n \n - \n
\n \n \n \n Sent \n View all sent messages. \n \n \n \n - \n
\n \n \n \n Drafts \n View all draft messages. \n \n \n \n - \n
\n \n \n \n Archive \n View archived messages. \n \n \n \n \n )\n}\n\nfunction ItemHeaderExamples() {\n return (\n \n - \n
\n Design System \n \n \n Component Library \n \n A comprehensive collection of reusable UI components for building\n consistent interfaces.\n \n \n \n - \n
\n Marketing \n \n \n Campaign Analytics \n \n Track performance metrics and engagement rates across all marketing\n channels.\n \n \n \n - \n
\n Engineering \n \n \n API Documentation \n \n Complete reference guide for all available endpoints and\n authentication methods.\n \n \n \n \n )\n}\n\nfunction ItemFooterExamples() {\n return (\n \n - \n
\n Quarterly Report Q4 2024 \n \n Financial overview including revenue, expenses, and growth metrics\n for the fourth quarter.\n \n \n \n \n Last updated 2 hours ago\n \n \n \n - \n
\n User Research Findings \n \n Insights from interviews and surveys conducted with 50+ users across\n different demographics.\n \n \n \n \n Created by Sarah Chen\n \n \n \n - \n
\n Product Roadmap \n \n Planned features and improvements scheduled for the next three\n months.\n \n \n \n 12 comments \n \n \n \n )\n}\n\nfunction ItemHeaderAndFooterExamples() {\n return (\n \n - \n
\n Team Project \n \n \n Website Redesign \n \n Complete overhaul of the company website with modern design\n principles and improved user experience.\n \n \n \n \n Updated 5 minutes ago\n \n \n \n - \n
\n Client Work \n \n \n Mobile App Development \n \n Building a cross-platform mobile application for iOS and Android\n with React Native.\n \n \n \n \n Status: In Progress\n \n \n \n - \n
\n Documentation \n \n \n API Integration Guide \n \n Step-by-step instructions for integrating third-party APIs with\n authentication and error handling.\n \n \n \n \n Category: Technical • 3 attachments\n \n \n \n \n )\n}\n\nfunction DefaultVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImageSmall() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImageExtraSmall() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n \n - \n
\n \n \n \n Document \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n \n Download \n \n \n \n )\n}\n\nfunction MutedVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/kbd-example.json b/apps/v4/public/r/styles/base-lyra/kbd-example.json
index a728dfae7e..1d964b6d76 100644
--- a/apps/v4/public/r/styles/base-lyra/kbd-example.json
+++ b/apps/v4/public/r/styles/base-lyra/kbd-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-lyra/examples/kbd-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd, KbdGroup } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function KbdExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction KbdBasic() {\n return (\n \n \n Ctrl \n ⌘K \n Ctrl + B \n
\n \n )\n}\n\nfunction KbdModifierKeys() {\n return (\n \n \n ⌘ \n C \n
\n \n )\n}\n\nfunction KbdGroupExample() {\n return (\n \n \n Ctrl \n Shift \n P \n \n \n )\n}\n\nfunction KbdArrowKeys() {\n return (\n \n \n ↑ \n ↓ \n ← \n → \n
\n \n )\n}\n\nfunction KbdWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction KbdWithIconsAndText() {\n return (\n \n \n \n \n Left\n \n \n \n Voice Enabled\n \n \n \n )\n}\n\nfunction KbdInInputGroup() {\n return (\n \n \n \n \n Space \n \n \n \n )\n}\n\nfunction KbdInTooltip() {\n return (\n \n \n }>\n \n \n \n \n Save Changes S \n
\n \n \n \n )\n}\n\nfunction KbdWithSamp() {\n return (\n \n \n File \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd, KbdGroup } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function KbdExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction KbdBasic() {\n return (\n \n \n Ctrl \n ⌘K \n Ctrl + B \n
\n \n )\n}\n\nfunction KbdModifierKeys() {\n return (\n \n \n ⌘ \n C \n
\n \n )\n}\n\nfunction KbdGroupExample() {\n return (\n \n \n Ctrl \n Shift \n P \n \n \n )\n}\n\nfunction KbdArrowKeys() {\n return (\n \n \n ↑ \n ↓ \n ← \n → \n
\n \n )\n}\n\nfunction KbdWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction KbdWithIconsAndText() {\n return (\n \n \n \n \n Left\n \n \n \n Voice Enabled\n \n \n \n )\n}\n\nfunction KbdInInputGroup() {\n return (\n \n \n \n \n Space \n \n \n \n )\n}\n\nfunction KbdInTooltip() {\n return (\n \n \n }>\n \n \n \n \n Save Changes S \n
\n \n \n \n )\n}\n\nfunction KbdWithSamp() {\n return (\n \n \n File \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/menubar-example.json b/apps/v4/public/r/styles/base-lyra/menubar-example.json
index 98fdc69c5c..79232e0b29 100644
--- a/apps/v4/public/r/styles/base-lyra/menubar-example.json
+++ b/apps/v4/public/r/styles/base-lyra/menubar-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/menubar-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarMenu,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n} from \"@/registry/bases/base/ui/menubar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function MenubarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction MenubarBasic() {\n return (\n \n \n \n File \n \n \n New Tab ⌘T \n \n \n New Window ⌘N \n \n New Incognito Window \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n Cut \n Copy \n Paste \n \n \n \n \n )\n}\n\nfunction MenubarWithSubmenu() {\n return (\n \n \n \n File \n \n \n Share \n \n Email link \n Messages \n Notes \n \n \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n Find \n \n Find... \n Find Next \n Find Previous \n \n \n \n Cut \n Copy \n Paste \n \n \n \n \n )\n}\n\nfunction MenubarWithCheckboxes() {\n return (\n \n \n \n View \n \n Always Show Bookmarks Bar \n \n Always Show Full URLs\n \n \n \n Reload ⌘R \n \n \n Force Reload ⇧⌘R \n \n \n \n \n Format \n \n Strikethrough \n Code \n Superscript \n \n \n \n \n )\n}\n\nfunction MenubarWithRadio() {\n const [user, setUser] = React.useState(\"benoit\")\n const [theme, setTheme] = React.useState(\"system\")\n\n return (\n \n \n \n Profiles \n \n \n Andy \n Benoit \n Luis \n \n \n Edit... \n Add Profile... \n \n \n \n Theme \n \n \n Light \n Dark \n System \n \n \n \n \n \n )\n}\n\nfunction MenubarWithIcons() {\n return (\n \n \n \n File \n \n \n \n New File ⌘N \n \n \n \n Open Folder\n \n \n \n \n Save ⌘S \n \n \n \n \n More \n \n \n \n \n Settings\n \n \n \n Help\n \n \n \n \n Delete\n \n \n \n \n \n \n )\n}\n\nfunction MenubarWithShortcuts() {\n return (\n \n \n \n File \n \n \n New Tab ⌘T \n \n \n New Window ⌘N \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n Cut ⌘X \n \n \n Copy ⌘C \n \n \n Paste ⌘V \n \n \n \n \n \n )\n}\n\nfunction MenubarFormat() {\n return (\n \n \n \n Format \n \n \n \n Bold ⌘B \n \n \n \n Italic ⌘I \n \n \n \n Underline ⌘U \n \n \n Strikethrough \n Code \n \n \n \n View \n \n Show Ruler \n Show Grid \n \n Zoom In \n Zoom Out \n \n \n \n \n )\n}\n\nfunction MenubarInsert() {\n return (\n \n \n \n Insert \n \n \n \n \n Media\n \n \n Image \n Video \n Audio \n \n \n \n \n \n Link ⌘K \n \n \n \n Table\n \n \n \n \n Tools \n \n \n \n Find & Replace ⌘F \n \n \n \n Spell Check\n \n \n \n \n \n )\n}\n\nfunction MenubarDestructive() {\n return (\n \n \n \n File \n \n \n \n New File ⌘N \n \n \n \n Open Folder\n \n \n \n \n Delete File ⌘⌫ \n \n \n \n \n Account \n \n \n \n Profile\n \n \n \n Settings\n \n \n \n \n Sign out\n \n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction MenubarInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Menubar Example \n \n Use the menubar below to see the menu options.\n \n \n \n \n File \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n More Options \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n \n Delete\n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarMenu,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n} from \"@/registry/bases/base/ui/menubar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function MenubarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction MenubarBasic() {\n return (\n \n \n \n File \n \n \n New Tab ⌘T \n \n \n New Window ⌘N \n \n New Incognito Window \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n Cut \n Copy \n Paste \n \n \n \n \n )\n}\n\nfunction MenubarWithSubmenu() {\n return (\n \n \n \n File \n \n \n Share \n \n Email link \n Messages \n Notes \n \n \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n Find \n \n Find... \n Find Next \n Find Previous \n \n \n \n Cut \n Copy \n Paste \n \n \n \n \n )\n}\n\nfunction MenubarWithCheckboxes() {\n return (\n \n \n \n View \n \n Always Show Bookmarks Bar \n \n Always Show Full URLs\n \n \n \n Reload ⌘R \n \n \n Force Reload ⇧⌘R \n \n \n \n \n Format \n \n Strikethrough \n Code \n Superscript \n \n \n \n \n )\n}\n\nfunction MenubarWithRadio() {\n const [user, setUser] = React.useState(\"benoit\")\n const [theme, setTheme] = React.useState(\"system\")\n\n return (\n \n \n \n Profiles \n \n \n Andy \n Benoit \n Luis \n \n \n Edit... \n Add Profile... \n \n \n \n Theme \n \n \n Light \n Dark \n System \n \n \n \n \n \n )\n}\n\nfunction MenubarWithIcons() {\n return (\n \n \n \n File \n \n \n \n New File ⌘N \n \n \n \n Open Folder\n \n \n \n \n Save ⌘S \n \n \n \n \n More \n \n \n \n \n Settings\n \n \n \n Help\n \n \n \n \n Delete\n \n \n \n \n \n \n )\n}\n\nfunction MenubarWithShortcuts() {\n return (\n \n \n \n File \n \n \n New Tab ⌘T \n \n \n New Window ⌘N \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n Cut ⌘X \n \n \n Copy ⌘C \n \n \n Paste ⌘V \n \n \n \n \n \n )\n}\n\nfunction MenubarFormat() {\n return (\n \n \n \n Format \n \n \n \n Bold ⌘B \n \n \n \n Italic ⌘I \n \n \n \n Underline ⌘U \n \n \n Strikethrough \n Code \n \n \n \n View \n \n Show Ruler \n Show Grid \n \n Zoom In \n Zoom Out \n \n \n \n \n )\n}\n\nfunction MenubarInsert() {\n return (\n \n \n \n Insert \n \n \n \n \n Media\n \n \n Image \n Video \n Audio \n \n \n \n \n \n Link ⌘K \n \n \n \n Table\n \n \n \n \n Tools \n \n \n \n Find & Replace ⌘F \n \n \n \n Spell Check\n \n \n \n \n \n )\n}\n\nfunction MenubarDestructive() {\n return (\n \n \n \n File \n \n \n \n New File ⌘N \n \n \n \n Open Folder\n \n \n \n \n Delete File ⌘⌫ \n \n \n \n \n Account \n \n \n \n Profile\n \n \n \n Settings\n \n \n \n \n Sign out\n \n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction MenubarInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Menubar Example \n \n Use the menubar below to see the menu options.\n \n \n \n \n File \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n More Options \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n \n Delete\n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/menubar.json b/apps/v4/public/r/styles/base-lyra/menubar.json
index e258fdb870..d74a16c970 100644
--- a/apps/v4/public/r/styles/base-lyra/menubar.json
+++ b/apps/v4/public/r/styles/base-lyra/menubar.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-lyra/ui/menubar.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\nimport { Menubar as MenubarPrimitive } from \"@base-ui/react/menubar\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Menubar({ className, ...props }: MenubarPrimitive.Props) {\n return (\n \n )\n}\n\nfunction MenubarMenu({ ...props }: React.ComponentProps) {\n return \n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\nimport { Menubar as MenubarPrimitive } from \"@base-ui/react/menubar\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Menubar({ className, ...props }: MenubarPrimitive.Props) {\n return (\n \n )\n}\n\nfunction MenubarMenu({ ...props }: React.ComponentProps) {\n return \n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/native-select.json b/apps/v4/public/r/styles/base-lyra/native-select.json
index 680144a799..ecb9f520bc 100644
--- a/apps/v4/public/r/styles/base-lyra/native-select.json
+++ b/apps/v4/public/r/styles/base-lyra/native-select.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/native-select.tsx",
- "content": "import * as React from \"react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype NativeSelectProps = Omit, \"size\"> & {\n size?: \"sm\" | \"default\"\n}\n\nfunction NativeSelect({\n className,\n size = \"default\",\n ...props\n}: NativeSelectProps) {\n return (\n \n \n \n
\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return \n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n \n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n",
+ "content": "import * as React from \"react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype NativeSelectProps = Omit, \"size\"> & {\n size?: \"sm\" | \"default\"\n}\n\nfunction NativeSelect({\n className,\n size = \"default\",\n ...props\n}: NativeSelectProps) {\n return (\n \n \n \n
\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return \n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n \n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/navigation-menu-example.json b/apps/v4/public/r/styles/base-lyra/navigation-menu-example.json
index 9efa5890a7..34418fcf39 100644
--- a/apps/v4/public/r/styles/base-lyra/navigation-menu-example.json
+++ b/apps/v4/public/r/styles/base-lyra/navigation-menu-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/navigation-menu-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport Link from \"next/link\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from \"@/registry/bases/base/ui/navigation-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst components: { title: string; href: string; description: string }[] = [\n {\n title: \"Alert Dialog\",\n href: \"/docs/primitives/alert-dialog\",\n description:\n \"A modal dialog that interrupts the user with important content and expects a response.\",\n },\n {\n title: \"Hover Card\",\n href: \"/docs/primitives/hover-card\",\n description:\n \"For sighted users to preview content available behind a link.\",\n },\n {\n title: \"Progress\",\n href: \"/docs/primitives/progress\",\n description:\n \"Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.\",\n },\n {\n title: \"Scroll-area\",\n href: \"/docs/primitives/scroll-area\",\n description: \"Visually or semantically separates content.\",\n },\n {\n title: \"Tabs\",\n href: \"/docs/primitives/tabs\",\n description:\n \"A set of layered sections of content—known as tab panels—that are displayed one at a time.\",\n },\n {\n title: \"Tooltip\",\n href: \"/docs/primitives/tooltip\",\n description:\n \"A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.\",\n },\n]\n\nexport default function NavigationMenuExample() {\n return (\n \n \n \n )\n}\n\nfunction NavigationMenuBasic() {\n return (\n \n \n \n \n Getting started \n \n \n \n Re-usable components built with Tailwind CSS.\n \n \n How to install dependencies and structure your app.\n \n \n Styles for headings, paragraphs, lists...etc\n \n \n \n \n \n Components \n \n \n {components.map((component) => (\n \n {component.description}\n \n ))}\n \n \n \n \n With Icon \n \n \n \n \n }\n >\n \n Backlog\n \n \n }\n >\n \n To Do\n \n \n }\n >\n \n Done\n \n \n \n \n \n \n }\n className={navigationMenuTriggerStyle()}\n >\n Documentation\n \n \n \n \n \n )\n}\n\nfunction ListItem({\n title,\n children,\n href,\n ...props\n}: React.ComponentPropsWithoutRef<\"li\"> & { href: string }) {\n return (\n \n }>\n \n
{title}
\n
{children}
\n
\n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport Link from \"next/link\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from \"@/registry/bases/base/ui/navigation-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst components: { title: string; href: string; description: string }[] = [\n {\n title: \"Alert Dialog\",\n href: \"/docs/primitives/alert-dialog\",\n description:\n \"A modal dialog that interrupts the user with important content and expects a response.\",\n },\n {\n title: \"Hover Card\",\n href: \"/docs/primitives/hover-card\",\n description:\n \"For sighted users to preview content available behind a link.\",\n },\n {\n title: \"Progress\",\n href: \"/docs/primitives/progress\",\n description:\n \"Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.\",\n },\n {\n title: \"Scroll-area\",\n href: \"/docs/primitives/scroll-area\",\n description: \"Visually or semantically separates content.\",\n },\n {\n title: \"Tabs\",\n href: \"/docs/primitives/tabs\",\n description:\n \"A set of layered sections of content—known as tab panels—that are displayed one at a time.\",\n },\n {\n title: \"Tooltip\",\n href: \"/docs/primitives/tooltip\",\n description:\n \"A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.\",\n },\n]\n\nexport default function NavigationMenuExample() {\n return (\n \n \n \n )\n}\n\nfunction NavigationMenuBasic() {\n return (\n \n \n \n \n Getting started \n \n \n \n Re-usable components built with Tailwind CSS.\n \n \n How to install dependencies and structure your app.\n \n \n Styles for headings, paragraphs, lists...etc\n \n \n \n \n \n Components \n \n \n {components.map((component) => (\n \n {component.description}\n \n ))}\n \n \n \n \n With Icon \n \n \n \n \n }\n >\n \n Backlog\n \n \n }\n >\n \n To Do\n \n \n }\n >\n \n Done\n \n \n \n \n \n \n }\n className={navigationMenuTriggerStyle()}\n >\n Documentation\n \n \n \n \n \n )\n}\n\nfunction ListItem({\n title,\n children,\n href,\n ...props\n}: React.ComponentPropsWithoutRef<\"li\"> & { href: string }) {\n return (\n \n }>\n \n
{title}
\n
{children}
\n
\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/navigation-menu.json b/apps/v4/public/r/styles/base-lyra/navigation-menu.json
index 96fb4645b3..ea3a1abe61 100644
--- a/apps/v4/public/r/styles/base-lyra/navigation-menu.json
+++ b/apps/v4/public/r/styles/base-lyra/navigation-menu.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/navigation-menu.tsx",
- "content": "import { NavigationMenu as NavigationMenuPrimitive } from \"@base-ui/react/navigation-menu\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction NavigationMenu({\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Root.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: NavigationMenuPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: NavigationMenuPrimitive.Item.Props) {\n return (\n \n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-none px-2.5 py-1.5 text-xs font-medium transition-all focus-visible:ring-1 focus-visible:outline-1 disabled:opacity-50 group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center disabled:pointer-events-none outline-none\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Trigger.Props) {\n return (\n \n {children}{\" \"}\n \n \n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: NavigationMenuPrimitive.Content.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuPositioner({\n className,\n side = \"bottom\",\n sideOffset = 8,\n align = \"start\",\n alignOffset = 0,\n ...props\n}: NavigationMenuPrimitive.Positioner.Props) {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: NavigationMenuPrimitive.Link.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: NavigationMenuPrimitive.Icon.Props) {\n return (\n \n
\n \n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuIndicator,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n NavigationMenuPositioner,\n}\n",
+ "content": "import { NavigationMenu as NavigationMenuPrimitive } from \"@base-ui/react/navigation-menu\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction NavigationMenu({\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Root.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: NavigationMenuPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: NavigationMenuPrimitive.Item.Props) {\n return (\n \n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-none px-2.5 py-1.5 text-xs font-medium transition-all focus-visible:ring-1 focus-visible:outline-1 disabled:opacity-50 group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center disabled:pointer-events-none outline-none\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Trigger.Props) {\n return (\n \n {children}{\" \"}\n \n \n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: NavigationMenuPrimitive.Content.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuPositioner({\n className,\n side = \"bottom\",\n sideOffset = 8,\n align = \"start\",\n alignOffset = 0,\n ...props\n}: NavigationMenuPrimitive.Positioner.Props) {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: NavigationMenuPrimitive.Link.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: NavigationMenuPrimitive.Icon.Props) {\n return (\n \n
\n \n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuIndicator,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n NavigationMenuPositioner,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/pagination.json b/apps/v4/public/r/styles/base-lyra/pagination.json
index f7666e0a91..9322c9bb0b 100644
--- a/apps/v4/public/r/styles/base-lyra/pagination.json
+++ b/apps/v4/public/r/styles/base-lyra/pagination.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-lyra/ui/pagination.tsx",
- "content": "import * as React from \"react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return \n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n \n }\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n Previous\n \n \n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n Next \n \n \n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n \n More pages \n \n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n}\n",
+ "content": "import * as React from \"react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return \n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n \n }\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n Previous\n \n \n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n Next \n \n \n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n \n More pages \n \n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/preview.json b/apps/v4/public/r/styles/base-lyra/preview.json
index 518eb08c4d..3a89d390bd 100644
--- a/apps/v4/public/r/styles/base-lyra/preview.json
+++ b/apps/v4/public/r/styles/base-lyra/preview.json
@@ -33,7 +33,7 @@
"files": [
{
"path": "registry/base-lyra/blocks/preview.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useState } from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { ButtonGroup } from \"@/registry/bases/base/ui/button-group\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/bases/base/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"@/registry/bases/base/ui/sheet\"\nimport { Slider } from \"@/registry/bases/base/ui/slider\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { Switch } from \"@/registry/bases/base/ui/switch\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CoverExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction FieldExamples() {\n const [gpuCount, setGpuCount] = React.useState(8)\n const [value, setValue] = useState([200, 800])\n\n const handleGpuAdjustment = React.useCallback((adjustment: number) => {\n setGpuCount((prevCount) =>\n Math.max(1, Math.min(99, prevCount + adjustment))\n )\n }, [])\n\n const handleGpuInputChange = React.useCallback(\n (e: React.ChangeEvent) => {\n const value = parseInt(e.target.value, 10)\n if (!isNaN(value) && value >= 1 && value <= 99) {\n setGpuCount(value)\n }\n },\n []\n )\n\n return (\n \n \n \n \n Compute Environment \n \n Select the compute environment for your cluster.\n \n \n \n \n \n Kubernetes \n \n Run GPU workloads on a K8s configured cluster. This is the\n default.\n \n \n \n \n \n \n \n \n Virtual Machine \n \n Access a VM configured cluster to run workloads. (Coming\n soon)\n \n \n \n \n \n \n \n \n \n \n \n Number of GPUs\n \n You can add more later. \n \n \n \n handleGpuAdjustment(-1)}\n disabled={gpuCount <= 1}\n >\n \n \n handleGpuAdjustment(1)}\n disabled={gpuCount >= 99}\n >\n \n \n \n \n \n \n \n Wallpaper Tinting \n \n Allow the wallpaper to be tinted.\n \n \n \n \n \n \n \n \n \n I agree to the terms and conditions\n \n \n \n \n Price Range \n \n Set your budget range ($\n \n {value[0]}\n -{\" \"}\n {value[1]} ).\n \n setValue(val as number[])}\n max={1000}\n min={0}\n step={10}\n className=\"mt-2 w-full\"\n aria-label=\"Price Range\"\n />\n \n \n Submit \n \n Cancel\n \n \n \n \n \n )\n}\n\nfunction ButtonGroupExamples() {\n const [label, setLabel] = React.useState(\"personal\")\n\n return (\n \n \n
\n \n \n \n \n \n \n \n Archive\n \n \n Report\n \n \n \n \n Snooze\n \n \n \n }\n >\n \n \n \n \n \n \n Mark as Read\n \n \n \n Archive\n \n \n \n \n \n \n Snooze\n \n \n \n Add to Calendar\n \n \n \n Add to List\n \n \n \n \n Label As...\n \n \n \n \n \n \n Personal\n \n \n Work\n \n \n Other\n \n \n \n \n \n \n \n \n \n \n \n Trash\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n 1 \n 2 \n 3 \n \n \n
\n \n Follow \n \n }\n >\n \n \n \n \n Quick Actions \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Block User\n \n \n \n \n Conversation \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n Report Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n \n \n {\" \"}\n Copilot\n \n \n \n }\n >\n \n \n \n \n Agent Tasks \n \n Describe your task in natural language. Copilot will work\n in the background and open a pull request.\n \n \n \n \n
\n \n \n \n \n
\n
\n \n )\n}\n\nfunction InputGroupExamples() {\n const [isFavorite, setIsFavorite] = React.useState(false)\n const [voiceEnabled, setVoiceEnabled] = React.useState(false)\n\n return (\n \n \n
\n \n \n \n \n 12 results \n \n
\n \n \n https:// \n \n \n \n \n }\n >\n \n \n This is content in a tooltip. \n \n \n \n
\n \n Input Secure\n \n \n \n \n \n \n }\n >\n \n \n \n Your connection is not secure.
\n \n You should not enter any sensitive information on this site.\n
\n \n \n \n \n https://\n \n \n setIsFavorite(!isFavorite)}\n size=\"icon-xs\"\n aria-label=\"Favorite\"\n >\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n setVoiceEnabled(!voiceEnabled)}\n data-active={voiceEnabled}\n className=\"data-[active=true]:bg-primary data-[active=true]:text-primary-foreground\"\n aria-pressed={voiceEnabled}\n size=\"icon-xs\"\n aria-label=\"Voice Mode\"\n />\n }\n >\n \n \n Voice Mode \n \n \n \n \n \n
\n \n \n \n \n \n \n }\n >\n Auto\n \n \n \n Auto \n Agent \n Manual \n \n \n \n 52% used \n \n \n \n Send \n \n \n \n
\n \n )\n}\n\nfunction EmptyAvatarGroup() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n
\n }>\n Show Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n
\n }>\n Connect Mouse\n \n \n \n \n \n \n \n Allow accessory to connect?\n \n \n Do you want to allow the USB accessory to connect to this\n device?\n \n \n \n Don't allow \n Allow \n \n \n \n
\n \n \n \n )\n}\n\nfunction FormExample() {\n const monthItems = [\n { label: \"MM\", value: null },\n { label: \"01\", value: \"01\" },\n { label: \"02\", value: \"02\" },\n { label: \"03\", value: \"03\" },\n { label: \"04\", value: \"04\" },\n { label: \"05\", value: \"05\" },\n { label: \"06\", value: \"06\" },\n { label: \"07\", value: \"07\" },\n { label: \"08\", value: \"08\" },\n { label: \"09\", value: \"09\" },\n { label: \"10\", value: \"10\" },\n { label: \"11\", value: \"11\" },\n { label: \"12\", value: \"12\" },\n ]\n\n const yearItems = [\n { label: \"YYYY\", value: null },\n { label: \"2024\", value: \"2024\" },\n { label: \"2025\", value: \"2025\" },\n { label: \"2026\", value: \"2026\" },\n { label: \"2027\", value: \"2027\" },\n { label: \"2028\", value: \"2028\" },\n { label: \"2029\", value: \"2029\" },\n ]\n\n return (\n \n \n \n Payment Method \n \n All transactions are secure and encrypted\n \n \n \n \n \n \n \n \n \n Name on Card\n \n \n \n \n \n \n Card Number\n \n \n \n Enter your 16-digit number.\n \n \n \n CVV \n \n \n
\n \n \n \n Month\n \n \n \n \n \n \n \n {monthItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n Year\n \n \n \n \n \n \n \n {yearItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n \n \n Billing Address \n \n The billing address associated with your payment.\n \n \n \n \n \n Same as shipping address\n \n \n \n \n \n \n \n \n \n Comments\n \n \n \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst roleItems = [\n { label: \"Developer\", value: \"developer\" },\n { label: \"Designer\", value: \"designer\" },\n { label: \"Manager\", value: \"manager\" },\n { label: \"Other\", value: \"other\" },\n]\n\nfunction SmallFormExample() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n User Information \n Please fill in your details below \n \n \n }\n >\n \n More options \n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({\n ...notifications,\n sms: checked === true,\n })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n \n \n \n \n \n \n Name \n \n \n \n Role \n \n \n \n \n \n \n {roleItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n Framework\n \n \n \n \n No frameworks found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Comments \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n\nfunction ObservabilityCard() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n Create Query{\" \"}\n \n \n \n Warning\n \n \n \n \n )\n}\n\nfunction ItemExample() {\n return (\n \n \n - \n
\n Two-factor authentication \n \n Verify via email or phone number.\n \n \n \n \n Enable\n \n \n \n }>\n \n \n \n \n Your order has been shipped. \n \n \n
\n \n )\n}\n\nfunction BadgeExamples() {\n return (\n \n \n \n \n Syncing\n \n \n \n Updating\n \n \n \n Loading\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction EmptyWithSpinner() {\n return (\n \n \n \n \n \n \n Processing your request \n \n Please wait while we process your request. Do not refresh the page.\n \n \n \n \n Submit \n \n Cancel\n \n
\n \n \n \n )\n}\n\nconst SHEET_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const\n\nfunction SheetExample() {\n return (\n \n \n {SHEET_SIDES.map((side) => (\n
\n \n }\n >\n {side}\n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're\n done.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed\n do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation\n ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit\n esse cillum dolore eu fugiat nulla pariatur. Excepteur sint\n occaecat cupidatat non proident, sunt in culpa qui officia\n deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n Save changes \n }>\n Cancel\n \n \n \n \n ))}\n
\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useState } from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { ButtonGroup } from \"@/registry/bases/base/ui/button-group\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/bases/base/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"@/registry/bases/base/ui/sheet\"\nimport { Slider } from \"@/registry/bases/base/ui/slider\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { Switch } from \"@/registry/bases/base/ui/switch\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CoverExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction FieldExamples() {\n const [gpuCount, setGpuCount] = React.useState(8)\n const [value, setValue] = useState([200, 800])\n\n const handleGpuAdjustment = React.useCallback((adjustment: number) => {\n setGpuCount((prevCount) =>\n Math.max(1, Math.min(99, prevCount + adjustment))\n )\n }, [])\n\n const handleGpuInputChange = React.useCallback(\n (e: React.ChangeEvent) => {\n const value = parseInt(e.target.value, 10)\n if (!isNaN(value) && value >= 1 && value <= 99) {\n setGpuCount(value)\n }\n },\n []\n )\n\n return (\n \n \n \n \n Compute Environment \n \n Select the compute environment for your cluster.\n \n \n \n \n \n Kubernetes \n \n Run GPU workloads on a K8s configured cluster. This is the\n default.\n \n \n \n \n \n \n \n \n Virtual Machine \n \n Access a VM configured cluster to run workloads. (Coming\n soon)\n \n \n \n \n \n \n \n \n \n \n \n Number of GPUs\n \n You can add more later. \n \n \n \n handleGpuAdjustment(-1)}\n disabled={gpuCount <= 1}\n >\n \n \n handleGpuAdjustment(1)}\n disabled={gpuCount >= 99}\n >\n \n \n \n \n \n \n \n Wallpaper Tinting \n \n Allow the wallpaper to be tinted.\n \n \n \n \n \n \n \n \n \n I agree to the terms and conditions\n \n \n \n \n Price Range \n \n Set your budget range ($\n \n {value[0]}\n -{\" \"}\n {value[1]} ).\n \n setValue(val as number[])}\n max={1000}\n min={0}\n step={10}\n className=\"mt-2 w-full\"\n aria-label=\"Price Range\"\n />\n \n \n Submit \n \n Cancel\n \n \n \n \n \n )\n}\n\nfunction ButtonGroupExamples() {\n const [label, setLabel] = React.useState(\"personal\")\n\n return (\n \n \n
\n \n \n \n \n \n \n \n Archive\n \n \n Report\n \n \n \n \n Snooze\n \n \n \n }\n >\n \n \n \n \n \n \n Mark as Read\n \n \n \n Archive\n \n \n \n \n \n \n Snooze\n \n \n \n Add to Calendar\n \n \n \n Add to List\n \n \n \n \n Label As...\n \n \n \n \n \n \n Personal\n \n \n Work\n \n \n Other\n \n \n \n \n \n \n \n \n \n \n \n Trash\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n 1 \n 2 \n 3 \n \n \n
\n \n Follow \n \n }\n >\n \n \n \n \n Quick Actions \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Block User\n \n \n \n \n Conversation \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n Report Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n \n \n {\" \"}\n Copilot\n \n \n \n }\n >\n \n \n \n \n Agent Tasks \n \n Describe your task in natural language. Copilot will work\n in the background and open a pull request.\n \n \n \n \n
\n \n \n \n \n
\n
\n \n )\n}\n\nfunction InputGroupExamples() {\n const [isFavorite, setIsFavorite] = React.useState(false)\n const [voiceEnabled, setVoiceEnabled] = React.useState(false)\n\n return (\n \n \n
\n \n \n \n \n 12 results \n \n
\n \n \n https:// \n \n \n \n \n }\n >\n \n \n This is content in a tooltip. \n \n \n \n
\n \n Input Secure\n \n \n \n \n \n \n }\n >\n \n \n \n Your connection is not secure.
\n \n You should not enter any sensitive information on this site.\n
\n \n \n \n \n https://\n \n \n setIsFavorite(!isFavorite)}\n size=\"icon-xs\"\n aria-label=\"Favorite\"\n >\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n setVoiceEnabled(!voiceEnabled)}\n data-active={voiceEnabled}\n className=\"data-[active=true]:bg-primary data-[active=true]:text-primary-foreground\"\n aria-pressed={voiceEnabled}\n size=\"icon-xs\"\n aria-label=\"Voice Mode\"\n />\n }\n >\n \n \n Voice Mode \n \n \n \n \n \n
\n \n \n \n \n \n \n }\n >\n Auto\n \n \n \n Auto \n Agent \n Manual \n \n \n \n 52% used \n \n \n \n Send \n \n \n \n
\n \n )\n}\n\nfunction EmptyAvatarGroup() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n
\n }>\n Show Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n
\n }>\n Connect Mouse\n \n \n \n \n \n \n \n Allow accessory to connect?\n \n \n Do you want to allow the USB accessory to connect to this\n device?\n \n \n \n Don't allow \n Allow \n \n \n \n
\n \n \n \n )\n}\n\nfunction FormExample() {\n const monthItems = [\n { label: \"MM\", value: null },\n { label: \"01\", value: \"01\" },\n { label: \"02\", value: \"02\" },\n { label: \"03\", value: \"03\" },\n { label: \"04\", value: \"04\" },\n { label: \"05\", value: \"05\" },\n { label: \"06\", value: \"06\" },\n { label: \"07\", value: \"07\" },\n { label: \"08\", value: \"08\" },\n { label: \"09\", value: \"09\" },\n { label: \"10\", value: \"10\" },\n { label: \"11\", value: \"11\" },\n { label: \"12\", value: \"12\" },\n ]\n\n const yearItems = [\n { label: \"YYYY\", value: null },\n { label: \"2024\", value: \"2024\" },\n { label: \"2025\", value: \"2025\" },\n { label: \"2026\", value: \"2026\" },\n { label: \"2027\", value: \"2027\" },\n { label: \"2028\", value: \"2028\" },\n { label: \"2029\", value: \"2029\" },\n ]\n\n return (\n \n \n \n Payment Method \n \n All transactions are secure and encrypted\n \n \n \n \n \n \n \n \n \n Name on Card\n \n \n \n \n \n \n Card Number\n \n \n \n Enter your 16-digit number.\n \n \n \n CVV \n \n \n
\n \n \n \n Month\n \n \n \n \n \n \n \n {monthItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n Year\n \n \n \n \n \n \n \n {yearItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n \n \n Billing Address \n \n The billing address associated with your payment.\n \n \n \n \n \n Same as shipping address\n \n \n \n \n \n \n \n \n \n Comments\n \n \n \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst roleItems = [\n { label: \"Developer\", value: \"developer\" },\n { label: \"Designer\", value: \"designer\" },\n { label: \"Manager\", value: \"manager\" },\n { label: \"Other\", value: \"other\" },\n]\n\nfunction SmallFormExample() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n User Information \n Please fill in your details below \n \n \n }\n >\n \n More options \n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({\n ...notifications,\n sms: checked === true,\n })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n \n \n \n \n \n \n Name \n \n \n \n Role \n \n \n \n \n \n \n {roleItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n Framework\n \n \n \n \n No frameworks found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Comments \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n\nfunction ObservabilityCard() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n Create Query{\" \"}\n \n \n \n Warning\n \n \n \n \n )\n}\n\nfunction ItemExample() {\n return (\n \n \n - \n
\n Two-factor authentication \n \n Verify via email or phone number.\n \n \n \n \n Enable\n \n \n \n }>\n \n \n \n \n Your order has been shipped. \n \n \n
\n \n )\n}\n\nfunction BadgeExamples() {\n return (\n \n \n \n \n Syncing\n \n \n \n Updating\n \n \n \n Loading\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction EmptyWithSpinner() {\n return (\n \n \n \n \n \n \n Processing your request \n \n Please wait while we process your request. Do not refresh the page.\n \n \n \n \n Submit \n \n Cancel\n \n
\n \n \n \n )\n}\n\nconst SHEET_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const\n\nfunction SheetExample() {\n return (\n \n \n {SHEET_SIDES.map((side) => (\n
\n \n }\n >\n {side}\n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're\n done.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed\n do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation\n ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit\n esse cillum dolore eu fugiat nulla pariatur. Excepteur sint\n occaecat cupidatat non proident, sunt in culpa qui officia\n deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n Save changes \n }>\n Cancel\n \n \n \n \n ))}\n
\n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/progress-example.json b/apps/v4/public/r/styles/base-lyra/progress-example.json
index e856f51039..73ec261315 100644
--- a/apps/v4/public/r/styles/base-lyra/progress-example.json
+++ b/apps/v4/public/r/styles/base-lyra/progress-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-lyra/examples/progress-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemGroup,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Progress,\n ProgressLabel,\n ProgressValue,\n} from \"@/registry/bases/base/ui/progress\"\nimport { Slider } from \"@/registry/bases/base/ui/slider\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ProgressExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction ProgressValues() {\n return (\n \n \n \n )\n}\n\nfunction ProgressWithLabel() {\n return (\n \n \n Upload progress \n \n \n \n )\n}\n\nfunction ProgressControlled() {\n const [value, setValue] = React.useState(50)\n\n return (\n \n \n
\n
setValue(value as number)}\n min={0}\n max={100}\n step={1}\n />\n \n \n )\n}\n\nfunction FileUploadList() {\n const files = React.useMemo(\n () => [\n {\n id: \"1\",\n name: \"document.pdf\",\n progress: 45,\n timeRemaining: \"2m 30s\",\n },\n {\n id: \"2\",\n name: \"presentation.pptx\",\n progress: 78,\n timeRemaining: \"45s\",\n },\n {\n id: \"3\",\n name: \"spreadsheet.xlsx\",\n progress: 12,\n timeRemaining: \"5m 12s\",\n },\n {\n id: \"4\",\n name: \"image.jpg\",\n progress: 100,\n timeRemaining: \"Complete\",\n },\n ],\n []\n )\n\n return (\n \n \n {files.map((file) => (\n - \n
\n \n \n \n {file.name} \n \n \n \n \n \n \n {file.timeRemaining}\n \n \n \n ))}\n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemGroup,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Progress,\n ProgressLabel,\n ProgressValue,\n} from \"@/registry/bases/base/ui/progress\"\nimport { Slider } from \"@/registry/bases/base/ui/slider\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ProgressExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction ProgressValues() {\n return (\n \n \n \n )\n}\n\nfunction ProgressWithLabel() {\n return (\n \n \n Upload progress \n \n \n \n )\n}\n\nfunction ProgressControlled() {\n const [value, setValue] = React.useState(50)\n\n return (\n \n \n
\n
setValue(value as number)}\n min={0}\n max={100}\n step={1}\n />\n \n \n )\n}\n\nfunction FileUploadList() {\n const files = React.useMemo(\n () => [\n {\n id: \"1\",\n name: \"document.pdf\",\n progress: 45,\n timeRemaining: \"2m 30s\",\n },\n {\n id: \"2\",\n name: \"presentation.pptx\",\n progress: 78,\n timeRemaining: \"45s\",\n },\n {\n id: \"3\",\n name: \"spreadsheet.xlsx\",\n progress: 12,\n timeRemaining: \"5m 12s\",\n },\n {\n id: \"4\",\n name: \"image.jpg\",\n progress: 100,\n timeRemaining: \"Complete\",\n },\n ],\n []\n )\n\n return (\n \n \n {files.map((file) => (\n - \n
\n \n \n \n {file.name} \n \n \n \n \n \n \n {file.timeRemaining}\n \n \n \n ))}\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/radio-group.json b/apps/v4/public/r/styles/base-lyra/radio-group.json
index b91f151e09..2200038c9e 100644
--- a/apps/v4/public/r/styles/base-lyra/radio-group.json
+++ b/apps/v4/public/r/styles/base-lyra/radio-group.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/radio-group.tsx",
- "content": "\"use client\"\n\nimport { Radio as RadioPrimitive } from \"@base-ui/react/radio\"\nimport { RadioGroup as RadioGroupPrimitive } from \"@base-ui/react/radio-group\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction RadioGroup({ className, ...props }: RadioGroupPrimitive.Props) {\n return (\n \n )\n}\n\nfunction RadioGroupItem({ className, ...props }: RadioPrimitive.Root.Props) {\n return (\n \n \n \n \n \n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n",
+ "content": "\"use client\"\n\nimport { Radio as RadioPrimitive } from \"@base-ui/react/radio\"\nimport { RadioGroup as RadioGroupPrimitive } from \"@base-ui/react/radio-group\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction RadioGroup({ className, ...props }: RadioGroupPrimitive.Props) {\n return (\n \n )\n}\n\nfunction RadioGroupItem({ className, ...props }: RadioPrimitive.Root.Props) {\n return (\n \n \n \n \n \n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/select-example.json b/apps/v4/public/r/styles/base-lyra/select-example.json
index 08e1f4b3b8..f3dc473c01 100644
--- a/apps/v4/public/r/styles/base-lyra/select-example.json
+++ b/apps/v4/public/r/styles/base-lyra/select-example.json
@@ -15,7 +15,7 @@
"files": [
{
"path": "registry/base-lyra/examples/select-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SelectExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction SelectBasic() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectWithIcons() {\n const items = [\n {\n label: (\n <>\n \n Chart Type\n >\n ),\n value: null,\n },\n {\n label: (\n <>\n \n Line\n >\n ),\n value: \"line\",\n },\n {\n label: (\n <>\n \n Bar\n >\n ),\n value: \"bar\",\n },\n {\n label: (\n <>\n \n Pie\n >\n ),\n value: \"pie\",\n },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n
\n \n )\n}\n\nfunction SelectWithGroups() {\n const fruits = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n const vegetables = [\n { label: \"Carrot\", value: \"carrot\" },\n { label: \"Broccoli\", value: \"broccoli\" },\n { label: \"Spinach\", value: \"spinach\" },\n ]\n const allItems = [\n { label: \"Select a fruit\", value: null },\n ...fruits,\n ...vegetables,\n ]\n return (\n \n \n \n \n \n \n \n Fruits \n {fruits.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n Vegetables \n {vegetables.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectLargeList() {\n const items = [\n { label: \"Select an item\", value: null },\n ...Array.from({ length: 100 }).map((_, i) => ({\n label: `Item ${i}`,\n value: `item-${i}`,\n })),\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectSizes() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n
\n \n )\n}\n\nfunction SelectWithButton() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n return (\n \n \n
\n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Submit\n \n
\n
\n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n Submit \n
\n
\n \n )\n}\n\nfunction SelectItemAligned() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\", disabled: true },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectWithField() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n Favorite Fruit \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Choose your favorite fruit from the list.\n \n \n \n )\n}\n\nfunction SelectInvalid() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Favorite Fruit \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n
\n \n )\n}\n\nfunction SelectInline() {\n const items = [\n { label: \"Filter\", value: null },\n { label: \"All\", value: \"all\" },\n { label: \"Active\", value: \"active\" },\n { label: \"Inactive\", value: \"inactive\" },\n ]\n return (\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Sort by \n Name \n Date \n Status \n \n
\n \n )\n}\n\nfunction SelectDisabled() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\", disabled: true },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nconst plans = [\n {\n name: \"Starter\",\n description: \"Perfect for individuals getting started.\",\n },\n {\n name: \"Professional\",\n description: \"Ideal for growing teams and businesses.\",\n },\n {\n name: \"Enterprise\",\n description: \"Advanced features for large organizations.\",\n },\n]\n\nfunction SelectPlan() {\n return (\n \n plan.name}\n >\n \n \n {(value: (typeof plans)[number]) => }\n \n \n \n \n {plans.map((plan) => (\n \n \n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectPlanItem({ plan }: { plan: (typeof plans)[number] }) {\n return (\n - \n
\n {plan.name} \n \n {plan.description}\n \n \n \n )\n}\n\nfunction SelectMultiple() {\n const items = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n { label: \"Strawberry\", value: \"strawberry\" },\n { label: \"Watermelon\", value: \"watermelon\" },\n ]\n return (\n \n \n \n \n {(value: string[]) => {\n if (value.length === 0) {\n return \"Select fruits\"\n }\n if (value.length === 1) {\n return items.find((item) => item.value === value[0])?.label\n }\n return `${value.length} fruits selected`\n }}\n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectInDialog() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Example \n \n Use the select below to choose a fruit.\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SelectExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction SelectBasic() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectWithIcons() {\n const items = [\n {\n label: (\n <>\n \n Chart Type\n >\n ),\n value: null,\n },\n {\n label: (\n <>\n \n Line\n >\n ),\n value: \"line\",\n },\n {\n label: (\n <>\n \n Bar\n >\n ),\n value: \"bar\",\n },\n {\n label: (\n <>\n \n Pie\n >\n ),\n value: \"pie\",\n },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n
\n \n )\n}\n\nfunction SelectWithGroups() {\n const fruits = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n const vegetables = [\n { label: \"Carrot\", value: \"carrot\" },\n { label: \"Broccoli\", value: \"broccoli\" },\n { label: \"Spinach\", value: \"spinach\" },\n ]\n const allItems = [\n { label: \"Select a fruit\", value: null },\n ...fruits,\n ...vegetables,\n ]\n return (\n \n \n \n \n \n \n \n Fruits \n {fruits.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n Vegetables \n {vegetables.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectLargeList() {\n const items = [\n { label: \"Select an item\", value: null },\n ...Array.from({ length: 100 }).map((_, i) => ({\n label: `Item ${i}`,\n value: `item-${i}`,\n })),\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectSizes() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n
\n \n )\n}\n\nfunction SelectWithButton() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n return (\n \n \n
\n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Submit\n \n
\n
\n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n Submit \n
\n
\n \n )\n}\n\nfunction SelectItemAligned() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\", disabled: true },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectWithField() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n Favorite Fruit \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Choose your favorite fruit from the list.\n \n \n \n )\n}\n\nfunction SelectInvalid() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Favorite Fruit \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n
\n \n )\n}\n\nfunction SelectInline() {\n const items = [\n { label: \"Filter\", value: null },\n { label: \"All\", value: \"all\" },\n { label: \"Active\", value: \"active\" },\n { label: \"Inactive\", value: \"inactive\" },\n ]\n return (\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Sort by \n Name \n Date \n Status \n \n
\n \n )\n}\n\nfunction SelectDisabled() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\", disabled: true },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nconst plans = [\n {\n name: \"Starter\",\n description: \"Perfect for individuals getting started.\",\n },\n {\n name: \"Professional\",\n description: \"Ideal for growing teams and businesses.\",\n },\n {\n name: \"Enterprise\",\n description: \"Advanced features for large organizations.\",\n },\n]\n\nfunction SelectPlan() {\n return (\n \n plan.name}\n >\n \n \n {(value: (typeof plans)[number]) => }\n \n \n \n \n {plans.map((plan) => (\n \n \n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectPlanItem({ plan }: { plan: (typeof plans)[number] }) {\n return (\n - \n
\n {plan.name} \n \n {plan.description}\n \n \n \n )\n}\n\nfunction SelectMultiple() {\n const items = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n { label: \"Strawberry\", value: \"strawberry\" },\n { label: \"Watermelon\", value: \"watermelon\" },\n ]\n return (\n \n \n \n \n {(value: string[]) => {\n if (value.length === 0) {\n return \"Select fruits\"\n }\n if (value.length === 1) {\n return items.find((item) => item.value === value[0])?.label\n }\n return `${value.length} fruits selected`\n }}\n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectInDialog() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Example \n \n Use the select below to choose a fruit.\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/select.json b/apps/v4/public/r/styles/base-lyra/select.json
index 2ae9bdb778..8c2eaa7dfc 100644
--- a/apps/v4/public/r/styles/base-lyra/select.json
+++ b/apps/v4/public/r/styles/base-lyra/select.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/select.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n \n )\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n \n {children}\n \n }\n />\n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >) {\n return (\n \n \n \n \n {children} \n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n \n \n {children}\n \n }\n >\n \n \n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n \n )\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n \n {children}\n \n }\n />\n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >) {\n return (\n \n \n \n \n {children} \n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n \n \n {children}\n \n }\n >\n \n \n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/sheet.json b/apps/v4/public/r/styles/base-lyra/sheet.json
index 358c065e03..ae8ca38848 100644
--- a/apps/v4/public/r/styles/base-lyra/sheet.json
+++ b/apps/v4/public/r/styles/base-lyra/sheet.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-lyra/ui/sheet.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return \n}\n\nfunction SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) {\n return \n}\n\nfunction SheetClose({ ...props }: SheetPrimitive.Close.Props) {\n return \n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return \n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n \n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n }\n >\n \n Close \n \n )}\n \n \n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) {\n return (\n \n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n \n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return \n}\n\nfunction SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) {\n return \n}\n\nfunction SheetClose({ ...props }: SheetPrimitive.Close.Props) {\n return \n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return \n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n \n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n }\n >\n \n Close \n \n )}\n \n \n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) {\n return (\n \n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n \n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/sidebar-example.json b/apps/v4/public/r/styles/base-lyra/sidebar-example.json
index a472ca23bb..083c49aee1 100644
--- a/apps/v4/public/r/styles/base-lyra/sidebar-example.json
+++ b/apps/v4/public/r/styles/base-lyra/sidebar-example.json
@@ -13,7 +13,7 @@
"files": [
{
"path": "registry/base-lyra/examples/sidebar-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarExample() {\n const data = {\n versions: [\"1.0.1\", \"1.1.0-alpha\", \"2.0.0-beta1\"],\n navMain: [\n {\n title: \"Getting Started\",\n url: \"#\",\n items: [\n {\n title: \"Installation\",\n url: \"#\",\n },\n {\n title: \"Project Structure\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Building Your Application\",\n url: \"#\",\n items: [\n {\n title: \"Routing\",\n url: \"#\",\n },\n {\n title: \"Data Fetching\",\n url: \"#\",\n isActive: true,\n },\n {\n title: \"Rendering\",\n url: \"#\",\n },\n {\n title: \"Caching\",\n url: \"#\",\n },\n {\n title: \"Styling\",\n url: \"#\",\n },\n {\n title: \"Optimizing\",\n url: \"#\",\n },\n {\n title: \"Configuring\",\n url: \"#\",\n },\n {\n title: \"Testing\",\n url: \"#\",\n },\n {\n title: \"Authentication\",\n url: \"#\",\n },\n {\n title: \"Deploying\",\n url: \"#\",\n },\n {\n title: \"Upgrading\",\n url: \"#\",\n },\n {\n title: \"Examples\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"API Reference\",\n url: \"#\",\n items: [\n {\n title: \"Components\",\n url: \"#\",\n },\n {\n title: \"File Conventions\",\n url: \"#\",\n },\n {\n title: \"Functions\",\n url: \"#\",\n },\n {\n title: \"next.config.js Options\",\n url: \"#\",\n },\n {\n title: \"CLI\",\n url: \"#\",\n },\n {\n title: \"Edge Runtime\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Architecture\",\n url: \"#\",\n items: [\n {\n title: \"Accessibility\",\n url: \"#\",\n },\n {\n title: \"Fast Refresh\",\n url: \"#\",\n },\n {\n title: \"Next.js Compiler\",\n url: \"#\",\n },\n {\n title: \"Supported Browsers\",\n url: \"#\",\n },\n {\n title: \"Turbopack\",\n url: \"#\",\n },\n ],\n },\n ],\n }\n\n const [selectedVersion, setSelectedVersion] = React.useState(data.versions[0])\n\n return (\n \n \n \n \n \n \n \n }\n >\n - \n
\n Documentation \n v{selectedVersion} \n \n \n \n \n \n \n \n {data.versions.map((version) => (\n setSelectedVersion(version)}\n >\n v{version}{\" \"}\n {version === selectedVersion && (\n \n )}\n \n ))}\n \n \n \n \n \n \n \n \n Search\n \n \n \n \n \n \n \n \n {data.navMain.map((item) => (\n \n {item.title} \n \n \n {item.items.map((subItem) => (\n \n }\n isActive={subItem.isActive}\n >\n {subItem.title}\n \n \n ))}\n \n \n \n ))}\n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarExample() {\n const data = {\n versions: [\"1.0.1\", \"1.1.0-alpha\", \"2.0.0-beta1\"],\n navMain: [\n {\n title: \"Getting Started\",\n url: \"#\",\n items: [\n {\n title: \"Installation\",\n url: \"#\",\n },\n {\n title: \"Project Structure\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Building Your Application\",\n url: \"#\",\n items: [\n {\n title: \"Routing\",\n url: \"#\",\n },\n {\n title: \"Data Fetching\",\n url: \"#\",\n isActive: true,\n },\n {\n title: \"Rendering\",\n url: \"#\",\n },\n {\n title: \"Caching\",\n url: \"#\",\n },\n {\n title: \"Styling\",\n url: \"#\",\n },\n {\n title: \"Optimizing\",\n url: \"#\",\n },\n {\n title: \"Configuring\",\n url: \"#\",\n },\n {\n title: \"Testing\",\n url: \"#\",\n },\n {\n title: \"Authentication\",\n url: \"#\",\n },\n {\n title: \"Deploying\",\n url: \"#\",\n },\n {\n title: \"Upgrading\",\n url: \"#\",\n },\n {\n title: \"Examples\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"API Reference\",\n url: \"#\",\n items: [\n {\n title: \"Components\",\n url: \"#\",\n },\n {\n title: \"File Conventions\",\n url: \"#\",\n },\n {\n title: \"Functions\",\n url: \"#\",\n },\n {\n title: \"next.config.js Options\",\n url: \"#\",\n },\n {\n title: \"CLI\",\n url: \"#\",\n },\n {\n title: \"Edge Runtime\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Architecture\",\n url: \"#\",\n items: [\n {\n title: \"Accessibility\",\n url: \"#\",\n },\n {\n title: \"Fast Refresh\",\n url: \"#\",\n },\n {\n title: \"Next.js Compiler\",\n url: \"#\",\n },\n {\n title: \"Supported Browsers\",\n url: \"#\",\n },\n {\n title: \"Turbopack\",\n url: \"#\",\n },\n ],\n },\n ],\n }\n\n const [selectedVersion, setSelectedVersion] = React.useState(data.versions[0])\n\n return (\n \n \n \n \n \n \n \n }\n >\n - \n
\n Documentation \n v{selectedVersion} \n \n \n \n \n \n \n \n {data.versions.map((version) => (\n setSelectedVersion(version)}\n >\n v{version}{\" \"}\n {version === selectedVersion && (\n \n )}\n \n ))}\n \n \n \n \n \n \n \n \n Search\n \n \n \n \n \n \n \n \n {data.navMain.map((item) => (\n \n {item.title} \n \n \n {item.items.map((subItem) => (\n \n }\n isActive={subItem.isActive}\n >\n {subItem.title}\n \n \n ))}\n \n \n \n ))}\n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/sidebar-floating-example.json b/apps/v4/public/r/styles/base-lyra/sidebar-floating-example.json
index d202616840..b78e88620d 100644
--- a/apps/v4/public/r/styles/base-lyra/sidebar-floating-example.json
+++ b/apps/v4/public/r/styles/base-lyra/sidebar-floating-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-lyra/examples/sidebar-floating-example.tsx",
- "content": "\"use client\"\n\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field } from \"@/registry/bases/base/ui/field\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarFloatingExample() {\n const data = {\n navMain: [\n {\n title: \"Getting Started\",\n url: \"#\",\n items: [\n {\n title: \"Installation\",\n url: \"#\",\n },\n {\n title: \"Project Structure\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Building Your Application\",\n url: \"#\",\n items: [\n {\n title: \"Routing\",\n url: \"#\",\n },\n {\n title: \"Data Fetching\",\n url: \"#\",\n isActive: true,\n },\n {\n title: \"Rendering\",\n url: \"#\",\n },\n {\n title: \"Caching\",\n url: \"#\",\n },\n {\n title: \"Styling\",\n url: \"#\",\n },\n {\n title: \"Optimizing\",\n url: \"#\",\n },\n {\n title: \"Configuring\",\n url: \"#\",\n },\n {\n title: \"Testing\",\n url: \"#\",\n },\n {\n title: \"Authentication\",\n url: \"#\",\n },\n {\n title: \"Deploying\",\n url: \"#\",\n },\n {\n title: \"Upgrading\",\n url: \"#\",\n },\n {\n title: \"Examples\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"API Reference\",\n url: \"#\",\n items: [\n {\n title: \"Components\",\n url: \"#\",\n },\n {\n title: \"File Conventions\",\n url: \"#\",\n },\n {\n title: \"Functions\",\n url: \"#\",\n },\n {\n title: \"next.config.js Options\",\n url: \"#\",\n },\n {\n title: \"CLI\",\n url: \"#\",\n },\n {\n title: \"Edge Runtime\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Architecture\",\n url: \"#\",\n items: [\n {\n title: \"Accessibility\",\n url: \"#\",\n },\n {\n title: \"Fast Refresh\",\n url: \"#\",\n },\n {\n title: \"Next.js Compiler\",\n url: \"#\",\n },\n {\n title: \"Supported Browsers\",\n url: \"#\",\n },\n {\n title: \"Turbopack\",\n url: \"#\",\n },\n ],\n },\n ],\n }\n\n return (\n \n \n \n \n \n }>\n - \n
\n Documentation \n v1.0.0 \n \n \n \n \n \n \n \n \n \n {data.navMain.map((item) => (\n \n \n \n }\n >\n {item.title}{\" \"}\n \n \n {item.items?.length ? (\n \n \n {item.items.map((subItem) => (\n }\n key={subItem.title}\n >\n {subItem.title}\n \n ))}\n \n \n ) : null}\n \n \n ))}\n \n \n \n \n \n \n \n \n Subscribe to our newsletter\n \n \n Opt-in to receive updates and news about the sidebar.\n \n \n \n \n \n \n \n Subscribe\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field } from \"@/registry/bases/base/ui/field\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarFloatingExample() {\n const data = {\n navMain: [\n {\n title: \"Getting Started\",\n url: \"#\",\n items: [\n {\n title: \"Installation\",\n url: \"#\",\n },\n {\n title: \"Project Structure\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Building Your Application\",\n url: \"#\",\n items: [\n {\n title: \"Routing\",\n url: \"#\",\n },\n {\n title: \"Data Fetching\",\n url: \"#\",\n isActive: true,\n },\n {\n title: \"Rendering\",\n url: \"#\",\n },\n {\n title: \"Caching\",\n url: \"#\",\n },\n {\n title: \"Styling\",\n url: \"#\",\n },\n {\n title: \"Optimizing\",\n url: \"#\",\n },\n {\n title: \"Configuring\",\n url: \"#\",\n },\n {\n title: \"Testing\",\n url: \"#\",\n },\n {\n title: \"Authentication\",\n url: \"#\",\n },\n {\n title: \"Deploying\",\n url: \"#\",\n },\n {\n title: \"Upgrading\",\n url: \"#\",\n },\n {\n title: \"Examples\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"API Reference\",\n url: \"#\",\n items: [\n {\n title: \"Components\",\n url: \"#\",\n },\n {\n title: \"File Conventions\",\n url: \"#\",\n },\n {\n title: \"Functions\",\n url: \"#\",\n },\n {\n title: \"next.config.js Options\",\n url: \"#\",\n },\n {\n title: \"CLI\",\n url: \"#\",\n },\n {\n title: \"Edge Runtime\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Architecture\",\n url: \"#\",\n items: [\n {\n title: \"Accessibility\",\n url: \"#\",\n },\n {\n title: \"Fast Refresh\",\n url: \"#\",\n },\n {\n title: \"Next.js Compiler\",\n url: \"#\",\n },\n {\n title: \"Supported Browsers\",\n url: \"#\",\n },\n {\n title: \"Turbopack\",\n url: \"#\",\n },\n ],\n },\n ],\n }\n\n return (\n \n \n \n \n \n }>\n - \n
\n Documentation \n v1.0.0 \n \n \n \n \n \n \n \n \n \n {data.navMain.map((item) => (\n \n \n \n }\n >\n {item.title}{\" \"}\n \n \n {item.items?.length ? (\n \n \n {item.items.map((subItem) => (\n }\n key={subItem.title}\n >\n {subItem.title}\n \n ))}\n \n \n ) : null}\n \n \n ))}\n \n \n \n \n \n \n \n \n Subscribe to our newsletter\n \n \n Opt-in to receive updates and news about the sidebar.\n \n \n \n \n \n \n \n Subscribe\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/sidebar-icon-example.json b/apps/v4/public/r/styles/base-lyra/sidebar-icon-example.json
index d4a7fbe2ba..6750d7bd8b 100644
--- a/apps/v4/public/r/styles/base-lyra/sidebar-icon-example.json
+++ b/apps/v4/public/r/styles/base-lyra/sidebar-icon-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-lyra/examples/sidebar-icon-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarIconExample() {\n const data = {\n user: {\n name: \"shadcn\",\n email: \"m@example.com\",\n avatar: \"/avatars/shadcn.jpg\",\n },\n teams: [\n {\n name: \"Acme Inc\",\n plan: \"Enterprise\",\n },\n {\n name: \"Acme Corp.\",\n plan: \"Startup\",\n },\n {\n name: \"Evil Corp.\",\n plan: \"Free\",\n },\n ],\n navMain: [\n {\n title: \"Playground\",\n url: \"#\",\n icon: (\n \n ),\n isActive: true,\n items: [\n {\n title: \"History\",\n url: \"#\",\n },\n {\n title: \"Starred\",\n url: \"#\",\n },\n {\n title: \"Settings\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Models\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Genesis\",\n url: \"#\",\n },\n {\n title: \"Explorer\",\n url: \"#\",\n },\n {\n title: \"Quantum\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Documentation\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Introduction\",\n url: \"#\",\n },\n {\n title: \"Get Started\",\n url: \"#\",\n },\n {\n title: \"Tutorials\",\n url: \"#\",\n },\n {\n title: \"Changelog\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Settings\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"General\",\n url: \"#\",\n },\n {\n title: \"Team\",\n url: \"#\",\n },\n {\n title: \"Billing\",\n url: \"#\",\n },\n {\n title: \"Limits\",\n url: \"#\",\n },\n ],\n },\n ],\n projects: [\n {\n name: \"Design Engineering\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n name: \"Sales & Marketing\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n name: \"Travel\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n }\n\n const [activeTeam, setActiveTeam] = React.useState(data.teams[0])\n\n return (\n \n \n \n \n \n \n \n }\n >\n }\n nativeButton={false}\n className=\"size-8\"\n >\n \n \n \n \n \n \n \n \n {activeTeam.name}\n \n {activeTeam.plan} \n
\n \n \n \n \n Teams \n \n \n {data.teams.map((team) => (\n setActiveTeam(team)}\n >\n {team.name}\n \n ))}\n \n \n \n \n \n \n \n \n Platform \n \n {data.navMain.map((item) => (\n }\n >\n }\n >\n {item.icon}\n {item.title} \n \n \n \n \n {item.items?.map((subItem) => (\n \n }\n >\n {subItem.title}\n \n \n ))}\n \n \n \n ))}\n \n \n \n Projects \n \n {data.projects.map((item) => (\n \n }>\n {item.icon}\n {item.name}\n \n \n ))}\n \n \n \n \n \n \n \n \n }\n >\n \n \n CN \n \n \n \n {data.user.name}\n \n {data.user.email} \n
\n \n \n \n \n \n - \n
\n \n \n CN \n \n \n \n {data.user.name} \n {data.user.email} \n \n \n \n \n \n \n Account \n Billing \n Settings \n \n \n \n Log out \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarIconExample() {\n const data = {\n user: {\n name: \"shadcn\",\n email: \"m@example.com\",\n avatar: \"/avatars/shadcn.jpg\",\n },\n teams: [\n {\n name: \"Acme Inc\",\n plan: \"Enterprise\",\n },\n {\n name: \"Acme Corp.\",\n plan: \"Startup\",\n },\n {\n name: \"Evil Corp.\",\n plan: \"Free\",\n },\n ],\n navMain: [\n {\n title: \"Playground\",\n url: \"#\",\n icon: (\n \n ),\n isActive: true,\n items: [\n {\n title: \"History\",\n url: \"#\",\n },\n {\n title: \"Starred\",\n url: \"#\",\n },\n {\n title: \"Settings\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Models\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Genesis\",\n url: \"#\",\n },\n {\n title: \"Explorer\",\n url: \"#\",\n },\n {\n title: \"Quantum\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Documentation\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Introduction\",\n url: \"#\",\n },\n {\n title: \"Get Started\",\n url: \"#\",\n },\n {\n title: \"Tutorials\",\n url: \"#\",\n },\n {\n title: \"Changelog\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Settings\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"General\",\n url: \"#\",\n },\n {\n title: \"Team\",\n url: \"#\",\n },\n {\n title: \"Billing\",\n url: \"#\",\n },\n {\n title: \"Limits\",\n url: \"#\",\n },\n ],\n },\n ],\n projects: [\n {\n name: \"Design Engineering\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n name: \"Sales & Marketing\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n name: \"Travel\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n }\n\n const [activeTeam, setActiveTeam] = React.useState(data.teams[0])\n\n return (\n \n \n \n \n \n \n \n }\n >\n }\n nativeButton={false}\n className=\"size-8\"\n >\n \n \n \n \n \n \n \n \n {activeTeam.name}\n \n {activeTeam.plan} \n
\n \n \n \n \n Teams \n \n \n {data.teams.map((team) => (\n setActiveTeam(team)}\n >\n {team.name}\n \n ))}\n \n \n \n \n \n \n \n \n Platform \n \n {data.navMain.map((item) => (\n }\n >\n }\n >\n {item.icon}\n {item.title} \n \n \n \n \n {item.items?.map((subItem) => (\n \n }\n >\n {subItem.title}\n \n \n ))}\n \n \n \n ))}\n \n \n \n Projects \n \n {data.projects.map((item) => (\n \n }>\n {item.icon}\n {item.name}\n \n \n ))}\n \n \n \n \n \n \n \n \n }\n >\n \n \n CN \n \n \n \n {data.user.name}\n \n {data.user.email} \n
\n \n \n \n \n \n - \n
\n \n \n CN \n \n \n \n {data.user.name} \n {data.user.email} \n \n \n \n \n \n \n Account \n Billing \n Settings \n \n \n \n Log out \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/sidebar-inset-example.json b/apps/v4/public/r/styles/base-lyra/sidebar-inset-example.json
index 3b50f09311..78641b88d0 100644
--- a/apps/v4/public/r/styles/base-lyra/sidebar-inset-example.json
+++ b/apps/v4/public/r/styles/base-lyra/sidebar-inset-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-lyra/examples/sidebar-inset-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarInsetExample() {\n const data = {\n navMain: [\n {\n title: \"Dashboard\",\n url: \"#\",\n icon: (\n \n ),\n isActive: true,\n items: [\n {\n title: \"Overview\",\n url: \"#\",\n },\n {\n title: \"Analytics\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Analytics\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Reports\",\n url: \"#\",\n },\n {\n title: \"Metrics\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Orders\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"All Orders\",\n url: \"#\",\n },\n {\n title: \"Pending\",\n url: \"#\",\n },\n {\n title: \"Completed\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Products\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"All Products\",\n url: \"#\",\n },\n {\n title: \"Categories\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Invoices\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Customers\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Settings\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n navSecondary: [\n {\n title: \"Support\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Feedback\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n }\n\n return (\n \n \n \n \n Dashboard \n \n {data.navMain.map((item) => (\n }\n >\n }\n isActive={item.isActive}\n >\n {item.icon}\n {item.title} \n \n {item.items?.length ? (\n <>\n \n }\n >\n \n Toggle \n \n \n \n {item.items.map((subItem) => (\n \n }\n >\n {subItem.title}\n \n \n ))}\n \n \n >\n ) : null}\n \n ))}\n \n \n \n \n \n {data.navSecondary.map((item) => (\n \n } size=\"sm\">\n {item.icon}\n {item.title} \n \n \n ))}\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarInsetExample() {\n const data = {\n navMain: [\n {\n title: \"Dashboard\",\n url: \"#\",\n icon: (\n \n ),\n isActive: true,\n items: [\n {\n title: \"Overview\",\n url: \"#\",\n },\n {\n title: \"Analytics\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Analytics\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Reports\",\n url: \"#\",\n },\n {\n title: \"Metrics\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Orders\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"All Orders\",\n url: \"#\",\n },\n {\n title: \"Pending\",\n url: \"#\",\n },\n {\n title: \"Completed\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Products\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"All Products\",\n url: \"#\",\n },\n {\n title: \"Categories\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Invoices\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Customers\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Settings\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n navSecondary: [\n {\n title: \"Support\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Feedback\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n }\n\n return (\n \n \n \n \n Dashboard \n \n {data.navMain.map((item) => (\n }\n >\n }\n isActive={item.isActive}\n >\n {item.icon}\n {item.title} \n \n {item.items?.length ? (\n <>\n \n }\n >\n \n Toggle \n \n \n \n {item.items.map((subItem) => (\n \n }\n >\n {subItem.title}\n \n \n ))}\n \n \n >\n ) : null}\n \n ))}\n \n \n \n \n \n {data.navSecondary.map((item) => (\n \n } size=\"sm\">\n {item.icon}\n {item.title} \n \n \n ))}\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/sidebar.json b/apps/v4/public/r/styles/base-lyra/sidebar.json
index 5c747135f1..e667b98fe8 100644
--- a/apps/v4/public/r/styles/base-lyra/sidebar.json
+++ b/apps/v4/public/r/styles/base-lyra/sidebar.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-lyra/ui/sidebar.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/registry/bases/base/ui/sheet\"\nimport { Skeleton } from \"@/registry/bases/base/ui/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { useIsMobile } from \"@/registry/new-york-v4/hooks/use-mobile\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offExamples\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offExamples\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n \n {children}\n
\n )\n }\n\n if (isMobile) {\n return (\n \n button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n \n Sidebar \n Displays the mobile sidebar. \n \n {children}
\n \n \n )\n }\n\n return (\n \n {/* This is what handles the sidebar gap on desktop */}\n
\n
\n
\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps) {\n const { toggleSidebar } = useSidebar()\n\n return (\n {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n \n Toggle Sidebar \n \n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n \n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n \n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & React.ComponentProps<\"div\">) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-none px-2 text-xs transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 flex shrink-0 items-center outline-hidden [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-label\",\n sidebar: \"group-label\",\n },\n })\n}\n\nfunction SidebarGroupAction({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"button\"> & React.ComponentProps<\"button\">) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-none p-0 focus-visible:ring-2 [&>svg]:size-4 flex aspect-square items-center justify-center outline-hidden transition-transform [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-action\",\n sidebar: \"group-action\",\n },\n })\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-none p-2 text-left text-xs transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium peer/menu-button flex w-full items-center overflow-hidden outline-hidden group/menu-button disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline: \"bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-xs\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-xs group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n render,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n isActive?: boolean\n tooltip?: string | React.ComponentProps\n } & VariantProps) {\n const { isMobile, state } = useSidebar()\n const comp = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(sidebarMenuButtonVariants({ variant, size }), className),\n },\n props\n ),\n render: !tooltip ? render : TooltipTrigger,\n state: {\n slot: \"sidebar-menu-button\",\n sidebar: \"menu-button\",\n size,\n active: isActive,\n },\n })\n\n if (!tooltip) {\n return comp\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n \n {comp}\n \n \n )\n}\n\nfunction SidebarMenuAction({\n className,\n render,\n showOnHover = false,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n showOnHover?: boolean\n }) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-none p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4 flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0\",\n showOnHover &&\n \"peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-action\",\n sidebar: \"menu-action\",\n },\n })\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const [width] = React.useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n })\n\n return (\n \n {showIcon && (\n \n )}\n \n
\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuSubButton({\n render,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: useRender.ComponentProps<\"a\"> &\n React.ComponentProps<\"a\"> & {\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-none px-2 focus-visible:ring-2 data-[size=md]:text-xs data-[size=sm]:text-xs [&>svg]:size-4 flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-sub-button\",\n sidebar: \"menu-sub-button\",\n size,\n active: isActive,\n },\n })\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/registry/bases/base/ui/sheet\"\nimport { Skeleton } from \"@/registry/bases/base/ui/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { useIsMobile } from \"@/registry/new-york-v4/hooks/use-mobile\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offExamples\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offExamples\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n \n {children}\n
\n )\n }\n\n if (isMobile) {\n return (\n \n button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n \n Sidebar \n Displays the mobile sidebar. \n \n {children}
\n \n \n )\n }\n\n return (\n \n {/* This is what handles the sidebar gap on desktop */}\n
\n
\n
\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps) {\n const { toggleSidebar } = useSidebar()\n\n return (\n {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n \n Toggle Sidebar \n \n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n \n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n \n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & React.ComponentProps<\"div\">) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-none px-2 text-xs transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 flex shrink-0 items-center outline-hidden [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-label\",\n sidebar: \"group-label\",\n },\n })\n}\n\nfunction SidebarGroupAction({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"button\"> & React.ComponentProps<\"button\">) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-none p-0 focus-visible:ring-2 [&>svg]:size-4 flex aspect-square items-center justify-center outline-hidden transition-transform [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-action\",\n sidebar: \"group-action\",\n },\n })\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-none p-2 text-left text-xs transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium peer/menu-button flex w-full items-center overflow-hidden outline-hidden group/menu-button disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline: \"bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-xs\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-xs group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n render,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n isActive?: boolean\n tooltip?: string | React.ComponentProps\n } & VariantProps) {\n const { isMobile, state } = useSidebar()\n const comp = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(sidebarMenuButtonVariants({ variant, size }), className),\n },\n props\n ),\n render: !tooltip ? render : TooltipTrigger,\n state: {\n slot: \"sidebar-menu-button\",\n sidebar: \"menu-button\",\n size,\n active: isActive,\n },\n })\n\n if (!tooltip) {\n return comp\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n \n {comp}\n \n \n )\n}\n\nfunction SidebarMenuAction({\n className,\n render,\n showOnHover = false,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n showOnHover?: boolean\n }) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-none p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4 flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0\",\n showOnHover &&\n \"peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-action\",\n sidebar: \"menu-action\",\n },\n })\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const [width] = React.useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n })\n\n return (\n \n {showIcon && (\n \n )}\n \n
\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuSubButton({\n render,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: useRender.ComponentProps<\"a\"> &\n React.ComponentProps<\"a\"> & {\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-none px-2 focus-visible:ring-2 data-[size=md]:text-xs data-[size=sm]:text-xs [&>svg]:size-4 flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-sub-button\",\n sidebar: \"menu-sub-button\",\n size,\n active: isActive,\n },\n })\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/sonner.json b/apps/v4/public/r/styles/base-lyra/sonner.json
index 155c82d49b..4f221d720d 100644
--- a/apps/v4/public/r/styles/base-lyra/sonner.json
+++ b/apps/v4/public/r/styles/base-lyra/sonner.json
@@ -8,7 +8,7 @@
"files": [
{
"path": "registry/base-lyra/ui/sonner.tsx",
- "content": "\"use client\"\n\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n \n ),\n info: (\n \n ),\n warning: (\n \n ),\n error: (\n \n ),\n loading: (\n \n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n",
+ "content": "\"use client\"\n\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n \n ),\n info: (\n \n ),\n warning: (\n \n ),\n error: (\n \n ),\n loading: (\n \n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/spinner-example.json b/apps/v4/public/r/styles/base-lyra/spinner-example.json
index 1395e07992..1d2fb89bcc 100644
--- a/apps/v4/public/r/styles/base-lyra/spinner-example.json
+++ b/apps/v4/public/r/styles/base-lyra/spinner-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-lyra/examples/spinner-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { Field, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SpinnerExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction SpinnerBasic() {\n return (\n \n \n \n \n
\n \n )\n}\n\nfunction SpinnerInButtons() {\n return (\n \n \n \n Submit\n \n \n Disabled\n \n \n Outline\n \n \n \n Loading... \n \n
\n \n )\n}\n\nfunction SpinnerInBadges() {\n return (\n \n \n \n \n Badge\n \n \n \n Badge\n \n \n \n Badge\n \n \n \n Badge\n \n
\n \n )\n}\n\nfunction SpinnerInInputGroup() {\n return (\n \n \n Input Group \n \n \n \n \n \n \n \n \n )\n}\n\nfunction SpinnerInEmpty() {\n return (\n \n \n \n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n nativeButton={false}\n className=\"text-muted-foreground\"\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { Field, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SpinnerExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction SpinnerBasic() {\n return (\n \n \n \n \n
\n \n )\n}\n\nfunction SpinnerInButtons() {\n return (\n \n \n \n Submit\n \n \n Disabled\n \n \n Outline\n \n \n \n Loading... \n \n
\n \n )\n}\n\nfunction SpinnerInBadges() {\n return (\n \n \n \n \n Badge\n \n \n \n Badge\n \n \n \n Badge\n \n \n \n Badge\n \n
\n \n )\n}\n\nfunction SpinnerInInputGroup() {\n return (\n \n \n Input Group \n \n \n \n \n \n \n \n \n )\n}\n\nfunction SpinnerInEmpty() {\n return (\n \n \n \n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n nativeButton={false}\n className=\"text-muted-foreground\"\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/spinner.json b/apps/v4/public/r/styles/base-lyra/spinner.json
index 51387432ea..4c0fc5225a 100644
--- a/apps/v4/public/r/styles/base-lyra/spinner.json
+++ b/apps/v4/public/r/styles/base-lyra/spinner.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-lyra/ui/spinner.tsx",
- "content": "import { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n \n )\n}\n\nexport { Spinner }\n",
+ "content": "import { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n \n )\n}\n\nexport { Spinner }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/table-example.json b/apps/v4/public/r/styles/base-lyra/table-example.json
index ac50afea37..1dd7fa2391 100644
--- a/apps/v4/public/r/styles/base-lyra/table-example.json
+++ b/apps/v4/public/r/styles/base-lyra/table-example.json
@@ -13,7 +13,7 @@
"files": [
{
"path": "registry/base-lyra/examples/table-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/bases/base/ui/table\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst invoices = [\n {\n invoice: \"INV001\",\n paymentStatus: \"Paid\",\n totalAmount: \"$250.00\",\n paymentMethod: \"Credit Card\",\n },\n {\n invoice: \"INV002\",\n paymentStatus: \"Pending\",\n totalAmount: \"$150.00\",\n paymentMethod: \"PayPal\",\n },\n {\n invoice: \"INV003\",\n paymentStatus: \"Unpaid\",\n totalAmount: \"$350.00\",\n paymentMethod: \"Bank Transfer\",\n },\n {\n invoice: \"INV004\",\n paymentStatus: \"Paid\",\n totalAmount: \"$450.00\",\n paymentMethod: \"Credit Card\",\n },\n {\n invoice: \"INV005\",\n paymentStatus: \"Paid\",\n totalAmount: \"$550.00\",\n paymentMethod: \"PayPal\",\n },\n {\n invoice: \"INV006\",\n paymentStatus: \"Pending\",\n totalAmount: \"$200.00\",\n paymentMethod: \"Bank Transfer\",\n },\n {\n invoice: \"INV007\",\n paymentStatus: \"Unpaid\",\n totalAmount: \"$300.00\",\n paymentMethod: \"Credit Card\",\n },\n]\n\nexport default function TableExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TableBasic() {\n return (\n \n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.slice(0, 3).map((invoice) => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n \n {invoice.totalAmount}\n \n \n ))}\n \n
\n \n )\n}\n\nfunction TableWithFooter() {\n return (\n \n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.slice(0, 3).map((invoice) => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n \n {invoice.totalAmount}\n \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n \n )\n}\n\nfunction TableSimple() {\n return (\n \n \n \n \n Name \n Email \n Role \n \n \n \n \n Sarah Chen \n sarah.chen@acme.com \n Admin \n \n \n Marc Rodriguez \n marcus.rodriguez@acme.com \n User \n \n \n Emily Watson \n emily.watson@acme.com \n User \n \n \n
\n \n )\n}\n\nfunction TableWithBadges() {\n return (\n \n \n \n \n Task \n Status \n Priority \n \n \n \n \n Design homepage \n \n \n Completed\n \n \n \n \n High\n \n \n \n \n Implement API \n \n \n In Progress\n \n \n \n \n Medium\n \n \n \n \n Write tests \n \n \n Pending\n \n \n \n \n Low\n \n \n \n \n
\n \n )\n}\n\nfunction TableWithActions() {\n return (\n \n \n \n \n Product \n Price \n Actions \n \n \n \n \n Wireless Mouse \n $29.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n Mechanical Keyboard \n $129.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n USB-C Hub \n $49.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n
\n \n )\n}\n\nconst people = [\n { value: \"sarah\", label: \"Sarah Chen\" },\n { value: \"marcus\", label: \"Marc Rodriguez\" },\n { value: \"emily\", label: \"Emily Watson\" },\n { value: \"david\", label: \"David Kim\" },\n]\n\nconst tasks = [\n {\n task: \"Design homepage\",\n assignee: \"sarah\",\n status: \"In Progress\",\n },\n {\n task: \"Implement API\",\n assignee: \"marcus\",\n status: \"Pending\",\n },\n {\n task: \"Write tests\",\n assignee: \"emily\",\n status: \"Not Started\",\n },\n]\n\nfunction TableWithSelect() {\n return (\n \n \n \n \n Task \n Assignee \n Status \n \n \n \n {tasks.map((item) => (\n \n {item.task} \n \n person.value === item.assignee\n )}\n itemToStringValue={(item) => {\n return item.value\n }}\n >\n \n \n \n \n \n {people.map((person) => (\n \n {person.label}\n \n ))}\n \n \n \n \n {item.status} \n \n ))}\n \n
\n \n )\n}\n\nfunction TableWithInput() {\n return (\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/bases/base/ui/table\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst invoices = [\n {\n invoice: \"INV001\",\n paymentStatus: \"Paid\",\n totalAmount: \"$250.00\",\n paymentMethod: \"Credit Card\",\n },\n {\n invoice: \"INV002\",\n paymentStatus: \"Pending\",\n totalAmount: \"$150.00\",\n paymentMethod: \"PayPal\",\n },\n {\n invoice: \"INV003\",\n paymentStatus: \"Unpaid\",\n totalAmount: \"$350.00\",\n paymentMethod: \"Bank Transfer\",\n },\n {\n invoice: \"INV004\",\n paymentStatus: \"Paid\",\n totalAmount: \"$450.00\",\n paymentMethod: \"Credit Card\",\n },\n {\n invoice: \"INV005\",\n paymentStatus: \"Paid\",\n totalAmount: \"$550.00\",\n paymentMethod: \"PayPal\",\n },\n {\n invoice: \"INV006\",\n paymentStatus: \"Pending\",\n totalAmount: \"$200.00\",\n paymentMethod: \"Bank Transfer\",\n },\n {\n invoice: \"INV007\",\n paymentStatus: \"Unpaid\",\n totalAmount: \"$300.00\",\n paymentMethod: \"Credit Card\",\n },\n]\n\nexport default function TableExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TableBasic() {\n return (\n \n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.slice(0, 3).map((invoice) => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n \n {invoice.totalAmount}\n \n \n ))}\n \n
\n \n )\n}\n\nfunction TableWithFooter() {\n return (\n \n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.slice(0, 3).map((invoice) => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n \n {invoice.totalAmount}\n \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n \n )\n}\n\nfunction TableSimple() {\n return (\n \n \n \n \n Name \n Email \n Role \n \n \n \n \n Sarah Chen \n sarah.chen@acme.com \n Admin \n \n \n Marc Rodriguez \n marcus.rodriguez@acme.com \n User \n \n \n Emily Watson \n emily.watson@acme.com \n User \n \n \n
\n \n )\n}\n\nfunction TableWithBadges() {\n return (\n \n \n \n \n Task \n Status \n Priority \n \n \n \n \n Design homepage \n \n \n Completed\n \n \n \n \n High\n \n \n \n \n Implement API \n \n \n In Progress\n \n \n \n \n Medium\n \n \n \n \n Write tests \n \n \n Pending\n \n \n \n \n Low\n \n \n \n \n
\n \n )\n}\n\nfunction TableWithActions() {\n return (\n \n \n \n \n Product \n Price \n Actions \n \n \n \n \n Wireless Mouse \n $29.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n Mechanical Keyboard \n $129.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n USB-C Hub \n $49.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n
\n \n )\n}\n\nconst people = [\n { value: \"sarah\", label: \"Sarah Chen\" },\n { value: \"marcus\", label: \"Marc Rodriguez\" },\n { value: \"emily\", label: \"Emily Watson\" },\n { value: \"david\", label: \"David Kim\" },\n]\n\nconst tasks = [\n {\n task: \"Design homepage\",\n assignee: \"sarah\",\n status: \"In Progress\",\n },\n {\n task: \"Implement API\",\n assignee: \"marcus\",\n status: \"Pending\",\n },\n {\n task: \"Write tests\",\n assignee: \"emily\",\n status: \"Not Started\",\n },\n]\n\nfunction TableWithSelect() {\n return (\n \n \n \n \n Task \n Assignee \n Status \n \n \n \n {tasks.map((item) => (\n \n {item.task} \n \n person.value === item.assignee\n )}\n itemToStringValue={(item) => {\n return item.value\n }}\n >\n \n \n \n \n \n {people.map((person) => (\n \n {person.label}\n \n ))}\n \n \n \n \n {item.status} \n \n ))}\n \n
\n \n )\n}\n\nfunction TableWithInput() {\n return (\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/tabs-example.json b/apps/v4/public/r/styles/base-lyra/tabs-example.json
index a65aab8594..7f284fbba8 100644
--- a/apps/v4/public/r/styles/base-lyra/tabs-example.json
+++ b/apps/v4/public/r/styles/base-lyra/tabs-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/tabs-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function TabsExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TabsBasic() {\n return (\n \n \n \n Home \n Settings \n \n \n \n )\n}\n\nfunction TabsLine() {\n return (\n \n \n \n Overview \n Analytics \n Reports \n \n \n \n )\n}\n\nfunction TabsVariantsComparison() {\n return (\n \n \n \n \n Overview \n Analytics \n \n \n \n \n Overview \n Analytics \n \n \n
\n \n )\n}\n\nfunction TabsDisabled() {\n return (\n \n \n \n Home \n \n Disabled\n \n \n \n \n )\n}\n\nfunction TabsWithIcons() {\n return (\n \n \n \n \n \n Preview\n \n \n \n Code\n \n \n \n \n )\n}\n\nfunction TabsIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TabsMultiple() {\n return (\n \n \n \n Overview \n Analytics \n Reports \n Settings \n \n \n \n )\n}\n\nfunction TabsWithContent() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure.\n \n \n Configure how you receive notifications and alerts.\n \n
\n \n \n )\n}\n\nfunction TabsLineWithContent() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure.\n \n \n Configure how you receive notifications and alerts.\n \n
\n \n \n )\n}\n\nfunction TabsLineDisabled() {\n return (\n \n \n \n Overview \n Analytics \n \n Reports\n \n \n \n \n )\n}\n\nfunction TabsWithDropdown() {\n return (\n \n \n \n \n Overview \n Analytics \n Reports \n \n \n }\n >\n \n More options \n \n \n Settings \n Export \n \n Archive \n \n \n
\n\n \n \n View your dashboard metrics and key performance indicators.\n \n \n Detailed analytics and insights about your data.\n \n \n Generate and view custom reports.\n \n
\n \n \n )\n}\n\nfunction TabsVertical() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure. Use a strong\n password with a mix of letters, numbers, and symbols.\n \n \n Configure how you receive notifications and alerts. Choose which\n types of notifications you want to receive and how you want to\n receive them.\n \n
\n \n \n )\n}\n\nfunction TabsWithInputAndButton() {\n return (\n \n \n \n
\n Overview \n Analytics \n \n
\n \n Action \n
\n
\n \n \n View your dashboard metrics and key performance indicators.\n \n \n Detailed analytics and insights about your data.\n \n \n Generate and view custom reports.\n \n
\n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function TabsExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TabsBasic() {\n return (\n \n \n \n Home \n Settings \n \n \n \n )\n}\n\nfunction TabsLine() {\n return (\n \n \n \n Overview \n Analytics \n Reports \n \n \n \n )\n}\n\nfunction TabsVariantsComparison() {\n return (\n \n \n \n \n Overview \n Analytics \n \n \n \n \n Overview \n Analytics \n \n \n
\n \n )\n}\n\nfunction TabsDisabled() {\n return (\n \n \n \n Home \n \n Disabled\n \n \n \n \n )\n}\n\nfunction TabsWithIcons() {\n return (\n \n \n \n \n \n Preview\n \n \n \n Code\n \n \n \n \n )\n}\n\nfunction TabsIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TabsMultiple() {\n return (\n \n \n \n Overview \n Analytics \n Reports \n Settings \n \n \n \n )\n}\n\nfunction TabsWithContent() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure.\n \n \n Configure how you receive notifications and alerts.\n \n
\n \n \n )\n}\n\nfunction TabsLineWithContent() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure.\n \n \n Configure how you receive notifications and alerts.\n \n
\n \n \n )\n}\n\nfunction TabsLineDisabled() {\n return (\n \n \n \n Overview \n Analytics \n \n Reports\n \n \n \n \n )\n}\n\nfunction TabsWithDropdown() {\n return (\n \n \n \n \n Overview \n Analytics \n Reports \n \n \n }\n >\n \n More options \n \n \n Settings \n Export \n \n Archive \n \n \n
\n\n \n \n View your dashboard metrics and key performance indicators.\n \n \n Detailed analytics and insights about your data.\n \n \n Generate and view custom reports.\n \n
\n \n \n )\n}\n\nfunction TabsVertical() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure. Use a strong\n password with a mix of letters, numbers, and symbols.\n \n \n Configure how you receive notifications and alerts. Choose which\n types of notifications you want to receive and how you want to\n receive them.\n \n
\n \n \n )\n}\n\nfunction TabsWithInputAndButton() {\n return (\n \n \n \n
\n Overview \n Analytics \n \n
\n \n Action \n
\n
\n \n \n View your dashboard metrics and key performance indicators.\n \n \n Detailed analytics and insights about your data.\n \n \n Generate and view custom reports.\n \n
\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/toggle-example.json b/apps/v4/public/r/styles/base-lyra/toggle-example.json
index 2dda4682a1..543e10cce1 100644
--- a/apps/v4/public/r/styles/base-lyra/toggle-example.json
+++ b/apps/v4/public/r/styles/base-lyra/toggle-example.json
@@ -9,7 +9,7 @@
"files": [
{
"path": "registry/base-lyra/examples/toggle-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Toggle } from \"@/registry/bases/base/ui/toggle\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ToggleExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleBasic() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ToggleOutline() {\n return (\n \n \n \n \n Italic\n \n \n \n Bold\n \n
\n \n )\n}\n\nfunction ToggleSizes() {\n return (\n \n \n \n Small\n \n \n Default\n \n \n Large\n \n
\n \n )\n}\n\nfunction ToggleWithButtonText() {\n return (\n \n \n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n )\n}\n\nfunction ToggleWithButtonIcon() {\n return (\n \n \n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n )\n}\n\nfunction ToggleWithButtonIconText() {\n return (\n \n \n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n )\n}\n\nfunction ToggleDisabled() {\n return (\n \n \n \n Disabled\n \n \n Disabled\n \n
\n \n )\n}\n\nfunction ToggleWithIcon() {\n return (\n \n \n \n \n \n \n \n Bookmark\n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Toggle } from \"@/registry/bases/base/ui/toggle\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ToggleExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleBasic() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ToggleOutline() {\n return (\n \n \n \n \n Italic\n \n \n \n Bold\n \n
\n \n )\n}\n\nfunction ToggleSizes() {\n return (\n \n \n \n Small\n \n \n Default\n \n \n Large\n \n
\n \n )\n}\n\nfunction ToggleWithButtonText() {\n return (\n \n \n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n )\n}\n\nfunction ToggleWithButtonIcon() {\n return (\n \n \n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n )\n}\n\nfunction ToggleWithButtonIconText() {\n return (\n \n \n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n )\n}\n\nfunction ToggleDisabled() {\n return (\n \n \n \n Disabled\n \n \n Disabled\n \n
\n \n )\n}\n\nfunction ToggleWithIcon() {\n return (\n \n \n \n \n \n \n \n Bookmark\n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/toggle-group-example.json b/apps/v4/public/r/styles/base-lyra/toggle-group-example.json
index 30f0b3bd81..84f4b5d691 100644
--- a/apps/v4/public/r/styles/base-lyra/toggle-group-example.json
+++ b/apps/v4/public/r/styles/base-lyra/toggle-group-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/toggle-group-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from \"@/registry/bases/base/ui/toggle-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ToggleGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupBasic() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupOutline() {\n return (\n \n \n \n All\n \n \n Missed\n \n \n \n )\n}\n\nfunction ToggleGroupOutlineWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupSizes() {\n return (\n \n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n
\n \n )\n}\n\nfunction ToggleGroupSpacing() {\n return (\n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n )\n}\n\nfunction ToggleGroupWithIcons() {\n return (\n \n \n \n \n Star\n \n \n \n Heart\n \n \n \n Bookmark\n \n \n \n )\n}\n\nfunction ToggleGroupFilter() {\n return (\n \n \n \n All\n \n \n Active\n \n \n Completed\n \n \n Archived\n \n \n \n )\n}\n\nfunction ToggleGroupDateRange() {\n return (\n \n \n \n Today\n \n \n This Week\n \n \n This Month\n \n \n This Year\n \n \n \n )\n}\n\nfunction ToggleGroupSort() {\n return (\n \n \n \n \n Newest\n \n \n \n Oldest\n \n \n \n Popular\n \n \n \n )\n}\n\nfunction ToggleGroupWithInputAndSelect() {\n const items = [\n { label: \"All\", value: \"all\" },\n { label: \"Active\", value: \"active\" },\n { label: \"Archived\", value: \"archived\" },\n ]\n return (\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n Grid\n \n \n List\n \n \n
\n \n )\n}\n\nfunction ToggleGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupVerticalOutline() {\n return (\n \n \n \n All\n \n \n Active\n \n \n Completed\n \n \n Archived\n \n \n \n )\n}\n\nfunction ToggleGroupVerticalOutlineWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupVerticalWithSpacing() {\n return (\n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from \"@/registry/bases/base/ui/toggle-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ToggleGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupBasic() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupOutline() {\n return (\n \n \n \n All\n \n \n Missed\n \n \n \n )\n}\n\nfunction ToggleGroupOutlineWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupSizes() {\n return (\n \n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n
\n \n )\n}\n\nfunction ToggleGroupSpacing() {\n return (\n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n )\n}\n\nfunction ToggleGroupWithIcons() {\n return (\n \n \n \n \n Star\n \n \n \n Heart\n \n \n \n Bookmark\n \n \n \n )\n}\n\nfunction ToggleGroupFilter() {\n return (\n \n \n \n All\n \n \n Active\n \n \n Completed\n \n \n Archived\n \n \n \n )\n}\n\nfunction ToggleGroupDateRange() {\n return (\n \n \n \n Today\n \n \n This Week\n \n \n This Month\n \n \n This Year\n \n \n \n )\n}\n\nfunction ToggleGroupSort() {\n return (\n \n \n \n \n Newest\n \n \n \n Oldest\n \n \n \n Popular\n \n \n \n )\n}\n\nfunction ToggleGroupWithInputAndSelect() {\n const items = [\n { label: \"All\", value: \"all\" },\n { label: \"Active\", value: \"active\" },\n { label: \"Archived\", value: \"archived\" },\n ]\n return (\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n Grid\n \n \n List\n \n \n
\n \n )\n}\n\nfunction ToggleGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupVerticalOutline() {\n return (\n \n \n \n All\n \n \n Active\n \n \n Completed\n \n \n Archived\n \n \n \n )\n}\n\nfunction ToggleGroupVerticalOutlineWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupVerticalWithSpacing() {\n return (\n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/tooltip-example.json b/apps/v4/public/r/styles/base-lyra/tooltip-example.json
index bf4536a712..780536651e 100644
--- a/apps/v4/public/r/styles/base-lyra/tooltip-example.json
+++ b/apps/v4/public/r/styles/base-lyra/tooltip-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-lyra/examples/tooltip-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function TooltipExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TooltipBasic() {\n return (\n \n \n }>\n Show Tooltip\n \n \n Add to library
\n \n \n \n )\n}\n\nfunction TooltipSides() {\n return (\n \n \n {([\"top\", \"right\", \"bottom\", \"left\"] as const).map((side) => (\n
\n }\n >\n {side}\n \n \n Add to library
\n \n \n ))}\n
\n \n )\n}\n\nfunction TooltipWithIcon() {\n return (\n \n \n }>\n \n Info \n \n \n Additional information
\n \n \n \n )\n}\n\nfunction TooltipLongContent() {\n return (\n \n \n }>\n Show Tooltip\n \n \n To learn more about how this works, check out the docs. If you have\n any questions, please reach out to us.\n \n \n \n )\n}\n\nfunction TooltipDisabled() {\n return (\n \n \n }>\n \n Disabled\n \n \n \n This feature is currently unavailable
\n \n \n \n )\n}\n\nfunction TooltipWithKeyboard() {\n return (\n \n \n }>\n \n \n \n \n Save Changes S \n
\n \n \n \n )\n}\n\nfunction TooltipOnLink() {\n return (\n \n \n e.preventDefault()}\n />\n }\n >\n Learn more\n \n \n Click to read the documentation
\n \n \n \n )\n}\n\nfunction TooltipFormatted() {\n return (\n \n \n }>\n Status\n \n \n \n
Active
\n
Last updated 2 hours ago
\n
\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function TooltipExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TooltipBasic() {\n return (\n \n \n }>\n Show Tooltip\n \n \n Add to library
\n \n \n \n )\n}\n\nfunction TooltipSides() {\n return (\n \n \n {([\"top\", \"right\", \"bottom\", \"left\"] as const).map((side) => (\n
\n }\n >\n {side}\n \n \n Add to library
\n \n \n ))}\n
\n \n )\n}\n\nfunction TooltipWithIcon() {\n return (\n \n \n }>\n \n Info \n \n \n Additional information
\n \n \n \n )\n}\n\nfunction TooltipLongContent() {\n return (\n \n \n }>\n Show Tooltip\n \n \n To learn more about how this works, check out the docs. If you have\n any questions, please reach out to us.\n \n \n \n )\n}\n\nfunction TooltipDisabled() {\n return (\n \n \n }>\n \n Disabled\n \n \n \n This feature is currently unavailable
\n \n \n \n )\n}\n\nfunction TooltipWithKeyboard() {\n return (\n \n \n }>\n \n \n \n \n Save Changes S \n
\n \n \n \n )\n}\n\nfunction TooltipOnLink() {\n return (\n \n \n e.preventDefault()}\n />\n }\n >\n Learn more\n \n \n Click to read the documentation
\n \n \n \n )\n}\n\nfunction TooltipFormatted() {\n return (\n \n \n }>\n Status\n \n \n \n
Active
\n
Last updated 2 hours ago
\n
\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-lyra/vercel.json b/apps/v4/public/r/styles/base-lyra/vercel.json
index 45b05684c2..7652fc12dc 100644
--- a/apps/v4/public/r/styles/base-lyra/vercel.json
+++ b/apps/v4/public/r/styles/base-lyra/vercel.json
@@ -23,7 +23,7 @@
"files": [
{
"path": "registry/base-lyra/blocks/vercel.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { Area, AreaChart } from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar } from \"@/registry/bases/base/ui/calendar\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function VercelBlock() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst items = [\n {\n name: \"Edge Requests\",\n value: \"$1.83K\",\n percentage: 67.34,\n },\n {\n name: \"Fast Data Transfer\",\n percentage: 52.18,\n value: \"$952.51\",\n },\n {\n name: \"Monitoring data points\",\n percentage: 89.42,\n value: \"$901.20\",\n },\n {\n name: \"Web Analytics Events\",\n percentage: 45.67,\n value: \"$603.71\",\n },\n {\n name: \"Edge Request CPU Duration\",\n percentage: 23.91,\n value: \"$4.65\",\n },\n {\n name: \"Fast Origin Transfer\",\n percentage: 38.75,\n value: \"$3.85\",\n },\n {\n name: \"ISR Reads\",\n percentage: 71.24,\n value: \"$2.86\",\n },\n {\n name: \"Function Invocations\",\n percentage: 15.83,\n value: \"$0.60\",\n },\n {\n name: \"ISR Writes\",\n percentage: 26.23,\n value: \"524.52K / 2M\",\n },\n {\n name: \"Function Duration\",\n percentage: 5.11,\n value: \"5.11 GB Hrs / 1K GB Hrs\",\n },\n]\n\nfunction UsageCard() {\n return (\n \n \n \n \n 5 days remaining in cycle\n \n \n \n \n {items.map((item) => (\n }\n >\n \n \n \n \n {item.name} \n \n \n \n {item.value}\n \n \n \n ))}\n \n \n \n \n )\n}\n\nfunction AnomalyAlert() {\n return (\n \n \n \n \n \n Get alerted for anomalies \n \n Automatically monitor your projects for anomalies and get\n notified.\n \n \n \n Upgrade to Observability Plus \n \n \n \n \n \n )\n}\n\nconst environments = [\n \"All Environments\",\n \"Production\",\n \"Preview\",\n \"Development\",\n \"Staging\",\n \"Test\",\n \"Other\",\n]\n\nconst statuses = [\n { name: \"Ready\", color: \"oklch(0.72 0.19 150)\" },\n { name: \"Error\", color: \"oklch(0.64 0.21 25)\" },\n { name: \"Building\", color: \"oklch(0.77 0.16 70)\" },\n { name: \"Queued\", color: \"oklch(0.72 0.00 0)\" },\n { name: \"Provisioning\", color: \"oklch(0.72 0.00 0)\" },\n { name: \"Canceled\", color: \"oklch(0.72 0.00 0)\" },\n]\n\nfunction DeploymentFilter() {\n const [selectedEnvironment, setSelectedEnvironment] = React.useState(\n environments[0]\n )\n const [selectedStatuses, setSelectedStatuses] = React.useState>(\n new Set(statuses.slice(0, 5).map((s) => s.name))\n )\n const [dateRange, setDateRange] = React.useState()\n\n const toggleStatus = (statusName: string) => {\n setSelectedStatuses((prev) => {\n const next = new Set(prev)\n if (next.has(statusName)) {\n next.delete(statusName)\n } else {\n next.add(statusName)\n }\n return next\n })\n }\n\n return (\n \n \n
\n }\n >\n \n {dateRange?.from ? (\n dateRange.to ? (\n <>\n {format(dateRange.from, \"LLL dd, y\")} -{\" \"}\n {format(dateRange.to, \"LLL dd, y\")}\n >\n ) : (\n format(dateRange.from, \"LLL dd, y\")\n )\n ) : (\n \"Select Date Range\"\n )}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n
\n }\n >\n {selectedEnvironment}\n \n \n \n {environments.map((environment) => (\n setSelectedEnvironment(environment)}\n data-active={selectedEnvironment === environment}\n >\n {environment}\n \n \n ))}\n \n \n
\n }\n >\n \n {statuses.map((status) => (\n
\n ))}\n
\n Status {selectedStatuses.size}/{statuses.length}\n \n \n \n {statuses.map((status) => {\n const isSelected = selectedStatuses.has(status.name)\n return (\n toggleStatus(status.name)}\n data-active={isSelected}\n style={\n {\n \"--color\": status.color,\n } as React.CSSProperties\n }\n >\n \n \n \n )\n })}\n \n \n
\n \n )\n}\n\nconst billingItems = [\n {\n month: \"November 2025\",\n invoiceDate: new Date(2025, 10, 5),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n {\n month: \"October 2025\",\n invoiceDate: new Date(2025, 9, 4),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n {\n month: \"September 2025\",\n invoiceDate: new Date(2025, 8, 4),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n]\n\nfunction BillingList() {\n return (\n \n \n {billingItems.map((item, index) => (\n \n - \n
\n \n {item.month}\n \n {item.status}\n \n \n \n Infrastructure usage & Vercel platform\n \n \n \n Total Due \n {item.amount} \n \n \n \n Invoiced {format(item.invoiceDate, \"d MMM yyyy\")}\n \n \n \n \n }\n >\n \n More options \n \n \n View invoice \n Download PDF \n \n Contact support \n \n \n \n \n \n Total Due \n {item.amount} \n \n \n \n Invoiced {format(item.invoiceDate, \"d MMM yyyy\")}\n \n \n \n \n {index !== billingItems.length - 1 && (\n \n )}\n \n ))}\n \n \n )\n}\n\nfunction CircularGauge({ percentage }: { percentage: number }) {\n const normalizedPercentage = Math.min(Math.max(percentage, 0), 100)\n const circumference = 2 * Math.PI * 42.5\n const strokePercent = (normalizedPercentage / 100) * circumference\n\n return (\n \n \n \n \n )\n}\n\nconst agentFeatures = [\n {\n id: \"code-reviews\",\n content: (\n <>\n Code reviews with full codebase context to catch{\" \"}\n hard-to-find bugs. bugs.\n >\n ),\n },\n {\n id: \"code-suggestions\",\n content: (\n <>\n Code suggestions validated in sandboxes before you\n merge.\n >\n ),\n },\n {\n id: \"root-cause\",\n content: (\n <>\n Root-cause analysis for production issues with\n deployment context.{\" \"}\n \n Requires Observability Plus\n \n >\n ),\n },\n]\n\nfunction ActivateAgentDialog() {\n return (\n \n \n }>\n Activate Agent\n \n \n \n Ship faster & safer with Vercel Agent \n \n Your use is subject to Vercel's{\" \"}\n Public Beta Agreement and{\" \"}\n AI Product Terms .\n \n \n \n
\n {agentFeatures.map((feature) => (\n - \n
\n \n \n \n \n {feature.content}\n \n \n \n ))}\n \n
\n \n \n Pro teams get $100 in Vercel Agent trial credit for 2 weeks.\n \n \n
\n \n }>\n Cancel\n \n Enable with $100 credits \n \n \n \n \n )\n}\n\nfunction ObservabilityCard() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n Create Query{\" \"}\n \n \n \n Warning\n \n \n \n \n )\n}\n\nfunction FeedbackForm() {\n return (\n \n \n \n \n \n \n Topic \n \n \n Select a topic\n \n AI \n \n Accounts and Access Controls\n \n \n Billing\n \n \n CDN (Firewall, Caching)\n \n \n CI/CD (Builds, Deployments, Environment Variables)\n \n \n Dashboard Interface (Navigation, UI Issues)\n \n \n Domains\n \n \n Frameworks\n \n \n Marketplace and Integrations\n \n \n Observability (Observability, Logs, Monitoring)\n \n \n Storage\n \n \n \n \n Feedback \n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst chartData = [\n { month: \"January\", visitors: 186 },\n { month: \"February\", visitors: 305 },\n { month: \"March\", visitors: 237 },\n { month: \"April\", visitors: 73 },\n { month: \"May\", visitors: 209 },\n { month: \"June\", visitors: 214 },\n]\n\nconst chartConfig = {\n visitors: {\n label: \"Visitors\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nfunction AnalyticsCard() {\n return (\n \n \n \n Analytics \n \n 418.2K Visitors +10% \n \n \n \n View Analytics\n \n \n \n \n \n }\n defaultIndex={2}\n />\n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { Area, AreaChart } from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar } from \"@/registry/bases/base/ui/calendar\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function VercelBlock() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst items = [\n {\n name: \"Edge Requests\",\n value: \"$1.83K\",\n percentage: 67.34,\n },\n {\n name: \"Fast Data Transfer\",\n percentage: 52.18,\n value: \"$952.51\",\n },\n {\n name: \"Monitoring data points\",\n percentage: 89.42,\n value: \"$901.20\",\n },\n {\n name: \"Web Analytics Events\",\n percentage: 45.67,\n value: \"$603.71\",\n },\n {\n name: \"Edge Request CPU Duration\",\n percentage: 23.91,\n value: \"$4.65\",\n },\n {\n name: \"Fast Origin Transfer\",\n percentage: 38.75,\n value: \"$3.85\",\n },\n {\n name: \"ISR Reads\",\n percentage: 71.24,\n value: \"$2.86\",\n },\n {\n name: \"Function Invocations\",\n percentage: 15.83,\n value: \"$0.60\",\n },\n {\n name: \"ISR Writes\",\n percentage: 26.23,\n value: \"524.52K / 2M\",\n },\n {\n name: \"Function Duration\",\n percentage: 5.11,\n value: \"5.11 GB Hrs / 1K GB Hrs\",\n },\n]\n\nfunction UsageCard() {\n return (\n \n \n \n \n 5 days remaining in cycle\n \n \n \n \n {items.map((item) => (\n }\n >\n \n \n \n \n {item.name} \n \n \n \n {item.value}\n \n \n \n ))}\n \n \n \n \n )\n}\n\nfunction AnomalyAlert() {\n return (\n \n \n \n \n \n Get alerted for anomalies \n \n Automatically monitor your projects for anomalies and get\n notified.\n \n \n \n Upgrade to Observability Plus \n \n \n \n \n \n )\n}\n\nconst environments = [\n \"All Environments\",\n \"Production\",\n \"Preview\",\n \"Development\",\n \"Staging\",\n \"Test\",\n \"Other\",\n]\n\nconst statuses = [\n { name: \"Ready\", color: \"oklch(0.72 0.19 150)\" },\n { name: \"Error\", color: \"oklch(0.64 0.21 25)\" },\n { name: \"Building\", color: \"oklch(0.77 0.16 70)\" },\n { name: \"Queued\", color: \"oklch(0.72 0.00 0)\" },\n { name: \"Provisioning\", color: \"oklch(0.72 0.00 0)\" },\n { name: \"Canceled\", color: \"oklch(0.72 0.00 0)\" },\n]\n\nfunction DeploymentFilter() {\n const [selectedEnvironment, setSelectedEnvironment] = React.useState(\n environments[0]\n )\n const [selectedStatuses, setSelectedStatuses] = React.useState>(\n new Set(statuses.slice(0, 5).map((s) => s.name))\n )\n const [dateRange, setDateRange] = React.useState()\n\n const toggleStatus = (statusName: string) => {\n setSelectedStatuses((prev) => {\n const next = new Set(prev)\n if (next.has(statusName)) {\n next.delete(statusName)\n } else {\n next.add(statusName)\n }\n return next\n })\n }\n\n return (\n \n \n
\n }\n >\n \n {dateRange?.from ? (\n dateRange.to ? (\n <>\n {format(dateRange.from, \"LLL dd, y\")} -{\" \"}\n {format(dateRange.to, \"LLL dd, y\")}\n >\n ) : (\n format(dateRange.from, \"LLL dd, y\")\n )\n ) : (\n \"Select Date Range\"\n )}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n
\n }\n >\n {selectedEnvironment}\n \n \n \n {environments.map((environment) => (\n setSelectedEnvironment(environment)}\n data-active={selectedEnvironment === environment}\n >\n {environment}\n \n \n ))}\n \n \n
\n }\n >\n \n {statuses.map((status) => (\n
\n ))}\n
\n Status {selectedStatuses.size}/{statuses.length}\n \n \n \n {statuses.map((status) => {\n const isSelected = selectedStatuses.has(status.name)\n return (\n toggleStatus(status.name)}\n data-active={isSelected}\n style={\n {\n \"--color\": status.color,\n } as React.CSSProperties\n }\n >\n \n \n \n )\n })}\n \n \n
\n \n )\n}\n\nconst billingItems = [\n {\n month: \"November 2025\",\n invoiceDate: new Date(2025, 10, 5),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n {\n month: \"October 2025\",\n invoiceDate: new Date(2025, 9, 4),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n {\n month: \"September 2025\",\n invoiceDate: new Date(2025, 8, 4),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n]\n\nfunction BillingList() {\n return (\n \n \n {billingItems.map((item, index) => (\n \n - \n
\n \n {item.month}\n \n {item.status}\n \n \n \n Infrastructure usage & Vercel platform\n \n \n \n Total Due \n {item.amount} \n \n \n \n Invoiced {format(item.invoiceDate, \"d MMM yyyy\")}\n \n \n \n \n }\n >\n \n More options \n \n \n View invoice \n Download PDF \n \n Contact support \n \n \n \n \n \n Total Due \n {item.amount} \n \n \n \n Invoiced {format(item.invoiceDate, \"d MMM yyyy\")}\n \n \n \n \n {index !== billingItems.length - 1 && (\n \n )}\n \n ))}\n \n \n )\n}\n\nfunction CircularGauge({ percentage }: { percentage: number }) {\n const normalizedPercentage = Math.min(Math.max(percentage, 0), 100)\n const circumference = 2 * Math.PI * 42.5\n const strokePercent = (normalizedPercentage / 100) * circumference\n\n return (\n \n \n \n \n )\n}\n\nconst agentFeatures = [\n {\n id: \"code-reviews\",\n content: (\n <>\n Code reviews with full codebase context to catch{\" \"}\n hard-to-find bugs. bugs.\n >\n ),\n },\n {\n id: \"code-suggestions\",\n content: (\n <>\n Code suggestions validated in sandboxes before you\n merge.\n >\n ),\n },\n {\n id: \"root-cause\",\n content: (\n <>\n Root-cause analysis for production issues with\n deployment context.{\" \"}\n \n Requires Observability Plus\n \n >\n ),\n },\n]\n\nfunction ActivateAgentDialog() {\n return (\n \n \n }>\n Activate Agent\n \n \n \n Ship faster & safer with Vercel Agent \n \n Your use is subject to Vercel's{\" \"}\n Public Beta Agreement and{\" \"}\n AI Product Terms .\n \n \n \n
\n {agentFeatures.map((feature) => (\n - \n
\n \n \n \n \n {feature.content}\n \n \n \n ))}\n \n
\n \n \n Pro teams get $100 in Vercel Agent trial credit for 2 weeks.\n \n \n
\n \n }>\n Cancel\n \n Enable with $100 credits \n \n \n \n \n )\n}\n\nfunction ObservabilityCard() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n Create Query{\" \"}\n \n \n \n Warning\n \n \n \n \n )\n}\n\nfunction FeedbackForm() {\n return (\n \n \n \n \n \n \n Topic \n \n \n Select a topic\n \n AI \n \n Accounts and Access Controls\n \n \n Billing\n \n \n CDN (Firewall, Caching)\n \n \n CI/CD (Builds, Deployments, Environment Variables)\n \n \n Dashboard Interface (Navigation, UI Issues)\n \n \n Domains\n \n \n Frameworks\n \n \n Marketplace and Integrations\n \n \n Observability (Observability, Logs, Monitoring)\n \n \n Storage\n \n \n \n \n Feedback \n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst chartData = [\n { month: \"January\", visitors: 186 },\n { month: \"February\", visitors: 305 },\n { month: \"March\", visitors: 237 },\n { month: \"April\", visitors: 73 },\n { month: \"May\", visitors: 209 },\n { month: \"June\", visitors: 214 },\n]\n\nconst chartConfig = {\n visitors: {\n label: \"Visitors\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nfunction AnalyticsCard() {\n return (\n \n \n \n Analytics \n \n 418.2K Visitors +10% \n \n \n \n View Analytics\n \n \n \n \n \n }\n defaultIndex={2}\n />\n \n \n \n \n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/accordion-example.json b/apps/v4/public/r/styles/base-maia/accordion-example.json
index d02de36a58..952b6b3291 100644
--- a/apps/v4/public/r/styles/base-maia/accordion-example.json
+++ b/apps/v4/public/r/styles/base-maia/accordion-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/accordion-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/bases/base/ui/accordion\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AccordionExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction AccordionBasic() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Is it accessible?\",\n content: \"Yes. It adheres to the WAI-ARIA design pattern.\",\n },\n {\n value: \"item-2\",\n trigger: \"Is it styled?\",\n content:\n \"Yes. It comes with default styles that matches the other components' aesthetic.\",\n },\n {\n value: \"item-3\",\n trigger: \"Is it animated?\",\n content:\n \"Yes. It's animated by default, but you can disable it if you prefer.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionMultiple() {\n const items = [\n {\n value: \"item-1\",\n trigger:\n \"What are the key considerations when implementing a comprehensive enterprise-level authentication system?\",\n content:\n \"Implementing a robust enterprise authentication system requires careful consideration of multiple factors. This includes secure password hashing and storage, multi-factor authentication (MFA) implementation, session management, OAuth2 and SSO integration, regular security audits, rate limiting to prevent brute force attacks, and maintaining detailed audit logs. Additionally, you'll need to consider scalability, performance impact, and compliance with relevant data protection regulations such as GDPR or HIPAA.\",\n },\n {\n value: \"item-2\",\n trigger:\n \"How does modern distributed system architecture handle eventual consistency and data synchronization across multiple regions?\",\n content:\n \"Modern distributed systems employ various strategies to maintain data consistency across regions. This often involves using techniques like CRDT (Conflict-Free Replicated Data Types), vector clocks, and gossip protocols. Systems might implement event sourcing patterns, utilize message queues for asynchronous updates, and employ sophisticated conflict resolution strategies. Popular solutions like Amazon's DynamoDB and Google's Spanner demonstrate different approaches to solving these challenges, balancing between consistency, availability, and partition tolerance as described in the CAP theorem.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionWithBorders() {\n const items = [\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content:\n \"We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members. There are no hidden fees or setup costs.\",\n },\n {\n value: \"security\",\n trigger: \"Is my data secure?\",\n content:\n \"Yes. We use end-to-end encryption, SOC 2 Type II compliance, and regular third-party security audits. All data is encrypted at rest and in transit using industry-standard protocols. We also offer optional two-factor authentication and single sign-on for enterprise customers.\",\n },\n {\n value: \"integration\",\n trigger: \"What integrations do you support?\",\n content: (\n <>\n \n We integrate with 500+ popular tools including Slack, Zapier,\n Salesforce, HubSpot, and more. You can also build custom\n integrations using our REST API and webhooks.{\" \"}\n
\n \n Our API documentation includes code examples in 10+ programming\n languages.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n\nfunction AccordionInCard() {\n const items = [\n {\n value: \"plans\",\n trigger: \"What subscription plans do you offer?\",\n content: (\n <>\n \n We offer three subscription tiers: Starter ($9/month), Professional\n ($29/month), and Enterprise ($99/month). Each plan includes\n increasing storage limits, API access, priority support, and team\n collaboration features.\n
\n \n Annual billing is available with a 20% discount. All\n plans include a 14-day free trial with no credit card required.\n
\n \n View plans\n \n \n >\n ),\n },\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content: (\n <>\n \n Billing occurs automatically at the start of each billing cycle. We\n accept all major credit cards, PayPal, and ACH transfers for\n enterprise customers.\n
\n \n You'll receive an invoice via email after each payment. You can\n update your payment method or billing information anytime in your\n account settings. Failed payments will trigger automated retry\n attempts and email notifications.\n
\n >\n ),\n },\n {\n value: \"upgrade\",\n trigger: \"Can I upgrade or downgrade my plan?\",\n content: (\n <>\n \n Yes, you can change your plan at any time. When upgrading,\n you'll be charged a prorated amount for the remainder of your\n billing cycle and immediately gain access to new features.\n
\n \n When downgrading, the change takes effect at the end of your current\n billing period, and you'll retain access to premium features\n until then. No refunds are provided for downgrades.\n
\n >\n ),\n },\n {\n value: \"cancel\",\n trigger: \"How do I cancel my subscription?\",\n content: (\n <>\n \n You can cancel your subscription anytime from your account settings.\n There are no cancellation fees or penalties. Your access will\n continue until the end of your current billing period.\n
\n \n After cancellation, your data is retained for 30 days in case you\n want to reactivate. You can export all your data before or after\n canceling. We'd love to hear your feedback about why\n you're leaving.\n
\n >\n ),\n },\n {\n value: \"refund\",\n trigger: \"What is your refund policy?\",\n content: (\n <>\n \n We offer a 30-day money-back guarantee for new subscriptions. If\n you're not satisfied within the first 30 days, contact our\n support team for a full refund.\n
\n \n After 30 days, we don't provide refunds for partial billing\n periods, but you can cancel anytime to avoid future charges.\n Enterprise customers have custom refund terms outlined in their\n contracts.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n \n Subscription & Billing \n \n Common questions about your account, plans, and payments\n \n \n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n \n \n )\n}\n\nfunction AccordionWithDisabled() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Can I access my account history?\",\n content:\n \"Yes, you can view your complete account history including all transactions, plan changes, and support tickets in the Account History section of your dashboard.\",\n disabled: false,\n },\n {\n value: \"item-2\",\n trigger: \"Premium feature information\",\n content:\n \"This section contains information about premium features. Upgrade your plan to access this content.\",\n disabled: true,\n },\n {\n value: \"item-3\",\n trigger: \"How do I update my email address?\",\n content:\n \"You can update your email address in your account settings. You'll receive a verification email at your new address to confirm the change.\",\n disabled: false,\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/bases/base/ui/accordion\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AccordionExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction AccordionBasic() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Is it accessible?\",\n content: \"Yes. It adheres to the WAI-ARIA design pattern.\",\n },\n {\n value: \"item-2\",\n trigger: \"Is it styled?\",\n content:\n \"Yes. It comes with default styles that matches the other components' aesthetic.\",\n },\n {\n value: \"item-3\",\n trigger: \"Is it animated?\",\n content:\n \"Yes. It's animated by default, but you can disable it if you prefer.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionMultiple() {\n const items = [\n {\n value: \"item-1\",\n trigger:\n \"What are the key considerations when implementing a comprehensive enterprise-level authentication system?\",\n content:\n \"Implementing a robust enterprise authentication system requires careful consideration of multiple factors. This includes secure password hashing and storage, multi-factor authentication (MFA) implementation, session management, OAuth2 and SSO integration, regular security audits, rate limiting to prevent brute force attacks, and maintaining detailed audit logs. Additionally, you'll need to consider scalability, performance impact, and compliance with relevant data protection regulations such as GDPR or HIPAA.\",\n },\n {\n value: \"item-2\",\n trigger:\n \"How does modern distributed system architecture handle eventual consistency and data synchronization across multiple regions?\",\n content:\n \"Modern distributed systems employ various strategies to maintain data consistency across regions. This often involves using techniques like CRDT (Conflict-Free Replicated Data Types), vector clocks, and gossip protocols. Systems might implement event sourcing patterns, utilize message queues for asynchronous updates, and employ sophisticated conflict resolution strategies. Popular solutions like Amazon's DynamoDB and Google's Spanner demonstrate different approaches to solving these challenges, balancing between consistency, availability, and partition tolerance as described in the CAP theorem.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionWithBorders() {\n const items = [\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content:\n \"We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members. There are no hidden fees or setup costs.\",\n },\n {\n value: \"security\",\n trigger: \"Is my data secure?\",\n content:\n \"Yes. We use end-to-end encryption, SOC 2 Type II compliance, and regular third-party security audits. All data is encrypted at rest and in transit using industry-standard protocols. We also offer optional two-factor authentication and single sign-on for enterprise customers.\",\n },\n {\n value: \"integration\",\n trigger: \"What integrations do you support?\",\n content: (\n <>\n \n We integrate with 500+ popular tools including Slack, Zapier,\n Salesforce, HubSpot, and more. You can also build custom\n integrations using our REST API and webhooks.{\" \"}\n
\n \n Our API documentation includes code examples in 10+ programming\n languages.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n\nfunction AccordionInCard() {\n const items = [\n {\n value: \"plans\",\n trigger: \"What subscription plans do you offer?\",\n content: (\n <>\n \n We offer three subscription tiers: Starter ($9/month), Professional\n ($29/month), and Enterprise ($99/month). Each plan includes\n increasing storage limits, API access, priority support, and team\n collaboration features.\n
\n \n Annual billing is available with a 20% discount. All\n plans include a 14-day free trial with no credit card required.\n
\n \n View plans\n \n \n >\n ),\n },\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content: (\n <>\n \n Billing occurs automatically at the start of each billing cycle. We\n accept all major credit cards, PayPal, and ACH transfers for\n enterprise customers.\n
\n \n You'll receive an invoice via email after each payment. You can\n update your payment method or billing information anytime in your\n account settings. Failed payments will trigger automated retry\n attempts and email notifications.\n
\n >\n ),\n },\n {\n value: \"upgrade\",\n trigger: \"Can I upgrade or downgrade my plan?\",\n content: (\n <>\n \n Yes, you can change your plan at any time. When upgrading,\n you'll be charged a prorated amount for the remainder of your\n billing cycle and immediately gain access to new features.\n
\n \n When downgrading, the change takes effect at the end of your current\n billing period, and you'll retain access to premium features\n until then. No refunds are provided for downgrades.\n
\n >\n ),\n },\n {\n value: \"cancel\",\n trigger: \"How do I cancel my subscription?\",\n content: (\n <>\n \n You can cancel your subscription anytime from your account settings.\n There are no cancellation fees or penalties. Your access will\n continue until the end of your current billing period.\n
\n \n After cancellation, your data is retained for 30 days in case you\n want to reactivate. You can export all your data before or after\n canceling. We'd love to hear your feedback about why\n you're leaving.\n
\n >\n ),\n },\n {\n value: \"refund\",\n trigger: \"What is your refund policy?\",\n content: (\n <>\n \n We offer a 30-day money-back guarantee for new subscriptions. If\n you're not satisfied within the first 30 days, contact our\n support team for a full refund.\n
\n \n After 30 days, we don't provide refunds for partial billing\n periods, but you can cancel anytime to avoid future charges.\n Enterprise customers have custom refund terms outlined in their\n contracts.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n \n Subscription & Billing \n \n Common questions about your account, plans, and payments\n \n \n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n \n \n )\n}\n\nfunction AccordionWithDisabled() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Can I access my account history?\",\n content:\n \"Yes, you can view your complete account history including all transactions, plan changes, and support tickets in the Account History section of your dashboard.\",\n disabled: false,\n },\n {\n value: \"item-2\",\n trigger: \"Premium feature information\",\n content:\n \"This section contains information about premium features. Upgrade your plan to access this content.\",\n disabled: true,\n },\n {\n value: \"item-3\",\n trigger: \"How do I update my email address?\",\n content:\n \"You can update your email address in your account settings. You'll receive a verification email at your new address to confirm the change.\",\n disabled: false,\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/accordion.json b/apps/v4/public/r/styles/base-maia/accordion.json
index 268a3a6b48..5f082823a2 100644
--- a/apps/v4/public/r/styles/base-maia/accordion.json
+++ b/apps/v4/public/r/styles/base-maia/accordion.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/accordion.tsx",
- "content": "\"use client\"\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n \n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n \n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n \n \n {children}\n \n \n \n \n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n \n \n {children}\n
\n \n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n",
+ "content": "\"use client\"\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n \n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n \n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n \n \n {children}\n \n \n \n \n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n \n \n {children}\n
\n \n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/alert-dialog-example.json b/apps/v4/public/r/styles/base-maia/alert-dialog-example.json
index 55638417b8..449be8c454 100644
--- a/apps/v4/public/r/styles/base-maia/alert-dialog-example.json
+++ b/apps/v4/public/r/styles/base-maia/alert-dialog-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/alert-dialog-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertDialogExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction AlertDialogBasic() {\n return (\n \n \n Default}\n />\n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmall() {\n return (\n \n \n Small} />\n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogWithMedia() {\n return (\n \n \n Default (Media)}\n />\n \n \n \n \n \n Are you absolutely sure? \n \n This will permanently delete your account and remove your data\n from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmallWithMedia() {\n return (\n \n \n Small (Media)}\n />\n\n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogDestructive() {\n return (\n \n \n Delete Chat}\n />\n \n \n \n \n \n Delete chat? \n \n This will permanently delete this chat conversation. View{\" \"}\n Settings delete any memories saved during this\n chat.\n \n \n \n Cancel \n Delete \n \n \n \n \n )\n}\n\nfunction AlertDialogInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Alert Dialog Example \n \n Click the button below to open an alert dialog.\n \n \n \n \n }>\n Open Alert Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertDialogExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction AlertDialogBasic() {\n return (\n \n \n Default}\n />\n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmall() {\n return (\n \n \n Small} />\n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogWithMedia() {\n return (\n \n \n Default (Media)}\n />\n \n \n \n \n \n Are you absolutely sure? \n \n This will permanently delete your account and remove your data\n from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmallWithMedia() {\n return (\n \n \n Small (Media)}\n />\n\n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogDestructive() {\n return (\n \n \n Delete Chat}\n />\n \n \n \n \n \n Delete chat? \n \n This will permanently delete this chat conversation. View{\" \"}\n Settings delete any memories saved during this\n chat.\n \n \n \n Cancel \n Delete \n \n \n \n \n )\n}\n\nfunction AlertDialogInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Alert Dialog Example \n \n Click the button below to open an alert dialog.\n \n \n \n \n }>\n Open Alert Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/alert-example.json b/apps/v4/public/r/styles/base-maia/alert-example.json
index dacc62c52a..468d6ceee6 100644
--- a/apps/v4/public/r/styles/base-maia/alert-example.json
+++ b/apps/v4/public/r/styles/base-maia/alert-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-maia/examples/alert-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Alert,\n AlertAction,\n AlertDescription,\n AlertTitle,\n} from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction AlertExample1() {\n return (\n \n \n
\n Success! Your changes have been saved. \n \n
\n Success! Your changes have been saved. \n \n This is an alert with title and description.\n \n \n
\n \n This one has a description only. No title. No icon.\n \n \n
\n \n )\n}\n\nfunction AlertExample2() {\n return (\n \n \n
\n \n \n Let's try one with icon, title and a link .\n \n \n
\n \n \n This one has an icon and a description only. No title.{\" \"}\n But it has a link and a second link .\n \n \n\n
\n \n Success! Your changes have been saved \n \n This is an alert with icon, title and description.\n \n \n
\n \n \n This is a very long alert title that demonstrates how the component\n handles extended text content and potentially wraps across multiple\n lines\n \n \n
\n \n \n This is a very long alert description that demonstrates how the\n component handles extended text content and potentially wraps across\n multiple lines\n \n \n
\n \n \n This is an extremely long alert title that spans multiple lines to\n demonstrate how the component handles very lengthy headings while\n maintaining readability and proper text wrapping behavior\n \n \n This is an equally long description that contains detailed\n information about the alert. It shows how the component can\n accommodate extensive content while preserving proper spacing,\n alignment, and readability across different screen sizes and\n viewport widths. This helps ensure the user experience remains\n consistent regardless of the content length.\n \n \n
\n \n )\n}\n\nfunction AlertExample3() {\n return (\n \n \n
\n \n Something went wrong! \n \n Your session has expired. Please log in again.\n \n \n
\n \n Unable to process your payment. \n \n \n Please verify your billing information and try\n again.\n
\n \n Check your card details \n Ensure sufficient funds \n Verify billing address \n \n \n \n
\n \n )\n}\n\nfunction AlertExample4() {\n return (\n \n \n
\n \n The selected emails have been marked as spam. \n \n Undo \n \n \n
\n \n The selected emails have been marked as spam. \n \n This is a very long alert title that demonstrates how the component\n handles extended text content.\n \n \n Badge \n \n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Alert,\n AlertAction,\n AlertDescription,\n AlertTitle,\n} from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction AlertExample1() {\n return (\n \n \n
\n Success! Your changes have been saved. \n \n
\n Success! Your changes have been saved. \n \n This is an alert with title and description.\n \n \n
\n \n This one has a description only. No title. No icon.\n \n \n
\n \n )\n}\n\nfunction AlertExample2() {\n return (\n \n \n
\n \n \n Let's try one with icon, title and a link .\n \n \n
\n \n \n This one has an icon and a description only. No title.{\" \"}\n But it has a link and a second link .\n \n \n\n
\n \n Success! Your changes have been saved \n \n This is an alert with icon, title and description.\n \n \n
\n \n \n This is a very long alert title that demonstrates how the component\n handles extended text content and potentially wraps across multiple\n lines\n \n \n
\n \n \n This is a very long alert description that demonstrates how the\n component handles extended text content and potentially wraps across\n multiple lines\n \n \n
\n \n \n This is an extremely long alert title that spans multiple lines to\n demonstrate how the component handles very lengthy headings while\n maintaining readability and proper text wrapping behavior\n \n \n This is an equally long description that contains detailed\n information about the alert. It shows how the component can\n accommodate extensive content while preserving proper spacing,\n alignment, and readability across different screen sizes and\n viewport widths. This helps ensure the user experience remains\n consistent regardless of the content length.\n \n \n
\n \n )\n}\n\nfunction AlertExample3() {\n return (\n \n \n
\n \n Something went wrong! \n \n Your session has expired. Please log in again.\n \n \n
\n \n Unable to process your payment. \n \n \n Please verify your billing information and try\n again.\n
\n \n Check your card details \n Ensure sufficient funds \n Verify billing address \n \n \n \n
\n \n )\n}\n\nfunction AlertExample4() {\n return (\n \n \n
\n \n The selected emails have been marked as spam. \n \n Undo \n \n \n
\n \n The selected emails have been marked as spam. \n \n This is a very long alert title that demonstrates how the component\n handles extended text content.\n \n \n Badge \n \n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/avatar-example.json b/apps/v4/public/r/styles/base-maia/avatar-example.json
index 5e2f0b7934..3c9cb21fd4 100644
--- a/apps/v4/public/r/styles/base-maia/avatar-example.json
+++ b/apps/v4/public/r/styles/base-maia/avatar-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/avatar-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarBadge,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AvatarExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction AvatarSizes() {\n return (\n \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n
\n CN \n \n
\n CN \n \n
\n CN \n \n
\n \n )\n}\n\nfunction AvatarWithBadge() {\n return (\n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n \n )\n}\n\nfunction AvatarWithBadgeIcon() {\n return (\n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n \n )\n}\n\nfunction AvatarGroupExample() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n )\n}\n\nfunction AvatarGroupWithCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n )\n}\n\nfunction AvatarGroupWithIconCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n )\n}\n\nfunction AvatarInEmpty() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n \n Invite Members\n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarBadge,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AvatarExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction AvatarSizes() {\n return (\n \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n
\n CN \n \n
\n CN \n \n
\n CN \n \n
\n \n )\n}\n\nfunction AvatarWithBadge() {\n return (\n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n \n )\n}\n\nfunction AvatarWithBadgeIcon() {\n return (\n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n \n )\n}\n\nfunction AvatarGroupExample() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n )\n}\n\nfunction AvatarGroupWithCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n )\n}\n\nfunction AvatarGroupWithIconCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n )\n}\n\nfunction AvatarInEmpty() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n \n Invite Members\n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/badge-example.json b/apps/v4/public/r/styles/base-maia/badge-example.json
index 8a374146ab..99373665b3 100644
--- a/apps/v4/public/r/styles/base-maia/badge-example.json
+++ b/apps/v4/public/r/styles/base-maia/badge-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-maia/examples/badge-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function BadgeExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction BadgeVariants() {\n return (\n \n \n Default \n Secondary \n Destructive \n Outline \n Ghost \n Link \n
\n \n )\n}\n\nfunction BadgeWithIconLeft() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeWithIconRight() {\n return (\n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n \n
\n \n )\n}\n\nfunction BadgeWithSpinner() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeAsLink() {\n return (\n \n \n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n
\n \n )\n}\n\nfunction BadgeLongText() {\n return (\n \n \n \n A badge with a lot of text to see how it wraps\n \n
\n \n )\n}\n\nfunction BadgeCustomColors() {\n return (\n \n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Red\n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function BadgeExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction BadgeVariants() {\n return (\n \n \n Default \n Secondary \n Destructive \n Outline \n Ghost \n Link \n
\n \n )\n}\n\nfunction BadgeWithIconLeft() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeWithIconRight() {\n return (\n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n \n
\n \n )\n}\n\nfunction BadgeWithSpinner() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeAsLink() {\n return (\n \n \n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n
\n \n )\n}\n\nfunction BadgeLongText() {\n return (\n \n \n \n A badge with a lot of text to see how it wraps\n \n
\n \n )\n}\n\nfunction BadgeCustomColors() {\n return (\n \n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Red\n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/breadcrumb.json b/apps/v4/public/r/styles/base-maia/breadcrumb.json
index 455e7aeb2a..4d0aa4be35 100644
--- a/apps/v4/public/r/styles/base-maia/breadcrumb.json
+++ b/apps/v4/public/r/styles/base-maia/breadcrumb.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/breadcrumb.tsx",
- "content": "import * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbLink({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"a\">) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\"hover:text-foreground transition-colors\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"breadcrumb-link\",\n },\n })\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? (\n \n )}\n \n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n svg]:size-4 flex items-center justify-center\",\n className\n )}\n {...props}\n >\n \n More \n \n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n",
+ "content": "import * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbLink({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"a\">) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\"hover:text-foreground transition-colors\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"breadcrumb-link\",\n },\n })\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? (\n \n )}\n \n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n svg]:size-4 flex items-center justify-center\",\n className\n )}\n {...props}\n >\n \n More \n \n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/button-example.json b/apps/v4/public/r/styles/base-maia/button-example.json
index eabef5203c..a1acf32648 100644
--- a/apps/v4/public/r/styles/base-maia/button-example.json
+++ b/apps/v4/public/r/styles/base-maia/button-example.json
@@ -9,7 +9,7 @@
"files": [
{
"path": "registry/base-maia/examples/button-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonVariantsAndSizes() {\n return (\n \n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n Secondary \n Outline \n Ghost \n Destructive \n Link \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n\nfunction ButtonIconRight() {\n return (\n \n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n )\n}\n\nfunction ButtonIconLeft() {\n return (\n \n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n )\n}\n\nfunction ButtonIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonExamples() {\n return (\n \n \n
\n Cancel \n \n Submit{\" \"}\n \n \n
\n
\n Delete \n \n \n \n
\n
} nativeButton={false}>\n Link\n \n
\n \n )\n}\n\nfunction ButtonInvalidStates() {\n return (\n \n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonVariantsAndSizes() {\n return (\n \n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n Secondary \n Outline \n Ghost \n Destructive \n Link \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n\nfunction ButtonIconRight() {\n return (\n \n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n )\n}\n\nfunction ButtonIconLeft() {\n return (\n \n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n )\n}\n\nfunction ButtonIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonExamples() {\n return (\n \n \n
\n Cancel \n \n Submit{\" \"}\n \n \n
\n
\n Delete \n \n \n \n
\n
} nativeButton={false}>\n Link\n \n
\n \n )\n}\n\nfunction ButtonInvalidStates() {\n return (\n \n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/button-group-example.json b/apps/v4/public/r/styles/base-maia/button-group-example.json
index 3067a1e635..9387a3da83 100644
--- a/apps/v4/public/r/styles/base-maia/button-group-example.json
+++ b/apps/v4/public/r/styles/base-maia/button-group-example.json
@@ -18,7 +18,7 @@
"files": [
{
"path": "registry/base-maia/examples/button-group-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupBasic() {\n return (\n \n \n \n Button \n Another Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInput() {\n return (\n \n \n \n Button \n \n \n \n \n Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithText() {\n return (\n \n \n \n Text \n Another Button \n \n \n }>\n GPU Size\n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithDropdown() {\n return (\n \n \n \n Update \n \n }\n >\n \n \n \n Disable \n \n Uninstall\n \n \n \n \n \n Follow \n \n }\n >\n \n \n \n \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Report Conversation\n \n \n \n Block User\n \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n
\n \n )\n}\n\nconst currencyItems = [\n { label: \"$\", value: \"$\" },\n { label: \"€\", value: \"€\" },\n { label: \"£\", value: \"£\" },\n]\n\nfunction ButtonGroupWithSelect() {\n return (\n \n \n Amount \n \n \n \n \n \n \n \n {currencyItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInputGroup() {\n return (\n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithFields() {\n return (\n \n \n \n Width \n \n \n \n \n W\n \n \n px\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithLike() {\n return (\n \n \n \n {\" \"}\n Like\n \n }\n nativeButton={false}\n >\n 1.2K\n \n \n \n )\n}\n\nconst durationItems = [\n { label: \"Hours\", value: \"hours\" },\n { label: \"Days\", value: \"days\" },\n { label: \"Weeks\", value: \"weeks\" },\n]\n\nfunction ButtonGroupWithSelectAndInput() {\n return (\n \n \n \n \n \n \n \n \n {durationItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n }>\n \n \n Voice Mode \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupPagination() {\n return (\n \n \n \n \n Previous\n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n Next\n \n \n \n \n )\n}\n\nfunction ButtonGroupPaginationSplit() {\n return (\n \n \n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNavigation() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupTextAlignment() {\n return (\n \n \n Text Alignment \n \n \n Left\n \n \n Center\n \n \n Right\n \n \n Justify\n \n \n \n \n )\n}\n\nfunction ButtonGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupVerticalNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupBasic() {\n return (\n \n \n \n Button \n Another Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInput() {\n return (\n \n \n \n Button \n \n \n \n \n Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithText() {\n return (\n \n \n \n Text \n Another Button \n \n \n }>\n GPU Size\n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithDropdown() {\n return (\n \n \n \n Update \n \n }\n >\n \n \n \n Disable \n \n Uninstall\n \n \n \n \n \n Follow \n \n }\n >\n \n \n \n \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Report Conversation\n \n \n \n Block User\n \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n
\n \n )\n}\n\nconst currencyItems = [\n { label: \"$\", value: \"$\" },\n { label: \"€\", value: \"€\" },\n { label: \"£\", value: \"£\" },\n]\n\nfunction ButtonGroupWithSelect() {\n return (\n \n \n Amount \n \n \n \n \n \n \n \n {currencyItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInputGroup() {\n return (\n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithFields() {\n return (\n \n \n \n Width \n \n \n \n \n W\n \n \n px\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithLike() {\n return (\n \n \n \n {\" \"}\n Like\n \n }\n nativeButton={false}\n >\n 1.2K\n \n \n \n )\n}\n\nconst durationItems = [\n { label: \"Hours\", value: \"hours\" },\n { label: \"Days\", value: \"days\" },\n { label: \"Weeks\", value: \"weeks\" },\n]\n\nfunction ButtonGroupWithSelectAndInput() {\n return (\n \n \n \n \n \n \n \n \n {durationItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n }>\n \n \n Voice Mode \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupPagination() {\n return (\n \n \n \n \n Previous\n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n Next\n \n \n \n \n )\n}\n\nfunction ButtonGroupPaginationSplit() {\n return (\n \n \n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNavigation() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupTextAlignment() {\n return (\n \n \n Text Alignment \n \n \n Left\n \n \n Center\n \n \n Right\n \n \n Justify\n \n \n \n \n )\n}\n\nfunction ButtonGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupVerticalNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/calendar-example.json b/apps/v4/public/r/styles/base-maia/calendar-example.json
index eb4e933f10..6e5456d29d 100644
--- a/apps/v4/public/r/styles/base-maia/calendar-example.json
+++ b/apps/v4/public/r/styles/base-maia/calendar-example.json
@@ -15,7 +15,7 @@
"files": [
{
"path": "registry/base-maia/examples/calendar-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { addDays, format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { es } from \"react-day-picker/locale\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar, CalendarDayButton } from \"@/registry/bases/base/ui/calendar\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CalendarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarSingle() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarMultiple() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarRange() {\n const [dateRange, setDateRange] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 12),\n to: addDays(new Date(new Date().getFullYear(), 0, 12), 30),\n })\n\n return (\n \n \n \n \n date > new Date() || date < new Date(\"1900-01-01\")\n }\n />\n \n \n \n )\n}\n\nfunction CalendarRangeMultipleMonths() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 3, 12),\n to: addDays(new Date(new Date().getFullYear(), 3, 12), 60),\n })\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarBookedDates() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n const bookedDates = Array.from(\n { length: 15 },\n (_, i) => new Date(new Date().getFullYear(), 1, 12 + i)\n )\n\n return (\n \n \n \n button]:line-through opacity-100\",\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithTime() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n\n return (\n \n \n \n \n \n \n \n \n Start Time \n \n \n \n \n \n \n \n \n End Time \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarCustomDays() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 11, 8),\n to: addDays(new Date(new Date().getFullYear(), 11, 8), 10),\n })\n\n return (\n \n \n \n {\n return date.toLocaleString(\"default\", { month: \"long\" })\n },\n }}\n components={{\n DayButton: ({ children, modifiers, day, ...props }) => {\n const isWeekend =\n day.date.getDay() === 0 || day.date.getDay() === 6\n\n return (\n \n {children}\n {!modifiers.outside && (\n {isWeekend ? \"$120\" : \"$100\"} \n )}\n \n )\n },\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithPresets() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 12)\n )\n const [currentMonth, setCurrentMonth] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 1)\n )\n\n return (\n \n \n \n \n \n \n {[\n { label: \"Today\", value: 0 },\n { label: \"Tomorrow\", value: 1 },\n { label: \"In 3 days\", value: 3 },\n { label: \"In a week\", value: 7 },\n { label: \"In 2 weeks\", value: 14 },\n ].map((preset) => (\n {\n const newDate = addDays(new Date(), preset.value)\n setDate(newDate)\n setCurrentMonth(\n new Date(newDate.getFullYear(), newDate.getMonth(), 1)\n )\n }}\n >\n {preset.label}\n \n ))}\n \n \n \n )\n}\n\nfunction DatePickerSimple() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n Date \n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n \n \n \n )\n}\n\nfunction DatePickerWithRange() {\n const [date, setDate] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 20),\n to: addDays(new Date(new Date().getFullYear(), 0, 20), 20),\n })\n\n return (\n \n \n Date Picker Range \n \n \n }\n >\n \n {date?.from ? (\n date.to ? (\n <>\n {format(date.from, \"LLL dd, y\")} -{\" \"}\n {format(date.to, \"LLL dd, y\")}\n >\n ) : (\n format(date.from, \"LLL dd, y\")\n )\n ) : (\n Pick a date \n )}\n \n \n \n \n \n \n \n )\n}\n\nfunction DataPickerWithDropdowns() {\n const [date, setDate] = React.useState()\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n \n \n Date\n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n setOpen(false)}\n >\n Done\n \n
\n \n \n \n \n )\n}\n\nfunction CalendarWeekNumbers() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n\n return (\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { addDays, format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { es } from \"react-day-picker/locale\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar, CalendarDayButton } from \"@/registry/bases/base/ui/calendar\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CalendarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarSingle() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarMultiple() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarRange() {\n const [dateRange, setDateRange] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 12),\n to: addDays(new Date(new Date().getFullYear(), 0, 12), 30),\n })\n\n return (\n \n \n \n \n date > new Date() || date < new Date(\"1900-01-01\")\n }\n />\n \n \n \n )\n}\n\nfunction CalendarRangeMultipleMonths() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 3, 12),\n to: addDays(new Date(new Date().getFullYear(), 3, 12), 60),\n })\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarBookedDates() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n const bookedDates = Array.from(\n { length: 15 },\n (_, i) => new Date(new Date().getFullYear(), 1, 12 + i)\n )\n\n return (\n \n \n \n button]:line-through opacity-100\",\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithTime() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n\n return (\n \n \n \n \n \n \n \n \n Start Time \n \n \n \n \n \n \n \n \n End Time \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarCustomDays() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 11, 8),\n to: addDays(new Date(new Date().getFullYear(), 11, 8), 10),\n })\n\n return (\n \n \n \n {\n return date.toLocaleString(\"default\", { month: \"long\" })\n },\n }}\n components={{\n DayButton: ({ children, modifiers, day, ...props }) => {\n const isWeekend =\n day.date.getDay() === 0 || day.date.getDay() === 6\n\n return (\n \n {children}\n {!modifiers.outside && (\n {isWeekend ? \"$120\" : \"$100\"} \n )}\n \n )\n },\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithPresets() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 12)\n )\n const [currentMonth, setCurrentMonth] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 1)\n )\n\n return (\n \n \n \n \n \n \n {[\n { label: \"Today\", value: 0 },\n { label: \"Tomorrow\", value: 1 },\n { label: \"In 3 days\", value: 3 },\n { label: \"In a week\", value: 7 },\n { label: \"In 2 weeks\", value: 14 },\n ].map((preset) => (\n {\n const newDate = addDays(new Date(), preset.value)\n setDate(newDate)\n setCurrentMonth(\n new Date(newDate.getFullYear(), newDate.getMonth(), 1)\n )\n }}\n >\n {preset.label}\n \n ))}\n \n \n \n )\n}\n\nfunction DatePickerSimple() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n Date \n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n \n \n \n )\n}\n\nfunction DatePickerWithRange() {\n const [date, setDate] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 20),\n to: addDays(new Date(new Date().getFullYear(), 0, 20), 20),\n })\n\n return (\n \n \n Date Picker Range \n \n \n }\n >\n \n {date?.from ? (\n date.to ? (\n <>\n {format(date.from, \"LLL dd, y\")} -{\" \"}\n {format(date.to, \"LLL dd, y\")}\n >\n ) : (\n format(date.from, \"LLL dd, y\")\n )\n ) : (\n Pick a date \n )}\n \n \n \n \n \n \n \n )\n}\n\nfunction DataPickerWithDropdowns() {\n const [date, setDate] = React.useState()\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n \n \n Date\n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n setOpen(false)}\n >\n Done\n \n
\n \n \n \n \n )\n}\n\nfunction CalendarWeekNumbers() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n\n return (\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/calendar.json b/apps/v4/public/r/styles/base-maia/calendar.json
index 683def6a7c..090cd463cd 100644
--- a/apps/v4/public/r/styles/base-maia/calendar.json
+++ b/apps/v4/public/r/styles/base-maia/calendar.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/ui/calendar.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button, buttonVariants } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps & {\n buttonVariant?: React.ComponentProps[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative cn-calendar-dropdown-root rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"cn-calendar-caption-label rounded-(--cell-radius) flex items-center gap-1 text-sm [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-(--cell-radius) bg-muted elative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:right-0 -z-0 isolate\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"rounded-r-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:left-0 -z-0 isolate\",\n defaultClassNames.range_end\n ),\n today: cn(\n \"bg-muted text-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n
\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n \n )\n }\n\n if (orientation === \"right\") {\n return (\n \n )\n }\n\n return (\n \n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n \n \n {children}\n
\n \n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button, buttonVariants } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps & {\n buttonVariant?: React.ComponentProps[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative cn-calendar-dropdown-root rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"cn-calendar-caption-label rounded-(--cell-radius) flex items-center gap-1 text-sm [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-(--cell-radius) bg-muted elative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:right-0 -z-0 isolate\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"rounded-r-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:left-0 -z-0 isolate\",\n defaultClassNames.range_end\n ),\n today: cn(\n \"bg-muted text-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n
\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n \n )\n }\n\n if (orientation === \"right\") {\n return (\n \n )\n }\n\n return (\n \n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n \n \n {children}\n
\n \n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/card-example.json b/apps/v4/public/r/styles/base-maia/card-example.json
index 581d2a8665..db4f3ff1b7 100644
--- a/apps/v4/public/r/styles/base-maia/card-example.json
+++ b/apps/v4/public/r/styles/base-maia/card-example.json
@@ -13,7 +13,7 @@
"files": [
{
"path": "registry/base-maia/examples/card-example.tsx",
- "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CardExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CardLogin() {\n return (\n \n \n \n Login to your account \n \n Enter your email below to login to your account\n \n \n \n \n \n \n Email \n \n \n \n \n \n \n \n \n \n \n \n Login\n \n \n Login with Google\n \n \n \n \n \n )\n}\n\nfunction CardMeetingNotes() {\n return (\n \n \n \n Meeting Notes \n \n Transcript from the meeting with the client.\n \n \n \n \n Transcribe\n \n \n \n \n \n Client requested dashboard redesign with focus on mobile\n responsiveness.\n
\n \n New analytics widgets for daily/weekly metrics \n Simplified navigation menu \n Dark mode support \n Timeline: 6 weeks \n Follow-up meeting scheduled for next Tuesday \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +8 \n \n \n \n \n )\n}\n\nfunction CardWithImage() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardWithImageSmall() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorder() {\n return (\n \n \n \n Header with Border \n \n This is a card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorder() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n\nfunction CardDefault() {\n return (\n \n \n \n Default Card \n \n This card uses the default size variant.\n \n \n \n \n The card component supports a size prop that defaults to\n "default" for standard spacing and sizing.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardSmall() {\n return (\n \n \n \n Small Card \n \n This card uses the small size variant.\n \n \n \n \n The card component supports a size prop that can be set to\n "sm" for a more compact appearance.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorderSmall() {\n return (\n \n \n \n Header with Border \n \n This is a small card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorderSmall() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n",
+ "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CardExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CardLogin() {\n return (\n \n \n \n Login to your account \n \n Enter your email below to login to your account\n \n \n \n \n \n \n Email \n \n \n \n \n \n \n \n \n \n \n \n Login\n \n \n Login with Google\n \n \n \n \n \n )\n}\n\nfunction CardMeetingNotes() {\n return (\n \n \n \n Meeting Notes \n \n Transcript from the meeting with the client.\n \n \n \n \n Transcribe\n \n \n \n \n \n Client requested dashboard redesign with focus on mobile\n responsiveness.\n
\n \n New analytics widgets for daily/weekly metrics \n Simplified navigation menu \n Dark mode support \n Timeline: 6 weeks \n Follow-up meeting scheduled for next Tuesday \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +8 \n \n \n \n \n )\n}\n\nfunction CardWithImage() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardWithImageSmall() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorder() {\n return (\n \n \n \n Header with Border \n \n This is a card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorder() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n\nfunction CardDefault() {\n return (\n \n \n \n Default Card \n \n This card uses the default size variant.\n \n \n \n \n The card component supports a size prop that defaults to\n "default" for standard spacing and sizing.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardSmall() {\n return (\n \n \n \n Small Card \n \n This card uses the small size variant.\n \n \n \n \n The card component supports a size prop that can be set to\n "sm" for a more compact appearance.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorderSmall() {\n return (\n \n \n \n Header with Border \n \n This is a small card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorderSmall() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/carousel.json b/apps/v4/public/r/styles/base-maia/carousel.json
index 200ff0f02f..9223cb0b55 100644
--- a/apps/v4/public/r/styles/base-maia/carousel.json
+++ b/apps/v4/public/r/styles/base-maia/carousel.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-maia/ui/carousel.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType[0]\n api: ReturnType[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a \")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n \n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n
\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n \n \n Previous slide \n \n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n \n \n Next slide \n \n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType[0]\n api: ReturnType[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a \")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n \n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n
\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n \n \n Previous slide \n \n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n \n \n Next slide \n \n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/chart-example.json b/apps/v4/public/r/styles/base-maia/chart-example.json
index 362597cd61..2c3fb0a6fe 100644
--- a/apps/v4/public/r/styles/base-maia/chart-example.json
+++ b/apps/v4/public/r/styles/base-maia/chart-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-maia/examples/chart-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n Line,\n LineChart,\n Pie,\n PieChart,\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart,\n RadialBar,\n RadialBarChart,\n XAxis,\n} from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst areaChartData = [\n { month: \"January\", desktop: 186 },\n { month: \"February\", desktop: 305 },\n { month: \"March\", desktop: 237 },\n { month: \"April\", desktop: 73 },\n { month: \"May\", desktop: 209 },\n { month: \"June\", desktop: 214 },\n]\n\nconst areaChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nexport default function ChartExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction ChartAreaExample() {\n return (\n \n \n \n Area Chart \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n January - June 2024\n
\n
\n
\n \n \n \n )\n}\n\nconst barChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst barChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartBarExample() {\n return (\n \n \n \n Bar Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst lineChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst lineChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartLineExample() {\n return (\n \n \n \n Line Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n Showing total visitors for the last 6 months\n
\n
\n
\n \n \n \n )\n}\n\nconst pieChartData = [\n { browser: \"chrome\", visitors: 275, fill: \"var(--color-chrome)\" },\n { browser: \"safari\", visitors: 200, fill: \"var(--color-safari)\" },\n { browser: \"firefox\", visitors: 287, fill: \"var(--color-firefox)\" },\n { browser: \"edge\", visitors: 173, fill: \"var(--color-edge)\" },\n { browser: \"other\", visitors: 190, fill: \"var(--color-other)\" },\n]\n\nconst pieChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n chrome: {\n label: \"Chrome\",\n color: \"var(--chart-1)\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n firefox: {\n label: \"Firefox\",\n color: \"var(--chart-3)\",\n },\n edge: {\n label: \"Edge\",\n color: \"var(--chart-4)\",\n },\n other: {\n label: \"Other\",\n color: \"var(--chart-5)\",\n },\n} satisfies ChartConfig\n\nfunction ChartPieExample() {\n const totalVisitors = React.useMemo(() => {\n return pieChartData.reduce((acc, curr) => acc + curr.visitors, 0)\n }, [])\n\n return (\n \n \n \n Pie Chart - Donut with Text \n January - June 2024 \n \n \n \n \n }\n />\n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {totalVisitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst radarChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst radarChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadarExample() {\n return (\n \n \n \n Radar Chart - Multiple \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n }\n />\n \n \n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n January - June 2024\n
\n \n \n \n )\n}\n\nconst radialChartData = [\n { browser: \"safari\", visitors: 1260, fill: \"var(--color-safari)\" },\n]\n\nconst radialChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadialExample() {\n return (\n \n \n \n Radial Chart - Shape \n January - June 2024 \n \n \n \n \n \n \n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {radialChartData[0].visitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n Line,\n LineChart,\n Pie,\n PieChart,\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart,\n RadialBar,\n RadialBarChart,\n XAxis,\n} from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst areaChartData = [\n { month: \"January\", desktop: 186 },\n { month: \"February\", desktop: 305 },\n { month: \"March\", desktop: 237 },\n { month: \"April\", desktop: 73 },\n { month: \"May\", desktop: 209 },\n { month: \"June\", desktop: 214 },\n]\n\nconst areaChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nexport default function ChartExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction ChartAreaExample() {\n return (\n \n \n \n Area Chart \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n January - June 2024\n
\n
\n
\n \n \n \n )\n}\n\nconst barChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst barChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartBarExample() {\n return (\n \n \n \n Bar Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst lineChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst lineChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartLineExample() {\n return (\n \n \n \n Line Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n Showing total visitors for the last 6 months\n
\n
\n
\n \n \n \n )\n}\n\nconst pieChartData = [\n { browser: \"chrome\", visitors: 275, fill: \"var(--color-chrome)\" },\n { browser: \"safari\", visitors: 200, fill: \"var(--color-safari)\" },\n { browser: \"firefox\", visitors: 287, fill: \"var(--color-firefox)\" },\n { browser: \"edge\", visitors: 173, fill: \"var(--color-edge)\" },\n { browser: \"other\", visitors: 190, fill: \"var(--color-other)\" },\n]\n\nconst pieChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n chrome: {\n label: \"Chrome\",\n color: \"var(--chart-1)\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n firefox: {\n label: \"Firefox\",\n color: \"var(--chart-3)\",\n },\n edge: {\n label: \"Edge\",\n color: \"var(--chart-4)\",\n },\n other: {\n label: \"Other\",\n color: \"var(--chart-5)\",\n },\n} satisfies ChartConfig\n\nfunction ChartPieExample() {\n const totalVisitors = React.useMemo(() => {\n return pieChartData.reduce((acc, curr) => acc + curr.visitors, 0)\n }, [])\n\n return (\n \n \n \n Pie Chart - Donut with Text \n January - June 2024 \n \n \n \n \n }\n />\n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {totalVisitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst radarChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst radarChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadarExample() {\n return (\n \n \n \n Radar Chart - Multiple \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n }\n />\n \n \n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n January - June 2024\n
\n \n \n \n )\n}\n\nconst radialChartData = [\n { browser: \"safari\", visitors: 1260, fill: \"var(--color-safari)\" },\n]\n\nconst radialChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadialExample() {\n return (\n \n \n \n Radial Chart - Shape \n January - June 2024 \n \n \n \n \n \n \n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {radialChartData[0].visitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/chatgpt.json b/apps/v4/public/r/styles/base-maia/chatgpt.json
index 0fd29fa734..9307657655 100644
--- a/apps/v4/public/r/styles/base-maia/chatgpt.json
+++ b/apps/v4/public/r/styles/base-maia/chatgpt.json
@@ -20,7 +20,7 @@
"files": [
{
"path": "registry/base-maia/blocks/chatgpt.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ChatGPTBlock() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction PromptForm() {\n const [dictateEnabled, setDictateEnabled] = React.useState(false)\n\n return (\n \n \n \n Prompt\n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"rounded-4xl\"\n />\n }\n />\n }\n >\n \n \n \n Add files and more / \n \n \n \n \n \n \n Add photos & files\n \n \n \n Deep research\n \n \n \n Shopping research\n \n \n \n Create image\n \n \n \n \n Agent mode\n \n }\n />\n \n 35 left
\n \n More available for purchase\n
\n \n \n \n \n \n \n More\n \n \n \n \n \n \n Add sources\n \n \n \n Study and learn\n \n \n \n Web search\n \n \n \n Canvas\n \n \n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"ml-auto rounded-4xl\"\n />\n }\n >\n \n \n Dictate \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ModelSelector() {\n const [mode, setMode] = React.useState(\"auto\")\n const [model, setModel] = React.useState(\"gpt-5.1\")\n\n return (\n \n \n }\n >\n ChatGPT 5.1\n \n \n \n \n \n GPT-5.1\n \n \n \n - \n
\n Auto \n \n Decides how long to think\n \n \n \n \n \n - \n
\n Instant \n \n Answers right away\n \n \n \n \n \n - \n
\n Thinking \n \n Thinks longer for better answers\n \n \n \n \n \n \n \n \n \n Legacy models \n \n \n \n \n \n \n GPT-4\n \n \n GPT-4 Turbo\n \n \n GPT-3.5\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction GroupChatDialog() {\n return (\n \n \n }>\n Start Group Chat\n \n \n \n Use ChatGPT together \n \n Add people to your chats to plan, share ideas, and get creative.\n \n \n \n \n Learn more\n \n \n
Cancel \n
Start group chat \n
\n \n \n \n \n )\n}\n\nconst categories = [\n {\n id: \"homework\",\n label: \"Homework\",\n },\n {\n id: \"writing\",\n label: \"Writing\",\n },\n {\n id: \"health\",\n label: \"Health\",\n },\n {\n id: \"travel\",\n label: \"Travel\",\n },\n]\n\nfunction CreateProjectForm() {\n const [projectName, setProjectName] = React.useState(\"\")\n const [selectedCategory, setSelectedCategory] = React.useState(\n categories[0].id\n )\n const [memorySetting, setMemorySetting] = React.useState<\n \"default\" | \"project-only\"\n >(\"default\")\n const [selectedColor, setSelectedColor] = React.useState(\n \"var(--foreground)\"\n )\n\n return (\n \n \n \n Create Project \n \n Start a new project to keep chats, files, and custom instructions in\n one place.\n \n \n \n }\n >\n \n Memory \n \n \n \n {\n setMemorySetting(value as \"default\" | \"project-only\")\n }}\n >\n \n - \n
\n Default \n \n Project can access memories from outside chats, and\n vice versa.\n \n \n \n \n \n - \n
\n Project Only \n \n Project can only access its own memories. Its\n memories are hidden from outside chats.\n \n \n \n \n \n \n \n \n \n Note that this setting can't be changed later.\n \n \n \n \n \n \n \n \n \n \n Project Name\n \n \n {\n setProjectName(e.target.value)\n }}\n />\n \n \n \n }\n >\n \n \n \n \n {[\n \"var(--foreground)\",\n \"#fa423e\",\n \"#f59e0b\",\n \"#8b5cf6\",\n \"#ec4899\",\n \"#10b981\",\n \"#6366f1\",\n \"#14b8a6\",\n \"#f97316\",\n \"#fbbc04\",\n ].map((color) => (\n {\n setSelectedColor(color)\n }}\n >\n \n {color} \n \n ))}\n
\n \n \n \n \n \n {categories.map((category) => (\n {\n setSelectedCategory(\n selectedCategory === category.id\n ? null\n : category.id\n )\n }}\n />\n }\n >\n \n {category.label}\n \n ))}\n \n \n \n \n \n \n Projects keep chats, files, and custom instructions in one\n place. Use them for ongoing work, or just to keep things tidy.\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ChatGPTBlock() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction PromptForm() {\n const [dictateEnabled, setDictateEnabled] = React.useState(false)\n\n return (\n \n \n \n Prompt\n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"rounded-4xl\"\n />\n }\n />\n }\n >\n \n \n \n Add files and more / \n \n \n \n \n \n \n Add photos & files\n \n \n \n Deep research\n \n \n \n Shopping research\n \n \n \n Create image\n \n \n \n \n Agent mode\n \n }\n />\n \n 35 left
\n \n More available for purchase\n
\n \n \n \n \n \n \n More\n \n \n \n \n \n \n Add sources\n \n \n \n Study and learn\n \n \n \n Web search\n \n \n \n Canvas\n \n \n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"ml-auto rounded-4xl\"\n />\n }\n >\n \n \n Dictate \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ModelSelector() {\n const [mode, setMode] = React.useState(\"auto\")\n const [model, setModel] = React.useState(\"gpt-5.1\")\n\n return (\n \n \n }\n >\n ChatGPT 5.1\n \n \n \n \n \n GPT-5.1\n \n \n \n - \n
\n Auto \n \n Decides how long to think\n \n \n \n \n \n - \n
\n Instant \n \n Answers right away\n \n \n \n \n \n - \n
\n Thinking \n \n Thinks longer for better answers\n \n \n \n \n \n \n \n \n \n Legacy models \n \n \n \n \n \n \n GPT-4\n \n \n GPT-4 Turbo\n \n \n GPT-3.5\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction GroupChatDialog() {\n return (\n \n \n }>\n Start Group Chat\n \n \n \n Use ChatGPT together \n \n Add people to your chats to plan, share ideas, and get creative.\n \n \n \n \n Learn more\n \n \n
Cancel \n
Start group chat \n
\n \n \n \n \n )\n}\n\nconst categories = [\n {\n id: \"homework\",\n label: \"Homework\",\n },\n {\n id: \"writing\",\n label: \"Writing\",\n },\n {\n id: \"health\",\n label: \"Health\",\n },\n {\n id: \"travel\",\n label: \"Travel\",\n },\n]\n\nfunction CreateProjectForm() {\n const [projectName, setProjectName] = React.useState(\"\")\n const [selectedCategory, setSelectedCategory] = React.useState(\n categories[0].id\n )\n const [memorySetting, setMemorySetting] = React.useState<\n \"default\" | \"project-only\"\n >(\"default\")\n const [selectedColor, setSelectedColor] = React.useState(\n \"var(--foreground)\"\n )\n\n return (\n \n \n \n Create Project \n \n Start a new project to keep chats, files, and custom instructions in\n one place.\n \n \n \n }\n >\n \n Memory \n \n \n \n {\n setMemorySetting(value as \"default\" | \"project-only\")\n }}\n >\n \n - \n
\n Default \n \n Project can access memories from outside chats, and\n vice versa.\n \n \n \n \n \n - \n
\n Project Only \n \n Project can only access its own memories. Its\n memories are hidden from outside chats.\n \n \n \n \n \n \n \n \n \n Note that this setting can't be changed later.\n \n \n \n \n \n \n \n \n \n \n Project Name\n \n \n {\n setProjectName(e.target.value)\n }}\n />\n \n \n \n }\n >\n \n \n \n \n {[\n \"var(--foreground)\",\n \"#fa423e\",\n \"#f59e0b\",\n \"#8b5cf6\",\n \"#ec4899\",\n \"#10b981\",\n \"#6366f1\",\n \"#14b8a6\",\n \"#f97316\",\n \"#fbbc04\",\n ].map((color) => (\n {\n setSelectedColor(color)\n }}\n >\n \n {color} \n \n ))}\n
\n \n \n \n \n \n {categories.map((category) => (\n {\n setSelectedCategory(\n selectedCategory === category.id\n ? null\n : category.id\n )\n }}\n />\n }\n >\n \n {category.label}\n \n ))}\n \n \n \n \n \n \n Projects keep chats, files, and custom instructions in one\n place. Use them for ongoing work, or just to keep things tidy.\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/checkbox.json b/apps/v4/public/r/styles/base-maia/checkbox.json
index 6372170f89..ecf1e92009 100644
--- a/apps/v4/public/r/styles/base-maia/checkbox.json
+++ b/apps/v4/public/r/styles/base-maia/checkbox.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/checkbox.tsx",
- "content": "\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {\n return (\n \n svg]:size-3.5 grid place-content-center text-current transition-none\"\n >\n \n \n \n )\n}\n\nexport { Checkbox }\n",
+ "content": "\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {\n return (\n \n svg]:size-3.5 grid place-content-center text-current transition-none\"\n >\n \n \n \n )\n}\n\nexport { Checkbox }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/collapsible-example.json b/apps/v4/public/r/styles/base-maia/collapsible-example.json
index ae0009b549..1ab8d6c827 100644
--- a/apps/v4/public/r/styles/base-maia/collapsible-example.json
+++ b/apps/v4/public/r/styles/base-maia/collapsible-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-maia/examples/collapsible-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CollapsibleExample() {\n return (\n \n \n \n \n )\n}\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nfunction CollapsibleFileTree() {\n const fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [\n { name: \"favicon.ico\" },\n { name: \"logo.svg\" },\n { name: \"images\" },\n ],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n ]\n\n const renderItem = (fileItem: FileTreeItem) => {\n if (\"items\" in fileItem) {\n return (\n \n \n }\n >\n \n \n {fileItem.name}\n \n \n \n {fileItem.items.map((child) => renderItem(child))}\n
\n \n \n )\n }\n return (\n \n \n {fileItem.name} \n \n )\n }\n\n return (\n \n \n \n \n \n Explorer \n Outline \n \n \n \n \n \n {fileTree.map((item) => renderItem(item))}\n
\n \n \n \n )\n}\n\nfunction CollapsibleSettings() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n \n Radius \n \n Set the corner radius of the element.\n \n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n }\n >\n {isOpen ? (\n \n ) : (\n \n )}\n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CollapsibleExample() {\n return (\n \n \n \n \n )\n}\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nfunction CollapsibleFileTree() {\n const fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [\n { name: \"favicon.ico\" },\n { name: \"logo.svg\" },\n { name: \"images\" },\n ],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n ]\n\n const renderItem = (fileItem: FileTreeItem) => {\n if (\"items\" in fileItem) {\n return (\n \n \n }\n >\n \n \n {fileItem.name}\n \n \n \n {fileItem.items.map((child) => renderItem(child))}\n
\n \n \n )\n }\n return (\n \n \n {fileItem.name} \n \n )\n }\n\n return (\n \n \n \n \n \n Explorer \n Outline \n \n \n \n \n \n {fileTree.map((item) => renderItem(item))}\n
\n \n \n \n )\n}\n\nfunction CollapsibleSettings() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n \n Radius \n \n Set the corner radius of the element.\n \n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n }\n >\n {isOpen ? (\n \n ) : (\n \n )}\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/combobox-example.json b/apps/v4/public/r/styles/base-maia/combobox-example.json
index 80c30c741d..b0f5c4d32e 100644
--- a/apps/v4/public/r/styles/base-maia/combobox-example.json
+++ b/apps/v4/public/r/styles/base-maia/combobox-example.json
@@ -17,7 +17,7 @@
"files": [
{
"path": "registry/base-maia/examples/combobox-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxCollection,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxInput,\n ComboboxItem,\n ComboboxLabel,\n ComboboxList,\n ComboboxSeparator,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ComboboxExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst countries = [\n { code: \"\", value: \"\", continent: \"\", label: \"Select country\" },\n { code: \"af\", value: \"afghanistan\", label: \"Afghanistan\", continent: \"Asia\" },\n { code: \"al\", value: \"albania\", label: \"Albania\", continent: \"Europe\" },\n { code: \"dz\", value: \"algeria\", label: \"Algeria\", continent: \"Africa\" },\n { code: \"ad\", value: \"andorra\", label: \"Andorra\", continent: \"Europe\" },\n { code: \"ao\", value: \"angola\", label: \"Angola\", continent: \"Africa\" },\n {\n code: \"ar\",\n value: \"argentina\",\n label: \"Argentina\",\n continent: \"South America\",\n },\n { code: \"am\", value: \"armenia\", label: \"Armenia\", continent: \"Asia\" },\n { code: \"au\", value: \"australia\", label: \"Australia\", continent: \"Oceania\" },\n { code: \"at\", value: \"austria\", label: \"Austria\", continent: \"Europe\" },\n { code: \"az\", value: \"azerbaijan\", label: \"Azerbaijan\", continent: \"Asia\" },\n {\n code: \"bs\",\n value: \"bahamas\",\n label: \"Bahamas\",\n continent: \"North America\",\n },\n { code: \"bh\", value: \"bahrain\", label: \"Bahrain\", continent: \"Asia\" },\n { code: \"bd\", value: \"bangladesh\", label: \"Bangladesh\", continent: \"Asia\" },\n {\n code: \"bb\",\n value: \"barbados\",\n label: \"Barbados\",\n continent: \"North America\",\n },\n { code: \"by\", value: \"belarus\", label: \"Belarus\", continent: \"Europe\" },\n { code: \"be\", value: \"belgium\", label: \"Belgium\", continent: \"Europe\" },\n { code: \"bz\", value: \"belize\", label: \"Belize\", continent: \"North America\" },\n { code: \"bj\", value: \"benin\", label: \"Benin\", continent: \"Africa\" },\n { code: \"bt\", value: \"bhutan\", label: \"Bhutan\", continent: \"Asia\" },\n {\n code: \"bo\",\n value: \"bolivia\",\n label: \"Bolivia\",\n continent: \"South America\",\n },\n {\n code: \"ba\",\n value: \"bosnia-and-herzegovina\",\n label: \"Bosnia and Herzegovina\",\n continent: \"Europe\",\n },\n { code: \"bw\", value: \"botswana\", label: \"Botswana\", continent: \"Africa\" },\n { code: \"br\", value: \"brazil\", label: \"Brazil\", continent: \"South America\" },\n { code: \"bn\", value: \"brunei\", label: \"Brunei\", continent: \"Asia\" },\n { code: \"bg\", value: \"bulgaria\", label: \"Bulgaria\", continent: \"Europe\" },\n {\n code: \"bf\",\n value: \"burkina-faso\",\n label: \"Burkina Faso\",\n continent: \"Africa\",\n },\n { code: \"bi\", value: \"burundi\", label: \"Burundi\", continent: \"Africa\" },\n { code: \"kh\", value: \"cambodia\", label: \"Cambodia\", continent: \"Asia\" },\n { code: \"cm\", value: \"cameroon\", label: \"Cameroon\", continent: \"Africa\" },\n { code: \"ca\", value: \"canada\", label: \"Canada\", continent: \"North America\" },\n { code: \"cv\", value: \"cape-verde\", label: \"Cape Verde\", continent: \"Africa\" },\n {\n code: \"cf\",\n value: \"central-african-republic\",\n label: \"Central African Republic\",\n continent: \"Africa\",\n },\n { code: \"td\", value: \"chad\", label: \"Chad\", continent: \"Africa\" },\n { code: \"cl\", value: \"chile\", label: \"Chile\", continent: \"South America\" },\n { code: \"cn\", value: \"china\", label: \"China\", continent: \"Asia\" },\n {\n code: \"co\",\n value: \"colombia\",\n label: \"Colombia\",\n continent: \"South America\",\n },\n { code: \"km\", value: \"comoros\", label: \"Comoros\", continent: \"Africa\" },\n { code: \"cg\", value: \"congo\", label: \"Congo\", continent: \"Africa\" },\n {\n code: \"cr\",\n value: \"costa-rica\",\n label: \"Costa Rica\",\n continent: \"North America\",\n },\n { code: \"hr\", value: \"croatia\", label: \"Croatia\", continent: \"Europe\" },\n { code: \"cu\", value: \"cuba\", label: \"Cuba\", continent: \"North America\" },\n { code: \"cy\", value: \"cyprus\", label: \"Cyprus\", continent: \"Asia\" },\n {\n code: \"cz\",\n value: \"czech-republic\",\n label: \"Czech Republic\",\n continent: \"Europe\",\n },\n { code: \"dk\", value: \"denmark\", label: \"Denmark\", continent: \"Europe\" },\n { code: \"dj\", value: \"djibouti\", label: \"Djibouti\", continent: \"Africa\" },\n {\n code: \"dm\",\n value: \"dominica\",\n label: \"Dominica\",\n continent: \"North America\",\n },\n {\n code: \"do\",\n value: \"dominican-republic\",\n label: \"Dominican Republic\",\n continent: \"North America\",\n },\n {\n code: \"ec\",\n value: \"ecuador\",\n label: \"Ecuador\",\n continent: \"South America\",\n },\n { code: \"eg\", value: \"egypt\", label: \"Egypt\", continent: \"Africa\" },\n {\n code: \"sv\",\n value: \"el-salvador\",\n label: \"El Salvador\",\n continent: \"North America\",\n },\n {\n code: \"gq\",\n value: \"equatorial-guinea\",\n label: \"Equatorial Guinea\",\n continent: \"Africa\",\n },\n { code: \"er\", value: \"eritrea\", label: \"Eritrea\", continent: \"Africa\" },\n { code: \"ee\", value: \"estonia\", label: \"Estonia\", continent: \"Europe\" },\n { code: \"et\", value: \"ethiopia\", label: \"Ethiopia\", continent: \"Africa\" },\n { code: \"fj\", value: \"fiji\", label: \"Fiji\", continent: \"Oceania\" },\n { code: \"fi\", value: \"finland\", label: \"Finland\", continent: \"Europe\" },\n { code: \"fr\", value: \"france\", label: \"France\", continent: \"Europe\" },\n { code: \"ga\", value: \"gabon\", label: \"Gabon\", continent: \"Africa\" },\n { code: \"gm\", value: \"gambia\", label: \"Gambia\", continent: \"Africa\" },\n { code: \"ge\", value: \"georgia\", label: \"Georgia\", continent: \"Asia\" },\n { code: \"de\", value: \"germany\", label: \"Germany\", continent: \"Europe\" },\n { code: \"gh\", value: \"ghana\", label: \"Ghana\", continent: \"Africa\" },\n { code: \"gr\", value: \"greece\", label: \"Greece\", continent: \"Europe\" },\n {\n code: \"gd\",\n value: \"grenada\",\n label: \"Grenada\",\n continent: \"North America\",\n },\n {\n code: \"gt\",\n value: \"guatemala\",\n label: \"Guatemala\",\n continent: \"North America\",\n },\n { code: \"gn\", value: \"guinea\", label: \"Guinea\", continent: \"Africa\" },\n {\n code: \"gw\",\n value: \"guinea-bissau\",\n label: \"Guinea-Bissau\",\n continent: \"Africa\",\n },\n { code: \"gy\", value: \"guyana\", label: \"Guyana\", continent: \"South America\" },\n { code: \"ht\", value: \"haiti\", label: \"Haiti\", continent: \"North America\" },\n {\n code: \"hn\",\n value: \"honduras\",\n label: \"Honduras\",\n continent: \"North America\",\n },\n { code: \"hu\", value: \"hungary\", label: \"Hungary\", continent: \"Europe\" },\n { code: \"is\", value: \"iceland\", label: \"Iceland\", continent: \"Europe\" },\n { code: \"in\", value: \"india\", label: \"India\", continent: \"Asia\" },\n { code: \"id\", value: \"indonesia\", label: \"Indonesia\", continent: \"Asia\" },\n { code: \"ir\", value: \"iran\", label: \"Iran\", continent: \"Asia\" },\n { code: \"iq\", value: \"iraq\", label: \"Iraq\", continent: \"Asia\" },\n { code: \"ie\", value: \"ireland\", label: \"Ireland\", continent: \"Europe\" },\n { code: \"il\", value: \"israel\", label: \"Israel\", continent: \"Asia\" },\n { code: \"it\", value: \"italy\", label: \"Italy\", continent: \"Europe\" },\n {\n code: \"jm\",\n value: \"jamaica\",\n label: \"Jamaica\",\n continent: \"North America\",\n },\n { code: \"jp\", value: \"japan\", label: \"Japan\", continent: \"Asia\" },\n { code: \"jo\", value: \"jordan\", label: \"Jordan\", continent: \"Asia\" },\n { code: \"kz\", value: \"kazakhstan\", label: \"Kazakhstan\", continent: \"Asia\" },\n { code: \"ke\", value: \"kenya\", label: \"Kenya\", continent: \"Africa\" },\n { code: \"kw\", value: \"kuwait\", label: \"Kuwait\", continent: \"Asia\" },\n { code: \"kg\", value: \"kyrgyzstan\", label: \"Kyrgyzstan\", continent: \"Asia\" },\n { code: \"la\", value: \"laos\", label: \"Laos\", continent: \"Asia\" },\n { code: \"lv\", value: \"latvia\", label: \"Latvia\", continent: \"Europe\" },\n { code: \"lb\", value: \"lebanon\", label: \"Lebanon\", continent: \"Asia\" },\n { code: \"ls\", value: \"lesotho\", label: \"Lesotho\", continent: \"Africa\" },\n { code: \"lr\", value: \"liberia\", label: \"Liberia\", continent: \"Africa\" },\n { code: \"ly\", value: \"libya\", label: \"Libya\", continent: \"Africa\" },\n {\n code: \"li\",\n value: \"liechtenstein\",\n label: \"Liechtenstein\",\n continent: \"Europe\",\n },\n { code: \"lt\", value: \"lithuania\", label: \"Lithuania\", continent: \"Europe\" },\n { code: \"lu\", value: \"luxembourg\", label: \"Luxembourg\", continent: \"Europe\" },\n { code: \"mg\", value: \"madagascar\", label: \"Madagascar\", continent: \"Africa\" },\n { code: \"mw\", value: \"malawi\", label: \"Malawi\", continent: \"Africa\" },\n { code: \"my\", value: \"malaysia\", label: \"Malaysia\", continent: \"Asia\" },\n { code: \"mv\", value: \"maldives\", label: \"Maldives\", continent: \"Asia\" },\n { code: \"ml\", value: \"mali\", label: \"Mali\", continent: \"Africa\" },\n { code: \"mt\", value: \"malta\", label: \"Malta\", continent: \"Europe\" },\n {\n code: \"mh\",\n value: \"marshall-islands\",\n label: \"Marshall Islands\",\n continent: \"Oceania\",\n },\n { code: \"mr\", value: \"mauritania\", label: \"Mauritania\", continent: \"Africa\" },\n { code: \"mu\", value: \"mauritius\", label: \"Mauritius\", continent: \"Africa\" },\n { code: \"mx\", value: \"mexico\", label: \"Mexico\", continent: \"North America\" },\n {\n code: \"fm\",\n value: \"micronesia\",\n label: \"Micronesia\",\n continent: \"Oceania\",\n },\n { code: \"md\", value: \"moldova\", label: \"Moldova\", continent: \"Europe\" },\n { code: \"mc\", value: \"monaco\", label: \"Monaco\", continent: \"Europe\" },\n { code: \"mn\", value: \"mongolia\", label: \"Mongolia\", continent: \"Asia\" },\n { code: \"me\", value: \"montenegro\", label: \"Montenegro\", continent: \"Europe\" },\n { code: \"ma\", value: \"morocco\", label: \"Morocco\", continent: \"Africa\" },\n { code: \"mz\", value: \"mozambique\", label: \"Mozambique\", continent: \"Africa\" },\n { code: \"mm\", value: \"myanmar\", label: \"Myanmar\", continent: \"Asia\" },\n { code: \"na\", value: \"namibia\", label: \"Namibia\", continent: \"Africa\" },\n { code: \"nr\", value: \"nauru\", label: \"Nauru\", continent: \"Oceania\" },\n { code: \"np\", value: \"nepal\", label: \"Nepal\", continent: \"Asia\" },\n {\n code: \"nl\",\n value: \"netherlands\",\n label: \"Netherlands\",\n continent: \"Europe\",\n },\n {\n code: \"nz\",\n value: \"new-zealand\",\n label: \"New Zealand\",\n continent: \"Oceania\",\n },\n {\n code: \"ni\",\n value: \"nicaragua\",\n label: \"Nicaragua\",\n continent: \"North America\",\n },\n { code: \"ne\", value: \"niger\", label: \"Niger\", continent: \"Africa\" },\n { code: \"ng\", value: \"nigeria\", label: \"Nigeria\", continent: \"Africa\" },\n { code: \"kp\", value: \"north-korea\", label: \"North Korea\", continent: \"Asia\" },\n {\n code: \"mk\",\n value: \"north-macedonia\",\n label: \"North Macedonia\",\n continent: \"Europe\",\n },\n { code: \"no\", value: \"norway\", label: \"Norway\", continent: \"Europe\" },\n { code: \"om\", value: \"oman\", label: \"Oman\", continent: \"Asia\" },\n { code: \"pk\", value: \"pakistan\", label: \"Pakistan\", continent: \"Asia\" },\n { code: \"pw\", value: \"palau\", label: \"Palau\", continent: \"Oceania\" },\n { code: \"ps\", value: \"palestine\", label: \"Palestine\", continent: \"Asia\" },\n { code: \"pa\", value: \"panama\", label: \"Panama\", continent: \"North America\" },\n {\n code: \"pg\",\n value: \"papua-new-guinea\",\n label: \"Papua New Guinea\",\n continent: \"Oceania\",\n },\n {\n code: \"py\",\n value: \"paraguay\",\n label: \"Paraguay\",\n continent: \"South America\",\n },\n { code: \"pe\", value: \"peru\", label: \"Peru\", continent: \"South America\" },\n { code: \"ph\", value: \"philippines\", label: \"Philippines\", continent: \"Asia\" },\n { code: \"pl\", value: \"poland\", label: \"Poland\", continent: \"Europe\" },\n { code: \"pt\", value: \"portugal\", label: \"Portugal\", continent: \"Europe\" },\n { code: \"qa\", value: \"qatar\", label: \"Qatar\", continent: \"Asia\" },\n { code: \"ro\", value: \"romania\", label: \"Romania\", continent: \"Europe\" },\n { code: \"ru\", value: \"russia\", label: \"Russia\", continent: \"Europe\" },\n { code: \"rw\", value: \"rwanda\", label: \"Rwanda\", continent: \"Africa\" },\n { code: \"ws\", value: \"samoa\", label: \"Samoa\", continent: \"Oceania\" },\n { code: \"sm\", value: \"san-marino\", label: \"San Marino\", continent: \"Europe\" },\n {\n code: \"sa\",\n value: \"saudi-arabia\",\n label: \"Saudi Arabia\",\n continent: \"Asia\",\n },\n { code: \"sn\", value: \"senegal\", label: \"Senegal\", continent: \"Africa\" },\n { code: \"rs\", value: \"serbia\", label: \"Serbia\", continent: \"Europe\" },\n { code: \"sc\", value: \"seychelles\", label: \"Seychelles\", continent: \"Africa\" },\n {\n code: \"sl\",\n value: \"sierra-leone\",\n label: \"Sierra Leone\",\n continent: \"Africa\",\n },\n { code: \"sg\", value: \"singapore\", label: \"Singapore\", continent: \"Asia\" },\n { code: \"sk\", value: \"slovakia\", label: \"Slovakia\", continent: \"Europe\" },\n { code: \"si\", value: \"slovenia\", label: \"Slovenia\", continent: \"Europe\" },\n {\n code: \"sb\",\n value: \"solomon-islands\",\n label: \"Solomon Islands\",\n continent: \"Oceania\",\n },\n { code: \"so\", value: \"somalia\", label: \"Somalia\", continent: \"Africa\" },\n {\n code: \"za\",\n value: \"south-africa\",\n label: \"South Africa\",\n continent: \"Africa\",\n },\n { code: \"kr\", value: \"south-korea\", label: \"South Korea\", continent: \"Asia\" },\n {\n code: \"ss\",\n value: \"south-sudan\",\n label: \"South Sudan\",\n continent: \"Africa\",\n },\n { code: \"es\", value: \"spain\", label: \"Spain\", continent: \"Europe\" },\n { code: \"lk\", value: \"sri-lanka\", label: \"Sri Lanka\", continent: \"Asia\" },\n { code: \"sd\", value: \"sudan\", label: \"Sudan\", continent: \"Africa\" },\n {\n code: \"sr\",\n value: \"suriname\",\n label: \"Suriname\",\n continent: \"South America\",\n },\n { code: \"se\", value: \"sweden\", label: \"Sweden\", continent: \"Europe\" },\n {\n code: \"ch\",\n value: \"switzerland\",\n label: \"Switzerland\",\n continent: \"Europe\",\n },\n { code: \"sy\", value: \"syria\", label: \"Syria\", continent: \"Asia\" },\n { code: \"tw\", value: \"taiwan\", label: \"Taiwan\", continent: \"Asia\" },\n { code: \"tj\", value: \"tajikistan\", label: \"Tajikistan\", continent: \"Asia\" },\n { code: \"tz\", value: \"tanzania\", label: \"Tanzania\", continent: \"Africa\" },\n { code: \"th\", value: \"thailand\", label: \"Thailand\", continent: \"Asia\" },\n { code: \"tl\", value: \"timor-leste\", label: \"Timor-Leste\", continent: \"Asia\" },\n { code: \"tg\", value: \"togo\", label: \"Togo\", continent: \"Africa\" },\n { code: \"to\", value: \"tonga\", label: \"Tonga\", continent: \"Oceania\" },\n {\n code: \"tt\",\n value: \"trinidad-and-tobago\",\n label: \"Trinidad and Tobago\",\n continent: \"North America\",\n },\n { code: \"tn\", value: \"tunisia\", label: \"Tunisia\", continent: \"Africa\" },\n { code: \"tr\", value: \"turkey\", label: \"Turkey\", continent: \"Asia\" },\n {\n code: \"tm\",\n value: \"turkmenistan\",\n label: \"Turkmenistan\",\n continent: \"Asia\",\n },\n { code: \"tv\", value: \"tuvalu\", label: \"Tuvalu\", continent: \"Oceania\" },\n { code: \"ug\", value: \"uganda\", label: \"Uganda\", continent: \"Africa\" },\n { code: \"ua\", value: \"ukraine\", label: \"Ukraine\", continent: \"Europe\" },\n {\n code: \"ae\",\n value: \"united-arab-emirates\",\n label: \"United Arab Emirates\",\n continent: \"Asia\",\n },\n {\n code: \"gb\",\n value: \"united-kingdom\",\n label: \"United Kingdom\",\n continent: \"Europe\",\n },\n {\n code: \"us\",\n value: \"united-states\",\n label: \"United States\",\n continent: \"North America\",\n },\n {\n code: \"uy\",\n value: \"uruguay\",\n label: \"Uruguay\",\n continent: \"South America\",\n },\n { code: \"uz\", value: \"uzbekistan\", label: \"Uzbekistan\", continent: \"Asia\" },\n { code: \"vu\", value: \"vanuatu\", label: \"Vanuatu\", continent: \"Oceania\" },\n {\n code: \"va\",\n value: \"vatican-city\",\n label: \"Vatican City\",\n continent: \"Europe\",\n },\n {\n code: \"ve\",\n value: \"venezuela\",\n label: \"Venezuela\",\n continent: \"South America\",\n },\n { code: \"vn\", value: \"vietnam\", label: \"Vietnam\", continent: \"Asia\" },\n { code: \"ye\", value: \"yemen\", label: \"Yemen\", continent: \"Asia\" },\n { code: \"zm\", value: \"zambia\", label: \"Zambia\", continent: \"Africa\" },\n { code: \"zw\", value: \"zimbabwe\", label: \"Zimbabwe\", continent: \"Africa\" },\n]\n\nconst timezones = [\n {\n value: \"Americas\",\n items: [\n \"(GMT-5) New York\",\n \"(GMT-8) Los Angeles\",\n \"(GMT-6) Chicago\",\n \"(GMT-5) Toronto\",\n \"(GMT-8) Vancouver\",\n \"(GMT-3) São Paulo\",\n ],\n },\n {\n value: \"Europe\",\n items: [\n \"(GMT+0) London\",\n \"(GMT+1) Paris\",\n \"(GMT+1) Berlin\",\n \"(GMT+1) Rome\",\n \"(GMT+1) Madrid\",\n \"(GMT+1) Amsterdam\",\n ],\n },\n {\n value: \"Asia/Pacific\",\n items: [\n \"(GMT+9) Tokyo\",\n \"(GMT+8) Shanghai\",\n \"(GMT+8) Singapore\",\n \"(GMT+4) Dubai\",\n \"(GMT+11) Sydney\",\n \"(GMT+9) Seoul\",\n ],\n },\n] as const\n\nfunction ComboboxBasic() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxDisabled() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInvalid() {\n return (\n \n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n Please select a valid framework. \n \n \n
\n \n )\n}\n\nfunction ComboboxWithClear() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroups() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroupsAndSeparator() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithForm() {\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n const formData = new FormData(event.target as HTMLFormElement)\n const framework = formData.get(\"framework\") as string\n toast(`You selected ${framework} as your framework.`)\n }\n\n return (\n \n \n \n \n \n \n Framework \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst largeListItems = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`)\n\nfunction ComboboxLargeList() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxAutoHighlight() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboxboxInputAddon() {\n return (\n \n \n \n \n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInPopup() {\n return (\n \n \n \n }\n >\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item.label}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultiple() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleDisabled() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleInvalid() {\n const anchor1 = useComboboxAnchor()\n const anchor2 = useComboboxAnchor()\n\n return (\n \n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Frameworks\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n Please select at least one framework.\n \n \n \n
\n \n )\n}\n\nfunction ComboboxMultipleNoRemove() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n \n {value}\n \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithCustomItems() {\n return (\n \n country.code !== \"\")}\n itemToStringValue={(country: (typeof countries)[number]) =>\n country.label\n }\n >\n \n \n No countries found. \n \n {(country) => (\n \n - \n
\n \n {country.label}\n \n \n {country.continent} ({country.code})\n \n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInDialog() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Framework \n \n Choose your preferred framework from the list below.\n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n setOpen(false)}\n >\n Cancel\n \n {\n toast(\"Framework selected.\")\n setOpen(false)\n }}\n >\n Confirm\n \n \n \n \n \n )\n}\n\nconst items = [\n {\n label: \"Select a framework\",\n value: null,\n },\n {\n label: \"React\",\n value: \"react\",\n },\n {\n label: \"Vue\",\n value: \"vue\",\n },\n {\n label: \"Angular\",\n value: \"angular\",\n },\n {\n label: \"Svelte\",\n value: \"svelte\",\n },\n {\n label: \"Solid\",\n value: \"solid\",\n },\n {\n label: \"Preact\",\n value: \"preact\",\n },\n {\n label: \"Next.js\",\n value: \"next.js\",\n },\n]\n\nfunction ComboboxWithOtherInputs() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Select a framework\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxCollection,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxInput,\n ComboboxItem,\n ComboboxLabel,\n ComboboxList,\n ComboboxSeparator,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ComboboxExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst countries = [\n { code: \"\", value: \"\", continent: \"\", label: \"Select country\" },\n { code: \"af\", value: \"afghanistan\", label: \"Afghanistan\", continent: \"Asia\" },\n { code: \"al\", value: \"albania\", label: \"Albania\", continent: \"Europe\" },\n { code: \"dz\", value: \"algeria\", label: \"Algeria\", continent: \"Africa\" },\n { code: \"ad\", value: \"andorra\", label: \"Andorra\", continent: \"Europe\" },\n { code: \"ao\", value: \"angola\", label: \"Angola\", continent: \"Africa\" },\n {\n code: \"ar\",\n value: \"argentina\",\n label: \"Argentina\",\n continent: \"South America\",\n },\n { code: \"am\", value: \"armenia\", label: \"Armenia\", continent: \"Asia\" },\n { code: \"au\", value: \"australia\", label: \"Australia\", continent: \"Oceania\" },\n { code: \"at\", value: \"austria\", label: \"Austria\", continent: \"Europe\" },\n { code: \"az\", value: \"azerbaijan\", label: \"Azerbaijan\", continent: \"Asia\" },\n {\n code: \"bs\",\n value: \"bahamas\",\n label: \"Bahamas\",\n continent: \"North America\",\n },\n { code: \"bh\", value: \"bahrain\", label: \"Bahrain\", continent: \"Asia\" },\n { code: \"bd\", value: \"bangladesh\", label: \"Bangladesh\", continent: \"Asia\" },\n {\n code: \"bb\",\n value: \"barbados\",\n label: \"Barbados\",\n continent: \"North America\",\n },\n { code: \"by\", value: \"belarus\", label: \"Belarus\", continent: \"Europe\" },\n { code: \"be\", value: \"belgium\", label: \"Belgium\", continent: \"Europe\" },\n { code: \"bz\", value: \"belize\", label: \"Belize\", continent: \"North America\" },\n { code: \"bj\", value: \"benin\", label: \"Benin\", continent: \"Africa\" },\n { code: \"bt\", value: \"bhutan\", label: \"Bhutan\", continent: \"Asia\" },\n {\n code: \"bo\",\n value: \"bolivia\",\n label: \"Bolivia\",\n continent: \"South America\",\n },\n {\n code: \"ba\",\n value: \"bosnia-and-herzegovina\",\n label: \"Bosnia and Herzegovina\",\n continent: \"Europe\",\n },\n { code: \"bw\", value: \"botswana\", label: \"Botswana\", continent: \"Africa\" },\n { code: \"br\", value: \"brazil\", label: \"Brazil\", continent: \"South America\" },\n { code: \"bn\", value: \"brunei\", label: \"Brunei\", continent: \"Asia\" },\n { code: \"bg\", value: \"bulgaria\", label: \"Bulgaria\", continent: \"Europe\" },\n {\n code: \"bf\",\n value: \"burkina-faso\",\n label: \"Burkina Faso\",\n continent: \"Africa\",\n },\n { code: \"bi\", value: \"burundi\", label: \"Burundi\", continent: \"Africa\" },\n { code: \"kh\", value: \"cambodia\", label: \"Cambodia\", continent: \"Asia\" },\n { code: \"cm\", value: \"cameroon\", label: \"Cameroon\", continent: \"Africa\" },\n { code: \"ca\", value: \"canada\", label: \"Canada\", continent: \"North America\" },\n { code: \"cv\", value: \"cape-verde\", label: \"Cape Verde\", continent: \"Africa\" },\n {\n code: \"cf\",\n value: \"central-african-republic\",\n label: \"Central African Republic\",\n continent: \"Africa\",\n },\n { code: \"td\", value: \"chad\", label: \"Chad\", continent: \"Africa\" },\n { code: \"cl\", value: \"chile\", label: \"Chile\", continent: \"South America\" },\n { code: \"cn\", value: \"china\", label: \"China\", continent: \"Asia\" },\n {\n code: \"co\",\n value: \"colombia\",\n label: \"Colombia\",\n continent: \"South America\",\n },\n { code: \"km\", value: \"comoros\", label: \"Comoros\", continent: \"Africa\" },\n { code: \"cg\", value: \"congo\", label: \"Congo\", continent: \"Africa\" },\n {\n code: \"cr\",\n value: \"costa-rica\",\n label: \"Costa Rica\",\n continent: \"North America\",\n },\n { code: \"hr\", value: \"croatia\", label: \"Croatia\", continent: \"Europe\" },\n { code: \"cu\", value: \"cuba\", label: \"Cuba\", continent: \"North America\" },\n { code: \"cy\", value: \"cyprus\", label: \"Cyprus\", continent: \"Asia\" },\n {\n code: \"cz\",\n value: \"czech-republic\",\n label: \"Czech Republic\",\n continent: \"Europe\",\n },\n { code: \"dk\", value: \"denmark\", label: \"Denmark\", continent: \"Europe\" },\n { code: \"dj\", value: \"djibouti\", label: \"Djibouti\", continent: \"Africa\" },\n {\n code: \"dm\",\n value: \"dominica\",\n label: \"Dominica\",\n continent: \"North America\",\n },\n {\n code: \"do\",\n value: \"dominican-republic\",\n label: \"Dominican Republic\",\n continent: \"North America\",\n },\n {\n code: \"ec\",\n value: \"ecuador\",\n label: \"Ecuador\",\n continent: \"South America\",\n },\n { code: \"eg\", value: \"egypt\", label: \"Egypt\", continent: \"Africa\" },\n {\n code: \"sv\",\n value: \"el-salvador\",\n label: \"El Salvador\",\n continent: \"North America\",\n },\n {\n code: \"gq\",\n value: \"equatorial-guinea\",\n label: \"Equatorial Guinea\",\n continent: \"Africa\",\n },\n { code: \"er\", value: \"eritrea\", label: \"Eritrea\", continent: \"Africa\" },\n { code: \"ee\", value: \"estonia\", label: \"Estonia\", continent: \"Europe\" },\n { code: \"et\", value: \"ethiopia\", label: \"Ethiopia\", continent: \"Africa\" },\n { code: \"fj\", value: \"fiji\", label: \"Fiji\", continent: \"Oceania\" },\n { code: \"fi\", value: \"finland\", label: \"Finland\", continent: \"Europe\" },\n { code: \"fr\", value: \"france\", label: \"France\", continent: \"Europe\" },\n { code: \"ga\", value: \"gabon\", label: \"Gabon\", continent: \"Africa\" },\n { code: \"gm\", value: \"gambia\", label: \"Gambia\", continent: \"Africa\" },\n { code: \"ge\", value: \"georgia\", label: \"Georgia\", continent: \"Asia\" },\n { code: \"de\", value: \"germany\", label: \"Germany\", continent: \"Europe\" },\n { code: \"gh\", value: \"ghana\", label: \"Ghana\", continent: \"Africa\" },\n { code: \"gr\", value: \"greece\", label: \"Greece\", continent: \"Europe\" },\n {\n code: \"gd\",\n value: \"grenada\",\n label: \"Grenada\",\n continent: \"North America\",\n },\n {\n code: \"gt\",\n value: \"guatemala\",\n label: \"Guatemala\",\n continent: \"North America\",\n },\n { code: \"gn\", value: \"guinea\", label: \"Guinea\", continent: \"Africa\" },\n {\n code: \"gw\",\n value: \"guinea-bissau\",\n label: \"Guinea-Bissau\",\n continent: \"Africa\",\n },\n { code: \"gy\", value: \"guyana\", label: \"Guyana\", continent: \"South America\" },\n { code: \"ht\", value: \"haiti\", label: \"Haiti\", continent: \"North America\" },\n {\n code: \"hn\",\n value: \"honduras\",\n label: \"Honduras\",\n continent: \"North America\",\n },\n { code: \"hu\", value: \"hungary\", label: \"Hungary\", continent: \"Europe\" },\n { code: \"is\", value: \"iceland\", label: \"Iceland\", continent: \"Europe\" },\n { code: \"in\", value: \"india\", label: \"India\", continent: \"Asia\" },\n { code: \"id\", value: \"indonesia\", label: \"Indonesia\", continent: \"Asia\" },\n { code: \"ir\", value: \"iran\", label: \"Iran\", continent: \"Asia\" },\n { code: \"iq\", value: \"iraq\", label: \"Iraq\", continent: \"Asia\" },\n { code: \"ie\", value: \"ireland\", label: \"Ireland\", continent: \"Europe\" },\n { code: \"il\", value: \"israel\", label: \"Israel\", continent: \"Asia\" },\n { code: \"it\", value: \"italy\", label: \"Italy\", continent: \"Europe\" },\n {\n code: \"jm\",\n value: \"jamaica\",\n label: \"Jamaica\",\n continent: \"North America\",\n },\n { code: \"jp\", value: \"japan\", label: \"Japan\", continent: \"Asia\" },\n { code: \"jo\", value: \"jordan\", label: \"Jordan\", continent: \"Asia\" },\n { code: \"kz\", value: \"kazakhstan\", label: \"Kazakhstan\", continent: \"Asia\" },\n { code: \"ke\", value: \"kenya\", label: \"Kenya\", continent: \"Africa\" },\n { code: \"kw\", value: \"kuwait\", label: \"Kuwait\", continent: \"Asia\" },\n { code: \"kg\", value: \"kyrgyzstan\", label: \"Kyrgyzstan\", continent: \"Asia\" },\n { code: \"la\", value: \"laos\", label: \"Laos\", continent: \"Asia\" },\n { code: \"lv\", value: \"latvia\", label: \"Latvia\", continent: \"Europe\" },\n { code: \"lb\", value: \"lebanon\", label: \"Lebanon\", continent: \"Asia\" },\n { code: \"ls\", value: \"lesotho\", label: \"Lesotho\", continent: \"Africa\" },\n { code: \"lr\", value: \"liberia\", label: \"Liberia\", continent: \"Africa\" },\n { code: \"ly\", value: \"libya\", label: \"Libya\", continent: \"Africa\" },\n {\n code: \"li\",\n value: \"liechtenstein\",\n label: \"Liechtenstein\",\n continent: \"Europe\",\n },\n { code: \"lt\", value: \"lithuania\", label: \"Lithuania\", continent: \"Europe\" },\n { code: \"lu\", value: \"luxembourg\", label: \"Luxembourg\", continent: \"Europe\" },\n { code: \"mg\", value: \"madagascar\", label: \"Madagascar\", continent: \"Africa\" },\n { code: \"mw\", value: \"malawi\", label: \"Malawi\", continent: \"Africa\" },\n { code: \"my\", value: \"malaysia\", label: \"Malaysia\", continent: \"Asia\" },\n { code: \"mv\", value: \"maldives\", label: \"Maldives\", continent: \"Asia\" },\n { code: \"ml\", value: \"mali\", label: \"Mali\", continent: \"Africa\" },\n { code: \"mt\", value: \"malta\", label: \"Malta\", continent: \"Europe\" },\n {\n code: \"mh\",\n value: \"marshall-islands\",\n label: \"Marshall Islands\",\n continent: \"Oceania\",\n },\n { code: \"mr\", value: \"mauritania\", label: \"Mauritania\", continent: \"Africa\" },\n { code: \"mu\", value: \"mauritius\", label: \"Mauritius\", continent: \"Africa\" },\n { code: \"mx\", value: \"mexico\", label: \"Mexico\", continent: \"North America\" },\n {\n code: \"fm\",\n value: \"micronesia\",\n label: \"Micronesia\",\n continent: \"Oceania\",\n },\n { code: \"md\", value: \"moldova\", label: \"Moldova\", continent: \"Europe\" },\n { code: \"mc\", value: \"monaco\", label: \"Monaco\", continent: \"Europe\" },\n { code: \"mn\", value: \"mongolia\", label: \"Mongolia\", continent: \"Asia\" },\n { code: \"me\", value: \"montenegro\", label: \"Montenegro\", continent: \"Europe\" },\n { code: \"ma\", value: \"morocco\", label: \"Morocco\", continent: \"Africa\" },\n { code: \"mz\", value: \"mozambique\", label: \"Mozambique\", continent: \"Africa\" },\n { code: \"mm\", value: \"myanmar\", label: \"Myanmar\", continent: \"Asia\" },\n { code: \"na\", value: \"namibia\", label: \"Namibia\", continent: \"Africa\" },\n { code: \"nr\", value: \"nauru\", label: \"Nauru\", continent: \"Oceania\" },\n { code: \"np\", value: \"nepal\", label: \"Nepal\", continent: \"Asia\" },\n {\n code: \"nl\",\n value: \"netherlands\",\n label: \"Netherlands\",\n continent: \"Europe\",\n },\n {\n code: \"nz\",\n value: \"new-zealand\",\n label: \"New Zealand\",\n continent: \"Oceania\",\n },\n {\n code: \"ni\",\n value: \"nicaragua\",\n label: \"Nicaragua\",\n continent: \"North America\",\n },\n { code: \"ne\", value: \"niger\", label: \"Niger\", continent: \"Africa\" },\n { code: \"ng\", value: \"nigeria\", label: \"Nigeria\", continent: \"Africa\" },\n { code: \"kp\", value: \"north-korea\", label: \"North Korea\", continent: \"Asia\" },\n {\n code: \"mk\",\n value: \"north-macedonia\",\n label: \"North Macedonia\",\n continent: \"Europe\",\n },\n { code: \"no\", value: \"norway\", label: \"Norway\", continent: \"Europe\" },\n { code: \"om\", value: \"oman\", label: \"Oman\", continent: \"Asia\" },\n { code: \"pk\", value: \"pakistan\", label: \"Pakistan\", continent: \"Asia\" },\n { code: \"pw\", value: \"palau\", label: \"Palau\", continent: \"Oceania\" },\n { code: \"ps\", value: \"palestine\", label: \"Palestine\", continent: \"Asia\" },\n { code: \"pa\", value: \"panama\", label: \"Panama\", continent: \"North America\" },\n {\n code: \"pg\",\n value: \"papua-new-guinea\",\n label: \"Papua New Guinea\",\n continent: \"Oceania\",\n },\n {\n code: \"py\",\n value: \"paraguay\",\n label: \"Paraguay\",\n continent: \"South America\",\n },\n { code: \"pe\", value: \"peru\", label: \"Peru\", continent: \"South America\" },\n { code: \"ph\", value: \"philippines\", label: \"Philippines\", continent: \"Asia\" },\n { code: \"pl\", value: \"poland\", label: \"Poland\", continent: \"Europe\" },\n { code: \"pt\", value: \"portugal\", label: \"Portugal\", continent: \"Europe\" },\n { code: \"qa\", value: \"qatar\", label: \"Qatar\", continent: \"Asia\" },\n { code: \"ro\", value: \"romania\", label: \"Romania\", continent: \"Europe\" },\n { code: \"ru\", value: \"russia\", label: \"Russia\", continent: \"Europe\" },\n { code: \"rw\", value: \"rwanda\", label: \"Rwanda\", continent: \"Africa\" },\n { code: \"ws\", value: \"samoa\", label: \"Samoa\", continent: \"Oceania\" },\n { code: \"sm\", value: \"san-marino\", label: \"San Marino\", continent: \"Europe\" },\n {\n code: \"sa\",\n value: \"saudi-arabia\",\n label: \"Saudi Arabia\",\n continent: \"Asia\",\n },\n { code: \"sn\", value: \"senegal\", label: \"Senegal\", continent: \"Africa\" },\n { code: \"rs\", value: \"serbia\", label: \"Serbia\", continent: \"Europe\" },\n { code: \"sc\", value: \"seychelles\", label: \"Seychelles\", continent: \"Africa\" },\n {\n code: \"sl\",\n value: \"sierra-leone\",\n label: \"Sierra Leone\",\n continent: \"Africa\",\n },\n { code: \"sg\", value: \"singapore\", label: \"Singapore\", continent: \"Asia\" },\n { code: \"sk\", value: \"slovakia\", label: \"Slovakia\", continent: \"Europe\" },\n { code: \"si\", value: \"slovenia\", label: \"Slovenia\", continent: \"Europe\" },\n {\n code: \"sb\",\n value: \"solomon-islands\",\n label: \"Solomon Islands\",\n continent: \"Oceania\",\n },\n { code: \"so\", value: \"somalia\", label: \"Somalia\", continent: \"Africa\" },\n {\n code: \"za\",\n value: \"south-africa\",\n label: \"South Africa\",\n continent: \"Africa\",\n },\n { code: \"kr\", value: \"south-korea\", label: \"South Korea\", continent: \"Asia\" },\n {\n code: \"ss\",\n value: \"south-sudan\",\n label: \"South Sudan\",\n continent: \"Africa\",\n },\n { code: \"es\", value: \"spain\", label: \"Spain\", continent: \"Europe\" },\n { code: \"lk\", value: \"sri-lanka\", label: \"Sri Lanka\", continent: \"Asia\" },\n { code: \"sd\", value: \"sudan\", label: \"Sudan\", continent: \"Africa\" },\n {\n code: \"sr\",\n value: \"suriname\",\n label: \"Suriname\",\n continent: \"South America\",\n },\n { code: \"se\", value: \"sweden\", label: \"Sweden\", continent: \"Europe\" },\n {\n code: \"ch\",\n value: \"switzerland\",\n label: \"Switzerland\",\n continent: \"Europe\",\n },\n { code: \"sy\", value: \"syria\", label: \"Syria\", continent: \"Asia\" },\n { code: \"tw\", value: \"taiwan\", label: \"Taiwan\", continent: \"Asia\" },\n { code: \"tj\", value: \"tajikistan\", label: \"Tajikistan\", continent: \"Asia\" },\n { code: \"tz\", value: \"tanzania\", label: \"Tanzania\", continent: \"Africa\" },\n { code: \"th\", value: \"thailand\", label: \"Thailand\", continent: \"Asia\" },\n { code: \"tl\", value: \"timor-leste\", label: \"Timor-Leste\", continent: \"Asia\" },\n { code: \"tg\", value: \"togo\", label: \"Togo\", continent: \"Africa\" },\n { code: \"to\", value: \"tonga\", label: \"Tonga\", continent: \"Oceania\" },\n {\n code: \"tt\",\n value: \"trinidad-and-tobago\",\n label: \"Trinidad and Tobago\",\n continent: \"North America\",\n },\n { code: \"tn\", value: \"tunisia\", label: \"Tunisia\", continent: \"Africa\" },\n { code: \"tr\", value: \"turkey\", label: \"Turkey\", continent: \"Asia\" },\n {\n code: \"tm\",\n value: \"turkmenistan\",\n label: \"Turkmenistan\",\n continent: \"Asia\",\n },\n { code: \"tv\", value: \"tuvalu\", label: \"Tuvalu\", continent: \"Oceania\" },\n { code: \"ug\", value: \"uganda\", label: \"Uganda\", continent: \"Africa\" },\n { code: \"ua\", value: \"ukraine\", label: \"Ukraine\", continent: \"Europe\" },\n {\n code: \"ae\",\n value: \"united-arab-emirates\",\n label: \"United Arab Emirates\",\n continent: \"Asia\",\n },\n {\n code: \"gb\",\n value: \"united-kingdom\",\n label: \"United Kingdom\",\n continent: \"Europe\",\n },\n {\n code: \"us\",\n value: \"united-states\",\n label: \"United States\",\n continent: \"North America\",\n },\n {\n code: \"uy\",\n value: \"uruguay\",\n label: \"Uruguay\",\n continent: \"South America\",\n },\n { code: \"uz\", value: \"uzbekistan\", label: \"Uzbekistan\", continent: \"Asia\" },\n { code: \"vu\", value: \"vanuatu\", label: \"Vanuatu\", continent: \"Oceania\" },\n {\n code: \"va\",\n value: \"vatican-city\",\n label: \"Vatican City\",\n continent: \"Europe\",\n },\n {\n code: \"ve\",\n value: \"venezuela\",\n label: \"Venezuela\",\n continent: \"South America\",\n },\n { code: \"vn\", value: \"vietnam\", label: \"Vietnam\", continent: \"Asia\" },\n { code: \"ye\", value: \"yemen\", label: \"Yemen\", continent: \"Asia\" },\n { code: \"zm\", value: \"zambia\", label: \"Zambia\", continent: \"Africa\" },\n { code: \"zw\", value: \"zimbabwe\", label: \"Zimbabwe\", continent: \"Africa\" },\n]\n\nconst timezones = [\n {\n value: \"Americas\",\n items: [\n \"(GMT-5) New York\",\n \"(GMT-8) Los Angeles\",\n \"(GMT-6) Chicago\",\n \"(GMT-5) Toronto\",\n \"(GMT-8) Vancouver\",\n \"(GMT-3) São Paulo\",\n ],\n },\n {\n value: \"Europe\",\n items: [\n \"(GMT+0) London\",\n \"(GMT+1) Paris\",\n \"(GMT+1) Berlin\",\n \"(GMT+1) Rome\",\n \"(GMT+1) Madrid\",\n \"(GMT+1) Amsterdam\",\n ],\n },\n {\n value: \"Asia/Pacific\",\n items: [\n \"(GMT+9) Tokyo\",\n \"(GMT+8) Shanghai\",\n \"(GMT+8) Singapore\",\n \"(GMT+4) Dubai\",\n \"(GMT+11) Sydney\",\n \"(GMT+9) Seoul\",\n ],\n },\n] as const\n\nfunction ComboboxBasic() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxDisabled() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInvalid() {\n return (\n \n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n Please select a valid framework. \n \n \n
\n \n )\n}\n\nfunction ComboboxWithClear() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroups() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroupsAndSeparator() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithForm() {\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n const formData = new FormData(event.target as HTMLFormElement)\n const framework = formData.get(\"framework\") as string\n toast(`You selected ${framework} as your framework.`)\n }\n\n return (\n \n \n \n \n \n \n Framework \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst largeListItems = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`)\n\nfunction ComboboxLargeList() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxAutoHighlight() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboxboxInputAddon() {\n return (\n \n \n \n \n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInPopup() {\n return (\n \n \n \n }\n >\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item.label}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultiple() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleDisabled() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleInvalid() {\n const anchor1 = useComboboxAnchor()\n const anchor2 = useComboboxAnchor()\n\n return (\n \n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Frameworks\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n Please select at least one framework.\n \n \n \n
\n \n )\n}\n\nfunction ComboboxMultipleNoRemove() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n \n {value}\n \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithCustomItems() {\n return (\n \n country.code !== \"\")}\n itemToStringValue={(country: (typeof countries)[number]) =>\n country.label\n }\n >\n \n \n No countries found. \n \n {(country) => (\n \n - \n
\n \n {country.label}\n \n \n {country.continent} ({country.code})\n \n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInDialog() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Framework \n \n Choose your preferred framework from the list below.\n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n setOpen(false)}\n >\n Cancel\n \n {\n toast(\"Framework selected.\")\n setOpen(false)\n }}\n >\n Confirm\n \n \n \n \n \n )\n}\n\nconst items = [\n {\n label: \"Select a framework\",\n value: null,\n },\n {\n label: \"React\",\n value: \"react\",\n },\n {\n label: \"Vue\",\n value: \"vue\",\n },\n {\n label: \"Angular\",\n value: \"angular\",\n },\n {\n label: \"Svelte\",\n value: \"svelte\",\n },\n {\n label: \"Solid\",\n value: \"solid\",\n },\n {\n label: \"Preact\",\n value: \"preact\",\n },\n {\n label: \"Next.js\",\n value: \"next.js\",\n },\n]\n\nfunction ComboboxWithOtherInputs() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Select a framework\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/combobox.json b/apps/v4/public/r/styles/base-maia/combobox.json
index cd148b3cad..874c1c47dd 100644
--- a/apps/v4/public/r/styles/base-maia/combobox.json
+++ b/apps/v4/public/r/styles/base-maia/combobox.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/ui/combobox.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Combobox = ComboboxPrimitive.Root\n\nfunction ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return \n}\n\nfunction ComboboxTrigger({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Trigger.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {\n return (\n }\n className={cn(className)}\n {...props}\n >\n \n \n )\n}\n\nfunction ComboboxInput({\n className,\n children,\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n}: ComboboxPrimitive.Input.Props & {\n showTrigger?: boolean\n showClear?: boolean\n}) {\n return (\n \n }\n {...props}\n />\n \n {showTrigger && (\n }\n data-slot=\"input-group-button\"\n className=\"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent\"\n disabled={disabled}\n />\n )}\n {showClear && }\n \n {children}\n \n )\n}\n\nfunction ComboboxContent({\n className,\n side = \"bottom\",\n sideOffset = 6,\n align = \"start\",\n alignOffset = 0,\n anchor,\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick<\n ComboboxPrimitive.Positioner.Props,\n \"side\" | \"align\" | \"sideOffset\" | \"alignOffset\" | \"anchor\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction ComboboxItem({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Item.Props) {\n return (\n \n {children}\n }\n >\n \n \n \n )\n}\n\nfunction ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ComboboxLabel({\n className,\n ...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {\n return (\n \n )\n}\n\nfunction ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {\n return (\n \n )\n}\n\nfunction ComboboxSeparator({\n className,\n ...props\n}: ComboboxPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChips({\n className,\n ...props\n}: React.ComponentPropsWithRef &\n ComboboxPrimitive.Chips.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: ComboboxPrimitive.Chip.Props & {\n showRemove?: boolean\n}) {\n return (\n \n {children}\n {showRemove && (\n }\n className=\"-ml-1 opacity-50 hover:opacity-100\"\n data-slot=\"combobox-chip-remove\"\n >\n \n \n )}\n \n )\n}\n\nfunction ComboboxChipsInput({\n className,\n ...props\n}: ComboboxPrimitive.Input.Props) {\n return (\n \n )\n}\n\nfunction useComboboxAnchor() {\n return React.useRef(null)\n}\n\nexport {\n Combobox,\n ComboboxInput,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Combobox = ComboboxPrimitive.Root\n\nfunction ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return \n}\n\nfunction ComboboxTrigger({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Trigger.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {\n return (\n }\n className={cn(className)}\n {...props}\n >\n \n \n )\n}\n\nfunction ComboboxInput({\n className,\n children,\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n}: ComboboxPrimitive.Input.Props & {\n showTrigger?: boolean\n showClear?: boolean\n}) {\n return (\n \n }\n {...props}\n />\n \n {showTrigger && (\n }\n data-slot=\"input-group-button\"\n className=\"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent\"\n disabled={disabled}\n />\n )}\n {showClear && }\n \n {children}\n \n )\n}\n\nfunction ComboboxContent({\n className,\n side = \"bottom\",\n sideOffset = 6,\n align = \"start\",\n alignOffset = 0,\n anchor,\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick<\n ComboboxPrimitive.Positioner.Props,\n \"side\" | \"align\" | \"sideOffset\" | \"alignOffset\" | \"anchor\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction ComboboxItem({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Item.Props) {\n return (\n \n {children}\n }\n >\n \n \n \n )\n}\n\nfunction ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ComboboxLabel({\n className,\n ...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {\n return (\n \n )\n}\n\nfunction ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {\n return (\n \n )\n}\n\nfunction ComboboxSeparator({\n className,\n ...props\n}: ComboboxPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChips({\n className,\n ...props\n}: React.ComponentPropsWithRef &\n ComboboxPrimitive.Chips.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: ComboboxPrimitive.Chip.Props & {\n showRemove?: boolean\n}) {\n return (\n \n {children}\n {showRemove && (\n }\n className=\"-ml-1 opacity-50 hover:opacity-100\"\n data-slot=\"combobox-chip-remove\"\n >\n \n \n )}\n \n )\n}\n\nfunction ComboboxChipsInput({\n className,\n ...props\n}: ComboboxPrimitive.Input.Props) {\n return (\n \n )\n}\n\nfunction useComboboxAnchor() {\n return React.useRef(null)\n}\n\nexport {\n Combobox,\n ComboboxInput,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/command-example.json b/apps/v4/public/r/styles/base-maia/command-example.json
index 5cfcc4a97b..6657b2a78d 100644
--- a/apps/v4/public/r/styles/base-maia/command-example.json
+++ b/apps/v4/public/r/styles/base-maia/command-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-maia/examples/command-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from \"@/registry/bases/base/ui/command\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CommandExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction CommandBasic() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n Calendar \n Search Emoji \n Calculator \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithShortcuts() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithGroups() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandManyItems() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Home \n ⌘H \n \n \n \n Inbox \n ⌘I \n \n \n \n Documents \n ⌘D \n \n \n \n Folders \n ⌘F \n \n \n \n \n \n \n New File \n ⌘N \n \n \n \n New Folder \n ⇧⌘N \n \n \n \n Copy \n ⌘C \n \n \n \n Cut \n ⌘X \n \n \n \n Paste \n ⌘V \n \n \n \n Delete \n ⌫ \n \n \n \n \n \n \n Grid View \n \n \n \n List View \n \n \n \n Zoom In \n ⌘+ \n \n \n \n Zoom Out \n ⌘- \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n Notifications \n \n \n \n Help & Support \n \n \n \n \n \n \n Calculator \n \n \n \n Calendar \n \n \n \n Image Editor \n \n \n \n Code Editor \n \n \n \n \n \n
\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from \"@/registry/bases/base/ui/command\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CommandExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction CommandBasic() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n Calendar \n Search Emoji \n Calculator \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithShortcuts() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithGroups() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandManyItems() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Home \n ⌘H \n \n \n \n Inbox \n ⌘I \n \n \n \n Documents \n ⌘D \n \n \n \n Folders \n ⌘F \n \n \n \n \n \n \n New File \n ⌘N \n \n \n \n New Folder \n ⇧⌘N \n \n \n \n Copy \n ⌘C \n \n \n \n Cut \n ⌘X \n \n \n \n Paste \n ⌘V \n \n \n \n Delete \n ⌫ \n \n \n \n \n \n \n Grid View \n \n \n \n List View \n \n \n \n Zoom In \n ⌘+ \n \n \n \n Zoom Out \n ⌘- \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n Notifications \n \n \n \n Help & Support \n \n \n \n \n \n \n Calculator \n \n \n \n Calendar \n \n \n \n Image Editor \n \n \n \n Code Editor \n \n \n \n \n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/command.json b/apps/v4/public/r/styles/base-maia/command.json
index ed61eb38cb..b4f6a3ed79 100644
--- a/apps/v4/public/r/styles/base-maia/command.json
+++ b/apps/v4/public/r/styles/base-maia/command.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/ui/command.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n InputGroup,\n InputGroupAddon,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: Omit, \"children\"> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n children: React.ReactNode\n}) {\n return (\n \n \n {title} \n {description} \n \n \n {children}\n \n \n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n
\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n InputGroup,\n InputGroupAddon,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: Omit, \"children\"> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n children: React.ReactNode\n}) {\n return (\n \n \n {title} \n {description} \n \n \n {children}\n \n \n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n
\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/component-example.json b/apps/v4/public/r/styles/base-maia/component-example.json
index 4edb4b42c0..5c7e78038f 100644
--- a/apps/v4/public/r/styles/base-maia/component-example.json
+++ b/apps/v4/public/r/styles/base-maia/component-example.json
@@ -18,7 +18,7 @@
"files": [
{
"path": "registry/base-maia/examples/component-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport function ComponentExample() {\n return (\n \n \n \n \n )\n}\n\nfunction CardExample() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n }>\n \n Show Dialog\n \n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this\n device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n Warning\n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst roleItems = [\n { label: \"Developer\", value: \"developer\" },\n { label: \"Designer\", value: \"designer\" },\n { label: \"Manager\", value: \"manager\" },\n { label: \"Other\", value: \"other\" },\n]\n\nfunction FormExample() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n User Information \n Please fill in your details below \n \n \n }\n >\n \n More options \n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({\n ...notifications,\n sms: checked === true,\n })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n Account \n \n \n Profile\n ⇧⌘P \n \n \n \n Billing\n \n \n \n \n Settings\n \n \n \n \n Preferences \n \n \n Keyboard Shortcuts\n \n \n \n Language\n \n \n \n \n Notifications\n \n \n \n \n \n Notification Types\n \n \n setNotifications({\n ...notifications,\n push: checked === true,\n })\n }\n >\n \n Push Notifications\n \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Email Notifications\n \n \n \n \n \n \n \n \n \n \n Privacy & Security\n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n \n \n \n \n \n \n Name \n \n \n \n Role \n \n \n \n \n \n \n {roleItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n Framework\n \n \n \n \n No frameworks found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Comments \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport function ComponentExample() {\n return (\n \n \n \n \n )\n}\n\nfunction CardExample() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n }>\n \n Show Dialog\n \n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this\n device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n Warning\n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst roleItems = [\n { label: \"Developer\", value: \"developer\" },\n { label: \"Designer\", value: \"designer\" },\n { label: \"Manager\", value: \"manager\" },\n { label: \"Other\", value: \"other\" },\n]\n\nfunction FormExample() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n User Information \n Please fill in your details below \n \n \n }\n >\n \n More options \n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({\n ...notifications,\n sms: checked === true,\n })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n Account \n \n \n Profile\n ⇧⌘P \n \n \n \n Billing\n \n \n \n \n Settings\n \n \n \n \n Preferences \n \n \n Keyboard Shortcuts\n \n \n \n Language\n \n \n \n \n Notifications\n \n \n \n \n \n Notification Types\n \n \n setNotifications({\n ...notifications,\n push: checked === true,\n })\n }\n >\n \n Push Notifications\n \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Email Notifications\n \n \n \n \n \n \n \n \n \n \n Privacy & Security\n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n \n \n \n \n \n \n Name \n \n \n \n Role \n \n \n \n \n \n \n {roleItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n Framework\n \n \n \n \n No frameworks found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Comments \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/context-menu-example.json b/apps/v4/public/r/styles/base-maia/context-menu-example.json
index e1d4b4cbfc..ec35e0e6e6 100644
--- a/apps/v4/public/r/styles/base-maia/context-menu-example.json
+++ b/apps/v4/public/r/styles/base-maia/context-menu-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/context-menu-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuGroup,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from \"@/registry/bases/base/ui/context-menu\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ContextMenuExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ContextMenuBasic() {\n return (\n \n \n \n Right click here\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n )\n}\n\nfunction ContextMenuWithIcons() {\n return (\n \n \n \n Right click here\n \n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithShortcuts() {\n return (\n \n \n \n Right click here\n \n \n \n \n Back\n ⌘[ \n \n \n Forward\n ⌘] \n \n \n Reload\n ⌘R \n \n \n \n \n \n Save\n ⌘S \n \n \n Save As...\n ⇧⌘S \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithSubmenu() {\n return (\n \n \n \n Right click here\n \n \n \n \n Copy\n ⌘C \n \n \n Cut\n ⌘X \n \n \n \n More Tools \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n \n \n Developer Tools \n \n \n \n Delete \n \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithGroups() {\n return (\n \n \n \n Right click here\n \n \n \n File \n \n New File\n ⌘N \n \n \n Open File\n ⌘O \n \n \n Save\n ⌘S \n \n \n \n \n Edit \n \n Undo\n ⌘Z \n \n \n Redo\n ⇧⌘Z \n \n \n \n \n \n Cut\n ⌘X \n \n \n Copy\n ⌘C \n \n \n Paste\n ⌘V \n \n \n \n \n \n Delete\n ⌫ \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithCheckboxes() {\n return (\n \n \n \n Right click here\n \n \n \n \n Show Bookmarks Bar\n \n Show Full URLs \n \n Show Developer Tools\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithRadio() {\n const [user, setUser] = React.useState(\"pedro\")\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n Right click here\n \n \n \n People \n \n \n Pedro Duarte\n \n \n Colm Tuite\n \n \n \n \n \n Theme \n \n Light \n Dark \n System \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithDestructive() {\n return (\n \n \n \n Right click here\n \n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n \n \n Archive\n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithSides() {\n return (\n \n \n \n \n Right click (top)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (right)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (bottom)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (left)\n \n \n \n Back \n Forward \n Reload \n \n \n \n
\n \n )\n}\n\nfunction ContextMenuInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Context Menu Example \n \n Right click on the area below to see the context menu.\n \n \n \n \n Right click here\n \n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n \n More Options \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n \n \n Developer Tools \n \n \n \n \n \n \n \n Delete\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ContextMenu,\n ContextMenuCheckboxItem,\n ContextMenuContent,\n ContextMenuGroup,\n ContextMenuItem,\n ContextMenuLabel,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuTrigger,\n} from \"@/registry/bases/base/ui/context-menu\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ContextMenuExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ContextMenuBasic() {\n return (\n \n \n \n Right click here\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n )\n}\n\nfunction ContextMenuWithIcons() {\n return (\n \n \n \n Right click here\n \n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithShortcuts() {\n return (\n \n \n \n Right click here\n \n \n \n \n Back\n ⌘[ \n \n \n Forward\n ⌘] \n \n \n Reload\n ⌘R \n \n \n \n \n \n Save\n ⌘S \n \n \n Save As...\n ⇧⌘S \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithSubmenu() {\n return (\n \n \n \n Right click here\n \n \n \n \n Copy\n ⌘C \n \n \n Cut\n ⌘X \n \n \n \n More Tools \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n \n \n Developer Tools \n \n \n \n Delete \n \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithGroups() {\n return (\n \n \n \n Right click here\n \n \n \n File \n \n New File\n ⌘N \n \n \n Open File\n ⌘O \n \n \n Save\n ⌘S \n \n \n \n \n Edit \n \n Undo\n ⌘Z \n \n \n Redo\n ⇧⌘Z \n \n \n \n \n \n Cut\n ⌘X \n \n \n Copy\n ⌘C \n \n \n Paste\n ⌘V \n \n \n \n \n \n Delete\n ⌫ \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithCheckboxes() {\n return (\n \n \n \n Right click here\n \n \n \n \n Show Bookmarks Bar\n \n Show Full URLs \n \n Show Developer Tools\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithRadio() {\n const [user, setUser] = React.useState(\"pedro\")\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n Right click here\n \n \n \n People \n \n \n Pedro Duarte\n \n \n Colm Tuite\n \n \n \n \n \n Theme \n \n Light \n Dark \n System \n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithDestructive() {\n return (\n \n \n \n Right click here\n \n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n \n \n Archive\n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction ContextMenuWithSides() {\n return (\n \n \n \n \n Right click (top)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (right)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (bottom)\n \n \n \n Back \n Forward \n Reload \n \n \n \n \n \n Right click (left)\n \n \n \n Back \n Forward \n Reload \n \n \n \n
\n \n )\n}\n\nfunction ContextMenuInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Context Menu Example \n \n Right click on the area below to see the context menu.\n \n \n \n \n Right click here\n \n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n \n More Options \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n \n \n Developer Tools \n \n \n \n \n \n \n \n Delete\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/context-menu.json b/apps/v4/public/r/styles/base-maia/context-menu.json
index 0734bd5566..bb6c3d93f5 100644
--- a/apps/v4/public/r/styles/base-maia/context-menu.json
+++ b/apps/v4/public/r/styles/base-maia/context-menu.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/context-menu.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ContextMenu as ContextMenuPrimitive } from \"@base-ui/react/context-menu\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {\n return \n}\n\nfunction ContextMenuPortal({ ...props }: ContextMenuPrimitive.Portal.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuTrigger({\n className,\n ...props\n}: ContextMenuPrimitive.Trigger.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuContent({\n className,\n align = \"start\",\n alignOffset = 4,\n side = \"right\",\n sideOffset = 0,\n ...props\n}: ContextMenuPrimitive.Popup.Props &\n Pick<\n ContextMenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ContextMenuGroup({ ...props }: ContextMenuPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: ContextMenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n \n )\n}\n\nfunction ContextMenuSub({ ...props }: ContextMenuPrimitive.SubmenuRoot.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ContextMenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ContextMenuSubContent({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: ContextMenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: ContextMenuPrimitive.RadioGroup.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: ContextMenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: ContextMenuPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { ContextMenu as ContextMenuPrimitive } from \"@base-ui/react/context-menu\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {\n return \n}\n\nfunction ContextMenuPortal({ ...props }: ContextMenuPrimitive.Portal.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuTrigger({\n className,\n ...props\n}: ContextMenuPrimitive.Trigger.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuContent({\n className,\n align = \"start\",\n alignOffset = 4,\n side = \"right\",\n sideOffset = 0,\n ...props\n}: ContextMenuPrimitive.Popup.Props &\n Pick<\n ContextMenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ContextMenuGroup({ ...props }: ContextMenuPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: ContextMenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n \n )\n}\n\nfunction ContextMenuSub({ ...props }: ContextMenuPrimitive.SubmenuRoot.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: ContextMenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ContextMenuSubContent({\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: ContextMenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: ContextMenuPrimitive.RadioGroup.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: ContextMenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: ContextMenuPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/dialog-example.json b/apps/v4/public/r/styles/base-maia/dialog-example.json
index 5c2e4b913c..1ccba0ce37 100644
--- a/apps/v4/public/r/styles/base-maia/dialog-example.json
+++ b/apps/v4/public/r/styles/base-maia/dialog-example.json
@@ -21,7 +21,7 @@
"files": [
{
"path": "registry/base-maia/examples/dialog-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Switch } from \"@/registry/bases/base/ui/switch\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function DialogExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction DialogWithForm() {\n return (\n \n \n \n }>\n Edit Profile\n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're\n done. Your profile will be updated immediately.\n \n \n \n \n Name \n \n \n \n Username \n \n \n \n \n }>\n Cancel\n \n Save changes \n \n \n \n \n \n )\n}\n\nfunction DialogScrollableContent() {\n return (\n \n \n }>\n Scrollable Content\n \n \n \n Scrollable Content \n \n This is a dialog with scrollable content.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n sunt in culpa qui officia deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n \n \n )\n}\n\nfunction DialogWithStickyFooter() {\n return (\n \n \n }>\n Sticky Footer\n \n \n \n Scrollable Content \n \n This is a dialog with scrollable content.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n sunt in culpa qui officia deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n }>\n Close\n \n \n \n \n \n )\n}\n\nfunction DialogNoCloseButton() {\n return (\n \n \n }>\n No Close Button\n \n \n \n No Close Button \n \n This dialog doesn't have a close button in the top-right\n corner.\n \n \n \n }>\n Close\n \n \n \n \n \n )\n}\n\nconst spokenLanguages = [\n { label: \"Auto\", value: \"auto\" },\n { label: \"English\", value: \"en\" },\n { label: \"Spanish\", value: \"es\" },\n { label: \"French\", value: \"fr\" },\n { label: \"German\", value: \"de\" },\n { label: \"Italian\", value: \"it\" },\n { label: \"Portuguese\", value: \"pt\" },\n { label: \"Russian\", value: \"ru\" },\n { label: \"Chinese\", value: \"zh\" },\n { label: \"Japanese\", value: \"ja\" },\n { label: \"Korean\", value: \"ko\" },\n { label: \"Arabic\", value: \"ar\" },\n { label: \"Hindi\", value: \"hi\" },\n { label: \"Bengali\", value: \"bn\" },\n { label: \"Telugu\", value: \"te\" },\n { label: \"Marathi\", value: \"mr\" },\n { label: \"Kannada\", value: \"kn\" },\n { label: \"Malayalam\", value: \"ml\" },\n]\n\nconst voices = [\n { label: \"Samantha\", value: \"samantha\" },\n { label: \"Alex\", value: \"alex\" },\n { label: \"Fred\", value: \"fred\" },\n { label: \"Victoria\", value: \"victoria\" },\n { label: \"Tom\", value: \"tom\" },\n { label: \"Karen\", value: \"karen\" },\n { label: \"Sam\", value: \"sam\" },\n { label: \"Daniel\", value: \"daniel\" },\n]\n\nconst themes = [\n { label: \"Light\", value: \"light\" },\n { label: \"Dark\", value: \"dark\" },\n { label: \"System\", value: \"system\" },\n]\n\nconst accents = [\n { label: \"Default\", value: \"default\" },\n { label: \"Red\", value: \"red\" },\n { label: \"Blue\", value: \"blue\" },\n { label: \"Green\", value: \"green\" },\n { label: \"Purple\", value: \"purple\" },\n { label: \"Pink\", value: \"pink\" },\n]\n\nfunction DialogChatSettings() {\n const [tab, setTab] = React.useState(\"general\")\n const [theme, setTheme] = React.useState(\"system\")\n const [accentColor, setAccentColor] = React.useState(\"default\")\n const [spokenLanguage, setSpokenLanguage] = React.useState(\"en\")\n const [voice, setVoice] = React.useState(\"samantha\")\n\n return (\n \n \n }>\n Chat Settings\n \n \n \n Chat Settings \n \n Customize your chat settings: theme, accent color, spoken\n language, voice, personality, and custom instructions.\n \n \n \n
setTab(e.target.value)}\n className=\"w-full md:hidden\"\n >\n General \n \n Notifications\n \n \n Personalization\n \n Security \n \n
\n \n General \n Notifications \n \n Personalization\n \n Security \n \n \n
\n \n \n \n Theme \n setTheme(value as string)}\n >\n \n \n \n \n \n {themes.map((theme) => (\n \n {theme.label}\n \n ))}\n \n \n \n \n \n \n \n Accent Color\n \n \n setAccentColor(value as string)\n }\n >\n \n \n \n \n \n {accents.map((accent) => (\n \n {accent.label}\n \n ))}\n \n \n \n \n \n \n \n \n Spoken Language\n \n \n For best results, select the language you mainly\n speak. If it's not listed, it may still be\n supported via auto-detection.\n \n \n \n setSpokenLanguage(value as string)\n }\n >\n \n \n \n \n \n {spokenLanguages.map((language) => (\n \n {language.label}\n \n ))}\n \n \n \n \n \n \n Voice \n setVoice(value as string)}\n >\n \n \n \n \n \n {voices.map((voice) => (\n \n {voice.label}\n \n ))}\n \n \n \n \n \n \n \n
\n \n \n Responses \n \n Get notified when ChatGPT responds to requests that take\n time, like research or image generation.\n \n \n \n \n \n Push notifications\n \n \n \n \n \n \n Tasks \n \n Get notified when tasks you've created have\n updates. Manage tasks \n \n \n \n \n \n Push notifications\n \n \n \n \n \n Email notifications\n \n \n \n \n \n \n
\n \n \n Nickname \n \n \n \n \n }\n >\n \n \n \n Used to identify you in the chat. N \n \n \n \n \n \n \n \n \n More about you \n \n Tell us more about yourself. This will be used to help\n us personalize your experience.\n \n \n \n \n \n \n \n \n \n Enable customizations\n \n \n Enable customizations to make ChatGPT more\n personalized.\n \n \n \n \n \n \n \n
\n \n \n \n \n Multi-factor authentication\n \n \n Enable multi-factor authentication to secure your\n account. If you do not have a two-factor\n authentication device, you can use a one-time code\n sent to your email.\n \n \n \n \n \n \n \n Log out \n \n Log out of your account on this device.\n \n \n \n Log Out\n \n \n \n \n \n Log out of all devices \n \n This will log you out of all devices, including the\n current session. It may take up to 30 minutes for the\n changes to take effect.\n \n \n \n Log Out All\n \n \n \n \n
\n \n
\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Switch } from \"@/registry/bases/base/ui/switch\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function DialogExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction DialogWithForm() {\n return (\n \n \n \n }>\n Edit Profile\n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're\n done. Your profile will be updated immediately.\n \n \n \n \n Name \n \n \n \n Username \n \n \n \n \n }>\n Cancel\n \n Save changes \n \n \n \n \n \n )\n}\n\nfunction DialogScrollableContent() {\n return (\n \n \n }>\n Scrollable Content\n \n \n \n Scrollable Content \n \n This is a dialog with scrollable content.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n sunt in culpa qui officia deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n \n \n )\n}\n\nfunction DialogWithStickyFooter() {\n return (\n \n \n }>\n Sticky Footer\n \n \n \n Scrollable Content \n \n This is a dialog with scrollable content.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n enim ad minim veniam, quis nostrud exercitation ullamco laboris\n nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n sunt in culpa qui officia deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n }>\n Close\n \n \n \n \n \n )\n}\n\nfunction DialogNoCloseButton() {\n return (\n \n \n }>\n No Close Button\n \n \n \n No Close Button \n \n This dialog doesn't have a close button in the top-right\n corner.\n \n \n \n }>\n Close\n \n \n \n \n \n )\n}\n\nconst spokenLanguages = [\n { label: \"Auto\", value: \"auto\" },\n { label: \"English\", value: \"en\" },\n { label: \"Spanish\", value: \"es\" },\n { label: \"French\", value: \"fr\" },\n { label: \"German\", value: \"de\" },\n { label: \"Italian\", value: \"it\" },\n { label: \"Portuguese\", value: \"pt\" },\n { label: \"Russian\", value: \"ru\" },\n { label: \"Chinese\", value: \"zh\" },\n { label: \"Japanese\", value: \"ja\" },\n { label: \"Korean\", value: \"ko\" },\n { label: \"Arabic\", value: \"ar\" },\n { label: \"Hindi\", value: \"hi\" },\n { label: \"Bengali\", value: \"bn\" },\n { label: \"Telugu\", value: \"te\" },\n { label: \"Marathi\", value: \"mr\" },\n { label: \"Kannada\", value: \"kn\" },\n { label: \"Malayalam\", value: \"ml\" },\n]\n\nconst voices = [\n { label: \"Samantha\", value: \"samantha\" },\n { label: \"Alex\", value: \"alex\" },\n { label: \"Fred\", value: \"fred\" },\n { label: \"Victoria\", value: \"victoria\" },\n { label: \"Tom\", value: \"tom\" },\n { label: \"Karen\", value: \"karen\" },\n { label: \"Sam\", value: \"sam\" },\n { label: \"Daniel\", value: \"daniel\" },\n]\n\nconst themes = [\n { label: \"Light\", value: \"light\" },\n { label: \"Dark\", value: \"dark\" },\n { label: \"System\", value: \"system\" },\n]\n\nconst accents = [\n { label: \"Default\", value: \"default\" },\n { label: \"Red\", value: \"red\" },\n { label: \"Blue\", value: \"blue\" },\n { label: \"Green\", value: \"green\" },\n { label: \"Purple\", value: \"purple\" },\n { label: \"Pink\", value: \"pink\" },\n]\n\nfunction DialogChatSettings() {\n const [tab, setTab] = React.useState(\"general\")\n const [theme, setTheme] = React.useState(\"system\")\n const [accentColor, setAccentColor] = React.useState(\"default\")\n const [spokenLanguage, setSpokenLanguage] = React.useState(\"en\")\n const [voice, setVoice] = React.useState(\"samantha\")\n\n return (\n \n \n }>\n Chat Settings\n \n \n \n Chat Settings \n \n Customize your chat settings: theme, accent color, spoken\n language, voice, personality, and custom instructions.\n \n \n \n
setTab(e.target.value)}\n className=\"w-full md:hidden\"\n >\n General \n \n Notifications\n \n \n Personalization\n \n Security \n \n
\n \n General \n Notifications \n \n Personalization\n \n Security \n \n \n
\n \n \n \n Theme \n setTheme(value as string)}\n >\n \n \n \n \n \n {themes.map((theme) => (\n \n {theme.label}\n \n ))}\n \n \n \n \n \n \n \n Accent Color\n \n \n setAccentColor(value as string)\n }\n >\n \n \n \n \n \n {accents.map((accent) => (\n \n {accent.label}\n \n ))}\n \n \n \n \n \n \n \n \n Spoken Language\n \n \n For best results, select the language you mainly\n speak. If it's not listed, it may still be\n supported via auto-detection.\n \n \n \n setSpokenLanguage(value as string)\n }\n >\n \n \n \n \n \n {spokenLanguages.map((language) => (\n \n {language.label}\n \n ))}\n \n \n \n \n \n \n Voice \n setVoice(value as string)}\n >\n \n \n \n \n \n {voices.map((voice) => (\n \n {voice.label}\n \n ))}\n \n \n \n \n \n \n \n
\n \n \n Responses \n \n Get notified when ChatGPT responds to requests that take\n time, like research or image generation.\n \n \n \n \n \n Push notifications\n \n \n \n \n \n \n Tasks \n \n Get notified when tasks you've created have\n updates. Manage tasks \n \n \n \n \n \n Push notifications\n \n \n \n \n \n Email notifications\n \n \n \n \n \n \n
\n \n \n Nickname \n \n \n \n \n }\n >\n \n \n \n Used to identify you in the chat. N \n \n \n \n \n \n \n \n \n More about you \n \n Tell us more about yourself. This will be used to help\n us personalize your experience.\n \n \n \n \n \n \n \n \n \n Enable customizations\n \n \n Enable customizations to make ChatGPT more\n personalized.\n \n \n \n \n \n \n \n
\n \n \n \n \n Multi-factor authentication\n \n \n Enable multi-factor authentication to secure your\n account. If you do not have a two-factor\n authentication device, you can use a one-time code\n sent to your email.\n \n \n \n \n \n \n \n Log out \n \n Log out of your account on this device.\n \n \n \n Log Out\n \n \n \n \n \n Log out of all devices \n \n This will log you out of all devices, including the\n current session. It may take up to 30 minutes for the\n changes to take effect.\n \n \n \n Log Out All\n \n \n \n \n
\n \n
\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/dialog.json b/apps/v4/public/r/styles/base-maia/dialog.json
index 3df67df3b6..11f59f2c96 100644
--- a/apps/v4/public/r/styles/base-maia/dialog.json
+++ b/apps/v4/public/r/styles/base-maia/dialog.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-maia/ui/dialog.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return \n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return \n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return \n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n }\n >\n \n Close \n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n \n {children}\n {showCloseButton && (\n }>\n Close\n \n )}\n
\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return \n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return \n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return \n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return \n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n \n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n }\n >\n \n Close \n \n )}\n \n \n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n \n {children}\n {showCloseButton && (\n }>\n Close\n \n )}\n
\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n \n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n \n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/dropdown-menu-example.json b/apps/v4/public/r/styles/base-maia/dropdown-menu-example.json
index 3903782634..a6583dd286 100644
--- a/apps/v4/public/r/styles/base-maia/dropdown-menu-example.json
+++ b/apps/v4/public/r/styles/base-maia/dropdown-menu-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-maia/examples/dropdown-menu-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function DropdownMenuExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuBasic() {\n return (\n \n \n }\n >\n Open\n \n \n \n My Account \n Profile \n Billing \n Settings \n \n \n GitHub \n Support \n API \n \n \n \n )\n}\n\nfunction DropdownMenuWithIcons() {\n return (\n \n \n }\n >\n Open\n \n \n \n \n Profile\n \n \n \n Billing\n \n \n \n Settings\n \n \n \n \n Log out\n \n \n \n \n )\n}\n\nfunction DropdownMenuWithShortcuts() {\n return (\n \n \n }\n >\n Open\n \n \n \n My Account \n \n Profile\n ⇧⌘P \n \n \n Billing\n ⌘B \n \n \n Settings\n ⌘S \n \n \n Keyboard shortcuts\n ⌘K \n \n \n \n \n Log out\n ⇧⌘Q \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithSubmenu() {\n return (\n \n \n }\n >\n Open\n \n \n \n Team \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n \n New Team\n ⌘+T \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithCheckboxes() {\n const [showStatusBar, setShowStatusBar] = React.useState(true)\n const [showActivityBar, setShowActivityBar] = React.useState(false)\n const [showPanel, setShowPanel] = React.useState(false)\n\n return (\n \n \n }\n >\n Checkboxes\n \n \n \n Appearance \n \n \n Status Bar\n \n \n \n Activity Bar\n \n \n \n Panel\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithRadio() {\n const [position, setPosition] = React.useState(\"bottom\")\n\n return (\n \n \n }\n >\n Radio Group\n \n \n \n Panel Position \n \n \n \n Top\n \n \n \n Bottom\n \n \n \n Right\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithCheckboxesIcons() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n\n return (\n \n \n }\n >\n Notifications\n \n \n \n Notification Preferences \n \n setNotifications({ ...notifications, email: checked === true })\n }\n >\n \n Email notifications\n \n \n setNotifications({ ...notifications, sms: checked === true })\n }\n >\n \n SMS notifications\n \n \n setNotifications({ ...notifications, push: checked === true })\n }\n >\n \n Push notifications\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithRadioIcons() {\n const [paymentMethod, setPaymentMethod] = React.useState(\"card\")\n\n return (\n \n \n }\n >\n Payment Method\n \n \n \n Select Payment Method \n \n \n \n Credit Card\n \n \n \n PayPal\n \n \n \n Bank Transfer\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithDestructive() {\n return (\n \n \n }\n >\n Actions\n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n Archive\n \n \n \n Delete\n \n \n \n \n )\n}\n\nfunction DropdownMenuWithAvatar() {\n const menuContent = (\n <>\n \n \n \n Account\n \n \n \n Billing\n \n \n \n Notifications\n \n \n \n \n \n Sign Out\n \n >\n )\n\n return (\n \n \n
\n \n }\n >\n \n \n CN \n \n \n shadcn \n \n shadcn@example.com\n \n
\n \n \n \n {menuContent}\n \n \n
\n \n }\n >\n \n \n LR \n \n \n \n {menuContent}\n \n \n
\n \n )\n}\n\nfunction DropdownMenuInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Dropdown Menu Example \n \n Click the button below to see the dropdown menu.\n \n \n \n }\n >\n Open Menu\n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n More Options \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n \n \n Delete\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuComplex() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n }\n >\n Complex Menu\n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({ ...notifications, email: checked === true })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({ ...notifications, sms: checked === true })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n Account \n \n \n Profile\n ⇧⌘P \n \n \n \n Billing\n \n \n \n \n Settings\n \n \n \n \n Preferences \n \n \n Keyboard Shortcuts\n \n \n \n Language\n \n \n \n \n Notifications\n \n \n \n \n \n Notification Types\n \n \n setNotifications({\n ...notifications,\n push: checked === true,\n })\n }\n >\n \n Push Notifications\n \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Email Notifications\n \n \n \n \n \n \n \n \n \n \n Privacy & Security\n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function DropdownMenuExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuBasic() {\n return (\n \n \n }\n >\n Open\n \n \n \n My Account \n Profile \n Billing \n Settings \n \n \n GitHub \n Support \n API \n \n \n \n )\n}\n\nfunction DropdownMenuWithIcons() {\n return (\n \n \n }\n >\n Open\n \n \n \n \n Profile\n \n \n \n Billing\n \n \n \n Settings\n \n \n \n \n Log out\n \n \n \n \n )\n}\n\nfunction DropdownMenuWithShortcuts() {\n return (\n \n \n }\n >\n Open\n \n \n \n My Account \n \n Profile\n ⇧⌘P \n \n \n Billing\n ⌘B \n \n \n Settings\n ⌘S \n \n \n Keyboard shortcuts\n ⌘K \n \n \n \n \n Log out\n ⇧⌘Q \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithSubmenu() {\n return (\n \n \n }\n >\n Open\n \n \n \n Team \n \n Invite users \n \n \n Email \n Message \n \n More... \n \n \n \n \n New Team\n ⌘+T \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithCheckboxes() {\n const [showStatusBar, setShowStatusBar] = React.useState(true)\n const [showActivityBar, setShowActivityBar] = React.useState(false)\n const [showPanel, setShowPanel] = React.useState(false)\n\n return (\n \n \n }\n >\n Checkboxes\n \n \n \n Appearance \n \n \n Status Bar\n \n \n \n Activity Bar\n \n \n \n Panel\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithRadio() {\n const [position, setPosition] = React.useState(\"bottom\")\n\n return (\n \n \n }\n >\n Radio Group\n \n \n \n Panel Position \n \n \n \n Top\n \n \n \n Bottom\n \n \n \n Right\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithCheckboxesIcons() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n\n return (\n \n \n }\n >\n Notifications\n \n \n \n Notification Preferences \n \n setNotifications({ ...notifications, email: checked === true })\n }\n >\n \n Email notifications\n \n \n setNotifications({ ...notifications, sms: checked === true })\n }\n >\n \n SMS notifications\n \n \n setNotifications({ ...notifications, push: checked === true })\n }\n >\n \n Push notifications\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithRadioIcons() {\n const [paymentMethod, setPaymentMethod] = React.useState(\"card\")\n\n return (\n \n \n }\n >\n Payment Method\n \n \n \n Select Payment Method \n \n \n \n Credit Card\n \n \n \n PayPal\n \n \n \n Bank Transfer\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuWithDestructive() {\n return (\n \n \n }\n >\n Actions\n \n \n \n \n Edit\n \n \n \n Share\n \n \n \n \n Archive\n \n \n \n Delete\n \n \n \n \n )\n}\n\nfunction DropdownMenuWithAvatar() {\n const menuContent = (\n <>\n \n \n \n Account\n \n \n \n Billing\n \n \n \n Notifications\n \n \n \n \n \n Sign Out\n \n >\n )\n\n return (\n \n \n
\n \n }\n >\n \n \n CN \n \n \n shadcn \n \n shadcn@example.com\n \n
\n \n \n \n {menuContent}\n \n \n
\n \n }\n >\n \n \n LR \n \n \n \n {menuContent}\n \n \n
\n \n )\n}\n\nfunction DropdownMenuInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Dropdown Menu Example \n \n Click the button below to see the dropdown menu.\n \n \n \n }\n >\n Open Menu\n \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n More Options \n \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n \n \n Delete\n \n \n \n \n \n \n )\n}\n\nfunction DropdownMenuComplex() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n }\n >\n Complex Menu\n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({ ...notifications, email: checked === true })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({ ...notifications, sms: checked === true })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n Account \n \n \n Profile\n ⇧⌘P \n \n \n \n Billing\n \n \n \n \n Settings\n \n \n \n \n Preferences \n \n \n Keyboard Shortcuts\n \n \n \n Language\n \n \n \n \n Notifications\n \n \n \n \n \n Notification Types\n \n \n setNotifications({\n ...notifications,\n push: checked === true,\n })\n }\n >\n \n Push Notifications\n \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Email Notifications\n \n \n \n \n \n \n \n \n \n \n Privacy & Security\n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/dropdown-menu.json b/apps/v4/public/r/styles/base-maia/dropdown-menu.json
index 225d499d86..57930130f2 100644
--- a/apps/v4/public/r/styles/base-maia/dropdown-menu.json
+++ b/apps/v4/public/r/styles/base-maia/dropdown-menu.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/dropdown-menu.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return \n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return \n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return \n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return \n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return \n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n \n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return \n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return \n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return \n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return \n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n \n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return \n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n \n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/empty-example.json b/apps/v4/public/r/styles/base-maia/empty-example.json
index ec2712e98b..ca32de5ad5 100644
--- a/apps/v4/public/r/styles/base-maia/empty-example.json
+++ b/apps/v4/public/r/styles/base-maia/empty-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-maia/examples/empty-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function EmptyExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction EmptyBasic() {\n return (\n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n\nfunction EmptyWithMutedBackground() {\n return (\n \n \n \n No results found \n \n No results found for your search. Try adjusting your search terms.\n \n \n \n Try again \n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n\nfunction EmptyWithBorder() {\n return (\n \n \n \n 404 - Not Found \n \n The page you're looking for doesn't exist. Try searching\n for what you need below.\n \n \n \n \n \n \n \n \n \n / \n \n \n \n Need help? Contact support \n \n \n \n \n )\n}\n\nfunction EmptyWithIcon() {\n return (\n \n \n \n \n \n \n Nothing to see here \n \n No posts have been created yet. Get started by{\" \"}\n creating your first post .\n \n \n \n \n \n New Post\n \n \n \n \n )\n}\n\nfunction EmptyWithMutedBackgroundAlt() {\n return (\n \n \n \n 404 - Not Found \n \n The page you're looking for doesn't exist. Try searching\n for what you need below.\n \n \n \n \n \n \n \n \n \n / \n \n \n \n Need help? Contact support \n \n \n \n \n )\n}\n\nfunction EmptyInCard() {\n return (\n \n \n \n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function EmptyExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction EmptyBasic() {\n return (\n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n\nfunction EmptyWithMutedBackground() {\n return (\n \n \n \n No results found \n \n No results found for your search. Try adjusting your search terms.\n \n \n \n Try again \n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n\nfunction EmptyWithBorder() {\n return (\n \n \n \n 404 - Not Found \n \n The page you're looking for doesn't exist. Try searching\n for what you need below.\n \n \n \n \n \n \n \n \n \n / \n \n \n \n Need help? Contact support \n \n \n \n \n )\n}\n\nfunction EmptyWithIcon() {\n return (\n \n \n \n \n \n \n Nothing to see here \n \n No posts have been created yet. Get started by{\" \"}\n creating your first post .\n \n \n \n \n \n New Post\n \n \n \n \n )\n}\n\nfunction EmptyWithMutedBackgroundAlt() {\n return (\n \n \n \n 404 - Not Found \n \n The page you're looking for doesn't exist. Try searching\n for what you need below.\n \n \n \n \n \n \n \n \n \n / \n \n \n \n Need help? Contact support \n \n \n \n \n )\n}\n\nfunction EmptyInCard() {\n return (\n \n \n \n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n className=\"text-muted-foreground\"\n nativeButton={false}\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/github.json b/apps/v4/public/r/styles/base-maia/github.json
index 12fbb38650..5838318cb2 100644
--- a/apps/v4/public/r/styles/base-maia/github.json
+++ b/apps/v4/public/r/styles/base-maia/github.json
@@ -30,7 +30,7 @@
"files": [
{
"path": "registry/base-maia/blocks/github.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxList,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/registry/bases/base/ui/command\"\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"@/registry/bases/base/ui/drawer\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemGroup,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function GithubBlock() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CodespacesCard() {\n const [isCreatingCodespace, setIsCreatingCodespace] = React.useState(false)\n\n return (\n \n \n \n \n \n Codespaces \n Local \n \n \n - \n
\n Codespaces \n \n Your workspaces in the cloud\n \n \n \n \n }\n >\n \n \n \n Create a codespace on main\n \n \n \n \n }\n />\n }\n >\n \n \n \n Codespace repository configuration\n \n \n \n \n \n \n New with options...\n \n \n \n Configure dev container\n \n \n \n Set up prebuilds\n \n \n \n \n \n \n Manage codespaces\n \n \n \n Share deep link\n \n \n \n What are codespaces?\n \n \n \n \n \n \n \n \n \n \n \n \n No codespaces \n \n You don't have any codespaces with this repository\n checked out\n \n \n \n {\n setIsCreatingCodespace(true)\n setTimeout(() => {\n setIsCreatingCodespace(false)\n }, 2000)\n }}\n disabled={isCreatingCodespace}\n >\n {isCreatingCodespace ? (\n \n ) : (\n \"\"\n )}\n Create Codespace\n \n \n Learn more about codespaces\n \n \n \n \n \n Codespace usage for this repository is paid for by{\" \"}\n shadcn .\n
\n \n \n - \n
\n \n \n Clone\n \n \n \n \n }\n >\n \n \n \n Which remote URL should I use?\n \n \n \n \n \n \n HTTPS \n SSH \n GitHub CLI \n \n \n
\n \n \n HTTPS URL\n \n \n \n \n \n \n \n \n \n \n Clone using the web URL.\n \n \n \n
\n \n \n SSH URL\n \n \n \n \n \n \n \n \n \n \n Use a password-protected SSH key.\n \n \n \n
\n \n \n CLI Command\n \n \n \n \n \n \n \n \n \n \n Work fast with our official CLI.{\" \"}\n Learn more \n \n \n \n
\n \n \n \n \n \n Open with GitHub Desktop\n \n \n \n Download ZIP\n \n
\n \n \n \n \n \n )\n}\n\nfunction RepositoryToolbar() {\n const [selectedBranch, setSelectedBranch] = React.useState(\"main\")\n return (\n \n \n
\n \n \n \n \n \n \n \n t \n \n \n
\n }>\n Add File\n \n \n \n \n \n \n Create new file\n \n \n \n Upload files\n \n \n \n \n
\n \n }\n />\n }\n >\n \n \n New Agent Task \n \n \n \n New Agent Task \n \n \n \n \n \n \n }\n />\n }\n >\n \n \n Select a branch \n \n \n \n \n Select a Branch\n \n \n \n No branches found \n \n \n {[\n \"main\",\n \"develop\",\n \"feature/123\",\n \"feature/user-authentication\",\n \"feature/dashboard-redesign\",\n \"bugfix/login-error\",\n \"hotfix/security-patch\",\n \"release/v2.0.0\",\n \"feature/api-integration\",\n \"bugfix/memory-leak\",\n \"feature/dark-mode\",\n \"feature/responsive-design\",\n \"bugfix/typo-fix\",\n \"feature/search-functionality\",\n \"release/v1.9.0\",\n \"feature/notifications\",\n \"bugfix/cache-issue\",\n \"feature/payment-gateway\",\n \"hotfix/critical-bug\",\n \"feature/admin-panel\",\n \"bugfix/validation-error\",\n \"feature/analytics\",\n \"release/v2.1.0\",\n ].map((branch) => (\n setSelectedBranch(branch)}\n data-checked={selectedBranch === branch}\n >\n {branch}\n \n ))}\n \n \n \n \n \n \n \n \n \n }\n />\n }\n >\n \n \n Select Agent \n \n \n \n \n \n This repository has no custom agents\n \n \n Custom agents are reusable instructions and tools in\n your repository.\n \n \n \n \n Create Custom Agent\n \n \n \n \n \n \n \n }\n >\n \n \n \n Start Task ⏎ \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction Navbar() {\n return (\n \n \n \n \n \n \n Open menu \n \n \n \n \n Menu \n \n \n \n Close \n \n \n \n \n \n } size=\"xs\">\n \n \n \n \n Home \n \n \n } size=\"xs\">\n \n \n \n \n Issues \n \n \n } size=\"xs\">\n \n \n \n \n Pull requests \n \n \n } size=\"xs\">\n \n \n \n \n Projects \n \n \n } size=\"xs\">\n \n \n \n \n Discussions \n \n \n } size=\"xs\">\n \n \n \n \n Codespaces \n \n \n } size=\"xs\">\n \n \n \n \n Copilot \n \n \n } size=\"xs\">\n \n \n \n \n Spark \n \n \n \n } size=\"xs\">\n \n \n \n \n Explore \n \n \n } size=\"xs\">\n \n \n \n \n Marketplace \n \n \n } size=\"xs\">\n \n \n \n \n MCP registry \n \n \n \n
\n \n \n \n \n }\n >\n \n \n SC \n \n \n \n \n \n - \n
\n \n \n SC \n \n \n \n \n shadcn\n \n \n shadcn@example.com\n \n \n \n \n \n \n \n \n \n Set status\n \n \n \n Single sign-on\n \n \n \n \n \n \n Profile\n \n \n \n Repositories\n \n \n \n Stars\n \n \n \n Gists\n \n \n \n Organizations\n \n \n \n Enterprises\n \n \n \n Sponsors\n \n \n \n \n \n \n Settings\n \n \n \n Copilot settings\n \n \n \n Feature preview\n \n \n \n Appearance\n \n \n \n Accessibility\n \n \n \n Upgrade\n \n \n \n \n \n \n Sign out\n \n \n \n \n \n \n )\n}\n\nconst usernames = [\n \"shadcn\",\n \"vercel\",\n \"nextjs\",\n \"tailwindlabs\",\n \"typescript-lang\",\n \"eslint\",\n \"prettier\",\n \"babel\",\n \"webpack\",\n \"rollup\",\n \"parcel\",\n \"vite\",\n \"react\",\n \"vue\",\n \"angular\",\n \"solid\",\n]\n\nfunction Contributors() {\n return (\n \n \n \n \n Contributors 312 \n \n \n \n \n {usernames.map((username) => (\n
\n \n {username.charAt(0)} \n \n ))}\n
\n \n \n \n + 810 contributors\n \n \n \n \n )\n}\n\nfunction Profile() {\n return (\n \n \n \n Profile \n Manage your profile information. \n \n \n \n \n \n Name \n \n \n Your name may appear around GitHub where you contribute or are\n mentioned. You can remove it at any time.\n \n \n \n Public Email \n \n \n m@shadcn.com\n \n \n m@gmail.com\n \n \n \n You can manage verified email addresses in your{\" \"}\n email settings .\n \n \n \n Bio \n \n \n You can @mention other users and organizations to\n link to them.\n \n \n \n \n \n \n Save Profile \n \n \n \n )\n}\n\nfunction ContributionsActivity() {\n return (\n \n \n \n Contributions & Activity \n \n Manage your contributions and activity visibility.\n \n \n \n \n \n \n \n Contributions & activity\n \n \n \n \n \n \n Make profile private and hide activity\n \n \n Enabling this will hide your contributions and activity\n from your GitHub profile and from social features like\n followers, stars, feeds, leaderboards and releases.\n \n \n \n \n \n \n \n Include private contributions on my profile\n \n \n Your contribution graph, achievements, and activity\n overview will show your private contributions without\n revealing any repository or organization information.{\" \"}\n Read more .\n \n \n \n \n \n \n \n \n \n Save Changes \n \n \n \n )\n}\n\nconst users = [\n \"shadcn\",\n \"maxleiter\",\n \"evilrabbit\",\n \"pranathip\",\n \"jorgezreik\",\n \"shuding\",\n \"rauchg\",\n]\n\nfunction AssignIssue() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n Assign Issue \n \n Select users to assign to this issue.\n \n \n \n }\n >\n \n \n Add user \n \n \n \n \n \n \n \n {(values) => (\n \n {values.map((username: string) => (\n \n \n \n {username.charAt(0)} \n \n {username}\n \n ))}\n 0 ? undefined : \"Select a item...\"\n }\n />\n \n )}\n \n \n \n No users found. \n \n {(username) => (\n \n \n \n {username.charAt(0)} \n \n {username}\n \n )}\n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxItem,\n ComboboxList,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"@/registry/bases/base/ui/command\"\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"@/registry/bases/base/ui/drawer\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemGroup,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function GithubBlock() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CodespacesCard() {\n const [isCreatingCodespace, setIsCreatingCodespace] = React.useState(false)\n\n return (\n \n \n \n \n \n Codespaces \n Local \n \n \n - \n
\n Codespaces \n \n Your workspaces in the cloud\n \n \n \n \n }\n >\n \n \n \n Create a codespace on main\n \n \n \n \n }\n />\n }\n >\n \n \n \n Codespace repository configuration\n \n \n \n \n \n \n New with options...\n \n \n \n Configure dev container\n \n \n \n Set up prebuilds\n \n \n \n \n \n \n Manage codespaces\n \n \n \n Share deep link\n \n \n \n What are codespaces?\n \n \n \n \n \n \n \n \n \n \n \n \n No codespaces \n \n You don't have any codespaces with this repository\n checked out\n \n \n \n {\n setIsCreatingCodespace(true)\n setTimeout(() => {\n setIsCreatingCodespace(false)\n }, 2000)\n }}\n disabled={isCreatingCodespace}\n >\n {isCreatingCodespace ? (\n \n ) : (\n \"\"\n )}\n Create Codespace\n \n \n Learn more about codespaces\n \n \n \n \n \n Codespace usage for this repository is paid for by{\" \"}\n shadcn .\n
\n \n \n - \n
\n \n \n Clone\n \n \n \n \n }\n >\n \n \n \n Which remote URL should I use?\n \n \n \n \n \n \n HTTPS \n SSH \n GitHub CLI \n \n \n
\n \n \n HTTPS URL\n \n \n \n \n \n \n \n \n \n \n Clone using the web URL.\n \n \n \n
\n \n \n SSH URL\n \n \n \n \n \n \n \n \n \n \n Use a password-protected SSH key.\n \n \n \n
\n \n \n CLI Command\n \n \n \n \n \n \n \n \n \n \n Work fast with our official CLI.{\" \"}\n Learn more \n \n \n \n
\n \n \n \n \n \n Open with GitHub Desktop\n \n \n \n Download ZIP\n \n
\n \n \n \n \n \n )\n}\n\nfunction RepositoryToolbar() {\n const [selectedBranch, setSelectedBranch] = React.useState(\"main\")\n return (\n \n \n
\n \n \n \n \n \n \n \n t \n \n \n
\n }>\n Add File\n \n \n \n \n \n \n Create new file\n \n \n \n Upload files\n \n \n \n \n
\n \n }\n />\n }\n >\n \n \n New Agent Task \n \n \n \n New Agent Task \n \n \n \n \n \n \n }\n />\n }\n >\n \n \n Select a branch \n \n \n \n \n Select a Branch\n \n \n \n No branches found \n \n \n {[\n \"main\",\n \"develop\",\n \"feature/123\",\n \"feature/user-authentication\",\n \"feature/dashboard-redesign\",\n \"bugfix/login-error\",\n \"hotfix/security-patch\",\n \"release/v2.0.0\",\n \"feature/api-integration\",\n \"bugfix/memory-leak\",\n \"feature/dark-mode\",\n \"feature/responsive-design\",\n \"bugfix/typo-fix\",\n \"feature/search-functionality\",\n \"release/v1.9.0\",\n \"feature/notifications\",\n \"bugfix/cache-issue\",\n \"feature/payment-gateway\",\n \"hotfix/critical-bug\",\n \"feature/admin-panel\",\n \"bugfix/validation-error\",\n \"feature/analytics\",\n \"release/v2.1.0\",\n ].map((branch) => (\n setSelectedBranch(branch)}\n data-checked={selectedBranch === branch}\n >\n {branch}\n \n ))}\n \n \n \n \n \n \n \n \n \n }\n />\n }\n >\n \n \n Select Agent \n \n \n \n \n \n This repository has no custom agents\n \n \n Custom agents are reusable instructions and tools in\n your repository.\n \n \n \n \n Create Custom Agent\n \n \n \n \n \n \n \n }\n >\n \n \n \n Start Task ⏎ \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction Navbar() {\n return (\n \n \n \n \n \n \n Open menu \n \n \n \n \n Menu \n \n \n \n Close \n \n \n \n \n \n } size=\"xs\">\n \n \n \n \n Home \n \n \n } size=\"xs\">\n \n \n \n \n Issues \n \n \n } size=\"xs\">\n \n \n \n \n Pull requests \n \n \n } size=\"xs\">\n \n \n \n \n Projects \n \n \n } size=\"xs\">\n \n \n \n \n Discussions \n \n \n } size=\"xs\">\n \n \n \n \n Codespaces \n \n \n } size=\"xs\">\n \n \n \n \n Copilot \n \n \n } size=\"xs\">\n \n \n \n \n Spark \n \n \n \n } size=\"xs\">\n \n \n \n \n Explore \n \n \n } size=\"xs\">\n \n \n \n \n Marketplace \n \n \n } size=\"xs\">\n \n \n \n \n MCP registry \n \n \n \n
\n \n \n \n \n }\n >\n \n \n SC \n \n \n \n \n \n - \n
\n \n \n SC \n \n \n \n \n shadcn\n \n \n shadcn@example.com\n \n \n \n \n \n \n \n \n \n Set status\n \n \n \n Single sign-on\n \n \n \n \n \n \n Profile\n \n \n \n Repositories\n \n \n \n Stars\n \n \n \n Gists\n \n \n \n Organizations\n \n \n \n Enterprises\n \n \n \n Sponsors\n \n \n \n \n \n \n Settings\n \n \n \n Copilot settings\n \n \n \n Feature preview\n \n \n \n Appearance\n \n \n \n Accessibility\n \n \n \n Upgrade\n \n \n \n \n \n \n Sign out\n \n \n \n \n \n \n )\n}\n\nconst usernames = [\n \"shadcn\",\n \"vercel\",\n \"nextjs\",\n \"tailwindlabs\",\n \"typescript-lang\",\n \"eslint\",\n \"prettier\",\n \"babel\",\n \"webpack\",\n \"rollup\",\n \"parcel\",\n \"vite\",\n \"react\",\n \"vue\",\n \"angular\",\n \"solid\",\n]\n\nfunction Contributors() {\n return (\n \n \n \n \n Contributors 312 \n \n \n \n \n {usernames.map((username) => (\n
\n \n {username.charAt(0)} \n \n ))}\n
\n \n \n \n + 810 contributors\n \n \n \n \n )\n}\n\nfunction Profile() {\n return (\n \n \n \n Profile \n Manage your profile information. \n \n \n \n \n \n Name \n \n \n Your name may appear around GitHub where you contribute or are\n mentioned. You can remove it at any time.\n \n \n \n Public Email \n \n \n m@shadcn.com\n \n \n m@gmail.com\n \n \n \n You can manage verified email addresses in your{\" \"}\n email settings .\n \n \n \n Bio \n \n \n You can @mention other users and organizations to\n link to them.\n \n \n \n \n \n \n Save Profile \n \n \n \n )\n}\n\nfunction ContributionsActivity() {\n return (\n \n \n \n Contributions & Activity \n \n Manage your contributions and activity visibility.\n \n \n \n \n \n \n \n Contributions & activity\n \n \n \n \n \n \n Make profile private and hide activity\n \n \n Enabling this will hide your contributions and activity\n from your GitHub profile and from social features like\n followers, stars, feeds, leaderboards and releases.\n \n \n \n \n \n \n \n Include private contributions on my profile\n \n \n Your contribution graph, achievements, and activity\n overview will show your private contributions without\n revealing any repository or organization information.{\" \"}\n Read more .\n \n \n \n \n \n \n \n \n \n Save Changes \n \n \n \n )\n}\n\nconst users = [\n \"shadcn\",\n \"maxleiter\",\n \"evilrabbit\",\n \"pranathip\",\n \"jorgezreik\",\n \"shuding\",\n \"rauchg\",\n]\n\nfunction AssignIssue() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n Assign Issue \n \n Select users to assign to this issue.\n \n \n \n }\n >\n \n \n Add user \n \n \n \n \n \n \n \n {(values) => (\n \n {values.map((username: string) => (\n \n \n \n {username.charAt(0)} \n \n {username}\n \n ))}\n 0 ? undefined : \"Select a item...\"\n }\n />\n \n )}\n \n \n \n No users found. \n \n {(username) => (\n \n \n \n {username.charAt(0)} \n \n {username}\n \n )}\n \n \n \n \n \n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/input-group-example.json b/apps/v4/public/r/styles/base-maia/input-group-example.json
index 3e0ed335f9..da6b08c020 100644
--- a/apps/v4/public/r/styles/base-maia/input-group-example.json
+++ b/apps/v4/public/r/styles/base-maia/input-group-example.json
@@ -20,7 +20,7 @@
"files": [
{
"path": "registry/base-maia/examples/input-group-example.tsx",
- "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd, KbdGroup } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function InputGroupExample() {\n const [country, setCountry] = useState(\"+1\")\n\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupBasic() {\n return (\n \n \n \n \n Default (No Input Group)\n \n \n \n \n Input Group \n \n \n \n \n \n Disabled \n \n \n \n \n \n Invalid \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithAddons() {\n return (\n \n \n \n \n Addon (inline-start)\n \n \n \n \n \n \n \n \n \n \n Addon (inline-end)\n \n \n \n \n \n \n \n \n \n \n Addon (inline-start and inline-end)\n \n \n \n \n \n \n \n \n \n \n \n \n Addon (block-start) \n \n \n \n First Name \n \n \n \n \n \n Addon (block-end) \n \n \n \n 20/240 characters \n \n \n \n \n \n Multiple Icons \n \n \n \n \n toast(\"Copied to clipboard\")}\n >\n \n \n \n \n \n \n \n \n \n Description \n \n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n Label \n \n \n Label \n \n \n \n \n \n \n (optional) \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithButtons() {\n return (\n \n \n \n Button \n \n \n \n Default \n \n \n \n \n \n Outline \n \n \n \n \n \n Secondary \n \n \n \n \n \n Button \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithTooltip({\n country,\n setCountry,\n}: {\n country: string\n setCountry: (value: string) => void\n}) {\n return (\n \n \n \n Tooltip \n \n \n \n \n \n }\n >\n \n \n This is content in a tooltip. \n \n \n \n \n This is a description of the input group.\n \n \n \n Dropdown \n \n \n \n \n \n }\n >\n {country}{\" \"}\n \n \n \n setCountry(\"+1\")}>\n +1\n \n setCountry(\"+44\")}>\n +44\n \n setCountry(\"+46\")}>\n +46\n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n Popover \n \n \n } nativeButton={false}>\n \n \n \n \n \n \n Your connection is not secure. \n \n You should not enter any sensitive information on this site.\n \n \n \n \n \n https://\n \n \n \n toast(\"Added to favorites\")}\n >\n \n \n \n \n \n This is a description of the input group.\n \n \n \n Button Group \n \n https:// \n \n \n \n \n \n \n .com \n \n \n This is a description of the input group.\n \n \n \n \n )\n}\n\nfunction InputGroupWithKbd() {\n return (\n \n \n \n Input Group with Kbd \n \n \n \n ⌘K \n \n \n \n \n \n ⌘K \n \n \n \n \n Ask AI \n \n Tab \n \n \n \n \n \n \n \n \n \n Ctrl \n C \n \n \n \n \n \n Username \n \n \n \n \n \n
\n \n \n \n This username is available.\n \n \n \n \n \n \n \n 12 results \n \n \n \n \n \n \n Disabled \n \n \n \n First Name \n \n \n \n \n \n \n \n \n Last Name \n \n \n \n \n \n \n \n \n \n \n Loading ("data-disabled="true")\n \n \n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n \n )\n}\n\nfunction InputGroupInCard() {\n return (\n \n \n \n Card with Input Group \n This is a card with an input group. \n \n \n \n \n Email Address \n \n \n \n \n \n \n \n \n Website URL \n \n \n https:// \n \n \n \n \n \n \n \n \n \n Feedback & Comments\n \n \n \n \n 0/500 characters \n \n \n \n \n \n \n Cancel \n Submit \n \n \n \n )\n}\n\nfunction InputGroupTextareaExamples() {\n return (\n \n \n \n \n Default Textarea (No Input Group)\n \n \n \n \n \n Input Group\n \n \n \n \n \n This is a description of the input group.\n \n \n \n Invalid \n \n \n \n \n This is a description of the input group.\n \n \n \n Disabled \n \n \n \n \n This is a description of the input group.\n \n \n \n Addon (block-start) \n \n \n \n Ask, Search or Chat... \n \n \n \n \n This is a description of the input group.\n \n \n \n \n Addon (block-end)\n \n \n \n \n 0/280 characters \n \n \n Send \n \n \n \n \n \n Addon (Buttons) \n \n \n \n \n Cancel\n \n \n Post Comment\n \n \n \n \n \n Code Editor \n \n \n \n \n \n script.js\n \n \n \n \n \n \n \n \n \n Line 1, Column 1 \n JavaScript \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd, KbdGroup } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function InputGroupExample() {\n const [country, setCountry] = useState(\"+1\")\n\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupBasic() {\n return (\n \n \n \n \n Default (No Input Group)\n \n \n \n \n Input Group \n \n \n \n \n \n Disabled \n \n \n \n \n \n Invalid \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithAddons() {\n return (\n \n \n \n \n Addon (inline-start)\n \n \n \n \n \n \n \n \n \n \n Addon (inline-end)\n \n \n \n \n \n \n \n \n \n \n Addon (inline-start and inline-end)\n \n \n \n \n \n \n \n \n \n \n \n \n Addon (block-start) \n \n \n \n First Name \n \n \n \n \n \n Addon (block-end) \n \n \n \n 20/240 characters \n \n \n \n \n \n Multiple Icons \n \n \n \n \n toast(\"Copied to clipboard\")}\n >\n \n \n \n \n \n \n \n \n \n Description \n \n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n Label \n \n \n Label \n \n \n \n \n \n \n (optional) \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithButtons() {\n return (\n \n \n \n Button \n \n \n \n Default \n \n \n \n \n \n Outline \n \n \n \n \n \n Secondary \n \n \n \n \n \n Button \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputGroupWithTooltip({\n country,\n setCountry,\n}: {\n country: string\n setCountry: (value: string) => void\n}) {\n return (\n \n \n \n Tooltip \n \n \n \n \n \n }\n >\n \n \n This is content in a tooltip. \n \n \n \n \n This is a description of the input group.\n \n \n \n Dropdown \n \n \n \n \n \n }\n >\n {country}{\" \"}\n \n \n \n setCountry(\"+1\")}>\n +1\n \n setCountry(\"+44\")}>\n +44\n \n setCountry(\"+46\")}>\n +46\n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n Popover \n \n \n } nativeButton={false}>\n \n \n \n \n \n \n Your connection is not secure. \n \n You should not enter any sensitive information on this site.\n \n \n \n \n \n https://\n \n \n \n toast(\"Added to favorites\")}\n >\n \n \n \n \n \n This is a description of the input group.\n \n \n \n Button Group \n \n https:// \n \n \n \n \n \n \n .com \n \n \n This is a description of the input group.\n \n \n \n \n )\n}\n\nfunction InputGroupWithKbd() {\n return (\n \n \n \n Input Group with Kbd \n \n \n \n ⌘K \n \n \n \n \n \n ⌘K \n \n \n \n \n Ask AI \n \n Tab \n \n \n \n \n \n \n \n \n \n Ctrl \n C \n \n \n \n \n \n Username \n \n \n \n \n \n
\n \n \n \n This username is available.\n \n \n \n \n \n \n \n 12 results \n \n \n \n \n \n \n Disabled \n \n \n \n First Name \n \n \n \n \n \n \n \n \n Last Name \n \n \n \n \n \n \n \n \n \n \n Loading ("data-disabled="true")\n \n \n \n \n \n \n \n \n This is a description of the input group.\n \n \n \n \n )\n}\n\nfunction InputGroupInCard() {\n return (\n \n \n \n Card with Input Group \n This is a card with an input group. \n \n \n \n \n Email Address \n \n \n \n \n \n \n \n \n Website URL \n \n \n https:// \n \n \n \n \n \n \n \n \n \n Feedback & Comments\n \n \n \n \n 0/500 characters \n \n \n \n \n \n \n Cancel \n Submit \n \n \n \n )\n}\n\nfunction InputGroupTextareaExamples() {\n return (\n \n \n \n \n Default Textarea (No Input Group)\n \n \n \n \n \n Input Group\n \n \n \n \n \n This is a description of the input group.\n \n \n \n Invalid \n \n \n \n \n This is a description of the input group.\n \n \n \n Disabled \n \n \n \n \n This is a description of the input group.\n \n \n \n Addon (block-start) \n \n \n \n Ask, Search or Chat... \n \n \n \n \n This is a description of the input group.\n \n \n \n \n Addon (block-end)\n \n \n \n \n 0/280 characters \n \n \n Send \n \n \n \n \n \n Addon (Buttons) \n \n \n \n \n Cancel\n \n \n Post Comment\n \n \n \n \n \n Code Editor \n \n \n \n \n \n script.js\n \n \n \n \n \n \n \n \n \n Line 1, Column 1 \n JavaScript \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/input-otp-example.json b/apps/v4/public/r/styles/base-maia/input-otp-example.json
index 3e73dbab6f..a888bfbc4e 100644
--- a/apps/v4/public/r/styles/base-maia/input-otp-example.json
+++ b/apps/v4/public/r/styles/base-maia/input-otp-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-maia/examples/input-otp-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS } from \"input-otp\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from \"@/registry/bases/base/ui/input-otp\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function InputOTPExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPSimple() {\n return (\n \n \n Simple \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPPattern() {\n return (\n \n \n Digits Only \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPWithSeparator() {\n const [value, setValue] = React.useState(\"123456\")\n\n return (\n \n \n With Separator \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPAlphanumeric() {\n return (\n \n \n Alphanumeric \n Accepts both letters and numbers. \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPDisabled() {\n return (\n \n \n Disabled \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPFourDigits() {\n return (\n \n \n 4 Digits \n Common pattern for PIN codes. \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPInvalid() {\n const [value, setValue] = React.useState(\"000000\")\n\n return (\n \n \n Invalid State \n \n Example showing the invalid error state.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPForm() {\n return (\n \n \n \n Verify your login \n \n Enter the verification code we sent to your email address:{\" \"}\n m@example.com .\n \n \n \n \n \n \n \n Verification code\n \n \n \n Resend Code\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n I no longer have access to this email address. \n \n \n \n \n \n \n Verify\n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS } from \"input-otp\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from \"@/registry/bases/base/ui/input-otp\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function InputOTPExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPSimple() {\n return (\n \n \n Simple \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPPattern() {\n return (\n \n \n Digits Only \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPWithSeparator() {\n const [value, setValue] = React.useState(\"123456\")\n\n return (\n \n \n With Separator \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPAlphanumeric() {\n return (\n \n \n Alphanumeric \n Accepts both letters and numbers. \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPDisabled() {\n return (\n \n \n Disabled \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPFourDigits() {\n return (\n \n \n 4 Digits \n Common pattern for PIN codes. \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPInvalid() {\n const [value, setValue] = React.useState(\"000000\")\n\n return (\n \n \n Invalid State \n \n Example showing the invalid error state.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction InputOTPForm() {\n return (\n \n \n \n Verify your login \n \n Enter the verification code we sent to your email address:{\" \"}\n m@example.com .\n \n \n \n \n \n \n \n Verification code\n \n \n \n Resend Code\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n I no longer have access to this email address. \n \n \n \n \n \n \n Verify\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/input-otp.json b/apps/v4/public/r/styles/base-maia/input-otp.json
index d60ea69f89..25bfff11d4 100644
--- a/apps/v4/public/r/styles/base-maia/input-otp.json
+++ b/apps/v4/public/r/styles/base-maia/input-otp.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-maia/ui/input-otp.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps & {\n containerClassName?: string\n}) {\n return (\n \n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n \n {char}\n {hasFakeCaret && (\n
\n )}\n
\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n \n \n
\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps & {\n containerClassName?: string\n}) {\n return (\n \n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n \n {char}\n {hasFakeCaret && (\n
\n )}\n
\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n \n \n
\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/item-example.json b/apps/v4/public/r/styles/base-maia/item-example.json
index c078f7baeb..aaea31ae7d 100644
--- a/apps/v4/public/r/styles/base-maia/item-example.json
+++ b/apps/v4/public/r/styles/base-maia/item-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-maia/examples/item-example.tsx",
- "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemHeader,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ItemExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DefaultVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction OutlineLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction MutedLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction DefaultItemGroup() {\n return (\n \n \n - \n
\n Item 1 \n First item in the group. \n \n \n - \n
\n Item 2 \n Second item in the group. \n \n \n - \n
\n Item 3 \n Third item in the group. \n \n \n \n \n )\n}\n\nfunction OutlineItemGroup() {\n return (\n \n \n - \n
\n \n \n \n Item 1 \n First item with icon. \n \n \n - \n
\n \n \n \n Item 2 \n Second item with icon. \n \n \n - \n
\n \n \n \n Item 3 \n Third item with icon. \n \n \n \n \n )\n}\n\nfunction MutedItemGroup() {\n return (\n \n \n - \n
\n Item 1 \n First item in muted group. \n \n \n \n Action\n \n \n \n - \n
\n Item 2 \n Second item in muted group. \n \n \n \n Action\n \n \n \n - \n
\n Item 3 \n Third item in muted group. \n \n \n \n Action\n \n \n \n \n \n )\n}\n\nfunction ItemSeparatorExample() {\n return (\n \n \n - \n
\n \n \n \n Inbox \n View all incoming messages. \n \n \n \n - \n
\n \n \n \n Sent \n View all sent messages. \n \n \n \n - \n
\n \n \n \n Drafts \n View all draft messages. \n \n \n \n - \n
\n \n \n \n Archive \n View archived messages. \n \n \n \n \n )\n}\n\nfunction ItemHeaderExamples() {\n return (\n \n - \n
\n Design System \n \n \n Component Library \n \n A comprehensive collection of reusable UI components for building\n consistent interfaces.\n \n \n \n - \n
\n Marketing \n \n \n Campaign Analytics \n \n Track performance metrics and engagement rates across all marketing\n channels.\n \n \n \n - \n
\n Engineering \n \n \n API Documentation \n \n Complete reference guide for all available endpoints and\n authentication methods.\n \n \n \n \n )\n}\n\nfunction ItemFooterExamples() {\n return (\n \n - \n
\n Quarterly Report Q4 2024 \n \n Financial overview including revenue, expenses, and growth metrics\n for the fourth quarter.\n \n \n \n \n Last updated 2 hours ago\n \n \n \n - \n
\n User Research Findings \n \n Insights from interviews and surveys conducted with 50+ users across\n different demographics.\n \n \n \n \n Created by Sarah Chen\n \n \n \n - \n
\n Product Roadmap \n \n Planned features and improvements scheduled for the next three\n months.\n \n \n \n 12 comments \n \n \n \n )\n}\n\nfunction ItemHeaderAndFooterExamples() {\n return (\n \n - \n
\n Team Project \n \n \n Website Redesign \n \n Complete overhaul of the company website with modern design\n principles and improved user experience.\n \n \n \n \n Updated 5 minutes ago\n \n \n \n - \n
\n Client Work \n \n \n Mobile App Development \n \n Building a cross-platform mobile application for iOS and Android\n with React Native.\n \n \n \n \n Status: In Progress\n \n \n \n - \n
\n Documentation \n \n \n API Integration Guide \n \n Step-by-step instructions for integrating third-party APIs with\n authentication and error handling.\n \n \n \n \n Category: Technical • 3 attachments\n \n \n \n \n )\n}\n\nfunction DefaultVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImageSmall() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImageExtraSmall() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n \n - \n
\n \n \n \n Document \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n \n Download \n \n \n \n )\n}\n\nfunction MutedVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n",
+ "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemHeader,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ItemExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction DefaultVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItems() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n Action \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItemsSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction OutlineVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction MutedVariantItemsExtraSmall() {\n return (\n \n - \n
\n Title Only \n \n \n - \n
\n Title + Button \n \n \n \n Action\n \n \n \n - \n
\n Title + Description \n \n This is a description that provides additional context.\n \n \n \n - \n
\n Title + Description + Button \n \n This item includes a title, description, and action button.\n \n \n \n \n Action\n \n \n \n - \n
\n \n \n \n Media + Title \n \n \n - \n
\n \n \n \n Media + Title + Button \n \n \n Action \n \n \n - \n
\n \n \n \n Media + Title + Description \n \n This item includes media, title, and description.\n \n \n \n - \n
\n \n \n \n Media + Title + Description + Button \n \n Complete item with all components: media, title, description, and\n button.\n \n \n \n Action \n \n \n - \n
\n Multiple Actions \n \n Item with multiple action buttons in the actions area.\n \n \n \n \n Cancel\n \n Confirm \n \n \n \n )\n}\n\nfunction DefaultLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction OutlineLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction MutedLinkItems() {\n return (\n \n \n }>\n \n Title Only (Link) \n \n \n }>\n \n Title + Description (Link) \n \n Clickable item with title and description.\n \n \n \n }>\n \n \n \n \n Media + Title (Link) \n \n \n }>\n \n \n \n \n Media + Title + Description (Link) \n \n Complete link item with media, title, and description.\n \n \n \n }>\n \n With Actions (Link) \n \n Link item that also has action buttons.\n \n \n \n \n Share\n \n \n \n \n \n )\n}\n\nfunction DefaultItemGroup() {\n return (\n \n \n - \n
\n Item 1 \n First item in the group. \n \n \n - \n
\n Item 2 \n Second item in the group. \n \n \n - \n
\n Item 3 \n Third item in the group. \n \n \n \n \n )\n}\n\nfunction OutlineItemGroup() {\n return (\n \n \n - \n
\n \n \n \n Item 1 \n First item with icon. \n \n \n - \n
\n \n \n \n Item 2 \n Second item with icon. \n \n \n - \n
\n \n \n \n Item 3 \n Third item with icon. \n \n \n \n \n )\n}\n\nfunction MutedItemGroup() {\n return (\n \n \n - \n
\n Item 1 \n First item in muted group. \n \n \n \n Action\n \n \n \n - \n
\n Item 2 \n Second item in muted group. \n \n \n \n Action\n \n \n \n - \n
\n Item 3 \n Third item in muted group. \n \n \n \n Action\n \n \n \n \n \n )\n}\n\nfunction ItemSeparatorExample() {\n return (\n \n \n - \n
\n \n \n \n Inbox \n View all incoming messages. \n \n \n \n - \n
\n \n \n \n Sent \n View all sent messages. \n \n \n \n - \n
\n \n \n \n Drafts \n View all draft messages. \n \n \n \n - \n
\n \n \n \n Archive \n View archived messages. \n \n \n \n \n )\n}\n\nfunction ItemHeaderExamples() {\n return (\n \n - \n
\n Design System \n \n \n Component Library \n \n A comprehensive collection of reusable UI components for building\n consistent interfaces.\n \n \n \n - \n
\n Marketing \n \n \n Campaign Analytics \n \n Track performance metrics and engagement rates across all marketing\n channels.\n \n \n \n - \n
\n Engineering \n \n \n API Documentation \n \n Complete reference guide for all available endpoints and\n authentication methods.\n \n \n \n \n )\n}\n\nfunction ItemFooterExamples() {\n return (\n \n - \n
\n Quarterly Report Q4 2024 \n \n Financial overview including revenue, expenses, and growth metrics\n for the fourth quarter.\n \n \n \n \n Last updated 2 hours ago\n \n \n \n - \n
\n User Research Findings \n \n Insights from interviews and surveys conducted with 50+ users across\n different demographics.\n \n \n \n \n Created by Sarah Chen\n \n \n \n - \n
\n Product Roadmap \n \n Planned features and improvements scheduled for the next three\n months.\n \n \n \n 12 comments \n \n \n \n )\n}\n\nfunction ItemHeaderAndFooterExamples() {\n return (\n \n - \n
\n Team Project \n \n \n Website Redesign \n \n Complete overhaul of the company website with modern design\n principles and improved user experience.\n \n \n \n \n Updated 5 minutes ago\n \n \n \n - \n
\n Client Work \n \n \n Mobile App Development \n \n Building a cross-platform mobile application for iOS and Android\n with React Native.\n \n \n \n \n Status: In Progress\n \n \n \n - \n
\n Documentation \n \n \n API Integration Guide \n \n Step-by-step instructions for integrating third-party APIs with\n authentication and error handling.\n \n \n \n \n Category: Technical • 3 attachments\n \n \n \n \n )\n}\n\nfunction DefaultVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImageSmall() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n\nfunction OutlineVariantItemsWithImageExtraSmall() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n \n - \n
\n \n \n \n Document \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n \n Download \n \n \n \n )\n}\n\nfunction MutedVariantItemsWithImage() {\n return (\n \n - \n
\n \n \n \n Project Dashboard \n \n Overview of project settings and configuration.\n \n \n \n - \n
\n \n \n \n Document \n A document with metadata displayed. \n \n \n \n View\n \n \n \n - \n
\n \n \n \n File Attachment \n \n Complete file with image, title, description, and action button.\n \n \n \n Download \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/kbd-example.json b/apps/v4/public/r/styles/base-maia/kbd-example.json
index 8ba261894f..982fc19e13 100644
--- a/apps/v4/public/r/styles/base-maia/kbd-example.json
+++ b/apps/v4/public/r/styles/base-maia/kbd-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-maia/examples/kbd-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd, KbdGroup } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function KbdExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction KbdBasic() {\n return (\n \n \n Ctrl \n ⌘K \n Ctrl + B \n
\n \n )\n}\n\nfunction KbdModifierKeys() {\n return (\n \n \n ⌘ \n C \n
\n \n )\n}\n\nfunction KbdGroupExample() {\n return (\n \n \n Ctrl \n Shift \n P \n \n \n )\n}\n\nfunction KbdArrowKeys() {\n return (\n \n \n ↑ \n ↓ \n ← \n → \n
\n \n )\n}\n\nfunction KbdWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction KbdWithIconsAndText() {\n return (\n \n \n \n \n Left\n \n \n \n Voice Enabled\n \n \n \n )\n}\n\nfunction KbdInInputGroup() {\n return (\n \n \n \n \n Space \n \n \n \n )\n}\n\nfunction KbdInTooltip() {\n return (\n \n \n }>\n \n \n \n \n Save Changes S \n
\n \n \n \n )\n}\n\nfunction KbdWithSamp() {\n return (\n \n \n File \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Kbd, KbdGroup } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function KbdExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction KbdBasic() {\n return (\n \n \n Ctrl \n ⌘K \n Ctrl + B \n
\n \n )\n}\n\nfunction KbdModifierKeys() {\n return (\n \n \n ⌘ \n C \n
\n \n )\n}\n\nfunction KbdGroupExample() {\n return (\n \n \n Ctrl \n Shift \n P \n \n \n )\n}\n\nfunction KbdArrowKeys() {\n return (\n \n \n ↑ \n ↓ \n ← \n → \n
\n \n )\n}\n\nfunction KbdWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction KbdWithIconsAndText() {\n return (\n \n \n \n \n Left\n \n \n \n Voice Enabled\n \n \n \n )\n}\n\nfunction KbdInInputGroup() {\n return (\n \n \n \n \n Space \n \n \n \n )\n}\n\nfunction KbdInTooltip() {\n return (\n \n \n }>\n \n \n \n \n Save Changes S \n
\n \n \n \n )\n}\n\nfunction KbdWithSamp() {\n return (\n \n \n File \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/menubar-example.json b/apps/v4/public/r/styles/base-maia/menubar-example.json
index 6b4ae29dea..f311dfb1e4 100644
--- a/apps/v4/public/r/styles/base-maia/menubar-example.json
+++ b/apps/v4/public/r/styles/base-maia/menubar-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/menubar-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarMenu,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n} from \"@/registry/bases/base/ui/menubar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function MenubarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction MenubarBasic() {\n return (\n \n \n \n File \n \n \n New Tab ⌘T \n \n \n New Window ⌘N \n \n New Incognito Window \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n Cut \n Copy \n Paste \n \n \n \n \n )\n}\n\nfunction MenubarWithSubmenu() {\n return (\n \n \n \n File \n \n \n Share \n \n Email link \n Messages \n Notes \n \n \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n Find \n \n Find... \n Find Next \n Find Previous \n \n \n \n Cut \n Copy \n Paste \n \n \n \n \n )\n}\n\nfunction MenubarWithCheckboxes() {\n return (\n \n \n \n View \n \n Always Show Bookmarks Bar \n \n Always Show Full URLs\n \n \n \n Reload ⌘R \n \n \n Force Reload ⇧⌘R \n \n \n \n \n Format \n \n Strikethrough \n Code \n Superscript \n \n \n \n \n )\n}\n\nfunction MenubarWithRadio() {\n const [user, setUser] = React.useState(\"benoit\")\n const [theme, setTheme] = React.useState(\"system\")\n\n return (\n \n \n \n Profiles \n \n \n Andy \n Benoit \n Luis \n \n \n Edit... \n Add Profile... \n \n \n \n Theme \n \n \n Light \n Dark \n System \n \n \n \n \n \n )\n}\n\nfunction MenubarWithIcons() {\n return (\n \n \n \n File \n \n \n \n New File ⌘N \n \n \n \n Open Folder\n \n \n \n \n Save ⌘S \n \n \n \n \n More \n \n \n \n \n Settings\n \n \n \n Help\n \n \n \n \n Delete\n \n \n \n \n \n \n )\n}\n\nfunction MenubarWithShortcuts() {\n return (\n \n \n \n File \n \n \n New Tab ⌘T \n \n \n New Window ⌘N \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n Cut ⌘X \n \n \n Copy ⌘C \n \n \n Paste ⌘V \n \n \n \n \n \n )\n}\n\nfunction MenubarFormat() {\n return (\n \n \n \n Format \n \n \n \n Bold ⌘B \n \n \n \n Italic ⌘I \n \n \n \n Underline ⌘U \n \n \n Strikethrough \n Code \n \n \n \n View \n \n Show Ruler \n Show Grid \n \n Zoom In \n Zoom Out \n \n \n \n \n )\n}\n\nfunction MenubarInsert() {\n return (\n \n \n \n Insert \n \n \n \n \n Media\n \n \n Image \n Video \n Audio \n \n \n \n \n \n Link ⌘K \n \n \n \n Table\n \n \n \n \n Tools \n \n \n \n Find & Replace ⌘F \n \n \n \n Spell Check\n \n \n \n \n \n )\n}\n\nfunction MenubarDestructive() {\n return (\n \n \n \n File \n \n \n \n New File ⌘N \n \n \n \n Open Folder\n \n \n \n \n Delete File ⌘⌫ \n \n \n \n \n Account \n \n \n \n Profile\n \n \n \n Settings\n \n \n \n \n Sign out\n \n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction MenubarInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Menubar Example \n \n Use the menubar below to see the menu options.\n \n \n \n \n File \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n More Options \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n \n Delete\n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarMenu,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n} from \"@/registry/bases/base/ui/menubar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function MenubarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction MenubarBasic() {\n return (\n \n \n \n File \n \n \n New Tab ⌘T \n \n \n New Window ⌘N \n \n New Incognito Window \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n Cut \n Copy \n Paste \n \n \n \n \n )\n}\n\nfunction MenubarWithSubmenu() {\n return (\n \n \n \n File \n \n \n Share \n \n Email link \n Messages \n Notes \n \n \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n Find \n \n Find... \n Find Next \n Find Previous \n \n \n \n Cut \n Copy \n Paste \n \n \n \n \n )\n}\n\nfunction MenubarWithCheckboxes() {\n return (\n \n \n \n View \n \n Always Show Bookmarks Bar \n \n Always Show Full URLs\n \n \n \n Reload ⌘R \n \n \n Force Reload ⇧⌘R \n \n \n \n \n Format \n \n Strikethrough \n Code \n Superscript \n \n \n \n \n )\n}\n\nfunction MenubarWithRadio() {\n const [user, setUser] = React.useState(\"benoit\")\n const [theme, setTheme] = React.useState(\"system\")\n\n return (\n \n \n \n Profiles \n \n \n Andy \n Benoit \n Luis \n \n \n Edit... \n Add Profile... \n \n \n \n Theme \n \n \n Light \n Dark \n System \n \n \n \n \n \n )\n}\n\nfunction MenubarWithIcons() {\n return (\n \n \n \n File \n \n \n \n New File ⌘N \n \n \n \n Open Folder\n \n \n \n \n Save ⌘S \n \n \n \n \n More \n \n \n \n \n Settings\n \n \n \n Help\n \n \n \n \n Delete\n \n \n \n \n \n \n )\n}\n\nfunction MenubarWithShortcuts() {\n return (\n \n \n \n File \n \n \n New Tab ⌘T \n \n \n New Window ⌘N \n \n \n Print... ⌘P \n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n Cut ⌘X \n \n \n Copy ⌘C \n \n \n Paste ⌘V \n \n \n \n \n \n )\n}\n\nfunction MenubarFormat() {\n return (\n \n \n \n Format \n \n \n \n Bold ⌘B \n \n \n \n Italic ⌘I \n \n \n \n Underline ⌘U \n \n \n Strikethrough \n Code \n \n \n \n View \n \n Show Ruler \n Show Grid \n \n Zoom In \n Zoom Out \n \n \n \n \n )\n}\n\nfunction MenubarInsert() {\n return (\n \n \n \n Insert \n \n \n \n \n Media\n \n \n Image \n Video \n Audio \n \n \n \n \n \n Link ⌘K \n \n \n \n Table\n \n \n \n \n Tools \n \n \n \n Find & Replace ⌘F \n \n \n \n Spell Check\n \n \n \n \n \n )\n}\n\nfunction MenubarDestructive() {\n return (\n \n \n \n File \n \n \n \n New File ⌘N \n \n \n \n Open Folder\n \n \n \n \n Delete File ⌘⌫ \n \n \n \n \n Account \n \n \n \n Profile\n \n \n \n Settings\n \n \n \n \n Sign out\n \n \n \n \n Delete\n \n \n \n \n \n )\n}\n\nfunction MenubarInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Menubar Example \n \n Use the menubar below to see the menu options.\n \n \n \n \n File \n \n \n \n Copy\n \n \n \n Cut\n \n \n \n Paste\n \n \n \n More Options \n \n Save Page... \n Create Shortcut... \n Name Window... \n \n Developer Tools \n \n \n \n \n \n Delete\n \n \n \n \n Edit \n \n \n Undo ⌘Z \n \n \n Redo ⇧⌘Z \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/menubar.json b/apps/v4/public/r/styles/base-maia/menubar.json
index 98c059343e..674da10d77 100644
--- a/apps/v4/public/r/styles/base-maia/menubar.json
+++ b/apps/v4/public/r/styles/base-maia/menubar.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-maia/ui/menubar.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\nimport { Menubar as MenubarPrimitive } from \"@base-ui/react/menubar\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Menubar({ className, ...props }: MenubarPrimitive.Props) {\n return (\n \n )\n}\n\nfunction MenubarMenu({ ...props }: React.ComponentProps) {\n return \n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\nimport { Menubar as MenubarPrimitive } from \"@base-ui/react/menubar\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Menubar({ className, ...props }: MenubarPrimitive.Props) {\n return (\n \n )\n}\n\nfunction MenubarMenu({ ...props }: React.ComponentProps) {\n return \n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: MenuPrimitive.CheckboxItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: MenuPrimitive.RadioItem.Props) {\n return (\n \n \n \n \n \n \n {children}\n \n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps) {\n return \n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n ...props\n}: React.ComponentProps & {\n inset?: boolean\n}) {\n return (\n \n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/native-select.json b/apps/v4/public/r/styles/base-maia/native-select.json
index 575870d46b..faac96ae65 100644
--- a/apps/v4/public/r/styles/base-maia/native-select.json
+++ b/apps/v4/public/r/styles/base-maia/native-select.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/native-select.tsx",
- "content": "import * as React from \"react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype NativeSelectProps = Omit, \"size\"> & {\n size?: \"sm\" | \"default\"\n}\n\nfunction NativeSelect({\n className,\n size = \"default\",\n ...props\n}: NativeSelectProps) {\n return (\n \n \n \n
\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return \n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n \n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n",
+ "content": "import * as React from \"react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype NativeSelectProps = Omit, \"size\"> & {\n size?: \"sm\" | \"default\"\n}\n\nfunction NativeSelect({\n className,\n size = \"default\",\n ...props\n}: NativeSelectProps) {\n return (\n \n \n \n
\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return \n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n \n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/navigation-menu-example.json b/apps/v4/public/r/styles/base-maia/navigation-menu-example.json
index bc0908a0fa..327ffa22ae 100644
--- a/apps/v4/public/r/styles/base-maia/navigation-menu-example.json
+++ b/apps/v4/public/r/styles/base-maia/navigation-menu-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/navigation-menu-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport Link from \"next/link\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from \"@/registry/bases/base/ui/navigation-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst components: { title: string; href: string; description: string }[] = [\n {\n title: \"Alert Dialog\",\n href: \"/docs/primitives/alert-dialog\",\n description:\n \"A modal dialog that interrupts the user with important content and expects a response.\",\n },\n {\n title: \"Hover Card\",\n href: \"/docs/primitives/hover-card\",\n description:\n \"For sighted users to preview content available behind a link.\",\n },\n {\n title: \"Progress\",\n href: \"/docs/primitives/progress\",\n description:\n \"Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.\",\n },\n {\n title: \"Scroll-area\",\n href: \"/docs/primitives/scroll-area\",\n description: \"Visually or semantically separates content.\",\n },\n {\n title: \"Tabs\",\n href: \"/docs/primitives/tabs\",\n description:\n \"A set of layered sections of content—known as tab panels—that are displayed one at a time.\",\n },\n {\n title: \"Tooltip\",\n href: \"/docs/primitives/tooltip\",\n description:\n \"A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.\",\n },\n]\n\nexport default function NavigationMenuExample() {\n return (\n \n \n \n )\n}\n\nfunction NavigationMenuBasic() {\n return (\n \n \n \n \n Getting started \n \n \n \n Re-usable components built with Tailwind CSS.\n \n \n How to install dependencies and structure your app.\n \n \n Styles for headings, paragraphs, lists...etc\n \n \n \n \n \n Components \n \n \n {components.map((component) => (\n \n {component.description}\n \n ))}\n \n \n \n \n With Icon \n \n \n \n \n }\n >\n \n Backlog\n \n \n }\n >\n \n To Do\n \n \n }\n >\n \n Done\n \n \n \n \n \n \n }\n className={navigationMenuTriggerStyle()}\n >\n Documentation\n \n \n \n \n \n )\n}\n\nfunction ListItem({\n title,\n children,\n href,\n ...props\n}: React.ComponentPropsWithoutRef<\"li\"> & { href: string }) {\n return (\n \n }>\n \n
{title}
\n
{children}
\n
\n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport Link from \"next/link\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from \"@/registry/bases/base/ui/navigation-menu\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst components: { title: string; href: string; description: string }[] = [\n {\n title: \"Alert Dialog\",\n href: \"/docs/primitives/alert-dialog\",\n description:\n \"A modal dialog that interrupts the user with important content and expects a response.\",\n },\n {\n title: \"Hover Card\",\n href: \"/docs/primitives/hover-card\",\n description:\n \"For sighted users to preview content available behind a link.\",\n },\n {\n title: \"Progress\",\n href: \"/docs/primitives/progress\",\n description:\n \"Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.\",\n },\n {\n title: \"Scroll-area\",\n href: \"/docs/primitives/scroll-area\",\n description: \"Visually or semantically separates content.\",\n },\n {\n title: \"Tabs\",\n href: \"/docs/primitives/tabs\",\n description:\n \"A set of layered sections of content—known as tab panels—that are displayed one at a time.\",\n },\n {\n title: \"Tooltip\",\n href: \"/docs/primitives/tooltip\",\n description:\n \"A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.\",\n },\n]\n\nexport default function NavigationMenuExample() {\n return (\n \n \n \n )\n}\n\nfunction NavigationMenuBasic() {\n return (\n \n \n \n \n Getting started \n \n \n \n Re-usable components built with Tailwind CSS.\n \n \n How to install dependencies and structure your app.\n \n \n Styles for headings, paragraphs, lists...etc\n \n \n \n \n \n Components \n \n \n {components.map((component) => (\n \n {component.description}\n \n ))}\n \n \n \n \n With Icon \n \n \n \n \n }\n >\n \n Backlog\n \n \n }\n >\n \n To Do\n \n \n }\n >\n \n Done\n \n \n \n \n \n \n }\n className={navigationMenuTriggerStyle()}\n >\n Documentation\n \n \n \n \n \n )\n}\n\nfunction ListItem({\n title,\n children,\n href,\n ...props\n}: React.ComponentPropsWithoutRef<\"li\"> & { href: string }) {\n return (\n \n }>\n \n
{title}
\n
{children}
\n
\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/navigation-menu.json b/apps/v4/public/r/styles/base-maia/navigation-menu.json
index 4d6c52b2f4..1b36e1263a 100644
--- a/apps/v4/public/r/styles/base-maia/navigation-menu.json
+++ b/apps/v4/public/r/styles/base-maia/navigation-menu.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/navigation-menu.tsx",
- "content": "import { NavigationMenu as NavigationMenuPrimitive } from \"@base-ui/react/navigation-menu\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction NavigationMenu({\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Root.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: NavigationMenuPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: NavigationMenuPrimitive.Item.Props) {\n return (\n \n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-2xl px-4.5 py-2.5 text-sm font-medium transition-all focus-visible:ring-[3px] focus-visible:outline-1 disabled:opacity-50 group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center disabled:pointer-events-none outline-none\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Trigger.Props) {\n return (\n \n {children}{\" \"}\n \n \n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: NavigationMenuPrimitive.Content.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuPositioner({\n className,\n side = \"bottom\",\n sideOffset = 8,\n align = \"start\",\n alignOffset = 0,\n ...props\n}: NavigationMenuPrimitive.Positioner.Props) {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: NavigationMenuPrimitive.Link.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: NavigationMenuPrimitive.Icon.Props) {\n return (\n \n
\n \n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuIndicator,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n NavigationMenuPositioner,\n}\n",
+ "content": "import { NavigationMenu as NavigationMenuPrimitive } from \"@base-ui/react/navigation-menu\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction NavigationMenu({\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Root.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: NavigationMenuPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: NavigationMenuPrimitive.Item.Props) {\n return (\n \n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-2xl px-4.5 py-2.5 text-sm font-medium transition-all focus-visible:ring-[3px] focus-visible:outline-1 disabled:opacity-50 group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center disabled:pointer-events-none outline-none\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: NavigationMenuPrimitive.Trigger.Props) {\n return (\n \n {children}{\" \"}\n \n \n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: NavigationMenuPrimitive.Content.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuPositioner({\n className,\n side = \"bottom\",\n sideOffset = 8,\n align = \"start\",\n alignOffset = 0,\n ...props\n}: NavigationMenuPrimitive.Positioner.Props) {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: NavigationMenuPrimitive.Link.Props) {\n return (\n \n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: NavigationMenuPrimitive.Icon.Props) {\n return (\n \n
\n \n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuIndicator,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n NavigationMenuPositioner,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/pagination.json b/apps/v4/public/r/styles/base-maia/pagination.json
index 969d609cfa..571b2869f9 100644
--- a/apps/v4/public/r/styles/base-maia/pagination.json
+++ b/apps/v4/public/r/styles/base-maia/pagination.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-maia/ui/pagination.tsx",
- "content": "import * as React from \"react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return \n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n \n }\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n Previous\n \n \n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n Next \n \n \n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n \n More pages \n \n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n}\n",
+ "content": "import * as React from \"react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return \n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n \n }\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n Previous\n \n \n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n Next \n \n \n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n \n More pages \n \n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/preview.json b/apps/v4/public/r/styles/base-maia/preview.json
index 95a434eba6..58d9966487 100644
--- a/apps/v4/public/r/styles/base-maia/preview.json
+++ b/apps/v4/public/r/styles/base-maia/preview.json
@@ -33,7 +33,7 @@
"files": [
{
"path": "registry/base-maia/blocks/preview.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useState } from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { ButtonGroup } from \"@/registry/bases/base/ui/button-group\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/bases/base/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"@/registry/bases/base/ui/sheet\"\nimport { Slider } from \"@/registry/bases/base/ui/slider\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { Switch } from \"@/registry/bases/base/ui/switch\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CoverExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction FieldExamples() {\n const [gpuCount, setGpuCount] = React.useState(8)\n const [value, setValue] = useState([200, 800])\n\n const handleGpuAdjustment = React.useCallback((adjustment: number) => {\n setGpuCount((prevCount) =>\n Math.max(1, Math.min(99, prevCount + adjustment))\n )\n }, [])\n\n const handleGpuInputChange = React.useCallback(\n (e: React.ChangeEvent) => {\n const value = parseInt(e.target.value, 10)\n if (!isNaN(value) && value >= 1 && value <= 99) {\n setGpuCount(value)\n }\n },\n []\n )\n\n return (\n \n \n \n \n Compute Environment \n \n Select the compute environment for your cluster.\n \n \n \n \n \n Kubernetes \n \n Run GPU workloads on a K8s configured cluster. This is the\n default.\n \n \n \n \n \n \n \n \n Virtual Machine \n \n Access a VM configured cluster to run workloads. (Coming\n soon)\n \n \n \n \n \n \n \n \n \n \n \n Number of GPUs\n \n You can add more later. \n \n \n \n handleGpuAdjustment(-1)}\n disabled={gpuCount <= 1}\n >\n \n \n handleGpuAdjustment(1)}\n disabled={gpuCount >= 99}\n >\n \n \n \n \n \n \n \n Wallpaper Tinting \n \n Allow the wallpaper to be tinted.\n \n \n \n \n \n \n \n \n \n I agree to the terms and conditions\n \n \n \n \n Price Range \n \n Set your budget range ($\n \n {value[0]}\n -{\" \"}\n {value[1]} ).\n \n setValue(val as number[])}\n max={1000}\n min={0}\n step={10}\n className=\"mt-2 w-full\"\n aria-label=\"Price Range\"\n />\n \n \n Submit \n \n Cancel\n \n \n \n \n \n )\n}\n\nfunction ButtonGroupExamples() {\n const [label, setLabel] = React.useState(\"personal\")\n\n return (\n \n \n
\n \n \n \n \n \n \n \n Archive\n \n \n Report\n \n \n \n \n Snooze\n \n \n \n }\n >\n \n \n \n \n \n \n Mark as Read\n \n \n \n Archive\n \n \n \n \n \n \n Snooze\n \n \n \n Add to Calendar\n \n \n \n Add to List\n \n \n \n \n Label As...\n \n \n \n \n \n \n Personal\n \n \n Work\n \n \n Other\n \n \n \n \n \n \n \n \n \n \n \n Trash\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n 1 \n 2 \n 3 \n \n \n
\n \n Follow \n \n }\n >\n \n \n \n \n Quick Actions \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Block User\n \n \n \n \n Conversation \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n Report Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n \n \n {\" \"}\n Copilot\n \n \n \n }\n >\n \n \n \n \n Agent Tasks \n \n Describe your task in natural language. Copilot will work\n in the background and open a pull request.\n \n \n \n \n
\n \n \n \n \n
\n
\n \n )\n}\n\nfunction InputGroupExamples() {\n const [isFavorite, setIsFavorite] = React.useState(false)\n const [voiceEnabled, setVoiceEnabled] = React.useState(false)\n\n return (\n \n \n
\n \n \n \n \n 12 results \n \n
\n \n \n https:// \n \n \n \n \n }\n >\n \n \n This is content in a tooltip. \n \n \n \n
\n \n Input Secure\n \n \n \n \n \n \n }\n >\n \n \n \n Your connection is not secure.
\n \n You should not enter any sensitive information on this site.\n
\n \n \n \n \n https://\n \n \n setIsFavorite(!isFavorite)}\n size=\"icon-xs\"\n aria-label=\"Favorite\"\n >\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n setVoiceEnabled(!voiceEnabled)}\n data-active={voiceEnabled}\n className=\"data-[active=true]:bg-primary data-[active=true]:text-primary-foreground\"\n aria-pressed={voiceEnabled}\n size=\"icon-xs\"\n aria-label=\"Voice Mode\"\n />\n }\n >\n \n \n Voice Mode \n \n \n \n \n \n
\n \n \n \n \n \n \n }\n >\n Auto\n \n \n \n Auto \n Agent \n Manual \n \n \n \n 52% used \n \n \n \n Send \n \n \n \n
\n \n )\n}\n\nfunction EmptyAvatarGroup() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n
\n }>\n Show Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n
\n }>\n Connect Mouse\n \n \n \n \n \n \n \n Allow accessory to connect?\n \n \n Do you want to allow the USB accessory to connect to this\n device?\n \n \n \n Don't allow \n Allow \n \n \n \n
\n \n \n \n )\n}\n\nfunction FormExample() {\n const monthItems = [\n { label: \"MM\", value: null },\n { label: \"01\", value: \"01\" },\n { label: \"02\", value: \"02\" },\n { label: \"03\", value: \"03\" },\n { label: \"04\", value: \"04\" },\n { label: \"05\", value: \"05\" },\n { label: \"06\", value: \"06\" },\n { label: \"07\", value: \"07\" },\n { label: \"08\", value: \"08\" },\n { label: \"09\", value: \"09\" },\n { label: \"10\", value: \"10\" },\n { label: \"11\", value: \"11\" },\n { label: \"12\", value: \"12\" },\n ]\n\n const yearItems = [\n { label: \"YYYY\", value: null },\n { label: \"2024\", value: \"2024\" },\n { label: \"2025\", value: \"2025\" },\n { label: \"2026\", value: \"2026\" },\n { label: \"2027\", value: \"2027\" },\n { label: \"2028\", value: \"2028\" },\n { label: \"2029\", value: \"2029\" },\n ]\n\n return (\n \n \n \n Payment Method \n \n All transactions are secure and encrypted\n \n \n \n \n \n \n \n \n \n Name on Card\n \n \n \n \n \n \n Card Number\n \n \n \n Enter your 16-digit number.\n \n \n \n CVV \n \n \n
\n \n \n \n Month\n \n \n \n \n \n \n \n {monthItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n Year\n \n \n \n \n \n \n \n {yearItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n \n \n Billing Address \n \n The billing address associated with your payment.\n \n \n \n \n \n Same as shipping address\n \n \n \n \n \n \n \n \n \n Comments\n \n \n \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst roleItems = [\n { label: \"Developer\", value: \"developer\" },\n { label: \"Designer\", value: \"designer\" },\n { label: \"Manager\", value: \"manager\" },\n { label: \"Other\", value: \"other\" },\n]\n\nfunction SmallFormExample() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n User Information \n Please fill in your details below \n \n \n }\n >\n \n More options \n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({\n ...notifications,\n sms: checked === true,\n })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n \n \n \n \n \n \n Name \n \n \n \n Role \n \n \n \n \n \n \n {roleItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n Framework\n \n \n \n \n No frameworks found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Comments \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n\nfunction ObservabilityCard() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n Create Query{\" \"}\n \n \n \n Warning\n \n \n \n \n )\n}\n\nfunction ItemExample() {\n return (\n \n \n - \n
\n Two-factor authentication \n \n Verify via email or phone number.\n \n \n \n \n Enable\n \n \n \n }>\n \n \n \n \n Your order has been shipped. \n \n \n
\n \n )\n}\n\nfunction BadgeExamples() {\n return (\n \n \n \n \n Syncing\n \n \n \n Updating\n \n \n \n Loading\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction EmptyWithSpinner() {\n return (\n \n \n \n \n \n \n Processing your request \n \n Please wait while we process your request. Do not refresh the page.\n \n \n \n \n Submit \n \n Cancel\n \n
\n \n \n \n )\n}\n\nconst SHEET_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const\n\nfunction SheetExample() {\n return (\n \n \n {SHEET_SIDES.map((side) => (\n
\n \n }\n >\n {side}\n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're\n done.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed\n do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation\n ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit\n esse cillum dolore eu fugiat nulla pariatur. Excepteur sint\n occaecat cupidatat non proident, sunt in culpa qui officia\n deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n Save changes \n }>\n Cancel\n \n \n \n \n ))}\n
\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { useState } from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { ButtonGroup } from \"@/registry/bases/base/ui/button-group\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\"\nimport {\n Combobox,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxInput,\n ComboboxItem,\n ComboboxList,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldTitle,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupText,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n RadioGroup,\n RadioGroupItem,\n} from \"@/registry/bases/base/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"@/registry/bases/base/ui/sheet\"\nimport { Slider } from \"@/registry/bases/base/ui/slider\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { Switch } from \"@/registry/bases/base/ui/switch\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CoverExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction FieldExamples() {\n const [gpuCount, setGpuCount] = React.useState(8)\n const [value, setValue] = useState([200, 800])\n\n const handleGpuAdjustment = React.useCallback((adjustment: number) => {\n setGpuCount((prevCount) =>\n Math.max(1, Math.min(99, prevCount + adjustment))\n )\n }, [])\n\n const handleGpuInputChange = React.useCallback(\n (e: React.ChangeEvent) => {\n const value = parseInt(e.target.value, 10)\n if (!isNaN(value) && value >= 1 && value <= 99) {\n setGpuCount(value)\n }\n },\n []\n )\n\n return (\n \n \n \n \n Compute Environment \n \n Select the compute environment for your cluster.\n \n \n \n \n \n Kubernetes \n \n Run GPU workloads on a K8s configured cluster. This is the\n default.\n \n \n \n \n \n \n \n \n Virtual Machine \n \n Access a VM configured cluster to run workloads. (Coming\n soon)\n \n \n \n \n \n \n \n \n \n \n \n Number of GPUs\n \n You can add more later. \n \n \n \n handleGpuAdjustment(-1)}\n disabled={gpuCount <= 1}\n >\n \n \n handleGpuAdjustment(1)}\n disabled={gpuCount >= 99}\n >\n \n \n \n \n \n \n \n Wallpaper Tinting \n \n Allow the wallpaper to be tinted.\n \n \n \n \n \n \n \n \n \n I agree to the terms and conditions\n \n \n \n \n Price Range \n \n Set your budget range ($\n \n {value[0]}\n -{\" \"}\n {value[1]} ).\n \n setValue(val as number[])}\n max={1000}\n min={0}\n step={10}\n className=\"mt-2 w-full\"\n aria-label=\"Price Range\"\n />\n \n \n Submit \n \n Cancel\n \n \n \n \n \n )\n}\n\nfunction ButtonGroupExamples() {\n const [label, setLabel] = React.useState(\"personal\")\n\n return (\n \n \n
\n \n \n \n \n \n \n \n Archive\n \n \n Report\n \n \n \n \n Snooze\n \n \n \n }\n >\n \n \n \n \n \n \n Mark as Read\n \n \n \n Archive\n \n \n \n \n \n \n Snooze\n \n \n \n Add to Calendar\n \n \n \n Add to List\n \n \n \n \n Label As...\n \n \n \n \n \n \n Personal\n \n \n Work\n \n \n Other\n \n \n \n \n \n \n \n \n \n \n \n Trash\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n 1 \n 2 \n 3 \n \n \n
\n \n Follow \n \n }\n >\n \n \n \n \n Quick Actions \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Block User\n \n \n \n \n Conversation \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n Report Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n \n \n {\" \"}\n Copilot\n \n \n \n }\n >\n \n \n \n \n Agent Tasks \n \n Describe your task in natural language. Copilot will work\n in the background and open a pull request.\n \n \n \n \n
\n \n \n \n \n
\n
\n \n )\n}\n\nfunction InputGroupExamples() {\n const [isFavorite, setIsFavorite] = React.useState(false)\n const [voiceEnabled, setVoiceEnabled] = React.useState(false)\n\n return (\n \n \n
\n \n \n \n \n 12 results \n \n
\n \n \n https:// \n \n \n \n \n }\n >\n \n \n This is content in a tooltip. \n \n \n \n
\n \n Input Secure\n \n \n \n \n \n \n }\n >\n \n \n \n Your connection is not secure.
\n \n You should not enter any sensitive information on this site.\n
\n \n \n \n \n https://\n \n \n setIsFavorite(!isFavorite)}\n size=\"icon-xs\"\n aria-label=\"Favorite\"\n >\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n setVoiceEnabled(!voiceEnabled)}\n data-active={voiceEnabled}\n className=\"data-[active=true]:bg-primary data-[active=true]:text-primary-foreground\"\n aria-pressed={voiceEnabled}\n size=\"icon-xs\"\n aria-label=\"Voice Mode\"\n />\n }\n >\n \n \n Voice Mode \n \n \n \n \n \n
\n \n \n \n \n \n \n }\n >\n Auto\n \n \n \n Auto \n Agent \n Manual \n \n \n \n 52% used \n \n \n \n Send \n \n \n \n
\n \n )\n}\n\nfunction EmptyAvatarGroup() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n
\n }>\n Show Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n
\n }>\n Connect Mouse\n \n \n \n \n \n \n \n Allow accessory to connect?\n \n \n Do you want to allow the USB accessory to connect to this\n device?\n \n \n \n Don't allow \n Allow \n \n \n \n
\n \n \n \n )\n}\n\nfunction FormExample() {\n const monthItems = [\n { label: \"MM\", value: null },\n { label: \"01\", value: \"01\" },\n { label: \"02\", value: \"02\" },\n { label: \"03\", value: \"03\" },\n { label: \"04\", value: \"04\" },\n { label: \"05\", value: \"05\" },\n { label: \"06\", value: \"06\" },\n { label: \"07\", value: \"07\" },\n { label: \"08\", value: \"08\" },\n { label: \"09\", value: \"09\" },\n { label: \"10\", value: \"10\" },\n { label: \"11\", value: \"11\" },\n { label: \"12\", value: \"12\" },\n ]\n\n const yearItems = [\n { label: \"YYYY\", value: null },\n { label: \"2024\", value: \"2024\" },\n { label: \"2025\", value: \"2025\" },\n { label: \"2026\", value: \"2026\" },\n { label: \"2027\", value: \"2027\" },\n { label: \"2028\", value: \"2028\" },\n { label: \"2029\", value: \"2029\" },\n ]\n\n return (\n \n \n \n Payment Method \n \n All transactions are secure and encrypted\n \n \n \n \n \n \n \n \n \n Name on Card\n \n \n \n \n \n \n Card Number\n \n \n \n Enter your 16-digit number.\n \n \n \n CVV \n \n \n
\n \n \n \n Month\n \n \n \n \n \n \n \n {monthItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n Year\n \n \n \n \n \n \n \n {yearItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n \n \n Billing Address \n \n The billing address associated with your payment.\n \n \n \n \n \n Same as shipping address\n \n \n \n \n \n \n \n \n \n Comments\n \n \n \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst roleItems = [\n { label: \"Developer\", value: \"developer\" },\n { label: \"Designer\", value: \"designer\" },\n { label: \"Manager\", value: \"manager\" },\n { label: \"Other\", value: \"other\" },\n]\n\nfunction SmallFormExample() {\n const [notifications, setNotifications] = React.useState({\n email: true,\n sms: false,\n push: true,\n })\n const [theme, setTheme] = React.useState(\"light\")\n\n return (\n \n \n \n User Information \n Please fill in your details below \n \n \n }\n >\n \n More options \n \n \n \n File \n \n \n New File\n ⌘N \n \n \n \n New Folder\n ⇧⌘N \n \n \n \n \n Open Recent\n \n \n \n \n Recent Projects \n \n \n Project Alpha\n \n \n \n Project Beta\n \n \n \n \n More Projects\n \n \n \n \n \n Project Gamma\n \n \n \n Project Delta\n \n \n \n \n \n \n \n \n \n Browse...\n \n \n \n \n \n \n \n \n Save\n ⌘S \n \n \n \n Export\n ⇧⌘E \n \n \n \n \n View \n \n setNotifications({\n ...notifications,\n email: checked === true,\n })\n }\n >\n \n Show Sidebar\n \n \n setNotifications({\n ...notifications,\n sms: checked === true,\n })\n }\n >\n \n Show Status Bar\n \n \n \n \n Theme\n \n \n \n \n Appearance \n \n \n \n Light\n \n \n \n Dark\n \n \n \n System\n \n \n \n \n \n \n \n \n \n \n \n Help & Support\n \n \n \n Documentation\n \n \n \n \n \n \n Sign Out\n ⇧⌘Q \n \n \n \n \n \n \n \n \n \n \n \n Name \n \n \n \n Role \n \n \n \n \n \n \n {roleItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n
\n \n \n Framework\n \n \n \n \n No frameworks found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Comments \n \n \n \n Submit \n \n Cancel\n \n \n \n \n \n \n \n )\n}\n\nfunction ObservabilityCard() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n Create Query{\" \"}\n \n \n \n Warning\n \n \n \n \n )\n}\n\nfunction ItemExample() {\n return (\n \n \n - \n
\n Two-factor authentication \n \n Verify via email or phone number.\n \n \n \n \n Enable\n \n \n \n }>\n \n \n \n \n Your order has been shipped. \n \n \n
\n \n )\n}\n\nfunction BadgeExamples() {\n return (\n \n \n \n \n Syncing\n \n \n \n Updating\n \n \n \n Loading\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction EmptyWithSpinner() {\n return (\n \n \n \n \n \n \n Processing your request \n \n Please wait while we process your request. Do not refresh the page.\n \n \n \n \n Submit \n \n Cancel\n \n
\n \n \n \n )\n}\n\nconst SHEET_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const\n\nfunction SheetExample() {\n return (\n \n \n {SHEET_SIDES.map((side) => (\n
\n \n }\n >\n {side}\n \n \n \n Edit profile \n \n Make changes to your profile here. Click save when you're\n done.\n \n \n \n {Array.from({ length: 10 }).map((_, index) => (\n
\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed\n do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation\n ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit\n esse cillum dolore eu fugiat nulla pariatur. Excepteur sint\n occaecat cupidatat non proident, sunt in culpa qui officia\n deserunt mollit anim id est laborum.\n
\n ))}\n
\n \n Save changes \n }>\n Cancel\n \n \n \n \n ))}\n
\n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/progress-example.json b/apps/v4/public/r/styles/base-maia/progress-example.json
index 7edf90a41e..c16926c1de 100644
--- a/apps/v4/public/r/styles/base-maia/progress-example.json
+++ b/apps/v4/public/r/styles/base-maia/progress-example.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-maia/examples/progress-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemGroup,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Progress,\n ProgressLabel,\n ProgressValue,\n} from \"@/registry/bases/base/ui/progress\"\nimport { Slider } from \"@/registry/bases/base/ui/slider\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ProgressExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction ProgressValues() {\n return (\n \n \n \n )\n}\n\nfunction ProgressWithLabel() {\n return (\n \n \n Upload progress \n \n \n \n )\n}\n\nfunction ProgressControlled() {\n const [value, setValue] = React.useState(50)\n\n return (\n \n \n
\n
setValue(value as number)}\n min={0}\n max={100}\n step={1}\n />\n \n \n )\n}\n\nfunction FileUploadList() {\n const files = React.useMemo(\n () => [\n {\n id: \"1\",\n name: \"document.pdf\",\n progress: 45,\n timeRemaining: \"2m 30s\",\n },\n {\n id: \"2\",\n name: \"presentation.pptx\",\n progress: 78,\n timeRemaining: \"45s\",\n },\n {\n id: \"3\",\n name: \"spreadsheet.xlsx\",\n progress: 12,\n timeRemaining: \"5m 12s\",\n },\n {\n id: \"4\",\n name: \"image.jpg\",\n progress: 100,\n timeRemaining: \"Complete\",\n },\n ],\n []\n )\n\n return (\n \n \n {files.map((file) => (\n - \n
\n \n \n \n {file.name} \n \n \n \n \n \n \n {file.timeRemaining}\n \n \n \n ))}\n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemGroup,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Progress,\n ProgressLabel,\n ProgressValue,\n} from \"@/registry/bases/base/ui/progress\"\nimport { Slider } from \"@/registry/bases/base/ui/slider\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ProgressExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction ProgressValues() {\n return (\n \n \n \n )\n}\n\nfunction ProgressWithLabel() {\n return (\n \n \n Upload progress \n \n \n \n )\n}\n\nfunction ProgressControlled() {\n const [value, setValue] = React.useState(50)\n\n return (\n \n \n
\n
setValue(value as number)}\n min={0}\n max={100}\n step={1}\n />\n \n \n )\n}\n\nfunction FileUploadList() {\n const files = React.useMemo(\n () => [\n {\n id: \"1\",\n name: \"document.pdf\",\n progress: 45,\n timeRemaining: \"2m 30s\",\n },\n {\n id: \"2\",\n name: \"presentation.pptx\",\n progress: 78,\n timeRemaining: \"45s\",\n },\n {\n id: \"3\",\n name: \"spreadsheet.xlsx\",\n progress: 12,\n timeRemaining: \"5m 12s\",\n },\n {\n id: \"4\",\n name: \"image.jpg\",\n progress: 100,\n timeRemaining: \"Complete\",\n },\n ],\n []\n )\n\n return (\n \n \n {files.map((file) => (\n - \n
\n \n \n \n {file.name} \n \n \n \n \n \n \n {file.timeRemaining}\n \n \n \n ))}\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/radio-group.json b/apps/v4/public/r/styles/base-maia/radio-group.json
index 602aaf1a35..c496c8122f 100644
--- a/apps/v4/public/r/styles/base-maia/radio-group.json
+++ b/apps/v4/public/r/styles/base-maia/radio-group.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/radio-group.tsx",
- "content": "\"use client\"\n\nimport { Radio as RadioPrimitive } from \"@base-ui/react/radio\"\nimport { RadioGroup as RadioGroupPrimitive } from \"@base-ui/react/radio-group\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction RadioGroup({ className, ...props }: RadioGroupPrimitive.Props) {\n return (\n \n )\n}\n\nfunction RadioGroupItem({ className, ...props }: RadioPrimitive.Root.Props) {\n return (\n \n \n \n \n \n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n",
+ "content": "\"use client\"\n\nimport { Radio as RadioPrimitive } from \"@base-ui/react/radio\"\nimport { RadioGroup as RadioGroupPrimitive } from \"@base-ui/react/radio-group\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction RadioGroup({ className, ...props }: RadioGroupPrimitive.Props) {\n return (\n \n )\n}\n\nfunction RadioGroupItem({ className, ...props }: RadioPrimitive.Root.Props) {\n return (\n \n \n \n \n \n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/select-example.json b/apps/v4/public/r/styles/base-maia/select-example.json
index c62ffad8f3..657ed8e555 100644
--- a/apps/v4/public/r/styles/base-maia/select-example.json
+++ b/apps/v4/public/r/styles/base-maia/select-example.json
@@ -15,7 +15,7 @@
"files": [
{
"path": "registry/base-maia/examples/select-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SelectExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction SelectBasic() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectWithIcons() {\n const items = [\n {\n label: (\n <>\n \n Chart Type\n >\n ),\n value: null,\n },\n {\n label: (\n <>\n \n Line\n >\n ),\n value: \"line\",\n },\n {\n label: (\n <>\n \n Bar\n >\n ),\n value: \"bar\",\n },\n {\n label: (\n <>\n \n Pie\n >\n ),\n value: \"pie\",\n },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n
\n \n )\n}\n\nfunction SelectWithGroups() {\n const fruits = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n const vegetables = [\n { label: \"Carrot\", value: \"carrot\" },\n { label: \"Broccoli\", value: \"broccoli\" },\n { label: \"Spinach\", value: \"spinach\" },\n ]\n const allItems = [\n { label: \"Select a fruit\", value: null },\n ...fruits,\n ...vegetables,\n ]\n return (\n \n \n \n \n \n \n \n Fruits \n {fruits.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n Vegetables \n {vegetables.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectLargeList() {\n const items = [\n { label: \"Select an item\", value: null },\n ...Array.from({ length: 100 }).map((_, i) => ({\n label: `Item ${i}`,\n value: `item-${i}`,\n })),\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectSizes() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n
\n \n )\n}\n\nfunction SelectWithButton() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n return (\n \n \n
\n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Submit\n \n
\n
\n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n Submit \n
\n
\n \n )\n}\n\nfunction SelectItemAligned() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\", disabled: true },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectWithField() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n Favorite Fruit \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Choose your favorite fruit from the list.\n \n \n \n )\n}\n\nfunction SelectInvalid() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Favorite Fruit \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n
\n \n )\n}\n\nfunction SelectInline() {\n const items = [\n { label: \"Filter\", value: null },\n { label: \"All\", value: \"all\" },\n { label: \"Active\", value: \"active\" },\n { label: \"Inactive\", value: \"inactive\" },\n ]\n return (\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Sort by \n Name \n Date \n Status \n \n
\n \n )\n}\n\nfunction SelectDisabled() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\", disabled: true },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nconst plans = [\n {\n name: \"Starter\",\n description: \"Perfect for individuals getting started.\",\n },\n {\n name: \"Professional\",\n description: \"Ideal for growing teams and businesses.\",\n },\n {\n name: \"Enterprise\",\n description: \"Advanced features for large organizations.\",\n },\n]\n\nfunction SelectPlan() {\n return (\n \n plan.name}\n >\n \n \n {(value: (typeof plans)[number]) => }\n \n \n \n \n {plans.map((plan) => (\n \n \n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectPlanItem({ plan }: { plan: (typeof plans)[number] }) {\n return (\n - \n
\n {plan.name} \n \n {plan.description}\n \n \n \n )\n}\n\nfunction SelectMultiple() {\n const items = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n { label: \"Strawberry\", value: \"strawberry\" },\n { label: \"Watermelon\", value: \"watermelon\" },\n ]\n return (\n \n \n \n \n {(value: string[]) => {\n if (value.length === 0) {\n return \"Select fruits\"\n }\n if (value.length === 1) {\n return items.find((item) => item.value === value[0])?.label\n }\n return `${value.length} fruits selected`\n }}\n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectInDialog() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Example \n \n Use the select below to choose a fruit.\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SelectExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction SelectBasic() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectWithIcons() {\n const items = [\n {\n label: (\n <>\n \n Chart Type\n >\n ),\n value: null,\n },\n {\n label: (\n <>\n \n Line\n >\n ),\n value: \"line\",\n },\n {\n label: (\n <>\n \n Bar\n >\n ),\n value: \"bar\",\n },\n {\n label: (\n <>\n \n Pie\n >\n ),\n value: \"pie\",\n },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n
\n \n )\n}\n\nfunction SelectWithGroups() {\n const fruits = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n const vegetables = [\n { label: \"Carrot\", value: \"carrot\" },\n { label: \"Broccoli\", value: \"broccoli\" },\n { label: \"Spinach\", value: \"spinach\" },\n ]\n const allItems = [\n { label: \"Select a fruit\", value: null },\n ...fruits,\n ...vegetables,\n ]\n return (\n \n \n \n \n \n \n \n Fruits \n {fruits.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n Vegetables \n {vegetables.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectLargeList() {\n const items = [\n { label: \"Select an item\", value: null },\n ...Array.from({ length: 100 }).map((_, i) => ({\n label: `Item ${i}`,\n value: `item-${i}`,\n })),\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectSizes() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n
\n \n )\n}\n\nfunction SelectWithButton() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n ]\n return (\n \n \n
\n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Submit\n \n
\n
\n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n Submit \n
\n
\n \n )\n}\n\nfunction SelectItemAligned() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\", disabled: true },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectWithField() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n Favorite Fruit \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Choose your favorite fruit from the list.\n \n \n \n )\n}\n\nfunction SelectInvalid() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Favorite Fruit \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n
\n \n )\n}\n\nfunction SelectInline() {\n const items = [\n { label: \"Filter\", value: null },\n { label: \"All\", value: \"all\" },\n { label: \"Active\", value: \"active\" },\n { label: \"Inactive\", value: \"inactive\" },\n ]\n return (\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Sort by \n Name \n Date \n Status \n \n
\n \n )\n}\n\nfunction SelectDisabled() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\", disabled: true },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nconst plans = [\n {\n name: \"Starter\",\n description: \"Perfect for individuals getting started.\",\n },\n {\n name: \"Professional\",\n description: \"Ideal for growing teams and businesses.\",\n },\n {\n name: \"Enterprise\",\n description: \"Advanced features for large organizations.\",\n },\n]\n\nfunction SelectPlan() {\n return (\n \n plan.name}\n >\n \n \n {(value: (typeof plans)[number]) => }\n \n \n \n \n {plans.map((plan) => (\n \n \n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectPlanItem({ plan }: { plan: (typeof plans)[number] }) {\n return (\n - \n
\n {plan.name} \n \n {plan.description}\n \n \n \n )\n}\n\nfunction SelectMultiple() {\n const items = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n { label: \"Strawberry\", value: \"strawberry\" },\n { label: \"Watermelon\", value: \"watermelon\" },\n ]\n return (\n \n \n \n \n {(value: string[]) => {\n if (value.length === 0) {\n return \"Select fruits\"\n }\n if (value.length === 1) {\n return items.find((item) => item.value === value[0])?.label\n }\n return `${value.length} fruits selected`\n }}\n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n )\n}\n\nfunction SelectInDialog() {\n const items = [\n { label: \"Select a fruit\", value: null },\n { label: \"Apple\", value: \"apple\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Grapes\", value: \"grapes\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n ]\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Example \n \n Use the select below to choose a fruit.\n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/select.json b/apps/v4/public/r/styles/base-maia/select.json
index b7834900cc..5c1607761c 100644
--- a/apps/v4/public/r/styles/base-maia/select.json
+++ b/apps/v4/public/r/styles/base-maia/select.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/select.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n \n )\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n \n {children}\n \n }\n />\n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >) {\n return (\n \n \n \n \n {children} \n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n \n \n {children}\n \n }\n >\n \n \n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n \n )\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n \n {children}\n \n }\n />\n \n )\n}\n\nfunction SelectContent({\n className,\n children,\n side = \"bottom\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"alignItemWithTrigger\"\n >) {\n return (\n \n \n \n \n {children} \n \n \n \n \n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: SelectPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: SelectPrimitive.Item.Props) {\n return (\n \n \n {children}\n \n }\n >\n \n \n \n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: SelectPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/sheet.json b/apps/v4/public/r/styles/base-maia/sheet.json
index 8c822ea7b1..e650f5c363 100644
--- a/apps/v4/public/r/styles/base-maia/sheet.json
+++ b/apps/v4/public/r/styles/base-maia/sheet.json
@@ -7,7 +7,7 @@
"files": [
{
"path": "registry/base-maia/ui/sheet.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return \n}\n\nfunction SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) {\n return \n}\n\nfunction SheetClose({ ...props }: SheetPrimitive.Close.Props) {\n return \n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return \n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n \n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n }\n >\n \n Close \n \n )}\n \n \n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) {\n return (\n \n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n \n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Sheet({ ...props }: SheetPrimitive.Root.Props) {\n return \n}\n\nfunction SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) {\n return \n}\n\nfunction SheetClose({ ...props }: SheetPrimitive.Close.Props) {\n return \n}\n\nfunction SheetPortal({ ...props }: SheetPrimitive.Portal.Props) {\n return \n}\n\nfunction SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) {\n return (\n \n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: SheetPrimitive.Popup.Props & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n \n \n \n {children}\n {showCloseButton && (\n \n }\n >\n \n Close \n \n )}\n \n \n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) {\n return (\n \n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: SheetPrimitive.Description.Props) {\n return (\n \n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/sidebar-example.json b/apps/v4/public/r/styles/base-maia/sidebar-example.json
index 91e72d6915..ac81f80cdb 100644
--- a/apps/v4/public/r/styles/base-maia/sidebar-example.json
+++ b/apps/v4/public/r/styles/base-maia/sidebar-example.json
@@ -13,7 +13,7 @@
"files": [
{
"path": "registry/base-maia/examples/sidebar-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarExample() {\n const data = {\n versions: [\"1.0.1\", \"1.1.0-alpha\", \"2.0.0-beta1\"],\n navMain: [\n {\n title: \"Getting Started\",\n url: \"#\",\n items: [\n {\n title: \"Installation\",\n url: \"#\",\n },\n {\n title: \"Project Structure\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Building Your Application\",\n url: \"#\",\n items: [\n {\n title: \"Routing\",\n url: \"#\",\n },\n {\n title: \"Data Fetching\",\n url: \"#\",\n isActive: true,\n },\n {\n title: \"Rendering\",\n url: \"#\",\n },\n {\n title: \"Caching\",\n url: \"#\",\n },\n {\n title: \"Styling\",\n url: \"#\",\n },\n {\n title: \"Optimizing\",\n url: \"#\",\n },\n {\n title: \"Configuring\",\n url: \"#\",\n },\n {\n title: \"Testing\",\n url: \"#\",\n },\n {\n title: \"Authentication\",\n url: \"#\",\n },\n {\n title: \"Deploying\",\n url: \"#\",\n },\n {\n title: \"Upgrading\",\n url: \"#\",\n },\n {\n title: \"Examples\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"API Reference\",\n url: \"#\",\n items: [\n {\n title: \"Components\",\n url: \"#\",\n },\n {\n title: \"File Conventions\",\n url: \"#\",\n },\n {\n title: \"Functions\",\n url: \"#\",\n },\n {\n title: \"next.config.js Options\",\n url: \"#\",\n },\n {\n title: \"CLI\",\n url: \"#\",\n },\n {\n title: \"Edge Runtime\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Architecture\",\n url: \"#\",\n items: [\n {\n title: \"Accessibility\",\n url: \"#\",\n },\n {\n title: \"Fast Refresh\",\n url: \"#\",\n },\n {\n title: \"Next.js Compiler\",\n url: \"#\",\n },\n {\n title: \"Supported Browsers\",\n url: \"#\",\n },\n {\n title: \"Turbopack\",\n url: \"#\",\n },\n ],\n },\n ],\n }\n\n const [selectedVersion, setSelectedVersion] = React.useState(data.versions[0])\n\n return (\n \n \n \n \n \n \n \n }\n >\n - \n
\n Documentation \n v{selectedVersion} \n \n \n \n \n \n \n \n {data.versions.map((version) => (\n setSelectedVersion(version)}\n >\n v{version}{\" \"}\n {version === selectedVersion && (\n \n )}\n \n ))}\n \n \n \n \n \n \n \n \n Search\n \n \n \n \n \n \n \n \n {data.navMain.map((item) => (\n \n {item.title} \n \n \n {item.items.map((subItem) => (\n \n }\n isActive={subItem.isActive}\n >\n {subItem.title}\n \n \n ))}\n \n \n \n ))}\n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarExample() {\n const data = {\n versions: [\"1.0.1\", \"1.1.0-alpha\", \"2.0.0-beta1\"],\n navMain: [\n {\n title: \"Getting Started\",\n url: \"#\",\n items: [\n {\n title: \"Installation\",\n url: \"#\",\n },\n {\n title: \"Project Structure\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Building Your Application\",\n url: \"#\",\n items: [\n {\n title: \"Routing\",\n url: \"#\",\n },\n {\n title: \"Data Fetching\",\n url: \"#\",\n isActive: true,\n },\n {\n title: \"Rendering\",\n url: \"#\",\n },\n {\n title: \"Caching\",\n url: \"#\",\n },\n {\n title: \"Styling\",\n url: \"#\",\n },\n {\n title: \"Optimizing\",\n url: \"#\",\n },\n {\n title: \"Configuring\",\n url: \"#\",\n },\n {\n title: \"Testing\",\n url: \"#\",\n },\n {\n title: \"Authentication\",\n url: \"#\",\n },\n {\n title: \"Deploying\",\n url: \"#\",\n },\n {\n title: \"Upgrading\",\n url: \"#\",\n },\n {\n title: \"Examples\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"API Reference\",\n url: \"#\",\n items: [\n {\n title: \"Components\",\n url: \"#\",\n },\n {\n title: \"File Conventions\",\n url: \"#\",\n },\n {\n title: \"Functions\",\n url: \"#\",\n },\n {\n title: \"next.config.js Options\",\n url: \"#\",\n },\n {\n title: \"CLI\",\n url: \"#\",\n },\n {\n title: \"Edge Runtime\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Architecture\",\n url: \"#\",\n items: [\n {\n title: \"Accessibility\",\n url: \"#\",\n },\n {\n title: \"Fast Refresh\",\n url: \"#\",\n },\n {\n title: \"Next.js Compiler\",\n url: \"#\",\n },\n {\n title: \"Supported Browsers\",\n url: \"#\",\n },\n {\n title: \"Turbopack\",\n url: \"#\",\n },\n ],\n },\n ],\n }\n\n const [selectedVersion, setSelectedVersion] = React.useState(data.versions[0])\n\n return (\n \n \n \n \n \n \n \n }\n >\n - \n
\n Documentation \n v{selectedVersion} \n \n \n \n \n \n \n \n {data.versions.map((version) => (\n setSelectedVersion(version)}\n >\n v{version}{\" \"}\n {version === selectedVersion && (\n \n )}\n \n ))}\n \n \n \n \n \n \n \n \n Search\n \n \n \n \n \n \n \n \n {data.navMain.map((item) => (\n \n {item.title} \n \n \n {item.items.map((subItem) => (\n \n }\n isActive={subItem.isActive}\n >\n {subItem.title}\n \n \n ))}\n \n \n \n ))}\n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/sidebar-floating-example.json b/apps/v4/public/r/styles/base-maia/sidebar-floating-example.json
index e9f3e5047a..b67b966e96 100644
--- a/apps/v4/public/r/styles/base-maia/sidebar-floating-example.json
+++ b/apps/v4/public/r/styles/base-maia/sidebar-floating-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-maia/examples/sidebar-floating-example.tsx",
- "content": "\"use client\"\n\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field } from \"@/registry/bases/base/ui/field\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarFloatingExample() {\n const data = {\n navMain: [\n {\n title: \"Getting Started\",\n url: \"#\",\n items: [\n {\n title: \"Installation\",\n url: \"#\",\n },\n {\n title: \"Project Structure\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Building Your Application\",\n url: \"#\",\n items: [\n {\n title: \"Routing\",\n url: \"#\",\n },\n {\n title: \"Data Fetching\",\n url: \"#\",\n isActive: true,\n },\n {\n title: \"Rendering\",\n url: \"#\",\n },\n {\n title: \"Caching\",\n url: \"#\",\n },\n {\n title: \"Styling\",\n url: \"#\",\n },\n {\n title: \"Optimizing\",\n url: \"#\",\n },\n {\n title: \"Configuring\",\n url: \"#\",\n },\n {\n title: \"Testing\",\n url: \"#\",\n },\n {\n title: \"Authentication\",\n url: \"#\",\n },\n {\n title: \"Deploying\",\n url: \"#\",\n },\n {\n title: \"Upgrading\",\n url: \"#\",\n },\n {\n title: \"Examples\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"API Reference\",\n url: \"#\",\n items: [\n {\n title: \"Components\",\n url: \"#\",\n },\n {\n title: \"File Conventions\",\n url: \"#\",\n },\n {\n title: \"Functions\",\n url: \"#\",\n },\n {\n title: \"next.config.js Options\",\n url: \"#\",\n },\n {\n title: \"CLI\",\n url: \"#\",\n },\n {\n title: \"Edge Runtime\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Architecture\",\n url: \"#\",\n items: [\n {\n title: \"Accessibility\",\n url: \"#\",\n },\n {\n title: \"Fast Refresh\",\n url: \"#\",\n },\n {\n title: \"Next.js Compiler\",\n url: \"#\",\n },\n {\n title: \"Supported Browsers\",\n url: \"#\",\n },\n {\n title: \"Turbopack\",\n url: \"#\",\n },\n ],\n },\n ],\n }\n\n return (\n \n \n \n \n \n }>\n - \n
\n Documentation \n v1.0.0 \n \n \n \n \n \n \n \n \n \n {data.navMain.map((item) => (\n \n \n \n }\n >\n {item.title}{\" \"}\n \n \n {item.items?.length ? (\n \n \n {item.items.map((subItem) => (\n }\n key={subItem.title}\n >\n {subItem.title}\n \n ))}\n \n \n ) : null}\n \n \n ))}\n \n \n \n \n \n \n \n \n Subscribe to our newsletter\n \n \n Opt-in to receive updates and news about the sidebar.\n \n \n \n \n \n \n \n Subscribe\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field } from \"@/registry/bases/base/ui/field\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarFloatingExample() {\n const data = {\n navMain: [\n {\n title: \"Getting Started\",\n url: \"#\",\n items: [\n {\n title: \"Installation\",\n url: \"#\",\n },\n {\n title: \"Project Structure\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Building Your Application\",\n url: \"#\",\n items: [\n {\n title: \"Routing\",\n url: \"#\",\n },\n {\n title: \"Data Fetching\",\n url: \"#\",\n isActive: true,\n },\n {\n title: \"Rendering\",\n url: \"#\",\n },\n {\n title: \"Caching\",\n url: \"#\",\n },\n {\n title: \"Styling\",\n url: \"#\",\n },\n {\n title: \"Optimizing\",\n url: \"#\",\n },\n {\n title: \"Configuring\",\n url: \"#\",\n },\n {\n title: \"Testing\",\n url: \"#\",\n },\n {\n title: \"Authentication\",\n url: \"#\",\n },\n {\n title: \"Deploying\",\n url: \"#\",\n },\n {\n title: \"Upgrading\",\n url: \"#\",\n },\n {\n title: \"Examples\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"API Reference\",\n url: \"#\",\n items: [\n {\n title: \"Components\",\n url: \"#\",\n },\n {\n title: \"File Conventions\",\n url: \"#\",\n },\n {\n title: \"Functions\",\n url: \"#\",\n },\n {\n title: \"next.config.js Options\",\n url: \"#\",\n },\n {\n title: \"CLI\",\n url: \"#\",\n },\n {\n title: \"Edge Runtime\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Architecture\",\n url: \"#\",\n items: [\n {\n title: \"Accessibility\",\n url: \"#\",\n },\n {\n title: \"Fast Refresh\",\n url: \"#\",\n },\n {\n title: \"Next.js Compiler\",\n url: \"#\",\n },\n {\n title: \"Supported Browsers\",\n url: \"#\",\n },\n {\n title: \"Turbopack\",\n url: \"#\",\n },\n ],\n },\n ],\n }\n\n return (\n \n \n \n \n \n }>\n - \n
\n Documentation \n v1.0.0 \n \n \n \n \n \n \n \n \n \n {data.navMain.map((item) => (\n \n \n \n }\n >\n {item.title}{\" \"}\n \n \n {item.items?.length ? (\n \n \n {item.items.map((subItem) => (\n }\n key={subItem.title}\n >\n {subItem.title}\n \n ))}\n \n \n ) : null}\n \n \n ))}\n \n \n \n \n \n \n \n \n Subscribe to our newsletter\n \n \n Opt-in to receive updates and news about the sidebar.\n \n \n \n \n \n \n \n Subscribe\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/sidebar-icon-example.json b/apps/v4/public/r/styles/base-maia/sidebar-icon-example.json
index 5e2da31ec5..c4400d404d 100644
--- a/apps/v4/public/r/styles/base-maia/sidebar-icon-example.json
+++ b/apps/v4/public/r/styles/base-maia/sidebar-icon-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-maia/examples/sidebar-icon-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarIconExample() {\n const data = {\n user: {\n name: \"shadcn\",\n email: \"m@example.com\",\n avatar: \"/avatars/shadcn.jpg\",\n },\n teams: [\n {\n name: \"Acme Inc\",\n plan: \"Enterprise\",\n },\n {\n name: \"Acme Corp.\",\n plan: \"Startup\",\n },\n {\n name: \"Evil Corp.\",\n plan: \"Free\",\n },\n ],\n navMain: [\n {\n title: \"Playground\",\n url: \"#\",\n icon: (\n \n ),\n isActive: true,\n items: [\n {\n title: \"History\",\n url: \"#\",\n },\n {\n title: \"Starred\",\n url: \"#\",\n },\n {\n title: \"Settings\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Models\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Genesis\",\n url: \"#\",\n },\n {\n title: \"Explorer\",\n url: \"#\",\n },\n {\n title: \"Quantum\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Documentation\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Introduction\",\n url: \"#\",\n },\n {\n title: \"Get Started\",\n url: \"#\",\n },\n {\n title: \"Tutorials\",\n url: \"#\",\n },\n {\n title: \"Changelog\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Settings\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"General\",\n url: \"#\",\n },\n {\n title: \"Team\",\n url: \"#\",\n },\n {\n title: \"Billing\",\n url: \"#\",\n },\n {\n title: \"Limits\",\n url: \"#\",\n },\n ],\n },\n ],\n projects: [\n {\n name: \"Design Engineering\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n name: \"Sales & Marketing\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n name: \"Travel\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n }\n\n const [activeTeam, setActiveTeam] = React.useState(data.teams[0])\n\n return (\n \n \n \n \n \n \n \n }\n >\n }\n nativeButton={false}\n className=\"size-8\"\n >\n \n \n \n \n \n \n \n \n {activeTeam.name}\n \n {activeTeam.plan} \n
\n \n \n \n \n Teams \n \n \n {data.teams.map((team) => (\n setActiveTeam(team)}\n >\n {team.name}\n \n ))}\n \n \n \n \n \n \n \n \n Platform \n \n {data.navMain.map((item) => (\n }\n >\n }\n >\n {item.icon}\n {item.title} \n \n \n \n \n {item.items?.map((subItem) => (\n \n }\n >\n {subItem.title}\n \n \n ))}\n \n \n \n ))}\n \n \n \n Projects \n \n {data.projects.map((item) => (\n \n }>\n {item.icon}\n {item.name}\n \n \n ))}\n \n \n \n \n \n \n \n \n }\n >\n \n \n CN \n \n \n \n {data.user.name}\n \n {data.user.email} \n
\n \n \n \n \n \n - \n
\n \n \n CN \n \n \n \n {data.user.name} \n {data.user.email} \n \n \n \n \n \n \n Account \n Billing \n Settings \n \n \n \n Log out \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarIconExample() {\n const data = {\n user: {\n name: \"shadcn\",\n email: \"m@example.com\",\n avatar: \"/avatars/shadcn.jpg\",\n },\n teams: [\n {\n name: \"Acme Inc\",\n plan: \"Enterprise\",\n },\n {\n name: \"Acme Corp.\",\n plan: \"Startup\",\n },\n {\n name: \"Evil Corp.\",\n plan: \"Free\",\n },\n ],\n navMain: [\n {\n title: \"Playground\",\n url: \"#\",\n icon: (\n \n ),\n isActive: true,\n items: [\n {\n title: \"History\",\n url: \"#\",\n },\n {\n title: \"Starred\",\n url: \"#\",\n },\n {\n title: \"Settings\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Models\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Genesis\",\n url: \"#\",\n },\n {\n title: \"Explorer\",\n url: \"#\",\n },\n {\n title: \"Quantum\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Documentation\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Introduction\",\n url: \"#\",\n },\n {\n title: \"Get Started\",\n url: \"#\",\n },\n {\n title: \"Tutorials\",\n url: \"#\",\n },\n {\n title: \"Changelog\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Settings\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"General\",\n url: \"#\",\n },\n {\n title: \"Team\",\n url: \"#\",\n },\n {\n title: \"Billing\",\n url: \"#\",\n },\n {\n title: \"Limits\",\n url: \"#\",\n },\n ],\n },\n ],\n projects: [\n {\n name: \"Design Engineering\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n name: \"Sales & Marketing\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n name: \"Travel\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n }\n\n const [activeTeam, setActiveTeam] = React.useState(data.teams[0])\n\n return (\n \n \n \n \n \n \n \n }\n >\n }\n nativeButton={false}\n className=\"size-8\"\n >\n \n \n \n \n \n \n \n \n {activeTeam.name}\n \n {activeTeam.plan} \n
\n \n \n \n \n Teams \n \n \n {data.teams.map((team) => (\n setActiveTeam(team)}\n >\n {team.name}\n \n ))}\n \n \n \n \n \n \n \n \n Platform \n \n {data.navMain.map((item) => (\n }\n >\n }\n >\n {item.icon}\n {item.title} \n \n \n \n \n {item.items?.map((subItem) => (\n \n }\n >\n {subItem.title}\n \n \n ))}\n \n \n \n ))}\n \n \n \n Projects \n \n {data.projects.map((item) => (\n \n }>\n {item.icon}\n {item.name}\n \n \n ))}\n \n \n \n \n \n \n \n \n }\n >\n \n \n CN \n \n \n \n {data.user.name}\n \n {data.user.email} \n
\n \n \n \n \n \n - \n
\n \n \n CN \n \n \n \n {data.user.name} \n {data.user.email} \n \n \n \n \n \n \n Account \n Billing \n Settings \n \n \n \n Log out \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/sidebar-inset-example.json b/apps/v4/public/r/styles/base-maia/sidebar-inset-example.json
index 53a6182305..eed0a9e2e4 100644
--- a/apps/v4/public/r/styles/base-maia/sidebar-inset-example.json
+++ b/apps/v4/public/r/styles/base-maia/sidebar-inset-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-maia/examples/sidebar-inset-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarInsetExample() {\n const data = {\n navMain: [\n {\n title: \"Dashboard\",\n url: \"#\",\n icon: (\n \n ),\n isActive: true,\n items: [\n {\n title: \"Overview\",\n url: \"#\",\n },\n {\n title: \"Analytics\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Analytics\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Reports\",\n url: \"#\",\n },\n {\n title: \"Metrics\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Orders\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"All Orders\",\n url: \"#\",\n },\n {\n title: \"Pending\",\n url: \"#\",\n },\n {\n title: \"Completed\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Products\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"All Products\",\n url: \"#\",\n },\n {\n title: \"Categories\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Invoices\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Customers\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Settings\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n navSecondary: [\n {\n title: \"Support\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Feedback\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n }\n\n return (\n \n \n \n \n Dashboard \n \n {data.navMain.map((item) => (\n }\n >\n }\n isActive={item.isActive}\n >\n {item.icon}\n {item.title} \n \n {item.items?.length ? (\n <>\n \n }\n >\n \n Toggle \n \n \n \n {item.items.map((subItem) => (\n \n }\n >\n {subItem.title}\n \n \n ))}\n \n \n >\n ) : null}\n \n ))}\n \n \n \n \n \n {data.navSecondary.map((item) => (\n \n } size=\"sm\">\n {item.icon}\n {item.title} \n \n \n ))}\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"@/registry/bases/base/ui/sidebar\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SidebarInsetExample() {\n const data = {\n navMain: [\n {\n title: \"Dashboard\",\n url: \"#\",\n icon: (\n \n ),\n isActive: true,\n items: [\n {\n title: \"Overview\",\n url: \"#\",\n },\n {\n title: \"Analytics\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Analytics\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"Reports\",\n url: \"#\",\n },\n {\n title: \"Metrics\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Orders\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"All Orders\",\n url: \"#\",\n },\n {\n title: \"Pending\",\n url: \"#\",\n },\n {\n title: \"Completed\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Products\",\n url: \"#\",\n icon: (\n \n ),\n items: [\n {\n title: \"All Products\",\n url: \"#\",\n },\n {\n title: \"Categories\",\n url: \"#\",\n },\n ],\n },\n {\n title: \"Invoices\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Customers\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Settings\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n navSecondary: [\n {\n title: \"Support\",\n url: \"#\",\n icon: (\n \n ),\n },\n {\n title: \"Feedback\",\n url: \"#\",\n icon: (\n \n ),\n },\n ],\n }\n\n return (\n \n \n \n \n Dashboard \n \n {data.navMain.map((item) => (\n }\n >\n }\n isActive={item.isActive}\n >\n {item.icon}\n {item.title} \n \n {item.items?.length ? (\n <>\n \n }\n >\n \n Toggle \n \n \n \n {item.items.map((subItem) => (\n \n }\n >\n {subItem.title}\n \n \n ))}\n \n \n >\n ) : null}\n \n ))}\n \n \n \n \n \n {data.navSecondary.map((item) => (\n \n } size=\"sm\">\n {item.icon}\n {item.title} \n \n \n ))}\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/sidebar.json b/apps/v4/public/r/styles/base-maia/sidebar.json
index bf0d87bba3..0712a5ea03 100644
--- a/apps/v4/public/r/styles/base-maia/sidebar.json
+++ b/apps/v4/public/r/styles/base-maia/sidebar.json
@@ -12,7 +12,7 @@
"files": [
{
"path": "registry/base-maia/ui/sidebar.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/registry/bases/base/ui/sheet\"\nimport { Skeleton } from \"@/registry/bases/base/ui/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { useIsMobile } from \"@/registry/new-york-v4/hooks/use-mobile\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offExamples\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offExamples\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n \n {children}\n
\n )\n }\n\n if (isMobile) {\n return (\n \n button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n \n Sidebar \n Displays the mobile sidebar. \n \n {children}
\n \n \n )\n }\n\n return (\n \n {/* This is what handles the sidebar gap on desktop */}\n
\n
\n
\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps) {\n const { toggleSidebar } = useSidebar()\n\n return (\n {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n \n Toggle Sidebar \n \n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n \n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n \n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & React.ComponentProps<\"div\">) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 flex shrink-0 items-center outline-hidden [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-label\",\n sidebar: \"group-label\",\n },\n })\n}\n\nfunction SidebarGroupAction({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"button\"> & React.ComponentProps<\"button\">) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4 flex aspect-square items-center justify-center outline-hidden transition-transform [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-action\",\n sidebar: \"group-action\",\n },\n })\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-lg p-2 text-left text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium peer/menu-button flex w-full items-center overflow-hidden outline-hidden group/menu-button disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline: \"bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-9 text-sm\",\n sm: \"h-8 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n render,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n isActive?: boolean\n tooltip?: string | React.ComponentProps\n } & VariantProps) {\n const { isMobile, state } = useSidebar()\n const comp = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(sidebarMenuButtonVariants({ variant, size }), className),\n },\n props\n ),\n render: !tooltip ? render : TooltipTrigger,\n state: {\n slot: \"sidebar-menu-button\",\n sidebar: \"menu-button\",\n size,\n active: isActive,\n },\n })\n\n if (!tooltip) {\n return comp\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n \n {comp}\n \n \n )\n}\n\nfunction SidebarMenuAction({\n className,\n render,\n showOnHover = false,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n showOnHover?: boolean\n }) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-md p-0 peer-data-[size=default]/menu-button:top-2 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4 flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0\",\n showOnHover &&\n \"peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-action\",\n sidebar: \"menu-action\",\n },\n })\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const [width] = React.useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n })\n\n return (\n \n {showIcon && (\n \n )}\n \n
\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuSubButton({\n render,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: useRender.ComponentProps<\"a\"> &\n React.ComponentProps<\"a\"> & {\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4 flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-sub-button\",\n sidebar: \"menu-sub-button\",\n size,\n active: isActive,\n },\n })\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Separator } from \"@/registry/bases/base/ui/separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/registry/bases/base/ui/sheet\"\nimport { Skeleton } from \"@/registry/bases/base/ui/skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { useIsMobile } from \"@/registry/new-york-v4/hooks/use-mobile\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offExamples\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offExamples\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n \n {children}\n
\n )\n }\n\n if (isMobile) {\n return (\n \n button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n \n Sidebar \n Displays the mobile sidebar. \n \n {children}
\n \n \n )\n }\n\n return (\n \n {/* This is what handles the sidebar gap on desktop */}\n
\n
\n
\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps) {\n const { toggleSidebar } = useSidebar()\n\n return (\n {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n \n Toggle Sidebar \n \n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n \n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n \n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & React.ComponentProps<\"div\">) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 flex shrink-0 items-center outline-hidden [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-label\",\n sidebar: \"group-label\",\n },\n })\n}\n\nfunction SidebarGroupAction({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"button\"> & React.ComponentProps<\"button\">) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4 flex aspect-square items-center justify-center outline-hidden transition-transform [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-action\",\n sidebar: \"group-action\",\n },\n })\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-lg p-2 text-left text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium peer/menu-button flex w-full items-center overflow-hidden outline-hidden group/menu-button disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline: \"bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-9 text-sm\",\n sm: \"h-8 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n render,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n isActive?: boolean\n tooltip?: string | React.ComponentProps\n } & VariantProps) {\n const { isMobile, state } = useSidebar()\n const comp = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(sidebarMenuButtonVariants({ variant, size }), className),\n },\n props\n ),\n render: !tooltip ? render : TooltipTrigger,\n state: {\n slot: \"sidebar-menu-button\",\n sidebar: \"menu-button\",\n size,\n active: isActive,\n },\n })\n\n if (!tooltip) {\n return comp\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n \n {comp}\n \n \n )\n}\n\nfunction SidebarMenuAction({\n className,\n render,\n showOnHover = false,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n showOnHover?: boolean\n }) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-md p-0 peer-data-[size=default]/menu-button:top-2 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4 flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0\",\n showOnHover &&\n \"peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-action\",\n sidebar: \"menu-action\",\n },\n })\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n
\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const [width] = React.useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n })\n\n return (\n \n {showIcon && (\n \n )}\n \n
\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction SidebarMenuSubButton({\n render,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: useRender.ComponentProps<\"a\"> &\n React.ComponentProps<\"a\"> & {\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4 flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-sub-button\",\n sidebar: \"menu-sub-button\",\n size,\n active: isActive,\n },\n })\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/sonner.json b/apps/v4/public/r/styles/base-maia/sonner.json
index 565ac5427b..ecc39e4556 100644
--- a/apps/v4/public/r/styles/base-maia/sonner.json
+++ b/apps/v4/public/r/styles/base-maia/sonner.json
@@ -8,7 +8,7 @@
"files": [
{
"path": "registry/base-maia/ui/sonner.tsx",
- "content": "\"use client\"\n\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n \n ),\n info: (\n \n ),\n warning: (\n \n ),\n error: (\n \n ),\n loading: (\n \n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n",
+ "content": "\"use client\"\n\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n \n ),\n info: (\n \n ),\n warning: (\n \n ),\n error: (\n \n ),\n loading: (\n \n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/spinner-example.json b/apps/v4/public/r/styles/base-maia/spinner-example.json
index 6297891b92..ef0f24fc67 100644
--- a/apps/v4/public/r/styles/base-maia/spinner-example.json
+++ b/apps/v4/public/r/styles/base-maia/spinner-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-maia/examples/spinner-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { Field, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SpinnerExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction SpinnerBasic() {\n return (\n \n \n \n \n
\n \n )\n}\n\nfunction SpinnerInButtons() {\n return (\n \n \n \n Submit\n \n \n Disabled\n \n \n Outline\n \n \n \n Loading... \n \n
\n \n )\n}\n\nfunction SpinnerInBadges() {\n return (\n \n \n \n \n Badge\n \n \n \n Badge\n \n \n \n Badge\n \n \n \n Badge\n \n
\n \n )\n}\n\nfunction SpinnerInInputGroup() {\n return (\n \n \n Input Group \n \n \n \n \n \n \n \n \n )\n}\n\nfunction SpinnerInEmpty() {\n return (\n \n \n \n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n nativeButton={false}\n className=\"text-muted-foreground\"\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { Field, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function SpinnerExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction SpinnerBasic() {\n return (\n \n \n \n \n
\n \n )\n}\n\nfunction SpinnerInButtons() {\n return (\n \n \n \n Submit\n \n \n Disabled\n \n \n Outline\n \n \n \n Loading... \n \n
\n \n )\n}\n\nfunction SpinnerInBadges() {\n return (\n \n \n \n \n Badge\n \n \n \n Badge\n \n \n \n Badge\n \n \n \n Badge\n \n
\n \n )\n}\n\nfunction SpinnerInInputGroup() {\n return (\n \n \n Input Group \n \n \n \n \n \n \n \n \n )\n}\n\nfunction SpinnerInEmpty() {\n return (\n \n \n \n \n \n \n No projects yet \n \n You haven't created any projects yet. Get started by creating\n your first project.\n \n \n \n \n } nativeButton={false}>\n Create project\n \n Import project \n
\n }\n nativeButton={false}\n className=\"text-muted-foreground\"\n >\n Learn more{\" \"}\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/spinner.json b/apps/v4/public/r/styles/base-maia/spinner.json
index 831eac2651..5b714ff138 100644
--- a/apps/v4/public/r/styles/base-maia/spinner.json
+++ b/apps/v4/public/r/styles/base-maia/spinner.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-maia/ui/spinner.tsx",
- "content": "import { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n \n )\n}\n\nexport { Spinner }\n",
+ "content": "import { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n \n )\n}\n\nexport { Spinner }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/table-example.json b/apps/v4/public/r/styles/base-maia/table-example.json
index fefd289f72..10e0416d49 100644
--- a/apps/v4/public/r/styles/base-maia/table-example.json
+++ b/apps/v4/public/r/styles/base-maia/table-example.json
@@ -13,7 +13,7 @@
"files": [
{
"path": "registry/base-maia/examples/table-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/bases/base/ui/table\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst invoices = [\n {\n invoice: \"INV001\",\n paymentStatus: \"Paid\",\n totalAmount: \"$250.00\",\n paymentMethod: \"Credit Card\",\n },\n {\n invoice: \"INV002\",\n paymentStatus: \"Pending\",\n totalAmount: \"$150.00\",\n paymentMethod: \"PayPal\",\n },\n {\n invoice: \"INV003\",\n paymentStatus: \"Unpaid\",\n totalAmount: \"$350.00\",\n paymentMethod: \"Bank Transfer\",\n },\n {\n invoice: \"INV004\",\n paymentStatus: \"Paid\",\n totalAmount: \"$450.00\",\n paymentMethod: \"Credit Card\",\n },\n {\n invoice: \"INV005\",\n paymentStatus: \"Paid\",\n totalAmount: \"$550.00\",\n paymentMethod: \"PayPal\",\n },\n {\n invoice: \"INV006\",\n paymentStatus: \"Pending\",\n totalAmount: \"$200.00\",\n paymentMethod: \"Bank Transfer\",\n },\n {\n invoice: \"INV007\",\n paymentStatus: \"Unpaid\",\n totalAmount: \"$300.00\",\n paymentMethod: \"Credit Card\",\n },\n]\n\nexport default function TableExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TableBasic() {\n return (\n \n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.slice(0, 3).map((invoice) => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n \n {invoice.totalAmount}\n \n \n ))}\n \n
\n \n )\n}\n\nfunction TableWithFooter() {\n return (\n \n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.slice(0, 3).map((invoice) => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n \n {invoice.totalAmount}\n \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n \n )\n}\n\nfunction TableSimple() {\n return (\n \n \n \n \n Name \n Email \n Role \n \n \n \n \n Sarah Chen \n sarah.chen@acme.com \n Admin \n \n \n Marc Rodriguez \n marcus.rodriguez@acme.com \n User \n \n \n Emily Watson \n emily.watson@acme.com \n User \n \n \n
\n \n )\n}\n\nfunction TableWithBadges() {\n return (\n \n \n \n \n Task \n Status \n Priority \n \n \n \n \n Design homepage \n \n \n Completed\n \n \n \n \n High\n \n \n \n \n Implement API \n \n \n In Progress\n \n \n \n \n Medium\n \n \n \n \n Write tests \n \n \n Pending\n \n \n \n \n Low\n \n \n \n \n
\n \n )\n}\n\nfunction TableWithActions() {\n return (\n \n \n \n \n Product \n Price \n Actions \n \n \n \n \n Wireless Mouse \n $29.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n Mechanical Keyboard \n $129.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n USB-C Hub \n $49.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n
\n \n )\n}\n\nconst people = [\n { value: \"sarah\", label: \"Sarah Chen\" },\n { value: \"marcus\", label: \"Marc Rodriguez\" },\n { value: \"emily\", label: \"Emily Watson\" },\n { value: \"david\", label: \"David Kim\" },\n]\n\nconst tasks = [\n {\n task: \"Design homepage\",\n assignee: \"sarah\",\n status: \"In Progress\",\n },\n {\n task: \"Implement API\",\n assignee: \"marcus\",\n status: \"Pending\",\n },\n {\n task: \"Write tests\",\n assignee: \"emily\",\n status: \"Not Started\",\n },\n]\n\nfunction TableWithSelect() {\n return (\n \n \n \n \n Task \n Assignee \n Status \n \n \n \n {tasks.map((item) => (\n \n {item.task} \n \n person.value === item.assignee\n )}\n itemToStringValue={(item) => {\n return item.value\n }}\n >\n \n \n \n \n \n {people.map((person) => (\n \n {person.label}\n \n ))}\n \n \n \n \n {item.status} \n \n ))}\n \n
\n \n )\n}\n\nfunction TableWithInput() {\n return (\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableFooter,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/registry/bases/base/ui/table\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst invoices = [\n {\n invoice: \"INV001\",\n paymentStatus: \"Paid\",\n totalAmount: \"$250.00\",\n paymentMethod: \"Credit Card\",\n },\n {\n invoice: \"INV002\",\n paymentStatus: \"Pending\",\n totalAmount: \"$150.00\",\n paymentMethod: \"PayPal\",\n },\n {\n invoice: \"INV003\",\n paymentStatus: \"Unpaid\",\n totalAmount: \"$350.00\",\n paymentMethod: \"Bank Transfer\",\n },\n {\n invoice: \"INV004\",\n paymentStatus: \"Paid\",\n totalAmount: \"$450.00\",\n paymentMethod: \"Credit Card\",\n },\n {\n invoice: \"INV005\",\n paymentStatus: \"Paid\",\n totalAmount: \"$550.00\",\n paymentMethod: \"PayPal\",\n },\n {\n invoice: \"INV006\",\n paymentStatus: \"Pending\",\n totalAmount: \"$200.00\",\n paymentMethod: \"Bank Transfer\",\n },\n {\n invoice: \"INV007\",\n paymentStatus: \"Unpaid\",\n totalAmount: \"$300.00\",\n paymentMethod: \"Credit Card\",\n },\n]\n\nexport default function TableExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TableBasic() {\n return (\n \n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.slice(0, 3).map((invoice) => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n \n {invoice.totalAmount}\n \n \n ))}\n \n
\n \n )\n}\n\nfunction TableWithFooter() {\n return (\n \n \n A list of your recent invoices. \n \n \n Invoice \n Status \n Method \n Amount \n \n \n \n {invoices.slice(0, 3).map((invoice) => (\n \n {invoice.invoice} \n {invoice.paymentStatus} \n {invoice.paymentMethod} \n \n {invoice.totalAmount}\n \n \n ))}\n \n \n \n Total \n $2,500.00 \n \n \n
\n \n )\n}\n\nfunction TableSimple() {\n return (\n \n \n \n \n Name \n Email \n Role \n \n \n \n \n Sarah Chen \n sarah.chen@acme.com \n Admin \n \n \n Marc Rodriguez \n marcus.rodriguez@acme.com \n User \n \n \n Emily Watson \n emily.watson@acme.com \n User \n \n \n
\n \n )\n}\n\nfunction TableWithBadges() {\n return (\n \n \n \n \n Task \n Status \n Priority \n \n \n \n \n Design homepage \n \n \n Completed\n \n \n \n \n High\n \n \n \n \n Implement API \n \n \n In Progress\n \n \n \n \n Medium\n \n \n \n \n Write tests \n \n \n Pending\n \n \n \n \n Low\n \n \n \n \n
\n \n )\n}\n\nfunction TableWithActions() {\n return (\n \n \n \n \n Product \n Price \n Actions \n \n \n \n \n Wireless Mouse \n $29.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n Mechanical Keyboard \n $129.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n USB-C Hub \n $49.99 \n \n \n \n }\n >\n \n Open menu \n \n \n Edit \n Duplicate \n \n \n Delete\n \n \n \n \n \n \n
\n \n )\n}\n\nconst people = [\n { value: \"sarah\", label: \"Sarah Chen\" },\n { value: \"marcus\", label: \"Marc Rodriguez\" },\n { value: \"emily\", label: \"Emily Watson\" },\n { value: \"david\", label: \"David Kim\" },\n]\n\nconst tasks = [\n {\n task: \"Design homepage\",\n assignee: \"sarah\",\n status: \"In Progress\",\n },\n {\n task: \"Implement API\",\n assignee: \"marcus\",\n status: \"Pending\",\n },\n {\n task: \"Write tests\",\n assignee: \"emily\",\n status: \"Not Started\",\n },\n]\n\nfunction TableWithSelect() {\n return (\n \n \n \n \n Task \n Assignee \n Status \n \n \n \n {tasks.map((item) => (\n \n {item.task} \n \n person.value === item.assignee\n )}\n itemToStringValue={(item) => {\n return item.value\n }}\n >\n \n \n \n \n \n {people.map((person) => (\n \n {person.label}\n \n ))}\n \n \n \n \n {item.status} \n \n ))}\n \n
\n \n )\n}\n\nfunction TableWithInput() {\n return (\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/tabs-example.json b/apps/v4/public/r/styles/base-maia/tabs-example.json
index 0bec718ff8..76c5daa934 100644
--- a/apps/v4/public/r/styles/base-maia/tabs-example.json
+++ b/apps/v4/public/r/styles/base-maia/tabs-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/tabs-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function TabsExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TabsBasic() {\n return (\n \n \n \n Home \n Settings \n \n \n \n )\n}\n\nfunction TabsLine() {\n return (\n \n \n \n Overview \n Analytics \n Reports \n \n \n \n )\n}\n\nfunction TabsVariantsComparison() {\n return (\n \n \n \n \n Overview \n Analytics \n \n \n \n \n Overview \n Analytics \n \n \n
\n \n )\n}\n\nfunction TabsDisabled() {\n return (\n \n \n \n Home \n \n Disabled\n \n \n \n \n )\n}\n\nfunction TabsWithIcons() {\n return (\n \n \n \n \n \n Preview\n \n \n \n Code\n \n \n \n \n )\n}\n\nfunction TabsIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TabsMultiple() {\n return (\n \n \n \n Overview \n Analytics \n Reports \n Settings \n \n \n \n )\n}\n\nfunction TabsWithContent() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure.\n \n \n Configure how you receive notifications and alerts.\n \n
\n \n \n )\n}\n\nfunction TabsLineWithContent() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure.\n \n \n Configure how you receive notifications and alerts.\n \n
\n \n \n )\n}\n\nfunction TabsLineDisabled() {\n return (\n \n \n \n Overview \n Analytics \n \n Reports\n \n \n \n \n )\n}\n\nfunction TabsWithDropdown() {\n return (\n \n \n \n \n Overview \n Analytics \n Reports \n \n \n }\n >\n \n More options \n \n \n Settings \n Export \n \n Archive \n \n \n
\n\n \n \n View your dashboard metrics and key performance indicators.\n \n \n Detailed analytics and insights about your data.\n \n \n Generate and view custom reports.\n \n
\n \n \n )\n}\n\nfunction TabsVertical() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure. Use a strong\n password with a mix of letters, numbers, and symbols.\n \n \n Configure how you receive notifications and alerts. Choose which\n types of notifications you want to receive and how you want to\n receive them.\n \n
\n \n \n )\n}\n\nfunction TabsWithInputAndButton() {\n return (\n \n \n \n
\n Overview \n Analytics \n \n
\n \n Action \n
\n
\n \n \n View your dashboard metrics and key performance indicators.\n \n \n Detailed analytics and insights about your data.\n \n \n Generate and view custom reports.\n \n
\n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function TabsExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TabsBasic() {\n return (\n \n \n \n Home \n Settings \n \n \n \n )\n}\n\nfunction TabsLine() {\n return (\n \n \n \n Overview \n Analytics \n Reports \n \n \n \n )\n}\n\nfunction TabsVariantsComparison() {\n return (\n \n \n \n \n Overview \n Analytics \n \n \n \n \n Overview \n Analytics \n \n \n
\n \n )\n}\n\nfunction TabsDisabled() {\n return (\n \n \n \n Home \n \n Disabled\n \n \n \n \n )\n}\n\nfunction TabsWithIcons() {\n return (\n \n \n \n \n \n Preview\n \n \n \n Code\n \n \n \n \n )\n}\n\nfunction TabsIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TabsMultiple() {\n return (\n \n \n \n Overview \n Analytics \n Reports \n Settings \n \n \n \n )\n}\n\nfunction TabsWithContent() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure.\n \n \n Configure how you receive notifications and alerts.\n \n
\n \n \n )\n}\n\nfunction TabsLineWithContent() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure.\n \n \n Configure how you receive notifications and alerts.\n \n
\n \n \n )\n}\n\nfunction TabsLineDisabled() {\n return (\n \n \n \n Overview \n Analytics \n \n Reports\n \n \n \n \n )\n}\n\nfunction TabsWithDropdown() {\n return (\n \n \n \n \n Overview \n Analytics \n Reports \n \n \n }\n >\n \n More options \n \n \n Settings \n Export \n \n Archive \n \n \n
\n\n \n \n View your dashboard metrics and key performance indicators.\n \n \n Detailed analytics and insights about your data.\n \n \n Generate and view custom reports.\n \n
\n \n \n )\n}\n\nfunction TabsVertical() {\n return (\n \n \n \n Account \n Password \n Notifications \n \n \n \n Manage your account preferences and profile information.\n \n \n Update your password to keep your account secure. Use a strong\n password with a mix of letters, numbers, and symbols.\n \n \n Configure how you receive notifications and alerts. Choose which\n types of notifications you want to receive and how you want to\n receive them.\n \n
\n \n \n )\n}\n\nfunction TabsWithInputAndButton() {\n return (\n \n \n \n
\n Overview \n Analytics \n \n
\n \n Action \n
\n
\n \n \n View your dashboard metrics and key performance indicators.\n \n \n Detailed analytics and insights about your data.\n \n \n Generate and view custom reports.\n \n
\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/toggle-example.json b/apps/v4/public/r/styles/base-maia/toggle-example.json
index 0555fc838b..bac2594d0a 100644
--- a/apps/v4/public/r/styles/base-maia/toggle-example.json
+++ b/apps/v4/public/r/styles/base-maia/toggle-example.json
@@ -9,7 +9,7 @@
"files": [
{
"path": "registry/base-maia/examples/toggle-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Toggle } from \"@/registry/bases/base/ui/toggle\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ToggleExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleBasic() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ToggleOutline() {\n return (\n \n \n \n \n Italic\n \n \n \n Bold\n \n
\n \n )\n}\n\nfunction ToggleSizes() {\n return (\n \n \n \n Small\n \n \n Default\n \n \n Large\n \n
\n \n )\n}\n\nfunction ToggleWithButtonText() {\n return (\n \n \n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n )\n}\n\nfunction ToggleWithButtonIcon() {\n return (\n \n \n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n )\n}\n\nfunction ToggleWithButtonIconText() {\n return (\n \n \n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n )\n}\n\nfunction ToggleDisabled() {\n return (\n \n \n \n Disabled\n \n \n Disabled\n \n
\n \n )\n}\n\nfunction ToggleWithIcon() {\n return (\n \n \n \n \n \n \n \n Bookmark\n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Toggle } from \"@/registry/bases/base/ui/toggle\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ToggleExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleBasic() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ToggleOutline() {\n return (\n \n \n \n \n Italic\n \n \n \n Bold\n \n
\n \n )\n}\n\nfunction ToggleSizes() {\n return (\n \n \n \n Small\n \n \n Default\n \n \n Large\n \n
\n \n )\n}\n\nfunction ToggleWithButtonText() {\n return (\n \n \n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n Button\n \n \n Toggle\n \n
\n
\n \n )\n}\n\nfunction ToggleWithButtonIcon() {\n return (\n \n \n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n
\n \n )\n}\n\nfunction ToggleWithButtonIconText() {\n return (\n \n \n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n \n Button\n \n \n \n Toggle\n \n
\n
\n \n )\n}\n\nfunction ToggleDisabled() {\n return (\n \n \n \n Disabled\n \n \n Disabled\n \n
\n \n )\n}\n\nfunction ToggleWithIcon() {\n return (\n \n \n \n \n \n \n \n Bookmark\n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/toggle-group-example.json b/apps/v4/public/r/styles/base-maia/toggle-group-example.json
index 6cb283f687..881f89f5cc 100644
--- a/apps/v4/public/r/styles/base-maia/toggle-group-example.json
+++ b/apps/v4/public/r/styles/base-maia/toggle-group-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/toggle-group-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from \"@/registry/bases/base/ui/toggle-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ToggleGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupBasic() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupOutline() {\n return (\n \n \n \n All\n \n \n Missed\n \n \n \n )\n}\n\nfunction ToggleGroupOutlineWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupSizes() {\n return (\n \n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n
\n \n )\n}\n\nfunction ToggleGroupSpacing() {\n return (\n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n )\n}\n\nfunction ToggleGroupWithIcons() {\n return (\n \n \n \n \n Star\n \n \n \n Heart\n \n \n \n Bookmark\n \n \n \n )\n}\n\nfunction ToggleGroupFilter() {\n return (\n \n \n \n All\n \n \n Active\n \n \n Completed\n \n \n Archived\n \n \n \n )\n}\n\nfunction ToggleGroupDateRange() {\n return (\n \n \n \n Today\n \n \n This Week\n \n \n This Month\n \n \n This Year\n \n \n \n )\n}\n\nfunction ToggleGroupSort() {\n return (\n \n \n \n \n Newest\n \n \n \n Oldest\n \n \n \n Popular\n \n \n \n )\n}\n\nfunction ToggleGroupWithInputAndSelect() {\n const items = [\n { label: \"All\", value: \"all\" },\n { label: \"Active\", value: \"active\" },\n { label: \"Archived\", value: \"archived\" },\n ]\n return (\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n Grid\n \n \n List\n \n \n
\n \n )\n}\n\nfunction ToggleGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupVerticalOutline() {\n return (\n \n \n \n All\n \n \n Active\n \n \n Completed\n \n \n Archived\n \n \n \n )\n}\n\nfunction ToggleGroupVerticalOutlineWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupVerticalWithSpacing() {\n return (\n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n ToggleGroup,\n ToggleGroupItem,\n} from \"@/registry/bases/base/ui/toggle-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ToggleGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupBasic() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupOutline() {\n return (\n \n \n \n All\n \n \n Missed\n \n \n \n )\n}\n\nfunction ToggleGroupOutlineWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupSizes() {\n return (\n \n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n
\n \n )\n}\n\nfunction ToggleGroupSpacing() {\n return (\n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n )\n}\n\nfunction ToggleGroupWithIcons() {\n return (\n \n \n \n \n Star\n \n \n \n Heart\n \n \n \n Bookmark\n \n \n \n )\n}\n\nfunction ToggleGroupFilter() {\n return (\n \n \n \n All\n \n \n Active\n \n \n Completed\n \n \n Archived\n \n \n \n )\n}\n\nfunction ToggleGroupDateRange() {\n return (\n \n \n \n Today\n \n \n This Week\n \n \n This Month\n \n \n This Year\n \n \n \n )\n}\n\nfunction ToggleGroupSort() {\n return (\n \n \n \n \n Newest\n \n \n \n Oldest\n \n \n \n Popular\n \n \n \n )\n}\n\nfunction ToggleGroupWithInputAndSelect() {\n const items = [\n { label: \"All\", value: \"all\" },\n { label: \"Active\", value: \"active\" },\n { label: \"Archived\", value: \"archived\" },\n ]\n return (\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n Grid\n \n \n List\n \n \n
\n \n )\n}\n\nfunction ToggleGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupVerticalOutline() {\n return (\n \n \n \n All\n \n \n Active\n \n \n Completed\n \n \n Archived\n \n \n \n )\n}\n\nfunction ToggleGroupVerticalOutlineWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ToggleGroupVerticalWithSpacing() {\n return (\n \n \n \n Top\n \n \n Bottom\n \n \n Left\n \n \n Right\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/tooltip-example.json b/apps/v4/public/r/styles/base-maia/tooltip-example.json
index 44f2fd5718..4d434d27f3 100644
--- a/apps/v4/public/r/styles/base-maia/tooltip-example.json
+++ b/apps/v4/public/r/styles/base-maia/tooltip-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-maia/examples/tooltip-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function TooltipExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TooltipBasic() {\n return (\n \n \n }>\n Show Tooltip\n \n \n Add to library
\n \n \n \n )\n}\n\nfunction TooltipSides() {\n return (\n \n \n {([\"top\", \"right\", \"bottom\", \"left\"] as const).map((side) => (\n
\n }\n >\n {side}\n \n \n Add to library
\n \n \n ))}\n
\n \n )\n}\n\nfunction TooltipWithIcon() {\n return (\n \n \n }>\n \n Info \n \n \n Additional information
\n \n \n \n )\n}\n\nfunction TooltipLongContent() {\n return (\n \n \n }>\n Show Tooltip\n \n \n To learn more about how this works, check out the docs. If you have\n any questions, please reach out to us.\n \n \n \n )\n}\n\nfunction TooltipDisabled() {\n return (\n \n \n }>\n \n Disabled\n \n \n \n This feature is currently unavailable
\n \n \n \n )\n}\n\nfunction TooltipWithKeyboard() {\n return (\n \n \n }>\n \n \n \n \n Save Changes S \n
\n \n \n \n )\n}\n\nfunction TooltipOnLink() {\n return (\n \n \n e.preventDefault()}\n />\n }\n >\n Learn more\n \n \n Click to read the documentation
\n \n \n \n )\n}\n\nfunction TooltipFormatted() {\n return (\n \n \n }>\n Status\n \n \n \n
Active
\n
Last updated 2 hours ago
\n
\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function TooltipExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction TooltipBasic() {\n return (\n \n \n }>\n Show Tooltip\n \n \n Add to library
\n \n \n \n )\n}\n\nfunction TooltipSides() {\n return (\n \n \n {([\"top\", \"right\", \"bottom\", \"left\"] as const).map((side) => (\n
\n }\n >\n {side}\n \n \n Add to library
\n \n \n ))}\n
\n \n )\n}\n\nfunction TooltipWithIcon() {\n return (\n \n \n }>\n \n Info \n \n \n Additional information
\n \n \n \n )\n}\n\nfunction TooltipLongContent() {\n return (\n \n \n }>\n Show Tooltip\n \n \n To learn more about how this works, check out the docs. If you have\n any questions, please reach out to us.\n \n \n \n )\n}\n\nfunction TooltipDisabled() {\n return (\n \n \n }>\n \n Disabled\n \n \n \n This feature is currently unavailable
\n \n \n \n )\n}\n\nfunction TooltipWithKeyboard() {\n return (\n \n \n }>\n \n \n \n \n Save Changes S \n
\n \n \n \n )\n}\n\nfunction TooltipOnLink() {\n return (\n \n \n e.preventDefault()}\n />\n }\n >\n Learn more\n \n \n Click to read the documentation
\n \n \n \n )\n}\n\nfunction TooltipFormatted() {\n return (\n \n \n }>\n Status\n \n \n \n
Active
\n
Last updated 2 hours ago
\n
\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-maia/vercel.json b/apps/v4/public/r/styles/base-maia/vercel.json
index 52822c74fd..1d9e689cfa 100644
--- a/apps/v4/public/r/styles/base-maia/vercel.json
+++ b/apps/v4/public/r/styles/base-maia/vercel.json
@@ -23,7 +23,7 @@
"files": [
{
"path": "registry/base-maia/blocks/vercel.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { Area, AreaChart } from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar } from \"@/registry/bases/base/ui/calendar\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function VercelBlock() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst items = [\n {\n name: \"Edge Requests\",\n value: \"$1.83K\",\n percentage: 67.34,\n },\n {\n name: \"Fast Data Transfer\",\n percentage: 52.18,\n value: \"$952.51\",\n },\n {\n name: \"Monitoring data points\",\n percentage: 89.42,\n value: \"$901.20\",\n },\n {\n name: \"Web Analytics Events\",\n percentage: 45.67,\n value: \"$603.71\",\n },\n {\n name: \"Edge Request CPU Duration\",\n percentage: 23.91,\n value: \"$4.65\",\n },\n {\n name: \"Fast Origin Transfer\",\n percentage: 38.75,\n value: \"$3.85\",\n },\n {\n name: \"ISR Reads\",\n percentage: 71.24,\n value: \"$2.86\",\n },\n {\n name: \"Function Invocations\",\n percentage: 15.83,\n value: \"$0.60\",\n },\n {\n name: \"ISR Writes\",\n percentage: 26.23,\n value: \"524.52K / 2M\",\n },\n {\n name: \"Function Duration\",\n percentage: 5.11,\n value: \"5.11 GB Hrs / 1K GB Hrs\",\n },\n]\n\nfunction UsageCard() {\n return (\n \n \n \n \n 5 days remaining in cycle\n \n \n \n \n {items.map((item) => (\n }\n >\n \n \n \n \n {item.name} \n \n \n \n {item.value}\n \n \n \n ))}\n \n \n \n \n )\n}\n\nfunction AnomalyAlert() {\n return (\n \n \n \n \n \n Get alerted for anomalies \n \n Automatically monitor your projects for anomalies and get\n notified.\n \n \n \n Upgrade to Observability Plus \n \n \n \n \n \n )\n}\n\nconst environments = [\n \"All Environments\",\n \"Production\",\n \"Preview\",\n \"Development\",\n \"Staging\",\n \"Test\",\n \"Other\",\n]\n\nconst statuses = [\n { name: \"Ready\", color: \"oklch(0.72 0.19 150)\" },\n { name: \"Error\", color: \"oklch(0.64 0.21 25)\" },\n { name: \"Building\", color: \"oklch(0.77 0.16 70)\" },\n { name: \"Queued\", color: \"oklch(0.72 0.00 0)\" },\n { name: \"Provisioning\", color: \"oklch(0.72 0.00 0)\" },\n { name: \"Canceled\", color: \"oklch(0.72 0.00 0)\" },\n]\n\nfunction DeploymentFilter() {\n const [selectedEnvironment, setSelectedEnvironment] = React.useState(\n environments[0]\n )\n const [selectedStatuses, setSelectedStatuses] = React.useState>(\n new Set(statuses.slice(0, 5).map((s) => s.name))\n )\n const [dateRange, setDateRange] = React.useState()\n\n const toggleStatus = (statusName: string) => {\n setSelectedStatuses((prev) => {\n const next = new Set(prev)\n if (next.has(statusName)) {\n next.delete(statusName)\n } else {\n next.add(statusName)\n }\n return next\n })\n }\n\n return (\n \n \n
\n }\n >\n \n {dateRange?.from ? (\n dateRange.to ? (\n <>\n {format(dateRange.from, \"LLL dd, y\")} -{\" \"}\n {format(dateRange.to, \"LLL dd, y\")}\n >\n ) : (\n format(dateRange.from, \"LLL dd, y\")\n )\n ) : (\n \"Select Date Range\"\n )}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n
\n }\n >\n {selectedEnvironment}\n \n \n \n {environments.map((environment) => (\n setSelectedEnvironment(environment)}\n data-active={selectedEnvironment === environment}\n >\n {environment}\n \n \n ))}\n \n \n
\n }\n >\n \n {statuses.map((status) => (\n
\n ))}\n
\n Status {selectedStatuses.size}/{statuses.length}\n \n \n \n {statuses.map((status) => {\n const isSelected = selectedStatuses.has(status.name)\n return (\n toggleStatus(status.name)}\n data-active={isSelected}\n style={\n {\n \"--color\": status.color,\n } as React.CSSProperties\n }\n >\n \n \n \n )\n })}\n \n \n
\n \n )\n}\n\nconst billingItems = [\n {\n month: \"November 2025\",\n invoiceDate: new Date(2025, 10, 5),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n {\n month: \"October 2025\",\n invoiceDate: new Date(2025, 9, 4),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n {\n month: \"September 2025\",\n invoiceDate: new Date(2025, 8, 4),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n]\n\nfunction BillingList() {\n return (\n \n \n {billingItems.map((item, index) => (\n \n - \n
\n \n {item.month}\n \n {item.status}\n \n \n \n Infrastructure usage & Vercel platform\n \n \n \n Total Due \n {item.amount} \n \n \n \n Invoiced {format(item.invoiceDate, \"d MMM yyyy\")}\n \n \n \n \n }\n >\n \n More options \n \n \n View invoice \n Download PDF \n \n Contact support \n \n \n \n \n \n Total Due \n {item.amount} \n \n \n \n Invoiced {format(item.invoiceDate, \"d MMM yyyy\")}\n \n \n \n \n {index !== billingItems.length - 1 && (\n \n )}\n \n ))}\n \n \n )\n}\n\nfunction CircularGauge({ percentage }: { percentage: number }) {\n const normalizedPercentage = Math.min(Math.max(percentage, 0), 100)\n const circumference = 2 * Math.PI * 42.5\n const strokePercent = (normalizedPercentage / 100) * circumference\n\n return (\n \n \n \n \n )\n}\n\nconst agentFeatures = [\n {\n id: \"code-reviews\",\n content: (\n <>\n Code reviews with full codebase context to catch{\" \"}\n hard-to-find bugs. bugs.\n >\n ),\n },\n {\n id: \"code-suggestions\",\n content: (\n <>\n Code suggestions validated in sandboxes before you\n merge.\n >\n ),\n },\n {\n id: \"root-cause\",\n content: (\n <>\n Root-cause analysis for production issues with\n deployment context.{\" \"}\n \n Requires Observability Plus\n \n >\n ),\n },\n]\n\nfunction ActivateAgentDialog() {\n return (\n \n \n }>\n Activate Agent\n \n \n \n Ship faster & safer with Vercel Agent \n \n Your use is subject to Vercel's{\" \"}\n Public Beta Agreement and{\" \"}\n AI Product Terms .\n \n \n \n
\n {agentFeatures.map((feature) => (\n - \n
\n \n \n \n \n {feature.content}\n \n \n \n ))}\n \n
\n \n \n Pro teams get $100 in Vercel Agent trial credit for 2 weeks.\n \n \n
\n \n }>\n Cancel\n \n Enable with $100 credits \n \n \n \n \n )\n}\n\nfunction ObservabilityCard() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n Create Query{\" \"}\n \n \n \n Warning\n \n \n \n \n )\n}\n\nfunction FeedbackForm() {\n return (\n \n \n \n \n \n \n Topic \n \n \n Select a topic\n \n AI \n \n Accounts and Access Controls\n \n \n Billing\n \n \n CDN (Firewall, Caching)\n \n \n CI/CD (Builds, Deployments, Environment Variables)\n \n \n Dashboard Interface (Navigation, UI Issues)\n \n \n Domains\n \n \n Frameworks\n \n \n Marketplace and Integrations\n \n \n Observability (Observability, Logs, Monitoring)\n \n \n Storage\n \n \n \n \n Feedback \n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst chartData = [\n { month: \"January\", visitors: 186 },\n { month: \"February\", visitors: 305 },\n { month: \"March\", visitors: 237 },\n { month: \"April\", visitors: 73 },\n { month: \"May\", visitors: 209 },\n { month: \"June\", visitors: 214 },\n]\n\nconst chartConfig = {\n visitors: {\n label: \"Visitors\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nfunction AnalyticsCard() {\n return (\n \n \n \n Analytics \n \n 418.2K Visitors +10% \n \n \n \n View Analytics\n \n \n \n \n \n }\n defaultIndex={2}\n />\n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { Area, AreaChart } from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar } from \"@/registry/bases/base/ui/calendar\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemActions,\n ItemContent,\n ItemDescription,\n ItemFooter,\n ItemGroup,\n ItemMedia,\n ItemSeparator,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n NativeSelect,\n NativeSelectOption,\n} from \"@/registry/bases/base/ui/native-select\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { Textarea } from \"@/registry/bases/base/ui/textarea\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function VercelBlock() {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst items = [\n {\n name: \"Edge Requests\",\n value: \"$1.83K\",\n percentage: 67.34,\n },\n {\n name: \"Fast Data Transfer\",\n percentage: 52.18,\n value: \"$952.51\",\n },\n {\n name: \"Monitoring data points\",\n percentage: 89.42,\n value: \"$901.20\",\n },\n {\n name: \"Web Analytics Events\",\n percentage: 45.67,\n value: \"$603.71\",\n },\n {\n name: \"Edge Request CPU Duration\",\n percentage: 23.91,\n value: \"$4.65\",\n },\n {\n name: \"Fast Origin Transfer\",\n percentage: 38.75,\n value: \"$3.85\",\n },\n {\n name: \"ISR Reads\",\n percentage: 71.24,\n value: \"$2.86\",\n },\n {\n name: \"Function Invocations\",\n percentage: 15.83,\n value: \"$0.60\",\n },\n {\n name: \"ISR Writes\",\n percentage: 26.23,\n value: \"524.52K / 2M\",\n },\n {\n name: \"Function Duration\",\n percentage: 5.11,\n value: \"5.11 GB Hrs / 1K GB Hrs\",\n },\n]\n\nfunction UsageCard() {\n return (\n \n \n \n \n 5 days remaining in cycle\n \n \n \n \n {items.map((item) => (\n }\n >\n \n \n \n \n {item.name} \n \n \n \n {item.value}\n \n \n \n ))}\n \n \n \n \n )\n}\n\nfunction AnomalyAlert() {\n return (\n \n \n \n \n \n Get alerted for anomalies \n \n Automatically monitor your projects for anomalies and get\n notified.\n \n \n \n Upgrade to Observability Plus \n \n \n \n \n \n )\n}\n\nconst environments = [\n \"All Environments\",\n \"Production\",\n \"Preview\",\n \"Development\",\n \"Staging\",\n \"Test\",\n \"Other\",\n]\n\nconst statuses = [\n { name: \"Ready\", color: \"oklch(0.72 0.19 150)\" },\n { name: \"Error\", color: \"oklch(0.64 0.21 25)\" },\n { name: \"Building\", color: \"oklch(0.77 0.16 70)\" },\n { name: \"Queued\", color: \"oklch(0.72 0.00 0)\" },\n { name: \"Provisioning\", color: \"oklch(0.72 0.00 0)\" },\n { name: \"Canceled\", color: \"oklch(0.72 0.00 0)\" },\n]\n\nfunction DeploymentFilter() {\n const [selectedEnvironment, setSelectedEnvironment] = React.useState(\n environments[0]\n )\n const [selectedStatuses, setSelectedStatuses] = React.useState>(\n new Set(statuses.slice(0, 5).map((s) => s.name))\n )\n const [dateRange, setDateRange] = React.useState()\n\n const toggleStatus = (statusName: string) => {\n setSelectedStatuses((prev) => {\n const next = new Set(prev)\n if (next.has(statusName)) {\n next.delete(statusName)\n } else {\n next.add(statusName)\n }\n return next\n })\n }\n\n return (\n \n \n
\n }\n >\n \n {dateRange?.from ? (\n dateRange.to ? (\n <>\n {format(dateRange.from, \"LLL dd, y\")} -{\" \"}\n {format(dateRange.to, \"LLL dd, y\")}\n >\n ) : (\n format(dateRange.from, \"LLL dd, y\")\n )\n ) : (\n \"Select Date Range\"\n )}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n
\n }\n >\n {selectedEnvironment}\n \n \n \n {environments.map((environment) => (\n setSelectedEnvironment(environment)}\n data-active={selectedEnvironment === environment}\n >\n {environment}\n \n \n ))}\n \n \n
\n }\n >\n \n {statuses.map((status) => (\n
\n ))}\n
\n Status {selectedStatuses.size}/{statuses.length}\n \n \n \n {statuses.map((status) => {\n const isSelected = selectedStatuses.has(status.name)\n return (\n toggleStatus(status.name)}\n data-active={isSelected}\n style={\n {\n \"--color\": status.color,\n } as React.CSSProperties\n }\n >\n \n \n \n )\n })}\n \n \n
\n \n )\n}\n\nconst billingItems = [\n {\n month: \"November 2025\",\n invoiceDate: new Date(2025, 10, 5),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n {\n month: \"October 2025\",\n invoiceDate: new Date(2025, 9, 4),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n {\n month: \"September 2025\",\n invoiceDate: new Date(2025, 8, 4),\n amount: \"$10.00\",\n status: \"Paid\" as const,\n },\n]\n\nfunction BillingList() {\n return (\n \n \n {billingItems.map((item, index) => (\n \n - \n
\n \n {item.month}\n \n {item.status}\n \n \n \n Infrastructure usage & Vercel platform\n \n \n \n Total Due \n {item.amount} \n \n \n \n Invoiced {format(item.invoiceDate, \"d MMM yyyy\")}\n \n \n \n \n }\n >\n \n More options \n \n \n View invoice \n Download PDF \n \n Contact support \n \n \n \n \n \n Total Due \n {item.amount} \n \n \n \n Invoiced {format(item.invoiceDate, \"d MMM yyyy\")}\n \n \n \n \n {index !== billingItems.length - 1 && (\n \n )}\n \n ))}\n \n \n )\n}\n\nfunction CircularGauge({ percentage }: { percentage: number }) {\n const normalizedPercentage = Math.min(Math.max(percentage, 0), 100)\n const circumference = 2 * Math.PI * 42.5\n const strokePercent = (normalizedPercentage / 100) * circumference\n\n return (\n \n \n \n \n )\n}\n\nconst agentFeatures = [\n {\n id: \"code-reviews\",\n content: (\n <>\n Code reviews with full codebase context to catch{\" \"}\n hard-to-find bugs. bugs.\n >\n ),\n },\n {\n id: \"code-suggestions\",\n content: (\n <>\n Code suggestions validated in sandboxes before you\n merge.\n >\n ),\n },\n {\n id: \"root-cause\",\n content: (\n <>\n Root-cause analysis for production issues with\n deployment context.{\" \"}\n \n Requires Observability Plus\n \n >\n ),\n },\n]\n\nfunction ActivateAgentDialog() {\n return (\n \n \n }>\n Activate Agent\n \n \n \n Ship faster & safer with Vercel Agent \n \n Your use is subject to Vercel's{\" \"}\n Public Beta Agreement and{\" \"}\n AI Product Terms .\n \n \n \n
\n {agentFeatures.map((feature) => (\n - \n
\n \n \n \n \n {feature.content}\n \n \n \n ))}\n \n
\n \n \n Pro teams get $100 in Vercel Agent trial credit for 2 weeks.\n \n \n
\n \n }>\n Cancel\n \n Enable with $100 credits \n \n \n \n \n )\n}\n\nfunction ObservabilityCard() {\n return (\n \n \n
\n \n \n Observability Plus is replacing Monitoring \n \n Switch to the improved way to explore your data, with natural\n language. Monitoring will no longer be available on the Pro plan in\n November, 2025\n \n \n \n \n Create Query{\" \"}\n \n \n \n Warning\n \n \n \n \n )\n}\n\nfunction FeedbackForm() {\n return (\n \n \n \n \n \n \n Topic \n \n \n Select a topic\n \n AI \n \n Accounts and Access Controls\n \n \n Billing\n \n \n CDN (Firewall, Caching)\n \n \n CI/CD (Builds, Deployments, Environment Variables)\n \n \n Dashboard Interface (Navigation, UI Issues)\n \n \n Domains\n \n \n Frameworks\n \n \n Marketplace and Integrations\n \n \n Observability (Observability, Logs, Monitoring)\n \n \n Storage\n \n \n \n \n Feedback \n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst chartData = [\n { month: \"January\", visitors: 186 },\n { month: \"February\", visitors: 305 },\n { month: \"March\", visitors: 237 },\n { month: \"April\", visitors: 73 },\n { month: \"May\", visitors: 209 },\n { month: \"June\", visitors: 214 },\n]\n\nconst chartConfig = {\n visitors: {\n label: \"Visitors\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nfunction AnalyticsCard() {\n return (\n \n \n \n Analytics \n \n 418.2K Visitors +10% \n \n \n \n View Analytics\n \n \n \n \n \n }\n defaultIndex={2}\n />\n \n \n \n \n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/accordion-example.json b/apps/v4/public/r/styles/base-mira/accordion-example.json
index 8aa785de4d..af401a1a66 100644
--- a/apps/v4/public/r/styles/base-mira/accordion-example.json
+++ b/apps/v4/public/r/styles/base-mira/accordion-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-mira/examples/accordion-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/bases/base/ui/accordion\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AccordionExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction AccordionBasic() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Is it accessible?\",\n content: \"Yes. It adheres to the WAI-ARIA design pattern.\",\n },\n {\n value: \"item-2\",\n trigger: \"Is it styled?\",\n content:\n \"Yes. It comes with default styles that matches the other components' aesthetic.\",\n },\n {\n value: \"item-3\",\n trigger: \"Is it animated?\",\n content:\n \"Yes. It's animated by default, but you can disable it if you prefer.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionMultiple() {\n const items = [\n {\n value: \"item-1\",\n trigger:\n \"What are the key considerations when implementing a comprehensive enterprise-level authentication system?\",\n content:\n \"Implementing a robust enterprise authentication system requires careful consideration of multiple factors. This includes secure password hashing and storage, multi-factor authentication (MFA) implementation, session management, OAuth2 and SSO integration, regular security audits, rate limiting to prevent brute force attacks, and maintaining detailed audit logs. Additionally, you'll need to consider scalability, performance impact, and compliance with relevant data protection regulations such as GDPR or HIPAA.\",\n },\n {\n value: \"item-2\",\n trigger:\n \"How does modern distributed system architecture handle eventual consistency and data synchronization across multiple regions?\",\n content:\n \"Modern distributed systems employ various strategies to maintain data consistency across regions. This often involves using techniques like CRDT (Conflict-Free Replicated Data Types), vector clocks, and gossip protocols. Systems might implement event sourcing patterns, utilize message queues for asynchronous updates, and employ sophisticated conflict resolution strategies. Popular solutions like Amazon's DynamoDB and Google's Spanner demonstrate different approaches to solving these challenges, balancing between consistency, availability, and partition tolerance as described in the CAP theorem.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionWithBorders() {\n const items = [\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content:\n \"We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members. There are no hidden fees or setup costs.\",\n },\n {\n value: \"security\",\n trigger: \"Is my data secure?\",\n content:\n \"Yes. We use end-to-end encryption, SOC 2 Type II compliance, and regular third-party security audits. All data is encrypted at rest and in transit using industry-standard protocols. We also offer optional two-factor authentication and single sign-on for enterprise customers.\",\n },\n {\n value: \"integration\",\n trigger: \"What integrations do you support?\",\n content: (\n <>\n \n We integrate with 500+ popular tools including Slack, Zapier,\n Salesforce, HubSpot, and more. You can also build custom\n integrations using our REST API and webhooks.{\" \"}\n
\n \n Our API documentation includes code examples in 10+ programming\n languages.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n\nfunction AccordionInCard() {\n const items = [\n {\n value: \"plans\",\n trigger: \"What subscription plans do you offer?\",\n content: (\n <>\n \n We offer three subscription tiers: Starter ($9/month), Professional\n ($29/month), and Enterprise ($99/month). Each plan includes\n increasing storage limits, API access, priority support, and team\n collaboration features.\n
\n \n Annual billing is available with a 20% discount. All\n plans include a 14-day free trial with no credit card required.\n
\n \n View plans\n \n \n >\n ),\n },\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content: (\n <>\n \n Billing occurs automatically at the start of each billing cycle. We\n accept all major credit cards, PayPal, and ACH transfers for\n enterprise customers.\n
\n \n You'll receive an invoice via email after each payment. You can\n update your payment method or billing information anytime in your\n account settings. Failed payments will trigger automated retry\n attempts and email notifications.\n
\n >\n ),\n },\n {\n value: \"upgrade\",\n trigger: \"Can I upgrade or downgrade my plan?\",\n content: (\n <>\n \n Yes, you can change your plan at any time. When upgrading,\n you'll be charged a prorated amount for the remainder of your\n billing cycle and immediately gain access to new features.\n
\n \n When downgrading, the change takes effect at the end of your current\n billing period, and you'll retain access to premium features\n until then. No refunds are provided for downgrades.\n
\n >\n ),\n },\n {\n value: \"cancel\",\n trigger: \"How do I cancel my subscription?\",\n content: (\n <>\n \n You can cancel your subscription anytime from your account settings.\n There are no cancellation fees or penalties. Your access will\n continue until the end of your current billing period.\n
\n \n After cancellation, your data is retained for 30 days in case you\n want to reactivate. You can export all your data before or after\n canceling. We'd love to hear your feedback about why\n you're leaving.\n
\n >\n ),\n },\n {\n value: \"refund\",\n trigger: \"What is your refund policy?\",\n content: (\n <>\n \n We offer a 30-day money-back guarantee for new subscriptions. If\n you're not satisfied within the first 30 days, contact our\n support team for a full refund.\n
\n \n After 30 days, we don't provide refunds for partial billing\n periods, but you can cancel anytime to avoid future charges.\n Enterprise customers have custom refund terms outlined in their\n contracts.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n \n Subscription & Billing \n \n Common questions about your account, plans, and payments\n \n \n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n \n \n )\n}\n\nfunction AccordionWithDisabled() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Can I access my account history?\",\n content:\n \"Yes, you can view your complete account history including all transactions, plan changes, and support tickets in the Account History section of your dashboard.\",\n disabled: false,\n },\n {\n value: \"item-2\",\n trigger: \"Premium feature information\",\n content:\n \"This section contains information about premium features. Upgrade your plan to access this content.\",\n disabled: true,\n },\n {\n value: \"item-3\",\n trigger: \"How do I update my email address?\",\n content:\n \"You can update your email address in your account settings. You'll receive a verification email at your new address to confirm the change.\",\n disabled: false,\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/registry/bases/base/ui/accordion\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AccordionExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction AccordionBasic() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Is it accessible?\",\n content: \"Yes. It adheres to the WAI-ARIA design pattern.\",\n },\n {\n value: \"item-2\",\n trigger: \"Is it styled?\",\n content:\n \"Yes. It comes with default styles that matches the other components' aesthetic.\",\n },\n {\n value: \"item-3\",\n trigger: \"Is it animated?\",\n content:\n \"Yes. It's animated by default, but you can disable it if you prefer.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionMultiple() {\n const items = [\n {\n value: \"item-1\",\n trigger:\n \"What are the key considerations when implementing a comprehensive enterprise-level authentication system?\",\n content:\n \"Implementing a robust enterprise authentication system requires careful consideration of multiple factors. This includes secure password hashing and storage, multi-factor authentication (MFA) implementation, session management, OAuth2 and SSO integration, regular security audits, rate limiting to prevent brute force attacks, and maintaining detailed audit logs. Additionally, you'll need to consider scalability, performance impact, and compliance with relevant data protection regulations such as GDPR or HIPAA.\",\n },\n {\n value: \"item-2\",\n trigger:\n \"How does modern distributed system architecture handle eventual consistency and data synchronization across multiple regions?\",\n content:\n \"Modern distributed systems employ various strategies to maintain data consistency across regions. This often involves using techniques like CRDT (Conflict-Free Replicated Data Types), vector clocks, and gossip protocols. Systems might implement event sourcing patterns, utilize message queues for asynchronous updates, and employ sophisticated conflict resolution strategies. Popular solutions like Amazon's DynamoDB and Google's Spanner demonstrate different approaches to solving these challenges, balancing between consistency, availability, and partition tolerance as described in the CAP theorem.\",\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n )\n}\n\nfunction AccordionWithBorders() {\n const items = [\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content:\n \"We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members. There are no hidden fees or setup costs.\",\n },\n {\n value: \"security\",\n trigger: \"Is my data secure?\",\n content:\n \"Yes. We use end-to-end encryption, SOC 2 Type II compliance, and regular third-party security audits. All data is encrypted at rest and in transit using industry-standard protocols. We also offer optional two-factor authentication and single sign-on for enterprise customers.\",\n },\n {\n value: \"integration\",\n trigger: \"What integrations do you support?\",\n content: (\n <>\n \n We integrate with 500+ popular tools including Slack, Zapier,\n Salesforce, HubSpot, and more. You can also build custom\n integrations using our REST API and webhooks.{\" \"}\n
\n \n Our API documentation includes code examples in 10+ programming\n languages.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n\nfunction AccordionInCard() {\n const items = [\n {\n value: \"plans\",\n trigger: \"What subscription plans do you offer?\",\n content: (\n <>\n \n We offer three subscription tiers: Starter ($9/month), Professional\n ($29/month), and Enterprise ($99/month). Each plan includes\n increasing storage limits, API access, priority support, and team\n collaboration features.\n
\n \n Annual billing is available with a 20% discount. All\n plans include a 14-day free trial with no credit card required.\n
\n \n View plans\n \n \n >\n ),\n },\n {\n value: \"billing\",\n trigger: \"How does billing work?\",\n content: (\n <>\n \n Billing occurs automatically at the start of each billing cycle. We\n accept all major credit cards, PayPal, and ACH transfers for\n enterprise customers.\n
\n \n You'll receive an invoice via email after each payment. You can\n update your payment method or billing information anytime in your\n account settings. Failed payments will trigger automated retry\n attempts and email notifications.\n
\n >\n ),\n },\n {\n value: \"upgrade\",\n trigger: \"Can I upgrade or downgrade my plan?\",\n content: (\n <>\n \n Yes, you can change your plan at any time. When upgrading,\n you'll be charged a prorated amount for the remainder of your\n billing cycle and immediately gain access to new features.\n
\n \n When downgrading, the change takes effect at the end of your current\n billing period, and you'll retain access to premium features\n until then. No refunds are provided for downgrades.\n
\n >\n ),\n },\n {\n value: \"cancel\",\n trigger: \"How do I cancel my subscription?\",\n content: (\n <>\n \n You can cancel your subscription anytime from your account settings.\n There are no cancellation fees or penalties. Your access will\n continue until the end of your current billing period.\n
\n \n After cancellation, your data is retained for 30 days in case you\n want to reactivate. You can export all your data before or after\n canceling. We'd love to hear your feedback about why\n you're leaving.\n
\n >\n ),\n },\n {\n value: \"refund\",\n trigger: \"What is your refund policy?\",\n content: (\n <>\n \n We offer a 30-day money-back guarantee for new subscriptions. If\n you're not satisfied within the first 30 days, contact our\n support team for a full refund.\n
\n \n After 30 days, we don't provide refunds for partial billing\n periods, but you can cancel anytime to avoid future charges.\n Enterprise customers have custom refund terms outlined in their\n contracts.\n
\n >\n ),\n },\n ]\n\n return (\n \n \n \n Subscription & Billing \n \n Common questions about your account, plans, and payments\n \n \n \n \n {items.map((item) => (\n \n {item.trigger} \n {item.content} \n \n ))}\n \n \n \n \n )\n}\n\nfunction AccordionWithDisabled() {\n const items = [\n {\n value: \"item-1\",\n trigger: \"Can I access my account history?\",\n content:\n \"Yes, you can view your complete account history including all transactions, plan changes, and support tickets in the Account History section of your dashboard.\",\n disabled: false,\n },\n {\n value: \"item-2\",\n trigger: \"Premium feature information\",\n content:\n \"This section contains information about premium features. Upgrade your plan to access this content.\",\n disabled: true,\n },\n {\n value: \"item-3\",\n trigger: \"How do I update my email address?\",\n content:\n \"You can update your email address in your account settings. You'll receive a verification email at your new address to confirm the change.\",\n disabled: false,\n },\n ]\n\n return (\n \n \n {items.map((item) => (\n \n \n {item.trigger}\n \n \n {item.content}\n \n \n ))}\n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/accordion.json b/apps/v4/public/r/styles/base-mira/accordion.json
index edd46233be..58fb5dcfef 100644
--- a/apps/v4/public/r/styles/base-mira/accordion.json
+++ b/apps/v4/public/r/styles/base-mira/accordion.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-mira/ui/accordion.tsx",
- "content": "\"use client\"\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n \n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n \n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n \n \n {children}\n \n \n \n \n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n \n \n {children}\n
\n \n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n",
+ "content": "\"use client\"\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n \n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n \n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n \n \n {children}\n \n \n \n \n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n \n \n {children}\n
\n \n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/alert-dialog-example.json b/apps/v4/public/r/styles/base-mira/alert-dialog-example.json
index 21de4736e7..eea9a1c2a1 100644
--- a/apps/v4/public/r/styles/base-mira/alert-dialog-example.json
+++ b/apps/v4/public/r/styles/base-mira/alert-dialog-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-mira/examples/alert-dialog-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertDialogExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction AlertDialogBasic() {\n return (\n \n \n Default}\n />\n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmall() {\n return (\n \n \n Small} />\n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogWithMedia() {\n return (\n \n \n Default (Media)}\n />\n \n \n \n \n \n Are you absolutely sure? \n \n This will permanently delete your account and remove your data\n from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmallWithMedia() {\n return (\n \n \n Small (Media)}\n />\n\n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogDestructive() {\n return (\n \n \n Delete Chat}\n />\n \n \n \n \n \n Delete chat? \n \n This will permanently delete this chat conversation. View{\" \"}\n Settings delete any memories saved during this\n chat.\n \n \n \n Cancel \n Delete \n \n \n \n \n )\n}\n\nfunction AlertDialogInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Alert Dialog Example \n \n Click the button below to open an alert dialog.\n \n \n \n \n }>\n Open Alert Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertDialogExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction AlertDialogBasic() {\n return (\n \n \n Default}\n />\n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete your\n account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmall() {\n return (\n \n \n Small} />\n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogWithMedia() {\n return (\n \n \n Default (Media)}\n />\n \n \n \n \n \n Are you absolutely sure? \n \n This will permanently delete your account and remove your data\n from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n )\n}\n\nfunction AlertDialogSmallWithMedia() {\n return (\n \n \n Small (Media)}\n />\n\n \n \n \n \n \n Allow accessory to connect? \n \n Do you want to allow the USB accessory to connect to this device?\n \n \n \n Don't allow \n Allow \n \n \n \n \n )\n}\n\nfunction AlertDialogDestructive() {\n return (\n \n \n Delete Chat}\n />\n \n \n \n \n \n Delete chat? \n \n This will permanently delete this chat conversation. View{\" \"}\n Settings delete any memories saved during this\n chat.\n \n \n \n Cancel \n Delete \n \n \n \n \n )\n}\n\nfunction AlertDialogInDialog() {\n return (\n \n \n }>\n Open Dialog\n \n \n \n Alert Dialog Example \n \n Click the button below to open an alert dialog.\n \n \n \n \n }>\n Open Alert Dialog\n \n \n \n Are you absolutely sure? \n \n This action cannot be undone. This will permanently delete\n your account and remove your data from our servers.\n \n \n \n Cancel \n Continue \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/alert-example.json b/apps/v4/public/r/styles/base-mira/alert-example.json
index f0d061046e..797ba16490 100644
--- a/apps/v4/public/r/styles/base-mira/alert-example.json
+++ b/apps/v4/public/r/styles/base-mira/alert-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-mira/examples/alert-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Alert,\n AlertAction,\n AlertDescription,\n AlertTitle,\n} from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction AlertExample1() {\n return (\n \n \n
\n Success! Your changes have been saved. \n \n
\n Success! Your changes have been saved. \n \n This is an alert with title and description.\n \n \n
\n \n This one has a description only. No title. No icon.\n \n \n
\n \n )\n}\n\nfunction AlertExample2() {\n return (\n \n \n
\n \n \n Let's try one with icon, title and a link .\n \n \n
\n \n \n This one has an icon and a description only. No title.{\" \"}\n But it has a link and a second link .\n \n \n\n
\n \n Success! Your changes have been saved \n \n This is an alert with icon, title and description.\n \n \n
\n \n \n This is a very long alert title that demonstrates how the component\n handles extended text content and potentially wraps across multiple\n lines\n \n \n
\n \n \n This is a very long alert description that demonstrates how the\n component handles extended text content and potentially wraps across\n multiple lines\n \n \n
\n \n \n This is an extremely long alert title that spans multiple lines to\n demonstrate how the component handles very lengthy headings while\n maintaining readability and proper text wrapping behavior\n \n \n This is an equally long description that contains detailed\n information about the alert. It shows how the component can\n accommodate extensive content while preserving proper spacing,\n alignment, and readability across different screen sizes and\n viewport widths. This helps ensure the user experience remains\n consistent regardless of the content length.\n \n \n
\n \n )\n}\n\nfunction AlertExample3() {\n return (\n \n \n
\n \n Something went wrong! \n \n Your session has expired. Please log in again.\n \n \n
\n \n Unable to process your payment. \n \n \n Please verify your billing information and try\n again.\n
\n \n Check your card details \n Ensure sufficient funds \n Verify billing address \n \n \n \n
\n \n )\n}\n\nfunction AlertExample4() {\n return (\n \n \n
\n \n The selected emails have been marked as spam. \n \n Undo \n \n \n
\n \n The selected emails have been marked as spam. \n \n This is a very long alert title that demonstrates how the component\n handles extended text content.\n \n \n Badge \n \n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Alert,\n AlertAction,\n AlertDescription,\n AlertTitle,\n} from \"@/registry/bases/base/ui/alert\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AlertExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction AlertExample1() {\n return (\n \n \n
\n Success! Your changes have been saved. \n \n
\n Success! Your changes have been saved. \n \n This is an alert with title and description.\n \n \n
\n \n This one has a description only. No title. No icon.\n \n \n
\n \n )\n}\n\nfunction AlertExample2() {\n return (\n \n \n
\n \n \n Let's try one with icon, title and a link .\n \n \n
\n \n \n This one has an icon and a description only. No title.{\" \"}\n But it has a link and a second link .\n \n \n\n
\n \n Success! Your changes have been saved \n \n This is an alert with icon, title and description.\n \n \n
\n \n \n This is a very long alert title that demonstrates how the component\n handles extended text content and potentially wraps across multiple\n lines\n \n \n
\n \n \n This is a very long alert description that demonstrates how the\n component handles extended text content and potentially wraps across\n multiple lines\n \n \n
\n \n \n This is an extremely long alert title that spans multiple lines to\n demonstrate how the component handles very lengthy headings while\n maintaining readability and proper text wrapping behavior\n \n \n This is an equally long description that contains detailed\n information about the alert. It shows how the component can\n accommodate extensive content while preserving proper spacing,\n alignment, and readability across different screen sizes and\n viewport widths. This helps ensure the user experience remains\n consistent regardless of the content length.\n \n \n
\n \n )\n}\n\nfunction AlertExample3() {\n return (\n \n \n
\n \n Something went wrong! \n \n Your session has expired. Please log in again.\n \n \n
\n \n Unable to process your payment. \n \n \n Please verify your billing information and try\n again.\n
\n \n Check your card details \n Ensure sufficient funds \n Verify billing address \n \n \n \n
\n \n )\n}\n\nfunction AlertExample4() {\n return (\n \n \n
\n \n The selected emails have been marked as spam. \n \n Undo \n \n \n
\n \n The selected emails have been marked as spam. \n \n This is a very long alert title that demonstrates how the component\n handles extended text content.\n \n \n Badge \n \n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/avatar-example.json b/apps/v4/public/r/styles/base-mira/avatar-example.json
index 38c72a3685..35b5adfe16 100644
--- a/apps/v4/public/r/styles/base-mira/avatar-example.json
+++ b/apps/v4/public/r/styles/base-mira/avatar-example.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-mira/examples/avatar-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarBadge,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AvatarExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction AvatarSizes() {\n return (\n \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n
\n CN \n \n
\n CN \n \n
\n CN \n \n
\n \n )\n}\n\nfunction AvatarWithBadge() {\n return (\n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n \n )\n}\n\nfunction AvatarWithBadgeIcon() {\n return (\n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n \n )\n}\n\nfunction AvatarGroupExample() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n )\n}\n\nfunction AvatarGroupWithCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n )\n}\n\nfunction AvatarGroupWithIconCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n )\n}\n\nfunction AvatarInEmpty() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n \n Invite Members\n \n \n \n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarBadge,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Empty,\n EmptyContent,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n} from \"@/registry/bases/base/ui/empty\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function AvatarExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction AvatarSizes() {\n return (\n \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n CN \n \n
\n \n
\n CN \n \n
\n CN \n \n
\n CN \n \n
\n \n )\n}\n\nfunction AvatarWithBadge() {\n return (\n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n JZ \n \n \n
\n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n JZ \n \n \n
\n \n )\n}\n\nfunction AvatarWithBadgeIcon() {\n return (\n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n PP \n \n \n \n \n
\n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n PP \n \n \n \n \n
\n \n )\n}\n\nfunction AvatarGroupExample() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n )\n}\n\nfunction AvatarGroupWithCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +3 \n \n \n )\n}\n\nfunction AvatarGroupWithIconCount() {\n return (\n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n )\n}\n\nfunction AvatarInEmpty() {\n return (\n \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n \n \n \n \n \n No Team Members \n \n Invite your team to collaborate on this project.\n \n \n \n \n \n Invite Members\n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/badge-example.json b/apps/v4/public/r/styles/base-mira/badge-example.json
index 0a4c473da1..0a0690e7bd 100644
--- a/apps/v4/public/r/styles/base-mira/badge-example.json
+++ b/apps/v4/public/r/styles/base-mira/badge-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-mira/examples/badge-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function BadgeExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction BadgeVariants() {\n return (\n \n \n Default \n Secondary \n Destructive \n Outline \n Ghost \n Link \n
\n \n )\n}\n\nfunction BadgeWithIconLeft() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeWithIconRight() {\n return (\n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n \n
\n \n )\n}\n\nfunction BadgeWithSpinner() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeAsLink() {\n return (\n \n \n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n
\n \n )\n}\n\nfunction BadgeLongText() {\n return (\n \n \n \n A badge with a lot of text to see how it wraps\n \n
\n \n )\n}\n\nfunction BadgeCustomColors() {\n return (\n \n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Red\n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Spinner } from \"@/registry/bases/base/ui/spinner\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function BadgeExample() {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction BadgeVariants() {\n return (\n \n \n Default \n Secondary \n Destructive \n Outline \n Ghost \n Link \n
\n \n )\n}\n\nfunction BadgeWithIconLeft() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeWithIconRight() {\n return (\n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n \n
\n \n )\n}\n\nfunction BadgeWithSpinner() {\n return (\n \n \n \n \n Default\n \n \n \n Secondary\n \n \n \n Destructive\n \n \n \n Outline\n \n \n \n Ghost\n \n \n \n Link\n \n
\n \n )\n}\n\nfunction BadgeAsLink() {\n return (\n \n \n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n \n Link{\" \"}\n \n \n }\n />\n
\n \n )\n}\n\nfunction BadgeLongText() {\n return (\n \n \n \n A badge with a lot of text to see how it wraps\n \n
\n \n )\n}\n\nfunction BadgeCustomColors() {\n return (\n \n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Blue\n \n \n Green\n \n \n Sky\n \n \n Purple\n \n \n Red\n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/breadcrumb.json b/apps/v4/public/r/styles/base-mira/breadcrumb.json
index f5706bd7fc..77333e47c0 100644
--- a/apps/v4/public/r/styles/base-mira/breadcrumb.json
+++ b/apps/v4/public/r/styles/base-mira/breadcrumb.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-mira/ui/breadcrumb.tsx",
- "content": "import * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbLink({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"a\">) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\"hover:text-foreground transition-colors\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"breadcrumb-link\",\n },\n })\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? (\n \n )}\n \n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n svg]:size-3.5 flex items-center justify-center\",\n className\n )}\n {...props}\n >\n \n More \n \n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n",
+ "content": "import * as React from \"react\"\nimport { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbLink({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"a\">) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\"hover:text-foreground transition-colors\", className),\n },\n props\n ),\n render,\n state: {\n slot: \"breadcrumb-link\",\n },\n })\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? (\n \n )}\n \n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n svg]:size-3.5 flex items-center justify-center\",\n className\n )}\n {...props}\n >\n \n More \n \n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/button-example.json b/apps/v4/public/r/styles/base-mira/button-example.json
index b150b1a757..5d9ca53129 100644
--- a/apps/v4/public/r/styles/base-mira/button-example.json
+++ b/apps/v4/public/r/styles/base-mira/button-example.json
@@ -9,7 +9,7 @@
"files": [
{
"path": "registry/base-mira/examples/button-example.tsx",
- "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonVariantsAndSizes() {\n return (\n \n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n Secondary \n Outline \n Ghost \n Destructive \n Link \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n\nfunction ButtonIconRight() {\n return (\n \n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n )\n}\n\nfunction ButtonIconLeft() {\n return (\n \n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n )\n}\n\nfunction ButtonIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonExamples() {\n return (\n \n \n
\n Cancel \n \n Submit{\" \"}\n \n \n
\n
\n Delete \n \n \n \n
\n
} nativeButton={false}>\n Link\n \n
\n \n )\n}\n\nfunction ButtonInvalidStates() {\n return (\n \n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n",
+ "content": "import {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonExample() {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonVariantsAndSizes() {\n return (\n \n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n Secondary \n Outline \n Ghost \n Destructive \n Link \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n\nfunction ButtonIconRight() {\n return (\n \n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n \n Default{\" \"}\n \n \n \n Secondary{\" \"}\n \n \n \n Outline{\" \"}\n \n \n \n Ghost{\" \"}\n \n \n \n Destructive{\" \"}\n \n \n \n Link{\" \"}\n \n \n
\n \n )\n}\n\nfunction ButtonIconLeft() {\n return (\n \n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n \n {\" \"}\n Default\n \n \n {\" \"}\n Secondary\n \n \n {\" \"}\n Outline\n \n \n {\" \"}\n Ghost\n \n \n {\" \"}\n Destructive\n \n \n {\" \"}\n Link\n \n
\n \n )\n}\n\nfunction ButtonIconOnly() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonExamples() {\n return (\n \n \n
\n Cancel \n \n Submit{\" \"}\n \n \n
\n
\n Delete \n \n \n \n
\n
} nativeButton={false}>\n Link\n \n
\n \n )\n}\n\nfunction ButtonInvalidStates() {\n return (\n \n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n Default \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n \n Default\n \n \n Secondary\n \n \n Outline\n \n \n Ghost\n \n \n Destructive\n \n \n Link\n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/button-group-example.json b/apps/v4/public/r/styles/base-mira/button-group-example.json
index 4ca996c980..cda9c6785d 100644
--- a/apps/v4/public/r/styles/base-mira/button-group-example.json
+++ b/apps/v4/public/r/styles/base-mira/button-group-example.json
@@ -18,7 +18,7 @@
"files": [
{
"path": "registry/base-mira/examples/button-group-example.tsx",
- "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupBasic() {\n return (\n \n \n \n Button \n Another Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInput() {\n return (\n \n \n \n Button \n \n \n \n \n Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithText() {\n return (\n \n \n \n Text \n Another Button \n \n \n }>\n GPU Size\n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithDropdown() {\n return (\n \n \n \n Update \n \n }\n >\n \n \n \n Disable \n \n Uninstall\n \n \n \n \n \n Follow \n \n }\n >\n \n \n \n \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Report Conversation\n \n \n \n Block User\n \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n
\n \n )\n}\n\nconst currencyItems = [\n { label: \"$\", value: \"$\" },\n { label: \"€\", value: \"€\" },\n { label: \"£\", value: \"£\" },\n]\n\nfunction ButtonGroupWithSelect() {\n return (\n \n \n Amount \n \n \n \n \n \n \n \n {currencyItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInputGroup() {\n return (\n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithFields() {\n return (\n \n \n \n Width \n \n \n \n \n W\n \n \n px\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithLike() {\n return (\n \n \n \n {\" \"}\n Like\n \n }\n nativeButton={false}\n >\n 1.2K\n \n \n \n )\n}\n\nconst durationItems = [\n { label: \"Hours\", value: \"hours\" },\n { label: \"Days\", value: \"days\" },\n { label: \"Weeks\", value: \"weeks\" },\n]\n\nfunction ButtonGroupWithSelectAndInput() {\n return (\n \n \n \n \n \n \n \n \n {durationItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n }>\n \n \n Voice Mode \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupPagination() {\n return (\n \n \n \n \n Previous\n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n Next\n \n \n \n \n )\n}\n\nfunction ButtonGroupPaginationSplit() {\n return (\n \n \n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNavigation() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupTextAlignment() {\n return (\n \n \n Text Alignment \n \n \n Left\n \n \n Center\n \n \n Right\n \n \n Justify\n \n \n \n \n )\n}\n\nfunction ButtonGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupVerticalNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"@/registry/bases/base/ui/button-group\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport { Field, FieldGroup } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { Label } from \"@/registry/bases/base/ui/label\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ButtonGroupExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupBasic() {\n return (\n \n \n \n Button \n Another Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInput() {\n return (\n \n \n \n Button \n \n \n \n \n Button \n \n
\n \n )\n}\n\nfunction ButtonGroupWithText() {\n return (\n \n \n \n Text \n Another Button \n \n \n }>\n GPU Size\n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithDropdown() {\n return (\n \n \n \n Update \n \n }\n >\n \n \n \n Disable \n \n Uninstall\n \n \n \n \n \n Follow \n \n }\n >\n \n \n \n \n \n \n Mute Conversation\n \n \n \n Mark as Read\n \n \n \n Report Conversation\n \n \n \n Block User\n \n \n \n Share Conversation\n \n \n \n Copy Conversation\n \n \n \n \n \n \n Delete Conversation\n \n \n \n \n \n
\n \n )\n}\n\nconst currencyItems = [\n { label: \"$\", value: \"$\" },\n { label: \"€\", value: \"€\" },\n { label: \"£\", value: \"£\" },\n]\n\nfunction ButtonGroupWithSelect() {\n return (\n \n \n Amount \n \n \n \n \n \n \n \n {currencyItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithIcons() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithInputGroup() {\n return (\n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupWithFields() {\n return (\n \n \n \n Width \n \n \n \n \n W\n \n \n px\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupWithLike() {\n return (\n \n \n \n {\" \"}\n Like\n \n }\n nativeButton={false}\n >\n 1.2K\n \n \n \n )\n}\n\nconst durationItems = [\n { label: \"Hours\", value: \"hours\" },\n { label: \"Days\", value: \"days\" },\n { label: \"Weeks\", value: \"weeks\" },\n]\n\nfunction ButtonGroupWithSelectAndInput() {\n return (\n \n \n \n \n \n \n \n \n {durationItems.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n }>\n \n \n Voice Mode \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupPagination() {\n return (\n \n \n \n \n Previous\n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n Next\n \n \n \n \n )\n}\n\nfunction ButtonGroupPaginationSplit() {\n return (\n \n \n \n \n 1\n \n \n 2\n \n \n 3\n \n \n 4\n \n \n 5\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupNavigation() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ButtonGroupTextAlignment() {\n return (\n \n \n Text Alignment \n \n \n Left\n \n \n Center\n \n \n Right\n \n \n Justify\n \n \n \n \n )\n}\n\nfunction ButtonGroupVertical() {\n return (\n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nfunction ButtonGroupVerticalNested() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/calendar-example.json b/apps/v4/public/r/styles/base-mira/calendar-example.json
index 6e9fd772a3..90c7ac4e88 100644
--- a/apps/v4/public/r/styles/base-mira/calendar-example.json
+++ b/apps/v4/public/r/styles/base-mira/calendar-example.json
@@ -15,7 +15,7 @@
"files": [
{
"path": "registry/base-mira/examples/calendar-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { addDays, format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { es } from \"react-day-picker/locale\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar, CalendarDayButton } from \"@/registry/bases/base/ui/calendar\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CalendarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarSingle() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarMultiple() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarRange() {\n const [dateRange, setDateRange] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 12),\n to: addDays(new Date(new Date().getFullYear(), 0, 12), 30),\n })\n\n return (\n \n \n \n \n date > new Date() || date < new Date(\"1900-01-01\")\n }\n />\n \n \n \n )\n}\n\nfunction CalendarRangeMultipleMonths() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 3, 12),\n to: addDays(new Date(new Date().getFullYear(), 3, 12), 60),\n })\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarBookedDates() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n const bookedDates = Array.from(\n { length: 15 },\n (_, i) => new Date(new Date().getFullYear(), 1, 12 + i)\n )\n\n return (\n \n \n \n button]:line-through opacity-100\",\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithTime() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n\n return (\n \n \n \n \n \n \n \n \n Start Time \n \n \n \n \n \n \n \n \n End Time \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarCustomDays() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 11, 8),\n to: addDays(new Date(new Date().getFullYear(), 11, 8), 10),\n })\n\n return (\n \n \n \n {\n return date.toLocaleString(\"default\", { month: \"long\" })\n },\n }}\n components={{\n DayButton: ({ children, modifiers, day, ...props }) => {\n const isWeekend =\n day.date.getDay() === 0 || day.date.getDay() === 6\n\n return (\n \n {children}\n {!modifiers.outside && (\n {isWeekend ? \"$120\" : \"$100\"} \n )}\n \n )\n },\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithPresets() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 12)\n )\n const [currentMonth, setCurrentMonth] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 1)\n )\n\n return (\n \n \n \n \n \n \n {[\n { label: \"Today\", value: 0 },\n { label: \"Tomorrow\", value: 1 },\n { label: \"In 3 days\", value: 3 },\n { label: \"In a week\", value: 7 },\n { label: \"In 2 weeks\", value: 14 },\n ].map((preset) => (\n {\n const newDate = addDays(new Date(), preset.value)\n setDate(newDate)\n setCurrentMonth(\n new Date(newDate.getFullYear(), newDate.getMonth(), 1)\n )\n }}\n >\n {preset.label}\n \n ))}\n \n \n \n )\n}\n\nfunction DatePickerSimple() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n Date \n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n \n \n \n )\n}\n\nfunction DatePickerWithRange() {\n const [date, setDate] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 20),\n to: addDays(new Date(new Date().getFullYear(), 0, 20), 20),\n })\n\n return (\n \n \n Date Picker Range \n \n \n }\n >\n \n {date?.from ? (\n date.to ? (\n <>\n {format(date.from, \"LLL dd, y\")} -{\" \"}\n {format(date.to, \"LLL dd, y\")}\n >\n ) : (\n format(date.from, \"LLL dd, y\")\n )\n ) : (\n Pick a date \n )}\n \n \n \n \n \n \n \n )\n}\n\nfunction DataPickerWithDropdowns() {\n const [date, setDate] = React.useState()\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n \n \n Date\n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n setOpen(false)}\n >\n Done\n \n
\n \n \n \n \n )\n}\n\nfunction CalendarWeekNumbers() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n\n return (\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { addDays, format } from \"date-fns\"\nimport { type DateRange } from \"react-day-picker\"\nimport { es } from \"react-day-picker/locale\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Calendar, CalendarDayButton } from \"@/registry/bases/base/ui/calendar\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CalendarExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarSingle() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarMultiple() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarRange() {\n const [dateRange, setDateRange] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 12),\n to: addDays(new Date(new Date().getFullYear(), 0, 12), 30),\n })\n\n return (\n \n \n \n \n date > new Date() || date < new Date(\"1900-01-01\")\n }\n />\n \n \n \n )\n}\n\nfunction CalendarRangeMultipleMonths() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 3, 12),\n to: addDays(new Date(new Date().getFullYear(), 3, 12), 60),\n })\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarBookedDates() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n const bookedDates = Array.from(\n { length: 15 },\n (_, i) => new Date(new Date().getFullYear(), 1, 12 + i)\n )\n\n return (\n \n \n \n button]:line-through opacity-100\",\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithTime() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 12)\n )\n\n return (\n \n \n \n \n \n \n \n \n Start Time \n \n \n \n \n \n \n \n \n End Time \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CalendarCustomDays() {\n const [range, setRange] = React.useState({\n from: new Date(new Date().getFullYear(), 11, 8),\n to: addDays(new Date(new Date().getFullYear(), 11, 8), 10),\n })\n\n return (\n \n \n \n {\n return date.toLocaleString(\"default\", { month: \"long\" })\n },\n }}\n components={{\n DayButton: ({ children, modifiers, day, ...props }) => {\n const isWeekend =\n day.date.getDay() === 0 || day.date.getDay() === 6\n\n return (\n \n {children}\n {!modifiers.outside && (\n {isWeekend ? \"$120\" : \"$100\"} \n )}\n \n )\n },\n }}\n />\n \n \n \n )\n}\n\nfunction CalendarWithPresets() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 12)\n )\n const [currentMonth, setCurrentMonth] = React.useState(\n new Date(new Date().getFullYear(), new Date().getMonth(), 1)\n )\n\n return (\n \n \n \n \n \n \n {[\n { label: \"Today\", value: 0 },\n { label: \"Tomorrow\", value: 1 },\n { label: \"In 3 days\", value: 3 },\n { label: \"In a week\", value: 7 },\n { label: \"In 2 weeks\", value: 14 },\n ].map((preset) => (\n {\n const newDate = addDays(new Date(), preset.value)\n setDate(newDate)\n setCurrentMonth(\n new Date(newDate.getFullYear(), newDate.getMonth(), 1)\n )\n }}\n >\n {preset.label}\n \n ))}\n \n \n \n )\n}\n\nfunction DatePickerSimple() {\n const [date, setDate] = React.useState()\n\n return (\n \n \n Date \n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n \n \n \n )\n}\n\nfunction DatePickerWithRange() {\n const [date, setDate] = React.useState({\n from: new Date(new Date().getFullYear(), 0, 20),\n to: addDays(new Date(new Date().getFullYear(), 0, 20), 20),\n })\n\n return (\n \n \n Date Picker Range \n \n \n }\n >\n \n {date?.from ? (\n date.to ? (\n <>\n {format(date.from, \"LLL dd, y\")} -{\" \"}\n {format(date.to, \"LLL dd, y\")}\n >\n ) : (\n format(date.from, \"LLL dd, y\")\n )\n ) : (\n Pick a date \n )}\n \n \n \n \n \n \n \n )\n}\n\nfunction DataPickerWithDropdowns() {\n const [date, setDate] = React.useState()\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n \n \n Date\n \n \n }\n >\n \n {date ? format(date, \"PPP\") : Pick a date }\n \n \n \n \n setOpen(false)}\n >\n Done\n \n
\n \n \n \n \n )\n}\n\nfunction CalendarWeekNumbers() {\n const [date, setDate] = React.useState(\n new Date(new Date().getFullYear(), 1, 3)\n )\n\n return (\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/calendar.json b/apps/v4/public/r/styles/base-mira/calendar.json
index 19273a1f7b..f9d741e299 100644
--- a/apps/v4/public/r/styles/base-mira/calendar.json
+++ b/apps/v4/public/r/styles/base-mira/calendar.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-mira/ui/calendar.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button, buttonVariants } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps & {\n buttonVariant?: React.ComponentProps[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative cn-calendar-dropdown-root rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"cn-calendar-caption-label rounded-(--cell-radius) flex items-center gap-1 text-sm [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-(--cell-radius) bg-muted elative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:right-0 -z-0 isolate\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"rounded-r-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:left-0 -z-0 isolate\",\n defaultClassNames.range_end\n ),\n today: cn(\n \"bg-muted text-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n
\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n \n )\n }\n\n if (orientation === \"right\") {\n return (\n \n )\n }\n\n return (\n \n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n \n \n {children}\n
\n \n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button, buttonVariants } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps & {\n buttonVariant?: React.ComponentProps[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative cn-calendar-dropdown-root rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"cn-calendar-caption-label rounded-(--cell-radius) flex items-center gap-1 text-sm [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-(--cell-radius) bg-muted elative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:right-0 -z-0 isolate\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"rounded-r-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:left-0 -z-0 isolate\",\n defaultClassNames.range_end\n ),\n today: cn(\n \"bg-muted text-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n
\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n \n )\n }\n\n if (orientation === \"right\") {\n return (\n \n )\n }\n\n return (\n \n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n \n \n {children}\n
\n \n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/card-example.json b/apps/v4/public/r/styles/base-mira/card-example.json
index c634bb0b12..fa05dca739 100644
--- a/apps/v4/public/r/styles/base-mira/card-example.json
+++ b/apps/v4/public/r/styles/base-mira/card-example.json
@@ -13,7 +13,7 @@
"files": [
{
"path": "registry/base-mira/examples/card-example.tsx",
- "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CardExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CardLogin() {\n return (\n \n \n \n Login to your account \n \n Enter your email below to login to your account\n \n \n \n \n \n \n Email \n \n \n \n \n \n \n \n \n \n \n \n Login\n \n \n Login with Google\n \n \n \n \n \n )\n}\n\nfunction CardMeetingNotes() {\n return (\n \n \n \n Meeting Notes \n \n Transcript from the meeting with the client.\n \n \n \n \n Transcribe\n \n \n \n \n \n Client requested dashboard redesign with focus on mobile\n responsiveness.\n
\n \n New analytics widgets for daily/weekly metrics \n Simplified navigation menu \n Dark mode support \n Timeline: 6 weeks \n Follow-up meeting scheduled for next Tuesday \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +8 \n \n \n \n \n )\n}\n\nfunction CardWithImage() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardWithImageSmall() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorder() {\n return (\n \n \n \n Header with Border \n \n This is a card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorder() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n\nfunction CardDefault() {\n return (\n \n \n \n Default Card \n \n This card uses the default size variant.\n \n \n \n \n The card component supports a size prop that defaults to\n "default" for standard spacing and sizing.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardSmall() {\n return (\n \n \n \n Small Card \n \n This card uses the small size variant.\n \n \n \n \n The card component supports a size prop that can be set to\n "sm" for a more compact appearance.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorderSmall() {\n return (\n \n \n \n Header with Border \n \n This is a small card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorderSmall() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n",
+ "content": "import Image from \"next/image\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/registry/bases/base/ui/avatar\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CardExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction CardLogin() {\n return (\n \n \n \n Login to your account \n \n Enter your email below to login to your account\n \n \n \n \n \n \n Email \n \n \n \n \n \n \n \n \n \n \n \n Login\n \n \n Login with Google\n \n \n \n \n \n )\n}\n\nfunction CardMeetingNotes() {\n return (\n \n \n \n Meeting Notes \n \n Transcript from the meeting with the client.\n \n \n \n \n Transcribe\n \n \n \n \n \n Client requested dashboard redesign with focus on mobile\n responsiveness.\n
\n \n New analytics widgets for daily/weekly metrics \n Simplified navigation menu \n Dark mode support \n Timeline: 6 weeks \n Follow-up meeting scheduled for next Tuesday \n \n \n \n \n \n \n CN \n \n \n \n LR \n \n \n \n ER \n \n +8 \n \n \n \n \n )\n}\n\nfunction CardWithImage() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardWithImageSmall() {\n return (\n \n \n
\n \n \n Beautiful Landscape \n \n A stunning view that captures the essence of natural beauty.\n \n \n \n \n \n Button\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorder() {\n return (\n \n \n \n Header with Border \n \n This is a card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorder() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n\nfunction CardDefault() {\n return (\n \n \n \n Default Card \n \n This card uses the default size variant.\n \n \n \n \n The card component supports a size prop that defaults to\n "default" for standard spacing and sizing.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardSmall() {\n return (\n \n \n \n Small Card \n \n This card uses the small size variant.\n \n \n \n \n The card component supports a size prop that can be set to\n "sm" for a more compact appearance.\n
\n \n \n \n Action\n \n \n \n \n )\n}\n\nfunction CardHeaderWithBorderSmall() {\n return (\n \n \n \n Header with Border \n \n This is a small card with a header that has a bottom border.\n \n \n \n \n The header has a border-b class applied, creating a visual\n separation between the header and content sections.\n
\n \n \n \n )\n}\n\nfunction CardFooterWithBorderSmall() {\n return (\n \n \n \n \n The footer has a border-t class applied, creating a visual\n separation between the content and footer sections.\n
\n \n \n \n Footer with Border\n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/carousel.json b/apps/v4/public/r/styles/base-mira/carousel.json
index 515d0d65a9..2db3bacb57 100644
--- a/apps/v4/public/r/styles/base-mira/carousel.json
+++ b/apps/v4/public/r/styles/base-mira/carousel.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-mira/ui/carousel.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType[0]\n api: ReturnType[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a \")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n \n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n
\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n \n \n Previous slide \n \n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n \n \n Next slide \n \n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType[0]\n api: ReturnType[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a \")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n \n \n {children}\n
\n \n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n \n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n
\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n \n \n Previous slide \n \n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon-sm\",\n ...props\n}: React.ComponentProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n \n \n Next slide \n \n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n useCarousel,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/chart-example.json b/apps/v4/public/r/styles/base-mira/chart-example.json
index 3f946847ae..e8ac501caf 100644
--- a/apps/v4/public/r/styles/base-mira/chart-example.json
+++ b/apps/v4/public/r/styles/base-mira/chart-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-mira/examples/chart-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n Line,\n LineChart,\n Pie,\n PieChart,\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart,\n RadialBar,\n RadialBarChart,\n XAxis,\n} from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst areaChartData = [\n { month: \"January\", desktop: 186 },\n { month: \"February\", desktop: 305 },\n { month: \"March\", desktop: 237 },\n { month: \"April\", desktop: 73 },\n { month: \"May\", desktop: 209 },\n { month: \"June\", desktop: 214 },\n]\n\nconst areaChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nexport default function ChartExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction ChartAreaExample() {\n return (\n \n \n \n Area Chart \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n January - June 2024\n
\n
\n
\n \n \n \n )\n}\n\nconst barChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst barChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartBarExample() {\n return (\n \n \n \n Bar Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst lineChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst lineChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartLineExample() {\n return (\n \n \n \n Line Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n Showing total visitors for the last 6 months\n
\n
\n
\n \n \n \n )\n}\n\nconst pieChartData = [\n { browser: \"chrome\", visitors: 275, fill: \"var(--color-chrome)\" },\n { browser: \"safari\", visitors: 200, fill: \"var(--color-safari)\" },\n { browser: \"firefox\", visitors: 287, fill: \"var(--color-firefox)\" },\n { browser: \"edge\", visitors: 173, fill: \"var(--color-edge)\" },\n { browser: \"other\", visitors: 190, fill: \"var(--color-other)\" },\n]\n\nconst pieChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n chrome: {\n label: \"Chrome\",\n color: \"var(--chart-1)\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n firefox: {\n label: \"Firefox\",\n color: \"var(--chart-3)\",\n },\n edge: {\n label: \"Edge\",\n color: \"var(--chart-4)\",\n },\n other: {\n label: \"Other\",\n color: \"var(--chart-5)\",\n },\n} satisfies ChartConfig\n\nfunction ChartPieExample() {\n const totalVisitors = React.useMemo(() => {\n return pieChartData.reduce((acc, curr) => acc + curr.visitors, 0)\n }, [])\n\n return (\n \n \n \n Pie Chart - Donut with Text \n January - June 2024 \n \n \n \n \n }\n />\n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {totalVisitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst radarChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst radarChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadarExample() {\n return (\n \n \n \n Radar Chart - Multiple \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n }\n />\n \n \n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n January - June 2024\n
\n \n \n \n )\n}\n\nconst radialChartData = [\n { browser: \"safari\", visitors: 1260, fill: \"var(--color-safari)\" },\n]\n\nconst radialChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadialExample() {\n return (\n \n \n \n Radial Chart - Shape \n January - June 2024 \n \n \n \n \n \n \n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {radialChartData[0].visitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Label,\n Line,\n LineChart,\n Pie,\n PieChart,\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart,\n RadialBar,\n RadialBarChart,\n XAxis,\n} from \"recharts\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from \"@/registry/bases/base/ui/chart\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst areaChartData = [\n { month: \"January\", desktop: 186 },\n { month: \"February\", desktop: 305 },\n { month: \"March\", desktop: 237 },\n { month: \"April\", desktop: 73 },\n { month: \"May\", desktop: 209 },\n { month: \"June\", desktop: 214 },\n]\n\nconst areaChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n} satisfies ChartConfig\n\nexport default function ChartExample() {\n return (\n \n \n \n \n \n \n \n )\n}\n\nfunction ChartAreaExample() {\n return (\n \n \n \n Area Chart \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n January - June 2024\n
\n
\n
\n \n \n \n )\n}\n\nconst barChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst barChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartBarExample() {\n return (\n \n \n \n Bar Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n }\n />\n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst lineChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst lineChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartLineExample() {\n return (\n \n \n \n Line Chart - Multiple \n January - June 2024 \n \n \n \n \n \n value.slice(0, 3)}\n />\n } />\n \n \n \n \n \n \n \n
\n
\n Trending up by 5.2% this month{\" \"}\n \n
\n
\n Showing total visitors for the last 6 months\n
\n
\n
\n \n \n \n )\n}\n\nconst pieChartData = [\n { browser: \"chrome\", visitors: 275, fill: \"var(--color-chrome)\" },\n { browser: \"safari\", visitors: 200, fill: \"var(--color-safari)\" },\n { browser: \"firefox\", visitors: 287, fill: \"var(--color-firefox)\" },\n { browser: \"edge\", visitors: 173, fill: \"var(--color-edge)\" },\n { browser: \"other\", visitors: 190, fill: \"var(--color-other)\" },\n]\n\nconst pieChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n chrome: {\n label: \"Chrome\",\n color: \"var(--chart-1)\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n firefox: {\n label: \"Firefox\",\n color: \"var(--chart-3)\",\n },\n edge: {\n label: \"Edge\",\n color: \"var(--chart-4)\",\n },\n other: {\n label: \"Other\",\n color: \"var(--chart-5)\",\n },\n} satisfies ChartConfig\n\nfunction ChartPieExample() {\n const totalVisitors = React.useMemo(() => {\n return pieChartData.reduce((acc, curr) => acc + curr.visitors, 0)\n }, [])\n\n return (\n \n \n \n Pie Chart - Donut with Text \n January - June 2024 \n \n \n \n \n }\n />\n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {totalVisitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n\nconst radarChartData = [\n { month: \"January\", desktop: 186, mobile: 80 },\n { month: \"February\", desktop: 305, mobile: 200 },\n { month: \"March\", desktop: 237, mobile: 120 },\n { month: \"April\", desktop: 73, mobile: 190 },\n { month: \"May\", desktop: 209, mobile: 130 },\n { month: \"June\", desktop: 214, mobile: 140 },\n]\n\nconst radarChartConfig = {\n desktop: {\n label: \"Desktop\",\n color: \"var(--chart-1)\",\n },\n mobile: {\n label: \"Mobile\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadarExample() {\n return (\n \n \n \n Radar Chart - Multiple \n \n Showing total visitors for the last 6 months\n \n \n \n \n \n }\n />\n \n \n \n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n January - June 2024\n
\n \n \n \n )\n}\n\nconst radialChartData = [\n { browser: \"safari\", visitors: 1260, fill: \"var(--color-safari)\" },\n]\n\nconst radialChartConfig = {\n visitors: {\n label: \"Visitors\",\n },\n safari: {\n label: \"Safari\",\n color: \"var(--chart-2)\",\n },\n} satisfies ChartConfig\n\nfunction ChartRadialExample() {\n return (\n \n \n \n Radial Chart - Shape \n January - June 2024 \n \n \n \n \n \n \n \n {\n if (viewBox && \"cx\" in viewBox && \"cy\" in viewBox) {\n return (\n \n \n {radialChartData[0].visitors.toLocaleString()}\n \n \n Visitors\n \n \n )\n }\n }}\n />\n \n \n \n \n \n \n Trending up by 5.2% this month{\" \"}\n \n
\n \n Showing total visitors for the last 6 months\n
\n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/chatgpt.json b/apps/v4/public/r/styles/base-mira/chatgpt.json
index 54d9d0cab6..7cc717a7cb 100644
--- a/apps/v4/public/r/styles/base-mira/chatgpt.json
+++ b/apps/v4/public/r/styles/base-mira/chatgpt.json
@@ -20,7 +20,7 @@
"files": [
{
"path": "registry/base-mira/blocks/chatgpt.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ChatGPTBlock() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction PromptForm() {\n const [dictateEnabled, setDictateEnabled] = React.useState(false)\n\n return (\n \n \n \n Prompt\n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"rounded-4xl\"\n />\n }\n />\n }\n >\n \n \n \n Add files and more / \n \n \n \n \n \n \n Add photos & files\n \n \n \n Deep research\n \n \n \n Shopping research\n \n \n \n Create image\n \n \n \n \n Agent mode\n \n }\n />\n \n 35 left
\n \n More available for purchase\n
\n \n \n \n \n \n \n More\n \n \n \n \n \n \n Add sources\n \n \n \n Study and learn\n \n \n \n Web search\n \n \n \n Canvas\n \n \n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"ml-auto rounded-4xl\"\n />\n }\n >\n \n \n Dictate \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ModelSelector() {\n const [mode, setMode] = React.useState(\"auto\")\n const [model, setModel] = React.useState(\"gpt-5.1\")\n\n return (\n \n \n }\n >\n ChatGPT 5.1\n \n \n \n \n \n GPT-5.1\n \n \n \n - \n
\n Auto \n \n Decides how long to think\n \n \n \n \n \n - \n
\n Instant \n \n Answers right away\n \n \n \n \n \n - \n
\n Thinking \n \n Thinks longer for better answers\n \n \n \n \n \n \n \n \n \n Legacy models \n \n \n \n \n \n \n GPT-4\n \n \n GPT-4 Turbo\n \n \n GPT-3.5\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction GroupChatDialog() {\n return (\n \n \n }>\n Start Group Chat\n \n \n \n Use ChatGPT together \n \n Add people to your chats to plan, share ideas, and get creative.\n \n \n \n \n Learn more\n \n \n
Cancel \n
Start group chat \n
\n \n \n \n \n )\n}\n\nconst categories = [\n {\n id: \"homework\",\n label: \"Homework\",\n },\n {\n id: \"writing\",\n label: \"Writing\",\n },\n {\n id: \"health\",\n label: \"Health\",\n },\n {\n id: \"travel\",\n label: \"Travel\",\n },\n]\n\nfunction CreateProjectForm() {\n const [projectName, setProjectName] = React.useState(\"\")\n const [selectedCategory, setSelectedCategory] = React.useState(\n categories[0].id\n )\n const [memorySetting, setMemorySetting] = React.useState<\n \"default\" | \"project-only\"\n >(\"default\")\n const [selectedColor, setSelectedColor] = React.useState(\n \"var(--foreground)\"\n )\n\n return (\n \n \n \n Create Project \n \n Start a new project to keep chats, files, and custom instructions in\n one place.\n \n \n \n }\n >\n \n Memory \n \n \n \n {\n setMemorySetting(value as \"default\" | \"project-only\")\n }}\n >\n \n - \n
\n Default \n \n Project can access memories from outside chats, and\n vice versa.\n \n \n \n \n \n - \n
\n Project Only \n \n Project can only access its own memories. Its\n memories are hidden from outside chats.\n \n \n \n \n \n \n \n \n \n Note that this setting can't be changed later.\n \n \n \n \n \n \n \n \n \n \n Project Name\n \n \n {\n setProjectName(e.target.value)\n }}\n />\n \n \n \n }\n >\n \n \n \n \n {[\n \"var(--foreground)\",\n \"#fa423e\",\n \"#f59e0b\",\n \"#8b5cf6\",\n \"#ec4899\",\n \"#10b981\",\n \"#6366f1\",\n \"#14b8a6\",\n \"#f97316\",\n \"#fbbc04\",\n ].map((color) => (\n {\n setSelectedColor(color)\n }}\n >\n \n {color} \n \n ))}\n
\n \n \n \n \n \n {categories.map((category) => (\n {\n setSelectedCategory(\n selectedCategory === category.id\n ? null\n : category.id\n )\n }}\n />\n }\n >\n \n {category.label}\n \n ))}\n \n \n \n \n \n \n Projects keep chats, files, and custom instructions in one\n place. Use them for ongoing work, or just to keep things tidy.\n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Alert, AlertDescription } from \"@/registry/bases/base/ui/alert\"\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/registry/bases/base/ui/alert-dialog\"\nimport { Badge } from \"@/registry/bases/base/ui/badge\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardAction,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"@/registry/bases/base/ui/dropdown-menu\"\nimport {\n Field,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n InputGroupTextarea,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport { Kbd } from \"@/registry/bases/base/ui/kbd\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/bases/base/ui/popover\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/registry/bases/base/ui/tooltip\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ChatGPTBlock() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction PromptForm() {\n const [dictateEnabled, setDictateEnabled] = React.useState(false)\n\n return (\n \n \n \n Prompt\n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"rounded-4xl\"\n />\n }\n />\n }\n >\n \n \n \n Add files and more / \n \n \n \n \n \n \n Add photos & files\n \n \n \n Deep research\n \n \n \n Shopping research\n \n \n \n Create image\n \n \n \n \n Agent mode\n \n }\n />\n \n 35 left
\n \n More available for purchase\n
\n \n \n \n \n \n \n More\n \n \n \n \n \n \n Add sources\n \n \n \n Study and learn\n \n \n \n Web search\n \n \n \n Canvas\n \n \n \n \n \n \n \n \n setDictateEnabled(!dictateEnabled)}\n className=\"ml-auto rounded-4xl\"\n />\n }\n >\n \n \n Dictate \n \n \n \n \n \n \n \n \n )\n}\n\nfunction ModelSelector() {\n const [mode, setMode] = React.useState(\"auto\")\n const [model, setModel] = React.useState(\"gpt-5.1\")\n\n return (\n \n \n }\n >\n ChatGPT 5.1\n \n \n \n \n \n GPT-5.1\n \n \n \n - \n
\n Auto \n \n Decides how long to think\n \n \n \n \n \n - \n
\n Instant \n \n Answers right away\n \n \n \n \n \n - \n
\n Thinking \n \n Thinks longer for better answers\n \n \n \n \n \n \n \n \n \n Legacy models \n \n \n \n \n \n \n GPT-4\n \n \n GPT-4 Turbo\n \n \n GPT-3.5\n \n \n \n \n \n \n \n \n \n )\n}\n\nfunction GroupChatDialog() {\n return (\n \n \n }>\n Start Group Chat\n \n \n \n Use ChatGPT together \n \n Add people to your chats to plan, share ideas, and get creative.\n \n \n \n \n Learn more\n \n \n
Cancel \n
Start group chat \n
\n \n \n \n \n )\n}\n\nconst categories = [\n {\n id: \"homework\",\n label: \"Homework\",\n },\n {\n id: \"writing\",\n label: \"Writing\",\n },\n {\n id: \"health\",\n label: \"Health\",\n },\n {\n id: \"travel\",\n label: \"Travel\",\n },\n]\n\nfunction CreateProjectForm() {\n const [projectName, setProjectName] = React.useState(\"\")\n const [selectedCategory, setSelectedCategory] = React.useState(\n categories[0].id\n )\n const [memorySetting, setMemorySetting] = React.useState<\n \"default\" | \"project-only\"\n >(\"default\")\n const [selectedColor, setSelectedColor] = React.useState(\n \"var(--foreground)\"\n )\n\n return (\n \n \n \n Create Project \n \n Start a new project to keep chats, files, and custom instructions in\n one place.\n \n \n \n }\n >\n \n Memory \n \n \n \n {\n setMemorySetting(value as \"default\" | \"project-only\")\n }}\n >\n \n - \n
\n Default \n \n Project can access memories from outside chats, and\n vice versa.\n \n \n \n \n \n - \n
\n Project Only \n \n Project can only access its own memories. Its\n memories are hidden from outside chats.\n \n \n \n \n \n \n \n \n \n Note that this setting can't be changed later.\n \n \n \n \n \n \n \n \n \n \n Project Name\n \n \n {\n setProjectName(e.target.value)\n }}\n />\n \n \n \n }\n >\n \n \n \n \n {[\n \"var(--foreground)\",\n \"#fa423e\",\n \"#f59e0b\",\n \"#8b5cf6\",\n \"#ec4899\",\n \"#10b981\",\n \"#6366f1\",\n \"#14b8a6\",\n \"#f97316\",\n \"#fbbc04\",\n ].map((color) => (\n {\n setSelectedColor(color)\n }}\n >\n \n {color} \n \n ))}\n
\n \n \n \n \n \n {categories.map((category) => (\n {\n setSelectedCategory(\n selectedCategory === category.id\n ? null\n : category.id\n )\n }}\n />\n }\n >\n \n {category.label}\n \n ))}\n \n \n \n \n \n \n Projects keep chats, files, and custom instructions in one\n place. Use them for ongoing work, or just to keep things tidy.\n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:block"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/checkbox.json b/apps/v4/public/r/styles/base-mira/checkbox.json
index 3846962af9..31525e4b16 100644
--- a/apps/v4/public/r/styles/base-mira/checkbox.json
+++ b/apps/v4/public/r/styles/base-mira/checkbox.json
@@ -4,7 +4,7 @@
"files": [
{
"path": "registry/base-mira/ui/checkbox.tsx",
- "content": "\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {\n return (\n \n svg]:size-3.5 grid place-content-center text-current transition-none\"\n >\n \n \n \n )\n}\n\nexport { Checkbox }\n",
+ "content": "\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {\n return (\n \n svg]:size-3.5 grid place-content-center text-current transition-none\"\n >\n \n \n \n )\n}\n\nexport { Checkbox }\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/collapsible-example.json b/apps/v4/public/r/styles/base-mira/collapsible-example.json
index d8d3d4149d..3e4e05f8c6 100644
--- a/apps/v4/public/r/styles/base-mira/collapsible-example.json
+++ b/apps/v4/public/r/styles/base-mira/collapsible-example.json
@@ -14,7 +14,7 @@
"files": [
{
"path": "registry/base-mira/examples/collapsible-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CollapsibleExample() {\n return (\n \n \n \n \n )\n}\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nfunction CollapsibleFileTree() {\n const fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [\n { name: \"favicon.ico\" },\n { name: \"logo.svg\" },\n { name: \"images\" },\n ],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n ]\n\n const renderItem = (fileItem: FileTreeItem) => {\n if (\"items\" in fileItem) {\n return (\n \n \n }\n >\n \n \n {fileItem.name}\n \n \n \n {fileItem.items.map((child) => renderItem(child))}\n
\n \n \n )\n }\n return (\n \n \n {fileItem.name} \n \n )\n }\n\n return (\n \n \n \n \n \n Explorer \n Outline \n \n \n \n \n \n {fileTree.map((item) => renderItem(item))}\n
\n \n \n \n )\n}\n\nfunction CollapsibleSettings() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n \n Radius \n \n Set the corner radius of the element.\n \n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n }\n >\n {isOpen ? (\n \n ) : (\n \n )}\n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@/registry/bases/base/ui/card\"\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"@/registry/bases/base/ui/collapsible\"\nimport { Field, FieldGroup, FieldLabel } from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport { Tabs, TabsList, TabsTrigger } from \"@/registry/bases/base/ui/tabs\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CollapsibleExample() {\n return (\n \n \n \n \n )\n}\n\ntype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] }\n\nfunction CollapsibleFileTree() {\n const fileTree: FileTreeItem[] = [\n {\n name: \"components\",\n items: [\n {\n name: \"ui\",\n items: [\n { name: \"button.tsx\" },\n { name: \"card.tsx\" },\n { name: \"dialog.tsx\" },\n { name: \"input.tsx\" },\n { name: \"select.tsx\" },\n { name: \"table.tsx\" },\n ],\n },\n { name: \"login-form.tsx\" },\n { name: \"register-form.tsx\" },\n ],\n },\n {\n name: \"lib\",\n items: [{ name: \"utils.ts\" }, { name: \"cn.ts\" }, { name: \"api.ts\" }],\n },\n {\n name: \"hooks\",\n items: [\n { name: \"use-media-query.ts\" },\n { name: \"use-debounce.ts\" },\n { name: \"use-local-storage.ts\" },\n ],\n },\n {\n name: \"types\",\n items: [{ name: \"index.d.ts\" }, { name: \"api.d.ts\" }],\n },\n {\n name: \"public\",\n items: [\n { name: \"favicon.ico\" },\n { name: \"logo.svg\" },\n { name: \"images\" },\n ],\n },\n { name: \"app.tsx\" },\n { name: \"layout.tsx\" },\n { name: \"globals.css\" },\n { name: \"package.json\" },\n { name: \"tsconfig.json\" },\n { name: \"README.md\" },\n { name: \".gitignore\" },\n ]\n\n const renderItem = (fileItem: FileTreeItem) => {\n if (\"items\" in fileItem) {\n return (\n \n \n }\n >\n \n \n {fileItem.name}\n \n \n \n {fileItem.items.map((child) => renderItem(child))}\n
\n \n \n )\n }\n return (\n \n \n {fileItem.name} \n \n )\n }\n\n return (\n \n \n \n \n \n Explorer \n Outline \n \n \n \n \n \n {fileTree.map((item) => renderItem(item))}\n
\n \n \n \n )\n}\n\nfunction CollapsibleSettings() {\n const [isOpen, setIsOpen] = React.useState(false)\n\n return (\n \n \n \n Radius \n \n Set the corner radius of the element.\n \n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n \n Radius X\n \n \n \n \n \n Radius Y\n \n \n \n \n \n }\n >\n {isOpen ? (\n \n ) : (\n \n )}\n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/combobox-example.json b/apps/v4/public/r/styles/base-mira/combobox-example.json
index 9e7149c049..c74954eb58 100644
--- a/apps/v4/public/r/styles/base-mira/combobox-example.json
+++ b/apps/v4/public/r/styles/base-mira/combobox-example.json
@@ -17,7 +17,7 @@
"files": [
{
"path": "registry/base-mira/examples/combobox-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxCollection,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxInput,\n ComboboxItem,\n ComboboxLabel,\n ComboboxList,\n ComboboxSeparator,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ComboboxExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst countries = [\n { code: \"\", value: \"\", continent: \"\", label: \"Select country\" },\n { code: \"af\", value: \"afghanistan\", label: \"Afghanistan\", continent: \"Asia\" },\n { code: \"al\", value: \"albania\", label: \"Albania\", continent: \"Europe\" },\n { code: \"dz\", value: \"algeria\", label: \"Algeria\", continent: \"Africa\" },\n { code: \"ad\", value: \"andorra\", label: \"Andorra\", continent: \"Europe\" },\n { code: \"ao\", value: \"angola\", label: \"Angola\", continent: \"Africa\" },\n {\n code: \"ar\",\n value: \"argentina\",\n label: \"Argentina\",\n continent: \"South America\",\n },\n { code: \"am\", value: \"armenia\", label: \"Armenia\", continent: \"Asia\" },\n { code: \"au\", value: \"australia\", label: \"Australia\", continent: \"Oceania\" },\n { code: \"at\", value: \"austria\", label: \"Austria\", continent: \"Europe\" },\n { code: \"az\", value: \"azerbaijan\", label: \"Azerbaijan\", continent: \"Asia\" },\n {\n code: \"bs\",\n value: \"bahamas\",\n label: \"Bahamas\",\n continent: \"North America\",\n },\n { code: \"bh\", value: \"bahrain\", label: \"Bahrain\", continent: \"Asia\" },\n { code: \"bd\", value: \"bangladesh\", label: \"Bangladesh\", continent: \"Asia\" },\n {\n code: \"bb\",\n value: \"barbados\",\n label: \"Barbados\",\n continent: \"North America\",\n },\n { code: \"by\", value: \"belarus\", label: \"Belarus\", continent: \"Europe\" },\n { code: \"be\", value: \"belgium\", label: \"Belgium\", continent: \"Europe\" },\n { code: \"bz\", value: \"belize\", label: \"Belize\", continent: \"North America\" },\n { code: \"bj\", value: \"benin\", label: \"Benin\", continent: \"Africa\" },\n { code: \"bt\", value: \"bhutan\", label: \"Bhutan\", continent: \"Asia\" },\n {\n code: \"bo\",\n value: \"bolivia\",\n label: \"Bolivia\",\n continent: \"South America\",\n },\n {\n code: \"ba\",\n value: \"bosnia-and-herzegovina\",\n label: \"Bosnia and Herzegovina\",\n continent: \"Europe\",\n },\n { code: \"bw\", value: \"botswana\", label: \"Botswana\", continent: \"Africa\" },\n { code: \"br\", value: \"brazil\", label: \"Brazil\", continent: \"South America\" },\n { code: \"bn\", value: \"brunei\", label: \"Brunei\", continent: \"Asia\" },\n { code: \"bg\", value: \"bulgaria\", label: \"Bulgaria\", continent: \"Europe\" },\n {\n code: \"bf\",\n value: \"burkina-faso\",\n label: \"Burkina Faso\",\n continent: \"Africa\",\n },\n { code: \"bi\", value: \"burundi\", label: \"Burundi\", continent: \"Africa\" },\n { code: \"kh\", value: \"cambodia\", label: \"Cambodia\", continent: \"Asia\" },\n { code: \"cm\", value: \"cameroon\", label: \"Cameroon\", continent: \"Africa\" },\n { code: \"ca\", value: \"canada\", label: \"Canada\", continent: \"North America\" },\n { code: \"cv\", value: \"cape-verde\", label: \"Cape Verde\", continent: \"Africa\" },\n {\n code: \"cf\",\n value: \"central-african-republic\",\n label: \"Central African Republic\",\n continent: \"Africa\",\n },\n { code: \"td\", value: \"chad\", label: \"Chad\", continent: \"Africa\" },\n { code: \"cl\", value: \"chile\", label: \"Chile\", continent: \"South America\" },\n { code: \"cn\", value: \"china\", label: \"China\", continent: \"Asia\" },\n {\n code: \"co\",\n value: \"colombia\",\n label: \"Colombia\",\n continent: \"South America\",\n },\n { code: \"km\", value: \"comoros\", label: \"Comoros\", continent: \"Africa\" },\n { code: \"cg\", value: \"congo\", label: \"Congo\", continent: \"Africa\" },\n {\n code: \"cr\",\n value: \"costa-rica\",\n label: \"Costa Rica\",\n continent: \"North America\",\n },\n { code: \"hr\", value: \"croatia\", label: \"Croatia\", continent: \"Europe\" },\n { code: \"cu\", value: \"cuba\", label: \"Cuba\", continent: \"North America\" },\n { code: \"cy\", value: \"cyprus\", label: \"Cyprus\", continent: \"Asia\" },\n {\n code: \"cz\",\n value: \"czech-republic\",\n label: \"Czech Republic\",\n continent: \"Europe\",\n },\n { code: \"dk\", value: \"denmark\", label: \"Denmark\", continent: \"Europe\" },\n { code: \"dj\", value: \"djibouti\", label: \"Djibouti\", continent: \"Africa\" },\n {\n code: \"dm\",\n value: \"dominica\",\n label: \"Dominica\",\n continent: \"North America\",\n },\n {\n code: \"do\",\n value: \"dominican-republic\",\n label: \"Dominican Republic\",\n continent: \"North America\",\n },\n {\n code: \"ec\",\n value: \"ecuador\",\n label: \"Ecuador\",\n continent: \"South America\",\n },\n { code: \"eg\", value: \"egypt\", label: \"Egypt\", continent: \"Africa\" },\n {\n code: \"sv\",\n value: \"el-salvador\",\n label: \"El Salvador\",\n continent: \"North America\",\n },\n {\n code: \"gq\",\n value: \"equatorial-guinea\",\n label: \"Equatorial Guinea\",\n continent: \"Africa\",\n },\n { code: \"er\", value: \"eritrea\", label: \"Eritrea\", continent: \"Africa\" },\n { code: \"ee\", value: \"estonia\", label: \"Estonia\", continent: \"Europe\" },\n { code: \"et\", value: \"ethiopia\", label: \"Ethiopia\", continent: \"Africa\" },\n { code: \"fj\", value: \"fiji\", label: \"Fiji\", continent: \"Oceania\" },\n { code: \"fi\", value: \"finland\", label: \"Finland\", continent: \"Europe\" },\n { code: \"fr\", value: \"france\", label: \"France\", continent: \"Europe\" },\n { code: \"ga\", value: \"gabon\", label: \"Gabon\", continent: \"Africa\" },\n { code: \"gm\", value: \"gambia\", label: \"Gambia\", continent: \"Africa\" },\n { code: \"ge\", value: \"georgia\", label: \"Georgia\", continent: \"Asia\" },\n { code: \"de\", value: \"germany\", label: \"Germany\", continent: \"Europe\" },\n { code: \"gh\", value: \"ghana\", label: \"Ghana\", continent: \"Africa\" },\n { code: \"gr\", value: \"greece\", label: \"Greece\", continent: \"Europe\" },\n {\n code: \"gd\",\n value: \"grenada\",\n label: \"Grenada\",\n continent: \"North America\",\n },\n {\n code: \"gt\",\n value: \"guatemala\",\n label: \"Guatemala\",\n continent: \"North America\",\n },\n { code: \"gn\", value: \"guinea\", label: \"Guinea\", continent: \"Africa\" },\n {\n code: \"gw\",\n value: \"guinea-bissau\",\n label: \"Guinea-Bissau\",\n continent: \"Africa\",\n },\n { code: \"gy\", value: \"guyana\", label: \"Guyana\", continent: \"South America\" },\n { code: \"ht\", value: \"haiti\", label: \"Haiti\", continent: \"North America\" },\n {\n code: \"hn\",\n value: \"honduras\",\n label: \"Honduras\",\n continent: \"North America\",\n },\n { code: \"hu\", value: \"hungary\", label: \"Hungary\", continent: \"Europe\" },\n { code: \"is\", value: \"iceland\", label: \"Iceland\", continent: \"Europe\" },\n { code: \"in\", value: \"india\", label: \"India\", continent: \"Asia\" },\n { code: \"id\", value: \"indonesia\", label: \"Indonesia\", continent: \"Asia\" },\n { code: \"ir\", value: \"iran\", label: \"Iran\", continent: \"Asia\" },\n { code: \"iq\", value: \"iraq\", label: \"Iraq\", continent: \"Asia\" },\n { code: \"ie\", value: \"ireland\", label: \"Ireland\", continent: \"Europe\" },\n { code: \"il\", value: \"israel\", label: \"Israel\", continent: \"Asia\" },\n { code: \"it\", value: \"italy\", label: \"Italy\", continent: \"Europe\" },\n {\n code: \"jm\",\n value: \"jamaica\",\n label: \"Jamaica\",\n continent: \"North America\",\n },\n { code: \"jp\", value: \"japan\", label: \"Japan\", continent: \"Asia\" },\n { code: \"jo\", value: \"jordan\", label: \"Jordan\", continent: \"Asia\" },\n { code: \"kz\", value: \"kazakhstan\", label: \"Kazakhstan\", continent: \"Asia\" },\n { code: \"ke\", value: \"kenya\", label: \"Kenya\", continent: \"Africa\" },\n { code: \"kw\", value: \"kuwait\", label: \"Kuwait\", continent: \"Asia\" },\n { code: \"kg\", value: \"kyrgyzstan\", label: \"Kyrgyzstan\", continent: \"Asia\" },\n { code: \"la\", value: \"laos\", label: \"Laos\", continent: \"Asia\" },\n { code: \"lv\", value: \"latvia\", label: \"Latvia\", continent: \"Europe\" },\n { code: \"lb\", value: \"lebanon\", label: \"Lebanon\", continent: \"Asia\" },\n { code: \"ls\", value: \"lesotho\", label: \"Lesotho\", continent: \"Africa\" },\n { code: \"lr\", value: \"liberia\", label: \"Liberia\", continent: \"Africa\" },\n { code: \"ly\", value: \"libya\", label: \"Libya\", continent: \"Africa\" },\n {\n code: \"li\",\n value: \"liechtenstein\",\n label: \"Liechtenstein\",\n continent: \"Europe\",\n },\n { code: \"lt\", value: \"lithuania\", label: \"Lithuania\", continent: \"Europe\" },\n { code: \"lu\", value: \"luxembourg\", label: \"Luxembourg\", continent: \"Europe\" },\n { code: \"mg\", value: \"madagascar\", label: \"Madagascar\", continent: \"Africa\" },\n { code: \"mw\", value: \"malawi\", label: \"Malawi\", continent: \"Africa\" },\n { code: \"my\", value: \"malaysia\", label: \"Malaysia\", continent: \"Asia\" },\n { code: \"mv\", value: \"maldives\", label: \"Maldives\", continent: \"Asia\" },\n { code: \"ml\", value: \"mali\", label: \"Mali\", continent: \"Africa\" },\n { code: \"mt\", value: \"malta\", label: \"Malta\", continent: \"Europe\" },\n {\n code: \"mh\",\n value: \"marshall-islands\",\n label: \"Marshall Islands\",\n continent: \"Oceania\",\n },\n { code: \"mr\", value: \"mauritania\", label: \"Mauritania\", continent: \"Africa\" },\n { code: \"mu\", value: \"mauritius\", label: \"Mauritius\", continent: \"Africa\" },\n { code: \"mx\", value: \"mexico\", label: \"Mexico\", continent: \"North America\" },\n {\n code: \"fm\",\n value: \"micronesia\",\n label: \"Micronesia\",\n continent: \"Oceania\",\n },\n { code: \"md\", value: \"moldova\", label: \"Moldova\", continent: \"Europe\" },\n { code: \"mc\", value: \"monaco\", label: \"Monaco\", continent: \"Europe\" },\n { code: \"mn\", value: \"mongolia\", label: \"Mongolia\", continent: \"Asia\" },\n { code: \"me\", value: \"montenegro\", label: \"Montenegro\", continent: \"Europe\" },\n { code: \"ma\", value: \"morocco\", label: \"Morocco\", continent: \"Africa\" },\n { code: \"mz\", value: \"mozambique\", label: \"Mozambique\", continent: \"Africa\" },\n { code: \"mm\", value: \"myanmar\", label: \"Myanmar\", continent: \"Asia\" },\n { code: \"na\", value: \"namibia\", label: \"Namibia\", continent: \"Africa\" },\n { code: \"nr\", value: \"nauru\", label: \"Nauru\", continent: \"Oceania\" },\n { code: \"np\", value: \"nepal\", label: \"Nepal\", continent: \"Asia\" },\n {\n code: \"nl\",\n value: \"netherlands\",\n label: \"Netherlands\",\n continent: \"Europe\",\n },\n {\n code: \"nz\",\n value: \"new-zealand\",\n label: \"New Zealand\",\n continent: \"Oceania\",\n },\n {\n code: \"ni\",\n value: \"nicaragua\",\n label: \"Nicaragua\",\n continent: \"North America\",\n },\n { code: \"ne\", value: \"niger\", label: \"Niger\", continent: \"Africa\" },\n { code: \"ng\", value: \"nigeria\", label: \"Nigeria\", continent: \"Africa\" },\n { code: \"kp\", value: \"north-korea\", label: \"North Korea\", continent: \"Asia\" },\n {\n code: \"mk\",\n value: \"north-macedonia\",\n label: \"North Macedonia\",\n continent: \"Europe\",\n },\n { code: \"no\", value: \"norway\", label: \"Norway\", continent: \"Europe\" },\n { code: \"om\", value: \"oman\", label: \"Oman\", continent: \"Asia\" },\n { code: \"pk\", value: \"pakistan\", label: \"Pakistan\", continent: \"Asia\" },\n { code: \"pw\", value: \"palau\", label: \"Palau\", continent: \"Oceania\" },\n { code: \"ps\", value: \"palestine\", label: \"Palestine\", continent: \"Asia\" },\n { code: \"pa\", value: \"panama\", label: \"Panama\", continent: \"North America\" },\n {\n code: \"pg\",\n value: \"papua-new-guinea\",\n label: \"Papua New Guinea\",\n continent: \"Oceania\",\n },\n {\n code: \"py\",\n value: \"paraguay\",\n label: \"Paraguay\",\n continent: \"South America\",\n },\n { code: \"pe\", value: \"peru\", label: \"Peru\", continent: \"South America\" },\n { code: \"ph\", value: \"philippines\", label: \"Philippines\", continent: \"Asia\" },\n { code: \"pl\", value: \"poland\", label: \"Poland\", continent: \"Europe\" },\n { code: \"pt\", value: \"portugal\", label: \"Portugal\", continent: \"Europe\" },\n { code: \"qa\", value: \"qatar\", label: \"Qatar\", continent: \"Asia\" },\n { code: \"ro\", value: \"romania\", label: \"Romania\", continent: \"Europe\" },\n { code: \"ru\", value: \"russia\", label: \"Russia\", continent: \"Europe\" },\n { code: \"rw\", value: \"rwanda\", label: \"Rwanda\", continent: \"Africa\" },\n { code: \"ws\", value: \"samoa\", label: \"Samoa\", continent: \"Oceania\" },\n { code: \"sm\", value: \"san-marino\", label: \"San Marino\", continent: \"Europe\" },\n {\n code: \"sa\",\n value: \"saudi-arabia\",\n label: \"Saudi Arabia\",\n continent: \"Asia\",\n },\n { code: \"sn\", value: \"senegal\", label: \"Senegal\", continent: \"Africa\" },\n { code: \"rs\", value: \"serbia\", label: \"Serbia\", continent: \"Europe\" },\n { code: \"sc\", value: \"seychelles\", label: \"Seychelles\", continent: \"Africa\" },\n {\n code: \"sl\",\n value: \"sierra-leone\",\n label: \"Sierra Leone\",\n continent: \"Africa\",\n },\n { code: \"sg\", value: \"singapore\", label: \"Singapore\", continent: \"Asia\" },\n { code: \"sk\", value: \"slovakia\", label: \"Slovakia\", continent: \"Europe\" },\n { code: \"si\", value: \"slovenia\", label: \"Slovenia\", continent: \"Europe\" },\n {\n code: \"sb\",\n value: \"solomon-islands\",\n label: \"Solomon Islands\",\n continent: \"Oceania\",\n },\n { code: \"so\", value: \"somalia\", label: \"Somalia\", continent: \"Africa\" },\n {\n code: \"za\",\n value: \"south-africa\",\n label: \"South Africa\",\n continent: \"Africa\",\n },\n { code: \"kr\", value: \"south-korea\", label: \"South Korea\", continent: \"Asia\" },\n {\n code: \"ss\",\n value: \"south-sudan\",\n label: \"South Sudan\",\n continent: \"Africa\",\n },\n { code: \"es\", value: \"spain\", label: \"Spain\", continent: \"Europe\" },\n { code: \"lk\", value: \"sri-lanka\", label: \"Sri Lanka\", continent: \"Asia\" },\n { code: \"sd\", value: \"sudan\", label: \"Sudan\", continent: \"Africa\" },\n {\n code: \"sr\",\n value: \"suriname\",\n label: \"Suriname\",\n continent: \"South America\",\n },\n { code: \"se\", value: \"sweden\", label: \"Sweden\", continent: \"Europe\" },\n {\n code: \"ch\",\n value: \"switzerland\",\n label: \"Switzerland\",\n continent: \"Europe\",\n },\n { code: \"sy\", value: \"syria\", label: \"Syria\", continent: \"Asia\" },\n { code: \"tw\", value: \"taiwan\", label: \"Taiwan\", continent: \"Asia\" },\n { code: \"tj\", value: \"tajikistan\", label: \"Tajikistan\", continent: \"Asia\" },\n { code: \"tz\", value: \"tanzania\", label: \"Tanzania\", continent: \"Africa\" },\n { code: \"th\", value: \"thailand\", label: \"Thailand\", continent: \"Asia\" },\n { code: \"tl\", value: \"timor-leste\", label: \"Timor-Leste\", continent: \"Asia\" },\n { code: \"tg\", value: \"togo\", label: \"Togo\", continent: \"Africa\" },\n { code: \"to\", value: \"tonga\", label: \"Tonga\", continent: \"Oceania\" },\n {\n code: \"tt\",\n value: \"trinidad-and-tobago\",\n label: \"Trinidad and Tobago\",\n continent: \"North America\",\n },\n { code: \"tn\", value: \"tunisia\", label: \"Tunisia\", continent: \"Africa\" },\n { code: \"tr\", value: \"turkey\", label: \"Turkey\", continent: \"Asia\" },\n {\n code: \"tm\",\n value: \"turkmenistan\",\n label: \"Turkmenistan\",\n continent: \"Asia\",\n },\n { code: \"tv\", value: \"tuvalu\", label: \"Tuvalu\", continent: \"Oceania\" },\n { code: \"ug\", value: \"uganda\", label: \"Uganda\", continent: \"Africa\" },\n { code: \"ua\", value: \"ukraine\", label: \"Ukraine\", continent: \"Europe\" },\n {\n code: \"ae\",\n value: \"united-arab-emirates\",\n label: \"United Arab Emirates\",\n continent: \"Asia\",\n },\n {\n code: \"gb\",\n value: \"united-kingdom\",\n label: \"United Kingdom\",\n continent: \"Europe\",\n },\n {\n code: \"us\",\n value: \"united-states\",\n label: \"United States\",\n continent: \"North America\",\n },\n {\n code: \"uy\",\n value: \"uruguay\",\n label: \"Uruguay\",\n continent: \"South America\",\n },\n { code: \"uz\", value: \"uzbekistan\", label: \"Uzbekistan\", continent: \"Asia\" },\n { code: \"vu\", value: \"vanuatu\", label: \"Vanuatu\", continent: \"Oceania\" },\n {\n code: \"va\",\n value: \"vatican-city\",\n label: \"Vatican City\",\n continent: \"Europe\",\n },\n {\n code: \"ve\",\n value: \"venezuela\",\n label: \"Venezuela\",\n continent: \"South America\",\n },\n { code: \"vn\", value: \"vietnam\", label: \"Vietnam\", continent: \"Asia\" },\n { code: \"ye\", value: \"yemen\", label: \"Yemen\", continent: \"Asia\" },\n { code: \"zm\", value: \"zambia\", label: \"Zambia\", continent: \"Africa\" },\n { code: \"zw\", value: \"zimbabwe\", label: \"Zimbabwe\", continent: \"Africa\" },\n]\n\nconst timezones = [\n {\n value: \"Americas\",\n items: [\n \"(GMT-5) New York\",\n \"(GMT-8) Los Angeles\",\n \"(GMT-6) Chicago\",\n \"(GMT-5) Toronto\",\n \"(GMT-8) Vancouver\",\n \"(GMT-3) São Paulo\",\n ],\n },\n {\n value: \"Europe\",\n items: [\n \"(GMT+0) London\",\n \"(GMT+1) Paris\",\n \"(GMT+1) Berlin\",\n \"(GMT+1) Rome\",\n \"(GMT+1) Madrid\",\n \"(GMT+1) Amsterdam\",\n ],\n },\n {\n value: \"Asia/Pacific\",\n items: [\n \"(GMT+9) Tokyo\",\n \"(GMT+8) Shanghai\",\n \"(GMT+8) Singapore\",\n \"(GMT+4) Dubai\",\n \"(GMT+11) Sydney\",\n \"(GMT+9) Seoul\",\n ],\n },\n] as const\n\nfunction ComboboxBasic() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxDisabled() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInvalid() {\n return (\n \n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n Please select a valid framework. \n \n \n
\n \n )\n}\n\nfunction ComboboxWithClear() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroups() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroupsAndSeparator() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithForm() {\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n const formData = new FormData(event.target as HTMLFormElement)\n const framework = formData.get(\"framework\") as string\n toast(`You selected ${framework} as your framework.`)\n }\n\n return (\n \n \n \n \n \n \n Framework \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst largeListItems = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`)\n\nfunction ComboboxLargeList() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxAutoHighlight() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboxboxInputAddon() {\n return (\n \n \n \n \n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInPopup() {\n return (\n \n \n \n }\n >\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item.label}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultiple() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleDisabled() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleInvalid() {\n const anchor1 = useComboboxAnchor()\n const anchor2 = useComboboxAnchor()\n\n return (\n \n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Frameworks\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n Please select at least one framework.\n \n \n \n
\n \n )\n}\n\nfunction ComboboxMultipleNoRemove() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n \n {value}\n \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithCustomItems() {\n return (\n \n country.code !== \"\")}\n itemToStringValue={(country: (typeof countries)[number]) =>\n country.label\n }\n >\n \n \n No countries found. \n \n {(country) => (\n \n - \n
\n \n {country.label}\n \n \n {country.continent} ({country.code})\n \n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInDialog() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Framework \n \n Choose your preferred framework from the list below.\n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n setOpen(false)}\n >\n Cancel\n \n {\n toast(\"Framework selected.\")\n setOpen(false)\n }}\n >\n Confirm\n \n \n \n \n \n )\n}\n\nconst items = [\n {\n label: \"Select a framework\",\n value: null,\n },\n {\n label: \"React\",\n value: \"react\",\n },\n {\n label: \"Vue\",\n value: \"vue\",\n },\n {\n label: \"Angular\",\n value: \"angular\",\n },\n {\n label: \"Svelte\",\n value: \"svelte\",\n },\n {\n label: \"Solid\",\n value: \"solid\",\n },\n {\n label: \"Preact\",\n value: \"preact\",\n },\n {\n label: \"Next.js\",\n value: \"next.js\",\n },\n]\n\nfunction ComboboxWithOtherInputs() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Select a framework\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { toast } from \"sonner\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport { Card, CardContent, CardFooter } from \"@/registry/bases/base/ui/card\"\nimport {\n Combobox,\n ComboboxChip,\n ComboboxChips,\n ComboboxChipsInput,\n ComboboxCollection,\n ComboboxContent,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxInput,\n ComboboxItem,\n ComboboxLabel,\n ComboboxList,\n ComboboxSeparator,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n} from \"@/registry/bases/base/ui/combobox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLabel,\n} from \"@/registry/bases/base/ui/field\"\nimport { Input } from \"@/registry/bases/base/ui/input\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport {\n Item,\n ItemContent,\n ItemDescription,\n ItemTitle,\n} from \"@/registry/bases/base/ui/item\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function ComboboxExample() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst frameworks = [\n \"Next.js\",\n \"SvelteKit\",\n \"Nuxt.js\",\n \"Remix\",\n \"Astro\",\n] as const\n\nconst countries = [\n { code: \"\", value: \"\", continent: \"\", label: \"Select country\" },\n { code: \"af\", value: \"afghanistan\", label: \"Afghanistan\", continent: \"Asia\" },\n { code: \"al\", value: \"albania\", label: \"Albania\", continent: \"Europe\" },\n { code: \"dz\", value: \"algeria\", label: \"Algeria\", continent: \"Africa\" },\n { code: \"ad\", value: \"andorra\", label: \"Andorra\", continent: \"Europe\" },\n { code: \"ao\", value: \"angola\", label: \"Angola\", continent: \"Africa\" },\n {\n code: \"ar\",\n value: \"argentina\",\n label: \"Argentina\",\n continent: \"South America\",\n },\n { code: \"am\", value: \"armenia\", label: \"Armenia\", continent: \"Asia\" },\n { code: \"au\", value: \"australia\", label: \"Australia\", continent: \"Oceania\" },\n { code: \"at\", value: \"austria\", label: \"Austria\", continent: \"Europe\" },\n { code: \"az\", value: \"azerbaijan\", label: \"Azerbaijan\", continent: \"Asia\" },\n {\n code: \"bs\",\n value: \"bahamas\",\n label: \"Bahamas\",\n continent: \"North America\",\n },\n { code: \"bh\", value: \"bahrain\", label: \"Bahrain\", continent: \"Asia\" },\n { code: \"bd\", value: \"bangladesh\", label: \"Bangladesh\", continent: \"Asia\" },\n {\n code: \"bb\",\n value: \"barbados\",\n label: \"Barbados\",\n continent: \"North America\",\n },\n { code: \"by\", value: \"belarus\", label: \"Belarus\", continent: \"Europe\" },\n { code: \"be\", value: \"belgium\", label: \"Belgium\", continent: \"Europe\" },\n { code: \"bz\", value: \"belize\", label: \"Belize\", continent: \"North America\" },\n { code: \"bj\", value: \"benin\", label: \"Benin\", continent: \"Africa\" },\n { code: \"bt\", value: \"bhutan\", label: \"Bhutan\", continent: \"Asia\" },\n {\n code: \"bo\",\n value: \"bolivia\",\n label: \"Bolivia\",\n continent: \"South America\",\n },\n {\n code: \"ba\",\n value: \"bosnia-and-herzegovina\",\n label: \"Bosnia and Herzegovina\",\n continent: \"Europe\",\n },\n { code: \"bw\", value: \"botswana\", label: \"Botswana\", continent: \"Africa\" },\n { code: \"br\", value: \"brazil\", label: \"Brazil\", continent: \"South America\" },\n { code: \"bn\", value: \"brunei\", label: \"Brunei\", continent: \"Asia\" },\n { code: \"bg\", value: \"bulgaria\", label: \"Bulgaria\", continent: \"Europe\" },\n {\n code: \"bf\",\n value: \"burkina-faso\",\n label: \"Burkina Faso\",\n continent: \"Africa\",\n },\n { code: \"bi\", value: \"burundi\", label: \"Burundi\", continent: \"Africa\" },\n { code: \"kh\", value: \"cambodia\", label: \"Cambodia\", continent: \"Asia\" },\n { code: \"cm\", value: \"cameroon\", label: \"Cameroon\", continent: \"Africa\" },\n { code: \"ca\", value: \"canada\", label: \"Canada\", continent: \"North America\" },\n { code: \"cv\", value: \"cape-verde\", label: \"Cape Verde\", continent: \"Africa\" },\n {\n code: \"cf\",\n value: \"central-african-republic\",\n label: \"Central African Republic\",\n continent: \"Africa\",\n },\n { code: \"td\", value: \"chad\", label: \"Chad\", continent: \"Africa\" },\n { code: \"cl\", value: \"chile\", label: \"Chile\", continent: \"South America\" },\n { code: \"cn\", value: \"china\", label: \"China\", continent: \"Asia\" },\n {\n code: \"co\",\n value: \"colombia\",\n label: \"Colombia\",\n continent: \"South America\",\n },\n { code: \"km\", value: \"comoros\", label: \"Comoros\", continent: \"Africa\" },\n { code: \"cg\", value: \"congo\", label: \"Congo\", continent: \"Africa\" },\n {\n code: \"cr\",\n value: \"costa-rica\",\n label: \"Costa Rica\",\n continent: \"North America\",\n },\n { code: \"hr\", value: \"croatia\", label: \"Croatia\", continent: \"Europe\" },\n { code: \"cu\", value: \"cuba\", label: \"Cuba\", continent: \"North America\" },\n { code: \"cy\", value: \"cyprus\", label: \"Cyprus\", continent: \"Asia\" },\n {\n code: \"cz\",\n value: \"czech-republic\",\n label: \"Czech Republic\",\n continent: \"Europe\",\n },\n { code: \"dk\", value: \"denmark\", label: \"Denmark\", continent: \"Europe\" },\n { code: \"dj\", value: \"djibouti\", label: \"Djibouti\", continent: \"Africa\" },\n {\n code: \"dm\",\n value: \"dominica\",\n label: \"Dominica\",\n continent: \"North America\",\n },\n {\n code: \"do\",\n value: \"dominican-republic\",\n label: \"Dominican Republic\",\n continent: \"North America\",\n },\n {\n code: \"ec\",\n value: \"ecuador\",\n label: \"Ecuador\",\n continent: \"South America\",\n },\n { code: \"eg\", value: \"egypt\", label: \"Egypt\", continent: \"Africa\" },\n {\n code: \"sv\",\n value: \"el-salvador\",\n label: \"El Salvador\",\n continent: \"North America\",\n },\n {\n code: \"gq\",\n value: \"equatorial-guinea\",\n label: \"Equatorial Guinea\",\n continent: \"Africa\",\n },\n { code: \"er\", value: \"eritrea\", label: \"Eritrea\", continent: \"Africa\" },\n { code: \"ee\", value: \"estonia\", label: \"Estonia\", continent: \"Europe\" },\n { code: \"et\", value: \"ethiopia\", label: \"Ethiopia\", continent: \"Africa\" },\n { code: \"fj\", value: \"fiji\", label: \"Fiji\", continent: \"Oceania\" },\n { code: \"fi\", value: \"finland\", label: \"Finland\", continent: \"Europe\" },\n { code: \"fr\", value: \"france\", label: \"France\", continent: \"Europe\" },\n { code: \"ga\", value: \"gabon\", label: \"Gabon\", continent: \"Africa\" },\n { code: \"gm\", value: \"gambia\", label: \"Gambia\", continent: \"Africa\" },\n { code: \"ge\", value: \"georgia\", label: \"Georgia\", continent: \"Asia\" },\n { code: \"de\", value: \"germany\", label: \"Germany\", continent: \"Europe\" },\n { code: \"gh\", value: \"ghana\", label: \"Ghana\", continent: \"Africa\" },\n { code: \"gr\", value: \"greece\", label: \"Greece\", continent: \"Europe\" },\n {\n code: \"gd\",\n value: \"grenada\",\n label: \"Grenada\",\n continent: \"North America\",\n },\n {\n code: \"gt\",\n value: \"guatemala\",\n label: \"Guatemala\",\n continent: \"North America\",\n },\n { code: \"gn\", value: \"guinea\", label: \"Guinea\", continent: \"Africa\" },\n {\n code: \"gw\",\n value: \"guinea-bissau\",\n label: \"Guinea-Bissau\",\n continent: \"Africa\",\n },\n { code: \"gy\", value: \"guyana\", label: \"Guyana\", continent: \"South America\" },\n { code: \"ht\", value: \"haiti\", label: \"Haiti\", continent: \"North America\" },\n {\n code: \"hn\",\n value: \"honduras\",\n label: \"Honduras\",\n continent: \"North America\",\n },\n { code: \"hu\", value: \"hungary\", label: \"Hungary\", continent: \"Europe\" },\n { code: \"is\", value: \"iceland\", label: \"Iceland\", continent: \"Europe\" },\n { code: \"in\", value: \"india\", label: \"India\", continent: \"Asia\" },\n { code: \"id\", value: \"indonesia\", label: \"Indonesia\", continent: \"Asia\" },\n { code: \"ir\", value: \"iran\", label: \"Iran\", continent: \"Asia\" },\n { code: \"iq\", value: \"iraq\", label: \"Iraq\", continent: \"Asia\" },\n { code: \"ie\", value: \"ireland\", label: \"Ireland\", continent: \"Europe\" },\n { code: \"il\", value: \"israel\", label: \"Israel\", continent: \"Asia\" },\n { code: \"it\", value: \"italy\", label: \"Italy\", continent: \"Europe\" },\n {\n code: \"jm\",\n value: \"jamaica\",\n label: \"Jamaica\",\n continent: \"North America\",\n },\n { code: \"jp\", value: \"japan\", label: \"Japan\", continent: \"Asia\" },\n { code: \"jo\", value: \"jordan\", label: \"Jordan\", continent: \"Asia\" },\n { code: \"kz\", value: \"kazakhstan\", label: \"Kazakhstan\", continent: \"Asia\" },\n { code: \"ke\", value: \"kenya\", label: \"Kenya\", continent: \"Africa\" },\n { code: \"kw\", value: \"kuwait\", label: \"Kuwait\", continent: \"Asia\" },\n { code: \"kg\", value: \"kyrgyzstan\", label: \"Kyrgyzstan\", continent: \"Asia\" },\n { code: \"la\", value: \"laos\", label: \"Laos\", continent: \"Asia\" },\n { code: \"lv\", value: \"latvia\", label: \"Latvia\", continent: \"Europe\" },\n { code: \"lb\", value: \"lebanon\", label: \"Lebanon\", continent: \"Asia\" },\n { code: \"ls\", value: \"lesotho\", label: \"Lesotho\", continent: \"Africa\" },\n { code: \"lr\", value: \"liberia\", label: \"Liberia\", continent: \"Africa\" },\n { code: \"ly\", value: \"libya\", label: \"Libya\", continent: \"Africa\" },\n {\n code: \"li\",\n value: \"liechtenstein\",\n label: \"Liechtenstein\",\n continent: \"Europe\",\n },\n { code: \"lt\", value: \"lithuania\", label: \"Lithuania\", continent: \"Europe\" },\n { code: \"lu\", value: \"luxembourg\", label: \"Luxembourg\", continent: \"Europe\" },\n { code: \"mg\", value: \"madagascar\", label: \"Madagascar\", continent: \"Africa\" },\n { code: \"mw\", value: \"malawi\", label: \"Malawi\", continent: \"Africa\" },\n { code: \"my\", value: \"malaysia\", label: \"Malaysia\", continent: \"Asia\" },\n { code: \"mv\", value: \"maldives\", label: \"Maldives\", continent: \"Asia\" },\n { code: \"ml\", value: \"mali\", label: \"Mali\", continent: \"Africa\" },\n { code: \"mt\", value: \"malta\", label: \"Malta\", continent: \"Europe\" },\n {\n code: \"mh\",\n value: \"marshall-islands\",\n label: \"Marshall Islands\",\n continent: \"Oceania\",\n },\n { code: \"mr\", value: \"mauritania\", label: \"Mauritania\", continent: \"Africa\" },\n { code: \"mu\", value: \"mauritius\", label: \"Mauritius\", continent: \"Africa\" },\n { code: \"mx\", value: \"mexico\", label: \"Mexico\", continent: \"North America\" },\n {\n code: \"fm\",\n value: \"micronesia\",\n label: \"Micronesia\",\n continent: \"Oceania\",\n },\n { code: \"md\", value: \"moldova\", label: \"Moldova\", continent: \"Europe\" },\n { code: \"mc\", value: \"monaco\", label: \"Monaco\", continent: \"Europe\" },\n { code: \"mn\", value: \"mongolia\", label: \"Mongolia\", continent: \"Asia\" },\n { code: \"me\", value: \"montenegro\", label: \"Montenegro\", continent: \"Europe\" },\n { code: \"ma\", value: \"morocco\", label: \"Morocco\", continent: \"Africa\" },\n { code: \"mz\", value: \"mozambique\", label: \"Mozambique\", continent: \"Africa\" },\n { code: \"mm\", value: \"myanmar\", label: \"Myanmar\", continent: \"Asia\" },\n { code: \"na\", value: \"namibia\", label: \"Namibia\", continent: \"Africa\" },\n { code: \"nr\", value: \"nauru\", label: \"Nauru\", continent: \"Oceania\" },\n { code: \"np\", value: \"nepal\", label: \"Nepal\", continent: \"Asia\" },\n {\n code: \"nl\",\n value: \"netherlands\",\n label: \"Netherlands\",\n continent: \"Europe\",\n },\n {\n code: \"nz\",\n value: \"new-zealand\",\n label: \"New Zealand\",\n continent: \"Oceania\",\n },\n {\n code: \"ni\",\n value: \"nicaragua\",\n label: \"Nicaragua\",\n continent: \"North America\",\n },\n { code: \"ne\", value: \"niger\", label: \"Niger\", continent: \"Africa\" },\n { code: \"ng\", value: \"nigeria\", label: \"Nigeria\", continent: \"Africa\" },\n { code: \"kp\", value: \"north-korea\", label: \"North Korea\", continent: \"Asia\" },\n {\n code: \"mk\",\n value: \"north-macedonia\",\n label: \"North Macedonia\",\n continent: \"Europe\",\n },\n { code: \"no\", value: \"norway\", label: \"Norway\", continent: \"Europe\" },\n { code: \"om\", value: \"oman\", label: \"Oman\", continent: \"Asia\" },\n { code: \"pk\", value: \"pakistan\", label: \"Pakistan\", continent: \"Asia\" },\n { code: \"pw\", value: \"palau\", label: \"Palau\", continent: \"Oceania\" },\n { code: \"ps\", value: \"palestine\", label: \"Palestine\", continent: \"Asia\" },\n { code: \"pa\", value: \"panama\", label: \"Panama\", continent: \"North America\" },\n {\n code: \"pg\",\n value: \"papua-new-guinea\",\n label: \"Papua New Guinea\",\n continent: \"Oceania\",\n },\n {\n code: \"py\",\n value: \"paraguay\",\n label: \"Paraguay\",\n continent: \"South America\",\n },\n { code: \"pe\", value: \"peru\", label: \"Peru\", continent: \"South America\" },\n { code: \"ph\", value: \"philippines\", label: \"Philippines\", continent: \"Asia\" },\n { code: \"pl\", value: \"poland\", label: \"Poland\", continent: \"Europe\" },\n { code: \"pt\", value: \"portugal\", label: \"Portugal\", continent: \"Europe\" },\n { code: \"qa\", value: \"qatar\", label: \"Qatar\", continent: \"Asia\" },\n { code: \"ro\", value: \"romania\", label: \"Romania\", continent: \"Europe\" },\n { code: \"ru\", value: \"russia\", label: \"Russia\", continent: \"Europe\" },\n { code: \"rw\", value: \"rwanda\", label: \"Rwanda\", continent: \"Africa\" },\n { code: \"ws\", value: \"samoa\", label: \"Samoa\", continent: \"Oceania\" },\n { code: \"sm\", value: \"san-marino\", label: \"San Marino\", continent: \"Europe\" },\n {\n code: \"sa\",\n value: \"saudi-arabia\",\n label: \"Saudi Arabia\",\n continent: \"Asia\",\n },\n { code: \"sn\", value: \"senegal\", label: \"Senegal\", continent: \"Africa\" },\n { code: \"rs\", value: \"serbia\", label: \"Serbia\", continent: \"Europe\" },\n { code: \"sc\", value: \"seychelles\", label: \"Seychelles\", continent: \"Africa\" },\n {\n code: \"sl\",\n value: \"sierra-leone\",\n label: \"Sierra Leone\",\n continent: \"Africa\",\n },\n { code: \"sg\", value: \"singapore\", label: \"Singapore\", continent: \"Asia\" },\n { code: \"sk\", value: \"slovakia\", label: \"Slovakia\", continent: \"Europe\" },\n { code: \"si\", value: \"slovenia\", label: \"Slovenia\", continent: \"Europe\" },\n {\n code: \"sb\",\n value: \"solomon-islands\",\n label: \"Solomon Islands\",\n continent: \"Oceania\",\n },\n { code: \"so\", value: \"somalia\", label: \"Somalia\", continent: \"Africa\" },\n {\n code: \"za\",\n value: \"south-africa\",\n label: \"South Africa\",\n continent: \"Africa\",\n },\n { code: \"kr\", value: \"south-korea\", label: \"South Korea\", continent: \"Asia\" },\n {\n code: \"ss\",\n value: \"south-sudan\",\n label: \"South Sudan\",\n continent: \"Africa\",\n },\n { code: \"es\", value: \"spain\", label: \"Spain\", continent: \"Europe\" },\n { code: \"lk\", value: \"sri-lanka\", label: \"Sri Lanka\", continent: \"Asia\" },\n { code: \"sd\", value: \"sudan\", label: \"Sudan\", continent: \"Africa\" },\n {\n code: \"sr\",\n value: \"suriname\",\n label: \"Suriname\",\n continent: \"South America\",\n },\n { code: \"se\", value: \"sweden\", label: \"Sweden\", continent: \"Europe\" },\n {\n code: \"ch\",\n value: \"switzerland\",\n label: \"Switzerland\",\n continent: \"Europe\",\n },\n { code: \"sy\", value: \"syria\", label: \"Syria\", continent: \"Asia\" },\n { code: \"tw\", value: \"taiwan\", label: \"Taiwan\", continent: \"Asia\" },\n { code: \"tj\", value: \"tajikistan\", label: \"Tajikistan\", continent: \"Asia\" },\n { code: \"tz\", value: \"tanzania\", label: \"Tanzania\", continent: \"Africa\" },\n { code: \"th\", value: \"thailand\", label: \"Thailand\", continent: \"Asia\" },\n { code: \"tl\", value: \"timor-leste\", label: \"Timor-Leste\", continent: \"Asia\" },\n { code: \"tg\", value: \"togo\", label: \"Togo\", continent: \"Africa\" },\n { code: \"to\", value: \"tonga\", label: \"Tonga\", continent: \"Oceania\" },\n {\n code: \"tt\",\n value: \"trinidad-and-tobago\",\n label: \"Trinidad and Tobago\",\n continent: \"North America\",\n },\n { code: \"tn\", value: \"tunisia\", label: \"Tunisia\", continent: \"Africa\" },\n { code: \"tr\", value: \"turkey\", label: \"Turkey\", continent: \"Asia\" },\n {\n code: \"tm\",\n value: \"turkmenistan\",\n label: \"Turkmenistan\",\n continent: \"Asia\",\n },\n { code: \"tv\", value: \"tuvalu\", label: \"Tuvalu\", continent: \"Oceania\" },\n { code: \"ug\", value: \"uganda\", label: \"Uganda\", continent: \"Africa\" },\n { code: \"ua\", value: \"ukraine\", label: \"Ukraine\", continent: \"Europe\" },\n {\n code: \"ae\",\n value: \"united-arab-emirates\",\n label: \"United Arab Emirates\",\n continent: \"Asia\",\n },\n {\n code: \"gb\",\n value: \"united-kingdom\",\n label: \"United Kingdom\",\n continent: \"Europe\",\n },\n {\n code: \"us\",\n value: \"united-states\",\n label: \"United States\",\n continent: \"North America\",\n },\n {\n code: \"uy\",\n value: \"uruguay\",\n label: \"Uruguay\",\n continent: \"South America\",\n },\n { code: \"uz\", value: \"uzbekistan\", label: \"Uzbekistan\", continent: \"Asia\" },\n { code: \"vu\", value: \"vanuatu\", label: \"Vanuatu\", continent: \"Oceania\" },\n {\n code: \"va\",\n value: \"vatican-city\",\n label: \"Vatican City\",\n continent: \"Europe\",\n },\n {\n code: \"ve\",\n value: \"venezuela\",\n label: \"Venezuela\",\n continent: \"South America\",\n },\n { code: \"vn\", value: \"vietnam\", label: \"Vietnam\", continent: \"Asia\" },\n { code: \"ye\", value: \"yemen\", label: \"Yemen\", continent: \"Asia\" },\n { code: \"zm\", value: \"zambia\", label: \"Zambia\", continent: \"Africa\" },\n { code: \"zw\", value: \"zimbabwe\", label: \"Zimbabwe\", continent: \"Africa\" },\n]\n\nconst timezones = [\n {\n value: \"Americas\",\n items: [\n \"(GMT-5) New York\",\n \"(GMT-8) Los Angeles\",\n \"(GMT-6) Chicago\",\n \"(GMT-5) Toronto\",\n \"(GMT-8) Vancouver\",\n \"(GMT-3) São Paulo\",\n ],\n },\n {\n value: \"Europe\",\n items: [\n \"(GMT+0) London\",\n \"(GMT+1) Paris\",\n \"(GMT+1) Berlin\",\n \"(GMT+1) Rome\",\n \"(GMT+1) Madrid\",\n \"(GMT+1) Amsterdam\",\n ],\n },\n {\n value: \"Asia/Pacific\",\n items: [\n \"(GMT+9) Tokyo\",\n \"(GMT+8) Shanghai\",\n \"(GMT+8) Singapore\",\n \"(GMT+4) Dubai\",\n \"(GMT+11) Sydney\",\n \"(GMT+9) Seoul\",\n ],\n },\n] as const\n\nfunction ComboboxBasic() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxDisabled() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInvalid() {\n return (\n \n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n Please select a valid framework. \n \n \n
\n \n )\n}\n\nfunction ComboboxWithClear() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroups() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithGroupsAndSeparator() {\n return (\n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithForm() {\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n const formData = new FormData(event.target as HTMLFormElement)\n const framework = formData.get(\"framework\") as string\n toast(`You selected ${framework} as your framework.`)\n }\n\n return (\n \n \n \n \n \n \n Framework \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n Submit\n \n \n \n \n )\n}\n\nconst largeListItems = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`)\n\nfunction ComboboxLargeList() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxAutoHighlight() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboxboxInputAddon() {\n return (\n \n \n \n \n \n \n \n \n No timezones found. \n \n {(group) => (\n \n {group.value} \n \n {(item) => (\n \n {item}\n \n )}\n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInPopup() {\n return (\n \n \n \n }\n >\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item.label}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultiple() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleDisabled() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxMultipleInvalid() {\n const anchor1 = useComboboxAnchor()\n const anchor2 = useComboboxAnchor()\n\n return (\n \n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n Frameworks\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n {value} \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n Please select at least one framework.\n \n \n \n
\n \n )\n}\n\nfunction ComboboxMultipleNoRemove() {\n const anchor = useComboboxAnchor()\n\n return (\n \n \n \n \n {(values) => (\n \n {values.map((value: string) => (\n \n {value}\n \n ))}\n \n \n )}\n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxWithCustomItems() {\n return (\n \n country.code !== \"\")}\n itemToStringValue={(country: (typeof countries)[number]) =>\n country.label\n }\n >\n \n \n No countries found. \n \n {(country) => (\n \n - \n
\n \n {country.label}\n \n \n {country.continent} ({country.code})\n \n \n \n \n )}\n \n \n \n \n )\n}\n\nfunction ComboboxInDialog() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n }>\n Open Dialog\n \n \n \n Select Framework \n \n Choose your preferred framework from the list below.\n \n \n \n \n Framework\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n setOpen(false)}\n >\n Cancel\n \n {\n toast(\"Framework selected.\")\n setOpen(false)\n }}\n >\n Confirm\n \n \n \n \n \n )\n}\n\nconst items = [\n {\n label: \"Select a framework\",\n value: null,\n },\n {\n label: \"React\",\n value: \"react\",\n },\n {\n label: \"Vue\",\n value: \"vue\",\n },\n {\n label: \"Angular\",\n value: \"angular\",\n },\n {\n label: \"Svelte\",\n value: \"svelte\",\n },\n {\n label: \"Solid\",\n value: \"solid\",\n },\n {\n label: \"Preact\",\n value: \"preact\",\n },\n {\n label: \"Next.js\",\n value: \"next.js\",\n },\n]\n\nfunction ComboboxWithOtherInputs() {\n return (\n \n \n \n \n No items found. \n \n {(item) => (\n \n {item}\n \n )}\n \n \n \n \n \n \n \n \n \n {items.map((item) => (\n \n {item.label}\n \n ))}\n \n \n \n \n Select a framework\n \n \n \n \n \n \n \n \n \n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/combobox.json b/apps/v4/public/r/styles/base-mira/combobox.json
index fd87b78754..3df684aa22 100644
--- a/apps/v4/public/r/styles/base-mira/combobox.json
+++ b/apps/v4/public/r/styles/base-mira/combobox.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-mira/ui/combobox.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Combobox = ComboboxPrimitive.Root\n\nfunction ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return \n}\n\nfunction ComboboxTrigger({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Trigger.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {\n return (\n }\n className={cn(className)}\n {...props}\n >\n \n \n )\n}\n\nfunction ComboboxInput({\n className,\n children,\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n}: ComboboxPrimitive.Input.Props & {\n showTrigger?: boolean\n showClear?: boolean\n}) {\n return (\n \n }\n {...props}\n />\n \n {showTrigger && (\n }\n data-slot=\"input-group-button\"\n className=\"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent\"\n disabled={disabled}\n />\n )}\n {showClear && }\n \n {children}\n \n )\n}\n\nfunction ComboboxContent({\n className,\n side = \"bottom\",\n sideOffset = 6,\n align = \"start\",\n alignOffset = 0,\n anchor,\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick<\n ComboboxPrimitive.Positioner.Props,\n \"side\" | \"align\" | \"sideOffset\" | \"alignOffset\" | \"anchor\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction ComboboxItem({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Item.Props) {\n return (\n \n {children}\n }\n >\n \n \n \n )\n}\n\nfunction ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ComboboxLabel({\n className,\n ...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {\n return (\n \n )\n}\n\nfunction ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {\n return (\n \n )\n}\n\nfunction ComboboxSeparator({\n className,\n ...props\n}: ComboboxPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChips({\n className,\n ...props\n}: React.ComponentPropsWithRef &\n ComboboxPrimitive.Chips.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: ComboboxPrimitive.Chip.Props & {\n showRemove?: boolean\n}) {\n return (\n \n {children}\n {showRemove && (\n }\n className=\"-ml-1 opacity-50 hover:opacity-100\"\n data-slot=\"combobox-chip-remove\"\n >\n \n \n )}\n \n )\n}\n\nfunction ComboboxChipsInput({\n className,\n ...props\n}: ComboboxPrimitive.Input.Props) {\n return (\n \n )\n}\n\nfunction useComboboxAnchor() {\n return React.useRef(null)\n}\n\nexport {\n Combobox,\n ComboboxInput,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nconst Combobox = ComboboxPrimitive.Root\n\nfunction ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {\n return \n}\n\nfunction ComboboxTrigger({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Trigger.Props) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {\n return (\n }\n className={cn(className)}\n {...props}\n >\n \n \n )\n}\n\nfunction ComboboxInput({\n className,\n children,\n disabled = false,\n showTrigger = true,\n showClear = false,\n ...props\n}: ComboboxPrimitive.Input.Props & {\n showTrigger?: boolean\n showClear?: boolean\n}) {\n return (\n \n }\n {...props}\n />\n \n {showTrigger && (\n }\n data-slot=\"input-group-button\"\n className=\"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent\"\n disabled={disabled}\n />\n )}\n {showClear && }\n \n {children}\n \n )\n}\n\nfunction ComboboxContent({\n className,\n side = \"bottom\",\n sideOffset = 6,\n align = \"start\",\n alignOffset = 0,\n anchor,\n ...props\n}: ComboboxPrimitive.Popup.Props &\n Pick<\n ComboboxPrimitive.Positioner.Props,\n \"side\" | \"align\" | \"sideOffset\" | \"alignOffset\" | \"anchor\"\n >) {\n return (\n \n \n \n \n \n )\n}\n\nfunction ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {\n return (\n \n )\n}\n\nfunction ComboboxItem({\n className,\n children,\n ...props\n}: ComboboxPrimitive.Item.Props) {\n return (\n \n {children}\n }\n >\n \n \n \n )\n}\n\nfunction ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {\n return (\n \n )\n}\n\nfunction ComboboxLabel({\n className,\n ...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n return (\n \n )\n}\n\nfunction ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {\n return (\n \n )\n}\n\nfunction ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {\n return (\n \n )\n}\n\nfunction ComboboxSeparator({\n className,\n ...props\n}: ComboboxPrimitive.Separator.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChips({\n className,\n ...props\n}: React.ComponentPropsWithRef &\n ComboboxPrimitive.Chips.Props) {\n return (\n \n )\n}\n\nfunction ComboboxChip({\n className,\n children,\n showRemove = true,\n ...props\n}: ComboboxPrimitive.Chip.Props & {\n showRemove?: boolean\n}) {\n return (\n \n {children}\n {showRemove && (\n }\n className=\"-ml-1 opacity-50 hover:opacity-100\"\n data-slot=\"combobox-chip-remove\"\n >\n \n \n )}\n \n )\n}\n\nfunction ComboboxChipsInput({\n className,\n ...props\n}: ComboboxPrimitive.Input.Props) {\n return (\n \n )\n}\n\nfunction useComboboxAnchor() {\n return React.useRef(null)\n}\n\nexport {\n Combobox,\n ComboboxInput,\n ComboboxContent,\n ComboboxList,\n ComboboxItem,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n ComboboxSeparator,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n ComboboxTrigger,\n ComboboxValue,\n useComboboxAnchor,\n}\n",
"type": "registry:ui"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/command-example.json b/apps/v4/public/r/styles/base-mira/command-example.json
index 7076a9224a..0088933ba8 100644
--- a/apps/v4/public/r/styles/base-mira/command-example.json
+++ b/apps/v4/public/r/styles/base-mira/command-example.json
@@ -10,7 +10,7 @@
"files": [
{
"path": "registry/base-mira/examples/command-example.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from \"@/registry/bases/base/ui/command\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CommandExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction CommandBasic() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n Calendar \n Search Emoji \n Calculator \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithShortcuts() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithGroups() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandManyItems() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Home \n ⌘H \n \n \n \n Inbox \n ⌘I \n \n \n \n Documents \n ⌘D \n \n \n \n Folders \n ⌘F \n \n \n \n \n \n \n New File \n ⌘N \n \n \n \n New Folder \n ⇧⌘N \n \n \n \n Copy \n ⌘C \n \n \n \n Cut \n ⌘X \n \n \n \n Paste \n ⌘V \n \n \n \n Delete \n ⌫ \n \n \n \n \n \n \n Grid View \n \n \n \n List View \n \n \n \n Zoom In \n ⌘+ \n \n \n \n Zoom Out \n ⌘- \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n Notifications \n \n \n \n Help & Support \n \n \n \n \n \n \n Calculator \n \n \n \n Calendar \n \n \n \n Image Editor \n \n \n \n Code Editor \n \n \n \n \n \n
\n \n )\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n Example,\n ExampleWrapper,\n} from \"@/registry/bases/base/components/example\"\nimport { Button } from \"@/registry/bases/base/ui/button\"\nimport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n} from \"@/registry/bases/base/ui/command\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nexport default function CommandExample() {\n return (\n \n \n \n \n \n \n )\n}\n\nfunction CommandBasic() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n Calendar \n Search Emoji \n Calculator \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithShortcuts() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandWithGroups() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Calendar \n \n \n \n Search Emoji \n \n \n \n Calculator \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n \n \n
\n \n )\n}\n\nfunction CommandManyItems() {\n const [open, setOpen] = React.useState(false)\n\n return (\n \n \n setOpen(true)}\n variant=\"outline\"\n className=\"w-fit\"\n >\n Open Menu\n \n \n \n \n \n No results found. \n \n \n \n Home \n ⌘H \n \n \n \n Inbox \n ⌘I \n \n \n \n Documents \n ⌘D \n \n \n \n Folders \n ⌘F \n \n \n \n \n \n \n New File \n ⌘N \n \n \n \n New Folder \n ⇧⌘N \n \n \n \n Copy \n ⌘C \n \n \n \n Cut \n ⌘X \n \n \n \n Paste \n ⌘V \n \n \n \n Delete \n ⌫ \n \n \n \n \n \n \n Grid View \n \n \n \n List View \n \n \n \n Zoom In \n ⌘+ \n \n \n \n Zoom Out \n ⌘- \n \n \n \n \n \n \n Profile \n ⌘P \n \n \n \n Billing \n ⌘B \n \n \n \n Settings \n ⌘S \n \n \n \n Notifications \n \n \n \n Help & Support \n \n \n \n \n \n \n Calculator \n \n \n \n Calendar \n \n \n \n Image Editor \n \n \n \n Code Editor \n \n \n \n \n \n
\n \n )\n}\n",
"type": "registry:example"
}
],
diff --git a/apps/v4/public/r/styles/base-mira/command.json b/apps/v4/public/r/styles/base-mira/command.json
index a80a36fe9f..30f0fa4ece 100644
--- a/apps/v4/public/r/styles/base-mira/command.json
+++ b/apps/v4/public/r/styles/base-mira/command.json
@@ -11,7 +11,7 @@
"files": [
{
"path": "registry/base-mira/ui/command.tsx",
- "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n InputGroup,\n InputGroupAddon,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: Omit, \"children\"> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n children: React.ReactNode\n}) {\n return (\n \n \n {title} \n {description} \n \n \n {children}\n \n \n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n
\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps) {\n return (\n \n {children}\n \n \n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n \n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n",
+ "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\n\nimport { cn } from \"@/registry/bases/base/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/registry/bases/base/ui/dialog\"\nimport {\n InputGroup,\n InputGroupAddon,\n} from \"@/registry/bases/base/ui/input-group\"\nimport { IconPlaceholder } from \"@/app/(create)/components/icon-placeholder\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: Omit, \"children\"> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n children: React.ReactNode\n}) {\n return (\n \n \n {title} \n {description} \n \n \n {children}\n \n \n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n \n \n \n \n \n \n
\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n