shru-design-system 0.1.3 → 0.1.5

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.
package/dist/index.js CHANGED
@@ -793,6 +793,30 @@ function mapToTailwindVars(cssVars) {
793
793
  } else if (cssVars["--spacing-component-md"]) {
794
794
  mapped["--spacing"] = cssVars["--spacing-component-md"];
795
795
  }
796
+ if (cssVars["--spacing-component-xs"]) {
797
+ mapped["--spacing-component-xs"] = cssVars["--spacing-component-xs"];
798
+ }
799
+ if (cssVars["--spacing-component-sm"]) {
800
+ mapped["--spacing-component-sm"] = cssVars["--spacing-component-sm"];
801
+ }
802
+ if (cssVars["--spacing-component-md"]) {
803
+ mapped["--spacing-component-md"] = cssVars["--spacing-component-md"];
804
+ }
805
+ if (cssVars["--spacing-component-lg"]) {
806
+ mapped["--spacing-component-lg"] = cssVars["--spacing-component-lg"];
807
+ }
808
+ if (cssVars["--spacing-component-xl"]) {
809
+ mapped["--spacing-component-xl"] = cssVars["--spacing-component-xl"];
810
+ }
811
+ if (cssVars["--duration-fast"]) {
812
+ mapped["--duration-fast"] = cssVars["--duration-fast"];
813
+ }
814
+ if (cssVars["--duration-normal"]) {
815
+ mapped["--duration-normal"] = cssVars["--duration-normal"];
816
+ }
817
+ if (cssVars["--duration-slow"]) {
818
+ mapped["--duration-slow"] = cssVars["--duration-slow"];
819
+ }
796
820
  return mapped;
797
821
  }
798
822
  function generateCSSString(cssVars) {
@@ -1462,6 +1486,30 @@ function mapToTailwindVarsSync(cssVars) {
1462
1486
  } else if (cssVars["--spacing-component-md"]) {
1463
1487
  mapped["--spacing"] = cssVars["--spacing-component-md"];
1464
1488
  }
1489
+ if (cssVars["--spacing-component-xs"]) {
1490
+ mapped["--spacing-component-xs"] = cssVars["--spacing-component-xs"];
1491
+ }
1492
+ if (cssVars["--spacing-component-sm"]) {
1493
+ mapped["--spacing-component-sm"] = cssVars["--spacing-component-sm"];
1494
+ }
1495
+ if (cssVars["--spacing-component-md"]) {
1496
+ mapped["--spacing-component-md"] = cssVars["--spacing-component-md"];
1497
+ }
1498
+ if (cssVars["--spacing-component-lg"]) {
1499
+ mapped["--spacing-component-lg"] = cssVars["--spacing-component-lg"];
1500
+ }
1501
+ if (cssVars["--spacing-component-xl"]) {
1502
+ mapped["--spacing-component-xl"] = cssVars["--spacing-component-xl"];
1503
+ }
1504
+ if (cssVars["--duration-fast"]) {
1505
+ mapped["--duration-fast"] = cssVars["--duration-fast"];
1506
+ }
1507
+ if (cssVars["--duration-normal"]) {
1508
+ mapped["--duration-normal"] = cssVars["--duration-normal"];
1509
+ }
1510
+ if (cssVars["--duration-slow"]) {
1511
+ mapped["--duration-slow"] = cssVars["--duration-slow"];
1512
+ }
1465
1513
  return mapped;
1466
1514
  }
