@startsimpli/ui 0.1.0 → 0.1.2

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.
Files changed (79) hide show
  1. package/dist/chunk-27YUQBOE.mjs +3954 -0
  2. package/dist/chunk-27YUQBOE.mjs.map +1 -0
  3. package/dist/chunk-G2AM3DBU.mjs +1026 -0
  4. package/dist/chunk-G2AM3DBU.mjs.map +1 -0
  5. package/dist/chunk-G4XBXCFH.mjs +63 -0
  6. package/dist/chunk-G4XBXCFH.mjs.map +1 -0
  7. package/dist/chunk-LZOMFHX3.mjs +35 -0
  8. package/dist/chunk-LZOMFHX3.mjs.map +1 -0
  9. package/dist/chunk-QYXFLOO7.mjs +210 -0
  10. package/dist/chunk-QYXFLOO7.mjs.map +1 -0
  11. package/dist/components/index.d.mts +472 -0
  12. package/dist/components/index.d.ts +472 -0
  13. package/dist/components/index.js +5149 -0
  14. package/dist/components/index.js.map +1 -0
  15. package/dist/components/index.mjs +6 -0
  16. package/dist/components/index.mjs.map +1 -0
  17. package/dist/components/unified-table/index.d.mts +725 -0
  18. package/dist/components/unified-table/index.d.ts +725 -0
  19. package/dist/components/unified-table/index.js +4000 -0
  20. package/dist/components/unified-table/index.js.map +1 -0
  21. package/dist/components/unified-table/index.mjs +5 -0
  22. package/dist/components/unified-table/index.mjs.map +1 -0
  23. package/dist/index.d.mts +26 -0
  24. package/dist/index.d.ts +26 -0
  25. package/dist/index.js +5448 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/index.mjs +12 -0
  28. package/dist/index.mjs.map +1 -0
  29. package/dist/theme/index.d.mts +20 -0
  30. package/dist/theme/index.d.ts +20 -0
  31. package/dist/theme/index.js +245 -0
  32. package/dist/theme/index.js.map +1 -0
  33. package/dist/theme/index.mjs +9 -0
  34. package/dist/theme/index.mjs.map +1 -0
  35. package/dist/utils/index.d.mts +38 -0
  36. package/dist/utils/index.d.ts +38 -0
  37. package/dist/utils/index.js +72 -0
  38. package/dist/utils/index.js.map +1 -0
  39. package/dist/utils/index.mjs +4 -0
  40. package/dist/utils/index.mjs.map +1 -0
  41. package/package.json +61 -21
  42. package/src/__mocks__/next/navigation.js +18 -0
  43. package/src/components/__tests__/safe-html.test.tsx +45 -0
  44. package/src/components/__tests__/states.test.tsx +94 -0
  45. package/src/components/__tests__/status-badge.test.tsx +101 -0
  46. package/src/components/__tests__/toast.test.tsx +124 -0
  47. package/src/components/badge/StatusBadge.tsx +55 -0
  48. package/src/components/badge/index.ts +2 -0
  49. package/src/components/dialog/BaseDialog.tsx +184 -0
  50. package/src/components/dialog/index.ts +8 -0
  51. package/src/components/index.ts +25 -0
  52. package/src/components/loading/DashboardSkeleton.tsx +27 -0
  53. package/src/components/loading/TableSkeleton.tsx +63 -0
  54. package/src/components/loading/index.ts +4 -0
  55. package/src/components/safe-html.tsx +18 -0
  56. package/src/components/states/EmptyState.tsx +48 -0
  57. package/src/components/states/ErrorState.tsx +76 -0
  58. package/src/components/states/index.ts +4 -0
  59. package/src/components/toast/Toaster.tsx +72 -0
  60. package/src/components/toast/index.ts +5 -0
  61. package/src/components/toast/use-notify.ts +45 -0
  62. package/src/components/toast/use-toast.ts +150 -0
  63. package/src/components/ui/api-error-boundary.tsx +64 -0
  64. package/src/components/ui/feature-gate.tsx +87 -0
  65. package/src/components/ui/index.ts +4 -0
  66. package/src/components/ui/page-loader.tsx +31 -0
  67. package/src/components/ui/query-provider.tsx +30 -0
  68. package/src/components/unified-table/components/Toolbar/StandardTableToolbar.tsx +1 -1
  69. package/src/components/unified-table/hooks/useFilters.ts +1 -0
  70. package/src/components/unified-table/hooks/usePagination.ts +1 -0
  71. package/src/components/unified-table/hooks/useSelection.ts +2 -1
  72. package/src/components/unified-table/hooks/useTableKeyboard.ts +2 -1
  73. package/src/components/unified-table/hooks/useTablePreferences.ts +1 -0
  74. package/src/components/unified-table/hooks/useTableState.ts +1 -0
  75. package/src/components/unified-table/hooks/useTableURL.test.tsx +1 -1
  76. package/src/components/unified-table/index.ts +4 -0
  77. package/src/components/wizard/StepIndicator.tsx +60 -0
  78. package/src/components/wizard/index.ts +2 -0
  79. package/src/theme/tailwind.config.d.ts +3 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ui/accordion.tsx","../src/components/ui/alert.tsx","../src/components/ui/calendar.tsx","../src/components/ui/collapsible.tsx","../src/components/ui/popover.tsx","../src/components/ui/progress.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/separator.tsx","../src/components/ui/skeleton.tsx","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/feature-gate.tsx","../src/components/states/ErrorState.tsx","../src/components/ui/api-error-boundary.tsx","../src/components/ui/page-loader.tsx","../src/components/ui/query-provider.tsx","../src/components/navigation/sidebar.tsx","../src/components/safe-html.tsx","../src/components/toast/use-toast.ts","../src/components/toast/Toaster.tsx","../src/components/toast/use-notify.ts","../src/components/states/EmptyState.tsx","../src/components/dialog/BaseDialog.tsx","../src/components/badge/StatusBadge.tsx","../src/components/loading/TableSkeleton.tsx","../src/components/loading/DashboardSkeleton.tsx","../src/components/wizard/StepIndicator.tsx"],"names":["React","React2","jsx","CollapsibleTrigger","CollapsibleContent","React3","React4","React5","jsxs","React6","React7","React8","React9","React10","error","info","useState","ChevronRight","Fragment","ChevronLeft","React11","sizeClasses","_"],"mappings":"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","file":"chunk-G2AM3DBU.mjs","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border-b\", className)}\n {...props}\n />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n))\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { buttonVariants } from \"./button\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\"p-3\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: \"text-sm font-medium\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: \"absolute left-1\",\n nav_button_next: \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) =>\n orientation === \"left\" ? (\n <ChevronLeft className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n ),\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-4 w-full overflow-hidden rounded-full bg-secondary\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }","import { cn } from '../../utils'\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('animate-pulse rounded-md bg-gray-200', className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 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\",\n className\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface FeatureGateProps {\n /** Whether the feature is available. When false, applies mode behavior. */\n enabled: boolean\n /**\n * How to render when enabled=false:\n * - 'disable' (default): renders children as disabled with a tooltip\n * - 'hide': renders nothing\n * - 'badge': renders children with a 'Coming soon' badge overlay\n */\n mode?: \"disable\" | \"hide\" | \"badge\"\n /** Tooltip text shown in 'disable' mode. Defaults to 'Coming soon'. */\n tooltip?: string\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Gates a UI element behind a feature flag.\n *\n * Use this to wrap any button, link, or UI section that is not yet implemented.\n * This prevents shipping clickable elements with no handlers.\n *\n * @example\n * // Disable a button with a tooltip\n * <FeatureGate enabled={false}>\n * <Button onClick={handleReply}>Reply</Button>\n * </FeatureGate>\n *\n * @example\n * // Hide completely\n * <FeatureGate enabled={false} mode=\"hide\">\n * <Button>Archive</Button>\n * </FeatureGate>\n */\nexport function FeatureGate({\n enabled,\n mode = \"disable\",\n tooltip = \"Coming soon\",\n children,\n className,\n}: FeatureGateProps) {\n if (enabled) {\n return <>{children}</>\n }\n\n if (mode === \"hide\") {\n return null\n }\n\n if (mode === \"badge\") {\n return (\n <div className={cn(\"relative inline-flex\", className)}>\n <div className=\"opacity-60 pointer-events-none select-none\">{children}</div>\n <span className=\"absolute -top-1.5 -right-1.5 rounded-full bg-muted text-muted-foreground text-[10px] font-medium px-1.5 py-0.5 leading-none border\">\n Soon\n </span>\n </div>\n )\n }\n\n // mode === 'disable' (default): wrap in tooltip, disable interaction\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\"inline-flex cursor-not-allowed\", className)}\n aria-disabled=\"true\"\n >\n <span className=\"pointer-events-none opacity-50 select-none\">\n {children}\n </span>\n </span>\n </TooltipTrigger>\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface ErrorStateProps {\n title?: string\n message: string\n onRetry?: () => void\n className?: string\n}\n\nexport function ErrorState({\n title = 'Something went wrong',\n message,\n onRetry,\n className,\n}: ErrorStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center py-12 px-4 text-center',\n className\n )}\n role=\"alert\"\n aria-live=\"assertive\"\n >\n <div\n className=\"w-16 h-16 mb-4 rounded-full bg-red-50 flex items-center justify-center\"\n aria-hidden=\"true\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-red-500\"\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">{title}</h3>\n <p className=\"text-sm text-muted-foreground mb-6 max-w-sm\">{message}</p>\n {onRetry && (\n <button\n onClick={onRetry}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 transition-colors\"\n aria-label=\"Retry loading content\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"mr-2\"\n aria-hidden=\"true\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n Try Again\n </button>\n )}\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ErrorState } from \"../states/ErrorState\"\n\ninterface ApiErrorBoundaryState {\n hasError: boolean\n error: Error | null\n}\n\ninterface ApiErrorBoundaryProps {\n children: React.ReactNode\n /** Custom fallback to render on error. Receives error and reset function. */\n fallback?: (props: { error: Error; reset: () => void }) => React.ReactNode\n /** Called when the error boundary catches an error. */\n onError?: (error: Error, info: React.ErrorInfo) => void\n}\n\n/**\n * Error boundary for API-driven page content.\n *\n * Catches unhandled errors from children and renders ErrorState with a retry button.\n *\n * @example\n * <ApiErrorBoundary>\n * <InvestorsTable />\n * </ApiErrorBoundary>\n */\nexport class ApiErrorBoundary extends React.Component<\n ApiErrorBoundaryProps,\n ApiErrorBoundaryState\n> {\n constructor(props: ApiErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): ApiErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, info: React.ErrorInfo) {\n this.props.onError?.(error, info)\n }\n\n reset = () => {\n this.setState({ hasError: false, error: null })\n }\n\n render() {\n if (this.state.hasError && this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback({ error: this.state.error, reset: this.reset })\n }\n return (\n <ErrorState\n message={this.state.error.message || \"An unexpected error occurred\"}\n onRetry={this.reset}\n />\n )\n }\n return this.props.children\n }\n}\n","import * as React from \"react\"\nimport { cn } from \"../../lib/utils\"\n\ninterface PageLoaderProps {\n /** Number of skeleton rows to show. Default: 5. */\n rows?: number\n className?: string\n}\n\n/**\n * Page-level skeleton loader. Renders animated skeleton rows as a loading placeholder.\n *\n * @example\n * if (loading) return <PageLoader />\n */\nexport function PageLoader({ rows = 5, className }: PageLoaderProps) {\n return (\n <div className={cn(\"w-full space-y-3 p-4\", className)} aria-busy=\"true\" aria-label=\"Loading\">\n <div className=\"h-8 w-1/3 rounded-md bg-muted animate-pulse\" />\n <div className=\"space-y-2\">\n {Array.from({ length: rows }).map((_, i) => (\n <div\n key={i}\n className=\"h-12 w-full rounded-md bg-muted animate-pulse\"\n style={{ opacity: 1 - i * 0.1 }}\n />\n ))}\n </div>\n </div>\n )\n}\n","'use client';\n\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useState } from 'react';\n\n/**\n * Shared QueryClient provider with consistent defaults.\n *\n * - staleTime: 5 minutes (avoids unnecessary refetches)\n * - refetchOnWindowFocus: false (explicit control over refetches)\n */\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n refetchOnWindowFocus: false,\n },\n },\n })\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n </QueryClientProvider>\n );\n}\n","'use client';\n\nimport { ReactNode, useState } from 'react';\nimport Link from 'next/link';\nimport { usePathname } from 'next/navigation';\nimport { cn } from '../../lib/utils';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { Button } from '../ui/button';\n\nexport interface SidebarLink {\n href: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface SidebarSection {\n title?: string;\n links: SidebarLink[];\n}\n\nexport interface SidebarProps {\n /**\n * Application name/logo\n */\n appName: string;\n /**\n * Navigation sections\n */\n sections: SidebarSection[];\n /**\n * User dropdown content (rendered at bottom of sidebar)\n */\n userDropdown?: ReactNode;\n /**\n * Additional className for sidebar\n */\n className?: string;\n /**\n * Whether sidebar is collapsible\n */\n collapsible?: boolean;\n /**\n * Default collapsed state\n */\n defaultCollapsed?: boolean;\n}\n\nexport function Sidebar({\n appName,\n sections,\n userDropdown,\n className,\n collapsible = true,\n defaultCollapsed = false,\n}: SidebarProps) {\n const pathname = usePathname();\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n\n const isActivePath = (href: string) => {\n if (href === '/') {\n return pathname === '/';\n }\n return pathname.startsWith(href);\n };\n\n return (\n <div\n className={cn(\n 'fixed left-0 inset-y-0 z-30 flex flex-col bg-gray-900 text-white transition-all duration-200',\n collapsed ? 'w-20' : 'w-64',\n className\n )}\n >\n {/* Logo */}\n <div className=\"p-4 border-b border-gray-800\">\n <Link\n href=\"/\"\n className={cn(\n 'font-bold hover:text-primary-400 transition-colors',\n collapsed ? 'text-lg' : 'text-xl'\n )}\n >\n {collapsed ? appName.substring(0, 2).toUpperCase() : appName}\n </Link>\n </div>\n\n {/* Navigation */}\n <nav className=\"flex-1 overflow-y-auto p-4 space-y-6\">\n {sections.map((section, idx) => (\n <div key={idx}>\n {section.title && !collapsed && (\n <h3 className=\"text-xs font-semibold text-gray-400 uppercase tracking-wider mb-2 px-3\">\n {section.title}\n </h3>\n )}\n <div className=\"space-y-1\">\n {section.links.map((link) => {\n const isActive = isActivePath(link.href);\n return (\n <Link\n key={link.href}\n href={link.href}\n className={cn(\n 'flex items-center gap-3 px-3 py-2 rounded-md text-sm font-medium transition-colors',\n isActive\n ? 'bg-primary-600 text-white'\n : 'text-gray-300 hover:bg-gray-800 hover:text-white',\n collapsed && 'justify-center'\n )}\n >\n {link.icon && (\n <span className=\"flex-shrink-0 w-5 h-5\">\n {link.icon}\n </span>\n )}\n {!collapsed && <span>{link.label}</span>}\n </Link>\n );\n })}\n </div>\n </div>\n ))}\n </nav>\n\n {/* User Dropdown */}\n {userDropdown && (\n <div className=\"p-4 border-t border-gray-800\">\n {userDropdown}\n </div>\n )}\n\n {/* Collapse Toggle */}\n {collapsible && (\n <div className={cn('p-4 border-t border-gray-800', userDropdown && 'border-t-0')}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCollapsed(!collapsed)}\n className=\"w-full text-gray-400 hover:text-white hover:bg-gray-800\"\n >\n {collapsed ? (\n <ChevronRight className=\"w-5 h-5\" />\n ) : (\n <>\n <ChevronLeft className=\"w-5 h-5 mr-2\" />\n <span>Collapse</span>\n </>\n )}\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Layout wrapper that adds proper spacing for sidebar\n */\nexport interface SidebarLayoutProps {\n children: ReactNode;\n collapsed?: boolean;\n}\n\nexport function SidebarLayout({ children, collapsed = false }: SidebarLayoutProps) {\n return (\n <div className=\"flex h-screen bg-gray-50\">\n {/* Spacer for fixed sidebar */}\n <div className={cn('flex-shrink-0 transition-all duration-200', collapsed ? 'w-20' : 'w-64')} />\n\n {/* Main content area */}\n <div className=\"flex-1 overflow-auto\">\n <main className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-8\">\n {children}\n </main>\n </div>\n </div>\n );\n}\n","import DOMPurify from 'isomorphic-dompurify';\nimport { type ElementType, type HTMLAttributes } from 'react';\n\ninterface SafeHtmlProps extends HTMLAttributes<HTMLElement> {\n html: string;\n as?: ElementType;\n}\n\n/**\n * Renders user-supplied or external HTML safely by running it through DOMPurify.\n * Strips script tags, event handlers, javascript: URLs, and other XSS vectors.\n * Use this instead of dangerouslySetInnerHTML anywhere app content is rendered.\n */\nexport function SafeHtml({ html, as: Tag = 'div', ...props }: SafeHtmlProps) {\n const sanitized = DOMPurify.sanitize(html, { ALLOW_DATA_ATTR: false });\n // eslint-disable-next-line react/no-danger\n return <Tag {...props} dangerouslySetInnerHTML={{ __html: sanitized }} />;\n}\n","import * as React from 'react'\n\nconst TOAST_LIMIT = 5\nconst TOAST_AUTO_DISMISS = 5000\n\nexport type ToastVariant = 'default' | 'destructive' | 'success' | 'warning' | 'info'\n\nexport interface ToasterToast {\n id: string\n title?: string\n description?: string\n action?: React.ReactNode\n variant?: ToastVariant\n duration?: number\n}\n\ntype Action =\n | { type: 'ADD_TOAST'; toast: ToasterToast }\n | { type: 'UPDATE_TOAST'; toast: Partial<ToasterToast> & { id: string } }\n | { type: 'DISMISS_TOAST'; toastId?: string }\n | { type: 'REMOVE_TOAST'; toastId?: string }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nfunction addToRemoveQueue(toastId: string, delay: number) {\n if (toastTimeouts.has(toastId)) {\n return\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId)\n dispatch({ type: 'REMOVE_TOAST', toastId })\n }, delay)\n\n toastTimeouts.set(toastId, timeout)\n}\n\nexport function reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'ADD_TOAST':\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n }\n\n case 'UPDATE_TOAST':\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n }\n\n case 'DISMISS_TOAST': {\n const { toastId } = action\n\n if (toastId) {\n addToRemoveQueue(toastId, 300)\n } else {\n state.toasts.forEach((t) => addToRemoveQueue(t.id, 300))\n }\n\n return state\n }\n\n case 'REMOVE_TOAST':\n if (action.toastId === undefined) {\n return { ...state, toasts: [] }\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n }\n }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action)\n listeners.forEach((listener) => listener(memoryState))\n}\n\nlet count = 0\n\nfunction genId() {\n count = (count + 1) % Number.MAX_VALUE\n return count.toString()\n}\n\ntype ToastInput = Omit<ToasterToast, 'id'>\n\nfunction toast(props: ToastInput) {\n const id = genId()\n const duration = props.duration ?? TOAST_AUTO_DISMISS\n\n dispatch({\n type: 'ADD_TOAST',\n toast: { ...props, id },\n })\n\n // Auto-dismiss\n if (duration > 0) {\n addToRemoveQueue(id, duration)\n }\n\n const update = (updateProps: Partial<ToasterToast>) =>\n dispatch({ type: 'UPDATE_TOAST', toast: { ...updateProps, id } })\n\n const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id })\n\n return { id, dismiss, update }\n}\n\nfunction clearAllToasts() {\n // Clear all pending timeouts\n toastTimeouts.forEach((timeout) => clearTimeout(timeout))\n toastTimeouts.clear()\n dispatch({ type: 'REMOVE_TOAST', toastId: undefined })\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState)\n\n React.useEffect(() => {\n listeners.push(setState)\n return () => {\n const index = listeners.indexOf(setState)\n if (index > -1) {\n listeners.splice(index, 1)\n }\n }\n }, [state])\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) =>\n dispatch({ type: 'DISMISS_TOAST', toastId }),\n clear: clearAllToasts,\n }\n}\n\nexport { useToast, toast, clearAllToasts }\n","'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport { useToast, type ToastVariant } from './use-toast'\n\nconst variantClasses: Record<ToastVariant, string> = {\n default: 'bg-background border-border text-foreground',\n destructive: 'bg-destructive border-destructive text-destructive-foreground',\n success: 'bg-green-50 border-green-200 text-green-900',\n warning: 'bg-yellow-50 border-yellow-200 text-yellow-900',\n info: 'bg-blue-50 border-blue-200 text-blue-900',\n}\n\nexport function Toaster() {\n const { toasts, dismiss } = useToast()\n\n if (toasts.length === 0) return null\n\n return (\n <div\n className=\"fixed bottom-4 right-4 z-[100] flex flex-col gap-2 w-full max-w-sm\"\n role=\"region\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <div\n key={t.id}\n className={cn(\n 'rounded-lg border p-4 shadow-lg transition-all animate-in slide-in-from-bottom-2 fade-in-0',\n variantClasses[t.variant ?? 'default']\n )}\n role=\"status\"\n aria-live=\"polite\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex-1\">\n {t.title && (\n <div className=\"text-sm font-semibold\">{t.title}</div>\n )}\n {t.description && (\n <div className=\"text-sm opacity-90 mt-1\">{t.description}</div>\n )}\n </div>\n <button\n onClick={() => dismiss(t.id)}\n className=\"shrink-0 rounded-sm opacity-70 hover:opacity-100 transition-opacity\"\n aria-label=\"Dismiss notification\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n {t.action && <div className=\"mt-2\">{t.action}</div>}\n </div>\n ))}\n </div>\n )\n}\n","import { toast } from './use-toast'\n\nexport interface NotifyOptions {\n title?: string\n description?: string\n duration?: number\n}\n\nfunction success(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'success', ...opts })\n}\n\nfunction error(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'destructive', ...opts })\n}\n\nfunction warning(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'warning', ...opts })\n}\n\nfunction info(messageOrOptions: string | NotifyOptions) {\n const opts =\n typeof messageOrOptions === 'string'\n ? { title: messageOrOptions }\n : messageOrOptions\n return toast({ variant: 'info', ...opts })\n}\n\nexport const notify = { success, error, warning, info }\n\nexport function useNotify() {\n return notify\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface EmptyStateAction {\n label: string\n onClick: () => void\n}\n\nexport interface EmptyStateProps {\n title: string\n description?: string\n action?: EmptyStateAction\n className?: string\n}\n\nexport function EmptyState({\n title,\n description,\n action,\n className,\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center py-12 px-4 text-center',\n className\n )}\n role=\"status\"\n aria-live=\"polite\"\n >\n <h3 className=\"text-xl font-semibold text-foreground mb-3\">{title}</h3>\n {description && (\n <p className=\"text-base text-muted-foreground mb-8 max-w-md leading-relaxed\">\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className=\"inline-flex items-center justify-center rounded-md text-sm font-medium bg-primary text-primary-foreground shadow hover:bg-primary/90 h-9 px-4 py-2 transition-colors\"\n aria-label={action.label}\n >\n {action.label}\n </button>\n )}\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { cn } from '../../lib/utils'\n\ninterface DialogContextValue {\n isLoading: boolean\n setIsLoading: (loading: boolean) => void\n canClose: boolean\n setCanClose: (canClose: boolean) => void\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null)\n\nfunction useDialogContext() {\n const context = React.useContext(DialogContext)\n if (!context) {\n throw new Error('Dialog components must be used within BaseDialog')\n }\n return context\n}\n\nexport interface BaseDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n children: React.ReactNode\n size?: 'sm' | 'md' | 'lg'\n loading?: boolean\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n}\n\nexport function BaseDialog({\n open,\n onOpenChange,\n children,\n size = 'md',\n loading = false,\n}: BaseDialogProps) {\n const [isLoading, setIsLoading] = React.useState(loading)\n const [canClose, setCanClose] = React.useState(!loading)\n\n React.useEffect(() => {\n setIsLoading(loading)\n setCanClose(!loading)\n }, [loading])\n\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (!newOpen && !canClose) {\n return\n }\n onOpenChange(newOpen)\n },\n [canClose, onOpenChange]\n )\n\n const contextValue = React.useMemo(\n () => ({ isLoading, setIsLoading, canClose, setCanClose }),\n [isLoading, canClose]\n )\n\n return (\n <DialogContext.Provider value={contextValue}>\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n <DialogPrimitive.Content\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',\n sizeClasses[size]\n )}\n onInteractOutside={(e) => {\n if (!canClose) e.preventDefault()\n }}\n onEscapeKeyDown={(e) => {\n if (!canClose) e.preventDefault()\n }}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n </DialogContext.Provider>\n )\n}\n\nexport interface DialogHeaderProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogHeader({ children, className }: DialogHeaderProps) {\n const { canClose } = useDialogContext()\n\n return (\n <div className={cn('flex items-start justify-between', className)}>\n <div className=\"flex flex-col space-y-1.5\">{children}</div>\n <DialogPrimitive.Close\n className={cn(\n 'rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none',\n !canClose && 'pointer-events-none opacity-30'\n )}\n disabled={!canClose}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </div>\n )\n}\n\nexport interface DialogTitleProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogTitle({ children, className }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n className={cn(\n 'text-lg font-semibold leading-none tracking-tight',\n className\n )}\n >\n {children}\n </DialogPrimitive.Title>\n )\n}\n\nexport interface DialogBodyProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogBody({ children, className }: DialogBodyProps) {\n return (\n <div className={cn('py-4 overflow-y-auto', className)}>{children}</div>\n )\n}\n\nexport interface DialogFooterProps {\n children: React.ReactNode\n className?: string\n}\n\nfunction DialogFooter({ children, className }: DialogFooterProps) {\n return (\n <div\n className={cn(\n 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\n// Compound component pattern\nBaseDialog.Header = DialogHeader\nBaseDialog.Title = DialogTitle\nBaseDialog.Body = DialogBody\nBaseDialog.Footer = DialogFooter\n\nexport { useDialogContext }\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface StatusBadgeConfig {\n label: string\n className: string\n}\n\nexport interface StatusBadgeProps<T extends string> {\n status: T\n config: Record<T, StatusBadgeConfig>\n size?: 'sm' | 'md'\n className?: string\n}\n\nconst sizeClasses = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-0.5 text-xs',\n}\n\nexport function StatusBadge<T extends string>({\n status,\n config,\n size = 'md',\n className,\n}: StatusBadgeProps<T>) {\n const entry = config[status]\n\n if (!entry) {\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium bg-gray-100 text-gray-700 border border-gray-200',\n sizeClasses[size],\n className\n )}\n >\n {status}\n </span>\n )\n }\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium',\n sizeClasses[size],\n entry.className,\n className\n )}\n >\n {entry.label}\n </span>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface TableSkeletonProps {\n rows?: number\n columns?: number\n className?: string\n}\n\nexport function TableSkeleton({\n rows = 5,\n columns = 4,\n className,\n}: TableSkeletonProps) {\n return (\n <div className={cn('bg-background rounded-lg border', className)}>\n {/* Header skeleton */}\n <div className=\"p-4 border-b\">\n <div className=\"flex justify-between items-center gap-4\">\n <div className=\"h-10 w-full max-w-sm animate-pulse rounded-md bg-gray-200\" />\n <div className=\"flex gap-2\">\n <div className=\"h-10 w-24 animate-pulse rounded-md bg-gray-200\" />\n </div>\n </div>\n </div>\n\n {/* Table body skeleton */}\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead className=\"border-b bg-muted/50\">\n <tr>\n {Array.from({ length: columns }).map((_, i) => (\n <th key={i} className=\"p-4 text-left\">\n <div className=\"h-4 w-24 animate-pulse rounded-md bg-gray-200\" />\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <tr key={rowIndex} className=\"border-b last:border-b-0\">\n {Array.from({ length: columns }).map((_, colIndex) => (\n <td key={colIndex} className=\"p-4\">\n <div className=\"h-4 w-full max-w-[200px] animate-pulse rounded-md bg-gray-200\" />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Pagination skeleton */}\n <div className=\"p-4 border-t flex justify-between items-center\">\n <div className=\"h-4 w-40 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"flex gap-2\">\n <div className=\"h-9 w-20 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"h-9 w-20 animate-pulse rounded-md bg-gray-200\" />\n </div>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface DashboardSkeletonProps {\n cards?: number\n className?: string\n}\n\nexport function DashboardSkeleton({\n cards = 4,\n className,\n}: DashboardSkeletonProps) {\n return (\n <div className={cn('grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4', className)}>\n {Array.from({ length: cards }).map((_, i) => (\n <div key={i} className=\"rounded-lg border bg-background p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"h-4 w-24 animate-pulse rounded-md bg-gray-200\" />\n <div className=\"h-8 w-8 animate-pulse rounded-md bg-gray-200\" />\n </div>\n <div className=\"h-8 w-20 animate-pulse rounded-md bg-gray-200 mb-2\" />\n <div className=\"h-3 w-32 animate-pulse rounded-md bg-gray-200\" />\n </div>\n ))}\n </div>\n )\n}\n","import * as React from 'react'\nimport { Check } from 'lucide-react'\n\nexport interface StepConfig {\n label: string\n description?: string\n}\n\nexport interface StepIndicatorProps {\n steps: StepConfig[]\n currentIndex: number\n className?: string\n}\n\nexport function StepIndicator({ steps, currentIndex, className = '' }: StepIndicatorProps) {\n return (\n <ol className={`flex items-center gap-0 ${className}`}>\n {steps.map((step, index) => {\n const isCompleted = index < currentIndex\n const isActive = index === currentIndex\n const isLast = index === steps.length - 1\n\n return (\n <li key={index} className={`flex items-center ${!isLast ? 'flex-1' : ''}`}>\n <div className=\"flex flex-col items-center\">\n <div\n className={[\n 'flex h-8 w-8 items-center justify-center rounded-full border-2 text-sm font-medium transition-colors',\n isCompleted\n ? 'border-primary-600 bg-primary-600 text-white'\n : isActive\n ? 'border-primary-600 bg-white text-primary-600'\n : 'border-gray-300 bg-white text-gray-400',\n ].join(' ')}\n >\n {isCompleted ? <Check className=\"h-4 w-4\" /> : index + 1}\n </div>\n <span\n className={[\n 'mt-1 text-xs font-medium',\n isActive ? 'text-primary-600' : isCompleted ? 'text-gray-600' : 'text-gray-400',\n ].join(' ')}\n >\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div\n className={[\n 'h-0.5 flex-1 mx-2 mb-4 transition-colors',\n isCompleted ? 'bg-primary-600' : 'bg-gray-200',\n ].join(' ')}\n />\n )}\n </li>\n )\n })}\n </ol>\n )\n}\n"]}
