svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction AlertDescription({\r\n className,\r\n ...props\r\n}: ComponentProps<\"div\">) {\r\n return (\r\n
\r\n );\r\n}\r\n\r\nfunction AlertAction({ className, ...props }: ComponentProps<\"div\">) {\r\n return (\r\n
\r\n );\r\n}\r\n\r\nexport { Alert, AlertTitle, AlertDescription, AlertAction };\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/alert.tsx"
}
],
+ "categories": [
+ "alert"
+ ],
"type": "registry:ui"
}
\ No newline at end of file
diff --git a/public/r/aspect-ratio.json b/public/r/aspect-ratio.json
index 6e79bca..33b575a 100644
--- a/public/r/aspect-ratio.json
+++ b/public/r/aspect-ratio.json
@@ -1,15 +1,18 @@
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "aspect-ratio",
- "dependencies": [],
- "registryDependencies": [],
+ "title": "Aspect Ratio",
+ "description": "Aspect Ratio component.",
"files": [
{
"path": "src/components/ui/aspect-ratio.tsx",
- "content": "import { cn } from \"@/lib/utils\"\r\n\r\nfunction AspectRatio({\r\n ratio,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & { ratio: number }) {\r\n return (\r\n
\r\n )\r\n}\r\n\r\nexport { AspectRatio }\r\n",
- "type": "registry:ui",
- "target": "components/ui/aspect-ratio.tsx"
+ "content": "import { ComponentProps, CSSProperties } from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction AspectRatio({\r\n ratio,\r\n className,\r\n ...props\r\n}: ComponentProps<\"div\"> & { ratio: number }) {\r\n return (\r\n
\r\n )\r\n}\r\n\r\nexport { AspectRatio }\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/aspect-ratio.tsx"
}
],
+ "categories": [
+ "aspect-ratio"
+ ],
"type": "registry:ui"
}
\ No newline at end of file
diff --git a/public/r/attachment.json b/public/r/attachment.json
new file mode 100644
index 0000000..e094dcf
--- /dev/null
+++ b/public/r/attachment.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "attachment",
+ "title": "Attachment",
+ "description": "Attachment component.",
+ "dependencies": [
+ "@base-ui/react",
+ "class-variance-authority"
+ ],
+ "registryDependencies": [
+ "@uiable/button"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/attachment.tsx",
+ "content": "import { ComponentProps } from \"react\"\r\nimport { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button } from \"@/components/ui/button\"\r\n\r\nconst attachmentVariants = cva(\r\n \"group/attachment relative flex w-fit max-w-full min-w-0 shrink-0 flex-wrap rounded-xl border bg-card text-card-foreground transition-colors focus-within:ring-1 focus-within:ring-ring/50 has-[>a,>button]:hover:bg-muted/50 data-[state=error]:border-destructive/30 data-[state=idle]:border-dashed\",\r\n {\r\n variants: {\r\n size: {\r\n default:\r\n \"gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2\",\r\n sm: \"gap-2.5 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5\",\r\n xs: \"gap-1.5 rounded-lg text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1\",\r\n },\r\n orientation: {\r\n horizontal: \"min-w-40 items-center\",\r\n vertical: \"w-24 flex-col has-data-[slot=attachment-content]:w-30\",\r\n },\r\n },\r\n }\r\n)\r\n\r\nfunction Attachment({\r\n className,\r\n state = \"done\",\r\n size = \"default\",\r\n orientation = \"horizontal\",\r\n ...props\r\n}: ComponentProps<\"div\"> &\r\n VariantProps
& {\r\n state?: \"idle\" | \"uploading\" | \"processing\" | \"error\" | \"done\"\r\n }) {\r\n const resolvedOrientation = orientation ?? \"horizontal\"\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nconst attachmentMediaVariants = cva(\r\n \"relative flex aspect-square w-10 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-md group-data-[state=error]/attachment:bg-destructive/10 group-data-[state=error]/attachment:text-destructive group-data-[orientation=vertical]/attachment:*:data-[slot=spinner]:size-6! [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*='size-'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*='size-'])]:size-3.5\",\r\n {\r\n variants: {\r\n variant: {\r\n icon: \"\",\r\n image:\r\n \"opacity-60 group-data-[state=done]/attachment:opacity-100 group-data-[state=idle]/attachment:opacity-100 *:[img]:aspect-square *:[img]:w-full *:[img]:object-cover\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"icon\",\r\n },\r\n }\r\n)\r\n\r\nfunction AttachmentMedia({\r\n className,\r\n variant = \"icon\",\r\n ...props\r\n}: ComponentProps<\"div\"> & VariantProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AttachmentContent({\r\n className,\r\n ...props\r\n}: ComponentProps<\"div\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AttachmentTitle({\r\n className,\r\n ...props\r\n}: ComponentProps<\"span\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AttachmentDescription({\r\n className,\r\n ...props\r\n}: ComponentProps<\"span\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AttachmentActions({\r\n className,\r\n ...props\r\n}: ComponentProps<\"div\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AttachmentAction({\r\n className,\r\n variant,\r\n size = \"icon-xs\",\r\n ...props\r\n}: ComponentProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AttachmentTrigger({\r\n className,\r\n render,\r\n type,\r\n ...props\r\n}: useRender.ComponentProps<\"button\">) {\r\n return useRender({\r\n defaultTagName: \"button\",\r\n props: mergeProps<\"button\">(\r\n {\r\n type: render ? type : (type ?? \"button\"),\r\n className: cn(\"absolute inset-0 z-10 outline-none\", className),\r\n },\r\n props\r\n ),\r\n render,\r\n state: {\r\n slot: \"attachment-trigger\",\r\n },\r\n })\r\n}\r\n\r\nfunction AttachmentGroup({ className, ...props }: ComponentProps<\"div\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport {\r\n Attachment,\r\n AttachmentGroup,\r\n AttachmentMedia,\r\n AttachmentContent,\r\n AttachmentTitle,\r\n AttachmentDescription,\r\n AttachmentActions,\r\n AttachmentAction,\r\n AttachmentTrigger,\r\n}\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/attachment.tsx"
+ }
+ ],
+ "categories": [
+ "attachment"
+ ],
+ "type": "registry:ui"
+}
\ No newline at end of file
diff --git a/public/r/avatar.json b/public/r/avatar.json
index 138ba27..b593a41 100644
--- a/public/r/avatar.json
+++ b/public/r/avatar.json
@@ -1,18 +1,21 @@
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "avatar",
+ "title": "Avatar",
+ "description": "Avatar component.",
"dependencies": [
- "@base-ui/react",
- "react"
+ "@base-ui/react"
],
- "registryDependencies": [],
"files": [
{
"path": "src/components/ui/avatar.tsx",
- "content": "\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Avatar as AvatarPrimitive } from \"@base-ui/react/avatar\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction Avatar({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: AvatarPrimitive.Root.Props & {\r\n size?: \"default\" | \"sm\" | \"lg\"\r\n}) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AvatarFallback({\r\n className,\r\n ...props\r\n}: AvatarPrimitive.Fallback.Props) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\r\n return (\r\n svg]:hidden\",\r\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\r\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction AvatarGroupCount({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"div\">) {\r\n return (\r\n svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Avatar,\r\n AvatarImage,\r\n AvatarFallback,\r\n AvatarGroup,\r\n AvatarGroupCount,\r\n AvatarBadge,\r\n}\r\n",
- "type": "registry:ui",
- "target": "components/ui/avatar.tsx"
+ "content": "\"use client\";\r\n\r\nimport { ComponentProps } from \"react\";\r\n\r\nimport { Avatar as AvatarPrimitive } from \"@base-ui/react/avatar\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nfunction Avatar({\r\n className,\r\n size = \"default\",\r\n ...props\r\n}: AvatarPrimitive.Root.Props & {\r\n size?: \"default\" | \"sm\" | \"lg\";\r\n}) {\r\n return (\r\n
\r\n );\r\n}\r\n\r\nfunction AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {\r\n return (\r\n
\r\n );\r\n}\r\n\r\nfunction AvatarFallback({\r\n className,\r\n ...props\r\n}: AvatarPrimitive.Fallback.Props) {\r\n return (\r\n
\r\n );\r\n}\r\n\r\nfunction AvatarBadge({ className, ...props }: ComponentProps<\"span\">) {\r\n return (\r\n
svg]:hidden\",\r\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\r\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction AvatarGroup({ className, ...props }: ComponentProps<\"div\">) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction AvatarGroupCount({\r\n className,\r\n ...props\r\n}: ComponentProps<\"div\">) {\r\n return (\r\n svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Avatar,\r\n AvatarImage,\r\n AvatarFallback,\r\n AvatarGroup,\r\n AvatarGroupCount,\r\n AvatarBadge\r\n};\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/avatar.tsx"
}
],
+ "categories": [
+ "avatar"
+ ],
"type": "registry:ui"
}
\ No newline at end of file
diff --git a/public/r/badge.json b/public/r/badge.json
index a120426..69417e4 100644
--- a/public/r/badge.json
+++ b/public/r/badge.json
@@ -1,18 +1,22 @@
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "badge",
+ "title": "Badge",
+ "description": "Badge component.",
"dependencies": [
"@base-ui/react",
"class-variance-authority"
],
- "registryDependencies": [],
"files": [
{
"path": "src/components/ui/badge.tsx",
- "content": "import { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst badgeVariants = cva(\r\n \"gap-1 rounded-md border border-transparent px-[0.8em] py-[0.45em] text-[.75em] font-medium leading-[0.9] transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive overflow-hidden group/badge\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-white [a]:hover:bg-primary/80\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\r\n destructive:\r\n \"bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20\",\r\n outline:\r\n \"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\r\n ghost:\r\n \"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Badge({\r\n className,\r\n variant = \"default\",\r\n render,\r\n ...props\r\n}: useRender.ComponentProps<\"span\"> & VariantProps
) {\r\n return useRender({\r\n defaultTagName: \"span\",\r\n props: mergeProps<\"span\">(\r\n {\r\n className: cn(badgeVariants({ variant }), className),\r\n },\r\n props\r\n ),\r\n render,\r\n state: {\r\n slot: \"badge\",\r\n variant,\r\n },\r\n })\r\n}\r\n\r\nexport { Badge, badgeVariants }\r\n",
- "type": "registry:ui",
- "target": "components/ui/badge.tsx"
+ "content": "\"use client\";\r\n\r\nimport { mergeProps } from \"@base-ui/react/merge-props\";\r\nimport { useRender } from \"@base-ui/react/use-render\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst badgeVariants = cva(\r\n \"gap-1 rounded-lg border border-transparent px-[0.8em] py-[0.45em] text-[.75em] font-medium leading-[0.9] transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! inline-flex items-center justify-center w-fit whitespace-nowrap shrink-0 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive overflow-hidden group/badge\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-white [a]:hover:bg-primary/80\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\r\n destructive:\r\n \"bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20\",\r\n outline:\r\n \"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\r\n ghost:\r\n \"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50\",\r\n link: \"text-primary underline-offset-4 hover:underline\"\r\n }\r\n },\r\n defaultVariants: {\r\n variant: \"default\"\r\n }\r\n }\r\n);\r\n\r\nfunction Badge({\r\n className,\r\n variant = \"default\",\r\n render,\r\n ...props\r\n}: useRender.ComponentProps<\"span\"> & VariantProps) {\r\n return useRender({\r\n defaultTagName: \"span\",\r\n props: mergeProps<\"span\">(\r\n {\r\n className: cn(badgeVariants({ variant }), className)\r\n },\r\n props\r\n ),\r\n render,\r\n state: {\r\n slot: \"badge\",\r\n variant\r\n }\r\n });\r\n}\r\n\r\nexport { Badge, badgeVariants };\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/badge.tsx"
}
],
+ "categories": [
+ "badge"
+ ],
"type": "registry:ui"
}
\ No newline at end of file
diff --git a/public/r/breadcrumb.json b/public/r/breadcrumb.json
index db563d6..6b848a5 100644
--- a/public/r/breadcrumb.json
+++ b/public/r/breadcrumb.json
@@ -1,19 +1,22 @@
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "breadcrumb",
+ "title": "Breadcrumb",
+ "description": "Breadcrumb component.",
"dependencies": [
"@base-ui/react",
- "lucide-react",
- "react"
+ "lucide-react"
],
- "registryDependencies": [],
"files": [
{
"path": "src/components/ui/breadcrumb.tsx",
- "content": "import * as React from \"react\"\r\nimport { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { ChevronRightIcon, MoreHorizontalIcon } from \"lucide-react\"\r\n\r\nfunction Breadcrumb({ className, ...props }: React.ComponentProps<\"nav\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\r\n return (\r\n
\r\n )\r\n}\r\n\r\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction BreadcrumbLink({\r\n className,\r\n render,\r\n ...props\r\n}: useRender.ComponentProps<\"a\">) {\r\n return useRender({\r\n defaultTagName: \"a\",\r\n props: mergeProps<\"a\">(\r\n {\r\n className: cn(\"hover:text-foreground transition-colors\", className),\r\n },\r\n props\r\n ),\r\n render,\r\n state: {\r\n slot: \"breadcrumb-link\",\r\n },\r\n })\r\n}\r\n\r\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction BreadcrumbSeparator({\r\n children,\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"li\">) {\r\n return (\r\n svg]:size-4 [&>svg]:leading-0\", className)}\r\n {...props}\r\n >\r\n {children ?? (\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nfunction BreadcrumbEllipsis({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n svg]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n \r\n More\r\n \r\n )\r\n}\r\n\r\nexport {\r\n Breadcrumb,\r\n BreadcrumbList,\r\n BreadcrumbItem,\r\n BreadcrumbLink,\r\n BreadcrumbPage,\r\n BreadcrumbSeparator,\r\n BreadcrumbEllipsis,\r\n}\r\n",
- "type": "registry:ui",
- "target": "components/ui/breadcrumb.tsx"
+ "content": "\"use client\";\r\n\r\nimport { ComponentProps } from \"react\";\r\n\r\nimport { mergeProps } from \"@base-ui/react/merge-props\";\r\nimport { useRender } from \"@base-ui/react/use-render\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\nimport { ChevronRightIcon, MoreHorizontalIcon } from \"lucide-react\";\r\n\r\nfunction Breadcrumb({ className, ...props }: ComponentProps<\"nav\">) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction BreadcrumbList({ className, ...props }: ComponentProps<\"ol\">) {\r\n return (\r\n
\r\n );\r\n}\r\n\r\nfunction BreadcrumbItem({ className, ...props }: ComponentProps<\"li\">) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction BreadcrumbLink({\r\n className,\r\n render,\r\n ...props\r\n}: useRender.ComponentProps<\"a\">) {\r\n return useRender({\r\n defaultTagName: \"a\",\r\n props: mergeProps<\"a\">(\r\n {\r\n className: cn(\"hover:text-foreground transition-colors\", className)\r\n },\r\n props\r\n ),\r\n render,\r\n state: {\r\n slot: \"breadcrumb-link\"\r\n }\r\n });\r\n}\r\n\r\nfunction BreadcrumbPage({ className, ...props }: ComponentProps<\"span\">) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction BreadcrumbSeparator({\r\n children,\r\n className,\r\n ...props\r\n}: ComponentProps<\"li\">) {\r\n return (\r\n svg]:size-4 [&>svg]:leading-0\", className)}\r\n {...props}\r\n >\r\n {children ?? }\r\n \r\n );\r\n}\r\n\r\nfunction BreadcrumbEllipsis({\r\n className,\r\n ...props\r\n}: ComponentProps<\"span\">) {\r\n return (\r\n svg]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n \r\n More\r\n \r\n );\r\n}\r\n\r\nexport {\r\n Breadcrumb,\r\n BreadcrumbList,\r\n BreadcrumbItem,\r\n BreadcrumbLink,\r\n BreadcrumbPage,\r\n BreadcrumbSeparator,\r\n BreadcrumbEllipsis\r\n};\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/breadcrumb.tsx"
}
],
+ "categories": [
+ "breadcrumb"
+ ],
"type": "registry:ui"
}
\ No newline at end of file
diff --git a/public/r/bubble.json b/public/r/bubble.json
new file mode 100644
index 0000000..f7e209f
--- /dev/null
+++ b/public/r/bubble.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "bubble",
+ "title": "Bubble",
+ "description": "Bubble component.",
+ "dependencies": [
+ "@base-ui/react",
+ "class-variance-authority"
+ ],
+ "files": [
+ {
+ "path": "src/components/ui/bubble.tsx",
+ "content": "import { ComponentProps } from \"react\"\r\nimport { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction BubbleGroup({ className, ...props }: ComponentProps<\"div\">) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nconst bubbleVariants = cva(\r\n \"group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full\",\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n \"*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80\",\r\n secondary:\r\n \"*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]\",\r\n muted:\r\n \"*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]\",\r\n tinted:\r\n \"*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]\",\r\n outline:\r\n \"*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30\",\r\n ghost:\r\n \"border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50\",\r\n destructive:\r\n \"*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Bubble({\r\n variant = \"default\",\r\n align = \"start\",\r\n className,\r\n ...props\r\n}: ComponentProps<\"div\"> &\r\n VariantProps & {\r\n align?: \"start\" | \"end\"\r\n }) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction BubbleContent({\r\n className,\r\n render,\r\n ...props\r\n}: useRender.ComponentProps<\"div\">) {\r\n return useRender({\r\n defaultTagName: \"div\",\r\n props: mergeProps<\"div\">(\r\n {\r\n className: cn(\r\n \"w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50\",\r\n className\r\n ),\r\n },\r\n props\r\n ),\r\n render,\r\n state: {\r\n slot: \"bubble-content\",\r\n },\r\n })\r\n}\r\n\r\nconst bubbleReactionsVariants = cva(\r\n \"absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0\",\r\n {\r\n variants: {\r\n side: {\r\n top: \"top-0 -translate-y-3/4\",\r\n bottom: \"bottom-0 translate-y-3/4\",\r\n },\r\n align: {\r\n start: \"left-3\",\r\n end: \"right-3\",\r\n },\r\n },\r\n defaultVariants: {\r\n side: \"bottom\",\r\n align: \"end\",\r\n },\r\n }\r\n)\r\n\r\nfunction BubbleReactions({\r\n side = \"bottom\",\r\n align = \"end\",\r\n className,\r\n ...props\r\n}: ComponentProps<\"div\"> & {\r\n align?: \"start\" | \"end\"\r\n side?: \"top\" | \"bottom\"\r\n}) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport { BubbleGroup, Bubble, BubbleContent, BubbleReactions }\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/bubble.tsx"
+ }
+ ],
+ "categories": [
+ "bubble"
+ ],
+ "type": "registry:ui"
+}
\ No newline at end of file
diff --git a/public/r/button-group.json b/public/r/button-group.json
index ce0f3b1..b836bf5 100644
--- a/public/r/button-group.json
+++ b/public/r/button-group.json
@@ -1,6 +1,8 @@
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "button-group",
+ "title": "Button Group",
+ "description": "Button Group component.",
"dependencies": [
"@base-ui/react",
"class-variance-authority"
@@ -11,10 +13,13 @@
"files": [
{
"path": "src/components/ui/button-group.tsx",
- "content": "import { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Separator } from \"@/components/ui/separator\"\r\n\r\nconst buttonGroupVariants = cva(\r\n \"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-xl [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\r\n {\r\n variants: {\r\n orientation: {\r\n horizontal:\r\n \"*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-xl! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0\",\r\n vertical:\r\n \"flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-xl! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0\",\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"horizontal\",\r\n },\r\n }\r\n)\r\n\r\nfunction ButtonGroup({\r\n className,\r\n orientation,\r\n ...props\r\n}: React.ComponentProps<\"div\"> & VariantProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction ButtonGroupText({\r\n className,\r\n render,\r\n ...props\r\n}: useRender.ComponentProps<\"div\">) {\r\n return useRender({\r\n defaultTagName: \"div\",\r\n props: mergeProps<\"div\">(\r\n {\r\n className: cn(\r\n \"flex items-center gap-2 rounded-xl border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n ),\r\n },\r\n props\r\n ),\r\n render,\r\n state: {\r\n slot: \"button-group-text\",\r\n },\r\n })\r\n}\r\n\r\nfunction ButtonGroupSeparator({\r\n className,\r\n orientation = \"vertical\",\r\n ...props\r\n}: React.ComponentProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport {\r\n ButtonGroup,\r\n ButtonGroupSeparator,\r\n ButtonGroupText,\r\n buttonGroupVariants,\r\n}\r\n",
- "type": "registry:ui",
- "target": "components/ui/button-group.tsx"
+ "content": "\"use client\"\r\n\r\nimport { ComponentProps } from \"react\"\r\nimport { mergeProps } from \"@base-ui/react/merge-props\"\r\nimport { useRender } from \"@base-ui/react/use-render\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Separator } from \"@/components/ui/separator\"\r\n\r\nconst buttonGroupVariants = cva(\r\n \"flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\r\n {\r\n variants: {\r\n orientation: {\r\n horizontal:\r\n \"*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0\",\r\n vertical:\r\n \"flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0\",\r\n },\r\n },\r\n defaultVariants: {\r\n orientation: \"horizontal\",\r\n },\r\n }\r\n)\r\n\r\nfunction ButtonGroup({\r\n className,\r\n orientation,\r\n ...props\r\n}: ComponentProps<\"div\"> & VariantProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction ButtonGroupText({\r\n className,\r\n render,\r\n ...props\r\n}: useRender.ComponentProps<\"div\">) {\r\n return useRender({\r\n defaultTagName: \"div\",\r\n props: mergeProps<\"div\">(\r\n {\r\n className: cn(\r\n \"flex items-center gap-2 rounded-lg border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n ),\r\n },\r\n props\r\n ),\r\n render,\r\n state: {\r\n slot: \"button-group-text\",\r\n },\r\n })\r\n}\r\n\r\nfunction ButtonGroupSeparator({\r\n className,\r\n orientation = \"vertical\",\r\n ...props\r\n}: ComponentProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport {\r\n ButtonGroup,\r\n ButtonGroupSeparator,\r\n ButtonGroupText,\r\n buttonGroupVariants,\r\n}\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/button-group.tsx"
}
],
+ "categories": [
+ "button-group"
+ ],
"type": "registry:ui"
}
\ No newline at end of file
diff --git a/public/r/button.json b/public/r/button.json
index d90f8e6..95c0912 100644
--- a/public/r/button.json
+++ b/public/r/button.json
@@ -1,18 +1,22 @@
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "button",
+ "title": "Button",
+ "description": "Button component.",
"dependencies": [
"@base-ui/react",
"class-variance-authority"
],
- "registryDependencies": [],
"files": [
{
"path": "src/components/ui/button.tsx",
- "content": "\"use client\"\r\n\r\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-primary text-white hover:bg-primary-600 [a]:hover:bg-primary-600\",\r\n outline:\r\n \"border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground\",\r\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\r\n ghost:\r\n \"hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground\",\r\n destructive:\r\n \"bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30\",\r\n link: \"text-primary underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default:\r\n \"py-2 px-4 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\r\n xs: \"h-6 gap-1 px-2 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\r\n sm: \"py-1 px-3 px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\r\n lg: \"py-3 px-5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\r\n icon: \"size-8\",\r\n \"icon-xs\":\r\n \"size-6 [&_svg:not([class*='size-'])]:size-3\",\r\n \"icon-sm\":\r\n \"size-7\",\r\n \"icon-lg\": \"size-9\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nfunction Button({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n ...props\r\n}: ButtonPrimitive.Props & VariantProps) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport { Button, buttonVariants }\r\n",
- "type": "registry:ui",
- "target": "components/ui/button.tsx"
+ "content": "\"use client\";\r\n\r\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst buttonVariants = cva(\r\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none\",\r\n {\r\n variants: {\r\n variant: {\r\n default:\r\n \"bg-primary text-white hover:bg-primary-600 [a]:hover:bg-primary-600\",\r\n outline:\r\n \"border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground\",\r\n secondary:\r\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\r\n ghost:\r\n \"hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground\",\r\n destructive:\r\n \"bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30\",\r\n link: \"text-primary underline-offset-4 hover:underline\"\r\n },\r\n size: {\r\n default:\r\n \"py-2 px-4 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\r\n xs: \"h-6 gap-1 px-2 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\r\n sm: \"py-1 px-3 px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\r\n lg: \"py-3 px-5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3\",\r\n icon: \"size-8\",\r\n \"icon-xs\": \"size-6 [&_svg:not([class*='size-'])]:size-3\",\r\n \"icon-sm\": \"size-7\",\r\n \"icon-lg\": \"size-9\"\r\n }\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\"\r\n }\r\n }\r\n);\r\n\r\nfunction Button({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n ...props\r\n}: ButtonPrimitive.Props & VariantProps) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport { Button, buttonVariants };\r\n",
+ "type": "registry:component",
+ "target": "@components/ui/button.tsx"
}
],
+ "categories": [
+ "button"
+ ],
"type": "registry:ui"
}
\ No newline at end of file
diff --git a/public/r/calendar.json b/public/r/calendar.json
index ff3cd00..ade9fbe 100644
--- a/public/r/calendar.json
+++ b/public/r/calendar.json
@@ -1,9 +1,10 @@
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "calendar",
+ "title": "Calendar",
+ "description": "Calendar component.",
"dependencies": [
"lucide-react",
- "react",
"react-day-picker"
],
"registryDependencies": [
@@ -12,10 +13,13 @@
"files": [
{
"path": "src/components/ui/calendar.tsx",
- "content": "\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport {\r\n DayPicker,\r\n getDefaultClassNames,\r\n type DayButton,\r\n type Locale,\r\n} from \"react-day-picker\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Button, buttonVariants } from \"@/components/ui/button\"\r\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from \"lucide-react\"\r\n\r\nfunction Calendar({\r\n className,\r\n classNames,\r\n showOutsideDays = true,\r\n captionLayout = \"label\",\r\n buttonVariant = \"ghost\",\r\n locale,\r\n formatters,\r\n components,\r\n ...props\r\n}: React.ComponentProps & {\r\n buttonVariant?: React.ComponentProps[\"variant\"]\r\n}) {\r\n const defaultClassNames = getDefaultClassNames()\r\n\r\n return (\r\n svg]:rotate-180`,\r\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\r\n className\r\n )}\r\n captionLayout={captionLayout}\r\n locale={locale}\r\n formatters={{\r\n formatMonthDropdown: (date) =>\r\n date.toLocaleString(locale?.code, { month: \"short\" }),\r\n ...formatters,\r\n }}\r\n classNames={{\r\n root: cn(\"w-fit\", defaultClassNames.root),\r\n months: cn(\r\n \"flex gap-4 flex-col md:flex-row relative\",\r\n defaultClassNames.months\r\n ),\r\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\r\n nav: cn(\r\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\r\n defaultClassNames.nav\r\n ),\r\n button_previous: cn(\r\n buttonVariants({ variant: buttonVariant }),\r\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\r\n defaultClassNames.button_previous\r\n ),\r\n button_next: cn(\r\n buttonVariants({ variant: buttonVariant }),\r\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\r\n defaultClassNames.button_next\r\n ),\r\n month_caption: cn(\r\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\r\n defaultClassNames.month_caption\r\n ),\r\n dropdowns: cn(\r\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\r\n defaultClassNames.dropdowns\r\n ),\r\n dropdown_root: cn(\r\n \"relative rounded-(--cell-radius)\",\r\n defaultClassNames.dropdown_root\r\n ),\r\n dropdown: cn(\r\n \"absolute bg-popover inset-0 opacity-0\",\r\n defaultClassNames.dropdown\r\n ),\r\n caption_label: cn(\r\n \"select-none font-medium\",\r\n captionLayout === \"label\"\r\n ? \"text-sm\"\r\n : \"rounded-(--cell-radius) flex items-center gap-1 text-sm [&>svg]:text-muted-foreground [&>svg]:size-3.5\",\r\n defaultClassNames.caption_label\r\n ),\r\n table: \"w-full border-collapse\",\r\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\r\n weekday: cn(\r\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-[0.8rem] select-none\",\r\n defaultClassNames.weekday\r\n ),\r\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\r\n week_number_header: cn(\r\n \"select-none w-(--cell-size)\",\r\n defaultClassNames.week_number_header\r\n ),\r\n week_number: cn(\r\n \"text-[0.8rem] select-none text-muted-foreground\",\r\n defaultClassNames.week_number\r\n ),\r\n day: cn(\r\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\",\r\n props.showWeekNumber\r\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\r\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\r\n defaultClassNames.day\r\n ),\r\n range_start: cn(\r\n \"rounded-l-(--cell-radius) bg-primary/10 relative after:bg-primary/10 after:absolute after:inset-y-0 after:w-4 after:right-0 z-0 isolate\",\r\n defaultClassNames.range_start\r\n ),\r\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\r\n range_end: cn(\r\n \"rounded-r-(--cell-radius) bg-primary/10 relative after:bg-primary/10 after:absolute after:inset-y-0 after:w-4 after:left-0 z-0 isolate\",\r\n defaultClassNames.range_end\r\n ),\r\n today: cn(\r\n \"bg-primary/10 text-primary rounded-(--cell-radius) data-[selected=true]:rounded-none\",\r\n defaultClassNames.today\r\n ),\r\n outside: cn(\r\n \"text-muted-foreground aria-selected:text-muted-foreground\",\r\n defaultClassNames.outside\r\n ),\r\n disabled: cn(\r\n \"text-muted-foreground opacity-50\",\r\n defaultClassNames.disabled\r\n ),\r\n hidden: cn(\"invisible\", defaultClassNames.hidden),\r\n ...classNames,\r\n }}\r\n components={{\r\n Root: ({ className, rootRef, ...props }) => {\r\n return (\r\n \r\n )\r\n },\r\n Chevron: ({ className, orientation, ...props }) => {\r\n if (orientation === \"left\") {\r\n return (\r\n \r\n )\r\n }\r\n\r\n if (orientation === \"right\") {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n )\r\n },\r\n DayButton: ({ ...props }) => (\r\n \r\n ),\r\n WeekNumber: ({ children, ...props }) => {\r\n return (\r\n \r\n \r\n {children}\r\n \r\n | \r\n )\r\n },\r\n ...components,\r\n }}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CalendarDayButton({\r\n className,\r\n day,\r\n modifiers,\r\n locale,\r\n ...props\r\n}: React.ComponentProps & { locale?: Partial }) {\r\n const defaultClassNames = getDefaultClassNames()\r\n\r\n const ref = React.useRef(null)\r\n React.useEffect(() => {\r\n if (modifiers.focused) ref.current?.focus()\r\n }, [modifiers.focused])\r\n\r\n return (\r\n