1467
1515
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/atoms/Button.tsx","../src/atoms/Badge.tsx","../src/molecules/Modal.tsx","../src/molecules/Select.tsx","../src/molecules/Tooltip.tsx","../src/themes/themeConfig.ts","../src/themes/themeUtils.ts","../src/themes/useTheme.tsx","../src/themes/ui/ThemeToggle/useThemeToggle.ts","../src/themes/ui/ThemeToggle/themeToggleConfig.ts","../src/themes/ui/ThemeToggle/themeToggleUtils.ts","../src/themes/ui/ThemeToggle/ThemeToggle.tsx","../src/themes/applyThemeSync.ts"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","DialogPrimitive","jsxs","XIcon","SelectPrimitive","ChevronDownIcon","CheckIcon","ChevronUpIcon","TooltipPrimitive","useState","useCallback","useEffect","useRef","STORAGE_KEY","hexToHSL","isHexColor"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\n/**\n * Utility function to merge class names with Tailwind conflict resolution\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst buttonVariantsConfig = {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\" as const,\n size: \"default\" as const,\n },\n} as const\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n buttonVariantsConfig\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n})\n\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst badgeVariantsConfig = {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\" as const,\n },\n} as const\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n badgeVariantsConfig\n)\n\nconst Badge = React.forwardRef<\n HTMLSpanElement,\n React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }\n>(({ className, variant, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n})\n\nBadge.displayName = \"Badge\"\n\nexport { Badge, badgeVariants }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\nimport { Button } from \"../atoms/Button\"\n\nimport { cn } from \"../utils\"\n\nfunction Modal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"modal\" {...props} />\n}\n\nfunction ModalTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"modal-trigger\" {...props} />\n}\n\nfunction ModalPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"modal-portal\" {...props} />\n}\n\nfunction ModalClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"modal-close\" {...props} />\n}\n\nfunction ModalOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"modal-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ModalContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <ModalPortal data-slot=\"modal-portal\">\n <ModalOverlay />\n <DialogPrimitive.Content\n data-slot=\"modal-content\"\n className={cn(\n \"bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"modal-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </ModalPortal>\n )\n}\n\nfunction ModalHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"modal-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction ModalFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"modal-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ModalTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"modal-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction ModalDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"modal-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Modal,\n ModalClose,\n ModalContent,\n ModalDescription,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n ModalPortal,\n ModalTitle,\n ModalTrigger,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nconst selectTriggerSizes = [\"sm\", \"default\"] as const\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: typeof selectTriggerSizes[number]\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground 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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../utils\"\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 (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nconst tooltipSides = [\"top\", \"right\", \"bottom\", \"left\"] as const\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n side,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content> & {\n side?: typeof tooltipSides[number]\n}) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n side={side}\n className={cn(\n \"bg-foreground text-background 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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n\n","/**\n * Theme Configuration\n * Registry of all available themes organized by category\n * \n * Base themes are defined here. Additional themes can be discovered dynamically\n * by scanning the /tokens/themes/ directory structure.\n */\n\nexport type ThemeMetadata = {\n name: string\n file: string\n icon: string\n description: string\n}\n\nexport type ThemeCategory = {\n name: string\n order: number\n themes: Record<string, ThemeMetadata>\n}\n\n// Base theme categories (always available)\nexport const baseThemeCategories: Record<string, ThemeCategory> = {\n color: {\n name: 'Color',\n order: 1.0,\n themes: {\n white: {\n name: 'White',\n file: 'color/white.json',\n icon: '🎨',\n description: 'Light theme with white background'\n },\n dark: {\n name: 'Dark',\n file: 'color/dark.json',\n icon: '🌙',\n description: 'Dark theme with dark background'\n }\n }\n },\n typography: {\n name: 'Typography',\n order: 2.0,\n themes: {\n sans: {\n name: 'Sans',\n file: 'typography/sans.json',\n icon: '📝',\n description: 'Sans-serif font family'\n },\n serif: {\n name: 'Serif',\n file: 'typography/serif.json',\n icon: '📖',\n description: 'Serif font family'\n }\n }\n },\n shape: {\n name: 'Shape',\n order: 3.0,\n themes: {\n smooth: {\n name: 'Smooth',\n file: 'shape/smooth.json',\n icon: '🔲',\n description: 'Smooth rounded corners'\n },\n sharp: {\n name: 'Sharp',\n file: 'shape/sharp.json',\n icon: '⬜',\n description: 'Sharp square corners'\n }\n }\n },\n density: {\n name: 'Density',\n order: 4.0,\n themes: {\n comfortable: {\n name: 'Comfortable',\n file: 'density/comfortable.json',\n icon: '📏',\n description: 'Comfortable spacing'\n },\n compact: {\n name: 'Compact',\n file: 'density/compact.json',\n icon: '📐',\n description: 'Compact spacing'\n }\n }\n },\n animation: {\n name: 'Animation',\n order: 5.0,\n themes: {\n gentle: {\n name: 'Gentle',\n file: 'animation/gentle.json',\n icon: '✨',\n description: 'Gentle animations'\n },\n brisk: {\n name: 'Brisk',\n file: 'animation/brisk.json',\n icon: '⚡',\n description: 'Fast, brisk animations'\n }\n }\n },\n custom: {\n name: 'Custom',\n order: 10.0, // Highest priority\n themes: {\n brand: {\n name: 'Brand',\n file: 'custom/brand.json',\n icon: '🎯',\n description: 'Brand-specific theme'\n },\n minimal: {\n name: 'Minimal',\n file: 'custom/minimal.json',\n icon: '🎪',\n description: 'Minimal theme'\n }\n }\n }\n}\n\n// Cache for dynamically discovered themes\nlet discoveredThemesCache: Record<string, ThemeCategory> | null = null\n\n/**\n * Discover themes by scanning token directory structure\n * Scans /tokens/themes/ to find all available theme files\n */\nexport async function discoverThemes(): Promise<Record<string, ThemeCategory>> {\n if (discoveredThemesCache) {\n return discoveredThemesCache\n }\n\n const discovered = JSON.parse(JSON.stringify(baseThemeCategories))\n \n try {\n // Get base path for tokens\n const tokensBase = typeof window !== 'undefined' && (window as any).__THEME_TOKENS_BASE__ \n ? (window as any).__THEME_TOKENS_BASE__ \n : '/tokens'\n \n // Known categories from base config\n const knownCategories = Object.keys(baseThemeCategories)\n \n // For each category, try to discover additional themes\n for (const category of knownCategories) {\n const categoryPath = `${tokensBase}/themes/${category}`\n \n // Try to fetch an index or scan common theme files\n // Since we can't list directories via fetch, we'll try common patterns\n // Users can add themes by following the naming convention\n \n // For now, we'll rely on users to add themes to the config\n // But we can validate that theme files exist when requested\n }\n \n discoveredThemesCache = discovered\n return discovered\n } catch (error) {\n console.warn('Error discovering themes:', error)\n return baseThemeCategories\n }\n}\n\n/**\n * Register a custom theme dynamically\n * Allows users to add themes without modifying the base config\n */\nexport function registerTheme(category: string, themeId: string, metadata: ThemeMetadata): Record<string, ThemeCategory> {\n if (!discoveredThemesCache) {\n discoveredThemesCache = JSON.parse(JSON.stringify(baseThemeCategories))\n }\n \n // TypeScript now knows discoveredThemesCache is not null after the check above\n const cache: Record<string, ThemeCategory> = discoveredThemesCache!\n \n // Create category if it doesn't exist\n if (!cache[category]) {\n cache[category] = {\n name: category.charAt(0).toUpperCase() + category.slice(1),\n order: 99, // Custom categories get high order\n themes: {}\n }\n }\n \n // Register the theme\n cache[category].themes[themeId] = {\n name: metadata.name,\n file: metadata.file,\n icon: metadata.icon || '🎨',\n description: metadata.description || ''\n }\n \n return cache\n}\n\n/**\n * Get merged theme categories (base + discovered)\n */\nexport async function getThemeCategories(): Promise<Record<string, ThemeCategory>> {\n return await discoverThemes()\n}\n\n// For backward compatibility, export baseThemeCategories as themeCategories\nexport const themeCategories = baseThemeCategories\n\n/**\n * Get theme file path\n */\nexport function getThemeFilePath(category: string, themeId: string): string | null {\n const categories: Record<string, ThemeCategory> = discoveredThemesCache || baseThemeCategories\n const theme = categories[category]?.themes[themeId]\n if (!theme) return null\n return `/tokens/themes/${theme.file}`\n}\n\n/**\n * Get all themes for a category\n */\nexport async function getThemesForCategory(category: string): Promise<Record<string, ThemeMetadata>> {\n const categories = await getThemeCategories()\n return categories[category]?.themes || {}\n}\n\n/**\n * Get theme by ID\n */\nexport async function getTheme(category: string, themeId: string): Promise<ThemeMetadata | null> {\n const categories = await getThemeCategories()\n return categories[category]?.themes[themeId] || null\n}\n\n","/**\n * Theme Utilities\n * Pure utility functions for theme management\n * Note: generateAndApplyTheme has side effects (modifies DOM) but is the main theme application utility\n */\n\nimport { getThemeCategories } from './themeConfig'\nimport type { ThemeSelection } from './useTheme'\n\n/**\n * Generate theme combination name\n */\nexport function getThemeName(selectedThemes: ThemeSelection): string {\n const parts: string[] = []\n \n if (selectedThemes.color) parts.push(selectedThemes.color)\n if (selectedThemes.typography) parts.push(selectedThemes.typography)\n if (selectedThemes.shape) parts.push(selectedThemes.shape)\n if (selectedThemes.density) parts.push(selectedThemes.density)\n if (selectedThemes.animation) parts.push(selectedThemes.animation)\n \n return parts.length > 0 ? parts.join('-') : 'default'\n}\n\n/**\n * Validate theme selection\n */\nexport function validateThemeSelection(selectedThemes: ThemeSelection, themeCategories: any) {\n const errors: string[] = []\n \n for (const [category, themeId] of Object.entries(selectedThemes)) {\n if (!themeId) continue\n \n const categoryConfig = themeCategories[category]\n if (!categoryConfig) {\n errors.push(`Unknown category: ${category}`)\n continue\n }\n \n const theme = categoryConfig.themes[themeId]\n if (!theme) {\n errors.push(`Theme ${themeId} not found in category ${category}`)\n }\n }\n \n return {\n valid: errors.length === 0,\n errors\n }\n}\n\n/**\n * Get default theme selections\n */\nexport function getDefaultThemes(): ThemeSelection {\n return {\n color: 'white',\n typography: 'sans',\n shape: 'smooth',\n density: 'comfortable',\n animation: 'gentle'\n }\n}\n\n/**\n * Deep clone object\n */\nexport function deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/**\n * Check if value is an object\n */\nfunction isObject(item: any): item is Record<string, any> {\n return item && typeof item === 'object' && !Array.isArray(item)\n}\n\n/**\n * Deep merge objects\n */\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n const output = { ...target } as T\n \n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] } as any)\n } else {\n (output as any)[key] = deepMerge(target[key], source[key] as any)\n }\n } else {\n Object.assign(output, { [key]: source[key] } as any)\n }\n })\n }\n \n return output\n}\n\n// Cache for loaded JSON files\nconst tokenCache = new Map<string, any>()\n\n/**\n * Load JSON file with caching\n */\nexport async function loadTokenFile(path: string): Promise<any> {\n if (tokenCache.has(path)) {\n return deepClone(tokenCache.get(path))\n }\n \n try {\n const response = await fetch(path)\n if (!response.ok) {\n throw new Error(`Failed to load ${path}: ${response.statusText}`)\n }\n const data = await response.json()\n tokenCache.set(path, data)\n return deepClone(data)\n } catch (error) {\n console.error(`Error loading token file ${path}:`, error)\n throw error\n }\n}\n\n/**\n * Resolve token references\n * {palette.blue.500} → actual color value\n */\nfunction resolveReferences(tokens: any, palette: any): any {\n const resolved = JSON.parse(JSON.stringify(tokens))\n \n function resolveValue(value: any): any {\n if (typeof value !== 'string') return value\n \n // Match {path.to.token} pattern\n const match = value.match(/^\\{([^}]+)\\}$/)\n if (!match) return value\n \n const path = match[1].split('.')\n let current: any = { palette, ...resolved }\n \n for (const key of path) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key]\n } else {\n console.warn(`Token reference not found: {${match[1]}}`)\n return value // Return original if not found\n }\n }\n \n return typeof current === 'string' ? current : value\n }\n \n function traverse(obj: any): void {\n for (const key in obj) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n traverse(obj[key])\n } else {\n obj[key] = resolveValue(obj[key])\n }\n }\n }\n \n traverse(resolved)\n return resolved\n}\n\n/**\n * Convert hex color to HSL format (without hsl() wrapper)\n * Returns format: \"h s% l%\" for use with hsl(var(--color))\n */\nfunction hexToHSL(hex: string): string {\n // Remove # if present\n hex = hex.replace('#', '')\n \n // Parse RGB\n const r = parseInt(hex.substring(0, 2), 16) / 255\n const g = parseInt(hex.substring(2, 4), 16) / 255\n const b = parseInt(hex.substring(4, 6), 16) / 255\n \n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n let h = 0\n let s = 0\n const l = (max + min) / 2\n \n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n \n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n break\n case g:\n h = ((b - r) / d + 2) / 6\n break\n case b:\n h = ((r - g) / d + 4) / 6\n break\n }\n }\n \n h = Math.round(h * 360)\n s = Math.round(s * 100)\n const lPercent = Math.round(l * 100)\n \n return `${h} ${s}% ${lPercent}%`\n}\n\n/**\n * Check if a string is a hex color\n */\nfunction isHexColor(value: string): boolean {\n return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(value)\n}\n\n/**\n * Flatten nested object to CSS variables\n * Maps token structure to CSS variable naming:\n * - color.primary → --primary (semantic colors are flat)\n * - font.body → --font-body (other tokens keep prefix)\n * - radius.button → --radius-button\n */\nfunction flattenToCSS(tokens: any, prefix = '', result: Record<string, string> = {}, isColorContext = false): Record<string, string> {\n for (const key in tokens) {\n const value = tokens[key]\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n // Check if we're entering the color object\n const enteringColor = key === 'color' && prefix === ''\n const inColorContext = isColorContext || enteringColor\n \n if (enteringColor) {\n // When entering color object, flatten without \"color-\" prefix\n flattenToCSS(value, '', result, true)\n } else if (inColorContext) {\n // Already in color context, continue with empty prefix\n flattenToCSS(value, '', result, true)\n } else {\n // For other tokens, keep the prefix structure\n const newPrefix = prefix ? `${prefix}-${key}` : key\n flattenToCSS(value, newPrefix, result, false)\n }\n } else {\n // Generate CSS variable name\n let cssKey: string\n if (isColorContext || (prefix === '' && key === 'color')) {\n // Semantic colors: --primary, --background, etc. (no \"color-\" prefix)\n cssKey = `--${key}`\n } else if (prefix === '') {\n // Top-level tokens (non-color)\n cssKey = `--${key}`\n } else {\n // Nested tokens: --font-body, --radius-button, etc.\n cssKey = `--${prefix}-${key}`\n }\n \n // Convert hex colors to HSL format for Tailwind compatibility\n let finalValue = value\n if (isColorContext && typeof value === 'string' && isHexColor(value)) {\n finalValue = hexToHSL(value)\n }\n \n result[cssKey] = finalValue\n }\n }\n \n return result\n}\n\n/**\n * Map theme variables to Tailwind-compatible CSS variables\n */\nfunction mapToTailwindVars(cssVars: Record<string, string>): Record<string, string> {\n const mapped = { ...cssVars }\n \n // Map shape/radius variables to --radius (used by Tailwind's rounded-* classes)\n if (cssVars['--radius-button']) {\n mapped['--radius'] = cssVars['--radius-button']\n }\n if (cssVars['--radius-card']) {\n mapped['--radius-lg'] = cssVars['--radius-card']\n }\n \n // Map typography variables to Tailwind font system\n if (cssVars['--font-body']) {\n mapped['--font-sans'] = cssVars['--font-body']\n }\n \n // Map spacing variables to --spacing\n if (cssVars['--spacing-base']) {\n mapped['--spacing'] = cssVars['--spacing-base']\n } else if (cssVars['--spacing-component-md']) {\n mapped['--spacing'] = cssVars['--spacing-component-md']\n }\n \n return mapped\n}\n\n/**\n * Generate CSS string from CSS variables\n */\nfunction generateCSSString(cssVars: Record<string, string>): string {\n const mappedVars = mapToTailwindVars(cssVars)\n \n const vars = Object.entries(mappedVars)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n')\n \n return `:root {\\n${vars}\\n}`\n}\n\n/**\n * Apply CSS to DOM\n */\nfunction applyThemeCSS(css: string): void {\n let styleTag = document.getElementById('dynamic-theme')\n \n if (!styleTag) {\n styleTag = document.createElement('style')\n styleTag.id = 'dynamic-theme'\n document.head.appendChild(styleTag)\n }\n \n styleTag.textContent = css\n}\n\n/**\n * Generate and apply theme\n * Main function that composes everything\n */\nexport async function generateAndApplyTheme(selectedThemes: ThemeSelection = {}): Promise<{\n success: boolean\n themeName: string\n cssVars: Record<string, string>\n}> {\n try {\n // Get theme categories (with dynamic discovery)\n const themeCategories = await getThemeCategories()\n \n // Validate theme selection\n const validation = validateThemeSelection(selectedThemes, themeCategories)\n if (!validation.valid) {\n console.error('Invalid theme selection:', validation.errors)\n throw new Error(`Invalid theme selection: ${validation.errors.join(', ')}`)\n }\n \n // 1. Load base tokens\n const base = await loadTokenFile('/tokens/base.json')\n \n // 2. Load palette\n const palettes = await loadTokenFile('/tokens/palettes.json')\n const palette = palettes.palette\n \n // 3. Deep merge: base → palette\n let merged = deepMerge(base, { palette })\n \n // 4. Load and merge category themes in order\n const categoryOrder = Object.values(themeCategories)\n .sort((a, b) => a.order - b.order)\n .map(cat => cat.name.toLowerCase())\n \n for (const category of categoryOrder) {\n if (category === 'custom') continue // Handle custom separately\n \n const themeId = selectedThemes[category as keyof ThemeSelection] as string | undefined\n if (!themeId) continue\n \n const themePath = `/tokens/themes/${category}/${themeId}.json`\n const themeData = await loadTokenFile(themePath)\n \n // Merge theme data\n merged = deepMerge(merged, themeData)\n }\n \n // 5. Handle custom theme (highest priority)\n if (selectedThemes.custom) {\n const customPath = `/tokens/themes/custom/${selectedThemes.custom}.json`\n const customData = await loadTokenFile(customPath)\n merged = deepMerge(merged, customData)\n }\n \n // 6. Resolve references\n const resolved = resolveReferences(merged, palette)\n \n // 7. Flatten to CSS variables\n const cssVars = flattenToCSS(resolved)\n \n // 8. Generate CSS string\n const css = generateCSSString(cssVars)\n \n // 9. Apply to DOM\n if (typeof document !== 'undefined') {\n applyThemeCSS(css)\n }\n \n return {\n success: true,\n themeName: getThemeName(selectedThemes),\n cssVars\n }\n } catch (error) {\n console.error('Error generating theme:', error)\n throw error\n }\n}\n\n","\"use client\"\n\nimport { useState, useEffect, useCallback } from 'react'\nimport { generateAndApplyTheme, getDefaultThemes } from './themeUtils'\nimport { getThemeCategories } from './themeConfig'\n\nexport type ThemeSelection = {\n color?: string\n typography?: string\n shape?: string\n density?: string\n animation?: string\n custom?: string\n}\n\nexport type ThemeMetadata = {\n name: string\n file: string\n icon: string\n description: string\n}\n\nconst STORAGE_KEY = 'design-system-theme'\n\n/**\n * Hook for managing design system theme switching\n */\nexport function useTheme() {\n // Initialize with defaults (for SSR compatibility)\n const [selectedThemes, setSelectedThemes] = useState<ThemeSelection>(getDefaultThemes())\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n // Define applyTheme before useEffect uses it\n const applyTheme = useCallback(async (themes: ThemeSelection) => {\n setIsLoading(true)\n setError(null)\n \n try {\n await generateAndApplyTheme(themes)\n \n // Save to localStorage\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(themes))\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to apply theme'\n setError(errorMessage)\n console.error('Theme application error:', err)\n } finally {\n setIsLoading(false)\n }\n }, [])\n\n // Load from localStorage on client mount (after hydration)\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored) {\n try {\n const parsed = JSON.parse(stored)\n setSelectedThemes(parsed)\n // Apply the loaded theme\n applyTheme(parsed)\n } catch {\n // If parse fails, use defaults and apply them\n const defaults = getDefaultThemes()\n setSelectedThemes(defaults)\n applyTheme(defaults)\n }\n } else {\n // No stored theme, apply defaults\n const defaults = getDefaultThemes()\n applyTheme(defaults)\n }\n }\n }, [applyTheme]) // Include applyTheme in deps\n\n const updateTheme = useCallback(async (category: keyof ThemeSelection, themeId: string | undefined) => {\n const newThemes = {\n ...selectedThemes,\n [category]: themeId || undefined\n }\n \n setSelectedThemes(newThemes)\n await applyTheme(newThemes)\n }, [selectedThemes, applyTheme])\n\n const resetToDefaults = useCallback(async () => {\n const defaults = getDefaultThemes()\n setSelectedThemes(defaults)\n await applyTheme(defaults)\n }, [applyTheme])\n\n // Get available themes for a category (with dynamic discovery)\n const getAvailableThemes = useCallback(async (category: string): Promise<Record<string, ThemeMetadata>> => {\n const categories = await getThemeCategories()\n return (categories[category]?.themes || {}) as Record<string, ThemeMetadata>\n }, [])\n\n return {\n selectedThemes,\n updateTheme,\n resetToDefaults,\n isLoading,\n error,\n getAvailableThemes\n }\n}\n\n","\"use client\"\n\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useTheme, type ThemeSelection } from \"../../useTheme\"\nimport { getThemeCategories } from \"../../themeConfig\"\n\nexport function useThemeToggle() {\n const { selectedThemes, updateTheme, isLoading, getAvailableThemes } = useTheme()\n const [isOpen, setIsOpen] = useState(false)\n const [selectedCategory, setSelectedCategory] = useState<string | null>(null)\n const [themeCategories, setThemeCategories] = useState<any>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n // Load theme categories on mount\n useEffect(() => {\n getThemeCategories().then(setThemeCategories)\n }, [])\n\n // Close menu when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n setSelectedCategory(null)\n }\n }\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [isOpen])\n\n const handleCategoryClick = useCallback((categoryKey: string) => {\n setSelectedCategory(categoryKey)\n }, [])\n\n const handleThemeSelect = useCallback(async (category: keyof ThemeSelection, themeId: string) => {\n const currentTheme = selectedThemes[category]\n const newTheme = currentTheme === themeId ? undefined : themeId\n await updateTheme(category, newTheme)\n }, [selectedThemes, updateTheme])\n\n const handleBack = useCallback(() => {\n setSelectedCategory(null)\n }, [])\n\n const toggleMenu = useCallback(() => {\n setIsOpen((prev) => {\n if (!prev) {\n setSelectedCategory(null)\n }\n return !prev\n })\n }, [])\n\n // Get categories (including custom)\n const categories: Array<[string, { name: string; themes: Record<string, any>; order?: number }]> = themeCategories \n ? (Object.entries(themeCategories) as Array<[string, { name: string; themes: Record<string, any>; order?: number }]>)\n .sort(([, a], [, b]) => (a.order || 0) - (b.order || 0))\n : []\n\n return {\n selectedThemes,\n isLoading,\n getAvailableThemes,\n isOpen,\n selectedCategory,\n themeCategories,\n categories,\n menuRef,\n handleCategoryClick,\n handleThemeSelect,\n handleBack,\n toggleMenu,\n }\n}\n\n","/**\n * Theme Toggle Configuration\n * Constants and configuration for theme toggle component\n */\n\n// Category icon mapping\nexport const categoryIcons: Record<string, string> = {\n color: \"🎨\",\n typography: \"📝\",\n shape: \"🔲\",\n density: \"📏\",\n animation: \"✨\",\n}\n\n// Position classes\nexport const positionClasses = {\n \"bottom-right\": \"bottom-6 right-6\",\n \"bottom-left\": \"bottom-6 left-6\",\n \"top-right\": \"top-6 right-6\",\n \"top-left\": \"top-6 left-6\",\n} as const\n\n// Get arc configuration based on position\nexport function getArcConfig(position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\") {\n switch (position) {\n case \"bottom-right\":\n // Open towards top-left: arc from top to left\n return { startAngle: -60, endAngle: -180, sweep: -150 }\n case \"bottom-left\":\n // Open towards top-right: arc from top to right\n return { startAngle: -120, endAngle: 0, sweep: 150 }\n case \"top-right\":\n // Open towards bottom-left: arc from bottom to left\n return { startAngle: 60, endAngle: 0, sweep: 150 }\n case \"top-left\":\n // Open towards bottom-right: arc from bottom to right\n return { startAngle: 120, endAngle: 0, sweep: -150 }\n }\n}\n\n","/**\n * Theme Toggle Utilities\n * Pure utility functions for theme toggle component\n */\n\n/**\n * Simple polar to cartesian conversion\n */\nexport function getPositionOnArc(angleDeg: number, radius: number) {\n const rad = (angleDeg * Math.PI) / 180\n return {\n x: Math.cos(rad) * radius,\n y: Math.sin(rad) * radius,\n }\n}\n\n","\"use client\"\n\nimport React, { useState, useEffect } from \"react\"\nimport { useThemeToggle } from \"./useThemeToggle\"\nimport { categoryIcons, positionClasses } from \"./themeToggleConfig\"\nimport { getPositionOnArc } from \"./themeToggleUtils\"\nimport { getArcConfig } from \"./themeToggleConfig\"\nimport { cn } from \"../../../utils\"\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"../../../molecules/Tooltip\"\nimport type { ThemeSelection, ThemeMetadata } from \"../../useTheme\"\n\nexport interface ThemeToggleProps {\n className?: string\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n}\n\nexport function ThemeToggle({ \n className,\n position = \"bottom-right\"\n}: ThemeToggleProps) {\n const {\n selectedThemes,\n isLoading,\n getAvailableThemes,\n isOpen,\n selectedCategory,\n categories,\n menuRef,\n handleCategoryClick,\n handleThemeSelect,\n handleBack,\n toggleMenu,\n } = useThemeToggle()\n\n return (\n <div \n ref={menuRef}\n id=\"theme-toggle\"\n className={cn(\"fixed z-50\", positionClasses[position], className)}\n >\n {/* Main Toggle Button */}\n <button\n onClick={toggleMenu}\n className={cn(\n \"w-14 h-14 rounded-full bg-primary text-primary-foreground\",\n \"shadow-lg hover:shadow-xl\",\n \"flex items-center justify-center\",\n \"relative z-10\",\n \"transition-all duration-200\",\n \"hover:scale-110 active:scale-95\",\n isOpen && \"rotate-90\"\n )}\n aria-label=\"Theme settings\"\n title=\"Theme settings\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73 2.15l.22.38a2 2 0 0 1 0 2.73l-.22.38a2 2 0 0 0 2.15 2.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-2.15l-.22-.38a2 2 0 0 1 0-2.73l.22-.38a2 2 0 0 0-2.15-2.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n </button>\n\n {/* Radial Menu */}\n {isOpen && (\n <TooltipProvider delayDuration={300}>\n <div className=\"absolute inset-0 pointer-events-none\">\n {!selectedCategory ? (\n <CategoryRing\n categories={categories}\n onCategoryClick={handleCategoryClick}\n selectedThemes={selectedThemes}\n position={position}\n />\n ) : (\n <ThemeRingAsync\n category={selectedCategory}\n getAvailableThemes={getAvailableThemes}\n selectedTheme={selectedThemes[selectedCategory as keyof ThemeSelection]}\n onThemeSelect={(themeId) => handleThemeSelect(selectedCategory as keyof ThemeSelection, themeId)}\n onBack={handleBack}\n isLoading={isLoading}\n position={position}\n />\n )}\n </div>\n </TooltipProvider>\n )}\n </div>\n )\n}\n\n// Common radial wheel component\n// Handles both positioning and UI rendering\ninterface RadialWheelItem {\n id: string\n content: React.ReactNode\n label: string\n onClick: () => void\n isSelected?: boolean\n disabled?: boolean\n className?: string\n}\n\ninterface RadialWheelProps {\n items: RadialWheelItem[]\n position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n radius: number\n buttonSize: number\n startOffset?: number\n}\n\nfunction RadialWheel({\n items,\n position,\n radius,\n buttonSize,\n startOffset = 0.75,\n}: RadialWheelProps) {\n const arcConfig = getArcConfig(position)\n const totalItems = items.length\n const angleStep = Math.abs(arcConfig.sweep) / totalItems\n\n return (\n <div className=\"absolute inset-0\">\n {items.map((item, index) => {\n const angle = arcConfig.startAngle + angleStep * (index + startOffset) * Math.sign(arcConfig.sweep)\n const pos = getPositionOnArc(angle, radius)\n\n return (\n <Tooltip key={item.id}>\n <TooltipTrigger asChild>\n <button\n onClick={item.onClick}\n disabled={item.disabled}\n className={cn(\n \"absolute rounded-full\",\n \"bg-background border-2 shadow-lg\",\n \"flex items-center justify-center text-lg\",\n \"pointer-events-auto\",\n \"transition-all duration-200\",\n \"hover:scale-110 active:scale-95\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n item.isSelected\n ? \"border-primary bg-primary text-primary-foreground\"\n : \"border-border hover:border-primary/50\",\n item.className\n )}\n style={{\n width: `${buttonSize}px`,\n height: `${buttonSize}px`,\n left: `${pos.x}px`,\n top: `${pos.y}px`,\n }}\n aria-label={item.label}\n >\n {item.content}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {item.label}\n </TooltipContent>\n </Tooltip>\n )\n })}\n </div>\n )\n}\n\n// Category Ring Component\ninterface CategoryRingProps {\n categories: Array<[string, { name: string; themes: Record<string, ThemeMetadata>; order?: number }]>\n onCategoryClick: (categoryKey: string) => void\n selectedThemes: ThemeSelection\n position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n}\n\nfunction CategoryRing({\n categories,\n onCategoryClick,\n selectedThemes,\n position,\n}: CategoryRingProps) {\n const radius = 60\n const buttonSize = 40\n\n // Prepare items for RadialWheel\n const items: RadialWheelItem[] = categories.map(([categoryKey, category]) => {\n const hasSelection = !!selectedThemes[categoryKey as keyof ThemeSelection]\n return {\n id: categoryKey,\n content: categoryIcons[categoryKey] || \"⚙️\",\n label: category.name,\n onClick: () => onCategoryClick(categoryKey),\n isSelected: hasSelection,\n className: hasSelection ? \"bg-primary/10\" : undefined,\n }\n })\n\n return (\n <RadialWheel\n items={items}\n position={position}\n radius={radius}\n buttonSize={buttonSize}\n startOffset={0.5}\n />\n )\n}\n\n// Theme Ring Component\ninterface ThemeRingProps {\n category: string\n themes: Record<string, ThemeMetadata>\n selectedTheme?: string\n onThemeSelect: (themeId: string) => void\n onBack: () => void\n isLoading: boolean\n position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n}\n\n// Async version that loads themes dynamically\nfunction ThemeRingAsync({\n category,\n getAvailableThemes,\n selectedTheme,\n onThemeSelect,\n onBack,\n isLoading,\n position,\n}: Omit<ThemeRingProps, 'themes'> & { getAvailableThemes: (category: string) => Promise<Record<string, ThemeMetadata>> }) {\n const [themes, setThemes] = useState<Record<string, ThemeMetadata>>({})\n\n useEffect(() => {\n getAvailableThemes(category).then(setThemes)\n }, [category, getAvailableThemes])\n\n const themeEntries = Object.entries(themes)\n const radius = 65\n const buttonSize = 40\n const backButtonSize = 36\n\n // Back button position (at start of arc)\n const arcConfig = getArcConfig(position)\n const backButtonPos = getPositionOnArc(arcConfig.startAngle, radius)\n\n // Prepare items for RadialWheel\n const items: RadialWheelItem[] = themeEntries.map(([themeId, theme]) => ({\n id: themeId,\n content: theme.icon,\n label: theme.name,\n onClick: () => !isLoading && onThemeSelect(themeId),\n isSelected: selectedTheme === themeId,\n disabled: isLoading,\n className: \"text-base\", // Smaller text for theme icons\n }))\n\n return (\n <div className=\"absolute inset-0\">\n {/* Back Button */}\n <button\n onClick={onBack}\n className={cn(\n \"absolute rounded-full\",\n \"bg-muted border border-border shadow-md\",\n \"flex items-center justify-center\",\n \"pointer-events-auto\",\n \"transition-all duration-200\",\n \"hover:scale-110 active:scale-95\"\n )}\n style={{\n width: `${backButtonSize}px`,\n height: `${backButtonSize}px`,\n left: `${backButtonPos.x}px`,\n top: `${backButtonPos.y}px`,\n }}\n aria-label=\"Back\"\n >\n <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 <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n </button>\n\n {/* Theme Option Buttons */}\n <RadialWheel\n items={items}\n position={position}\n radius={radius}\n buttonSize={buttonSize}\n startOffset={1}\n />\n\n {/* Loading Indicator */}\n {isLoading && (\n <div\n className=\"absolute w-12 h-12 rounded-full bg-primary/20 border-2 border-primary animate-pulse pointer-events-none\"\n style={{\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n }}\n />\n )}\n </div>\n )\n}\n\n","/**\n * Synchronous theme application for blocking script execution\n * This runs before React hydrates to prevent theme flash\n */\n\nimport type { ThemeSelection } from './useTheme'\nimport { getDefaultThemes } from './themeUtils'\n\nconst STORAGE_KEY = 'design-system-theme'\n\n/**\n * Apply theme synchronously using blocking XMLHttpRequest\n * This prevents flash of unstyled content\n */\nexport function applyThemeSync(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return\n }\n\n // Get theme from localStorage\n let selectedThemes: ThemeSelection = getDefaultThemes()\n try {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored) {\n selectedThemes = JSON.parse(stored)\n }\n } catch {\n // Use defaults if parse fails\n }\n\n // Load token files synchronously (blocking)\n try {\n const base = loadJSONSync('/tokens/base.json')\n const palettes = loadJSONSync('/tokens/palettes.json')\n const palette = palettes?.palette || {}\n\n // Merge base with palette\n let merged = deepMergeSync(base || {}, { palette })\n\n // Load theme files\n const categoryOrder = ['color', 'typography', 'shape', 'density', 'animation']\n for (const category of categoryOrder) {\n const themeId = selectedThemes[category as keyof ThemeSelection] as string | undefined\n if (!themeId) continue\n\n try {\n const themeData = loadJSONSync(`/tokens/themes/${category}/${themeId}.json`)\n if (themeData) {\n merged = deepMergeSync(merged, themeData)\n }\n } catch {\n // Skip if theme file doesn't exist\n }\n }\n\n // Handle custom theme\n if (selectedThemes.custom) {\n try {\n const customData = loadJSONSync(`/tokens/themes/custom/${selectedThemes.custom}.json`)\n if (customData) {\n merged = deepMergeSync(merged, customData)\n }\n } catch {\n // Skip if custom theme doesn't exist\n }\n }\n\n // Resolve references\n const resolved = resolveReferencesSync(merged, palette)\n\n // Flatten to CSS variables\n const cssVars = flattenToCSSSync(resolved)\n\n // Map to Tailwind-compatible variables\n const mappedVars = mapToTailwindVarsSync(cssVars)\n\n // Generate and apply CSS\n const css = `:root {\\n${Object.entries(mappedVars).map(([key, value]) => ` ${key}: ${value};`).join('\\n')}\\n}`\n \n let styleTag = document.getElementById('dynamic-theme')\n if (!styleTag) {\n styleTag = document.createElement('style')\n styleTag.id = 'dynamic-theme'\n document.head.insertBefore(styleTag, document.head.firstChild)\n }\n styleTag.textContent = css\n } catch (error) {\n // Silently fail - theme will apply via React hook\n console.warn('Sync theme application failed, will apply via React:', error)\n }\n}\n\n/**\n * Load JSON file synchronously (blocking)\n */\nfunction loadJSONSync(path: string): any {\n try {\n const xhr = new XMLHttpRequest()\n xhr.open('GET', path, false) // false = synchronous\n xhr.send(null)\n \n if (xhr.status === 200 || xhr.status === 0) {\n return JSON.parse(xhr.responseText)\n }\n } catch {\n // Return null if file doesn't exist or fails\n }\n return null\n}\n\n/**\n * Deep merge objects (synchronous version)\n */\nfunction deepMergeSync(target: any, source: any): any {\n const output = { ...target }\n \n if (isObjectSync(target) && isObjectSync(source)) {\n Object.keys(source).forEach(key => {\n if (isObjectSync(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n output[key] = deepMergeSync(target[key], source[key])\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n \n return output\n}\n\nfunction isObjectSync(item: any): item is Record<string, any> {\n return item && typeof item === 'object' && !Array.isArray(item)\n}\n\n/**\n * Resolve token references synchronously\n */\nfunction resolveReferencesSync(tokens: any, palette: any): any {\n const resolved = JSON.parse(JSON.stringify(tokens))\n \n function resolveValue(value: any): any {\n if (typeof value !== 'string') return value\n \n const match = value.match(/^\\{([^}]+)\\}$/)\n if (!match) return value\n \n const path = match[1].split('.')\n let current: any = { palette, ...resolved }\n \n for (const key of path) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key]\n } else {\n return value\n }\n }\n \n return typeof current === 'string' ? current : value\n }\n \n function traverse(obj: any): void {\n for (const key in obj) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n traverse(obj[key])\n } else {\n obj[key] = resolveValue(obj[key])\n }\n }\n }\n \n traverse(resolved)\n return resolved\n}\n\n/**\n * Convert hex color to HSL format (without hsl() wrapper)\n * Returns format: \"h s% l%\" for use with hsl(var(--color))\n */\nfunction hexToHSL(hex: string): string {\n hex = hex.replace('#', '')\n \n const r = parseInt(hex.substring(0, 2), 16) / 255\n const g = parseInt(hex.substring(2, 4), 16) / 255\n const b = parseInt(hex.substring(4, 6), 16) / 255\n \n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n let h = 0\n let s = 0\n const l = (max + min) / 2\n \n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n \n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n break\n case g:\n h = ((b - r) / d + 2) / 6\n break\n case b:\n h = ((r - g) / d + 4) / 6\n break\n }\n }\n \n h = Math.round(h * 360)\n s = Math.round(s * 100)\n const lPercent = Math.round(l * 100)\n \n return `${h} ${s}% ${lPercent}%`\n}\n\n/**\n * Check if a string is a hex color\n */\nfunction isHexColor(value: string): boolean {\n return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(value)\n}\n\n/**\n * Flatten nested object to CSS variables (synchronous version)\n */\nfunction flattenToCSSSync(tokens: any, prefix = '', result: Record<string, string> = {}, isColorContext = false): Record<string, string> {\n for (const key in tokens) {\n const value = tokens[key]\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const enteringColor = key === 'color' && prefix === ''\n const inColorContext = isColorContext || enteringColor\n \n if (enteringColor) {\n flattenToCSSSync(value, '', result, true)\n } else if (inColorContext) {\n flattenToCSSSync(value, '', result, true)\n } else {\n const newPrefix = prefix ? `${prefix}-${key}` : key\n flattenToCSSSync(value, newPrefix, result, false)\n }\n } else {\n let cssKey: string\n if (isColorContext || (prefix === '' && key === 'color')) {\n cssKey = `--${key}`\n } else if (prefix === '') {\n cssKey = `--${key}`\n } else {\n cssKey = `--${prefix}-${key}`\n }\n \n // Convert hex colors to HSL format for Tailwind compatibility\n let finalValue = value\n if (isColorContext && typeof value === 'string' && isHexColor(value)) {\n finalValue = hexToHSL(value)\n }\n \n result[cssKey] = finalValue\n }\n }\n \n return result\n}\n\n/**\n * Map theme variables to Tailwind-compatible CSS variables (synchronous version)\n */\nfunction mapToTailwindVarsSync(cssVars: Record<string, string>): Record<string, string> {\n const mapped = { ...cssVars }\n \n if (cssVars['--radius-button']) {\n mapped['--radius'] = cssVars['--radius-button']\n }\n if (cssVars['--radius-card']) {\n mapped['--radius-lg'] = cssVars['--radius-card']\n }\n \n if (cssVars['--font-body']) {\n mapped['--font-sans'] = cssVars['--font-body']\n }\n \n if (cssVars['--spacing-base']) {\n mapped['--spacing'] = cssVars['--spacing-base']\n } else if (cssVars['--spacing-component-md']) {\n mapped['--spacing'] = cssVars['--spacing-component-md']\n }\n \n return mapped\n}\n\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/atoms/Button.tsx","../src/atoms/Badge.tsx","../src/molecules/Modal.tsx","../src/molecules/Select.tsx","../src/molecules/Tooltip.tsx","../src/themes/themeConfig.ts","../src/themes/themeUtils.ts","../src/themes/useTheme.tsx","../src/themes/ui/ThemeToggle/useThemeToggle.ts","../src/themes/ui/ThemeToggle/themeToggleConfig.ts","../src/themes/ui/ThemeToggle/themeToggleUtils.ts","../src/themes/ui/ThemeToggle/ThemeToggle.tsx","../src/themes/applyThemeSync.ts"],"names":["twMerge","clsx","cva","React","Slot","jsx","React2","DialogPrimitive","jsxs","XIcon","SelectPrimitive","ChevronDownIcon","CheckIcon","ChevronUpIcon","TooltipPrimitive","useState","useCallback","useEffect","useRef","STORAGE_KEY","hexToHSL","isHexColor"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\n/**\n * Utility function to merge class names with Tailwind conflict resolution\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst buttonVariantsConfig = {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\" as const,\n size: \"default\" as const,\n },\n} as const\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n buttonVariantsConfig\n)\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }\n>(({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n})\n\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst badgeVariantsConfig = {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\" as const,\n },\n} as const\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n badgeVariantsConfig\n)\n\nconst Badge = React.forwardRef<\n HTMLSpanElement,\n React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }\n>(({ className, variant, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n})\n\nBadge.displayName = \"Badge\"\n\nexport { Badge, badgeVariants }\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\nimport { Button } from \"../atoms/Button\"\n\nimport { cn } from \"../utils\"\n\nfunction Modal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"modal\" {...props} />\n}\n\nfunction ModalTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"modal-trigger\" {...props} />\n}\n\nfunction ModalPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"modal-portal\" {...props} />\n}\n\nfunction ModalClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"modal-close\" {...props} />\n}\n\nfunction ModalOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"modal-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ModalContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <ModalPortal data-slot=\"modal-portal\">\n <ModalOverlay />\n <DialogPrimitive.Content\n data-slot=\"modal-content\"\n className={cn(\n \"bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"modal-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </ModalPortal>\n )\n}\n\nfunction ModalHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"modal-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction ModalFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"modal-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ModalTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"modal-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction ModalDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"modal-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Modal,\n ModalClose,\n ModalContent,\n ModalDescription,\n ModalFooter,\n ModalHeader,\n ModalOverlay,\n ModalPortal,\n ModalTitle,\n ModalTrigger,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nconst selectTriggerSizes = [\"sm\", \"default\"] as const\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: typeof selectTriggerSizes[number]\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground 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 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../utils\"\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 (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nconst tooltipSides = [\"top\", \"right\", \"bottom\", \"left\"] as const\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n side,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content> & {\n side?: typeof tooltipSides[number]\n}) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n side={side}\n className={cn(\n \"bg-foreground text-background 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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n\n","/**\n * Theme Configuration\n * Registry of all available themes organized by category\n * \n * Base themes are defined here. Additional themes can be discovered dynamically\n * by scanning the /tokens/themes/ directory structure.\n */\n\nexport type ThemeMetadata = {\n name: string\n file: string\n icon: string\n description: string\n}\n\nexport type ThemeCategory = {\n name: string\n order: number\n themes: Record<string, ThemeMetadata>\n}\n\n// Base theme categories (always available)\nexport const baseThemeCategories: Record<string, ThemeCategory> = {\n color: {\n name: 'Color',\n order: 1.0,\n themes: {\n white: {\n name: 'White',\n file: 'color/white.json',\n icon: '🎨',\n description: 'Light theme with white background'\n },\n dark: {\n name: 'Dark',\n file: 'color/dark.json',\n icon: '🌙',\n description: 'Dark theme with dark background'\n }\n }\n },\n typography: {\n name: 'Typography',\n order: 2.0,\n themes: {\n sans: {\n name: 'Sans',\n file: 'typography/sans.json',\n icon: '📝',\n description: 'Sans-serif font family'\n },\n serif: {\n name: 'Serif',\n file: 'typography/serif.json',\n icon: '📖',\n description: 'Serif font family'\n }\n }\n },\n shape: {\n name: 'Shape',\n order: 3.0,\n themes: {\n smooth: {\n name: 'Smooth',\n file: 'shape/smooth.json',\n icon: '🔲',\n description: 'Smooth rounded corners'\n },\n sharp: {\n name: 'Sharp',\n file: 'shape/sharp.json',\n icon: '⬜',\n description: 'Sharp square corners'\n }\n }\n },\n density: {\n name: 'Density',\n order: 4.0,\n themes: {\n comfortable: {\n name: 'Comfortable',\n file: 'density/comfortable.json',\n icon: '📏',\n description: 'Comfortable spacing'\n },\n compact: {\n name: 'Compact',\n file: 'density/compact.json',\n icon: '📐',\n description: 'Compact spacing'\n }\n }\n },\n animation: {\n name: 'Animation',\n order: 5.0,\n themes: {\n gentle: {\n name: 'Gentle',\n file: 'animation/gentle.json',\n icon: '✨',\n description: 'Gentle animations'\n },\n brisk: {\n name: 'Brisk',\n file: 'animation/brisk.json',\n icon: '⚡',\n description: 'Fast, brisk animations'\n }\n }\n },\n custom: {\n name: 'Custom',\n order: 10.0, // Highest priority\n themes: {\n brand: {\n name: 'Brand',\n file: 'custom/brand.json',\n icon: '🎯',\n description: 'Brand-specific theme'\n },\n minimal: {\n name: 'Minimal',\n file: 'custom/minimal.json',\n icon: '🎪',\n description: 'Minimal theme'\n }\n }\n }\n}\n\n// Cache for dynamically discovered themes\nlet discoveredThemesCache: Record<string, ThemeCategory> | null = null\n\n/**\n * Discover themes by scanning token directory structure\n * Scans /tokens/themes/ to find all available theme files\n */\nexport async function discoverThemes(): Promise<Record<string, ThemeCategory>> {\n if (discoveredThemesCache) {\n return discoveredThemesCache\n }\n\n const discovered = JSON.parse(JSON.stringify(baseThemeCategories))\n \n try {\n // Get base path for tokens\n const tokensBase = typeof window !== 'undefined' && (window as any).__THEME_TOKENS_BASE__ \n ? (window as any).__THEME_TOKENS_BASE__ \n : '/tokens'\n \n // Known categories from base config\n const knownCategories = Object.keys(baseThemeCategories)\n \n // For each category, try to discover additional themes\n for (const category of knownCategories) {\n const categoryPath = `${tokensBase}/themes/${category}`\n \n // Try to fetch an index or scan common theme files\n // Since we can't list directories via fetch, we'll try common patterns\n // Users can add themes by following the naming convention\n \n // For now, we'll rely on users to add themes to the config\n // But we can validate that theme files exist when requested\n }\n \n discoveredThemesCache = discovered\n return discovered\n } catch (error) {\n console.warn('Error discovering themes:', error)\n return baseThemeCategories\n }\n}\n\n/**\n * Register a custom theme dynamically\n * Allows users to add themes without modifying the base config\n */\nexport function registerTheme(category: string, themeId: string, metadata: ThemeMetadata): Record<string, ThemeCategory> {\n if (!discoveredThemesCache) {\n discoveredThemesCache = JSON.parse(JSON.stringify(baseThemeCategories))\n }\n \n // TypeScript now knows discoveredThemesCache is not null after the check above\n const cache: Record<string, ThemeCategory> = discoveredThemesCache!\n \n // Create category if it doesn't exist\n if (!cache[category]) {\n cache[category] = {\n name: category.charAt(0).toUpperCase() + category.slice(1),\n order: 99, // Custom categories get high order\n themes: {}\n }\n }\n \n // Register the theme\n cache[category].themes[themeId] = {\n name: metadata.name,\n file: metadata.file,\n icon: metadata.icon || '🎨',\n description: metadata.description || ''\n }\n \n return cache\n}\n\n/**\n * Get merged theme categories (base + discovered)\n */\nexport async function getThemeCategories(): Promise<Record<string, ThemeCategory>> {\n return await discoverThemes()\n}\n\n// For backward compatibility, export baseThemeCategories as themeCategories\nexport const themeCategories = baseThemeCategories\n\n/**\n * Get theme file path\n */\nexport function getThemeFilePath(category: string, themeId: string): string | null {\n const categories: Record<string, ThemeCategory> = discoveredThemesCache || baseThemeCategories\n const theme = categories[category]?.themes[themeId]\n if (!theme) return null\n return `/tokens/themes/${theme.file}`\n}\n\n/**\n * Get all themes for a category\n */\nexport async function getThemesForCategory(category: string): Promise<Record<string, ThemeMetadata>> {\n const categories = await getThemeCategories()\n return categories[category]?.themes || {}\n}\n\n/**\n * Get theme by ID\n */\nexport async function getTheme(category: string, themeId: string): Promise<ThemeMetadata | null> {\n const categories = await getThemeCategories()\n return categories[category]?.themes[themeId] || null\n}\n\n","/**\n * Theme Utilities\n * Pure utility functions for theme management\n * Note: generateAndApplyTheme has side effects (modifies DOM) but is the main theme application utility\n */\n\nimport { getThemeCategories } from './themeConfig'\nimport type { ThemeSelection } from './useTheme'\n\n/**\n * Generate theme combination name\n */\nexport function getThemeName(selectedThemes: ThemeSelection): string {\n const parts: string[] = []\n \n if (selectedThemes.color) parts.push(selectedThemes.color)\n if (selectedThemes.typography) parts.push(selectedThemes.typography)\n if (selectedThemes.shape) parts.push(selectedThemes.shape)\n if (selectedThemes.density) parts.push(selectedThemes.density)\n if (selectedThemes.animation) parts.push(selectedThemes.animation)\n \n return parts.length > 0 ? parts.join('-') : 'default'\n}\n\n/**\n * Validate theme selection\n */\nexport function validateThemeSelection(selectedThemes: ThemeSelection, themeCategories: any) {\n const errors: string[] = []\n \n for (const [category, themeId] of Object.entries(selectedThemes)) {\n if (!themeId) continue\n \n const categoryConfig = themeCategories[category]\n if (!categoryConfig) {\n errors.push(`Unknown category: ${category}`)\n continue\n }\n \n const theme = categoryConfig.themes[themeId]\n if (!theme) {\n errors.push(`Theme ${themeId} not found in category ${category}`)\n }\n }\n \n return {\n valid: errors.length === 0,\n errors\n }\n}\n\n/**\n * Get default theme selections\n */\nexport function getDefaultThemes(): ThemeSelection {\n return {\n color: 'white',\n typography: 'sans',\n shape: 'smooth',\n density: 'comfortable',\n animation: 'gentle'\n }\n}\n\n/**\n * Deep clone object\n */\nexport function deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/**\n * Check if value is an object\n */\nfunction isObject(item: any): item is Record<string, any> {\n return item && typeof item === 'object' && !Array.isArray(item)\n}\n\n/**\n * Deep merge objects\n */\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n const output = { ...target } as T\n \n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach(key => {\n if (isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] } as any)\n } else {\n (output as any)[key] = deepMerge(target[key], source[key] as any)\n }\n } else {\n Object.assign(output, { [key]: source[key] } as any)\n }\n })\n }\n \n return output\n}\n\n// Cache for loaded JSON files\nconst tokenCache = new Map<string, any>()\n\n/**\n * Load JSON file with caching\n */\nexport async function loadTokenFile(path: string): Promise<any> {\n if (tokenCache.has(path)) {\n return deepClone(tokenCache.get(path))\n }\n \n try {\n const response = await fetch(path)\n if (!response.ok) {\n throw new Error(`Failed to load ${path}: ${response.statusText}`)\n }\n const data = await response.json()\n tokenCache.set(path, data)\n return deepClone(data)\n } catch (error) {\n console.error(`Error loading token file ${path}:`, error)\n throw error\n }\n}\n\n/**\n * Resolve token references\n * {palette.blue.500} → actual color value\n */\nfunction resolveReferences(tokens: any, palette: any): any {\n const resolved = JSON.parse(JSON.stringify(tokens))\n \n function resolveValue(value: any): any {\n if (typeof value !== 'string') return value\n \n // Match {path.to.token} pattern\n const match = value.match(/^\\{([^}]+)\\}$/)\n if (!match) return value\n \n const path = match[1].split('.')\n let current: any = { palette, ...resolved }\n \n for (const key of path) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key]\n } else {\n console.warn(`Token reference not found: {${match[1]}}`)\n return value // Return original if not found\n }\n }\n \n return typeof current === 'string' ? current : value\n }\n \n function traverse(obj: any): void {\n for (const key in obj) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n traverse(obj[key])\n } else {\n obj[key] = resolveValue(obj[key])\n }\n }\n }\n \n traverse(resolved)\n return resolved\n}\n\n/**\n * Convert hex color to HSL format (without hsl() wrapper)\n * Returns format: \"h s% l%\" for use with hsl(var(--color))\n */\nfunction hexToHSL(hex: string): string {\n // Remove # if present\n hex = hex.replace('#', '')\n \n // Parse RGB\n const r = parseInt(hex.substring(0, 2), 16) / 255\n const g = parseInt(hex.substring(2, 4), 16) / 255\n const b = parseInt(hex.substring(4, 6), 16) / 255\n \n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n let h = 0\n let s = 0\n const l = (max + min) / 2\n \n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n \n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n break\n case g:\n h = ((b - r) / d + 2) / 6\n break\n case b:\n h = ((r - g) / d + 4) / 6\n break\n }\n }\n \n h = Math.round(h * 360)\n s = Math.round(s * 100)\n const lPercent = Math.round(l * 100)\n \n return `${h} ${s}% ${lPercent}%`\n}\n\n/**\n * Check if a string is a hex color\n */\nfunction isHexColor(value: string): boolean {\n return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(value)\n}\n\n/**\n * Flatten nested object to CSS variables\n * Maps token structure to CSS variable naming:\n * - color.primary → --primary (semantic colors are flat)\n * - font.body → --font-body (other tokens keep prefix)\n * - radius.button → --radius-button\n */\nfunction flattenToCSS(tokens: any, prefix = '', result: Record<string, string> = {}, isColorContext = false): Record<string, string> {\n for (const key in tokens) {\n const value = tokens[key]\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n // Special handling: color object flattens without \"color-\" prefix\n const enteringColor = key === 'color' && prefix === ''\n const inColorContext = isColorContext || enteringColor\n \n if (enteringColor) {\n // When entering color object, flatten without \"color-\" prefix\n flattenToCSS(value, '', result, true)\n } else if (inColorContext) {\n // Already in color context, continue with empty prefix\n flattenToCSS(value, '', result, true)\n } else {\n // For all other tokens, use simple prefix-based flattening\n // font.body → --font-body, radius.button → --radius-button, spacing.component.md → --spacing-component-md\n const newPrefix = prefix ? `${prefix}-${key}` : key\n flattenToCSS(value, newPrefix, result, false)\n }\n } else {\n // Generate CSS variable name\n let cssKey: string\n if (isColorContext || (prefix === '' && key === 'color')) {\n // Semantic colors: --primary, --background, etc. (no \"color-\" prefix)\n cssKey = `--${key}`\n } else if (prefix === '') {\n // Top-level tokens (non-color)\n cssKey = `--${key}`\n } else {\n // Nested tokens: --font-body, --radius-button, --spacing-component-md, etc.\n cssKey = `--${prefix}-${key}`\n }\n \n // Convert hex colors to HSL format for Tailwind compatibility\n let finalValue = value\n if (isColorContext && typeof value === 'string' && isHexColor(value)) {\n finalValue = hexToHSL(value)\n }\n \n result[cssKey] = finalValue\n }\n }\n \n return result\n}\n\n/**\n * Map theme variables to Tailwind-compatible CSS variables\n */\nfunction mapToTailwindVars(cssVars: Record<string, string>): Record<string, string> {\n const mapped = { ...cssVars }\n \n // Map shape/radius variables to --radius (used by Tailwind's rounded-* classes)\n if (cssVars['--radius-button']) {\n mapped['--radius'] = cssVars['--radius-button']\n }\n if (cssVars['--radius-card']) {\n mapped['--radius-lg'] = cssVars['--radius-card']\n }\n \n // Map typography variables to Tailwind font system\n if (cssVars['--font-body']) {\n mapped['--font-sans'] = cssVars['--font-body']\n }\n \n // Map spacing variables to --spacing\n if (cssVars['--spacing-base']) {\n mapped['--spacing'] = cssVars['--spacing-base']\n } else if (cssVars['--spacing-component-md']) {\n mapped['--spacing'] = cssVars['--spacing-component-md']\n }\n \n // Ensure spacing component variables are available\n if (cssVars['--spacing-component-xs']) {\n mapped['--spacing-component-xs'] = cssVars['--spacing-component-xs']\n }\n if (cssVars['--spacing-component-sm']) {\n mapped['--spacing-component-sm'] = cssVars['--spacing-component-sm']\n }\n if (cssVars['--spacing-component-md']) {\n mapped['--spacing-component-md'] = cssVars['--spacing-component-md']\n }\n if (cssVars['--spacing-component-lg']) {\n mapped['--spacing-component-lg'] = cssVars['--spacing-component-lg']\n }\n if (cssVars['--spacing-component-xl']) {\n mapped['--spacing-component-xl'] = cssVars['--spacing-component-xl']\n }\n \n // Ensure animation duration variables are available\n if (cssVars['--duration-fast']) {\n mapped['--duration-fast'] = cssVars['--duration-fast']\n }\n if (cssVars['--duration-normal']) {\n mapped['--duration-normal'] = cssVars['--duration-normal']\n }\n if (cssVars['--duration-slow']) {\n mapped['--duration-slow'] = cssVars['--duration-slow']\n }\n \n return mapped\n}\n\n/**\n * Generate CSS string from CSS variables\n */\nfunction generateCSSString(cssVars: Record<string, string>): string {\n const mappedVars = mapToTailwindVars(cssVars)\n \n const vars = Object.entries(mappedVars)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n')\n \n return `:root {\\n${vars}\\n}`\n}\n\n/**\n * Apply CSS to DOM\n */\nfunction applyThemeCSS(css: string): void {\n let styleTag = document.getElementById('dynamic-theme')\n \n if (!styleTag) {\n styleTag = document.createElement('style')\n styleTag.id = 'dynamic-theme'\n document.head.appendChild(styleTag)\n }\n \n styleTag.textContent = css\n}\n\n/**\n * Generate and apply theme\n * Main function that composes everything\n */\nexport async function generateAndApplyTheme(selectedThemes: ThemeSelection = {}): Promise<{\n success: boolean\n themeName: string\n cssVars: Record<string, string>\n}> {\n try {\n // Get theme categories (with dynamic discovery)\n const themeCategories = await getThemeCategories()\n \n // Validate theme selection\n const validation = validateThemeSelection(selectedThemes, themeCategories)\n if (!validation.valid) {\n console.error('Invalid theme selection:', validation.errors)\n throw new Error(`Invalid theme selection: ${validation.errors.join(', ')}`)\n }\n \n // 1. Load base tokens\n const base = await loadTokenFile('/tokens/base.json')\n \n // 2. Load palette\n const palettes = await loadTokenFile('/tokens/palettes.json')\n const palette = palettes.palette\n \n // 3. Deep merge: base → palette\n let merged = deepMerge(base, { palette })\n \n // 4. Load and merge category themes in order\n const categoryOrder = Object.values(themeCategories)\n .sort((a, b) => a.order - b.order)\n .map(cat => cat.name.toLowerCase())\n \n for (const category of categoryOrder) {\n if (category === 'custom') continue // Handle custom separately\n \n const themeId = selectedThemes[category as keyof ThemeSelection] as string | undefined\n if (!themeId) continue\n \n const themePath = `/tokens/themes/${category}/${themeId}.json`\n const themeData = await loadTokenFile(themePath)\n \n // Merge theme data\n merged = deepMerge(merged, themeData)\n }\n \n // 5. Handle custom theme (highest priority)\n if (selectedThemes.custom) {\n const customPath = `/tokens/themes/custom/${selectedThemes.custom}.json`\n const customData = await loadTokenFile(customPath)\n merged = deepMerge(merged, customData)\n }\n \n // 6. Resolve references\n const resolved = resolveReferences(merged, palette)\n \n // 7. Flatten to CSS variables\n const cssVars = flattenToCSS(resolved)\n \n // 8. Generate CSS string\n const css = generateCSSString(cssVars)\n \n // 9. Apply to DOM\n if (typeof document !== 'undefined') {\n applyThemeCSS(css)\n }\n \n return {\n success: true,\n themeName: getThemeName(selectedThemes),\n cssVars\n }\n } catch (error) {\n console.error('Error generating theme:', error)\n throw error\n }\n}\n\n","\"use client\"\n\nimport { useState, useEffect, useCallback } from 'react'\nimport { generateAndApplyTheme, getDefaultThemes } from './themeUtils'\nimport { getThemeCategories } from './themeConfig'\n\nexport type ThemeSelection = {\n color?: string\n typography?: string\n shape?: string\n density?: string\n animation?: string\n custom?: string\n}\n\nexport type ThemeMetadata = {\n name: string\n file: string\n icon: string\n description: string\n}\n\nconst STORAGE_KEY = 'design-system-theme'\n\n/**\n * Hook for managing design system theme switching\n */\nexport function useTheme() {\n // Initialize with defaults (for SSR compatibility)\n const [selectedThemes, setSelectedThemes] = useState<ThemeSelection>(getDefaultThemes())\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n // Define applyTheme before useEffect uses it\n const applyTheme = useCallback(async (themes: ThemeSelection) => {\n setIsLoading(true)\n setError(null)\n \n try {\n await generateAndApplyTheme(themes)\n \n // Save to localStorage\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(themes))\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to apply theme'\n setError(errorMessage)\n console.error('Theme application error:', err)\n } finally {\n setIsLoading(false)\n }\n }, [])\n\n // Load from localStorage on client mount (after hydration)\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored) {\n try {\n const parsed = JSON.parse(stored)\n setSelectedThemes(parsed)\n // Apply the loaded theme\n applyTheme(parsed)\n } catch {\n // If parse fails, use defaults and apply them\n const defaults = getDefaultThemes()\n setSelectedThemes(defaults)\n applyTheme(defaults)\n }\n } else {\n // No stored theme, apply defaults\n const defaults = getDefaultThemes()\n applyTheme(defaults)\n }\n }\n }, [applyTheme]) // Include applyTheme in deps\n\n const updateTheme = useCallback(async (category: keyof ThemeSelection, themeId: string | undefined) => {\n const newThemes = {\n ...selectedThemes,\n [category]: themeId || undefined\n }\n \n setSelectedThemes(newThemes)\n await applyTheme(newThemes)\n }, [selectedThemes, applyTheme])\n\n const resetToDefaults = useCallback(async () => {\n const defaults = getDefaultThemes()\n setSelectedThemes(defaults)\n await applyTheme(defaults)\n }, [applyTheme])\n\n // Get available themes for a category (with dynamic discovery)\n const getAvailableThemes = useCallback(async (category: string): Promise<Record<string, ThemeMetadata>> => {\n const categories = await getThemeCategories()\n return (categories[category]?.themes || {}) as Record<string, ThemeMetadata>\n }, [])\n\n return {\n selectedThemes,\n updateTheme,\n resetToDefaults,\n isLoading,\n error,\n getAvailableThemes\n }\n}\n\n","\"use client\"\n\nimport { useState, useRef, useEffect, useCallback } from \"react\"\nimport { useTheme, type ThemeSelection } from \"../../useTheme\"\nimport { getThemeCategories } from \"../../themeConfig\"\n\nexport function useThemeToggle() {\n const { selectedThemes, updateTheme, isLoading, getAvailableThemes } = useTheme()\n const [isOpen, setIsOpen] = useState(false)\n const [selectedCategory, setSelectedCategory] = useState<string | null>(null)\n const [themeCategories, setThemeCategories] = useState<any>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n // Load theme categories on mount\n useEffect(() => {\n getThemeCategories().then(setThemeCategories)\n }, [])\n\n // Close menu when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n setSelectedCategory(null)\n }\n }\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => document.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [isOpen])\n\n const handleCategoryClick = useCallback((categoryKey: string) => {\n setSelectedCategory(categoryKey)\n }, [])\n\n const handleThemeSelect = useCallback(async (category: keyof ThemeSelection, themeId: string) => {\n const currentTheme = selectedThemes[category]\n const newTheme = currentTheme === themeId ? undefined : themeId\n await updateTheme(category, newTheme)\n }, [selectedThemes, updateTheme])\n\n const handleBack = useCallback(() => {\n setSelectedCategory(null)\n }, [])\n\n const toggleMenu = useCallback(() => {\n setIsOpen((prev) => {\n if (!prev) {\n setSelectedCategory(null)\n }\n return !prev\n })\n }, [])\n\n // Get categories (including custom)\n const categories: Array<[string, { name: string; themes: Record<string, any>; order?: number }]> = themeCategories \n ? (Object.entries(themeCategories) as Array<[string, { name: string; themes: Record<string, any>; order?: number }]>)\n .sort(([, a], [, b]) => (a.order || 0) - (b.order || 0))\n : []\n\n return {\n selectedThemes,\n isLoading,\n getAvailableThemes,\n isOpen,\n selectedCategory,\n themeCategories,\n categories,\n menuRef,\n handleCategoryClick,\n handleThemeSelect,\n handleBack,\n toggleMenu,\n }\n}\n\n","/**\n * Theme Toggle Configuration\n * Constants and configuration for theme toggle component\n */\n\n// Category icon mapping\nexport const categoryIcons: Record<string, string> = {\n color: \"🎨\",\n typography: \"📝\",\n shape: \"🔲\",\n density: \"📏\",\n animation: \"✨\",\n}\n\n// Position classes\nexport const positionClasses = {\n \"bottom-right\": \"bottom-6 right-6\",\n \"bottom-left\": \"bottom-6 left-6\",\n \"top-right\": \"top-6 right-6\",\n \"top-left\": \"top-6 left-6\",\n} as const\n\n// Get arc configuration based on position\nexport function getArcConfig(position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\") {\n switch (position) {\n case \"bottom-right\":\n // Open towards top-left: arc from top to left\n return { startAngle: -60, endAngle: -180, sweep: -150 }\n case \"bottom-left\":\n // Open towards top-right: arc from top to right\n return { startAngle: -120, endAngle: 0, sweep: 150 }\n case \"top-right\":\n // Open towards bottom-left: arc from bottom to left\n return { startAngle: 60, endAngle: 0, sweep: 150 }\n case \"top-left\":\n // Open towards bottom-right: arc from bottom to right\n return { startAngle: 120, endAngle: 0, sweep: -150 }\n }\n}\n\n","/**\n * Theme Toggle Utilities\n * Pure utility functions for theme toggle component\n */\n\n/**\n * Simple polar to cartesian conversion\n */\nexport function getPositionOnArc(angleDeg: number, radius: number) {\n const rad = (angleDeg * Math.PI) / 180\n return {\n x: Math.cos(rad) * radius,\n y: Math.sin(rad) * radius,\n }\n}\n\n","\"use client\"\n\nimport React, { useState, useEffect } from \"react\"\nimport { useThemeToggle } from \"./useThemeToggle\"\nimport { categoryIcons, positionClasses } from \"./themeToggleConfig\"\nimport { getPositionOnArc } from \"./themeToggleUtils\"\nimport { getArcConfig } from \"./themeToggleConfig\"\nimport { cn } from \"../../../utils\"\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from \"../../../molecules/Tooltip\"\nimport type { ThemeSelection, ThemeMetadata } from \"../../useTheme\"\n\nexport interface ThemeToggleProps {\n className?: string\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n}\n\nexport function ThemeToggle({ \n className,\n position = \"bottom-right\"\n}: ThemeToggleProps) {\n const {\n selectedThemes,\n isLoading,\n getAvailableThemes,\n isOpen,\n selectedCategory,\n categories,\n menuRef,\n handleCategoryClick,\n handleThemeSelect,\n handleBack,\n toggleMenu,\n } = useThemeToggle()\n\n return (\n <div \n ref={menuRef}\n id=\"theme-toggle\"\n className={cn(\"fixed z-50\", positionClasses[position], className)}\n >\n {/* Main Toggle Button */}\n <button\n onClick={toggleMenu}\n className={cn(\n \"w-14 h-14 rounded-full bg-primary text-primary-foreground\",\n \"shadow-lg hover:shadow-xl\",\n \"flex items-center justify-center\",\n \"relative z-10\",\n \"transition-all duration-200\",\n \"hover:scale-110 active:scale-95\",\n isOpen && \"rotate-90\"\n )}\n aria-label=\"Theme settings\"\n title=\"Theme settings\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73 2.15l.22.38a2 2 0 0 1 0 2.73l-.22.38a2 2 0 0 0 2.15 2.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-2.15l-.22-.38a2 2 0 0 1 0-2.73l.22-.38a2 2 0 0 0-2.15-2.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n </button>\n\n {/* Radial Menu */}\n {isOpen && (\n <TooltipProvider delayDuration={300}>\n <div className=\"absolute inset-0 pointer-events-none\">\n {!selectedCategory ? (\n <CategoryRing\n categories={categories}\n onCategoryClick={handleCategoryClick}\n selectedThemes={selectedThemes}\n position={position}\n />\n ) : (\n <ThemeRingAsync\n category={selectedCategory}\n getAvailableThemes={getAvailableThemes}\n selectedTheme={selectedThemes[selectedCategory as keyof ThemeSelection]}\n onThemeSelect={(themeId) => handleThemeSelect(selectedCategory as keyof ThemeSelection, themeId)}\n onBack={handleBack}\n isLoading={isLoading}\n position={position}\n />\n )}\n </div>\n </TooltipProvider>\n )}\n </div>\n )\n}\n\n// Common radial wheel component\n// Handles both positioning and UI rendering\ninterface RadialWheelItem {\n id: string\n content: React.ReactNode\n label: string\n onClick: () => void\n isSelected?: boolean\n disabled?: boolean\n className?: string\n}\n\ninterface RadialWheelProps {\n items: RadialWheelItem[]\n position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n radius: number\n buttonSize: number\n startOffset?: number\n}\n\nfunction RadialWheel({\n items,\n position,\n radius,\n buttonSize,\n startOffset = 0.75,\n}: RadialWheelProps) {\n const arcConfig = getArcConfig(position)\n const totalItems = items.length\n const angleStep = Math.abs(arcConfig.sweep) / totalItems\n\n return (\n <div className=\"absolute inset-0\">\n {items.map((item, index) => {\n const angle = arcConfig.startAngle + angleStep * (index + startOffset) * Math.sign(arcConfig.sweep)\n const pos = getPositionOnArc(angle, radius)\n\n return (\n <Tooltip key={item.id}>\n <TooltipTrigger asChild>\n <button\n onClick={item.onClick}\n disabled={item.disabled}\n className={cn(\n \"absolute rounded-full\",\n \"bg-background border-2 shadow-lg\",\n \"flex items-center justify-center text-lg\",\n \"pointer-events-auto\",\n \"transition-all duration-200\",\n \"hover:scale-110 active:scale-95\",\n \"disabled:opacity-50 disabled:cursor-not-allowed\",\n item.isSelected\n ? \"border-primary bg-primary text-primary-foreground\"\n : \"border-border hover:border-primary/50\",\n item.className\n )}\n style={{\n width: `${buttonSize}px`,\n height: `${buttonSize}px`,\n left: `${pos.x}px`,\n top: `${pos.y}px`,\n }}\n aria-label={item.label}\n >\n {item.content}\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {item.label}\n </TooltipContent>\n </Tooltip>\n )\n })}\n </div>\n )\n}\n\n// Category Ring Component\ninterface CategoryRingProps {\n categories: Array<[string, { name: string; themes: Record<string, ThemeMetadata>; order?: number }]>\n onCategoryClick: (categoryKey: string) => void\n selectedThemes: ThemeSelection\n position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n}\n\nfunction CategoryRing({\n categories,\n onCategoryClick,\n selectedThemes,\n position,\n}: CategoryRingProps) {\n const radius = 60\n const buttonSize = 40\n\n // Prepare items for RadialWheel\n const items: RadialWheelItem[] = categories.map(([categoryKey, category]) => {\n const hasSelection = !!selectedThemes[categoryKey as keyof ThemeSelection]\n return {\n id: categoryKey,\n content: categoryIcons[categoryKey] || \"⚙️\",\n label: category.name,\n onClick: () => onCategoryClick(categoryKey),\n isSelected: hasSelection,\n className: hasSelection ? \"bg-primary/10\" : undefined,\n }\n })\n\n return (\n <RadialWheel\n items={items}\n position={position}\n radius={radius}\n buttonSize={buttonSize}\n startOffset={0.5}\n />\n )\n}\n\n// Theme Ring Component\ninterface ThemeRingProps {\n category: string\n themes: Record<string, ThemeMetadata>\n selectedTheme?: string\n onThemeSelect: (themeId: string) => void\n onBack: () => void\n isLoading: boolean\n position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n}\n\n// Async version that loads themes dynamically\nfunction ThemeRingAsync({\n category,\n getAvailableThemes,\n selectedTheme,\n onThemeSelect,\n onBack,\n isLoading,\n position,\n}: Omit<ThemeRingProps, 'themes'> & { getAvailableThemes: (category: string) => Promise<Record<string, ThemeMetadata>> }) {\n const [themes, setThemes] = useState<Record<string, ThemeMetadata>>({})\n\n useEffect(() => {\n getAvailableThemes(category).then(setThemes)\n }, [category, getAvailableThemes])\n\n const themeEntries = Object.entries(themes)\n const radius = 65\n const buttonSize = 40\n const backButtonSize = 36\n\n // Back button position (at start of arc)\n const arcConfig = getArcConfig(position)\n const backButtonPos = getPositionOnArc(arcConfig.startAngle, radius)\n\n // Prepare items for RadialWheel\n const items: RadialWheelItem[] = themeEntries.map(([themeId, theme]) => ({\n id: themeId,\n content: theme.icon,\n label: theme.name,\n onClick: () => !isLoading && onThemeSelect(themeId),\n isSelected: selectedTheme === themeId,\n disabled: isLoading,\n className: \"text-base\", // Smaller text for theme icons\n }))\n\n return (\n <div className=\"absolute inset-0\">\n {/* Back Button */}\n <button\n onClick={onBack}\n className={cn(\n \"absolute rounded-full\",\n \"bg-muted border border-border shadow-md\",\n \"flex items-center justify-center\",\n \"pointer-events-auto\",\n \"transition-all duration-200\",\n \"hover:scale-110 active:scale-95\"\n )}\n style={{\n width: `${backButtonSize}px`,\n height: `${backButtonSize}px`,\n left: `${backButtonPos.x}px`,\n top: `${backButtonPos.y}px`,\n }}\n aria-label=\"Back\"\n >\n <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 <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n </button>\n\n {/* Theme Option Buttons */}\n <RadialWheel\n items={items}\n position={position}\n radius={radius}\n buttonSize={buttonSize}\n startOffset={1}\n />\n\n {/* Loading Indicator */}\n {isLoading && (\n <div\n className=\"absolute w-12 h-12 rounded-full bg-primary/20 border-2 border-primary animate-pulse pointer-events-none\"\n style={{\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n }}\n />\n )}\n </div>\n )\n}\n\n","/**\n * Synchronous theme application for blocking script execution\n * This runs before React hydrates to prevent theme flash\n */\n\nimport type { ThemeSelection } from './useTheme'\nimport { getDefaultThemes } from './themeUtils'\n\nconst STORAGE_KEY = 'design-system-theme'\n\n/**\n * Apply theme synchronously using blocking XMLHttpRequest\n * This prevents flash of unstyled content\n */\nexport function applyThemeSync(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return\n }\n\n // Get theme from localStorage\n let selectedThemes: ThemeSelection = getDefaultThemes()\n try {\n const stored = localStorage.getItem(STORAGE_KEY)\n if (stored) {\n selectedThemes = JSON.parse(stored)\n }\n } catch {\n // Use defaults if parse fails\n }\n\n // Load token files synchronously (blocking)\n try {\n const base = loadJSONSync('/tokens/base.json')\n const palettes = loadJSONSync('/tokens/palettes.json')\n const palette = palettes?.palette || {}\n\n // Merge base with palette\n let merged = deepMergeSync(base || {}, { palette })\n\n // Load theme files\n const categoryOrder = ['color', 'typography', 'shape', 'density', 'animation']\n for (const category of categoryOrder) {\n const themeId = selectedThemes[category as keyof ThemeSelection] as string | undefined\n if (!themeId) continue\n\n try {\n const themeData = loadJSONSync(`/tokens/themes/${category}/${themeId}.json`)\n if (themeData) {\n merged = deepMergeSync(merged, themeData)\n }\n } catch {\n // Skip if theme file doesn't exist\n }\n }\n\n // Handle custom theme\n if (selectedThemes.custom) {\n try {\n const customData = loadJSONSync(`/tokens/themes/custom/${selectedThemes.custom}.json`)\n if (customData) {\n merged = deepMergeSync(merged, customData)\n }\n } catch {\n // Skip if custom theme doesn't exist\n }\n }\n\n // Resolve references\n const resolved = resolveReferencesSync(merged, palette)\n\n // Flatten to CSS variables\n const cssVars = flattenToCSSSync(resolved)\n\n // Map to Tailwind-compatible variables\n const mappedVars = mapToTailwindVarsSync(cssVars)\n\n // Generate and apply CSS\n const css = `:root {\\n${Object.entries(mappedVars).map(([key, value]) => ` ${key}: ${value};`).join('\\n')}\\n}`\n \n let styleTag = document.getElementById('dynamic-theme')\n if (!styleTag) {\n styleTag = document.createElement('style')\n styleTag.id = 'dynamic-theme'\n document.head.insertBefore(styleTag, document.head.firstChild)\n }\n styleTag.textContent = css\n } catch (error) {\n // Silently fail - theme will apply via React hook\n console.warn('Sync theme application failed, will apply via React:', error)\n }\n}\n\n/**\n * Load JSON file synchronously (blocking)\n */\nfunction loadJSONSync(path: string): any {\n try {\n const xhr = new XMLHttpRequest()\n xhr.open('GET', path, false) // false = synchronous\n xhr.send(null)\n \n if (xhr.status === 200 || xhr.status === 0) {\n return JSON.parse(xhr.responseText)\n }\n } catch {\n // Return null if file doesn't exist or fails\n }\n return null\n}\n\n/**\n * Deep merge objects (synchronous version)\n */\nfunction deepMergeSync(target: any, source: any): any {\n const output = { ...target }\n \n if (isObjectSync(target) && isObjectSync(source)) {\n Object.keys(source).forEach(key => {\n if (isObjectSync(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] })\n } else {\n output[key] = deepMergeSync(target[key], source[key])\n }\n } else {\n Object.assign(output, { [key]: source[key] })\n }\n })\n }\n \n return output\n}\n\nfunction isObjectSync(item: any): item is Record<string, any> {\n return item && typeof item === 'object' && !Array.isArray(item)\n}\n\n/**\n * Resolve token references synchronously\n */\nfunction resolveReferencesSync(tokens: any, palette: any): any {\n const resolved = JSON.parse(JSON.stringify(tokens))\n \n function resolveValue(value: any): any {\n if (typeof value !== 'string') return value\n \n const match = value.match(/^\\{([^}]+)\\}$/)\n if (!match) return value\n \n const path = match[1].split('.')\n let current: any = { palette, ...resolved }\n \n for (const key of path) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key]\n } else {\n return value\n }\n }\n \n return typeof current === 'string' ? current : value\n }\n \n function traverse(obj: any): void {\n for (const key in obj) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n traverse(obj[key])\n } else {\n obj[key] = resolveValue(obj[key])\n }\n }\n }\n \n traverse(resolved)\n return resolved\n}\n\n/**\n * Convert hex color to HSL format (without hsl() wrapper)\n * Returns format: \"h s% l%\" for use with hsl(var(--color))\n */\nfunction hexToHSL(hex: string): string {\n hex = hex.replace('#', '')\n \n const r = parseInt(hex.substring(0, 2), 16) / 255\n const g = parseInt(hex.substring(2, 4), 16) / 255\n const b = parseInt(hex.substring(4, 6), 16) / 255\n \n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n let h = 0\n let s = 0\n const l = (max + min) / 2\n \n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n \n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n break\n case g:\n h = ((b - r) / d + 2) / 6\n break\n case b:\n h = ((r - g) / d + 4) / 6\n break\n }\n }\n \n h = Math.round(h * 360)\n s = Math.round(s * 100)\n const lPercent = Math.round(l * 100)\n \n return `${h} ${s}% ${lPercent}%`\n}\n\n/**\n * Check if a string is a hex color\n */\nfunction isHexColor(value: string): boolean {\n return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(value)\n}\n\n/**\n * Flatten nested object to CSS variables (synchronous version)\n */\nfunction flattenToCSSSync(tokens: any, prefix = '', result: Record<string, string> = {}, isColorContext = false): Record<string, string> {\n for (const key in tokens) {\n const value = tokens[key]\n \n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n // Special handling: color object flattens without \"color-\" prefix\n const enteringColor = key === 'color' && prefix === ''\n const inColorContext = isColorContext || enteringColor\n \n if (enteringColor) {\n // When entering color object, flatten without \"color-\" prefix\n flattenToCSSSync(value, '', result, true)\n } else if (inColorContext) {\n // Already in color context, continue with empty prefix\n flattenToCSSSync(value, '', result, true)\n } else {\n // For all other tokens, use simple prefix-based flattening\n // font.body → --font-body, radius.button → --radius-button, spacing.component.md → --spacing-component-md\n const newPrefix = prefix ? `${prefix}-${key}` : key\n flattenToCSSSync(value, newPrefix, result, false)\n }\n } else {\n // Generate CSS variable name\n let cssKey: string\n if (isColorContext || (prefix === '' && key === 'color')) {\n // Semantic colors: --primary, --background, etc. (no \"color-\" prefix)\n cssKey = `--${key}`\n } else if (prefix === '') {\n // Top-level tokens (non-color)\n cssKey = `--${key}`\n } else {\n // Nested tokens: --font-body, --radius-button, --spacing-component-md, etc.\n cssKey = `--${prefix}-${key}`\n }\n \n // Convert hex colors to HSL format for Tailwind compatibility\n let finalValue = value\n if (isColorContext && typeof value === 'string' && isHexColor(value)) {\n finalValue = hexToHSL(value)\n }\n \n result[cssKey] = finalValue\n }\n }\n \n return result\n}\n\n/**\n * Map theme variables to Tailwind-compatible CSS variables (synchronous version)\n */\nfunction mapToTailwindVarsSync(cssVars: Record<string, string>): Record<string, string> {\n const mapped = { ...cssVars }\n \n if (cssVars['--radius-button']) {\n mapped['--radius'] = cssVars['--radius-button']\n }\n if (cssVars['--radius-card']) {\n mapped['--radius-lg'] = cssVars['--radius-card']\n }\n \n if (cssVars['--font-body']) {\n mapped['--font-sans'] = cssVars['--font-body']\n }\n \n if (cssVars['--spacing-base']) {\n mapped['--spacing'] = cssVars['--spacing-base']\n } else if (cssVars['--spacing-component-md']) {\n mapped['--spacing'] = cssVars['--spacing-component-md']\n }\n \n // Ensure spacing component variables are available\n if (cssVars['--spacing-component-xs']) {\n mapped['--spacing-component-xs'] = cssVars['--spacing-component-xs']\n }\n if (cssVars['--spacing-component-sm']) {\n mapped['--spacing-component-sm'] = cssVars['--spacing-component-sm']\n }\n if (cssVars['--spacing-component-md']) {\n mapped['--spacing-component-md'] = cssVars['--spacing-component-md']\n }\n if (cssVars['--spacing-component-lg']) {\n mapped['--spacing-component-lg'] = cssVars['--spacing-component-lg']\n }\n if (cssVars['--spacing-component-xl']) {\n mapped['--spacing-component-xl'] = cssVars['--spacing-component-xl']\n }\n \n // Ensure animation duration variables are available\n if (cssVars['--duration-fast']) {\n mapped['--duration-fast'] = cssVars['--duration-fast']\n }\n if (cssVars['--duration-normal']) {\n mapped['--duration-normal'] = cssVars['--duration-normal']\n }\n if (cssVars['--duration-slow']) {\n mapped['--duration-slow'] = cssVars['--duration-slow']\n }\n \n return mapped\n}\n\n"]}