@@ -0,0 +1,63 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ // src/utils/cn.ts
5
+ function cn(...inputs) {
6
+ return twMerge(clsx(inputs));
7
+ }
8
+
9
+ // src/utils/index.ts
10
+ function generateId(prefix = "") {
11
+ const random = Math.random().toString(36).substring(2, 9);
12
+ return prefix ? `${prefix}_${random}` : random;
13
+ }
14
+ function sleep(ms) {
15
+ return new Promise((resolve) => setTimeout(resolve, ms));
16
+ }
17
+ function formatDate(date) {
18
+ const d = typeof date === "string" ? new Date(date) : date;
19
+ return new Intl.DateTimeFormat("en-US", {
20
+ month: "short",
21
+ day: "numeric",
22
+ year: "numeric"
23
+ }).format(d);
24
+ }
25
+ function formatRelativeTime(date) {
26
+ const d = typeof date === "string" ? new Date(date) : date;
27
+ const now = /* @__PURE__ */ new Date();
28
+ const diffMs = now.getTime() - d.getTime();
29
+ const diffDays = Math.floor(diffMs / (1e3 * 60 * 60 * 24));
30
+ if (diffDays === 0) return "Today";
31
+ if (diffDays === 1) return "Yesterday";
32
+ if (diffDays < 7) return `${diffDays} days ago`;
33
+ if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;
34
+ return formatDate(d);
35
+ }
36
+ function formatRelativeDate(date) {
37
+ const now = /* @__PURE__ */ new Date();
38
+ const diffMs = now.getTime() - date.getTime();
39
+ const diffSecs = Math.floor(diffMs / 1e3);
40
+ const diffMins = Math.floor(diffSecs / 60);
41
+ const diffHours = Math.floor(diffMins / 60);
42
+ const diffDays = Math.floor(diffHours / 24);
43
+ if (diffSecs < 60) return "just now";
44
+ if (diffMins < 60) return `${diffMins}m ago`;
45
+ if (diffHours < 24) return `${diffHours}h ago`;
46
+ if (diffDays < 7) return `${diffDays}d ago`;
47
+ return date.toLocaleDateString();
48
+ }
49
+ function formatCurrency(amount) {
50
+ return new Intl.NumberFormat("en-US", {
51
+ style: "currency",
52
+ currency: "USD",
53
+ minimumFractionDigits: 0,
54
+ maximumFractionDigits: 0
55
+ }).format(amount);
56
+ }
57
+ function getInitials(name) {
58
+ return name.split(" ").map((word) => word[0]).join("").toUpperCase().slice(0, 2);
59
+ }
60
+
61
+ export { cn, formatCurrency, formatDate, formatRelativeDate, formatRelativeTime, generateId, getInitials, sleep };
62
+ //# sourceMappingURL=chunk-G4XBXCFH.mjs.map
63
+ //# sourceMappingURL=chunk-G4XBXCFH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/utils/index.ts"],"names":[],"mappings":"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","file":"chunk-G4XBXCFH.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","export { cn } from './cn'\n\n/**\n * Generate a random ID with optional prefix\n */\nexport function generateId(prefix = ''): string {\n const random = Math.random().toString(36).substring(2, 9)\n return prefix ? `${prefix}_${random}` : random\n}\n\n/**\n * Sleep for a given number of milliseconds\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Format a date as a short human-readable string (e.g. \"Jan 5, 2024\").\n * Accepts a Date object or an ISO date string.\n */\nexport function formatDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(d)\n}\n\n/**\n * Format a date relative to now using coarse buckets\n * (Today / Yesterday / N days ago / N weeks ago / formatted date).\n * Accepts a Date object or an ISO date string.\n */\nexport function formatRelativeTime(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date\n const now = new Date()\n const diffMs = now.getTime() - d.getTime()\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))\n\n if (diffDays === 0) return 'Today'\n if (diffDays === 1) return 'Yesterday'\n if (diffDays < 7) return `${diffDays} days ago`\n if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`\n return formatDate(d)\n}\n\n/**\n * Format a date relative to now using fine-grained buckets\n * (just now / Xm ago / Xh ago / Xd ago / formatted date).\n */\nexport function formatRelativeDate(date: Date): string {\n const now = new Date()\n const diffMs = now.getTime() - date.getTime()\n const diffSecs = Math.floor(diffMs / 1000)\n const diffMins = Math.floor(diffSecs / 60)\n const diffHours = Math.floor(diffMins / 60)\n const diffDays = Math.floor(diffHours / 24)\n\n if (diffSecs < 60) return 'just now'\n if (diffMins < 60) return `${diffMins}m ago`\n if (diffHours < 24) return `${diffHours}h ago`\n if (diffDays < 7) return `${diffDays}d ago`\n\n return date.toLocaleDateString()\n}\n\n/**\n * Format a number as USD currency (no cents, e.g. \"$1,000,000\")\n */\nexport function formatCurrency(amount: number): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount)\n}\n\n/**\n * Get initials from a display name (up to 2 characters)\n */\nexport function getInitials(name: string): string {\n return name\n .split(' ')\n .map((word) => word[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n"]}
@@ -0,0 +1,35 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
13
+ var __commonJS = (cb, mod) => function __require2() {
14
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
30
+ mod
31
+ ));
32
+
33
+ export { __commonJS, __require, __toESM };
34
+ //# sourceMappingURL=chunk-LZOMFHX3.mjs.map
35
+ //# sourceMappingURL=chunk-LZOMFHX3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-LZOMFHX3.mjs"}
@@ -0,0 +1,210 @@
1
+ import { __commonJS, __require, __toESM } from './chunk-LZOMFHX3.mjs';
2
+
3
+ // src/theme/tailwind.config.js
4
+ var require_tailwind_config = __commonJS({
5
+ "src/theme/tailwind.config.js"(exports$1, module) {
6
+ module.exports = {
7
+ darkMode: ["class"],
8
+ theme: {
9
+ container: {
10
+ center: true,
11
+ padding: "2rem",
12
+ screens: {
13
+ "2xl": "1400px"
14
+ }
15
+ },
16
+ extend: {
17
+ colors: {
18
+ border: "hsl(var(--border))",
19
+ input: "hsl(var(--input))",
20
+ ring: "hsl(var(--ring))",
21
+ background: "hsl(var(--background))",
22
+ foreground: "hsl(var(--foreground))",
23
+ primary: {
24
+ DEFAULT: "hsl(var(--primary))",
25
+ foreground: "hsl(var(--primary-foreground))"
26
+ },
27
+ secondary: {
28
+ DEFAULT: "hsl(var(--secondary))",
29
+ foreground: "hsl(var(--secondary-foreground))"
30
+ },
31
+ destructive: {
32
+ DEFAULT: "hsl(var(--destructive))",
33
+ foreground: "hsl(var(--destructive-foreground))"
34
+ },
35
+ muted: {
36
+ DEFAULT: "hsl(var(--muted))",
37
+ foreground: "hsl(var(--muted-foreground))"
38
+ },
39
+ accent: {
40
+ DEFAULT: "hsl(var(--accent))",
41
+ foreground: "hsl(var(--accent-foreground))"
42
+ },
43
+ popover: {
44
+ DEFAULT: "hsl(var(--popover))",
45
+ foreground: "hsl(var(--popover-foreground))"
46
+ },
47
+ card: {
48
+ DEFAULT: "hsl(var(--card))",
49
+ foreground: "hsl(var(--card-foreground))"
50
+ }
51
+ },
52
+ borderRadius: {
53
+ lg: "var(--radius)",
54
+ md: "calc(var(--radius) - 2px)",
55
+ sm: "calc(var(--radius) - 4px)"
56
+ },
57
+ keyframes: {
58
+ "accordion-down": {
59
+ from: { height: 0 },
60
+ to: { height: "var(--radix-accordion-content-height)" }
61
+ },
62
+ "accordion-up": {
63
+ from: { height: "var(--radix-accordion-content-height)" },
64
+ to: { height: 0 }
65
+ }
66
+ },
67
+ animation: {
68
+ "accordion-down": "accordion-down 0.2s ease-out",
69
+ "accordion-up": "accordion-up 0.2s ease-out"
70
+ }
71
+ }
72
+ },
73
+ plugins: [__require("tailwindcss-animate")]
74
+ };
75
+ }
76
+ });
77
+
78
+ // src/theme/index.ts
79
+ var import_tailwind = __toESM(require_tailwind_config());
80
+
81
+ // src/theme/tailwind.preset.ts
82
+ var preset = {
83
+ darkMode: ["class"],
84
+ theme: {
85
+ extend: {
86
+ colors: {
87
+ background: "hsl(var(--background))",
88
+ foreground: "hsl(var(--foreground))",
89
+ card: {
90
+ DEFAULT: "hsl(var(--card))",
91
+ foreground: "hsl(var(--card-foreground))"
92
+ },
93
+ popover: {
94
+ DEFAULT: "hsl(var(--popover))",
95
+ foreground: "hsl(var(--popover-foreground))"
96
+ },
97
+ primary: {
98
+ DEFAULT: "hsl(var(--primary))",
99
+ foreground: "hsl(var(--primary-foreground))"
100
+ },
101
+ secondary: {
102
+ DEFAULT: "hsl(var(--secondary))",
103
+ foreground: "hsl(var(--secondary-foreground))"
104
+ },
105
+ muted: {
106
+ DEFAULT: "hsl(var(--muted))",
107
+ foreground: "hsl(var(--muted-foreground))"
108
+ },
109
+ accent: {
110
+ DEFAULT: "hsl(var(--accent))",
111
+ foreground: "hsl(var(--accent-foreground))"
112
+ },
113
+ destructive: {
114
+ DEFAULT: "hsl(var(--destructive))",
115
+ foreground: "hsl(var(--destructive-foreground))"
116
+ },
117
+ border: "hsl(var(--border))",
118
+ input: "hsl(var(--input))",
119
+ ring: "hsl(var(--ring))"
120
+ },
121
+ borderRadius: {
122
+ // All derived from per-step vars so changing --radius reshapes everything
123
+ sm: "var(--radius-sm)",
124
+ md: "var(--radius-md)",
125
+ lg: "var(--radius-lg)",
126
+ xl: "var(--radius-xl)",
127
+ full: "var(--radius-full)",
128
+ DEFAULT: "var(--radius)"
129
+ },
130
+ boxShadow: {
131
+ sm: "var(--shadow-sm)",
132
+ DEFAULT: "var(--shadow-md)",
133
+ md: "var(--shadow-md)",
134
+ lg: "var(--shadow-lg)",
135
+ xl: "var(--shadow-xl)",
136
+ none: "none"
137
+ },
138
+ fontFamily: {
139
+ sans: ["var(--font-sans)", "ui-sans-serif", "system-ui", "sans-serif"],
140
+ mono: ["var(--font-mono)", "ui-monospace", "monospace"],
141
+ heading: ["var(--font-heading, var(--font-sans))", "ui-sans-serif", "sans-serif"]
142
+ },
143
+ transitionDuration: {
144
+ fast: "var(--duration-fast)",
145
+ DEFAULT: "var(--duration-normal)",
146
+ slow: "var(--duration-slow)"
147
+ },
148
+ borderWidth: {
149
+ DEFAULT: "var(--border-width)"
150
+ },
151
+ keyframes: {
152
+ "accordion-down": {
153
+ from: { height: "0" },
154
+ to: { height: "var(--radix-accordion-content-height)" }
155
+ },
156
+ "accordion-up": {
157
+ from: { height: "var(--radix-accordion-content-height)" },
158
+ to: { height: "0" }
159
+ }
160
+ },
161
+ animation: {
162
+ "accordion-down": "accordion-down 0.2s ease-out",
163
+ "accordion-up": "accordion-up 0.2s ease-out"
164
+ }
165
+ }
166
+ },
167
+ plugins: []
168
+ };
169
+ var tailwind_preset_default = preset;
170
+
171
+ // src/theme/contract.ts
172
+ var THEME_TOKENS = {
173
+ colors: [
174
+ "--background",
175
+ "--foreground",
176
+ "--card",
177
+ "--card-foreground",
178
+ "--popover",
179
+ "--popover-foreground",
180
+ "--primary",
181
+ "--primary-foreground",
182
+ "--secondary",
183
+ "--secondary-foreground",
184
+ "--muted",
185
+ "--muted-foreground",
186
+ "--accent",
187
+ "--accent-foreground",
188
+ "--destructive",
189
+ "--destructive-foreground",
190
+ "--border",
191
+ "--input",
192
+ "--ring"
193
+ ],
194
+ shape: [
195
+ "--radius",
196
+ "--radius-sm",
197
+ "--radius-md",
198
+ "--radius-lg",
199
+ "--radius-xl",
200
+ "--radius-full"
201
+ ],
202
+ shadows: ["--shadow-sm", "--shadow-md", "--shadow-lg", "--shadow-xl"],
203
+ typography: ["--font-sans", "--font-mono", "--font-heading"],
204
+ animation: ["--duration-fast", "--duration-normal", "--duration-slow", "--easing-default"],
205
+ borders: ["--border-width"]
206
+ };
207
+
208
+ export { THEME_TOKENS, import_tailwind, tailwind_preset_default };
209
+ //# sourceMappingURL=chunk-QYXFLOO7.mjs.map
210
+ //# sourceMappingURL=chunk-QYXFLOO7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/tailwind.config.js","../src/theme/index.ts","../src/theme/tailwind.preset.ts","../src/theme/contract.ts"],"names":["exports"],"mappings":"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","file":"chunk-QYXFLOO7.mjs","sourcesContent":["/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n darkMode: [\"class\"],\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: { height: 0 },\n to: { height: \"var(--radix-accordion-content-height)\" },\n },\n \"accordion-up\": {\n from: { height: \"var(--radix-accordion-content-height)\" },\n to: { height: 0 },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n}\n","// Export Tailwind config for apps to extend (legacy CJS config)\nexport { default as tailwindConfig } from './tailwind.config'\n\n// Export TypeScript preset — the canonical way for apps to extend the design system\nexport { default as tailwindPreset } from './tailwind.preset'\n\n// Design token contract — all CSS variables apps must define\nexport { THEME_TOKENS } from './contract'\nexport type { ThemeColorTokens, ThemeShapeTokens, ThemeToken } from './contract'\n","import type { Config } from 'tailwindcss'\n\n// Presets intentionally omit `content` — each consuming app supplies its own.\n// tailwindcss exposes PresetsConfig = Partial<Config> for this purpose.\nconst preset: Partial<Config> = {\n darkMode: ['class'],\n theme: {\n extend: {\n colors: {\n background: 'hsl(var(--background))',\n foreground: 'hsl(var(--foreground))',\n card: {\n DEFAULT: 'hsl(var(--card))',\n foreground: 'hsl(var(--card-foreground))',\n },\n popover: {\n DEFAULT: 'hsl(var(--popover))',\n foreground: 'hsl(var(--popover-foreground))',\n },\n primary: {\n DEFAULT: 'hsl(var(--primary))',\n foreground: 'hsl(var(--primary-foreground))',\n },\n secondary: {\n DEFAULT: 'hsl(var(--secondary))',\n foreground: 'hsl(var(--secondary-foreground))',\n },\n muted: {\n DEFAULT: 'hsl(var(--muted))',\n foreground: 'hsl(var(--muted-foreground))',\n },\n accent: {\n DEFAULT: 'hsl(var(--accent))',\n foreground: 'hsl(var(--accent-foreground))',\n },\n destructive: {\n DEFAULT: 'hsl(var(--destructive))',\n foreground: 'hsl(var(--destructive-foreground))',\n },\n border: 'hsl(var(--border))',\n input: 'hsl(var(--input))',\n ring: 'hsl(var(--ring))',\n },\n borderRadius: {\n // All derived from per-step vars so changing --radius reshapes everything\n sm: 'var(--radius-sm)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n full: 'var(--radius-full)',\n DEFAULT: 'var(--radius)',\n },\n boxShadow: {\n sm: 'var(--shadow-sm)',\n DEFAULT: 'var(--shadow-md)',\n md: 'var(--shadow-md)',\n lg: 'var(--shadow-lg)',\n xl: 'var(--shadow-xl)',\n none: 'none',\n },\n fontFamily: {\n sans: ['var(--font-sans)', 'ui-sans-serif', 'system-ui', 'sans-serif'],\n mono: ['var(--font-mono)', 'ui-monospace', 'monospace'],\n heading: ['var(--font-heading, var(--font-sans))', 'ui-sans-serif', 'sans-serif'],\n },\n transitionDuration: {\n fast: 'var(--duration-fast)',\n DEFAULT: 'var(--duration-normal)',\n slow: 'var(--duration-slow)',\n },\n borderWidth: {\n DEFAULT: 'var(--border-width)',\n },\n keyframes: {\n 'accordion-down': {\n from: { height: '0' },\n to: { height: 'var(--radix-accordion-content-height)' },\n },\n 'accordion-up': {\n from: { height: 'var(--radix-accordion-content-height)' },\n to: { height: '0' },\n },\n },\n animation: {\n 'accordion-down': 'accordion-down 0.2s ease-out',\n 'accordion-up': 'accordion-up 0.2s ease-out',\n },\n },\n },\n plugins: [],\n}\n\nexport default preset\n","/** All CSS custom property names that apps must define in their theme */\nexport const THEME_TOKENS = {\n colors: [\n '--background',\n '--foreground',\n '--card',\n '--card-foreground',\n '--popover',\n '--popover-foreground',\n '--primary',\n '--primary-foreground',\n '--secondary',\n '--secondary-foreground',\n '--muted',\n '--muted-foreground',\n '--accent',\n '--accent-foreground',\n '--destructive',\n '--destructive-foreground',\n '--border',\n '--input',\n '--ring',\n ],\n shape: [\n '--radius',\n '--radius-sm',\n '--radius-md',\n '--radius-lg',\n '--radius-xl',\n '--radius-full',\n ],\n shadows: ['--shadow-sm', '--shadow-md', '--shadow-lg', '--shadow-xl'],\n typography: ['--font-sans', '--font-mono', '--font-heading'],\n animation: ['--duration-fast', '--duration-normal', '--duration-slow', '--easing-default'],\n borders: ['--border-width'],\n} as const\n\nexport type ThemeColorTokens = (typeof THEME_TOKENS.colors)[number]\nexport type ThemeShapeTokens = (typeof THEME_TOKENS.shape)[number]\nexport type ThemeToken =\n | ThemeColorTokens\n | ThemeShapeTokens\n | (typeof THEME_TOKENS.shadows)[number]\n | (typeof THEME_TOKENS.typography)[number]\n | (typeof THEME_TOKENS.animation)[number]\n | (typeof THEME_TOKENS.borders)[number]\n"]}