@awsmbiz/inbis-ui 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["AccordionPrimitive","cn","cn","cn","AlertDialogPrimitive","cn","AvatarPrimitive","cn","cn","cn","cn","CheckboxPrimitive","cn","DialogPrimitive","cn","DropdownMenuPrimitive","cn","LabelPrimitive","cn","SeparatorPrimitive","cn","cn","cn","cn","cn","ProgressPrimitive","cn","RadioGroupPrimitive","cn","SheetPrimitive","cn","cn","Sonner","cn","SwitchPrimitive","cn","cn","TabsPrimitive","cn","cn","TooltipPrimitive","cn"],"sources":["../src/components/accordion.tsx","../src/components/alert.tsx","../src/components/button.tsx","../src/components/alert-dialog.tsx","../src/components/avatar.tsx","../src/components/badge.tsx","../src/components/breadcrumb.tsx","../src/components/card.tsx","../src/components/checkbox.tsx","../src/components/dialog.tsx","../src/components/dropdown-menu.tsx","../src/components/label.tsx","../src/components/separator.tsx","../src/components/field.tsx","../src/components/input.tsx","../src/components/pagination.tsx","../src/components/native-select.tsx","../src/components/progress.tsx","../src/components/radio-group.tsx","../src/components/sheet.tsx","../src/components/skeleton.tsx","../src/components/sonner.tsx","../src/components/steps.tsx","../src/components/switch.tsx","../src/components/table.tsx","../src/components/tabs.tsx","../src/components/textarea.tsx","../src/components/tooltip.tsx","../src/form.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b border-border last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"flex flex-1 items-center justify-between gap-3 rounded-sm py-4 text-left text-[15px] leading-5 font-semibold text-foreground outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon\n aria-hidden=\"true\"\n className=\"pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-150\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"overflow-hidden text-sm leading-[22px] text-muted-foreground data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\n\nconst alertVariants = cva(\n \"group/alert relative grid w-full gap-0.5 rounded-md border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n success:\n \"border-transparent bg-success-soft text-success-soft-foreground *:data-[slot=alert-description]:text-success-soft-foreground\",\n warning:\n \"border-transparent bg-warning-soft text-warning-soft-foreground *:data-[slot=alert-description]:text-warning-soft-foreground\",\n info:\n \"border-transparent bg-info-soft text-info-soft-foreground *:data-[slot=alert-description]:text-info-soft-foreground\",\n destructive:\n \"border-transparent bg-destructive-soft text-destructive-soft-foreground *:data-[slot=alert-description]:text-destructive-soft-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-action\"\n className={cn(\"absolute top-2 right-2\", className)}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Slot } from \"radix-ui\"\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-full border border-transparent bg-clip-padding text-sm font-semibold whitespace-nowrap transition-colors duration-150 outline-none select-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:opacity-90\",\n outline:\n \"border-input bg-transparent hover:bg-accent hover:text-accent-foreground aria-expanded:bg-accent aria-expanded:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground aria-expanded:bg-accent aria-expanded:text-accent-foreground\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:opacity-90\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-10 gap-1.5 px-[18px] has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4\",\n xs: \"h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-[34px] gap-1 px-3.5 text-[13px] has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-[46px] gap-2 px-[22px] text-[15px] has-data-[icon=inline-end]:pr-5 has-data-[icon=inline-start]:pl-5\",\n icon: \"size-10\",\n \"icon-xs\": \"size-6 [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-[34px]\",\n \"icon-lg\": \"size-[46px]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\n\nimport { Button } from \"@awsmbiz/inbis-ui/components/button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid max-h-[calc(100%-2rem)] w-full overflow-y-auto -translate-x-1/2 -translate-y-1/2 gap-5 rounded-xl border border-border bg-popover p-6 text-popover-foreground shadow-(--shadow-float) duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-[480px] data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"font-heading text-xl leading-7 font-semibold tracking-[-0.015em] sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\n \"text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\n\ntype AvatarSize = \"xs\" | \"sm\" | \"default\" | \"lg\"\n\n// 24, 32, 40 and 48 px, as in the design's \"All components\" board.\nconst SIZES: Record<AvatarSize, string> = {\n xs: \"size-6 text-[10px]\",\n sm: \"size-8 text-xs\",\n default: \"size-10 text-sm\",\n lg: \"size-12 text-base\",\n}\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & { size?: AvatarSize }) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"relative flex shrink-0 overflow-hidden rounded-full font-semibold select-none\",\n SIZES[size],\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full object-cover\", className)}\n {...props}\n />\n )\n}\n\n// Shown while the image loads, when it fails, or when there is none (typically initials).\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center rounded-full bg-secondary text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\n// Overlapping avatars; past `max`, the rest collapse into a \"+N\" avatar. Name the group with\n// aria-label (e.g. \"5 reviewers\") so the total is announced, not just the visible avatars.\nfunction AvatarGroup({\n className,\n children,\n max,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { max?: number; size?: AvatarSize }) {\n const avatars = React.Children.toArray(children)\n const shown = max === undefined ? avatars : avatars.slice(0, max)\n const overflow = avatars.length - shown.length\n return (\n <div\n role=\"group\"\n data-slot=\"avatar-group\"\n className={cn(\n \"flex items-center -space-x-2.5 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-card\",\n className\n )}\n {...props}\n >\n {shown}\n {overflow > 0 && (\n <span\n data-slot=\"avatar\"\n className={cn(\n \"relative flex shrink-0 items-center justify-center rounded-full bg-primary font-semibold text-primary-foreground\",\n SIZES[size]\n )}\n >\n +{overflow}\n </span>\n )}\n </div>\n )\n}\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarGroup }\nexport type { AvatarSize }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Slot } from \"radix-ui\"\n\nconst badgeVariants = cva(\n \"group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2.5 text-xs font-semibold whitespace-nowrap transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 aria-invalid:border-destructive [&>svg]:pointer-events-none [&>svg]:size-3!\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:opacity-90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a]:hover:bg-accent\",\n success: \"bg-success-soft text-success-soft-foreground\",\n warning: \"bg-warning-soft text-warning-soft-foreground\",\n info: \"bg-info-soft text-info-soft-foreground\",\n destructive: \"bg-destructive-soft text-destructive-soft-foreground\",\n outline:\n \"border-input text-foreground [a]:hover:bg-accent\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Slot } from \"radix-ui\"\nimport { MoreHorizontalIcon } from \"lucide-react\"\n\n// The landmark is named \"Breadcrumb\" by default; pass aria-label to translate it.\nfunction Breadcrumb({ \"aria-label\": label = \"Breadcrumb\", ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label={label} data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"flex flex-wrap items-center gap-2 text-[13px] leading-[19px] break-words text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\n \"rounded-sm underline-offset-4 transition-colors hover:text-foreground hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring\",\n className\n )}\n {...props}\n />\n )\n}\n\n// The current page: plain text with aria-current, not a disabled link.\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n aria-current=\"page\"\n className={cn(\"font-medium text-foreground\", className)}\n {...props}\n />\n )\n}\n\n// Decorative: an <li> hidden from assistive technology so the list counts only the crumbs.\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"select-none\", className)}\n {...props}\n >\n {children ?? \"/\"}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n label = \"More\",\n ...props\n}: React.ComponentProps<\"span\"> & { label?: string }) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n className={cn(\"flex size-5 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon aria-hidden=\"true\" className=\"size-4\" />\n <span className=\"sr-only\">{label}</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\n \"group/card flex flex-col gap-5 overflow-hidden rounded-2xl border border-border bg-card py-(--card-spacing) text-sm text-card-foreground shadow-(--shadow-card) [--card-spacing:--spacing(6)] data-[size=sm]:gap-3 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-2xl *:[img:last-child]:rounded-b-2xl\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-2xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\n \"font-heading text-[17px] leading-snug font-semibold tracking-[-0.01em] group-data-[size=sm]/card:text-[15px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-[13px] text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-(--card-spacing)\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex items-center rounded-b-2xl border-t bg-muted/50 p-(--card-spacing)\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\nimport { CheckIcon } from \"lucide-react\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer relative flex size-[18px] shrink-0 items-center justify-center rounded-[5px] border border-input bg-surface-raised transition-colors duration-150 outline-none group-has-disabled/field:opacity-50 group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:aria-checked:border-primary data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none [&>svg]:size-3.5\"\n >\n <CheckIcon\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { Button } from \"@awsmbiz/inbis-ui/components/button\"\nimport { XIcon } from \"lucide-react\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-50 grid max-h-[calc(100%-2rem)] w-full max-w-[calc(100%-2rem)] overflow-y-auto -translate-x-1/2 -translate-y-1/2 gap-5 rounded-xl border border-border bg-popover p-6 text-sm text-popover-foreground shadow-(--shadow-float) duration-100 outline-none sm:max-w-[480px] data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot=\"dialog-close\" asChild>\n <Button\n variant=\"ghost\"\n className=\"absolute top-4 right-4\"\n size=\"icon-sm\"\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\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 <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\n \"font-heading text-xl leading-7 font-semibold tracking-[-0.015em]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className\n )}\n {...props}\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","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\"\n\n// Changed from the shadcn original for WCAG 2.2 AA (axe, e2e/ui-gallery.spec.ts):\n// menus are non-modal by default and their content is not portalled. A modal\n// menu aria-hides the rest of the page while it keeps focusable controls\n// (aria-hidden-focus), and portalled content sits outside every landmark\n// (region). Non-modal menus still close on Escape, Tab or a click outside, and\n// return focus to their trigger.\nfunction DropdownMenu({\n modal = false,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" modal={modal} {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n align = \"start\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n align={align}\n className={cn(\"z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-(--shadow-popover) duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-sm px-2.5 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive-soft data-[variant=destructive]:focus:text-destructive-soft-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-sm py-2 pr-8 pl-2.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon\n />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-sm py-2 pr-8 pl-2.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon\n />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2.5 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-7\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-1.5 rounded-sm px-2.5 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-(--shadow-popover) duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\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","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Label as LabelPrimitive } from \"radix-ui\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\n\nimport { Label } from \"@awsmbiz/inbis-ui/components/label\"\nimport { Separator } from \"@awsmbiz/inbis-ui/components/separator\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full gap-2 data-[invalid=true]:text-destructive\",\n {\n variants: {\n orientation: {\n vertical: \"flex-col *:w-full [&>.sr-only]:w-auto\",\n horizontal:\n \"flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n responsive:\n \"flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-0.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border has-[>[data-slot=field]]:not-has-[:disabled,[data-disabled]]:hover:bg-muted/50 has-[>[data-slot=field]]:has-[:focus-visible]:outline-2 has-[>[data-slot=field]]:has-[:focus-visible]:outline-offset-2 has-[>[data-slot=field]]:has-[:focus-visible]:outline-solid has-[>[data-slot=field]]:has-[:focus-visible]:outline-ring *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5\",\n \"last:mt-0 nth-last-2:-mt-1\",\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"relative mx-auto block w-fit bg-background px-2 text-muted-foreground\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: ({ message?: string } | undefined)[]\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-sm font-normal text-destructive\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-10 w-full min-w-0 rounded-md border border-input bg-surface-raised px-3.5 py-2 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50 aria-invalid:border-destructive md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nimport { Button } from \"@awsmbiz/inbis-ui/components/button\"\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from \"lucide-react\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"Pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex items-center gap-0.5\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <Button\n asChild\n variant={isActive ? \"outline\" : \"ghost\"}\n size={size}\n className={cn(className)}\n >\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n {...props}\n />\n </Button>\n )\n}\n\nfunction PaginationPrevious({\n className,\n text = \"Previous\",\n ...props\n}: React.ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label=\"Previous page\"\n size=\"default\"\n className={cn(\"pl-1.5!\", className)}\n {...props}\n >\n <ChevronLeftIcon data-icon=\"inline-start\" />\n <span className=\"hidden sm:block\">{text}</span>\n </PaginationLink>\n )\n}\n\nfunction PaginationNext({\n className,\n text = \"Next\",\n ...props\n}: React.ComponentProps<typeof PaginationLink> & { text?: string }) {\n return (\n <PaginationLink\n aria-label=\"Next page\"\n size=\"default\"\n className={cn(\"pr-1.5!\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">{text}</span>\n <ChevronRightIcon data-icon=\"inline-end\" />\n </PaginationLink>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\n \"flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <MoreHorizontalIcon\n />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\ntype NativeSelectProps = Omit<React.ComponentProps<\"select\">, \"size\"> & {\n size?: \"sm\" | \"default\"\n}\n\nfunction NativeSelect({\n className,\n size = \"default\",\n ...props\n}: NativeSelectProps) {\n return (\n <div\n className={cn(\n \"group/native-select relative w-fit has-[select:disabled]:opacity-50\",\n className\n )}\n data-slot=\"native-select-wrapper\"\n data-size={size}\n >\n <select\n data-slot=\"native-select\"\n data-size={size}\n className=\"h-10 w-full min-w-0 appearance-none rounded-md border border-input bg-surface-raised py-2 pr-9 pl-3.5 text-sm transition-colors outline-none select-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive data-[size=sm]:h-[34px] data-[size=sm]:py-1\"\n {...props}\n />\n <ChevronDownIcon className=\"pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 text-muted-foreground select-none\" aria-hidden=\"true\" data-slot=\"native-select-icon\" />\n </div>\n )\n}\n\nfunction NativeSelectOption({\n className,\n ...props\n}: React.ComponentProps<\"option\">) {\n return (\n <option\n data-slot=\"native-select-option\"\n className={cn(\"bg-[Canvas] text-[CanvasText]\", className)}\n {...props}\n />\n )\n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n <optgroup\n data-slot=\"native-select-optgroup\"\n className={cn(\"bg-[Canvas] text-[CanvasText]\", className)}\n {...props}\n />\n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Progress as ProgressPrimitive } from \"radix-ui\"\n\n// Name it with aria-label or aria-labelledby (WCAG 4.1.2); the value is exposed as aria-valuenow.\nfunction Progress({\n className,\n value,\n ...props\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n value={value}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-muted\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"h-full w-full flex-1 rounded-full bg-primary transition-transform duration-200\"\n style={{ transform: `translateX(-${String(100 - (value ?? 0))}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid w-full gap-3.5\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"peer relative flex aspect-square size-[18px] shrink-0 items-center justify-center rounded-full border border-input bg-surface-raised transition-colors duration-150 outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive data-[state=checked]:border-primary\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"flex items-center justify-center\"\n >\n <span className=\"size-2 rounded-full bg-primary\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nimport { Button } from \"@awsmbiz/inbis-ui/components/button\"\nimport { XIcon } from \"lucide-react\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"fixed z-50 flex flex-col gap-4 overflow-y-auto bg-popover bg-clip-padding text-sm text-popover-foreground shadow-(--shadow-float) transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close data-slot=\"sheet-close\" asChild>\n <Button\n variant=\"ghost\"\n className=\"absolute top-3 right-3\"\n size=\"icon-sm\"\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </Button>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-0.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\n \"font-heading text-xl leading-7 font-semibold tracking-[-0.015em] text-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import { cn } from \"cn\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","import { Toaster as Sonner, type ToasterProps } from \"sonner\"\nimport { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon, Loader2Icon } from \"lucide-react\"\n\n// Changed from the shadcn original: no next-themes (apps are not Next.js). Colours come\n// from the theme tokens, so toasts follow `.dark`; pass `theme` to match sonner's own parts.\nconst Toaster = ({ ...props }: ToasterProps) => {\n return (\n <Sonner\n theme=\"system\"\n className=\"toaster group\"\n position=\"bottom-right\"\n icons={{\n success: (\n <CircleCheckIcon className=\"size-4\" />\n ),\n info: (\n <InfoIcon className=\"size-4\" />\n ),\n warning: (\n <TriangleAlertIcon className=\"size-4\" />\n ),\n error: (\n <OctagonXIcon className=\"size-4\" />\n ),\n loading: (\n <Loader2Icon className=\"size-4 animate-spin\" />\n ),\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"calc(var(--radius) + 4px)\",\n } as React.CSSProperties\n }\n toastOptions={{\n classNames: {\n toast: \"cn-toast rounded-2xl border-border bg-popover shadow-(--shadow-popover)\",\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { CheckIcon } from \"lucide-react\"\n\ntype StepStatus = \"complete\" | \"current\" | \"upcoming\"\n\n// A step indicator for multi-step forms: a named <nav> over an ordered list. The landmark is\n// named \"Steps\" by default; pass aria-label to translate it.\nfunction Steps({\n className,\n children,\n \"aria-label\": label = \"Steps\",\n ...props\n}: React.ComponentProps<\"nav\">) {\n return (\n <nav aria-label={label} data-slot=\"steps\" {...props}>\n <ol\n className={cn(\n \"flex flex-wrap items-center gap-x-5 gap-y-3\",\n className\n )}\n >\n {children}\n </ol>\n </nav>\n )\n}\n\ninterface StepsItemProps extends Omit<React.ComponentProps<\"button\">, \"type\"> {\n /** The step's number, shown until it is complete. */\n step: number\n status: StepStatus\n /** Prefix announced before a completed step's label (visually a check mark). */\n completedLabel?: string\n}\n\n// With onClick the step is a button (e.g. to go back to a completed step); otherwise plain text.\n// The current step carries aria-current=\"step\".\nfunction StepsItem({\n className,\n children,\n step,\n status,\n completedLabel = \"Completed\",\n onClick,\n ...props\n}: StepsItemProps) {\n const content = (\n <>\n <span\n aria-hidden=\"true\"\n className={cn(\n \"inline-flex size-7 shrink-0 items-center justify-center rounded-full border border-input text-[13px] font-semibold\",\n status === \"current\" && \"border-primary bg-primary text-primary-foreground\",\n status === \"complete\" && \"border-transparent bg-success-soft text-success-soft-foreground\"\n )}\n >\n {status === \"complete\" ? <CheckIcon className=\"size-3.5\" strokeWidth={2.5} /> : step}\n </span>\n {status === \"complete\" && <><span className=\"sr-only\">{completedLabel}:</span>{\" \"}</>}\n {children}\n </>\n )\n const classes = cn(\n \"flex items-center gap-2.5 rounded-sm text-sm font-medium\",\n status === \"upcoming\" ? \"text-muted-foreground\" : \"text-foreground\",\n className\n )\n const current = status === \"current\" ? \"step\" : undefined\n return (\n <li data-slot=\"steps-item\" data-status={status}>\n {onClick === undefined ? (\n <span aria-current={current} className={classes}>\n {content}\n </span>\n ) : (\n <button\n type=\"button\"\n aria-current={current}\n onClick={onClick}\n className={cn(\n classes,\n \"cursor-pointer outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:cursor-default\"\n )}\n {...props}\n >\n {content}\n </button>\n )}\n </li>\n )\n}\n\nexport { Steps, StepsItem }\nexport type { StepStatus, StepsItemProps }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-input bg-secondary px-[3px] transition-colors duration-150 outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring aria-invalid:border-destructive data-[size=default]:h-6 data-[size=default]:w-10 data-[size=sm]:h-[18px] data-[size=sm]:w-[30px] data-checked:border-primary data-checked:bg-primary data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"pointer-events-none block rounded-full bg-muted-foreground ring-0 transition-transform duration-150 group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-checked:bg-primary-foreground group-data-[size=default]/switch:data-checked:translate-x-4 group-data-[size=sm]/switch:data-checked:translate-x-[10px] data-unchecked:translate-x-0\"\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto rounded-2xl border border-border bg-card\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"bg-muted [&_tr]:border-b [&_tr]:hover:bg-muted\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"h-11 px-4 text-left align-middle font-medium whitespace-nowrap text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Tabs as TabsPrimitive } from \"radix-ui\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n \"group/tabs flex gap-2 data-horizontal:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"group/tabs-list inline-flex w-fit items-center justify-center rounded-full p-1 text-muted-foreground group-data-horizontal/tabs:h-auto group-data-vertical/tabs:rounded-2xl group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none\",\n {\n variants: {\n variant: {\n default: \"bg-secondary\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"relative inline-flex h-8 flex-1 items-center justify-center gap-1.5 rounded-full border border-transparent px-3.5 text-sm font-medium whitespace-nowrap text-muted-foreground transition-colors duration-150 group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 group-data-[variant=default]/tabs-list:data-active:shadow-(--shadow-card) group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n \"data-active:bg-surface-raised data-active:text-foreground\",\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n // Changed from the shadcn original (outline-none): the focusable tab panel shows the focus ring.\n className={cn(\"flex-1 rounded-md text-sm outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-[88px] w-full min-w-0 resize-y rounded-md border border-input bg-surface-raised px-3.5 py-2.5 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-solid focus-visible:outline-ring disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50 aria-invalid:border-destructive md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n // Changed from the shadcn original: not portalled, so the tooltip stays inside\n // the page's landmarks (axe `region`, e2e/ui-gallery.spec.ts).\n return (\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-sm bg-primary px-2.5 py-1.5 text-xs font-medium text-primary-foreground has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-primary fill-primary\" />\n </TooltipPrimitive.Content>\n )\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }\n","import { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useId, type ComponentProps, type ReactNode } from \"react\";\nimport {\n FormProvider,\n useController,\n useForm,\n useFormState,\n type Control,\n type ControllerFieldState,\n type ControllerRenderProps,\n type FieldPath,\n type FieldValues,\n type SubmitHandler,\n type UseFormProps,\n type UseFormReturn,\n} from \"react-hook-form\";\nimport type { z } from \"zod\";\nimport { Alert, AlertDescription } from \"./components/alert.js\";\nimport { Field, FieldContent, FieldDescription, FieldError, FieldLabel } from \"./components/field.js\";\n\n// Accessible forms on react-hook-form + Zod. FormField wires a control to its\n// label, description and error (`aria-describedby`, `aria-invalid`); errors are\n// announced (role=\"alert\"); a failed submit focuses the first invalid control.\n\n/** `useForm` with a Zod schema as the resolver: values are validated and parsed by the schema. */\nexport function useZodForm<TInput extends FieldValues, TOutput extends FieldValues>(\n schema: z.ZodType<TOutput, TInput>,\n options?: Omit<UseFormProps<TInput, unknown, TOutput>, \"resolver\">,\n): UseFormReturn<TInput, unknown, TOutput> {\n return useForm<TInput, unknown, TOutput>({\n ...options,\n resolver: zodResolver(schema),\n // Focus moves to the first invalid control on submit (react-hook-form's default, kept explicit).\n shouldFocusError: true,\n });\n}\n\nexport type FormProps<TFieldValues extends FieldValues, TTransformed extends FieldValues> = Omit<\n ComponentProps<\"form\">,\n \"onSubmit\"\n> & {\n form: UseFormReturn<TFieldValues, unknown, TTransformed>;\n /** Called with the parsed values once every field is valid. */\n onSubmit: SubmitHandler<TTransformed>;\n};\n\n/** A `<form>` bound to a react-hook-form instance; browser validation is off so errors are the form's own. */\nexport function Form<TFieldValues extends FieldValues, TTransformed extends FieldValues>({\n form,\n onSubmit,\n children,\n ...props\n}: FormProps<TFieldValues, TTransformed>) {\n return (\n <FormProvider {...form}>\n <form noValidate {...props} onSubmit={(event) => void form.handleSubmit(onSubmit)(event)}>\n {children}\n </form>\n </FormProvider>\n );\n}\n\n/** ARIA props for the control a FormField renders; spread them onto it. */\nexport interface FormControlProps {\n id: string;\n \"aria-invalid\": true | undefined;\n \"aria-describedby\": string | undefined;\n}\n\nexport interface FormFieldProps<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues>, TTransformed> {\n control: Control<TFieldValues, unknown, TTransformed>;\n name: TName;\n label: ReactNode;\n description?: ReactNode;\n /** \"horizontal\" puts the control before its label (checkboxes, switches). */\n orientation?: \"vertical\" | \"horizontal\";\n className?: string;\n render: (props: {\n field: ControllerRenderProps<TFieldValues, TName>;\n fieldState: ControllerFieldState;\n control: FormControlProps;\n }) => ReactNode;\n}\n\n/** One labelled form control with its description and error message. */\nexport function FormField<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues>, TTransformed>({\n control,\n name,\n label,\n description,\n orientation = \"vertical\",\n className,\n render,\n}: FormFieldProps<TFieldValues, TName, TTransformed>) {\n const id = useId();\n const { field, fieldState } = useController({ control, name });\n const invalid = fieldState.error !== undefined;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n const describedBy = [description === undefined ? null : descriptionId, invalid ? errorId : null].filter((part) => part !== null);\n const controlProps: FormControlProps = {\n id,\n \"aria-invalid\": invalid ? true : undefined,\n \"aria-describedby\": describedBy.length === 0 ? undefined : describedBy.join(\" \"),\n };\n\n const labelled = (\n <>\n <FieldLabel htmlFor={id}>{label}</FieldLabel>\n {description === undefined ? null : <FieldDescription id={descriptionId}>{description}</FieldDescription>}\n </>\n );\n const error = invalid ? <FieldError id={errorId} errors={[fieldState.error]} /> : null;\n const rendered = render({ field, fieldState, control: controlProps });\n\n return (\n <Field orientation={orientation} data-invalid={invalid ? true : undefined} className={className}>\n {orientation === \"horizontal\" ? (\n <>\n {rendered}\n <FieldContent>\n {labelled}\n {error}\n </FieldContent>\n </>\n ) : (\n <>\n {labelled}\n {rendered}\n {error}\n </>\n )}\n </Field>\n );\n}\n\n/** The form-level error (`form.setError(\"root\", …)`, e.g. a server rejection), announced when it appears. */\nexport function FormRootError({ className }: { className?: string }) {\n const { errors } = useFormState();\n const message = errors.root?.message;\n if (message === undefined) return null;\n return (\n <Alert variant=\"destructive\" className={className}>\n <AlertDescription>{message}</AlertDescription>\n </Alert>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,80 @@
1
1
  {
2
2
  "name": "@awsmbiz/inbis-ui",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0",
4
+ "description": "shadcn/ui primitives and Tailwind v4 theme tokens shared by Inbis frontends.",
5
+ "license": "UNLICENSED",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/awsmbiz/inbis-platform.git",
9
+ "directory": "packages/ui"
10
+ },
11
+ "publishConfig": {
12
+ "registry": "https://registry.npmjs.org/",
13
+ "access": "public"
14
+ },
15
+ "type": "module",
16
+ "sideEffects": [
17
+ "**/*.css"
18
+ ],
19
+ "files": [
20
+ "dist",
21
+ "styles"
22
+ ],
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "default": "./dist/index.js"
27
+ },
28
+ "./globals.css": "./styles/globals.css",
29
+ "./package.json": "./package.json"
30
+ },
31
+ "peerDependencies": {
32
+ "react": "^19.3.1",
33
+ "react-dom": "^19.3.1",
34
+ "react-hook-form": "^7.91.0",
35
+ "tailwindcss": "^4.3.3",
36
+ "zod": "^4.6.7"
37
+ },
38
+ "devDependencies": {
39
+ "@arethetypeswrong/cli": "0.18.5",
40
+ "@awsmbiz/inbis-eslint-config": "0.2.0",
41
+ "@awsmbiz/inbis-tsconfig": "0.2.0",
42
+ "@testing-library/dom": "10.4.2",
43
+ "@testing-library/react": "16.3.3",
44
+ "@testing-library/user-event": "14.6.8",
45
+ "@types/culori": "4.0.1",
46
+ "@types/react": "19.3.0",
47
+ "@types/react-dom": "19.3.0",
48
+ "axe-core": "4.14.0",
49
+ "culori": "4.0.2",
50
+ "eslint": "10.14.0",
51
+ "jsdom": "30.1.3",
52
+ "publint": "0.3.25",
53
+ "react": "19.3.1",
54
+ "react-dom": "19.3.1",
55
+ "react-hook-form": "7.91.0",
56
+ "tailwindcss": "4.3.3",
57
+ "tsdown": "0.23.4",
58
+ "typescript": "6.0.3",
59
+ "vitest": "5.0.5",
60
+ "zod": "4.6.7"
61
+ },
62
+ "dependencies": {
63
+ "@hookform/resolvers": "6.0.2",
64
+ "class-variance-authority": "0.7.1",
65
+ "cn": "0.5.0",
66
+ "lucide-react": "1.65.0",
67
+ "radix-ui": "1.8.1",
68
+ "shadcn": "4.23.0",
69
+ "sonner": "2.0.8",
70
+ "tw-animate-css": "1.4.0"
71
+ },
72
+ "scripts": {
73
+ "build": "tsdown",
74
+ "typecheck": "tsc",
75
+ "lint": "eslint . --max-warnings 0",
76
+ "check:exports": "publint --strict && attw --pack . --profile esm-only --exclude-entrypoints globals.css",
77
+ "shadcn": "shadcn",
78
+ "test": "vitest run"
79
+ }
6
80
  }
@@ -0,0 +1,214 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+ @import "shadcn/tailwind.css";
4
+
5
+ @custom-variant dark (&:is(.dark *));
6
+ /* This package's compiled components. Apps add @source for their own code (and other packages' dist). */
7
+ @source "../dist";
8
+
9
+ /* Inbis UI design system tokens (docs/design/inbis-ui/tokens.json). Token names are
10
+ shadcn's own, so every shadcn component picks up the theme. Contrast of every text and
11
+ indicator pair is checked against WCAG 2.2 AA in test/theme-contrast.test.ts. */
12
+
13
+ @theme inline {
14
+ /* Inter first. The package never fetches fonts: apps load Inter (see README) either as
15
+ the "Inter" family or through a --font-inter variable (e.g. next/font). */
16
+ --font-sans: var(--font-inter, "Inter"), ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
17
+ --font-heading: var(--font-sans);
18
+ --radius-sm: calc(var(--radius) - 4px); /* 8px */
19
+ --radius-md: var(--radius); /* 12px: fields, popovers, alerts, icon tiles */
20
+ --radius-lg: calc(var(--radius) + 4px); /* 16px: cards, tables, toasts */
21
+ --radius-xl: calc(var(--radius) + 10px); /* 22px: dialogs, large panels */
22
+ --radius-2xl: calc(var(--radius) + 4px); /* 16px, = radius-lg (shadcn's rounded-2xl cards) */
23
+ --radius-3xl: calc(var(--radius) + 10px); /* 22px, = radius-xl */
24
+ --radius-4xl: calc(var(--radius) * 2.6);
25
+ --color-background: var(--background);
26
+ --color-foreground: var(--foreground);
27
+ --color-card: var(--card);
28
+ --color-card-foreground: var(--card-foreground);
29
+ --color-popover: var(--popover);
30
+ --color-popover-foreground: var(--popover-foreground);
31
+ --color-primary: var(--primary);
32
+ --color-primary-foreground: var(--primary-foreground);
33
+ --color-secondary: var(--secondary);
34
+ --color-secondary-foreground: var(--secondary-foreground);
35
+ --color-muted: var(--muted);
36
+ --color-muted-foreground: var(--muted-foreground);
37
+ --color-accent: var(--accent);
38
+ --color-accent-foreground: var(--accent-foreground);
39
+ --color-destructive: var(--destructive);
40
+ --color-destructive-foreground: var(--destructive-foreground);
41
+ --color-border: var(--border);
42
+ --color-input: var(--input);
43
+ --color-ring: var(--ring);
44
+ --color-surface-raised: var(--surface-raised);
45
+ --color-panel: var(--panel);
46
+ --color-night: var(--night);
47
+ --color-on-night: var(--on-night);
48
+ --color-on-night-muted: var(--on-night-muted);
49
+ --color-success: var(--success);
50
+ --color-success-soft: var(--success-soft);
51
+ --color-success-soft-foreground: var(--success-soft-foreground);
52
+ --color-warning-soft: var(--warning-soft);
53
+ --color-warning-soft-foreground: var(--warning-soft-foreground);
54
+ --color-info-soft: var(--info-soft);
55
+ --color-info-soft-foreground: var(--info-soft-foreground);
56
+ --color-destructive-soft: var(--destructive-soft);
57
+ --color-destructive-soft-foreground: var(--destructive-soft-foreground);
58
+ --color-app-green: var(--app-green);
59
+ --color-app-purple: var(--app-purple);
60
+ --color-app-orange: var(--app-orange);
61
+ --color-app-rose: var(--app-rose);
62
+ --color-app-blue: var(--app-blue);
63
+ --color-rating: var(--rating);
64
+ --color-chart-1: var(--chart-1);
65
+ --color-chart-2: var(--chart-2);
66
+ --color-chart-3: var(--chart-3);
67
+ --color-chart-4: var(--chart-4);
68
+ --color-chart-5: var(--chart-5);
69
+ --color-sidebar: var(--sidebar);
70
+ --color-sidebar-foreground: var(--sidebar-foreground);
71
+ --color-sidebar-primary: var(--sidebar-primary);
72
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
73
+ --color-sidebar-accent: var(--sidebar-accent);
74
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
75
+ --color-sidebar-border: var(--sidebar-border);
76
+ --color-sidebar-ring: var(--sidebar-ring);
77
+ }
78
+
79
+ :root {
80
+ --radius: 0.75rem;
81
+ --background: #f3f1ec;
82
+ --foreground: #121614;
83
+ --card: #f8f7f3;
84
+ --card-foreground: var(--foreground);
85
+ --popover: #ffffff;
86
+ --popover-foreground: var(--foreground);
87
+ --primary: #121614;
88
+ --primary-foreground: #ffffff;
89
+ --secondary: #e9e6e0;
90
+ --secondary-foreground: var(--foreground);
91
+ --muted: #e8e3dd;
92
+ --muted-foreground: #5c5953;
93
+ --accent: #e9e6e0;
94
+ --accent-foreground: var(--foreground);
95
+ --destructive: #b42318;
96
+ --destructive-foreground: #ffffff;
97
+ --border: #e2dfd8;
98
+ --input: #8a857c;
99
+ --ring: #121614;
100
+ --surface-raised: #ffffff;
101
+ --panel: #e8e3dd;
102
+ --night: #152227;
103
+ --on-night: #ffffff;
104
+ --on-night-muted: #a9b5b8;
105
+ --success: #2e8f45;
106
+ --success-soft: #dcefdf;
107
+ --success-soft-foreground: #1c5f2f;
108
+ --warning-soft: #fcefc6;
109
+ --warning-soft-foreground: #7a4b00;
110
+ --info-soft: #e0eafb;
111
+ --info-soft-foreground: #1d4a9e;
112
+ --destructive-soft: #fbe4e1;
113
+ --destructive-soft-foreground: #8f1d13;
114
+ /* Generic identity palette for app tiles and charts. Which app uses which colour is the
115
+ app's choice (AdminConfig.app.tileColor), never the platform's. */
116
+ --app-green: #22553a;
117
+ --app-purple: #7451d2;
118
+ --app-orange: #c05f18;
119
+ --app-rose: #c03a62;
120
+ --app-blue: #2e66d0;
121
+ --rating: #e98a14;
122
+ --chart-1: var(--app-green);
123
+ --chart-2: var(--app-blue);
124
+ --chart-3: var(--app-orange);
125
+ --chart-4: var(--app-purple);
126
+ --chart-5: var(--app-rose);
127
+ --sidebar: #f8f7f3;
128
+ --sidebar-foreground: var(--foreground);
129
+ --sidebar-primary: var(--primary);
130
+ --sidebar-primary-foreground: var(--primary-foreground);
131
+ --sidebar-accent: #e9e6e0;
132
+ --sidebar-accent-foreground: var(--foreground);
133
+ --sidebar-border: var(--border);
134
+ --sidebar-ring: var(--ring);
135
+ /* Shadows: use as shadow-(--shadow-card) / shadow-(--shadow-popover) / shadow-(--shadow-float). */
136
+ --shadow-card: 0 1px 2px rgba(18, 22, 20, 0.05);
137
+ --shadow-popover: 0 8px 24px rgba(18, 22, 20, 0.12);
138
+ --shadow-float: 0 16px 40px rgba(18, 22, 20, 0.14);
139
+ }
140
+
141
+ .dark {
142
+ --background: #101a1e;
143
+ --foreground: #f3f1ec;
144
+ --card: #152227;
145
+ --card-foreground: var(--foreground);
146
+ --popover: #1a2a30;
147
+ --popover-foreground: var(--foreground);
148
+ --primary: #f3f1ec;
149
+ --primary-foreground: #121614;
150
+ --secondary: #22343a;
151
+ --secondary-foreground: var(--foreground);
152
+ --muted: #1f3037;
153
+ --muted-foreground: #a9b5b8;
154
+ --accent: #22343a;
155
+ --accent-foreground: var(--foreground);
156
+ --destructive: #f0716a;
157
+ --destructive-foreground: #1b0a09;
158
+ --border: #2a3c42;
159
+ --input: #687e84;
160
+ --ring: #f3f1ec;
161
+ --surface-raised: #1a2a30;
162
+ --panel: #1f3037;
163
+ --night: #0b1316;
164
+ --on-night: #f3f1ec;
165
+ --on-night-muted: #a9b5b8;
166
+ --success: #4cbf6b;
167
+ --success-soft: #183a26;
168
+ --success-soft-foreground: #8fd6a6;
169
+ --warning-soft: #3d2e0c;
170
+ --warning-soft-foreground: #f3c66b;
171
+ --info-soft: #172c4f;
172
+ --info-soft-foreground: #9dbcf5;
173
+ --destructive-soft: #3f1714;
174
+ --destructive-soft-foreground: #f7a39c;
175
+ --chart-1: #3f9b68;
176
+ --chart-2: #6b97ea;
177
+ --chart-3: #e08a45;
178
+ --chart-4: #9b80e6;
179
+ --chart-5: #e0698d;
180
+ --sidebar: #152227;
181
+ --sidebar-foreground: var(--foreground);
182
+ --sidebar-primary: var(--primary);
183
+ --sidebar-primary-foreground: var(--primary-foreground);
184
+ --sidebar-accent: #22343a;
185
+ --sidebar-accent-foreground: var(--foreground);
186
+ --sidebar-border: var(--border);
187
+ --sidebar-ring: var(--ring);
188
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.3);
189
+ --shadow-popover: 0 8px 24px rgba(0, 0, 0, 0.45);
190
+ --shadow-float: 0 16px 40px rgba(0, 0, 0, 0.5);
191
+ }
192
+
193
+ @layer base {
194
+ * {
195
+ @apply border-border outline-ring;
196
+ }
197
+ body {
198
+ @apply bg-background text-foreground font-sans antialiased;
199
+ }
200
+ }
201
+
202
+ /* prefers-reduced-motion (WCAG 2.3.3, Q56): every animation and transition of the
203
+ components (tw-animate-css enter/exit, sonner, skeleton pulse, spinners) is cut to
204
+ an instant, so state changes still happen and animationend/transitionend still fire. */
205
+ @media (prefers-reduced-motion: reduce) {
206
+ *,
207
+ ::before,
208
+ ::after {
209
+ animation-duration: 0.01ms !important;
210
+ animation-iteration-count: 1 !important;
211
+ transition-duration: 0.01ms !important;
212
+ scroll-behavior: auto !important;
213
+ }
214
+ }