@andreagiugni/tailwind-dashboard-ui 1.0.30 → 1.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +7 -1
  2. package/dist/{chunk-2BCVEKTG.js → chunk-AMSZD2ZE.js} +5 -4
  3. package/dist/chunk-AMSZD2ZE.js.map +1 -0
  4. package/dist/{chunk-HNIERFMV.cjs → chunk-HBQCQWQW.cjs} +5 -4
  5. package/dist/chunk-HBQCQWQW.cjs.map +1 -0
  6. package/dist/{chunk-W6E275RF.js → chunk-N4BZYVL4.js} +5 -3
  7. package/dist/chunk-N4BZYVL4.js.map +1 -0
  8. package/dist/{chunk-F2L2DNNL.cjs → chunk-VYBFCH6U.cjs} +41 -4
  9. package/dist/chunk-VYBFCH6U.cjs.map +1 -0
  10. package/dist/{chunk-KKDLEGKJ.js → chunk-WZHMDNHY.js} +41 -4
  11. package/dist/chunk-WZHMDNHY.js.map +1 -0
  12. package/dist/{chunk-ZULPBSQV.cjs → chunk-XB2NE3EA.cjs} +5 -3
  13. package/dist/chunk-XB2NE3EA.cjs.map +1 -0
  14. package/dist/components/Charts/BarChart.cjs +2 -2
  15. package/dist/components/Charts/BarChart.js +1 -1
  16. package/dist/components/Charts/LineChart.cjs +2 -2
  17. package/dist/components/Charts/LineChart.js +1 -1
  18. package/dist/components/ColorPicker/ColorPicker.cjs +2 -2
  19. package/dist/components/ColorPicker/ColorPicker.d.cts +2 -0
  20. package/dist/components/ColorPicker/ColorPicker.d.ts +2 -0
  21. package/dist/components/ColorPicker/ColorPicker.js +1 -1
  22. package/dist/index.cjs +9 -9
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.js +6 -6
  25. package/dist/index.js.map +1 -1
  26. package/package.json +1 -1
  27. package/dist/chunk-2BCVEKTG.js.map +0 -1
  28. package/dist/chunk-F2L2DNNL.cjs.map +0 -1
  29. package/dist/chunk-HNIERFMV.cjs.map +0 -1
  30. package/dist/chunk-KKDLEGKJ.js.map +0 -1
  31. package/dist/chunk-W6E275RF.js.map +0 -1
  32. package/dist/chunk-ZULPBSQV.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/styleOverride.ts","../src/components/Button/Button.tsx","../src/components/Badge/Badge.tsx","../src/components/Ribbon/Ribbon.tsx","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Avatar/AvatarText.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Dropdown/DropdownItem.tsx","../src/components/Dropzone/Dropzone.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Form/Input.tsx","../src/components/Table/Table.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/ThemeToggleButton/ThemeToggleButton.tsx","../src/components/Card/Card.tsx","../src/components/Toast/Toast.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Popover/Popover.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Chip/Chip.tsx","../src/components/Progress/Progress.tsx","../src/components/PollResults/PollResults.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Code/Code.tsx","../src/components/Snippet/Snippet.tsx","../src/components/Form/Label.tsx","../src/components/Form/TextArea.tsx","../src/components/Form/Checkbox.tsx","../src/components/Form/Radio.tsx","../src/components/Form/RadioSm.tsx","../src/components/Form/Switch.tsx","../src/components/Form/Select.tsx","../src/components/Form/MultiSelect.tsx","../src/components/Form/FileInput.tsx","../src/components/Form/DatePicker.tsx","../src/components/Form/DateTimePicker.tsx","../src/components/Form/PasswordInput.tsx","../src/components/Form/Form.tsx","../src/components/Slider/Slider.tsx"],"names":["jsxs","cn","jsx","variantClasses","CircleCheck","CircleX","CircleAlert","Info","sizeClasses","name","useRef","useState","useEffect","useLayoutEffect","menu","layers","Fragment","createPortal","Upload","ChevronUp","ChevronDown","useMemo","ChevronRight","Sun","Moon","variantIcons","useCallback","X","React","ChevronIcon","useId","trigger","panel","sizeStyles","variants","colorStyles","colorClasses","Check","Copy","flatpickr","Calendar","Clock","Eye","EyeOff","fillColors"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CSSProperties } from \"react\";\n\nexport interface ColorOverrideProps {\n /** Inline background color override (any CSS color). */\n bgColor?: string;\n /** Inline text color override (any CSS color). */\n textColor?: string;\n /** Inline border color override (any CSS color). */\n borderColor?: string;\n}\n\nexport function styleOverride({\n bgColor,\n textColor,\n borderColor,\n}: ColorOverrideProps): CSSProperties {\n const style: CSSProperties = {};\n if (bgColor !== undefined) style.backgroundColor = bgColor;\n if (textColor !== undefined) style.color = textColor;\n if (borderColor !== undefined) style.borderColor = borderColor;\n return style;\n}\n","\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n ColorOverrideProps {\n size?: \"sm\" | \"md\";\n variant?: \"primary\" | \"outline\";\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n}\n\nconst sizeClasses: Record<NonNullable<ButtonProps[\"size\"]>, string> = {\n sm: \"h-10 px-4 text-sm\",\n md: \"h-11 px-5 text-sm\",\n};\n\nconst variantClasses: Record<NonNullable<ButtonProps[\"variant\"]>, string> = {\n primary:\n \"border border-transparent bg-brand-500 text-white shadow-theme-xs hover:bg-brand-600 disabled:bg-brand-300\",\n outline:\n \"border border-gray-300 bg-white text-black shadow-theme-xs hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-800 dark:!text-white dark:hover:bg-white/[0.03]\",\n};\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n size = \"md\",\n variant = \"primary\",\n startIcon,\n endIcon,\n className,\n disabled = false,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n return (\n <button\n className={cn(\n \"inline-flex items-center justify-center font-medium gap-2 rounded-lg transition\",\n sizeClasses[size],\n variantClasses[variant],\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n disabled={disabled}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {startIcon && <span className=\"flex items-center\">{startIcon}</span>}\n {children}\n {endIcon && <span className=\"flex items-center\">{endIcon}</span>}\n </button>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type BadgeVariant = \"light\" | \"solid\";\nexport type BadgeSize = \"sm\" | \"md\";\nexport type BadgeColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\n\nexport interface BadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n ColorOverrideProps {\n variant?: BadgeVariant;\n size?: BadgeSize;\n color?: BadgeColor;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n}\n\nconst sizeStyles: Record<BadgeSize, string> = {\n sm: \"text-theme-xs\",\n md: \"text-sm\",\n};\n\nconst variants: Record<BadgeVariant, Record<BadgeColor, string>> = {\n light: {\n primary: \"bg-brand-50 text-brand-500 dark:bg-brand-500/15 dark:text-brand-400\",\n success: \"bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500\",\n error: \"bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500\",\n warning: \"bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400\",\n info: \"bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500\",\n light: \"bg-gray-100 text-gray-700 dark:bg-white/5 dark:text-white/80\",\n dark: \"bg-gray-500 text-white dark:bg-white/5 dark:text-white\",\n },\n solid: {\n primary: \"bg-brand-500 text-white dark:text-white\",\n success: \"bg-success-500 text-white dark:text-white\",\n error: \"bg-error-500 text-white dark:text-white\",\n warning: \"bg-warning-500 text-white dark:text-white\",\n info: \"bg-blue-light-500 text-white dark:text-white\",\n light: \"bg-gray-400 dark:bg-white/5 text-white dark:text-white/80\",\n dark: \"bg-gray-700 text-white dark:text-white\",\n },\n};\n\nexport const Badge: React.FC<BadgeProps> = ({\n variant = \"light\",\n color = \"primary\",\n size = \"md\",\n startIcon,\n endIcon,\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n return (\n <span\n className={cn(\n \"inline-flex items-center px-2.5 py-0.5 justify-center gap-1 rounded-full font-medium\",\n sizeStyles[size],\n variants[variant][color],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {startIcon && <span className=\"flex items-center\">{startIcon}</span>}\n {children}\n {endIcon && <span className=\"flex items-center\">{endIcon}</span>}\n </span>\n );\n};\n","\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type RibbonVariant = \"corner\" | \"rounded\" | \"flag\";\nexport type RibbonColor =\n | \"primary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"dark\";\nexport type RibbonPosition =\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n\nexport interface RibbonProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n ColorOverrideProps {\n /** Visual style of the ribbon. */\n variant?: RibbonVariant;\n /** Brand color. Defaults to `primary`. */\n color?: RibbonColor;\n /** Which corner/side the ribbon attaches to. Defaults to `top-right`. */\n position?: RibbonPosition;\n}\n\nconst colorClasses: Record<RibbonColor, string> = {\n primary: \"bg-brand-500 text-white\",\n success: \"bg-success-500 text-white\",\n error: \"bg-error-500 text-white\",\n warning: \"bg-warning-500 text-white\",\n info: \"bg-blue-light-500 text-white\",\n dark: \"bg-gray-800 text-white dark:bg-gray-700\",\n};\n\n// Diagonal band tucked across a corner. Needs a `relative overflow-hidden` host.\nconst cornerClasses: Record<RibbonPosition, string> = {\n \"top-left\": \"left-[-36px] top-[16px] w-[130px] -rotate-45\",\n \"top-right\": \"right-[-36px] top-[16px] w-[130px] rotate-45\",\n \"bottom-left\": \"bottom-[16px] left-[-36px] w-[130px] rotate-45\",\n \"bottom-right\": \"bottom-[16px] right-[-36px] w-[130px] -rotate-45\",\n};\n\n// Tag hugging a corner, inner edge rounded. Needs `relative` host.\nconst roundedClasses: Record<RibbonPosition, string> = {\n \"top-left\": \"left-0 top-0 rounded-tl-xl rounded-br-lg\",\n \"top-right\": \"right-0 top-0 rounded-tr-xl rounded-bl-lg\",\n \"bottom-left\": \"bottom-0 left-0 rounded-bl-xl rounded-tr-lg\",\n \"bottom-right\": \"bottom-0 right-0 rounded-br-xl rounded-tl-lg\",\n};\n\n// Horizontal banner with a swallowtail notch. Needs `relative` host.\nconst flagClasses: Record<RibbonPosition, string> = {\n \"top-left\": \"left-0 top-4 rounded-r-sm pl-3 pr-5\",\n \"bottom-left\": \"bottom-4 left-0 rounded-r-sm pl-3 pr-5\",\n \"top-right\": \"right-0 top-4 rounded-l-sm pl-5 pr-3\",\n \"bottom-right\": \"bottom-4 right-0 rounded-l-sm pl-5 pr-3\",\n};\n\n// Swallowtail cut into the trailing end of the flag (right end for left-anchored,\n// left end for right-anchored).\nconst flagClipPath: Record<RibbonPosition, string> = {\n \"top-left\": \"polygon(0 0, 100% 0, calc(100% - 9px) 50%, 100% 100%, 0 100%)\",\n \"bottom-left\": \"polygon(0 0, 100% 0, calc(100% - 9px) 50%, 100% 100%, 0 100%)\",\n \"top-right\": \"polygon(0 0, 100% 0, 100% 100%, 0 100%, 9px 50%)\",\n \"bottom-right\": \"polygon(0 0, 100% 0, 100% 100%, 0 100%, 9px 50%)\",\n};\n\nexport const Ribbon: React.FC<RibbonProps> = ({\n variant = \"corner\",\n color = \"primary\",\n position = \"top-right\",\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const variantClass =\n variant === \"corner\"\n ? cornerClasses[position]\n : variant === \"rounded\"\n ? roundedClasses[position]\n : flagClasses[position];\n\n return (\n <span\n className={cn(\n \"absolute z-10 inline-flex items-center justify-center whitespace-nowrap py-1 text-center text-theme-xs font-semibold shadow-theme-xs\",\n variant === \"corner\" && \"px-10\",\n variant === \"rounded\" && \"px-3\",\n colorClasses[color],\n variantClass,\n className\n )}\n style={{\n ...(variant === \"flag\"\n ? { clipPath: flagClipPath[position] }\n : undefined),\n ...styleOverride({ bgColor, textColor, borderColor }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </span>\n );\n};\n","import React from \"react\";\nimport {\n CircleAlert,\n CircleCheck,\n CircleX,\n Info,\n type LucideIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AlertVariant = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface AlertProps\n extends React.HTMLAttributes<HTMLDivElement> {\n variant: AlertVariant;\n title: string;\n message: string;\n showLink?: boolean;\n linkHref?: string;\n linkText?: string;\n /** Override the default variant icon. */\n icon?: React.ReactNode;\n}\n\nconst variantClasses: Record<AlertVariant, { container: string; icon: string }> = {\n success: {\n container: \"border-success-500 bg-success-50 dark:border-success-500/30 dark:bg-success-500/15\",\n icon: \"text-success-500\",\n },\n error: {\n container: \"border-error-500 bg-error-50 dark:border-error-500/30 dark:bg-error-500/15\",\n icon: \"text-error-500\",\n },\n warning: {\n container: \"border-warning-500 bg-warning-50 dark:border-warning-500/30 dark:bg-warning-500/15\",\n icon: \"text-warning-500\",\n },\n info: {\n container: \"border-blue-light-500 bg-blue-light-50 dark:border-blue-light-500/30 dark:bg-blue-light-500/15\",\n icon: \"text-blue-light-500\",\n },\n};\n\nconst variantIcons: Record<AlertVariant, LucideIcon> = {\n success: CircleCheck,\n error: CircleX,\n warning: CircleAlert,\n info: Info,\n};\n\nexport const Alert: React.FC<AlertProps> = ({\n variant,\n title,\n message,\n showLink = false,\n linkHref = \"#\",\n linkText = \"Learn more\",\n icon,\n className,\n ...rest\n}) => {\n const Icon = variantIcons[variant];\n\n return (\n <div\n className={cn(\"rounded-xl border p-4\", variantClasses[variant].container, className)}\n {...rest}\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn(\"-mt-0.5\", variantClasses[variant].icon)}>\n {icon ?? <Icon className=\"size-4\" aria-hidden=\"true\" />}\n </div>\n <div>\n <h4 className=\"mb-1 text-sm font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h4>\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{message}</p>\n {showLink && (\n <a\n href={linkHref}\n className=\"inline-block mt-3 text-sm font-medium text-gray-500 underline dark:text-gray-400\"\n >\n {linkText}\n </a>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AvatarSize = \"xsmall\" | \"small\" | \"medium\" | \"large\" | \"xlarge\" | \"xxlarge\";\nexport type AvatarStatus = \"online\" | \"offline\" | \"busy\" | \"none\";\n\nexport interface AvatarProps\n extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, \"size\"> {\n src: string;\n alt?: string;\n size?: AvatarSize;\n status?: AvatarStatus;\n /** Override the status indicator color. */\n statusColor?: string;\n}\n\nconst sizeClasses: Record<AvatarSize, string> = {\n xsmall: \"h-6 w-6 max-w-6\",\n small: \"h-8 w-8 max-w-8\",\n medium: \"h-10 w-10 max-w-10\",\n large: \"h-12 w-12 max-w-12\",\n xlarge: \"h-14 w-14 max-w-14\",\n xxlarge: \"h-16 w-16 max-w-16\",\n};\n\nconst statusSizeClasses: Record<AvatarSize, string> = {\n xsmall: \"h-1.5 w-1.5 max-w-1.5\",\n small: \"h-2 w-2 max-w-2\",\n medium: \"h-2.5 w-2.5 max-w-2.5\",\n large: \"h-3 w-3 max-w-3\",\n xlarge: \"h-3.5 w-3.5 max-w-3.5\",\n xxlarge: \"h-4 w-4 max-w-4\",\n};\n\nconst statusColorClasses: Record<Exclude<AvatarStatus, \"none\">, string> = {\n online: \"bg-success-500\",\n offline: \"bg-error-400\",\n busy: \"bg-warning-500\",\n};\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt = \"User Avatar\",\n size = \"medium\",\n status = \"none\",\n statusColor,\n className,\n ...rest\n}) => {\n return (\n <div className={cn(\"relative rounded-full\", sizeClasses[size], className)}>\n <img\n src={src}\n alt={alt}\n className=\"object-cover w-full rounded-full\"\n {...rest}\n />\n {status !== \"none\" && (\n <span\n className={cn(\n \"absolute bottom-0 right-0 rounded-full border-[1.5px] border-white dark:border-gray-900\",\n statusSizeClasses[size],\n !statusColor && statusColorClasses[status]\n )}\n style={statusColor ? { backgroundColor: statusColor } : undefined}\n />\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AvatarTextProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n}\n\nexport const AvatarText: React.FC<AvatarTextProps> = ({\n name,\n className,\n ...rest\n}) => {\n // Generate initials from name\n const initials = name\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n\n // Generate a consistent pastel color based on the name\n const getColorClass = (name: string) => {\n const colors = [\n \"bg-brand-100 text-brand-600\",\n \"bg-pink-100 text-pink-600\",\n \"bg-cyan-100 text-cyan-600\",\n \"bg-orange-100 text-orange-600\",\n \"bg-green-100 text-green-600\",\n \"bg-purple-100 text-purple-600\",\n \"bg-yellow-100 text-yellow-600\",\n \"bg-error-100 text-error-600\",\n ];\n\n const index = name\n .split(\"\")\n .reduce((acc, char) => acc + char.charCodeAt(0), 0);\n return colors[index % colors.length];\n };\n\n return (\n <div\n className={cn(\n \"flex h-10 w-10 items-center justify-center rounded-full\",\n getColorClass(name),\n className\n )}\n {...rest}\n >\n <span className=\"text-sm font-medium\">{initials}</span>\n </div>\n );\n};\n","\"use client\";\nimport React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\nexport interface DropdownProps extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n onClose: () => void;\n /** Render under document.body so menus are not clipped by overflow containers. Default: true. */\n portal?: boolean;\n /** Optional ref to the trigger element. Useful when the trigger is not adjacent to the menu. */\n triggerRef?: React.RefObject<HTMLElement | null>;\n}\n\nfunction getTriggerElement(\n anchor: HTMLSpanElement | null,\n triggerRef?: React.RefObject<HTMLElement | null>\n) {\n if (triggerRef?.current) return triggerRef.current;\n if (!anchor) return null;\n\n const previous = anchor.previousElementSibling as HTMLElement | null;\n const adjacentTrigger = previous?.matches(\".dropdown-toggle, button, [aria-haspopup='menu']\")\n ? previous\n : previous?.querySelector<HTMLElement>(\".dropdown-toggle, button, [aria-haspopup='menu']\");\n\n return adjacentTrigger ?? anchor.parentElement?.querySelector<HTMLElement>(\".dropdown-toggle\");\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n isOpen,\n onClose,\n children,\n className,\n portal = true,\n triggerRef,\n style,\n ...rest\n}) => {\n const dropdownRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLSpanElement>(null);\n const [position, setPosition] = useState<React.CSSProperties>();\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const trigger = getTriggerElement(anchorRef.current, triggerRef);\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n !trigger?.contains(event.target as Node)\n ) {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [onClose, triggerRef]);\n\n useLayoutEffect(() => {\n if (!isOpen || !portal) return;\n\n const updatePosition = () => {\n const anchor = anchorRef.current;\n const menu = dropdownRef.current;\n const trigger = getTriggerElement(anchor, triggerRef);\n if (!anchor || !menu) return;\n\n const triggerRect = (trigger ?? anchor).getBoundingClientRect();\n const menuRect = menu.getBoundingClientRect();\n const gap = 8;\n const viewportPadding = 8;\n const fitsBelow =\n triggerRect.bottom + gap + menuRect.height <= window.innerHeight - viewportPadding;\n const top = fitsBelow\n ? triggerRect.bottom + gap\n : Math.max(viewportPadding, triggerRect.top - gap - menuRect.height);\n const left = Math.min(\n window.innerWidth - viewportPadding - menuRect.width,\n Math.max(viewportPadding, triggerRect.right - menuRect.width)\n );\n\n setPosition({ top, left });\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [isOpen, portal, triggerRef]);\n\n if (!isOpen) return null;\n\n const menu = (\n <div\n ref={dropdownRef}\n className={cn(\n \"rounded-xl border border-gray-200 bg-white shadow-theme-lg dark:border-gray-800 dark:bg-gray-dark\",\n portal ? cn(\"fixed\", layers.portal) : cn(\"absolute right-0 mt-2\", layers.menu),\n className\n )}\n style={{\n ...(portal && !position ? { visibility: \"hidden\" } : undefined),\n ...(portal ? position : undefined),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n );\n\n if (!portal || typeof document === \"undefined\") return menu;\n\n return (\n <>\n <span ref={anchorRef} aria-hidden=\"true\" className=\"pointer-events-none absolute\" />\n {createPortal(menu, document.body)}\n </>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type DropdownItemVariant = \"default\" | \"primary\" | \"outline\";\n\nexport interface DropdownItemProps extends ColorOverrideProps {\n tag?: \"a\" | \"button\";\n href?: string;\n onClick?: () => void;\n onItemClick?: () => void;\n /** Visual style, mirroring Button: a plain menu row, a filled brand item, or an outlined one. */\n variant?: DropdownItemVariant;\n /** Full class override (escape hatch). When set, it replaces the variant styling. */\n baseClassName?: string;\n /** Decorative icon rendered before the item text. */\n icon?: React.ReactNode;\n className?: string;\n children: React.ReactNode;\n}\n\nconst variantBase =\n \"flex h-10 w-full items-center gap-2 rounded-lg px-4 py-2.5 text-left text-sm font-medium transition\";\n\nconst variantClasses: Record<DropdownItemVariant, string> = {\n default:\n \"text-gray-700 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-white/5 dark:hover:text-white\",\n primary:\n \"bg-brand-500 text-white shadow-theme-xs hover:bg-brand-600\",\n outline:\n \"border border-gray-300 bg-white text-black shadow-theme-xs hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-800 dark:!text-white dark:hover:bg-white/[0.03]\",\n};\n\nexport const DropdownItem: React.FC<DropdownItemProps> = ({\n tag = \"button\",\n href,\n onClick,\n onItemClick,\n variant = \"default\",\n baseClassName,\n icon,\n className,\n bgColor,\n textColor,\n borderColor,\n children,\n}) => {\n const combinedClasses =\n baseClassName != null\n ? cn(baseClassName, className)\n : cn(variantBase, variantClasses[variant], className);\n\n const style = styleOverride({ bgColor, textColor, borderColor });\n\n const handleClick = (event: React.MouseEvent) => {\n if (tag === \"button\") {\n event.preventDefault();\n }\n if (onClick) onClick();\n if (onItemClick) onItemClick();\n };\n\n const content = icon ? (\n <>\n <span\n aria-hidden=\"true\"\n className=\"flex h-5 w-5 shrink-0 items-center justify-center [&>svg]:size-4\"\n >\n {icon}\n </span>\n <span className=\"min-w-0 flex-1\">{children}</span>\n </>\n ) : (\n children\n );\n\n if (tag === \"a\" && href) {\n return (\n <a href={href} className={combinedClasses} style={style} onClick={handleClick}>\n {content}\n </a>\n );\n }\n\n return (\n <button onClick={handleClick} className={combinedClasses} style={style}>\n {content}\n </button>\n );\n};\n","\"use client\";\nimport React, { useRef, useState } from \"react\";\nimport { Upload } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DropzoneProps {\n /** Called with the dropped/selected files. */\n onDrop?: (files: File[]) => void;\n /** Accepted file types, e.g. \"image/png,image/jpeg\" (native input `accept`). */\n accept?: string;\n /** Allow selecting multiple files. Default: true. */\n multiple?: boolean;\n /** Heading text. Default: \"Drag & Drop Files Here\". */\n title?: string;\n /** Helper text under the heading. */\n description?: string;\n /** \"Browse\" call-to-action label. Default: \"Browse File\". */\n browseLabel?: string;\n /** Extra classes for the outer wrapper. */\n className?: string;\n}\n\n/** Drag-and-drop file upload area — dependency-free (native HTML5 drag/drop). */\nexport const Dropzone: React.FC<DropzoneProps> = ({\n onDrop,\n accept,\n multiple = true,\n title,\n description = \"Drag and drop your PNG, JPG, WebP, SVG images here or browse\",\n browseLabel = \"Browse File\",\n className,\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragActive, setIsDragActive] = useState(false);\n\n const handleFiles = (list: FileList | null) => {\n if (list && list.length) onDrop?.(Array.from(list));\n };\n\n return (\n <div\n className={cn(\n \"cursor-pointer rounded-xl border border-dashed border-gray-300 transition hover:border-brand-500 dark:border-gray-700 dark:hover:border-brand-500\",\n className\n )}\n >\n <div\n onClick={() => inputRef.current?.click()}\n onDragOver={(e) => {\n e.preventDefault();\n setIsDragActive(true);\n }}\n onDragLeave={(e) => {\n e.preventDefault();\n setIsDragActive(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n setIsDragActive(false);\n handleFiles(e.dataTransfer.files);\n }}\n className={cn(\n \"rounded-xl border-dashed p-7 lg:p-10\",\n isDragActive\n ? \"border-brand-500 bg-gray-100 dark:bg-gray-800\"\n : \"border-gray-300 bg-gray-50 dark:border-gray-700 dark:bg-gray-900\"\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={(e) => handleFiles(e.target.files)}\n />\n\n <div className=\"flex flex-col items-center\">\n <div className=\"mb-[22px] flex justify-center\">\n <div className=\"flex h-[68px] w-[68px] items-center justify-center rounded-full bg-gray-200 text-gray-700 dark:bg-gray-800 dark:text-gray-400\">\n <Upload className=\"size-4\" aria-hidden=\"true\" />\n </div>\n </div>\n\n <h4 className=\"mb-3 text-theme-xl font-semibold text-gray-800 dark:text-white/90\">\n {title ?? (isDragActive ? \"Drop Files Here\" : \"Drag & Drop Files Here\")}\n </h4>\n\n <span className=\"mb-5 block w-full max-w-[290px] text-center text-sm text-gray-700 dark:text-gray-400\">\n {description}\n </span>\n\n <span className=\"text-theme-sm font-medium text-brand-500 underline\">\n {browseLabel}\n </span>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type PaginationAlign = \"left\" | \"center\" | \"right\" | \"full\";\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n /**\n * How the controls are laid out within the available width:\n * - `left` / `center` / `right`: the compact group is left/center/right aligned.\n * - `full`: stretches full width with Previous/Next pinned to the edges and the\n * page indices centered between them.\n * When omitted the controls shrink to their content (legacy behavior).\n */\n align?: PaginationAlign;\n}\n\nconst navButton =\n \"flex h-10 items-center justify-center rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 text-sm text-gray-700 shadow-theme-xs hover:bg-gray-50 disabled:opacity-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03]\";\n\nconst justifyByAlign: Record<Exclude<PaginationAlign, \"full\">, string> = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n};\n\ntype PaginationItem = number | \"ellipsis\";\n\nconst getPaginationItems = (currentPage: number, totalPages: number): PaginationItem[] => {\n const total = Math.max(1, totalPages);\n const current = Math.min(Math.max(currentPage, 1), total);\n\n if (total <= 3) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n if (current === 1) {\n return [1, 2, \"ellipsis\", total];\n }\n\n if (current === total) {\n return [1, \"ellipsis\", total - 1, total];\n }\n\n return [current - 1, current, current + 1];\n};\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n align,\n}) => {\n const total = Math.max(1, totalPages);\n const current = Math.min(Math.max(currentPage, 1), total);\n const paginationItems = getPaginationItems(current, total);\n\n const prev = (\n <button\n onClick={() => onPageChange(current - 1)}\n disabled={current === 1}\n aria-label=\"Previous\"\n className={navButton}\n >\n Previous\n </button>\n );\n\n const indices = (\n <div className=\"flex items-center gap-2\">\n {paginationItems.map((item, index) =>\n item === \"ellipsis\" ? (\n <span key={`ellipsis-${index}`} className=\"px-2 text-gray-500 dark:text-gray-400\">\n ...\n </span>\n ) : (\n <button\n key={item}\n onClick={() => onPageChange(item)}\n aria-current={current === item ? \"page\" : undefined}\n className={cn(\n \"flex h-10 w-10 items-center justify-center rounded-lg text-sm font-medium\",\n current === item\n ? // active page keeps its color on hover (no hover restyle)\n \"bg-brand-500 text-white\"\n : // hover effect applies only to non-active page indices\n \"text-gray-700 hover:bg-blue-500/[0.08] hover:text-brand-500 dark:text-gray-400 dark:hover:text-brand-500\"\n )}\n >\n {item}\n </button>\n )\n )}\n </div>\n );\n\n const next = (\n <button\n onClick={() => onPageChange(current + 1)}\n disabled={current === total}\n aria-label=\"Next\"\n className={navButton}\n >\n Next\n </button>\n );\n\n // Full width: buttons pinned to the edges, indices centered between them.\n if (align === \"full\") {\n return (\n <div className=\"flex w-full items-center justify-between\">\n {prev}\n {indices}\n {next}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2.5\",\n align && \"w-full\",\n align && justifyByAlign[align]\n )}\n >\n {prev}\n {indices}\n {next}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"color\">,\n ColorOverrideProps {\n success?: boolean;\n error?: boolean;\n hint?: string;\n}\n\nexport const Input: React.FC<InputProps> = ({\n className,\n disabled = false,\n success = false,\n error = false,\n hint,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const placeholder =\n typeof rest.placeholder === \"string\" ? rest.placeholder.trim() : \"\";\n const placeholderMinWidth = placeholder\n ? `${Math.min(Math.max(placeholder.length + 6, 18), 40)}ch`\n : undefined;\n\n const stateClass = disabled\n ? \"text-gray-500 border-gray-300 cursor-not-allowed dark:bg-gray-800 dark:text-gray-400 dark:border-gray-700\"\n : error\n ? \"text-error-800 border-error-500 focus:ring-3 focus:ring-error-500/10 dark:text-error-400 dark:border-error-500\"\n : success\n ? \"text-success-500 border-success-400 focus:ring-success-500/10 focus:border-success-300 dark:text-success-400 dark:border-success-500\"\n : \"text-gray-800 border-gray-300 focus:border-brand-300 focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:text-white/90 dark:focus:border-brand-800\";\n\n return (\n <div className=\"relative\">\n <input\n disabled={disabled}\n className={cn(\n \"h-11 w-full rounded-lg border bg-white appearance-none px-4 py-2.5 text-sm shadow-theme-xs placeholder:text-gray-400 focus:outline-hidden focus:ring-3 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\",\n stateClass,\n className\n )}\n style={{\n minWidth: placeholderMinWidth,\n ...styleOverride({ bgColor, textColor, borderColor }),\n ...style,\n }}\n {...rest}\n />\n {hint && (\n <p className={cn(\"mt-1.5 text-xs\", error ? \"text-error-500\" : success ? \"text-success-500\" : \"text-gray-500\")}>\n {hint}\n </p>\n )}\n </div>\n );\n};\n","\"use client\";\nimport React, { useMemo, useState } from \"react\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { Pagination, type PaginationAlign } from \"../Pagination/Pagination\";\nimport { Input } from \"../Form/Input\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport interface TableColumn<T> {\n /** Key into the row object — also the value used for sorting/searching. */\n key: Extract<keyof T, string>;\n /** Column header label. */\n header: React.ReactNode;\n /** Allow click-to-sort on this column. Default: false. */\n sortable?: boolean;\n /** Cell + header text alignment. Default: \"left\". */\n align?: \"left\" | \"center\" | \"right\";\n /** Custom cell renderer. Falls back to `String(row[key])`. */\n render?: (row: T, rowIndex: number) => React.ReactNode;\n /** Extra classes applied to this column's header and body cells. */\n className?: string;\n}\n\nexport interface TableProps<T = Record<string, unknown>>\n extends Omit<React.TableHTMLAttributes<HTMLTableElement>, \"children\"> {\n /**\n * Composable content (Table / TableHeader / TableBody / TableRow / TableCell).\n * Used when `columns` is **not** provided.\n */\n children?: React.ReactNode;\n\n /* ── data-driven mode (set `columns` to enable search + sort + pagination) ── */\n\n /** The array of row objects to display. */\n data?: T[];\n /** Column definitions. Providing this switches Table into data-driven mode. */\n columns?: TableColumn<T>[];\n /** Maximum number of rows shown per page. Default: 10. */\n rowsPerPage?: number;\n /** Options for the \"Show N entries\" selector. Default: [5, 10, 25, 50]. Pass [] to hide it. */\n rowsPerPageOptions?: number[];\n /** Render pagination controls + the entry counter. Default: true. */\n pagination?: boolean;\n /**\n * Alignment of the pagination controls: `left` / `center` / `right`, or `full`\n * (full width with Previous/Next pinned to the edges and the page indices\n * centered). Default: `right`.\n */\n paginationAlign?: PaginationAlign;\n /** Render the \"Show N entries\" selector (only when pagination is on). Default: true. */\n showSizeSelector?: boolean;\n /**\n * Fields matched when searching. The search input is shown **only** when this\n * is a non-empty array — omit it (or pass `[]`) to hide the search box.\n */\n searchKeys?: Extract<keyof T, string>[];\n /** Placeholder for the search field. Default: \"Search...\". */\n searchPlaceholder?: string;\n /** Column sorted on first render. */\n defaultSortKey?: Extract<keyof T, string>;\n /** Initial sort direction. Default: \"asc\". */\n defaultSortDirection?: SortDirection;\n /** Stable key for a row. Defaults to the row index. */\n getRowId?: (row: T, index: number) => string | number;\n /** Fires when a row is clicked (also makes rows hoverable/clickable). */\n onRowClick?: (row: T, index: number) => void;\n /** Shown when no rows match. Default: \"No matching records\". */\n emptyContent?: React.ReactNode;\n}\n\nexport interface TableSectionProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\nexport const TableHeader: React.FC<TableSectionProps> = ({ children, className, ...rest }) => (\n <thead className={className} {...rest}>{children}</thead>\n);\nexport const TableBody: React.FC<TableSectionProps> = ({ children, className, ...rest }) => (\n <tbody className={className} {...rest}>{children}</tbody>\n);\n\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {}\nexport const TableRow: React.FC<TableRowProps> = ({ children, className, ...rest }) => (\n <tr className={className} {...rest}>{children}</tr>\n);\n\nexport interface TableCellProps\n extends React.TdHTMLAttributes<HTMLTableCellElement> {\n isHeader?: boolean;\n}\nexport const TableCell: React.FC<TableCellProps> = ({\n children,\n isHeader = false,\n className,\n ...rest\n}) => {\n const Tag = isHeader ? \"th\" : \"td\";\n return <Tag className={className} {...rest}>{children}</Tag>;\n};\n\nconst alignClass = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n} as const;\n\nfunction SortIcon({\n state,\n}: {\n state: SortDirection | \"none\";\n}) {\n const active = \"text-brand-500\";\n const inactive = \"text-gray-400 dark:text-gray-500\";\n return (\n <span\n data-sort-state={state}\n className=\"inline-flex shrink-0 flex-col items-center -space-y-1\"\n >\n <ChevronUp\n data-sort-direction=\"asc\"\n aria-hidden=\"true\"\n className={cn(\"size-4\", state === \"asc\" ? active : inactive)}\n />\n <ChevronDown\n data-sort-direction=\"desc\"\n aria-hidden=\"true\"\n className={cn(\"size-4\", state === \"desc\" ? active : inactive)}\n />\n </span>\n );\n}\n\ninterface DataTableInnerProps<T> {\n data: T[];\n columns: TableColumn<T>[];\n rowsPerPage?: number;\n rowsPerPageOptions?: number[];\n pagination?: boolean;\n paginationAlign?: PaginationAlign;\n showSizeSelector?: boolean;\n searchKeys?: Extract<keyof T, string>[];\n searchPlaceholder?: string;\n defaultSortKey?: Extract<keyof T, string>;\n defaultSortDirection?: SortDirection;\n getRowId?: (row: T, index: number) => string | number;\n onRowClick?: (row: T, index: number) => void;\n emptyContent?: React.ReactNode;\n className?: string;\n}\n\nfunction DataDrivenTable<T extends Record<string, unknown>>({\n data,\n columns,\n rowsPerPage = 10,\n rowsPerPageOptions = [5, 10, 25, 50],\n pagination = true,\n paginationAlign = \"right\",\n showSizeSelector = true,\n searchKeys,\n searchPlaceholder = \"Search...\",\n defaultSortKey,\n defaultSortDirection = \"asc\",\n getRowId,\n onRowClick,\n emptyContent = \"No matching records\",\n className,\n}: DataTableInnerProps<T>) {\n const [search, setSearch] = useState(\"\");\n const [pageSize, setPageSize] = useState(rowsPerPage);\n const [sortKey, setSortKey] = useState<Extract<keyof T, string> | undefined>(defaultSortKey);\n const [sortDir, setSortDir] = useState<SortDirection>(defaultSortDirection);\n const [page, setPage] = useState(1);\n\n // Search is only available when explicit search keys are provided.\n const showSearch = !!(searchKeys && searchKeys.length > 0);\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n let rows = data;\n if (showSearch && q) {\n rows = rows.filter((row) =>\n searchKeys!.some((k) => String(row[k] ?? \"\").toLowerCase().includes(q))\n );\n }\n if (sortKey) {\n rows = [...rows].sort((a, b) => {\n const av = a[sortKey];\n const bv = b[sortKey];\n const cmp =\n typeof av === \"number\" && typeof bv === \"number\"\n ? av - bv\n : String(av ?? \"\").localeCompare(String(bv ?? \"\"));\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }\n return rows;\n }, [data, search, showSearch, searchKeys, sortKey, sortDir]);\n\n const total = filtered.length;\n const totalPages = pagination ? Math.max(1, Math.ceil(total / pageSize)) : 1;\n const current = Math.min(page, totalPages);\n const start = pagination ? (current - 1) * pageSize : 0;\n const pageRows = pagination ? filtered.slice(start, start + pageSize) : filtered;\n\n const toggleSort = (col: TableColumn<T>) => {\n if (!col.sortable) return;\n if (sortKey !== col.key) {\n setSortKey(col.key);\n setSortDir(\"asc\");\n } else if (sortDir === \"asc\") {\n setSortDir(\"desc\");\n } else {\n setSortKey(undefined);\n setSortDir(\"asc\");\n }\n setPage(1);\n };\n\n const sizeOptions = rowsPerPageOptions.length ? rowsPerPageOptions : [];\n const showSelector = pagination && showSizeSelector && sizeOptions.length > 1;\n const showControls = showSearch || showSelector;\n\n const counterText =\n total === 0\n ? \"Showing 0 entries\"\n : `Showing ${start + 1} to ${Math.min(start + pageSize, total)} of ${total} entries`;\n\n return (\n <div\n className={cn(\n \"rounded-xl border border-gray-200 bg-white dark:border-white/[0.05] dark:bg-white/[0.03]\",\n className\n )}\n >\n {showControls && (\n <div className=\"flex flex-wrap items-center justify-between gap-3 p-4\">\n {showSelector ? (\n <label className=\"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400\">\n Show\n <span className=\"relative inline-flex\">\n <select\n aria-label=\"Rows per page\"\n value={pageSize}\n onChange={(e) => {\n setPageSize(Number(e.target.value));\n setPage(1);\n }}\n className=\"h-11 appearance-none rounded-lg border border-gray-300 bg-white py-2.5 pl-4 pr-11 text-sm text-gray-700 shadow-theme-xs dark:border-gray-700 dark:bg-gray-900 dark:text-white/90\"\n >\n {sizeOptions.map((n) => (\n <option key={n} value={n}>\n {n}\n </option>\n ))}\n </select>\n <ChevronDown\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-4 top-1/2 size-4 -translate-y-1/2 text-gray-500 dark:text-gray-400\"\n />\n </span>\n entries\n </label>\n ) : (\n <span />\n )}\n {showSearch && (\n <Input\n type=\"search\"\n aria-label=\"Search\"\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setPage(1);\n }}\n className=\"sm:w-auto\"\n />\n )}\n </div>\n )}\n\n <div className=\"border-y border-gray-100 dark:border-white/[0.05]\">\n <table className=\"min-w-full\">\n <TableHeader className=\"border-b border-gray-100 bg-gray-50 dark:border-white/[0.05] dark:bg-white/[0.06]\">\n <TableRow>\n {columns.map((col) => {\n const isActive = sortKey === col.key;\n return (\n <TableCell\n key={col.key}\n isHeader\n aria-sort={\n col.sortable\n ? isActive\n ? sortDir === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n : undefined\n }\n className={cn(\n \"whitespace-nowrap px-5 py-3 text-xs font-semibold text-gray-500 dark:text-gray-400\",\n alignClass[col.align ?? \"left\"],\n col.className\n )}\n >\n {col.sortable ? (\n <button\n type=\"button\"\n onClick={() => toggleSort(col)}\n aria-label={`Sort by ${typeof col.header === \"string\" ? col.header : col.key}`}\n className=\"inline-flex select-none items-center gap-2 text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\"\n >\n <SortIcon state={isActive ? sortDir : \"none\"} />\n {col.header}\n </button>\n ) : (\n col.header\n )}\n </TableCell>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody className=\"divide-y divide-gray-100 dark:divide-white/[0.05]\">\n {pageRows.map((row, i) => {\n const index = start + i;\n const id = getRowId ? getRowId(row, index) : index;\n return (\n <TableRow\n key={id}\n onClick={onRowClick ? () => onRowClick(row, index) : undefined}\n className={cn(onRowClick && \"cursor-pointer hover:bg-gray-50 dark:hover:bg-white/[0.03]\")}\n >\n {columns.map((col) => (\n <TableCell\n key={col.key}\n className={cn(\n \"whitespace-nowrap px-5 py-3.5 text-sm text-gray-700 dark:text-gray-300\",\n alignClass[col.align ?? \"left\"],\n col.className\n )}\n >\n {col.render ? col.render(row, index) : String(row[col.key] ?? \"\")}\n </TableCell>\n ))}\n </TableRow>\n );\n })}\n {pageRows.length === 0 && (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"px-5 py-6 text-center text-sm text-gray-400\">\n {emptyContent}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </table>\n </div>\n\n {pagination && (\n <div className=\"p-4\">\n {paginationAlign === \"right\" ? (\n // Default layout: entry counter on the left, controls on the right.\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{counterText}</p>\n {totalPages > 1 && (\n <Pagination currentPage={current} totalPages={totalPages} onPageChange={setPage} />\n )}\n </div>\n ) : (\n // Aligned layout: controls aligned/stretched, counter underneath.\n <div className=\"flex flex-col gap-3\">\n {totalPages > 1 && (\n <Pagination\n align={paginationAlign}\n currentPage={current}\n totalPages={totalPages}\n onPageChange={setPage}\n />\n )}\n <p\n className={cn(\n \"text-sm text-gray-500 dark:text-gray-400\",\n paginationAlign === \"center\" && \"text-center\"\n )}\n >\n {counterText}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport function Table<T extends Record<string, unknown> = Record<string, unknown>>({\n children,\n data,\n columns,\n rowsPerPage,\n rowsPerPageOptions,\n pagination,\n paginationAlign,\n showSizeSelector,\n searchKeys,\n searchPlaceholder,\n defaultSortKey,\n defaultSortDirection,\n getRowId,\n onRowClick,\n emptyContent,\n className,\n ...rest\n}: TableProps<T>) {\n // Data-driven mode: rich table with search / sort / pagination.\n if (columns && data) {\n return (\n <DataDrivenTable\n data={data}\n columns={columns}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n pagination={pagination}\n paginationAlign={paginationAlign}\n showSizeSelector={showSizeSelector}\n searchKeys={searchKeys}\n searchPlaceholder={searchPlaceholder}\n defaultSortKey={defaultSortKey}\n defaultSortDirection={defaultSortDirection}\n getRowId={getRowId}\n onRowClick={onRowClick}\n emptyContent={emptyContent}\n className={className}\n />\n );\n }\n\n // Composable mode: thin wrapper around <table>.\n return (\n <table className={cn(\"min-w-full\", className)} {...rest}>\n {children}\n </table>\n );\n}\n","import React from \"react\";\nimport { ChevronRight } from \"lucide-react\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n pageTitle: string;\n items?: BreadcrumbItem[];\n}\n\nconst ChevronIcon: React.FC = () => (\n <ChevronRight className=\"size-4\" strokeWidth={1.5} aria-hidden=\"true\" />\n);\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ pageTitle, items }) => {\n return (\n <div className=\"flex flex-wrap items-center justify-between gap-3 mb-6\">\n <h2\n className=\"text-xl font-semibold text-gray-800 dark:text-white/90\"\n x-text=\"pageName\"\n >\n {pageTitle}\n </h2>\n <nav>\n <ol className=\"flex items-center gap-1.5\">\n <li>\n <a\n className=\"inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-gray-400\"\n href=\"/\"\n >\n Home\n <ChevronIcon />\n </a>\n </li>\n {items?.map((item, index) => (\n <li key={index}>\n {item.href ? (\n <a\n className=\"inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-gray-400\"\n href={item.href}\n >\n {item.label}\n <ChevronIcon />\n </a>\n ) : (\n <span className=\"inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-gray-400\">\n {item.label}\n <ChevronIcon />\n </span>\n )}\n </li>\n ))}\n <li className=\"text-sm text-gray-800 dark:text-white/90\">\n {pageTitle}\n </li>\n </ol>\n </nav>\n </div>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { Moon, Sun } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ThemeToggleButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n theme?: \"light\" | \"dark\";\n onToggle?: () => void;\n}\n\nexport const ThemeToggleButton: React.FC<ThemeToggleButtonProps> = ({\n theme,\n onToggle,\n className,\n onClick,\n ...rest\n}) => {\n const [internalTheme, setInternalTheme] = useState<\"light\" | \"dark\">(\"light\");\n const isControlled = theme !== undefined;\n const currentTheme = isControlled ? theme : internalTheme;\n\n const handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n if (onToggle) {\n onToggle();\n } else if (!isControlled) {\n setInternalTheme((prev) => (prev === \"light\" ? \"dark\" : \"light\"));\n }\n onClick?.(e);\n };\n\n return (\n <button\n onClick={handleClick}\n data-theme={currentTheme}\n className={cn(\n \"relative flex items-center justify-center text-gray-500 transition-colors bg-white border border-gray-200 rounded-full hover:text-dark-900 h-11 w-11 hover:bg-gray-100 hover:text-gray-700 dark:border-gray-800 dark:bg-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white\",\n className\n )}\n {...rest}\n >\n <Sun className=\"hidden size-4 dark:block\" aria-hidden=\"true\" />\n <Moon className=\"size-4 dark:hidden\" aria-hidden=\"true\" />\n </button>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport interface CardProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n ColorOverrideProps {\n /** Heading shown above the description. */\n title?: React.ReactNode;\n /** Supporting text rendered under the title. */\n description?: React.ReactNode;\n /** Icon rendered in a rounded square above the title. */\n icon?: React.ReactNode;\n /** Optional cover image source. Rendered on top (or alongside when `horizontal`). */\n image?: string;\n /** Alt text for the cover image. */\n imageAlt?: string;\n /** Lay the image alongside the content instead of on top. */\n horizontal?: boolean;\n /** Footer area, e.g. a link or a `Button` call-to-action. */\n footer?: React.ReactNode;\n /** Custom body content, rendered after the description. */\n children?: React.ReactNode;\n}\n\nexport const Card: React.FC<CardProps> = ({\n title,\n description,\n icon,\n image,\n imageAlt = \"\",\n horizontal = false,\n footer,\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const cover = image ? (\n <img\n src={image}\n alt={imageAlt}\n className={cn(\n \"object-cover rounded-t-2xl\",\n horizontal\n ? \"h-full w-full sm:w-2/5 sm:max-w-[16rem] sm:rounded-l-2xl sm:rounded-tr-none\"\n : \"h-48 w-full\"\n )}\n />\n ) : null;\n\n return (\n <div\n className={cn(\n \"rounded-2xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-white/[0.03]\",\n horizontal && image && \"flex flex-col sm:flex-row\",\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {cover}\n <div className=\"flex-1 p-5 sm:p-6\">\n {icon && (\n <div className=\"mb-5 flex h-12 w-12 items-center justify-center rounded-xl bg-brand-50 text-brand-500 dark:bg-brand-500/15 dark:text-brand-400\">\n {icon}\n </div>\n )}\n {title && (\n <h3 className=\"text-lg font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {description}\n </p>\n )}\n {children}\n {footer && <div className=\"mt-4\">{footer}</div>}\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n CircleAlert,\n CircleCheck,\n CircleX,\n Info,\n X,\n type LucideIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type ToastVariant = \"success\" | \"danger\" | \"warning\" | \"info\";\nexport type ToastPosition = \"left\" | \"center\" | \"right\";\n\nexport interface ToastProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n ColorOverrideProps {\n /** Color/severity variant. */\n variant?: ToastVariant;\n title: React.ReactNode;\n message?: React.ReactNode;\n /** Override the default variant icon. */\n icon?: React.ReactNode;\n /** Hide the leading icon entirely. */\n hideIcon?: boolean;\n /** Render the dismiss button (default `true`). */\n showCloseButton?: boolean;\n /** Called when the close button is clicked. */\n onClose?: () => void;\n /** Hide the colored accent bar at the bottom. */\n hideAccentBar?: boolean;\n /** Fixed bottom alignment. Default: `\"right\"`. */\n position?: ToastPosition;\n /** Auto-dismiss duration in milliseconds. Omit or pass `0` to keep visible. */\n duration?: number;\n}\n\nconst variantStyles: Record<ToastVariant, { iconWrap: string; bar: string }> = {\n success: {\n iconWrap:\n \"bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500\",\n bar: \"bg-success-500\",\n },\n danger: {\n iconWrap:\n \"bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500\",\n bar: \"bg-error-500\",\n },\n warning: {\n iconWrap:\n \"bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400\",\n bar: \"bg-warning-500\",\n },\n info: {\n iconWrap:\n \"bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500\",\n bar: \"bg-blue-light-500\",\n },\n};\n\nconst variantIcons: Record<ToastVariant, LucideIcon> = {\n success: CircleCheck,\n danger: CircleX,\n warning: CircleAlert,\n info: Info,\n};\n\nconst positionStyles: Record<ToastPosition, string> = {\n left: \"bottom-6 left-4 right-4 sm:left-6 sm:right-auto sm:w-full\",\n center:\n \"bottom-6 left-1/2 w-[calc(100%-2rem)] -translate-x-1/2 sm:w-full\",\n right: \"bottom-6 left-4 right-4 sm:left-auto sm:right-6 sm:w-full\",\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n variant = \"success\",\n title,\n message,\n icon,\n hideIcon = false,\n showCloseButton = true,\n onClose,\n hideAccentBar = false,\n position = \"right\",\n duration,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const styles = variantStyles[variant];\n const Icon = variantIcons[variant];\n const [isVisible, setIsVisible] = useState(true);\n\n const handleClose = useCallback(() => {\n setIsVisible(false);\n onClose?.();\n }, [onClose]);\n\n useEffect(() => {\n if (!duration || duration <= 0) return;\n\n const timer = window.setTimeout(handleClose, duration);\n return () => window.clearTimeout(timer);\n }, [duration, handleClose]);\n\n if (!isVisible) return null;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"fixed z-9999 flex max-w-md items-center gap-3 overflow-hidden rounded-xl border border-gray-200 bg-white px-4 py-3.5 pr-10 shadow-theme-sm dark:border-gray-800 dark:bg-gray-900\",\n positionStyles[position],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {!hideIcon && (\n <span\n className={cn(\n \"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg\",\n styles.iconWrap\n )}\n >\n {icon ?? <Icon className=\"size-4\" aria-hidden=\"true\" />}\n </span>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </p>\n {message && (\n <p className=\"mt-0.5 text-sm text-gray-500 dark:text-gray-400\">\n {message}\n </p>\n )}\n </div>\n {showCloseButton && (\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={handleClose}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 transition hover:text-gray-700 dark:hover:text-gray-200\"\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n {!hideAccentBar && (\n <span\n className={cn(\"absolute inset-x-0 bottom-0 h-1\", styles.bar)}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n};\n","\"use client\";\nimport React, { useState, useCallback } from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AccordionSelectionMode = \"single\" | \"multiple\";\n\nexport interface AccordionItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Unique key identifying this item. */\n itemKey: string;\n /** Header content. */\n title: React.ReactNode;\n /** Optional content rendered before the title (e.g. an icon). */\n startContent?: React.ReactNode;\n /** Disable expand/collapse for this item. */\n disabled?: boolean;\n}\n\ninterface AccordionContextValue {\n expanded: string[];\n toggle: (key: string) => void;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nconst ChevronIcon: React.FC<{ open: boolean }> = ({ open }) => (\n <ChevronDown\n className={cn(\n \"size-4 shrink-0 text-gray-500 transition-transform duration-200 dark:text-gray-400\",\n open && \"rotate-180\"\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\n itemKey,\n title,\n startContent,\n disabled = false,\n children,\n className,\n ...rest\n}) => {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) {\n throw new Error(\"AccordionItem must be used within an Accordion\");\n }\n const open = ctx.expanded.includes(itemKey);\n const panelId = `accordion-panel-${itemKey}`;\n const buttonId = `accordion-button-${itemKey}`;\n\n return (\n <div\n className={cn(\n \"border-b border-gray-200 last:border-b-0 dark:border-gray-800\",\n className\n )}\n {...rest}\n >\n <h3>\n <button\n type=\"button\"\n id={buttonId}\n aria-expanded={open}\n aria-controls={panelId}\n disabled={disabled}\n onClick={() => !disabled && ctx.toggle(itemKey)}\n className={cn(\n \"flex w-full items-center gap-3 px-4 py-4 text-left text-sm font-medium text-gray-800 transition dark:text-white/90\",\n disabled\n ? \"cursor-not-allowed opacity-50\"\n : \"hover:bg-gray-50 dark:hover:bg-white/[0.03]\"\n )}\n >\n {startContent && (\n <span className=\"flex items-center\">{startContent}</span>\n )}\n <span className=\"flex-1\">{title}</span>\n <ChevronIcon open={open} />\n </button>\n </h3>\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={buttonId}\n aria-hidden={!open}\n inert={!open}\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-300 ease-in-out motion-reduce:transition-none\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\"\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-4 pb-4 text-sm text-gray-500 dark:text-gray-400\">\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \"single\" allows one open item, \"multiple\" allows many. */\n selectionMode?: AccordionSelectionMode;\n /** Uncontrolled initial expanded keys. */\n defaultExpandedKeys?: string[];\n /** Controlled expanded keys. */\n expandedKeys?: string[];\n /** Called with the new set of expanded keys when it changes. */\n onExpandedChange?: (keys: string[]) => void;\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({\n selectionMode = \"single\",\n defaultExpandedKeys = [],\n expandedKeys,\n onExpandedChange,\n children,\n className,\n ...rest\n}) => {\n const isControlled = expandedKeys !== undefined;\n const [internal, setInternal] = useState<string[]>(defaultExpandedKeys);\n const expanded = isControlled ? expandedKeys! : internal;\n\n const toggle = useCallback(\n (key: string) => {\n const isOpen = expanded.includes(key);\n let next: string[];\n if (selectionMode === \"single\") {\n next = isOpen ? [] : [key];\n } else {\n next = isOpen\n ? expanded.filter((k) => k !== key)\n : [...expanded, key];\n }\n if (!isControlled) setInternal(next);\n onExpandedChange?.(next);\n },\n [expanded, selectionMode, isControlled, onExpandedChange]\n );\n\n return (\n <AccordionContext.Provider value={{ expanded, toggle }}>\n <div\n className={cn(\n \"divide-y divide-gray-200 overflow-hidden rounded-xl border border-gray-200 bg-white dark:divide-gray-800 dark:border-gray-800 dark:bg-white/[0.03]\",\n className\n )}\n {...rest}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n};\n","\"use client\";\nimport React, { useState, useRef } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type TabsVariant = \"underline\" | \"solid\" | \"pill\";\n\nexport interface TabProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Unique key identifying this tab. */\n tabKey: string;\n /** Tab label (may include an icon). */\n title: React.ReactNode;\n /** Disable selection of this tab. */\n disabled?: boolean;\n}\n\n/** Tab is a configuration element consumed by Tabs; it renders its children as the panel. */\nexport const Tab: React.FC<TabProps> = ({\n children,\n tabKey,\n title,\n disabled,\n ...rest\n}) => {\n return <div {...rest}>{children}</div>;\n};\n\nexport interface TabsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n variant?: TabsVariant;\n /** Controlled selected key. */\n selectedKey?: string;\n /** Uncontrolled initial selected key. */\n defaultSelectedKey?: string;\n /** Called with the newly selected key. */\n onSelectionChange?: (key: string) => void;\n /** Accent color for the active tab (any CSS color). Defaults to the brand color. */\n color?: string;\n children?: React.ReactNode;\n}\n\ntype TabElement = React.ReactElement<TabProps>;\n\nexport const Tabs: React.FC<TabsProps> = ({\n variant = \"underline\",\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n color,\n children,\n className,\n ...rest\n}) => {\n const tabs = React.Children.toArray(children).filter(\n React.isValidElement\n ) as TabElement[];\n\n const firstKey = tabs[0]?.props.tabKey;\n const isControlled = selectedKey !== undefined;\n const [internal, setInternal] = useState<string>(\n defaultSelectedKey ?? firstKey\n );\n const active = isControlled ? selectedKey! : internal;\n\n const tabRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n\n const select = (key: string) => {\n if (!isControlled) setInternal(key);\n onSelectionChange?.(key);\n };\n\n const onKeyDown = (e: React.KeyboardEvent, index: number) => {\n if (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\") return;\n e.preventDefault();\n const dir = e.key === \"ArrowRight\" ? 1 : -1;\n const count = tabs.length;\n let next = index;\n for (let i = 0; i < count; i++) {\n next = (next + dir + count) % count;\n if (!tabs[next].props.disabled) break;\n }\n const nextKey = tabs[next].props.tabKey;\n tabRefs.current[nextKey]?.focus();\n select(nextKey);\n };\n\n const listClasses: Record<TabsVariant, string> = {\n underline: \"flex gap-2 border-b border-gray-200 dark:border-gray-800\",\n solid:\n \"inline-flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-white/[0.03]\",\n pill: \"inline-flex gap-2\",\n };\n\n const tabClasses = (isActive: boolean): string => {\n const base =\n \"inline-flex items-center gap-2 text-sm font-medium transition focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50\";\n switch (variant) {\n case \"solid\":\n return cn(\n base,\n \"rounded-md px-4 py-2\",\n isActive\n ? \"bg-white text-gray-900 shadow-theme-xs dark:bg-gray-800 dark:text-white/90\"\n : \"text-gray-500 hover:text-gray-800 dark:text-gray-400 dark:hover:text-white/90\"\n );\n case \"pill\":\n return cn(\n base,\n \"rounded-full px-4 py-2\",\n isActive\n ? \"bg-brand-500 text-white\"\n : \"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-white/[0.03] dark:text-gray-400 dark:hover:bg-white/[0.06]\"\n );\n case \"underline\":\n default:\n return cn(\n base,\n \"border-b-2 px-4 py-3\",\n isActive\n ? \"border-brand-500 text-brand-500\"\n : \"border-transparent text-gray-500 hover:text-gray-800 dark:text-gray-400 dark:hover:text-white/90\"\n );\n }\n };\n\n const activeColorStyle = (isActive: boolean): React.CSSProperties => {\n if (!color || !isActive) return {};\n if (variant === \"underline\") return { borderColor: color, color };\n if (variant === \"pill\") return { backgroundColor: color };\n return { color };\n };\n\n const activePanel = tabs.find((t) => t.props.tabKey === active);\n\n return (\n <div className={cn(\"w-full\", className)} {...rest}>\n <div role=\"tablist\" className={listClasses[variant]}>\n {tabs.map((tab, index) => {\n const { tabKey, title, disabled = false } = tab.props;\n const isActive = tabKey === active;\n return (\n <button\n key={tabKey}\n ref={(el) => {\n tabRefs.current[tabKey] = el;\n }}\n role=\"tab\"\n type=\"button\"\n id={`tab-${tabKey}`}\n aria-selected={isActive}\n aria-controls={`tabpanel-${tabKey}`}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n onClick={() => !disabled && select(tabKey)}\n onKeyDown={(e) => onKeyDown(e, index)}\n className={tabClasses(isActive)}\n style={activeColorStyle(isActive)}\n >\n {title}\n </button>\n );\n })}\n </div>\n {activePanel && (\n <div\n role=\"tabpanel\"\n id={`tabpanel-${active}`}\n aria-labelledby={`tab-${active}`}\n className=\"pt-4 text-sm text-gray-600 dark:text-gray-300\"\n >\n {activePanel.props.children}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\nimport React, { useId, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type TooltipPlacement = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface TooltipProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\" | \"content\">,\n ColorOverrideProps {\n /** The content rendered inside the tooltip bubble. */\n content: React.ReactNode;\n /** Which side of the trigger the tooltip appears on. */\n placement?: TooltipPlacement;\n /** Delay in milliseconds before showing the tooltip. */\n delay?: number;\n /** When true the tooltip never opens. */\n disabled?: boolean;\n /** The trigger element. */\n children: React.ReactNode;\n}\n\nconst placementClasses: Record<TooltipPlacement, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n};\n\nconst arrowClasses: Record<TooltipPlacement, string> = {\n top: \"top-full left-1/2 -translate-x-1/2 -mt-1\",\n right: \"right-full top-1/2 -translate-y-1/2 -mr-1\",\n bottom: \"bottom-full left-1/2 -translate-x-1/2 -mb-1\",\n left: \"left-full top-1/2 -translate-y-1/2 -ml-1\",\n};\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n placement = \"top\",\n delay = 0,\n disabled = false,\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const [visible, setVisible] = useState(false);\n const tooltipId = useId();\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const show = () => {\n if (disabled) return;\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => setVisible(true), delay);\n } else {\n setVisible(true);\n }\n };\n\n const hide = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n setVisible(false);\n };\n\n return (\n <span\n className={cn(\"relative inline-flex\", className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n aria-describedby={visible ? tooltipId : undefined}\n {...rest}\n >\n {children}\n {!disabled && visible && (\n <span\n id={tooltipId}\n role=\"tooltip\"\n className={cn(\n \"pointer-events-none absolute whitespace-nowrap rounded-lg bg-gray-900 px-3 py-2 text-xs font-medium text-white shadow-theme-lg dark:bg-gray-700 dark:text-white/90\",\n layers.floating,\n placementClasses[placement]\n )}\n style={{\n ...styleOverride({ bgColor, textColor, borderColor }),\n ...style,\n }}\n >\n {content}\n <span\n className={cn(\n \"absolute h-2 w-2 rotate-45 bg-gray-900 dark:bg-gray-700\",\n arrowClasses[placement]\n )}\n style={bgColor ? { backgroundColor: bgColor } : undefined}\n aria-hidden=\"true\"\n />\n </span>\n )}\n </span>\n );\n};\n","\"use client\";\nimport React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\nexport type PopoverPlacement = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface PopoverProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"content\"> {\n /** The clickable trigger element. */\n trigger: React.ReactNode;\n /** Which side of the trigger the panel appears on. */\n placement?: PopoverPlacement;\n /** Controlled open state. Omit for uncontrolled behavior. */\n isOpen?: boolean;\n /** Called when the open state should change (controlled or uncontrolled). */\n onOpenChange?: (open: boolean) => void;\n /** Initial open state when uncontrolled. */\n defaultOpen?: boolean;\n /** Close when clicking outside the popover. */\n closeOnOutsideClick?: boolean;\n /** Close when pressing Escape. */\n closeOnEsc?: boolean;\n /** Render panel under document.body to avoid clipping inside cards/overflow containers. */\n portal?: boolean;\n /** Panel content. */\n children: React.ReactNode;\n}\n\nexport const Popover: React.FC<PopoverProps> = ({\n trigger,\n placement = \"bottom\",\n isOpen: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n closeOnOutsideClick = true,\n closeOnEsc = true,\n portal = true,\n children,\n className,\n ...rest\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [panelPosition, setPanelPosition] = useState<React.CSSProperties>();\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n\n const setOpen = (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n };\n\n useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n closeOnOutsideClick &&\n wrapperRef.current &&\n !wrapperRef.current.contains(event.target as Node) &&\n !panelRef.current?.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (closeOnEsc && event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, closeOnOutsideClick, closeOnEsc]);\n\n const updatePanelPosition = useCallback(() => {\n const trigger = wrapperRef.current;\n const panel = panelRef.current;\n if (!trigger || !panel) return;\n\n const rect = trigger.getBoundingClientRect();\n const panelWidth = panel.offsetWidth;\n const panelHeight = panel.offsetHeight;\n const viewportPadding = 8;\n const gap = 8;\n const centeredLeft = rect.left + rect.width / 2 - panelWidth / 2;\n const centeredTop = rect.top + rect.height / 2 - panelHeight / 2;\n const canFitAbove = rect.top - gap - panelHeight >= viewportPadding;\n const canFitBelow = rect.bottom + gap + panelHeight <= window.innerHeight - viewportPadding;\n const canFitLeft = rect.left - gap - panelWidth >= viewportPadding;\n const canFitRight = rect.right + gap + panelWidth <= window.innerWidth - viewportPadding;\n\n let effectivePlacement: PopoverPlacement = placement;\n if (placement === \"bottom\" && !canFitBelow && canFitAbove) {\n effectivePlacement = \"top\";\n } else if (placement === \"top\" && !canFitAbove && canFitBelow) {\n effectivePlacement = \"bottom\";\n } else if (placement === \"left\" && !canFitLeft && canFitRight) {\n effectivePlacement = \"right\";\n } else if (placement === \"right\" && !canFitRight && canFitLeft) {\n effectivePlacement = \"left\";\n }\n\n let top = rect.bottom + gap;\n let left = centeredLeft;\n\n if (effectivePlacement === \"top\") {\n top = rect.top - gap - panelHeight;\n left = centeredLeft;\n } else if (effectivePlacement === \"right\") {\n top = centeredTop;\n left = rect.right + gap;\n } else if (effectivePlacement === \"left\") {\n top = centeredTop;\n left = rect.left - gap - panelWidth;\n }\n\n setPanelPosition({\n top: Math.min(\n Math.max(viewportPadding, top),\n window.innerHeight - panelHeight - viewportPadding\n ),\n left: Math.min(\n Math.max(viewportPadding, left),\n window.innerWidth - panelWidth - viewportPadding\n ),\n });\n }, [placement]);\n\n useLayoutEffect(() => {\n if (!open || !portal) return;\n\n updatePanelPosition();\n window.addEventListener(\"resize\", updatePanelPosition);\n window.addEventListener(\"scroll\", updatePanelPosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePanelPosition);\n window.removeEventListener(\"scroll\", updatePanelPosition, true);\n };\n }, [open, portal, updatePanelPosition]);\n\n const panel = open ? (\n <div\n ref={panelRef}\n role=\"dialog\"\n className={cn(\n \"min-w-48 rounded-xl border border-gray-200 bg-white p-4 shadow-theme-lg dark:border-gray-700 dark:bg-gray-900 dark:text-white/90\",\n portal ? cn(\"fixed\", layers.portal) : cn(\"absolute top-full left-1/2 mt-2 -translate-x-1/2\", layers.floating),\n className\n )}\n style={{\n ...(portal && !panelPosition ? { visibility: \"hidden\" } : undefined),\n ...(portal ? panelPosition : undefined),\n }}\n {...rest}\n >\n {children}\n </div>\n ) : null;\n\n return (\n <div ref={wrapperRef} className=\"relative inline-block\">\n {/* The trigger is rendered as-is inside a non-interactive wrapper so a\n caller can pass their own <button>/<a> without nesting interactive\n elements (which is invalid HTML). The click bubbles up from it. */}\n <span\n className=\"inline-flex cursor-pointer\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n >\n {trigger}\n </span>\n {portal && typeof document !== \"undefined\"\n ? panel && createPortal(panel, document.body)\n : panel}\n </div>\n );\n};\n","\"use client\";\nimport React, { useEffect } from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\nexport type DrawerPlacement = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport interface DrawerProps extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n onClose: () => void;\n /** Side the drawer slides in from. */\n placement?: DrawerPlacement;\n showCloseButton?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n /** Tailwind size class for the panel (width for left/right, height for top/bottom). */\n size?: string;\n}\n\nconst panelBaseByPlacement: Record<DrawerPlacement, string> = {\n left: \"top-0 left-0 h-full\",\n right: \"top-0 right-0 h-full\",\n top: \"top-0 left-0 w-full\",\n bottom: \"bottom-0 left-0 w-full\",\n};\n\nconst openTransform: Record<DrawerPlacement, string> = {\n left: \"translate-x-0\",\n right: \"translate-x-0\",\n top: \"translate-y-0\",\n bottom: \"translate-y-0\",\n};\n\nconst closedTransform: Record<DrawerPlacement, string> = {\n left: \"-translate-x-full\",\n right: \"translate-x-full\",\n top: \"-translate-y-full\",\n bottom: \"translate-y-full\",\n};\n\nconst defaultSize: Record<DrawerPlacement, string> = {\n left: \"w-80 max-w-full\",\n right: \"w-80 max-w-full\",\n top: \"h-80 max-h-full\",\n bottom: \"h-80 max-h-full\",\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n children,\n className,\n placement = \"right\",\n showCloseButton = true,\n closeOnBackdrop = true,\n closeOnEsc = true,\n size,\n ...rest\n}) => {\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen && closeOnEsc) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose, closeOnEsc]);\n\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n return (\n <div className={cn(\"drawer fixed inset-0\", layers.overlay)}>\n <div\n className=\"fixed inset-0 h-full w-full bg-black/50 backdrop-blur-sm\"\n onClick={closeOnBackdrop ? onClose : undefined}\n ></div>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={cn(\n \"fixed flex flex-col overflow-y-auto bg-white shadow-theme-lg transition-transform duration-300 ease-in-out dark:bg-gray-900 dark:text-white/90\",\n panelBaseByPlacement[placement],\n size ?? defaultSize[placement],\n isOpen ? openTransform[placement] : closedTransform[placement],\n className\n )}\n onClick={(e) => e.stopPropagation()}\n {...rest}\n >\n {showCloseButton && (\n <button\n onClick={onClose}\n aria-label=\"Close drawer\"\n className=\"absolute right-3 top-3 z-99 flex h-9.5 w-9.5 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white\"\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n {children}\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type ChipVariant = \"light\" | \"solid\";\nexport type ChipSize = \"sm\" | \"md\";\nexport type ChipColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\n\nexport interface ChipProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n ColorOverrideProps {\n variant?: ChipVariant;\n size?: ChipSize;\n color?: ChipColor;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n /** Rendered at the start of the chip, e.g. a small Avatar. */\n avatar?: React.ReactNode;\n /** When provided, renders a small close button that fires this callback. */\n onClose?: () => void;\n}\n\nconst sizeStyles: Record<ChipSize, string> = {\n sm: \"text-theme-xs\",\n md: \"text-sm\",\n};\n\nconst variants: Record<ChipVariant, Record<ChipColor, string>> = {\n light: {\n primary: \"bg-brand-50 text-brand-500 dark:bg-brand-500/15 dark:text-brand-400\",\n success: \"bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500\",\n error: \"bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500\",\n warning: \"bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400\",\n info: \"bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500\",\n light: \"bg-gray-100 text-gray-700 dark:bg-white/5 dark:text-white/80\",\n dark: \"bg-gray-500 text-white dark:bg-white/5 dark:text-white\",\n },\n solid: {\n primary: \"bg-brand-500 text-white dark:text-white\",\n success: \"bg-success-500 text-white dark:text-white\",\n error: \"bg-error-500 text-white dark:text-white\",\n warning: \"bg-warning-500 text-white dark:text-white\",\n info: \"bg-blue-light-500 text-white dark:text-white\",\n light: \"bg-gray-400 dark:bg-white/5 text-white dark:text-white/80\",\n dark: \"bg-gray-700 text-white dark:text-white\",\n },\n};\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = \"light\",\n color = \"primary\",\n size = \"md\",\n startIcon,\n endIcon,\n avatar,\n onClose,\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n return (\n <span\n className={cn(\n \"inline-flex items-center justify-center gap-1 rounded-full font-medium\",\n avatar ? \"py-0.5 pl-0.5 pr-2.5\" : \"px-2.5 py-0.5\",\n sizeStyles[size],\n variants[variant][color],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {avatar && <span className=\"flex items-center\">{avatar}</span>}\n {startIcon && <span className=\"flex items-center\">{startIcon}</span>}\n {children}\n {endIcon && <span className=\"flex items-center\">{endIcon}</span>}\n {onClose && (\n <button\n type=\"button\"\n aria-label=\"Remove\"\n onClick={onClose}\n className=\"ml-0.5 flex h-4 w-4 items-center justify-center rounded-full text-current opacity-70 transition hover:opacity-100 focus:outline-none\"\n >\n <X className=\"size-4\" strokeWidth={2} aria-hidden=\"true\" />\n </button>\n )}\n </span>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type ProgressColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\">,\n ColorOverrideProps {\n /** Current value (clamped between 0 and maxValue). */\n value?: number;\n /** Maximum value. Defaults to 100. */\n maxValue?: number;\n color?: ProgressColor;\n size?: ProgressSize;\n /** Optional label shown above the track. */\n label?: React.ReactNode;\n /** When true, shows the percentage (e.g. \"75%\") next to the label. */\n showValueLabel?: boolean;\n /** Animated, value-less progress. */\n isIndeterminate?: boolean;\n}\n\nconst sizeStyles: Record<ProgressSize, string> = {\n sm: \"h-1.5\",\n md: \"h-2.5\",\n lg: \"h-4\",\n};\n\nconst fillColors: Record<ProgressColor, string> = {\n primary: \"bg-brand-500\",\n success: \"bg-success-500\",\n error: \"bg-error-500\",\n warning: \"bg-warning-500\",\n info: \"bg-blue-light-500\",\n light: \"bg-gray-400\",\n dark: \"bg-gray-700 dark:bg-gray-300\",\n};\n\nconst indeterminateKeyframes = `@keyframes tdui-progress-indeterminate {\n 0% { left: -40%; width: 40%; }\n 50% { left: 30%; width: 60%; }\n 100% { left: 100%; width: 40%; }\n}`;\n\nexport const Progress: React.FC<ProgressProps> = ({\n value = 0,\n maxValue = 100,\n color = \"primary\",\n size = \"md\",\n label,\n showValueLabel = false,\n isIndeterminate = false,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const safeMax = maxValue <= 0 ? 100 : maxValue;\n const clamped = Math.min(Math.max(value, 0), safeMax);\n const percent = Math.round((clamped / safeMax) * 100);\n\n return (\n <div className={cn(\"w-full\", className)} {...rest}>\n {(label || showValueLabel) && (\n <div className=\"mb-1.5 flex items-center justify-between\">\n {label && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-400\">\n {label}\n </span>\n )}\n {showValueLabel && !isIndeterminate && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-400\">\n {percent}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={isIndeterminate ? undefined : clamped}\n className={cn(\n \"relative w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-800\",\n sizeStyles[size]\n )}\n style={styleOverride({ bgColor, borderColor })}\n >\n {isIndeterminate ? (\n <>\n <style>{indeterminateKeyframes}</style>\n <div\n className={cn(\"absolute top-0 h-full rounded-full\", fillColors[color])}\n style={{\n animation:\n \"tdui-progress-indeterminate 1.5s ease-in-out infinite\",\n ...(textColor ? { backgroundColor: textColor } : {}),\n ...style,\n }}\n />\n </>\n ) : (\n <div\n className={cn(\n \"h-full rounded-full transition-all duration-300\",\n fillColors[color]\n )}\n style={{\n width: `${percent}%`,\n ...(textColor ? { backgroundColor: textColor } : {}),\n ...style,\n }}\n />\n )}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type PollResultsColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\nexport type PollResultsSize = \"sm\" | \"md\" | \"lg\";\nexport type PollResultsTextSize = React.CSSProperties[\"fontSize\"];\nexport type PollResultsTextColor = React.CSSProperties[\"color\"];\nexport type PollResultsTextWeight = React.CSSProperties[\"fontWeight\"];\n\nexport interface PollResultsSeries {\n label?: React.ReactNode;\n value: number;\n color?: PollResultsColor;\n fillColor?: string;\n ariaLabel?: string;\n}\n\nexport interface PollResultsOption {\n label: React.ReactNode;\n value?: number;\n color?: PollResultsColor;\n fillColor?: string;\n ariaLabel?: string;\n series?: PollResultsSeries[];\n}\n\nexport interface PollResultsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\">,\n ColorOverrideProps {\n options: PollResultsOption[];\n maxValue?: number;\n size?: PollResultsSize;\n color?: PollResultsColor;\n trackColor?: string;\n showValueLabel?: boolean;\n showSeriesLabels?: boolean;\n valueFormatter?: (value: number, percent: number) => React.ReactNode;\n labelTextSize?: PollResultsTextSize;\n labelTextColor?: PollResultsTextColor;\n labelTextWeight?: PollResultsTextWeight;\n valueTextSize?: PollResultsTextSize;\n valueTextColor?: PollResultsTextColor;\n valueTextWeight?: PollResultsTextWeight;\n seriesLabelTextSize?: PollResultsTextSize;\n seriesLabelTextColor?: PollResultsTextColor;\n seriesLabelTextWeight?: PollResultsTextWeight;\n seriesValueTextSize?: PollResultsTextSize;\n seriesValueTextColor?: PollResultsTextColor;\n seriesValueTextWeight?: PollResultsTextWeight;\n}\n\nconst trackSizes: Record<PollResultsSize, string> = {\n sm: \"h-2.5\",\n md: \"h-3\",\n lg: \"h-4\",\n};\n\nconst colorStyles: Record<PollResultsColor, string> = {\n primary: \"bg-brand-500\",\n success: \"bg-success-500\",\n error: \"bg-error-500\",\n warning: \"bg-warning-500\",\n info: \"bg-blue-light-500\",\n light: \"bg-gray-400\",\n dark: \"bg-gray-700 dark:bg-gray-300\",\n};\n\nconst defaultColorCycle: PollResultsColor[] = [\n \"primary\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"dark\",\n];\n\nconst defaultSeriesColorCycle: PollResultsColor[] = [\"primary\", \"success\"];\n\nconst clampValue = (value: number, maxValue: number) => {\n return Math.min(Math.max(value, 0), maxValue);\n};\n\nconst toPercent = (value: number, maxValue: number) => {\n return Math.round((clampValue(value, maxValue) / maxValue) * 100);\n};\n\nconst nodeToLabel = (node: React.ReactNode) => {\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node);\n }\n\n return undefined;\n};\n\nconst defaultValueFormatter = (_value: number, percent: number) => `${percent}%`;\n\nconst textStyle = ({\n size,\n color,\n weight,\n}: {\n size?: PollResultsTextSize;\n color?: PollResultsTextColor;\n weight?: PollResultsTextWeight;\n}) => ({\n ...(size ? { fontSize: size } : {}),\n ...(color ? { color } : {}),\n ...(weight ? { fontWeight: weight } : {}),\n});\n\nexport const PollResults: React.FC<PollResultsProps> = ({\n options,\n maxValue = 100,\n size = \"md\",\n color = \"primary\",\n trackColor,\n showValueLabel = true,\n showSeriesLabels = true,\n valueFormatter = defaultValueFormatter,\n labelTextSize,\n labelTextColor,\n labelTextWeight,\n valueTextSize,\n valueTextColor,\n valueTextWeight,\n seriesLabelTextSize,\n seriesLabelTextColor,\n seriesLabelTextWeight,\n seriesValueTextSize,\n seriesValueTextColor,\n seriesValueTextWeight,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const safeMax = maxValue <= 0 ? 100 : maxValue;\n const optionLabelStyle = textStyle({\n size: labelTextSize,\n color: labelTextColor,\n weight: labelTextWeight,\n });\n const optionValueStyle = textStyle({\n size: valueTextSize,\n color: valueTextColor,\n weight: valueTextWeight,\n });\n const groupedLabelStyle = textStyle({\n size: seriesLabelTextSize,\n color: seriesLabelTextColor,\n weight: seriesLabelTextWeight,\n });\n const groupedValueStyle = textStyle({\n size: seriesValueTextSize ?? valueTextSize,\n color: seriesValueTextColor ?? valueTextColor,\n weight: seriesValueTextWeight ?? valueTextWeight,\n });\n\n return (\n <div\n className={cn(\"w-full space-y-5 text-gray-800 dark:text-white/90\", className)}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {options.map((option, optionIndex) => {\n const optionText = nodeToLabel(option.label);\n const series = option.series?.length\n ? option.series\n : [\n {\n value: option.value ?? 0,\n color: option.color ?? defaultColorCycle[optionIndex % defaultColorCycle.length] ?? color,\n fillColor: option.fillColor,\n ariaLabel: option.ariaLabel,\n },\n ];\n const isGrouped = series.length > 1;\n const singlePercent = toPercent(series[0]?.value ?? 0, safeMax);\n\n return (\n <div key={`${optionText ?? \"poll-option\"}-${optionIndex}`}>\n <div className=\"mb-2 flex items-center justify-between gap-4\">\n <span\n className=\"min-w-0 break-words text-xl font-semibold leading-snug text-gray-800 dark:text-white/90\"\n style={optionLabelStyle}\n >\n {option.label}\n </span>\n {!isGrouped && showValueLabel && (\n <span\n className=\"shrink-0 text-xl font-semibold leading-snug text-gray-600 dark:text-gray-300\"\n style={optionValueStyle}\n >\n {valueFormatter(series[0]?.value ?? 0, singlePercent)}\n </span>\n )}\n </div>\n\n <div className={cn(\"flex flex-col\", isGrouped ? \"gap-2.5\" : \"gap-0\")}>\n {series.map((entry, seriesIndex) => {\n const percent = toPercent(entry.value, safeMax);\n const fillColor = entry.fillColor;\n const entryColor =\n entry.color ??\n (isGrouped\n ? defaultSeriesColorCycle[seriesIndex % defaultSeriesColorCycle.length]\n : option.color ?? defaultColorCycle[optionIndex % defaultColorCycle.length]) ??\n color;\n const entryLabel = nodeToLabel(entry.label);\n const ariaLabel =\n entry.ariaLabel ??\n [optionText, isGrouped ? entryLabel : undefined]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div key={`${entryLabel ?? \"series\"}-${seriesIndex}`}>\n {isGrouped && (showSeriesLabels || showValueLabel) && (\n <div className=\"mb-1.5 flex items-center justify-between gap-3\">\n {showSeriesLabels ? (\n <span\n className=\"min-w-0 break-words text-xs font-medium text-gray-500 dark:text-gray-400\"\n style={groupedLabelStyle}\n >\n {entry.label}\n </span>\n ) : (\n <span />\n )}\n {showValueLabel && (\n <span\n className=\"shrink-0 text-xs font-semibold text-gray-600 dark:text-gray-300\"\n style={groupedValueStyle}\n >\n {valueFormatter(entry.value, percent)}\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={ariaLabel || undefined}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={clampValue(entry.value, safeMax)}\n className={cn(\n \"relative w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800\",\n trackSizes[size]\n )}\n style={trackColor ? { backgroundColor: trackColor } : undefined}\n >\n <div\n className={cn(\n \"h-full rounded-full transition-all duration-300\",\n fillColor ? undefined : colorStyles[entryColor]\n )}\n style={{\n width: `${percent}%`,\n ...(fillColor ? { backgroundColor: fillColor } : {}),\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type SpinnerColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SpinnerProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n ColorOverrideProps {\n size?: SpinnerSize;\n color?: SpinnerColor;\n /** Optional text rendered beside the spinner (also used as aria-label). */\n label?: React.ReactNode;\n}\n\nconst sizeStyles: Record<SpinnerSize, string> = {\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-[3px]\",\n};\n\nconst colorStyles: Record<SpinnerColor, string> = {\n primary: \"text-brand-500\",\n success: \"text-success-500\",\n error: \"text-error-500\",\n warning: \"text-warning-500\",\n info: \"text-blue-light-500\",\n light: \"text-gray-400\",\n dark: \"text-gray-700 dark:text-gray-300\",\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = \"md\",\n color = \"primary\",\n label,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const accessibleLabel = typeof label === \"string\" ? label : \"Loading\";\n return (\n <span\n role=\"status\"\n aria-label={accessibleLabel}\n className={cn(\"inline-flex items-center gap-2\", className)}\n style={{ ...styleOverride({ bgColor, borderColor }), ...style }}\n {...rest}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n \"inline-block animate-spin rounded-full border-current border-t-transparent\",\n sizeStyles[size],\n !textColor && colorStyles[color]\n )}\n style={textColor ? { color: textColor } : undefined}\n />\n {label && (\n <span className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\n {label}\n </span>\n )}\n </span>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, renders children normally with no shimmer. */\n isLoaded?: boolean;\n /** Convenience sizing (any CSS length). Falls back to className. */\n width?: string | number;\n height?: string | number;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n isLoaded = false,\n width,\n height,\n className,\n children,\n style,\n ...rest\n}) => {\n if (isLoaded) {\n return <>{children}</>;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"animate-pulse rounded-lg bg-gray-200 dark:bg-gray-800\",\n className\n )}\n style={{ width, height, ...style }}\n {...rest}\n >\n {/* Keep children in the tree (invisible) so layout can be reserved. */}\n <span className=\"invisible\">{children}</span>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type CodeColor =\n | \"primary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"default\";\n\nexport type CodeSize = \"sm\" | \"md\";\n\nexport interface CodeProps\n extends Omit<React.HTMLAttributes<HTMLElement>, \"color\">,\n ColorOverrideProps {\n color?: CodeColor;\n size?: CodeSize;\n}\n\nconst sizeClasses: Record<CodeSize, string> = {\n sm: \"text-xs px-1 py-0.5\",\n md: \"text-sm px-1.5 py-0.5\",\n};\n\nconst colorClasses: Record<CodeColor, string> = {\n primary: \"bg-brand-50 text-brand-600 dark:bg-brand-500/15 dark:text-brand-400\",\n success:\n \"bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500\",\n error: \"bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500\",\n warning:\n \"bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400\",\n info: \"bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500\",\n default: \"bg-gray-100 text-gray-700 dark:bg-white/5 dark:text-white/80\",\n};\n\nexport const Code: React.FC<CodeProps> = ({\n color = \"default\",\n size = \"md\",\n className,\n children,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n return (\n <code\n className={cn(\n \"inline-flex items-center rounded-md font-mono font-normal\",\n sizeClasses[size],\n colorClasses[color],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {children}\n </code>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { Check, Copy } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type SnippetSize = \"sm\" | \"md\";\n\nexport interface SnippetProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\" | \"children\">,\n ColorOverrideProps {\n /** Code content as a string (supports \"\\n\") or an array of lines. */\n code?: string | string[];\n /** Alternative to `code`. */\n children?: string | string[];\n /** Prefix rendered before each line (e.g. \"$ \"). */\n symbol?: string;\n /** Hide the copy-to-clipboard button. */\n hideCopyButton?: boolean;\n /** Hide the line prefix symbol. */\n hideSymbol?: boolean;\n size?: SnippetSize;\n}\n\nconst sizeClasses: Record<SnippetSize, string> = {\n sm: \"text-xs p-3\",\n md: \"text-sm p-4\",\n};\n\nexport const Snippet: React.FC<SnippetProps> = ({\n code,\n children,\n symbol = \"\",\n hideCopyButton = false,\n hideSymbol = false,\n size = \"md\",\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const [copied, setCopied] = useState(false);\n\n const raw = code ?? children ?? \"\";\n const lines = Array.isArray(raw) ? raw : raw.split(\"\\n\");\n const text = lines.join(\"\\n\");\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n } catch {\n // clipboard not available — silently ignore\n }\n };\n\n return (\n <div\n className={cn(\n \"relative rounded-xl border border-gray-200 bg-gray-50 font-mono text-gray-800 dark:border-gray-800 dark:bg-white/[0.03] dark:text-white/90\",\n sizeClasses[size],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n <pre className={cn(\"overflow-x-auto\", !hideCopyButton && \"pr-8\")}>\n <code>\n {lines.map((line, i) => (\n <span key={i} className=\"block whitespace-pre\">\n {!hideSymbol && symbol && (\n <span className=\"select-none text-gray-400 dark:text-gray-500\">\n {symbol}\n </span>\n )}\n {line}\n </span>\n ))}\n </code>\n </pre>\n {!hideCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={copied ? \"Copied\" : \"Copy to clipboard\"}\n className={cn(\n \"absolute right-2 top-2 inline-flex h-7 w-7 items-center justify-center rounded-lg text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:text-gray-400 dark:hover:bg-white/10 dark:hover:text-white/90\",\n copied && \"text-success-500 dark:text-success-500\"\n )}\n >\n {copied ? (\n <Check className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Copy className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nexport const Label: React.FC<LabelProps> = ({ children, className, ...rest }) => {\n return (\n <label\n className={cn(\n \"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\",\n className\n )}\n {...rest}\n >\n {children}\n </label>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TextAreaProps {\n placeholder?: string;\n rows?: number;\n value?: string;\n onChange?: (value: string) => void;\n className?: string;\n disabled?: boolean;\n error?: boolean;\n hint?: string;\n}\n\nexport const TextArea: React.FC<TextAreaProps> = ({\n placeholder = \"Enter your message\",\n rows = 3,\n value = \"\",\n onChange,\n className,\n disabled = false,\n error = false,\n hint = \"\",\n}) => {\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (onChange) {\n onChange(e.target.value);\n }\n };\n\n const stateClass = disabled\n ? \"bg-gray-100 opacity-50 text-gray-500 border-gray-300 cursor-not-allowed dark:bg-gray-800 dark:text-gray-400 dark:border-gray-700\"\n : error\n ? \"bg-white text-gray-400 border-gray-300 focus:border-error-300 focus:ring-3 focus:ring-error-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus:border-error-800\"\n : \"bg-white text-gray-400 border-gray-300 focus:border-brand-300 focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus:border-brand-800\";\n\n return (\n <div className=\"relative\">\n <textarea\n placeholder={placeholder}\n rows={rows}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n className={cn(\n \"w-full rounded-lg border px-4 py-2.5 text-sm shadow-theme-xs focus:outline-hidden\",\n stateClass,\n className\n )}\n />\n {hint && (\n <p\n className={cn(\n \"mt-2 text-sm\",\n error ? \"text-error-500\" : \"text-gray-500 dark:text-gray-400\"\n )}\n >\n {hint}\n </p>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CheckboxProps {\n label?: string;\n checked: boolean;\n className?: string;\n id?: string;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n /** Override the checked accent color (maps to inline accentColor). */\n checkedColor?: string;\n}\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n label,\n checked,\n id,\n onChange,\n className,\n disabled = false,\n checkedColor,\n}) => {\n return (\n <label\n className={cn(\n \"flex items-center space-x-3 group cursor-pointer\",\n disabled && \"cursor-not-allowed opacity-60\"\n )}\n >\n <div className=\"relative w-5 h-5\">\n <input\n id={id}\n type=\"checkbox\"\n className={cn(\n \"w-5 h-5 appearance-none cursor-pointer dark:border-gray-700 border border-gray-300 checked:border-transparent rounded-md checked:bg-brand-500 disabled:opacity-60\",\n className\n )}\n checked={checked}\n onChange={(e) => onChange(e.target.checked)}\n disabled={disabled}\n style={checkedColor ? { accentColor: checkedColor } : undefined}\n />\n {checked && (\n <Check\n className=\"pointer-events-none absolute left-1/2 top-1/2 size-4 -translate-x-1/2 -translate-y-1/2 text-white\"\n strokeWidth={3}\n aria-hidden=\"true\"\n />\n )}\n {disabled && (\n <Check\n className=\"pointer-events-none absolute left-1/2 top-1/2 size-4 -translate-x-1/2 -translate-y-1/2 text-gray-200\"\n strokeWidth={3}\n aria-hidden=\"true\"\n />\n )}\n </div>\n {label && (\n <span className=\"text-sm font-medium text-gray-800 dark:text-gray-200\">\n {label}\n </span>\n )}\n </label>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface RadioProps {\n id: string;\n name: string;\n value: string;\n checked: boolean;\n label: string;\n onChange: (value: string) => void;\n className?: string;\n disabled?: boolean;\n}\n\nexport const Radio: React.FC<RadioProps> = ({\n id,\n name,\n value,\n checked,\n label,\n onChange,\n className,\n disabled = false,\n}) => {\n return (\n <label\n htmlFor={id}\n className={cn(\n \"relative flex cursor-pointer select-none items-center gap-3 text-sm font-medium\",\n disabled\n ? \"text-gray-300 dark:text-gray-600 cursor-not-allowed\"\n : \"text-gray-700 dark:text-gray-400\",\n className\n )}\n >\n <input\n id={id}\n name={name}\n type=\"radio\"\n value={value}\n checked={checked}\n onChange={() => !disabled && onChange(value)}\n className=\"sr-only\"\n disabled={disabled}\n />\n <span\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded-full border-[1.25px]\",\n checked\n ? \"border-brand-500 bg-brand-500\"\n : \"bg-transparent border-gray-300 dark:border-gray-700\",\n disabled &&\n \"bg-gray-100 dark:bg-gray-700 border-gray-200 dark:border-gray-700\"\n )}\n >\n <span\n className={cn(\n \"h-2 w-2 rounded-full bg-white\",\n checked ? \"block\" : \"hidden\"\n )}\n ></span>\n </span>\n {label}\n </label>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface RadioSmProps {\n id: string;\n name: string;\n value: string;\n checked: boolean;\n label: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport const RadioSm: React.FC<RadioSmProps> = ({\n id,\n name,\n value,\n checked,\n label,\n onChange,\n className,\n}) => {\n return (\n <label\n htmlFor={id}\n className={cn(\n \"flex cursor-pointer select-none items-center text-sm text-gray-500 dark:text-gray-400\",\n className\n )}\n >\n <span className=\"relative\">\n {/* Hidden Input */}\n <input\n type=\"radio\"\n id={id}\n name={name}\n value={value}\n checked={checked}\n onChange={() => onChange(value)}\n className=\"sr-only\"\n />\n {/* Styled Radio Circle */}\n <span\n className={cn(\n \"mr-2 flex h-4 w-4 items-center justify-center rounded-full border\",\n checked\n ? \"border-brand-500 bg-brand-500\"\n : \"bg-transparent border-gray-300 dark:border-gray-700\"\n )}\n >\n {/* Inner Dot */}\n <span\n className={cn(\n \"h-1.5 w-1.5 rounded-full\",\n checked ? \"bg-white\" : \"bg-white dark:bg-[#1e2636]\"\n )}\n ></span>\n </span>\n </span>\n {label}\n </label>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SwitchProps\n extends Omit<React.LabelHTMLAttributes<HTMLLabelElement>, \"onChange\" | \"color\"> {\n label?: React.ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n color?: \"blue\" | \"gray\";\n}\n\nexport const Switch: React.FC<SwitchProps> = ({\n label,\n checked,\n defaultChecked = false,\n disabled = false,\n onChange,\n color = \"blue\",\n className,\n onClick,\n onKeyDown,\n \"aria-label\": ariaLabel,\n ...rest\n}) => {\n const isControlled = checked !== undefined;\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const isChecked = isControlled ? checked : internalChecked;\n\n const handleToggle = () => {\n if (disabled) return;\n const newCheckedState = !isChecked;\n if (!isControlled) {\n setInternalChecked(newCheckedState);\n }\n if (onChange) {\n onChange(newCheckedState);\n }\n };\n\n const handleClick = (event: React.MouseEvent<HTMLLabelElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleToggle();\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLLabelElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n if (event.key === \" \" || event.key === \"Enter\") {\n event.preventDefault();\n handleToggle();\n }\n };\n\n // Match the neutral border used by Input, Select, and outline buttons.\n // `ring-inset` keeps the box size identical so the knob doesn't shift.\n const offTrack =\n \"bg-gray-200 ring-1 ring-inset ring-gray-300 dark:bg-white/10 dark:ring-gray-700\";\n\n const switchColors =\n color === \"blue\"\n ? {\n background: isChecked ? \"bg-brand-500 \" : offTrack, // Blue version\n knob: isChecked\n ? \"translate-x-full bg-white\"\n : \"translate-x-0 bg-white\",\n }\n : {\n background: isChecked\n ? \"bg-gray-800 dark:bg-white/10\"\n : offTrack, // Gray version\n knob: isChecked\n ? \"translate-x-full bg-white\"\n : \"translate-x-0 bg-white\",\n };\n\n const hasLabel = label !== undefined && label !== null && label !== \"\";\n\n return (\n <label\n role=\"switch\"\n aria-checked={isChecked}\n aria-disabled={disabled || undefined}\n aria-label={ariaLabel ?? (!hasLabel ? \"Toggle switch\" : undefined)}\n tabIndex={disabled ? -1 : 0}\n className={cn(\n \"flex cursor-pointer select-none items-center gap-3 text-sm font-medium\",\n disabled ? \"text-gray-400\" : \"text-gray-700 dark:text-gray-400\",\n className\n )}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n <div className=\"relative\">\n <div\n className={cn(\n \"block transition duration-150 ease-linear h-6 w-11 rounded-full\",\n disabled\n ? \"bg-gray-100 pointer-events-none dark:bg-gray-800\"\n : switchColors.background\n )}\n ></div>\n <div\n className={cn(\n \"absolute left-0.5 top-0.5 h-5 w-5 rounded-full shadow-theme-sm duration-150 ease-linear transform\",\n switchColors.knob\n )}\n ></div>\n </div>\n {hasLabel && <span>{label}</span>}\n </label>\n );\n};\n","\"use client\";\nimport React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n icon?: React.ReactNode;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n placeholder?: string;\n onChange: (value: string) => void;\n className?: string;\n defaultValue?: string;\n disabled?: boolean;\n /** Render menu under document.body to avoid clipping inside tables/cards. Default: true. */\n portal?: boolean;\n}\n\n/**\n * A custom single-select dropdown (no native `<select>`), so the menu is fully\n * styleable and theme-aware. The selected option shows a check mark.\n */\nexport const Select: React.FC<SelectProps> = ({\n options,\n placeholder = \"Select an option\",\n onChange,\n className,\n defaultValue = \"\",\n disabled = false,\n portal = true,\n}) => {\n const [selectedValue, setSelectedValue] = useState<string>(defaultValue);\n const [isOpen, setIsOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n const [menuPosition, setMenuPosition] = useState<React.CSSProperties>();\n\n // Close on outside click and on Escape.\n useEffect(() => {\n if (!isOpen) return;\n const onPointerDown = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n rootRef.current &&\n !rootRef.current.contains(target) &&\n !menuRef.current?.contains(target)\n ) {\n setIsOpen(false);\n }\n };\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setIsOpen(false);\n };\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen]);\n\n useLayoutEffect(() => {\n if (!isOpen || !portal) return;\n\n const updatePosition = () => {\n const trigger = triggerRef.current;\n const menu = menuRef.current;\n if (!trigger || !menu) return;\n\n const rect = trigger.getBoundingClientRect();\n const menuHeight = menu.offsetHeight;\n const viewportPadding = 8;\n const gap = 6;\n const width = rect.width;\n const fitsBelow =\n window.innerHeight - rect.bottom - gap >= menuHeight + viewportPadding;\n const top = fitsBelow\n ? rect.bottom + gap\n : Math.max(viewportPadding, rect.top - gap - menuHeight);\n const left = Math.min(\n Math.max(viewportPadding, rect.left),\n window.innerWidth - width - viewportPadding\n );\n\n setMenuPosition({ top, left, width });\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [isOpen, portal]);\n\n const toggleOpen = () => {\n if (!disabled) setIsOpen((prev) => !prev);\n };\n\n const handleSelect = (value: string) => {\n setSelectedValue(value);\n onChange(value);\n setIsOpen(false);\n };\n\n const selectedOption = options.find((option) => option.value === selectedValue);\n\n return (\n <div ref={rootRef} className={cn(\"relative w-full\", className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={toggleOpen}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n className={cn(\n \"flex h-11 w-full items-center justify-between rounded-lg border border-gray-300 bg-white px-4 py-2.5 text-left text-sm shadow-theme-xs transition focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:focus:border-brand-800\",\n disabled && \"cursor-not-allowed opacity-50\",\n selectedOption\n ? \"text-gray-800 dark:text-white/90\"\n : \"text-gray-400 dark:text-gray-400\"\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n {selectedOption?.icon && (\n <span\n aria-hidden=\"true\"\n className=\"flex h-5 w-5 shrink-0 items-center justify-center [&>svg]:size-4\"\n >\n {selectedOption.icon}\n </span>\n )}\n <span className=\"truncate\">{selectedOption?.label ?? placeholder}</span>\n </span>\n <ChevronDown\n className={cn(\n \"ml-2 size-4 shrink-0 stroke-current text-gray-500 transition-transform dark:text-gray-400\",\n isOpen && \"rotate-180\"\n )}\n aria-hidden=\"true\"\n />\n </button>\n\n {isOpen && (() => {\n const menu = (\n <ul\n ref={menuRef}\n role=\"listbox\"\n className={cn(\n \"max-h-60 overflow-y-auto rounded-lg border border-gray-200 bg-white py-1 shadow-theme-lg dark:border-gray-800 dark:bg-gray-900\",\n portal\n ? cn(\"fixed\", layers.portal)\n : cn(\"absolute left-0 top-full mt-1.5 w-full\", layers.menu)\n )}\n style={{\n ...(portal && !menuPosition ? { visibility: \"hidden\" } : undefined),\n ...(portal ? menuPosition : undefined),\n }}\n >\n {options.map((option) => {\n const isSelected = option.value === selectedValue;\n return (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleSelect(option.value)}\n className={cn(\n \"flex cursor-pointer items-center justify-between px-4 py-2 text-sm transition hover:bg-gray-50 dark:hover:bg-white/5\",\n isSelected\n ? \"bg-brand-50 font-medium text-brand-600 dark:bg-brand-500/15 dark:text-brand-400\"\n : \"text-gray-700 dark:text-gray-300\"\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n {option.icon && (\n <span\n aria-hidden=\"true\"\n className=\"flex h-5 w-5 shrink-0 items-center justify-center [&>svg]:size-4\"\n >\n {option.icon}\n </span>\n )}\n <span className=\"truncate\">{option.label}</span>\n </span>\n {isSelected && (\n <Check\n className=\"ml-2 size-4 shrink-0 stroke-current\"\n aria-hidden=\"true\"\n />\n )}\n </li>\n );\n })}\n </ul>\n );\n\n if (!portal || typeof document === \"undefined\") return menu;\n return createPortal(menu, document.body);\n })()}\n </div>\n );\n};\n","\"use client\";\nimport React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\ninterface Option {\n value: string;\n text: string;\n selected: boolean;\n}\n\nexport interface MultiSelectProps {\n label: string;\n options: Option[];\n defaultSelected?: string[];\n onChange?: (selected: string[]) => void;\n disabled?: boolean;\n /** Render menu under document.body to avoid clipping inside tables/cards. Default: true. */\n portal?: boolean;\n}\n\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n label,\n options,\n defaultSelected = [],\n onChange,\n disabled = false,\n portal = true,\n}) => {\n const [selectedOptions, setSelectedOptions] =\n useState<string[]>(defaultSelected);\n const [isOpen, setIsOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [menuPosition, setMenuPosition] = useState<React.CSSProperties>();\n\n useEffect(() => {\n if (!isOpen) return;\n const onPointerDown = (event: MouseEvent) => {\n const target = event.target as Node;\n if (\n rootRef.current &&\n !rootRef.current.contains(target) &&\n !menuRef.current?.contains(target)\n ) {\n setIsOpen(false);\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setIsOpen(false);\n };\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen]);\n\n useLayoutEffect(() => {\n if (!isOpen || !portal) return;\n\n const updatePosition = () => {\n const trigger = triggerRef.current;\n const menu = menuRef.current;\n if (!trigger || !menu) return;\n\n const rect = trigger.getBoundingClientRect();\n const menuHeight = menu.offsetHeight;\n const viewportPadding = 8;\n const gap = 6;\n const width = rect.width;\n const fitsBelow =\n window.innerHeight - rect.bottom - gap >= menuHeight + viewportPadding;\n const top = fitsBelow\n ? rect.bottom + gap\n : Math.max(viewportPadding, rect.top - gap - menuHeight);\n const left = Math.min(\n Math.max(viewportPadding, rect.left),\n window.innerWidth - width - viewportPadding\n );\n\n setMenuPosition({ top, left, width });\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [isOpen, portal]);\n\n const toggleDropdown = () => {\n if (disabled) return;\n setIsOpen((prev) => !prev);\n };\n\n const handleSelect = (optionValue: string) => {\n const newSelectedOptions = selectedOptions.includes(optionValue)\n ? selectedOptions.filter((value) => value !== optionValue)\n : [...selectedOptions, optionValue];\n\n setSelectedOptions(newSelectedOptions);\n if (onChange) onChange(newSelectedOptions);\n };\n\n const removeOption = (_index: number, value: string) => {\n const newSelectedOptions = selectedOptions.filter((opt) => opt !== value);\n setSelectedOptions(newSelectedOptions);\n if (onChange) onChange(newSelectedOptions);\n };\n\n const selectedValuesText = selectedOptions.map(\n (value) => options.find((option) => option.value === value)?.text || \"\"\n );\n\n return (\n <div ref={rootRef} className=\"w-full\">\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n {label}\n </label>\n\n <div className=\"relative inline-block w-full\">\n <div className=\"relative flex flex-col items-center\">\n <div onClick={toggleDropdown} className=\"w-full\">\n <div\n ref={triggerRef}\n className=\"flex h-11 items-center overflow-hidden rounded-lg border border-gray-300 bg-white px-4 py-1.5 shadow-theme-xs outline-hidden transition focus:border-brand-300 focus:shadow-focus-ring dark:border-gray-700 dark:bg-gray-900 dark:focus:border-brand-300\"\n >\n <div className=\"flex flex-wrap flex-auto gap-2\">\n {selectedValuesText.length > 0 ? (\n selectedValuesText.map((text, index) => (\n <div\n key={index}\n className=\"group flex items-center justify-center rounded-full border-[0.7px] border-transparent bg-gray-100 py-1 pl-2.5 pr-2 text-sm text-gray-800 hover:border-gray-200 dark:bg-gray-800 dark:text-white/90 dark:hover:border-gray-800\"\n >\n <span className=\"flex-initial max-w-full\">{text}</span>\n <div className=\"flex flex-row-reverse flex-auto\">\n <div\n onClick={() =>\n removeOption(index, selectedOptions[index])\n }\n className=\"pl-2 text-gray-500 cursor-pointer group-hover:text-gray-400 dark:text-gray-400\"\n >\n <X className=\"size-4\" role=\"button\" aria-hidden=\"true\" />\n </div>\n </div>\n </div>\n ))\n ) : (\n <input\n placeholder=\"Select option\"\n className=\"w-full h-full p-1 pr-2 text-sm bg-transparent border-0 outline-hidden appearance-none placeholder:text-gray-800 focus:border-0 focus:outline-hidden focus:ring-0 dark:placeholder:text-white/90\"\n readOnly\n value=\"Select option\"\n />\n )}\n </div>\n <div className=\"flex items-center py-1 pl-1 pr-1 w-7\">\n <button\n type=\"button\"\n onClick={toggleDropdown}\n className=\"w-5 h-5 text-gray-700 outline-hidden cursor-pointer focus:outline-hidden dark:text-gray-400\"\n >\n <ChevronDown\n className={`size-4 stroke-current ${isOpen ? \"rotate-180\" : \"\"}`}\n aria-hidden=\"true\"\n />\n </button>\n </div>\n </div>\n </div>\n\n {isOpen && (() => {\n const menu = (\n <div\n ref={menuRef}\n className={cn(\n \"max-h-select overflow-y-auto rounded-lg bg-white shadow-sm dark:bg-gray-900\",\n portal\n ? cn(\"fixed\", layers.portal)\n : cn(\"absolute left-0 top-full mt-1.5 w-full\", layers.menu)\n )}\n style={{\n ...(portal && !menuPosition ? { visibility: \"hidden\" } : undefined),\n ...(portal ? menuPosition : undefined),\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex flex-col\">\n {options.map((option, index) => {\n const isSelected = selectedOptions.includes(option.value);\n return (\n <div key={index}>\n <div\n className={`w-full cursor-pointer rounded-t border-b border-gray-200 hover:bg-brand-500/5 dark:border-gray-800`}\n onClick={() => handleSelect(option.value)}\n >\n <div\n className={`relative flex w-full items-center justify-between p-2 pl-2 ${\n isSelected ? \"bg-brand-500/10\" : \"\"\n }`}\n >\n <div\n className={`mx-2 leading-6 ${\n isSelected\n ? \"font-medium text-brand-600 dark:text-brand-400\"\n : \"text-gray-800 dark:text-white/90\"\n }`}\n >\n {option.text}\n </div>\n {isSelected && (\n <Check\n className=\"mr-2 size-4 shrink-0 stroke-current text-brand-500\"\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n\n if (!portal || typeof document === \"undefined\") return menu;\n return createPortal(menu, document.body);\n })()}\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface FileInputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nexport const FileInput: React.FC<FileInputProps> = ({ className, ...rest }) => {\n return (\n <input\n type=\"file\"\n className={cn(\n \"focus:border-ring-brand-300 h-11 w-full overflow-hidden rounded-lg border border-gray-300 bg-white text-sm text-gray-500 shadow-theme-xs transition-colors file:mr-5 file:border-collapse file:cursor-pointer file:rounded-l-lg file:border-0 file:border-r file:border-solid file:border-gray-200 file:bg-gray-50 file:py-3 file:pl-3.5 file:pr-3 file:text-sm file:text-gray-700 placeholder:text-gray-400 hover:file:bg-gray-100 focus:outline-hidden focus:file:ring-brand-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-400 dark:text-white/90 dark:file:border-gray-800 dark:file:bg-white/[0.03] dark:file:text-gray-400 dark:placeholder:text-gray-400\",\n className\n )}\n {...rest}\n />\n );\n};\n","\"use client\";\nimport React, { useEffect } from \"react\";\nimport flatpickr from \"flatpickr\";\nimport \"flatpickr/dist/flatpickr.css\";\nimport { Calendar } from \"lucide-react\";\nimport { Label } from \"./Label\";\n\ntype Hook = flatpickr.Options.Hook;\ntype DateOption = flatpickr.Options.DateOption;\n\nexport interface DatePickerProps {\n id: string;\n mode?: \"single\" | \"multiple\" | \"range\" | \"time\";\n onChange?: Hook | Hook[];\n defaultDate?: DateOption;\n label?: string;\n placeholder?: string;\n}\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n id,\n mode,\n onChange,\n label,\n defaultDate,\n placeholder,\n}) => {\n useEffect(() => {\n const flatPickr = flatpickr(`#${id}`, {\n mode: mode || \"single\",\n appendTo: document.body,\n monthSelectorType: \"static\",\n dateFormat: \"Y-m-d\",\n defaultDate,\n onChange,\n });\n\n return () => {\n if (!Array.isArray(flatPickr)) {\n flatPickr.destroy();\n }\n };\n }, [mode, onChange, id, defaultDate]);\n\n return (\n <div>\n {label && <Label htmlFor={id}>{label}</Label>}\n\n <div className=\"relative\">\n <input\n id={id}\n placeholder={placeholder}\n className=\"h-11 w-full rounded-lg border appearance-none pl-4 pr-11 py-2.5 text-sm shadow-theme-xs placeholder:text-gray-400 focus:outline-hidden focus:ring-3 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 bg-white text-gray-800 border-gray-300 focus:border-brand-300 focus:ring-brand-500/20 dark:border-gray-700 dark:focus:border-brand-800\"\n />\n\n <span className=\"absolute text-gray-500 -translate-y-1/2 pointer-events-none right-3 top-1/2 dark:text-gray-400\">\n <Calendar className=\"size-4\" aria-hidden=\"true\" />\n </span>\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport flatpickr from \"flatpickr\";\nimport \"flatpickr/dist/flatpickr.css\";\nimport { Calendar, Clock } from \"lucide-react\";\nimport { Label } from \"./Label\";\n\ntype DateOption = flatpickr.Options.DateOption;\n\nexport interface DateTimePickerProps {\n id: string;\n /** Optional field label rendered above the controls. */\n label?: string;\n /** Placeholder for the date input. */\n placeholder?: string;\n /** Initial date for the calendar. */\n defaultDate?: DateOption;\n /** Initial time as \"HH:MM\". */\n defaultTime?: string;\n /** Fires whenever the date or time changes. */\n onChange?: (value: { date: Date | undefined; time: string }) => void;\n}\n\n/** Keep only up to 2 digits and clamp to [0, max]. */\nconst clampNum = (raw: string, max: number) => {\n const digits = raw.replace(/\\D/g, \"\").slice(0, 2);\n if (digits === \"\") return \"\";\n return String(Math.min(parseInt(digits, 10), max));\n};\n\n/**\n * Date + time field: a flatpickr calendar for the date (same look as DatePicker)\n * paired with a compact HH:MM time input (two fields separated by a \":\").\n */\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n id,\n label,\n placeholder,\n defaultDate,\n defaultTime = \"\",\n onChange,\n}) => {\n const dateRef = useRef<Date | undefined>(undefined);\n const [hh, setHh] = useState(defaultTime.split(\":\")[0] ?? \"\");\n const [mm, setMm] = useState(defaultTime.split(\":\")[1] ?? \"\");\n const hhRef = useRef(hh);\n const mmRef = useRef(mm);\n hhRef.current = hh;\n mmRef.current = mm;\n\n const emit = () => {\n onChange?.({\n date: dateRef.current,\n time: `${(hhRef.current || \"0\").padStart(2, \"0\")}:${(mmRef.current || \"0\").padStart(2, \"0\")}`,\n });\n };\n\n useEffect(() => {\n const flatPickr = flatpickr(`#${id}-date`, {\n mode: \"single\",\n appendTo: document.body,\n monthSelectorType: \"static\",\n dateFormat: \"Y-m-d\",\n defaultDate,\n onChange: (dates) => {\n dateRef.current = dates[0];\n emit();\n },\n });\n\n return () => {\n if (!Array.isArray(flatPickr)) {\n flatPickr.destroy();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, defaultDate]);\n\n const handleHh = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = clampNum(e.target.value, 23);\n setHh(v);\n hhRef.current = v;\n emit();\n };\n const handleMm = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = clampNum(e.target.value, 59);\n setMm(v);\n mmRef.current = v;\n emit();\n };\n const padOnBlur =\n (value: string, setter: (v: string) => void) =>\n () => {\n if (value !== \"\") setter(value.padStart(2, \"0\"));\n };\n\n const timeFieldClass =\n \"w-7 bg-transparent text-center tabular-nums placeholder:text-gray-400 focus:outline-hidden dark:placeholder:text-white/30\";\n\n return (\n <div>\n {label && <Label htmlFor={`${id}-date`}>{label}</Label>}\n\n <div className=\"flex items-start gap-3\">\n {/* Date — flatpickr, same look as DatePicker */}\n <div className=\"relative flex-1\">\n <input\n id={`${id}-date`}\n placeholder={placeholder}\n className=\"h-11 w-full appearance-none rounded-lg border border-gray-300 bg-white py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/20 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n <span className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400\">\n <Calendar className=\"size-4\" aria-hidden=\"true\" />\n </span>\n </div>\n\n {/* Time — HH : MM */}\n <div className=\"flex h-11 items-center rounded-lg border border-gray-300 bg-white px-3 text-sm text-gray-800 shadow-theme-xs focus-within:border-brand-300 focus-within:ring-3 focus-within:ring-brand-500/20 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus-within:border-brand-800\">\n <input\n aria-label=\"Hours\"\n inputMode=\"numeric\"\n placeholder=\"00\"\n maxLength={2}\n value={hh}\n onChange={handleHh}\n onBlur={padOnBlur(hh, (v) => setHh(v))}\n className={timeFieldClass}\n />\n <span className=\"px-0.5 text-gray-400 dark:text-gray-500\">:</span>\n <input\n aria-label=\"Minutes\"\n inputMode=\"numeric\"\n placeholder=\"00\"\n maxLength={2}\n value={mm}\n onChange={handleMm}\n onBlur={padOnBlur(mm, (v) => setMm(v))}\n className={timeFieldClass}\n />\n <span className=\"ml-1 text-gray-500 dark:text-gray-400\">\n <Clock className=\"size-4\" aria-hidden=\"true\" />\n </span>\n </div>\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { Eye, EyeOff } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface PasswordInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {}\n\n/** Password field with a show/hide toggle (eye icon), matching the template's \"Password Input\". */\nexport const PasswordInput: React.FC<PasswordInputProps> = ({\n className,\n ...rest\n}) => {\n const [show, setShow] = useState(false);\n\n return (\n <div className=\"relative\">\n <input\n type={show ? \"text\" : \"password\"}\n className={cn(\n \"h-11 w-full appearance-none rounded-lg border border-gray-300 bg-white py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\",\n className\n )}\n {...rest}\n />\n <button\n type=\"button\"\n onClick={() => setShow((s) => !s)}\n aria-label={show ? \"Hide password\" : \"Show password\"}\n className=\"absolute right-4 top-1/2 z-30 -translate-y-1/2 cursor-pointer text-gray-500 dark:text-gray-400\"\n >\n {show ? (\n <Eye className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <EyeOff className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n </div>\n );\n};\n","import React, { FormEvent } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface FormProps\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n onSubmit?: (event: FormEvent<HTMLFormElement>) => void;\n}\n\nexport const Form: React.FC<FormProps> = ({\n onSubmit,\n children,\n className,\n ...rest\n}) => {\n return (\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmit?.(event);\n }}\n className={cn(className)}\n {...rest}\n >\n {children}\n </form>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type SliderColor =\n | \"brand\"\n | \"primary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\";\n\nexport interface SliderProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"color\" | \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n >,\n ColorOverrideProps {\n /** Controlled value. */\n value?: number;\n /** Uncontrolled initial value. */\n defaultValue?: number;\n /** Fires with the new numeric value on change. */\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n /** Accent color of the track + thumb. */\n color?: SliderColor;\n /** Optional label rendered above the slider. */\n label?: React.ReactNode;\n /** Show the current value next to the label. */\n showValue?: boolean;\n}\n\nconst accentClasses: Record<SliderColor, string> = {\n brand: \"accent-brand-500\",\n primary: \"accent-brand-500\",\n success: \"accent-success-500\",\n error: \"accent-error-500\",\n warning: \"accent-warning-500\",\n info: \"accent-blue-light-500\",\n};\n\nconst fillColors: Record<SliderColor, string> = {\n brand: \"#465fff\",\n primary: \"#465fff\",\n success: \"#12b76a\",\n error: \"#f04438\",\n warning: \"#f79009\",\n info: \"#0ba5ec\",\n};\n\nexport const Slider: React.FC<SliderProps> = ({\n value,\n defaultValue = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n color = \"brand\",\n label,\n showValue = false,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = isControlled ? (value as number) : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = Number(e.target.value);\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n };\n\n const percent =\n max === min ? 0 : ((currentValue - min) / (max - min)) * 100;\n const fill = fillColors[color];\n const trackBg = `linear-gradient(to right, ${fill} 0%, ${fill} ${percent}%, var(--slider-track, #e4e7ec) ${percent}%, var(--slider-track, #e4e7ec) 100%)`;\n\n return (\n <div className={cn(\"w-full\", disabled && \"opacity-50\")}>\n {(label || showValue) && (\n <div className=\"mb-1.5 flex items-center justify-between text-sm font-medium text-gray-700 dark:text-gray-400\">\n {label && <span>{label}</span>}\n {showValue && (\n <span className=\"text-gray-500 dark:text-gray-400\">\n {currentValue}\n </span>\n )}\n </div>\n )}\n <input\n type=\"range\"\n role=\"slider\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n disabled={disabled}\n onChange={handleChange}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n className={cn(\n \"h-2 w-full cursor-pointer appearance-none rounded-lg focus:outline-hidden focus:ring-3 focus:ring-brand-500/10\",\n accentClasses[color],\n disabled && \"cursor-not-allowed\",\n className\n )}\n style={{\n background: trackBg,\n ...styleOverride({ bgColor, textColor, borderColor }),\n ...style,\n }}\n {...rest}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/lib/styleOverride.ts","../src/components/Button/Button.tsx","../src/components/Badge/Badge.tsx","../src/components/Ribbon/Ribbon.tsx","../src/components/Alert/Alert.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Avatar/AvatarText.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Dropdown/DropdownItem.tsx","../src/components/Dropzone/Dropzone.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Form/Input.tsx","../src/components/Table/Table.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/ThemeToggleButton/ThemeToggleButton.tsx","../src/components/Card/Card.tsx","../src/components/Toast/Toast.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Popover/Popover.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Chip/Chip.tsx","../src/components/Progress/Progress.tsx","../src/components/PollResults/PollResults.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Code/Code.tsx","../src/components/Snippet/Snippet.tsx","../src/components/Form/Label.tsx","../src/components/Form/TextArea.tsx","../src/components/Form/Checkbox.tsx","../src/components/Form/Radio.tsx","../src/components/Form/RadioSm.tsx","../src/components/Form/Switch.tsx","../src/components/Form/Select.tsx","../src/components/Form/MultiSelect.tsx","../src/components/Form/FileInput.tsx","../src/components/Form/DatePicker.tsx","../src/components/Form/DateTimePicker.tsx","../src/components/Form/PasswordInput.tsx","../src/components/Form/Form.tsx","../src/components/Slider/Slider.tsx"],"names":["jsxs","cn","jsx","variantClasses","CircleCheck","CircleX","CircleAlert","Info","sizeClasses","name","useRef","useState","useEffect","useLayoutEffect","menu","layers","Fragment","createPortal","Upload","ChevronUp","ChevronDown","useMemo","ChevronRight","Sun","Moon","variantIcons","useCallback","X","React","ChevronIcon","useId","trigger","panel","sizeStyles","variants","colorStyles","colorClasses","Check","Copy","flatpickr","Calendar","Clock","Eye","EyeOff","fillColors"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CSSProperties } from \"react\";\n\nexport interface ColorOverrideProps {\n /** Inline background color override (any CSS color). */\n bgColor?: string;\n /** Inline text color override (any CSS color). */\n textColor?: string;\n /** Inline border color override (any CSS color). */\n borderColor?: string;\n}\n\nexport function styleOverride({\n bgColor,\n textColor,\n borderColor,\n}: ColorOverrideProps): CSSProperties {\n const style: CSSProperties = {};\n if (bgColor !== undefined) style.backgroundColor = bgColor;\n if (textColor !== undefined) style.color = textColor;\n if (borderColor !== undefined) style.borderColor = borderColor;\n return style;\n}\n","\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n ColorOverrideProps {\n size?: \"sm\" | \"md\";\n variant?: \"primary\" | \"outline\";\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n}\n\nconst sizeClasses: Record<NonNullable<ButtonProps[\"size\"]>, string> = {\n sm: \"h-10 px-4 text-sm\",\n md: \"h-11 px-5 text-sm\",\n};\n\nconst variantClasses: Record<NonNullable<ButtonProps[\"variant\"]>, string> = {\n primary:\n \"border border-transparent bg-brand-500 text-white shadow-theme-xs hover:bg-brand-600 disabled:bg-brand-300\",\n outline:\n \"border border-gray-300 bg-white text-black shadow-theme-xs hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-800 dark:!text-white dark:hover:bg-white/[0.03]\",\n};\n\nexport const Button: React.FC<ButtonProps> = ({\n children,\n size = \"md\",\n variant = \"primary\",\n startIcon,\n endIcon,\n className,\n disabled = false,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n return (\n <button\n className={cn(\n \"inline-flex items-center justify-center font-medium gap-2 rounded-lg transition\",\n sizeClasses[size],\n variantClasses[variant],\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n disabled={disabled}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {startIcon && <span className=\"flex items-center\">{startIcon}</span>}\n {children}\n {endIcon && <span className=\"flex items-center\">{endIcon}</span>}\n </button>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type BadgeVariant = \"light\" | \"solid\";\nexport type BadgeSize = \"sm\" | \"md\";\nexport type BadgeColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\n\nexport interface BadgeProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n ColorOverrideProps {\n variant?: BadgeVariant;\n size?: BadgeSize;\n color?: BadgeColor;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n}\n\nconst sizeStyles: Record<BadgeSize, string> = {\n sm: \"text-theme-xs\",\n md: \"text-sm\",\n};\n\nconst variants: Record<BadgeVariant, Record<BadgeColor, string>> = {\n light: {\n primary: \"bg-brand-50 text-brand-500 dark:bg-brand-500/15 dark:text-brand-400\",\n success: \"bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500\",\n error: \"bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500\",\n warning: \"bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400\",\n info: \"bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500\",\n light: \"bg-gray-100 text-gray-700 dark:bg-white/5 dark:text-white/80\",\n dark: \"bg-gray-500 text-white dark:bg-white/5 dark:text-white\",\n },\n solid: {\n primary: \"bg-brand-500 text-white dark:text-white\",\n success: \"bg-success-500 text-white dark:text-white\",\n error: \"bg-error-500 text-white dark:text-white\",\n warning: \"bg-warning-500 text-white dark:text-white\",\n info: \"bg-blue-light-500 text-white dark:text-white\",\n light: \"bg-gray-400 dark:bg-white/5 text-white dark:text-white/80\",\n dark: \"bg-gray-700 text-white dark:text-white\",\n },\n};\n\nexport const Badge: React.FC<BadgeProps> = ({\n variant = \"light\",\n color = \"primary\",\n size = \"md\",\n startIcon,\n endIcon,\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n return (\n <span\n className={cn(\n \"inline-flex items-center px-2.5 py-0.5 justify-center gap-1 rounded-full font-medium\",\n sizeStyles[size],\n variants[variant][color],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {startIcon && <span className=\"flex items-center\">{startIcon}</span>}\n {children}\n {endIcon && <span className=\"flex items-center\">{endIcon}</span>}\n </span>\n );\n};\n","\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type RibbonVariant = \"corner\" | \"rounded\" | \"flag\";\nexport type RibbonColor =\n | \"primary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"dark\";\nexport type RibbonPosition =\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n\nexport interface RibbonProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n ColorOverrideProps {\n /** Visual style of the ribbon. */\n variant?: RibbonVariant;\n /** Brand color. Defaults to `primary`. */\n color?: RibbonColor;\n /** Which corner/side the ribbon attaches to. Defaults to `top-right`. */\n position?: RibbonPosition;\n}\n\nconst colorClasses: Record<RibbonColor, string> = {\n primary: \"bg-brand-500 text-white\",\n success: \"bg-success-500 text-white\",\n error: \"bg-error-500 text-white\",\n warning: \"bg-warning-500 text-white\",\n info: \"bg-blue-light-500 text-white\",\n dark: \"bg-gray-800 text-white dark:bg-gray-700\",\n};\n\n// Diagonal band tucked across a corner. Needs a `relative overflow-hidden` host.\nconst cornerClasses: Record<RibbonPosition, string> = {\n \"top-left\": \"left-[-36px] top-[16px] w-[130px] -rotate-45\",\n \"top-right\": \"right-[-36px] top-[16px] w-[130px] rotate-45\",\n \"bottom-left\": \"bottom-[16px] left-[-36px] w-[130px] rotate-45\",\n \"bottom-right\": \"bottom-[16px] right-[-36px] w-[130px] -rotate-45\",\n};\n\n// Tag hugging a corner, inner edge rounded. Needs `relative` host.\nconst roundedClasses: Record<RibbonPosition, string> = {\n \"top-left\": \"left-0 top-0 rounded-tl-xl rounded-br-lg\",\n \"top-right\": \"right-0 top-0 rounded-tr-xl rounded-bl-lg\",\n \"bottom-left\": \"bottom-0 left-0 rounded-bl-xl rounded-tr-lg\",\n \"bottom-right\": \"bottom-0 right-0 rounded-br-xl rounded-tl-lg\",\n};\n\n// Horizontal banner with a swallowtail notch. Needs `relative` host.\nconst flagClasses: Record<RibbonPosition, string> = {\n \"top-left\": \"left-0 top-4 rounded-r-sm pl-3 pr-5\",\n \"bottom-left\": \"bottom-4 left-0 rounded-r-sm pl-3 pr-5\",\n \"top-right\": \"right-0 top-4 rounded-l-sm pl-5 pr-3\",\n \"bottom-right\": \"bottom-4 right-0 rounded-l-sm pl-5 pr-3\",\n};\n\n// Swallowtail cut into the trailing end of the flag (right end for left-anchored,\n// left end for right-anchored).\nconst flagClipPath: Record<RibbonPosition, string> = {\n \"top-left\": \"polygon(0 0, 100% 0, calc(100% - 9px) 50%, 100% 100%, 0 100%)\",\n \"bottom-left\": \"polygon(0 0, 100% 0, calc(100% - 9px) 50%, 100% 100%, 0 100%)\",\n \"top-right\": \"polygon(0 0, 100% 0, 100% 100%, 0 100%, 9px 50%)\",\n \"bottom-right\": \"polygon(0 0, 100% 0, 100% 100%, 0 100%, 9px 50%)\",\n};\n\nexport const Ribbon: React.FC<RibbonProps> = ({\n variant = \"corner\",\n color = \"primary\",\n position = \"top-right\",\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const variantClass =\n variant === \"corner\"\n ? cornerClasses[position]\n : variant === \"rounded\"\n ? roundedClasses[position]\n : flagClasses[position];\n\n return (\n <span\n className={cn(\n \"absolute z-10 inline-flex items-center justify-center whitespace-nowrap py-1 text-center text-theme-xs font-semibold shadow-theme-xs\",\n variant === \"corner\" && \"px-10\",\n variant === \"rounded\" && \"px-3\",\n colorClasses[color],\n variantClass,\n className\n )}\n style={{\n ...(variant === \"flag\"\n ? { clipPath: flagClipPath[position] }\n : undefined),\n ...styleOverride({ bgColor, textColor, borderColor }),\n ...style,\n }}\n {...rest}\n >\n {children}\n </span>\n );\n};\n","import React from \"react\";\nimport {\n CircleAlert,\n CircleCheck,\n CircleX,\n Info,\n type LucideIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AlertVariant = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface AlertProps\n extends React.HTMLAttributes<HTMLDivElement> {\n variant: AlertVariant;\n title: string;\n message: string;\n showLink?: boolean;\n linkHref?: string;\n linkText?: string;\n /** Override the default variant icon. */\n icon?: React.ReactNode;\n}\n\nconst variantClasses: Record<AlertVariant, { container: string; icon: string }> = {\n success: {\n container: \"border-success-500 bg-success-50 dark:border-success-500/30 dark:bg-success-500/15\",\n icon: \"text-success-500\",\n },\n error: {\n container: \"border-error-500 bg-error-50 dark:border-error-500/30 dark:bg-error-500/15\",\n icon: \"text-error-500\",\n },\n warning: {\n container: \"border-warning-500 bg-warning-50 dark:border-warning-500/30 dark:bg-warning-500/15\",\n icon: \"text-warning-500\",\n },\n info: {\n container: \"border-blue-light-500 bg-blue-light-50 dark:border-blue-light-500/30 dark:bg-blue-light-500/15\",\n icon: \"text-blue-light-500\",\n },\n};\n\nconst variantIcons: Record<AlertVariant, LucideIcon> = {\n success: CircleCheck,\n error: CircleX,\n warning: CircleAlert,\n info: Info,\n};\n\nexport const Alert: React.FC<AlertProps> = ({\n variant,\n title,\n message,\n showLink = false,\n linkHref = \"#\",\n linkText = \"Learn more\",\n icon,\n className,\n ...rest\n}) => {\n const Icon = variantIcons[variant];\n\n return (\n <div\n className={cn(\"rounded-xl border p-4\", variantClasses[variant].container, className)}\n {...rest}\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn(\"-mt-0.5\", variantClasses[variant].icon)}>\n {icon ?? <Icon className=\"size-4\" aria-hidden=\"true\" />}\n </div>\n <div>\n <h4 className=\"mb-1 text-sm font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h4>\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{message}</p>\n {showLink && (\n <a\n href={linkHref}\n className=\"inline-block mt-3 text-sm font-medium text-gray-500 underline dark:text-gray-400\"\n >\n {linkText}\n </a>\n )}\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AvatarSize = \"xsmall\" | \"small\" | \"medium\" | \"large\" | \"xlarge\" | \"xxlarge\";\nexport type AvatarStatus = \"online\" | \"offline\" | \"busy\" | \"none\";\n\nexport interface AvatarProps\n extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, \"size\"> {\n src: string;\n alt?: string;\n size?: AvatarSize;\n status?: AvatarStatus;\n /** Override the status indicator color. */\n statusColor?: string;\n}\n\nconst sizeClasses: Record<AvatarSize, string> = {\n xsmall: \"h-6 w-6 max-w-6\",\n small: \"h-8 w-8 max-w-8\",\n medium: \"h-10 w-10 max-w-10\",\n large: \"h-12 w-12 max-w-12\",\n xlarge: \"h-14 w-14 max-w-14\",\n xxlarge: \"h-16 w-16 max-w-16\",\n};\n\nconst statusSizeClasses: Record<AvatarSize, string> = {\n xsmall: \"h-1.5 w-1.5 max-w-1.5\",\n small: \"h-2 w-2 max-w-2\",\n medium: \"h-2.5 w-2.5 max-w-2.5\",\n large: \"h-3 w-3 max-w-3\",\n xlarge: \"h-3.5 w-3.5 max-w-3.5\",\n xxlarge: \"h-4 w-4 max-w-4\",\n};\n\nconst statusColorClasses: Record<Exclude<AvatarStatus, \"none\">, string> = {\n online: \"bg-success-500\",\n offline: \"bg-error-400\",\n busy: \"bg-warning-500\",\n};\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt = \"User Avatar\",\n size = \"medium\",\n status = \"none\",\n statusColor,\n className,\n ...rest\n}) => {\n return (\n <div className={cn(\"relative rounded-full\", sizeClasses[size], className)}>\n <img\n src={src}\n alt={alt}\n className=\"object-cover w-full rounded-full\"\n {...rest}\n />\n {status !== \"none\" && (\n <span\n className={cn(\n \"absolute bottom-0 right-0 rounded-full border-[1.5px] border-white dark:border-gray-900\",\n statusSizeClasses[size],\n !statusColor && statusColorClasses[status]\n )}\n style={statusColor ? { backgroundColor: statusColor } : undefined}\n />\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface AvatarTextProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n}\n\nexport const AvatarText: React.FC<AvatarTextProps> = ({\n name,\n className,\n ...rest\n}) => {\n // Generate initials from name\n const initials = name\n .split(\" \")\n .map((word) => word[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n\n // Generate a consistent pastel color based on the name\n const getColorClass = (name: string) => {\n const colors = [\n \"bg-brand-100 text-brand-600\",\n \"bg-pink-100 text-pink-600\",\n \"bg-cyan-100 text-cyan-600\",\n \"bg-orange-100 text-orange-600\",\n \"bg-green-100 text-green-600\",\n \"bg-purple-100 text-purple-600\",\n \"bg-yellow-100 text-yellow-600\",\n \"bg-error-100 text-error-600\",\n ];\n\n const index = name\n .split(\"\")\n .reduce((acc, char) => acc + char.charCodeAt(0), 0);\n return colors[index % colors.length];\n };\n\n return (\n <div\n className={cn(\n \"flex h-10 w-10 items-center justify-center rounded-full\",\n getColorClass(name),\n className\n )}\n {...rest}\n >\n <span className=\"text-sm font-medium\">{initials}</span>\n </div>\n );\n};\n","\"use client\";\nimport React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\nexport interface DropdownProps extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n onClose: () => void;\n /** Render under document.body so menus are not clipped by overflow containers. Default: true. */\n portal?: boolean;\n /** Optional ref to the trigger element. Useful when the trigger is not adjacent to the menu. */\n triggerRef?: React.RefObject<HTMLElement | null>;\n}\n\nfunction getTriggerElement(\n anchor: HTMLSpanElement | null,\n triggerRef?: React.RefObject<HTMLElement | null>\n) {\n if (triggerRef?.current) return triggerRef.current;\n if (!anchor) return null;\n\n const previous = anchor.previousElementSibling as HTMLElement | null;\n const adjacentTrigger = previous?.matches(\".dropdown-toggle, button, [aria-haspopup='menu']\")\n ? previous\n : previous?.querySelector<HTMLElement>(\".dropdown-toggle, button, [aria-haspopup='menu']\");\n\n return adjacentTrigger ?? anchor.parentElement?.querySelector<HTMLElement>(\".dropdown-toggle\");\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n isOpen,\n onClose,\n children,\n className,\n portal = true,\n triggerRef,\n style,\n ...rest\n}) => {\n const dropdownRef = useRef<HTMLDivElement>(null);\n const anchorRef = useRef<HTMLSpanElement>(null);\n const [position, setPosition] = useState<React.CSSProperties>();\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const trigger = getTriggerElement(anchorRef.current, triggerRef);\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n !trigger?.contains(event.target as Node)\n ) {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [onClose, triggerRef]);\n\n useLayoutEffect(() => {\n if (!isOpen || !portal) return;\n\n const updatePosition = () => {\n const anchor = anchorRef.current;\n const menu = dropdownRef.current;\n const trigger = getTriggerElement(anchor, triggerRef);\n if (!anchor || !menu) return;\n\n const triggerRect = (trigger ?? anchor).getBoundingClientRect();\n const menuRect = menu.getBoundingClientRect();\n const gap = 8;\n const viewportPadding = 8;\n const fitsBelow =\n triggerRect.bottom + gap + menuRect.height <= window.innerHeight - viewportPadding;\n const top = fitsBelow\n ? triggerRect.bottom + gap\n : Math.max(viewportPadding, triggerRect.top - gap - menuRect.height);\n const left = Math.min(\n window.innerWidth - viewportPadding - menuRect.width,\n Math.max(viewportPadding, triggerRect.right - menuRect.width)\n );\n\n setPosition({ top, left });\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [isOpen, portal, triggerRef]);\n\n if (!isOpen) return null;\n\n const menu = (\n <div\n ref={dropdownRef}\n className={cn(\n \"rounded-xl border border-gray-200 bg-white shadow-theme-lg dark:border-gray-800 dark:bg-gray-dark\",\n portal ? cn(\"fixed\", layers.portal) : cn(\"absolute right-0 mt-2\", layers.menu),\n className\n )}\n style={{\n ...(portal && !position ? { visibility: \"hidden\" } : undefined),\n ...(portal ? position : undefined),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n );\n\n if (!portal || typeof document === \"undefined\") return menu;\n\n return (\n <>\n <span ref={anchorRef} aria-hidden=\"true\" className=\"pointer-events-none absolute\" />\n {createPortal(menu, document.body)}\n </>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type DropdownItemVariant = \"default\" | \"primary\" | \"outline\";\n\nexport interface DropdownItemProps extends ColorOverrideProps {\n tag?: \"a\" | \"button\";\n href?: string;\n onClick?: () => void;\n onItemClick?: () => void;\n /** Visual style, mirroring Button: a plain menu row, a filled brand item, or an outlined one. */\n variant?: DropdownItemVariant;\n /** Full class override (escape hatch). When set, it replaces the variant styling. */\n baseClassName?: string;\n /** Decorative icon rendered before the item text. */\n icon?: React.ReactNode;\n className?: string;\n children: React.ReactNode;\n}\n\nconst variantBase =\n \"flex h-10 w-full items-center gap-2 rounded-lg px-4 py-2.5 text-left text-sm font-medium transition\";\n\nconst variantClasses: Record<DropdownItemVariant, string> = {\n default:\n \"text-gray-700 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-white/5 dark:hover:text-white\",\n primary:\n \"bg-brand-500 text-white shadow-theme-xs hover:bg-brand-600\",\n outline:\n \"border border-gray-300 bg-white text-black shadow-theme-xs hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-800 dark:!text-white dark:hover:bg-white/[0.03]\",\n};\n\nexport const DropdownItem: React.FC<DropdownItemProps> = ({\n tag = \"button\",\n href,\n onClick,\n onItemClick,\n variant = \"default\",\n baseClassName,\n icon,\n className,\n bgColor,\n textColor,\n borderColor,\n children,\n}) => {\n const combinedClasses =\n baseClassName != null\n ? cn(baseClassName, className)\n : cn(variantBase, variantClasses[variant], className);\n\n const style = styleOverride({ bgColor, textColor, borderColor });\n\n const handleClick = (event: React.MouseEvent) => {\n if (tag === \"button\") {\n event.preventDefault();\n }\n if (onClick) onClick();\n if (onItemClick) onItemClick();\n };\n\n const content = icon ? (\n <>\n <span\n aria-hidden=\"true\"\n className=\"flex h-5 w-5 shrink-0 items-center justify-center [&>svg]:size-4\"\n >\n {icon}\n </span>\n <span className=\"min-w-0 flex-1\">{children}</span>\n </>\n ) : (\n children\n );\n\n if (tag === \"a\" && href) {\n return (\n <a href={href} className={combinedClasses} style={style} onClick={handleClick}>\n {content}\n </a>\n );\n }\n\n return (\n <button onClick={handleClick} className={combinedClasses} style={style}>\n {content}\n </button>\n );\n};\n","\"use client\";\nimport React, { useRef, useState } from \"react\";\nimport { Upload } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface DropzoneProps {\n /** Called with the dropped/selected files. */\n onDrop?: (files: File[]) => void;\n /** Accepted file types, e.g. \"image/png,image/jpeg\" (native input `accept`). */\n accept?: string;\n /** Allow selecting multiple files. Default: true. */\n multiple?: boolean;\n /** Heading text. Default: \"Drag & Drop Files Here\". */\n title?: string;\n /** Helper text under the heading. */\n description?: string;\n /** \"Browse\" call-to-action label. Default: \"Browse File\". */\n browseLabel?: string;\n /** Extra classes for the outer wrapper. */\n className?: string;\n}\n\n/** Drag-and-drop file upload area — dependency-free (native HTML5 drag/drop). */\nexport const Dropzone: React.FC<DropzoneProps> = ({\n onDrop,\n accept,\n multiple = true,\n title,\n description = \"Drag and drop your PNG, JPG, WebP, SVG images here or browse\",\n browseLabel = \"Browse File\",\n className,\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragActive, setIsDragActive] = useState(false);\n\n const handleFiles = (list: FileList | null) => {\n if (list && list.length) onDrop?.(Array.from(list));\n };\n\n return (\n <div\n className={cn(\n \"cursor-pointer rounded-xl border border-dashed border-gray-300 transition hover:border-brand-500 dark:border-gray-700 dark:hover:border-brand-500\",\n className\n )}\n >\n <div\n onClick={() => inputRef.current?.click()}\n onDragOver={(e) => {\n e.preventDefault();\n setIsDragActive(true);\n }}\n onDragLeave={(e) => {\n e.preventDefault();\n setIsDragActive(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n setIsDragActive(false);\n handleFiles(e.dataTransfer.files);\n }}\n className={cn(\n \"rounded-xl border-dashed p-7 lg:p-10\",\n isDragActive\n ? \"border-brand-500 bg-gray-100 dark:bg-gray-800\"\n : \"border-gray-300 bg-gray-50 dark:border-gray-700 dark:bg-gray-900\"\n )}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n className=\"hidden\"\n onChange={(e) => handleFiles(e.target.files)}\n />\n\n <div className=\"flex flex-col items-center\">\n <div className=\"mb-[22px] flex justify-center\">\n <div className=\"flex h-[68px] w-[68px] items-center justify-center rounded-full bg-gray-200 text-gray-700 dark:bg-gray-800 dark:text-gray-400\">\n <Upload className=\"size-4\" aria-hidden=\"true\" />\n </div>\n </div>\n\n <h4 className=\"mb-3 text-theme-xl font-semibold text-gray-800 dark:text-white/90\">\n {title ?? (isDragActive ? \"Drop Files Here\" : \"Drag & Drop Files Here\")}\n </h4>\n\n <span className=\"mb-5 block w-full max-w-[290px] text-center text-sm text-gray-700 dark:text-gray-400\">\n {description}\n </span>\n\n <span className=\"text-theme-sm font-medium text-brand-500 underline\">\n {browseLabel}\n </span>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type PaginationAlign = \"left\" | \"center\" | \"right\" | \"full\";\n\nexport interface PaginationProps {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n /**\n * How the controls are laid out within the available width:\n * - `left` / `center` / `right`: the compact group is left/center/right aligned.\n * - `full`: stretches full width with Previous/Next pinned to the edges and the\n * page indices centered between them.\n * When omitted the controls shrink to their content (legacy behavior).\n */\n align?: PaginationAlign;\n}\n\nconst navButton =\n \"flex h-10 items-center justify-center rounded-lg border border-gray-300 bg-white px-3.5 py-2.5 text-sm text-gray-700 shadow-theme-xs hover:bg-gray-50 disabled:opacity-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-white/[0.03]\";\n\nconst justifyByAlign: Record<Exclude<PaginationAlign, \"full\">, string> = {\n left: \"justify-start\",\n center: \"justify-center\",\n right: \"justify-end\",\n};\n\ntype PaginationItem = number | \"ellipsis\";\n\nconst getPaginationItems = (currentPage: number, totalPages: number): PaginationItem[] => {\n const total = Math.max(1, totalPages);\n const current = Math.min(Math.max(currentPage, 1), total);\n\n if (total <= 3) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n if (current === 1) {\n return [1, 2, \"ellipsis\", total];\n }\n\n if (current === total) {\n return [1, \"ellipsis\", total - 1, total];\n }\n\n return [current - 1, current, current + 1];\n};\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n align,\n}) => {\n const total = Math.max(1, totalPages);\n const current = Math.min(Math.max(currentPage, 1), total);\n const paginationItems = getPaginationItems(current, total);\n\n const prev = (\n <button\n onClick={() => onPageChange(current - 1)}\n disabled={current === 1}\n aria-label=\"Previous\"\n className={navButton}\n >\n Previous\n </button>\n );\n\n const indices = (\n <div className=\"flex items-center gap-2\">\n {paginationItems.map((item, index) =>\n item === \"ellipsis\" ? (\n <span key={`ellipsis-${index}`} className=\"px-2 text-gray-500 dark:text-gray-400\">\n ...\n </span>\n ) : (\n <button\n key={item}\n onClick={() => onPageChange(item)}\n aria-current={current === item ? \"page\" : undefined}\n className={cn(\n \"flex h-10 w-10 items-center justify-center rounded-lg border text-sm font-medium shadow-theme-xs\",\n current === item\n ? // active page keeps its color on hover (no hover restyle)\n \"border-brand-500 bg-brand-500 text-white\"\n : // hover effect applies only to non-active page indices\n \"border-gray-300 bg-white text-gray-700 hover:bg-blue-500/[0.08] hover:text-brand-500 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-brand-500\"\n )}\n >\n {item}\n </button>\n )\n )}\n </div>\n );\n\n const next = (\n <button\n onClick={() => onPageChange(current + 1)}\n disabled={current === total}\n aria-label=\"Next\"\n className={navButton}\n >\n Next\n </button>\n );\n\n // Full width: buttons pinned to the edges, indices centered between them.\n if (align === \"full\") {\n return (\n <div className=\"flex w-full items-center justify-between\">\n {prev}\n {indices}\n {next}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2.5\",\n align && \"w-full\",\n align && justifyByAlign[align]\n )}\n >\n {prev}\n {indices}\n {next}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"color\">,\n ColorOverrideProps {\n success?: boolean;\n error?: boolean;\n hint?: string;\n}\n\nexport const Input: React.FC<InputProps> = ({\n className,\n disabled = false,\n success = false,\n error = false,\n hint,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const placeholder =\n typeof rest.placeholder === \"string\" ? rest.placeholder.trim() : \"\";\n const placeholderMinWidth = placeholder\n ? `${Math.min(Math.max(placeholder.length + 6, 18), 40)}ch`\n : undefined;\n\n const stateClass = disabled\n ? \"text-gray-500 border-gray-300 cursor-not-allowed dark:bg-gray-800 dark:text-gray-400 dark:border-gray-700\"\n : error\n ? \"text-error-800 border-error-500 focus:ring-3 focus:ring-error-500/10 dark:text-error-400 dark:border-error-500\"\n : success\n ? \"text-success-500 border-success-400 focus:ring-success-500/10 focus:border-success-300 dark:text-success-400 dark:border-success-500\"\n : \"text-gray-800 border-gray-300 focus:border-brand-300 focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:text-white/90 dark:focus:border-brand-800\";\n\n return (\n <div className=\"relative\">\n <input\n disabled={disabled}\n className={cn(\n \"h-11 w-full rounded-lg border bg-white appearance-none px-4 py-2.5 text-sm shadow-theme-xs placeholder:text-gray-400 focus:outline-hidden focus:ring-3 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\",\n stateClass,\n className\n )}\n style={{\n minWidth: placeholderMinWidth,\n ...styleOverride({ bgColor, textColor, borderColor }),\n ...style,\n }}\n {...rest}\n />\n {hint && (\n <p className={cn(\"mt-1.5 text-xs\", error ? \"text-error-500\" : success ? \"text-success-500\" : \"text-gray-500\")}>\n {hint}\n </p>\n )}\n </div>\n );\n};\n","\"use client\";\nimport React, { useMemo, useState } from \"react\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { Pagination, type PaginationAlign } from \"../Pagination/Pagination\";\nimport { Input } from \"../Form/Input\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport interface TableColumn<T> {\n /** Key into the row object — also the value used for sorting/searching. */\n key: Extract<keyof T, string>;\n /** Column header label. */\n header: React.ReactNode;\n /** Allow click-to-sort on this column. Default: false. */\n sortable?: boolean;\n /** Cell + header text alignment. Default: \"left\". */\n align?: \"left\" | \"center\" | \"right\";\n /** Custom cell renderer. Falls back to `String(row[key])`. */\n render?: (row: T, rowIndex: number) => React.ReactNode;\n /** Extra classes applied to this column's header and body cells. */\n className?: string;\n}\n\nexport interface TableProps<T = Record<string, unknown>>\n extends Omit<React.TableHTMLAttributes<HTMLTableElement>, \"children\"> {\n /**\n * Composable content (Table / TableHeader / TableBody / TableRow / TableCell).\n * Used when `columns` is **not** provided.\n */\n children?: React.ReactNode;\n\n /* ── data-driven mode (set `columns` to enable search + sort + pagination) ── */\n\n /** The array of row objects to display. */\n data?: T[];\n /** Column definitions. Providing this switches Table into data-driven mode. */\n columns?: TableColumn<T>[];\n /** Maximum number of rows shown per page. Default: 10. */\n rowsPerPage?: number;\n /** Options for the \"Show N entries\" selector. Default: [5, 10, 25, 50]. Pass [] to hide it. */\n rowsPerPageOptions?: number[];\n /** Render pagination controls + the entry counter. Default: true. */\n pagination?: boolean;\n /**\n * Alignment of the pagination controls: `left` / `center` / `right`, or `full`\n * (full width with Previous/Next pinned to the edges and the page indices\n * centered). Default: `right`.\n */\n paginationAlign?: PaginationAlign;\n /** Render the \"Show N entries\" selector (only when pagination is on). Default: true. */\n showSizeSelector?: boolean;\n /**\n * Fields matched when searching. The search input is shown **only** when this\n * is a non-empty array — omit it (or pass `[]`) to hide the search box.\n */\n searchKeys?: Extract<keyof T, string>[];\n /** Placeholder for the search field. Default: \"Search...\". */\n searchPlaceholder?: string;\n /** Column sorted on first render. */\n defaultSortKey?: Extract<keyof T, string>;\n /** Initial sort direction. Default: \"asc\". */\n defaultSortDirection?: SortDirection;\n /** Stable key for a row. Defaults to the row index. */\n getRowId?: (row: T, index: number) => string | number;\n /** Fires when a row is clicked (also makes rows hoverable/clickable). */\n onRowClick?: (row: T, index: number) => void;\n /** Shown when no rows match. Default: \"No matching records\". */\n emptyContent?: React.ReactNode;\n}\n\nexport interface TableSectionProps\n extends React.HTMLAttributes<HTMLTableSectionElement> {}\nexport const TableHeader: React.FC<TableSectionProps> = ({ children, className, ...rest }) => (\n <thead className={className} {...rest}>{children}</thead>\n);\nexport const TableBody: React.FC<TableSectionProps> = ({ children, className, ...rest }) => (\n <tbody className={className} {...rest}>{children}</tbody>\n);\n\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {}\nexport const TableRow: React.FC<TableRowProps> = ({ children, className, ...rest }) => (\n <tr className={className} {...rest}>{children}</tr>\n);\n\nexport interface TableCellProps\n extends React.TdHTMLAttributes<HTMLTableCellElement> {\n isHeader?: boolean;\n}\nexport const TableCell: React.FC<TableCellProps> = ({\n children,\n isHeader = false,\n className,\n ...rest\n}) => {\n const Tag = isHeader ? \"th\" : \"td\";\n return <Tag className={className} {...rest}>{children}</Tag>;\n};\n\nconst alignClass = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n} as const;\n\nfunction SortIcon({\n state,\n}: {\n state: SortDirection | \"none\";\n}) {\n const active = \"text-brand-500\";\n const inactive = \"text-gray-400 dark:text-gray-500\";\n return (\n <span\n data-sort-state={state}\n className=\"inline-flex shrink-0 flex-col items-center -space-y-1\"\n >\n <ChevronUp\n data-sort-direction=\"asc\"\n aria-hidden=\"true\"\n className={cn(\"size-4\", state === \"asc\" ? active : inactive)}\n />\n <ChevronDown\n data-sort-direction=\"desc\"\n aria-hidden=\"true\"\n className={cn(\"size-4\", state === \"desc\" ? active : inactive)}\n />\n </span>\n );\n}\n\ninterface DataTableInnerProps<T> {\n data: T[];\n columns: TableColumn<T>[];\n rowsPerPage?: number;\n rowsPerPageOptions?: number[];\n pagination?: boolean;\n paginationAlign?: PaginationAlign;\n showSizeSelector?: boolean;\n searchKeys?: Extract<keyof T, string>[];\n searchPlaceholder?: string;\n defaultSortKey?: Extract<keyof T, string>;\n defaultSortDirection?: SortDirection;\n getRowId?: (row: T, index: number) => string | number;\n onRowClick?: (row: T, index: number) => void;\n emptyContent?: React.ReactNode;\n className?: string;\n}\n\nfunction DataDrivenTable<T extends Record<string, unknown>>({\n data,\n columns,\n rowsPerPage = 10,\n rowsPerPageOptions = [5, 10, 25, 50],\n pagination = true,\n paginationAlign = \"right\",\n showSizeSelector = true,\n searchKeys,\n searchPlaceholder = \"Search...\",\n defaultSortKey,\n defaultSortDirection = \"asc\",\n getRowId,\n onRowClick,\n emptyContent = \"No matching records\",\n className,\n}: DataTableInnerProps<T>) {\n const [search, setSearch] = useState(\"\");\n const [pageSize, setPageSize] = useState(rowsPerPage);\n const [sortKey, setSortKey] = useState<Extract<keyof T, string> | undefined>(defaultSortKey);\n const [sortDir, setSortDir] = useState<SortDirection>(defaultSortDirection);\n const [page, setPage] = useState(1);\n\n // Search is only available when explicit search keys are provided.\n const showSearch = !!(searchKeys && searchKeys.length > 0);\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n let rows = data;\n if (showSearch && q) {\n rows = rows.filter((row) =>\n searchKeys!.some((k) => String(row[k] ?? \"\").toLowerCase().includes(q))\n );\n }\n if (sortKey) {\n rows = [...rows].sort((a, b) => {\n const av = a[sortKey];\n const bv = b[sortKey];\n const cmp =\n typeof av === \"number\" && typeof bv === \"number\"\n ? av - bv\n : String(av ?? \"\").localeCompare(String(bv ?? \"\"));\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }\n return rows;\n }, [data, search, showSearch, searchKeys, sortKey, sortDir]);\n\n const total = filtered.length;\n const totalPages = pagination ? Math.max(1, Math.ceil(total / pageSize)) : 1;\n const current = Math.min(page, totalPages);\n const start = pagination ? (current - 1) * pageSize : 0;\n const pageRows = pagination ? filtered.slice(start, start + pageSize) : filtered;\n\n const toggleSort = (col: TableColumn<T>) => {\n if (!col.sortable) return;\n if (sortKey !== col.key) {\n setSortKey(col.key);\n setSortDir(\"asc\");\n } else if (sortDir === \"asc\") {\n setSortDir(\"desc\");\n } else {\n setSortKey(undefined);\n setSortDir(\"asc\");\n }\n setPage(1);\n };\n\n const sizeOptions = rowsPerPageOptions.length ? rowsPerPageOptions : [];\n const showSelector = pagination && showSizeSelector && sizeOptions.length > 1;\n const showControls = showSearch || showSelector;\n\n const counterText =\n total === 0\n ? \"Showing 0 entries\"\n : `Showing ${start + 1} to ${Math.min(start + pageSize, total)} of ${total} entries`;\n\n return (\n <div\n className={cn(\n \"rounded-xl border border-gray-200 bg-white dark:border-white/[0.05] dark:bg-white/[0.03]\",\n className\n )}\n >\n {showControls && (\n <div className=\"flex flex-wrap items-center justify-between gap-3 p-4\">\n {showSelector ? (\n <label className=\"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400\">\n Show\n <span className=\"relative inline-flex\">\n <select\n aria-label=\"Rows per page\"\n value={pageSize}\n onChange={(e) => {\n setPageSize(Number(e.target.value));\n setPage(1);\n }}\n className=\"h-11 appearance-none rounded-lg border border-gray-300 bg-white py-2.5 pl-4 pr-11 text-sm text-gray-700 shadow-theme-xs dark:border-gray-700 dark:bg-gray-900 dark:text-white/90\"\n >\n {sizeOptions.map((n) => (\n <option key={n} value={n}>\n {n}\n </option>\n ))}\n </select>\n <ChevronDown\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute right-4 top-1/2 size-4 -translate-y-1/2 text-gray-500 dark:text-gray-400\"\n />\n </span>\n entries\n </label>\n ) : (\n <span />\n )}\n {showSearch && (\n <Input\n type=\"search\"\n aria-label=\"Search\"\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setPage(1);\n }}\n className=\"sm:w-auto\"\n />\n )}\n </div>\n )}\n\n <div className=\"border-y border-gray-100 dark:border-white/[0.05]\">\n <table className=\"min-w-full\">\n <TableHeader className=\"border-b border-gray-100 bg-gray-50 dark:border-white/[0.05] dark:bg-white/[0.06]\">\n <TableRow>\n {columns.map((col) => {\n const isActive = sortKey === col.key;\n return (\n <TableCell\n key={col.key}\n isHeader\n aria-sort={\n col.sortable\n ? isActive\n ? sortDir === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n : undefined\n }\n className={cn(\n \"whitespace-nowrap px-5 py-3 text-xs font-semibold text-gray-500 dark:text-gray-400\",\n alignClass[col.align ?? \"left\"],\n col.className\n )}\n >\n {col.sortable ? (\n <button\n type=\"button\"\n onClick={() => toggleSort(col)}\n aria-label={`Sort by ${typeof col.header === \"string\" ? col.header : col.key}`}\n className=\"inline-flex select-none items-center gap-2 text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\"\n >\n <SortIcon state={isActive ? sortDir : \"none\"} />\n {col.header}\n </button>\n ) : (\n col.header\n )}\n </TableCell>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody className=\"divide-y divide-gray-100 dark:divide-white/[0.05]\">\n {pageRows.map((row, i) => {\n const index = start + i;\n const id = getRowId ? getRowId(row, index) : index;\n return (\n <TableRow\n key={id}\n onClick={onRowClick ? () => onRowClick(row, index) : undefined}\n className={cn(onRowClick && \"cursor-pointer hover:bg-gray-50 dark:hover:bg-white/[0.03]\")}\n >\n {columns.map((col) => (\n <TableCell\n key={col.key}\n className={cn(\n \"whitespace-nowrap px-5 py-3.5 text-sm text-gray-700 dark:text-gray-300\",\n alignClass[col.align ?? \"left\"],\n col.className\n )}\n >\n {col.render ? col.render(row, index) : String(row[col.key] ?? \"\")}\n </TableCell>\n ))}\n </TableRow>\n );\n })}\n {pageRows.length === 0 && (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"px-5 py-6 text-center text-sm text-gray-400\">\n {emptyContent}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </table>\n </div>\n\n {pagination && (\n <div className=\"p-4\">\n {paginationAlign === \"right\" ? (\n // Default layout: entry counter on the left, controls on the right.\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{counterText}</p>\n {totalPages > 1 && (\n <Pagination currentPage={current} totalPages={totalPages} onPageChange={setPage} />\n )}\n </div>\n ) : (\n // Aligned layout: controls aligned/stretched, counter underneath.\n <div className=\"flex flex-col gap-3\">\n {totalPages > 1 && (\n <Pagination\n align={paginationAlign}\n currentPage={current}\n totalPages={totalPages}\n onPageChange={setPage}\n />\n )}\n <p\n className={cn(\n \"text-sm text-gray-500 dark:text-gray-400\",\n paginationAlign === \"center\" && \"text-center\"\n )}\n >\n {counterText}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport function Table<T extends Record<string, unknown> = Record<string, unknown>>({\n children,\n data,\n columns,\n rowsPerPage,\n rowsPerPageOptions,\n pagination,\n paginationAlign,\n showSizeSelector,\n searchKeys,\n searchPlaceholder,\n defaultSortKey,\n defaultSortDirection,\n getRowId,\n onRowClick,\n emptyContent,\n className,\n ...rest\n}: TableProps<T>) {\n // Data-driven mode: rich table with search / sort / pagination.\n if (columns && data) {\n return (\n <DataDrivenTable\n data={data}\n columns={columns}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n pagination={pagination}\n paginationAlign={paginationAlign}\n showSizeSelector={showSizeSelector}\n searchKeys={searchKeys}\n searchPlaceholder={searchPlaceholder}\n defaultSortKey={defaultSortKey}\n defaultSortDirection={defaultSortDirection}\n getRowId={getRowId}\n onRowClick={onRowClick}\n emptyContent={emptyContent}\n className={className}\n />\n );\n }\n\n // Composable mode: thin wrapper around <table>.\n return (\n <table className={cn(\"min-w-full\", className)} {...rest}>\n {children}\n </table>\n );\n}\n","import React from \"react\";\nimport { ChevronRight } from \"lucide-react\";\n\nexport interface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps {\n pageTitle: string;\n items?: BreadcrumbItem[];\n}\n\nconst ChevronIcon: React.FC = () => (\n <ChevronRight className=\"size-4\" strokeWidth={1.5} aria-hidden=\"true\" />\n);\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({ pageTitle, items }) => {\n return (\n <div className=\"flex flex-wrap items-center justify-between gap-3 mb-6\">\n <h2\n className=\"text-xl font-semibold text-gray-800 dark:text-white/90\"\n x-text=\"pageName\"\n >\n {pageTitle}\n </h2>\n <nav>\n <ol className=\"flex items-center gap-1.5\">\n <li>\n <a\n className=\"inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-gray-400\"\n href=\"/\"\n >\n Home\n <ChevronIcon />\n </a>\n </li>\n {items?.map((item, index) => (\n <li key={index}>\n {item.href ? (\n <a\n className=\"inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-gray-400\"\n href={item.href}\n >\n {item.label}\n <ChevronIcon />\n </a>\n ) : (\n <span className=\"inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-gray-400\">\n {item.label}\n <ChevronIcon />\n </span>\n )}\n </li>\n ))}\n <li className=\"text-sm text-gray-800 dark:text-white/90\">\n {pageTitle}\n </li>\n </ol>\n </nav>\n </div>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { Moon, Sun } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface ThemeToggleButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n theme?: \"light\" | \"dark\";\n onToggle?: () => void;\n}\n\nexport const ThemeToggleButton: React.FC<ThemeToggleButtonProps> = ({\n theme,\n onToggle,\n className,\n onClick,\n ...rest\n}) => {\n const [internalTheme, setInternalTheme] = useState<\"light\" | \"dark\">(\"light\");\n const isControlled = theme !== undefined;\n const currentTheme = isControlled ? theme : internalTheme;\n\n const handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n if (onToggle) {\n onToggle();\n } else if (!isControlled) {\n setInternalTheme((prev) => (prev === \"light\" ? \"dark\" : \"light\"));\n }\n onClick?.(e);\n };\n\n return (\n <button\n onClick={handleClick}\n data-theme={currentTheme}\n className={cn(\n \"relative flex items-center justify-center text-gray-500 transition-colors bg-white border border-gray-200 rounded-full hover:text-dark-900 h-11 w-11 hover:bg-gray-100 hover:text-gray-700 dark:border-gray-800 dark:bg-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white\",\n className\n )}\n {...rest}\n >\n <Sun className=\"hidden size-4 dark:block\" aria-hidden=\"true\" />\n <Moon className=\"size-4 dark:hidden\" aria-hidden=\"true\" />\n </button>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport interface CardProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n ColorOverrideProps {\n /** Heading shown above the description. */\n title?: React.ReactNode;\n /** Supporting text rendered under the title. */\n description?: React.ReactNode;\n /** Icon rendered in a rounded square above the title. */\n icon?: React.ReactNode;\n /** Optional cover image source. Rendered on top (or alongside when `horizontal`). */\n image?: string;\n /** Alt text for the cover image. */\n imageAlt?: string;\n /** Lay the image alongside the content instead of on top. */\n horizontal?: boolean;\n /** Footer area, e.g. a link or a `Button` call-to-action. */\n footer?: React.ReactNode;\n /** Custom body content, rendered after the description. */\n children?: React.ReactNode;\n}\n\nexport const Card: React.FC<CardProps> = ({\n title,\n description,\n icon,\n image,\n imageAlt = \"\",\n horizontal = false,\n footer,\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const cover = image ? (\n <img\n src={image}\n alt={imageAlt}\n className={cn(\n \"object-cover rounded-t-2xl\",\n horizontal\n ? \"h-full w-full sm:w-2/5 sm:max-w-[16rem] sm:rounded-l-2xl sm:rounded-tr-none\"\n : \"h-48 w-full\"\n )}\n />\n ) : null;\n\n return (\n <div\n className={cn(\n \"rounded-2xl border border-gray-200 bg-white dark:border-gray-800 dark:bg-white/[0.03]\",\n horizontal && image && \"flex flex-col sm:flex-row\",\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {cover}\n <div className=\"flex-1 p-5 sm:p-6\">\n {icon && (\n <div className=\"mb-5 flex h-12 w-12 items-center justify-center rounded-xl bg-brand-50 text-brand-500 dark:bg-brand-500/15 dark:text-brand-400\">\n {icon}\n </div>\n )}\n {title && (\n <h3 className=\"text-lg font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </h3>\n )}\n {description && (\n <p className=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {description}\n </p>\n )}\n {children}\n {footer && <div className=\"mt-4\">{footer}</div>}\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n CircleAlert,\n CircleCheck,\n CircleX,\n Info,\n X,\n type LucideIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type ToastVariant = \"success\" | \"danger\" | \"warning\" | \"info\";\nexport type ToastPosition = \"left\" | \"center\" | \"right\";\n\nexport interface ToastProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n ColorOverrideProps {\n /** Color/severity variant. */\n variant?: ToastVariant;\n title: React.ReactNode;\n message?: React.ReactNode;\n /** Override the default variant icon. */\n icon?: React.ReactNode;\n /** Hide the leading icon entirely. */\n hideIcon?: boolean;\n /** Render the dismiss button (default `true`). */\n showCloseButton?: boolean;\n /** Called when the close button is clicked. */\n onClose?: () => void;\n /** Hide the colored accent bar at the bottom. */\n hideAccentBar?: boolean;\n /** Fixed bottom alignment. Default: `\"right\"`. */\n position?: ToastPosition;\n /** Auto-dismiss duration in milliseconds. Omit or pass `0` to keep visible. */\n duration?: number;\n}\n\nconst variantStyles: Record<ToastVariant, { iconWrap: string; bar: string }> = {\n success: {\n iconWrap:\n \"bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500\",\n bar: \"bg-success-500\",\n },\n danger: {\n iconWrap:\n \"bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500\",\n bar: \"bg-error-500\",\n },\n warning: {\n iconWrap:\n \"bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400\",\n bar: \"bg-warning-500\",\n },\n info: {\n iconWrap:\n \"bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500\",\n bar: \"bg-blue-light-500\",\n },\n};\n\nconst variantIcons: Record<ToastVariant, LucideIcon> = {\n success: CircleCheck,\n danger: CircleX,\n warning: CircleAlert,\n info: Info,\n};\n\nconst positionStyles: Record<ToastPosition, string> = {\n left: \"bottom-6 left-4 right-4 sm:left-6 sm:right-auto sm:w-full\",\n center:\n \"bottom-6 left-1/2 w-[calc(100%-2rem)] -translate-x-1/2 sm:w-full\",\n right: \"bottom-6 left-4 right-4 sm:left-auto sm:right-6 sm:w-full\",\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n variant = \"success\",\n title,\n message,\n icon,\n hideIcon = false,\n showCloseButton = true,\n onClose,\n hideAccentBar = false,\n position = \"right\",\n duration,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const styles = variantStyles[variant];\n const Icon = variantIcons[variant];\n const [isVisible, setIsVisible] = useState(true);\n\n const handleClose = useCallback(() => {\n setIsVisible(false);\n onClose?.();\n }, [onClose]);\n\n useEffect(() => {\n if (!duration || duration <= 0) return;\n\n const timer = window.setTimeout(handleClose, duration);\n return () => window.clearTimeout(timer);\n }, [duration, handleClose]);\n\n if (!isVisible) return null;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"fixed z-9999 flex max-w-md items-center gap-3 overflow-hidden rounded-xl border border-gray-200 bg-white px-4 py-3.5 pr-10 shadow-theme-sm dark:border-gray-800 dark:bg-gray-900\",\n positionStyles[position],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {!hideIcon && (\n <span\n className={cn(\n \"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg\",\n styles.iconWrap\n )}\n >\n {icon ?? <Icon className=\"size-4\" aria-hidden=\"true\" />}\n </span>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-gray-800 dark:text-white/90\">\n {title}\n </p>\n {message && (\n <p className=\"mt-0.5 text-sm text-gray-500 dark:text-gray-400\">\n {message}\n </p>\n )}\n </div>\n {showCloseButton && (\n <button\n type=\"button\"\n aria-label=\"Close\"\n onClick={handleClose}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 transition hover:text-gray-700 dark:hover:text-gray-200\"\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n {!hideAccentBar && (\n <span\n className={cn(\"absolute inset-x-0 bottom-0 h-1\", styles.bar)}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n};\n","\"use client\";\nimport React, { useState, useCallback } from \"react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type AccordionSelectionMode = \"single\" | \"multiple\";\n\nexport interface AccordionItemProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Unique key identifying this item. */\n itemKey: string;\n /** Header content. */\n title: React.ReactNode;\n /** Optional content rendered before the title (e.g. an icon). */\n startContent?: React.ReactNode;\n /** Disable expand/collapse for this item. */\n disabled?: boolean;\n}\n\ninterface AccordionContextValue {\n expanded: string[];\n toggle: (key: string) => void;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nconst ChevronIcon: React.FC<{ open: boolean }> = ({ open }) => (\n <ChevronDown\n className={cn(\n \"size-4 shrink-0 text-gray-500 transition-transform duration-200 dark:text-gray-400\",\n open && \"rotate-180\"\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\n itemKey,\n title,\n startContent,\n disabled = false,\n children,\n className,\n ...rest\n}) => {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) {\n throw new Error(\"AccordionItem must be used within an Accordion\");\n }\n const open = ctx.expanded.includes(itemKey);\n const panelId = `accordion-panel-${itemKey}`;\n const buttonId = `accordion-button-${itemKey}`;\n\n return (\n <div\n className={cn(\n \"border-b border-gray-200 last:border-b-0 dark:border-gray-800\",\n className\n )}\n {...rest}\n >\n <h3>\n <button\n type=\"button\"\n id={buttonId}\n aria-expanded={open}\n aria-controls={panelId}\n disabled={disabled}\n onClick={() => !disabled && ctx.toggle(itemKey)}\n className={cn(\n \"flex w-full items-center gap-3 px-4 py-4 text-left text-sm font-medium text-gray-800 transition dark:text-white/90\",\n disabled\n ? \"cursor-not-allowed opacity-50\"\n : \"hover:bg-gray-50 dark:hover:bg-white/[0.03]\"\n )}\n >\n {startContent && (\n <span className=\"flex items-center\">{startContent}</span>\n )}\n <span className=\"flex-1\">{title}</span>\n <ChevronIcon open={open} />\n </button>\n </h3>\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={buttonId}\n aria-hidden={!open}\n inert={!open}\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-300 ease-in-out motion-reduce:transition-none\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\"\n )}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-4 pb-4 text-sm text-gray-500 dark:text-gray-400\">\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \"single\" allows one open item, \"multiple\" allows many. */\n selectionMode?: AccordionSelectionMode;\n /** Uncontrolled initial expanded keys. */\n defaultExpandedKeys?: string[];\n /** Controlled expanded keys. */\n expandedKeys?: string[];\n /** Called with the new set of expanded keys when it changes. */\n onExpandedChange?: (keys: string[]) => void;\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({\n selectionMode = \"single\",\n defaultExpandedKeys = [],\n expandedKeys,\n onExpandedChange,\n children,\n className,\n ...rest\n}) => {\n const isControlled = expandedKeys !== undefined;\n const [internal, setInternal] = useState<string[]>(defaultExpandedKeys);\n const expanded = isControlled ? expandedKeys! : internal;\n\n const toggle = useCallback(\n (key: string) => {\n const isOpen = expanded.includes(key);\n let next: string[];\n if (selectionMode === \"single\") {\n next = isOpen ? [] : [key];\n } else {\n next = isOpen\n ? expanded.filter((k) => k !== key)\n : [...expanded, key];\n }\n if (!isControlled) setInternal(next);\n onExpandedChange?.(next);\n },\n [expanded, selectionMode, isControlled, onExpandedChange]\n );\n\n return (\n <AccordionContext.Provider value={{ expanded, toggle }}>\n <div\n className={cn(\n \"divide-y divide-gray-200 overflow-hidden rounded-xl border border-gray-200 bg-white dark:divide-gray-800 dark:border-gray-800 dark:bg-white/[0.03]\",\n className\n )}\n {...rest}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n};\n","\"use client\";\nimport React, { useState, useRef } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type TabsVariant = \"underline\" | \"solid\" | \"pill\";\n\nexport interface TabProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Unique key identifying this tab. */\n tabKey: string;\n /** Tab label (may include an icon). */\n title: React.ReactNode;\n /** Disable selection of this tab. */\n disabled?: boolean;\n}\n\n/** Tab is a configuration element consumed by Tabs; it renders its children as the panel. */\nexport const Tab: React.FC<TabProps> = ({\n children,\n tabKey,\n title,\n disabled,\n ...rest\n}) => {\n return <div {...rest}>{children}</div>;\n};\n\nexport interface TabsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n variant?: TabsVariant;\n /** Controlled selected key. */\n selectedKey?: string;\n /** Uncontrolled initial selected key. */\n defaultSelectedKey?: string;\n /** Called with the newly selected key. */\n onSelectionChange?: (key: string) => void;\n /** Accent color for the active tab (any CSS color). Defaults to the brand color. */\n color?: string;\n children?: React.ReactNode;\n}\n\ntype TabElement = React.ReactElement<TabProps>;\n\nexport const Tabs: React.FC<TabsProps> = ({\n variant = \"underline\",\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n color,\n children,\n className,\n ...rest\n}) => {\n const tabs = React.Children.toArray(children).filter(\n React.isValidElement\n ) as TabElement[];\n\n const firstKey = tabs[0]?.props.tabKey;\n const isControlled = selectedKey !== undefined;\n const [internal, setInternal] = useState<string>(\n defaultSelectedKey ?? firstKey\n );\n const active = isControlled ? selectedKey! : internal;\n\n const tabRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n\n const select = (key: string) => {\n if (!isControlled) setInternal(key);\n onSelectionChange?.(key);\n };\n\n const onKeyDown = (e: React.KeyboardEvent, index: number) => {\n if (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\") return;\n e.preventDefault();\n const dir = e.key === \"ArrowRight\" ? 1 : -1;\n const count = tabs.length;\n let next = index;\n for (let i = 0; i < count; i++) {\n next = (next + dir + count) % count;\n if (!tabs[next].props.disabled) break;\n }\n const nextKey = tabs[next].props.tabKey;\n tabRefs.current[nextKey]?.focus();\n select(nextKey);\n };\n\n const listClasses: Record<TabsVariant, string> = {\n underline: \"flex gap-2 border-b border-gray-200 dark:border-gray-800\",\n solid:\n \"inline-flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-white/[0.03]\",\n pill: \"inline-flex gap-2\",\n };\n\n const tabClasses = (isActive: boolean): string => {\n const base =\n \"inline-flex items-center gap-2 text-sm font-medium transition focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50\";\n switch (variant) {\n case \"solid\":\n return cn(\n base,\n \"rounded-md px-4 py-2\",\n isActive\n ? \"bg-white text-gray-900 shadow-theme-xs dark:bg-gray-800 dark:text-white/90\"\n : \"text-gray-500 hover:text-gray-800 dark:text-gray-400 dark:hover:text-white/90\"\n );\n case \"pill\":\n return cn(\n base,\n \"rounded-full px-4 py-2\",\n isActive\n ? \"bg-brand-500 text-white\"\n : \"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-white/[0.03] dark:text-gray-400 dark:hover:bg-white/[0.06]\"\n );\n case \"underline\":\n default:\n return cn(\n base,\n \"border-b-2 px-4 py-3\",\n isActive\n ? \"border-brand-500 text-brand-500\"\n : \"border-transparent text-gray-500 hover:text-gray-800 dark:text-gray-400 dark:hover:text-white/90\"\n );\n }\n };\n\n const activeColorStyle = (isActive: boolean): React.CSSProperties => {\n if (!color || !isActive) return {};\n if (variant === \"underline\") return { borderColor: color, color };\n if (variant === \"pill\") return { backgroundColor: color };\n return { color };\n };\n\n const activePanel = tabs.find((t) => t.props.tabKey === active);\n\n return (\n <div className={cn(\"w-full\", className)} {...rest}>\n <div role=\"tablist\" className={listClasses[variant]}>\n {tabs.map((tab, index) => {\n const { tabKey, title, disabled = false } = tab.props;\n const isActive = tabKey === active;\n return (\n <button\n key={tabKey}\n ref={(el) => {\n tabRefs.current[tabKey] = el;\n }}\n role=\"tab\"\n type=\"button\"\n id={`tab-${tabKey}`}\n aria-selected={isActive}\n aria-controls={`tabpanel-${tabKey}`}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n onClick={() => !disabled && select(tabKey)}\n onKeyDown={(e) => onKeyDown(e, index)}\n className={tabClasses(isActive)}\n style={activeColorStyle(isActive)}\n >\n {title}\n </button>\n );\n })}\n </div>\n {activePanel && (\n <div\n role=\"tabpanel\"\n id={`tabpanel-${active}`}\n aria-labelledby={`tab-${active}`}\n className=\"pt-4 text-sm text-gray-600 dark:text-gray-300\"\n >\n {activePanel.props.children}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\nimport React, { useId, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type TooltipPlacement = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface TooltipProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\" | \"content\">,\n ColorOverrideProps {\n /** The content rendered inside the tooltip bubble. */\n content: React.ReactNode;\n /** Which side of the trigger the tooltip appears on. */\n placement?: TooltipPlacement;\n /** Delay in milliseconds before showing the tooltip. */\n delay?: number;\n /** When true the tooltip never opens. */\n disabled?: boolean;\n /** The trigger element. */\n children: React.ReactNode;\n}\n\nconst placementClasses: Record<TooltipPlacement, string> = {\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\n};\n\nconst arrowClasses: Record<TooltipPlacement, string> = {\n top: \"top-full left-1/2 -translate-x-1/2 -mt-1\",\n right: \"right-full top-1/2 -translate-y-1/2 -mr-1\",\n bottom: \"bottom-full left-1/2 -translate-x-1/2 -mb-1\",\n left: \"left-full top-1/2 -translate-y-1/2 -ml-1\",\n};\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n content,\n placement = \"top\",\n delay = 0,\n disabled = false,\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const [visible, setVisible] = useState(false);\n const tooltipId = useId();\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const show = () => {\n if (disabled) return;\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => setVisible(true), delay);\n } else {\n setVisible(true);\n }\n };\n\n const hide = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n setVisible(false);\n };\n\n return (\n <span\n className={cn(\"relative inline-flex\", className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n aria-describedby={visible ? tooltipId : undefined}\n {...rest}\n >\n {children}\n {!disabled && visible && (\n <span\n id={tooltipId}\n role=\"tooltip\"\n className={cn(\n \"pointer-events-none absolute whitespace-nowrap rounded-lg bg-gray-900 px-3 py-2 text-xs font-medium text-white shadow-theme-lg dark:bg-gray-700 dark:text-white/90\",\n layers.floating,\n placementClasses[placement]\n )}\n style={{\n ...styleOverride({ bgColor, textColor, borderColor }),\n ...style,\n }}\n >\n {content}\n <span\n className={cn(\n \"absolute h-2 w-2 rotate-45 bg-gray-900 dark:bg-gray-700\",\n arrowClasses[placement]\n )}\n style={bgColor ? { backgroundColor: bgColor } : undefined}\n aria-hidden=\"true\"\n />\n </span>\n )}\n </span>\n );\n};\n","\"use client\";\nimport React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\nexport type PopoverPlacement = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface PopoverProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"content\"> {\n /** The clickable trigger element. */\n trigger: React.ReactNode;\n /** Which side of the trigger the panel appears on. */\n placement?: PopoverPlacement;\n /** Controlled open state. Omit for uncontrolled behavior. */\n isOpen?: boolean;\n /** Called when the open state should change (controlled or uncontrolled). */\n onOpenChange?: (open: boolean) => void;\n /** Initial open state when uncontrolled. */\n defaultOpen?: boolean;\n /** Close when clicking outside the popover. */\n closeOnOutsideClick?: boolean;\n /** Close when pressing Escape. */\n closeOnEsc?: boolean;\n /** Render panel under document.body to avoid clipping inside cards/overflow containers. */\n portal?: boolean;\n /** Panel content. */\n children: React.ReactNode;\n}\n\nexport const Popover: React.FC<PopoverProps> = ({\n trigger,\n placement = \"bottom\",\n isOpen: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n closeOnOutsideClick = true,\n closeOnEsc = true,\n portal = true,\n children,\n className,\n ...rest\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [panelPosition, setPanelPosition] = useState<React.CSSProperties>();\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n\n const setOpen = (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n };\n\n useEffect(() => {\n if (!open) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n closeOnOutsideClick &&\n wrapperRef.current &&\n !wrapperRef.current.contains(event.target as Node) &&\n !panelRef.current?.contains(event.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n const handleEscape = (event: KeyboardEvent) => {\n if (closeOnEsc && event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscape);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscape);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, closeOnOutsideClick, closeOnEsc]);\n\n const updatePanelPosition = useCallback(() => {\n const trigger = wrapperRef.current;\n const panel = panelRef.current;\n if (!trigger || !panel) return;\n\n const rect = trigger.getBoundingClientRect();\n const panelWidth = panel.offsetWidth;\n const panelHeight = panel.offsetHeight;\n const viewportPadding = 8;\n const gap = 8;\n const centeredLeft = rect.left + rect.width / 2 - panelWidth / 2;\n const centeredTop = rect.top + rect.height / 2 - panelHeight / 2;\n const canFitAbove = rect.top - gap - panelHeight >= viewportPadding;\n const canFitBelow = rect.bottom + gap + panelHeight <= window.innerHeight - viewportPadding;\n const canFitLeft = rect.left - gap - panelWidth >= viewportPadding;\n const canFitRight = rect.right + gap + panelWidth <= window.innerWidth - viewportPadding;\n\n let effectivePlacement: PopoverPlacement = placement;\n if (placement === \"bottom\" && !canFitBelow && canFitAbove) {\n effectivePlacement = \"top\";\n } else if (placement === \"top\" && !canFitAbove && canFitBelow) {\n effectivePlacement = \"bottom\";\n } else if (placement === \"left\" && !canFitLeft && canFitRight) {\n effectivePlacement = \"right\";\n } else if (placement === \"right\" && !canFitRight && canFitLeft) {\n effectivePlacement = \"left\";\n }\n\n let top = rect.bottom + gap;\n let left = centeredLeft;\n\n if (effectivePlacement === \"top\") {\n top = rect.top - gap - panelHeight;\n left = centeredLeft;\n } else if (effectivePlacement === \"right\") {\n top = centeredTop;\n left = rect.right + gap;\n } else if (effectivePlacement === \"left\") {\n top = centeredTop;\n left = rect.left - gap - panelWidth;\n }\n\n setPanelPosition({\n top: Math.min(\n Math.max(viewportPadding, top),\n window.innerHeight - panelHeight - viewportPadding\n ),\n left: Math.min(\n Math.max(viewportPadding, left),\n window.innerWidth - panelWidth - viewportPadding\n ),\n });\n }, [placement]);\n\n useLayoutEffect(() => {\n if (!open || !portal) return;\n\n updatePanelPosition();\n window.addEventListener(\"resize\", updatePanelPosition);\n window.addEventListener(\"scroll\", updatePanelPosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePanelPosition);\n window.removeEventListener(\"scroll\", updatePanelPosition, true);\n };\n }, [open, portal, updatePanelPosition]);\n\n const panel = open ? (\n <div\n ref={panelRef}\n role=\"dialog\"\n className={cn(\n \"min-w-48 rounded-xl border border-gray-200 bg-white p-4 shadow-theme-lg dark:border-gray-700 dark:bg-gray-900 dark:text-white/90\",\n portal ? cn(\"fixed\", layers.portal) : cn(\"absolute top-full left-1/2 mt-2 -translate-x-1/2\", layers.floating),\n className\n )}\n style={{\n ...(portal && !panelPosition ? { visibility: \"hidden\" } : undefined),\n ...(portal ? panelPosition : undefined),\n }}\n {...rest}\n >\n {children}\n </div>\n ) : null;\n\n return (\n <div ref={wrapperRef} className=\"relative inline-block\">\n {/* The trigger is rendered as-is inside a non-interactive wrapper so a\n caller can pass their own <button>/<a> without nesting interactive\n elements (which is invalid HTML). The click bubbles up from it. */}\n <span\n className=\"inline-flex cursor-pointer\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n >\n {trigger}\n </span>\n {portal && typeof document !== \"undefined\"\n ? panel && createPortal(panel, document.body)\n : panel}\n </div>\n );\n};\n","\"use client\";\nimport React, { useEffect } from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\nexport type DrawerPlacement = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport interface DrawerProps extends React.HTMLAttributes<HTMLDivElement> {\n isOpen: boolean;\n onClose: () => void;\n /** Side the drawer slides in from. */\n placement?: DrawerPlacement;\n showCloseButton?: boolean;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n /** Tailwind size class for the panel (width for left/right, height for top/bottom). */\n size?: string;\n}\n\nconst panelBaseByPlacement: Record<DrawerPlacement, string> = {\n left: \"top-0 left-0 h-full\",\n right: \"top-0 right-0 h-full\",\n top: \"top-0 left-0 w-full\",\n bottom: \"bottom-0 left-0 w-full\",\n};\n\nconst openTransform: Record<DrawerPlacement, string> = {\n left: \"translate-x-0\",\n right: \"translate-x-0\",\n top: \"translate-y-0\",\n bottom: \"translate-y-0\",\n};\n\nconst closedTransform: Record<DrawerPlacement, string> = {\n left: \"-translate-x-full\",\n right: \"translate-x-full\",\n top: \"-translate-y-full\",\n bottom: \"translate-y-full\",\n};\n\nconst defaultSize: Record<DrawerPlacement, string> = {\n left: \"w-80 max-w-full\",\n right: \"w-80 max-w-full\",\n top: \"h-80 max-h-full\",\n bottom: \"h-80 max-h-full\",\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n children,\n className,\n placement = \"right\",\n showCloseButton = true,\n closeOnBackdrop = true,\n closeOnEsc = true,\n size,\n ...rest\n}) => {\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen && closeOnEsc) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose, closeOnEsc]);\n\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n return (\n <div className={cn(\"drawer fixed inset-0\", layers.overlay)}>\n <div\n className=\"fixed inset-0 h-full w-full bg-black/50 backdrop-blur-sm\"\n onClick={closeOnBackdrop ? onClose : undefined}\n ></div>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={cn(\n \"fixed flex flex-col overflow-y-auto bg-white shadow-theme-lg transition-transform duration-300 ease-in-out dark:bg-gray-900 dark:text-white/90\",\n panelBaseByPlacement[placement],\n size ?? defaultSize[placement],\n isOpen ? openTransform[placement] : closedTransform[placement],\n className\n )}\n onClick={(e) => e.stopPropagation()}\n {...rest}\n >\n {showCloseButton && (\n <button\n onClick={onClose}\n aria-label=\"Close drawer\"\n className=\"absolute right-3 top-3 z-99 flex h-9.5 w-9.5 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white\"\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n {children}\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type ChipVariant = \"light\" | \"solid\";\nexport type ChipSize = \"sm\" | \"md\";\nexport type ChipColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\n\nexport interface ChipProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n ColorOverrideProps {\n variant?: ChipVariant;\n size?: ChipSize;\n color?: ChipColor;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n /** Rendered at the start of the chip, e.g. a small Avatar. */\n avatar?: React.ReactNode;\n /** When provided, renders a small close button that fires this callback. */\n onClose?: () => void;\n}\n\nconst sizeStyles: Record<ChipSize, string> = {\n sm: \"text-theme-xs\",\n md: \"text-sm\",\n};\n\nconst variants: Record<ChipVariant, Record<ChipColor, string>> = {\n light: {\n primary: \"bg-brand-50 text-brand-500 dark:bg-brand-500/15 dark:text-brand-400\",\n success: \"bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500\",\n error: \"bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500\",\n warning: \"bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400\",\n info: \"bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500\",\n light: \"bg-gray-100 text-gray-700 dark:bg-white/5 dark:text-white/80\",\n dark: \"bg-gray-500 text-white dark:bg-white/5 dark:text-white\",\n },\n solid: {\n primary: \"bg-brand-500 text-white dark:text-white\",\n success: \"bg-success-500 text-white dark:text-white\",\n error: \"bg-error-500 text-white dark:text-white\",\n warning: \"bg-warning-500 text-white dark:text-white\",\n info: \"bg-blue-light-500 text-white dark:text-white\",\n light: \"bg-gray-400 dark:bg-white/5 text-white dark:text-white/80\",\n dark: \"bg-gray-700 text-white dark:text-white\",\n },\n};\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = \"light\",\n color = \"primary\",\n size = \"md\",\n startIcon,\n endIcon,\n avatar,\n onClose,\n children,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n return (\n <span\n className={cn(\n \"inline-flex items-center justify-center gap-1 rounded-full font-medium\",\n avatar ? \"py-0.5 pl-0.5 pr-2.5\" : \"px-2.5 py-0.5\",\n sizeStyles[size],\n variants[variant][color],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {avatar && <span className=\"flex items-center\">{avatar}</span>}\n {startIcon && <span className=\"flex items-center\">{startIcon}</span>}\n {children}\n {endIcon && <span className=\"flex items-center\">{endIcon}</span>}\n {onClose && (\n <button\n type=\"button\"\n aria-label=\"Remove\"\n onClick={onClose}\n className=\"ml-0.5 flex h-4 w-4 items-center justify-center rounded-full text-current opacity-70 transition hover:opacity-100 focus:outline-none\"\n >\n <X className=\"size-4\" strokeWidth={2} aria-hidden=\"true\" />\n </button>\n )}\n </span>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type ProgressColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\">,\n ColorOverrideProps {\n /** Current value (clamped between 0 and maxValue). */\n value?: number;\n /** Maximum value. Defaults to 100. */\n maxValue?: number;\n color?: ProgressColor;\n size?: ProgressSize;\n /** Optional label shown above the track. */\n label?: React.ReactNode;\n /** When true, shows the percentage (e.g. \"75%\") next to the label. */\n showValueLabel?: boolean;\n /** Animated, value-less progress. */\n isIndeterminate?: boolean;\n}\n\nconst sizeStyles: Record<ProgressSize, string> = {\n sm: \"h-1.5\",\n md: \"h-2.5\",\n lg: \"h-4\",\n};\n\nconst fillColors: Record<ProgressColor, string> = {\n primary: \"bg-brand-500\",\n success: \"bg-success-500\",\n error: \"bg-error-500\",\n warning: \"bg-warning-500\",\n info: \"bg-blue-light-500\",\n light: \"bg-gray-400\",\n dark: \"bg-gray-700 dark:bg-gray-300\",\n};\n\nconst indeterminateKeyframes = `@keyframes tdui-progress-indeterminate {\n 0% { left: -40%; width: 40%; }\n 50% { left: 30%; width: 60%; }\n 100% { left: 100%; width: 40%; }\n}`;\n\nexport const Progress: React.FC<ProgressProps> = ({\n value = 0,\n maxValue = 100,\n color = \"primary\",\n size = \"md\",\n label,\n showValueLabel = false,\n isIndeterminate = false,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const safeMax = maxValue <= 0 ? 100 : maxValue;\n const clamped = Math.min(Math.max(value, 0), safeMax);\n const percent = Math.round((clamped / safeMax) * 100);\n\n return (\n <div className={cn(\"w-full\", className)} {...rest}>\n {(label || showValueLabel) && (\n <div className=\"mb-1.5 flex items-center justify-between\">\n {label && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-400\">\n {label}\n </span>\n )}\n {showValueLabel && !isIndeterminate && (\n <span className=\"text-sm font-medium text-gray-700 dark:text-gray-400\">\n {percent}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={isIndeterminate ? undefined : clamped}\n className={cn(\n \"relative w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-800\",\n sizeStyles[size]\n )}\n style={styleOverride({ bgColor, borderColor })}\n >\n {isIndeterminate ? (\n <>\n <style>{indeterminateKeyframes}</style>\n <div\n className={cn(\"absolute top-0 h-full rounded-full\", fillColors[color])}\n style={{\n animation:\n \"tdui-progress-indeterminate 1.5s ease-in-out infinite\",\n ...(textColor ? { backgroundColor: textColor } : {}),\n ...style,\n }}\n />\n </>\n ) : (\n <div\n className={cn(\n \"h-full rounded-full transition-all duration-300\",\n fillColors[color]\n )}\n style={{\n width: `${percent}%`,\n ...(textColor ? { backgroundColor: textColor } : {}),\n ...style,\n }}\n />\n )}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type PollResultsColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\nexport type PollResultsSize = \"sm\" | \"md\" | \"lg\";\nexport type PollResultsTextSize = React.CSSProperties[\"fontSize\"];\nexport type PollResultsTextColor = React.CSSProperties[\"color\"];\nexport type PollResultsTextWeight = React.CSSProperties[\"fontWeight\"];\n\nexport interface PollResultsSeries {\n label?: React.ReactNode;\n value: number;\n color?: PollResultsColor;\n fillColor?: string;\n ariaLabel?: string;\n}\n\nexport interface PollResultsOption {\n label: React.ReactNode;\n value?: number;\n color?: PollResultsColor;\n fillColor?: string;\n ariaLabel?: string;\n series?: PollResultsSeries[];\n}\n\nexport interface PollResultsProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\">,\n ColorOverrideProps {\n options: PollResultsOption[];\n maxValue?: number;\n size?: PollResultsSize;\n color?: PollResultsColor;\n trackColor?: string;\n showValueLabel?: boolean;\n showSeriesLabels?: boolean;\n valueFormatter?: (value: number, percent: number) => React.ReactNode;\n labelTextSize?: PollResultsTextSize;\n labelTextColor?: PollResultsTextColor;\n labelTextWeight?: PollResultsTextWeight;\n valueTextSize?: PollResultsTextSize;\n valueTextColor?: PollResultsTextColor;\n valueTextWeight?: PollResultsTextWeight;\n seriesLabelTextSize?: PollResultsTextSize;\n seriesLabelTextColor?: PollResultsTextColor;\n seriesLabelTextWeight?: PollResultsTextWeight;\n seriesValueTextSize?: PollResultsTextSize;\n seriesValueTextColor?: PollResultsTextColor;\n seriesValueTextWeight?: PollResultsTextWeight;\n}\n\nconst trackSizes: Record<PollResultsSize, string> = {\n sm: \"h-2.5\",\n md: \"h-3\",\n lg: \"h-4\",\n};\n\nconst colorStyles: Record<PollResultsColor, string> = {\n primary: \"bg-brand-500\",\n success: \"bg-success-500\",\n error: \"bg-error-500\",\n warning: \"bg-warning-500\",\n info: \"bg-blue-light-500\",\n light: \"bg-gray-400\",\n dark: \"bg-gray-700 dark:bg-gray-300\",\n};\n\nconst defaultColorCycle: PollResultsColor[] = [\n \"primary\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"dark\",\n];\n\nconst defaultSeriesColorCycle: PollResultsColor[] = [\"primary\", \"success\"];\n\nconst clampValue = (value: number, maxValue: number) => {\n return Math.min(Math.max(value, 0), maxValue);\n};\n\nconst toPercent = (value: number, maxValue: number) => {\n return Math.round((clampValue(value, maxValue) / maxValue) * 100);\n};\n\nconst nodeToLabel = (node: React.ReactNode) => {\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node);\n }\n\n return undefined;\n};\n\nconst defaultValueFormatter = (_value: number, percent: number) => `${percent}%`;\n\nconst textStyle = ({\n size,\n color,\n weight,\n}: {\n size?: PollResultsTextSize;\n color?: PollResultsTextColor;\n weight?: PollResultsTextWeight;\n}) => ({\n ...(size ? { fontSize: size } : {}),\n ...(color ? { color } : {}),\n ...(weight ? { fontWeight: weight } : {}),\n});\n\nexport const PollResults: React.FC<PollResultsProps> = ({\n options,\n maxValue = 100,\n size = \"md\",\n color = \"primary\",\n trackColor,\n showValueLabel = true,\n showSeriesLabels = true,\n valueFormatter = defaultValueFormatter,\n labelTextSize,\n labelTextColor,\n labelTextWeight,\n valueTextSize,\n valueTextColor,\n valueTextWeight,\n seriesLabelTextSize,\n seriesLabelTextColor,\n seriesLabelTextWeight,\n seriesValueTextSize,\n seriesValueTextColor,\n seriesValueTextWeight,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const safeMax = maxValue <= 0 ? 100 : maxValue;\n const optionLabelStyle = textStyle({\n size: labelTextSize,\n color: labelTextColor,\n weight: labelTextWeight,\n });\n const optionValueStyle = textStyle({\n size: valueTextSize,\n color: valueTextColor,\n weight: valueTextWeight,\n });\n const groupedLabelStyle = textStyle({\n size: seriesLabelTextSize,\n color: seriesLabelTextColor,\n weight: seriesLabelTextWeight,\n });\n const groupedValueStyle = textStyle({\n size: seriesValueTextSize ?? valueTextSize,\n color: seriesValueTextColor ?? valueTextColor,\n weight: seriesValueTextWeight ?? valueTextWeight,\n });\n\n return (\n <div\n className={cn(\"w-full space-y-5 text-gray-800 dark:text-white/90\", className)}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {options.map((option, optionIndex) => {\n const optionText = nodeToLabel(option.label);\n const series = option.series?.length\n ? option.series\n : [\n {\n value: option.value ?? 0,\n color: option.color ?? defaultColorCycle[optionIndex % defaultColorCycle.length] ?? color,\n fillColor: option.fillColor,\n ariaLabel: option.ariaLabel,\n },\n ];\n const isGrouped = series.length > 1;\n const singlePercent = toPercent(series[0]?.value ?? 0, safeMax);\n\n return (\n <div key={`${optionText ?? \"poll-option\"}-${optionIndex}`}>\n <div className=\"mb-2 flex items-center justify-between gap-4\">\n <span\n className=\"min-w-0 break-words text-xl font-semibold leading-snug text-gray-800 dark:text-white/90\"\n style={optionLabelStyle}\n >\n {option.label}\n </span>\n {!isGrouped && showValueLabel && (\n <span\n className=\"shrink-0 text-xl font-semibold leading-snug text-gray-600 dark:text-gray-300\"\n style={optionValueStyle}\n >\n {valueFormatter(series[0]?.value ?? 0, singlePercent)}\n </span>\n )}\n </div>\n\n <div className={cn(\"flex flex-col\", isGrouped ? \"gap-2.5\" : \"gap-0\")}>\n {series.map((entry, seriesIndex) => {\n const percent = toPercent(entry.value, safeMax);\n const fillColor = entry.fillColor;\n const entryColor =\n entry.color ??\n (isGrouped\n ? defaultSeriesColorCycle[seriesIndex % defaultSeriesColorCycle.length]\n : option.color ?? defaultColorCycle[optionIndex % defaultColorCycle.length]) ??\n color;\n const entryLabel = nodeToLabel(entry.label);\n const ariaLabel =\n entry.ariaLabel ??\n [optionText, isGrouped ? entryLabel : undefined]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div key={`${entryLabel ?? \"series\"}-${seriesIndex}`}>\n {isGrouped && (showSeriesLabels || showValueLabel) && (\n <div className=\"mb-1.5 flex items-center justify-between gap-3\">\n {showSeriesLabels ? (\n <span\n className=\"min-w-0 break-words text-xs font-medium text-gray-500 dark:text-gray-400\"\n style={groupedLabelStyle}\n >\n {entry.label}\n </span>\n ) : (\n <span />\n )}\n {showValueLabel && (\n <span\n className=\"shrink-0 text-xs font-semibold text-gray-600 dark:text-gray-300\"\n style={groupedValueStyle}\n >\n {valueFormatter(entry.value, percent)}\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-label={ariaLabel || undefined}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={clampValue(entry.value, safeMax)}\n className={cn(\n \"relative w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800\",\n trackSizes[size]\n )}\n style={trackColor ? { backgroundColor: trackColor } : undefined}\n >\n <div\n className={cn(\n \"h-full rounded-full transition-all duration-300\",\n fillColor ? undefined : colorStyles[entryColor]\n )}\n style={{\n width: `${percent}%`,\n ...(fillColor ? { backgroundColor: fillColor } : {}),\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type SpinnerColor =\n | \"primary\" | \"success\" | \"error\" | \"warning\" | \"info\" | \"light\" | \"dark\";\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SpinnerProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\">,\n ColorOverrideProps {\n size?: SpinnerSize;\n color?: SpinnerColor;\n /** Optional text rendered beside the spinner (also used as aria-label). */\n label?: React.ReactNode;\n}\n\nconst sizeStyles: Record<SpinnerSize, string> = {\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-[3px]\",\n};\n\nconst colorStyles: Record<SpinnerColor, string> = {\n primary: \"text-brand-500\",\n success: \"text-success-500\",\n error: \"text-error-500\",\n warning: \"text-warning-500\",\n info: \"text-blue-light-500\",\n light: \"text-gray-400\",\n dark: \"text-gray-700 dark:text-gray-300\",\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = \"md\",\n color = \"primary\",\n label,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const accessibleLabel = typeof label === \"string\" ? label : \"Loading\";\n return (\n <span\n role=\"status\"\n aria-label={accessibleLabel}\n className={cn(\"inline-flex items-center gap-2\", className)}\n style={{ ...styleOverride({ bgColor, borderColor }), ...style }}\n {...rest}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n \"inline-block animate-spin rounded-full border-current border-t-transparent\",\n sizeStyles[size],\n !textColor && colorStyles[color]\n )}\n style={textColor ? { color: textColor } : undefined}\n />\n {label && (\n <span className=\"text-sm font-medium text-gray-500 dark:text-gray-400\">\n {label}\n </span>\n )}\n </span>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, renders children normally with no shimmer. */\n isLoaded?: boolean;\n /** Convenience sizing (any CSS length). Falls back to className. */\n width?: string | number;\n height?: string | number;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n isLoaded = false,\n width,\n height,\n className,\n children,\n style,\n ...rest\n}) => {\n if (isLoaded) {\n return <>{children}</>;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"animate-pulse rounded-lg bg-gray-200 dark:bg-gray-800\",\n className\n )}\n style={{ width, height, ...style }}\n {...rest}\n >\n {/* Keep children in the tree (invisible) so layout can be reserved. */}\n <span className=\"invisible\">{children}</span>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type CodeColor =\n | \"primary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"default\";\n\nexport type CodeSize = \"sm\" | \"md\";\n\nexport interface CodeProps\n extends Omit<React.HTMLAttributes<HTMLElement>, \"color\">,\n ColorOverrideProps {\n color?: CodeColor;\n size?: CodeSize;\n}\n\nconst sizeClasses: Record<CodeSize, string> = {\n sm: \"text-xs px-1 py-0.5\",\n md: \"text-sm px-1.5 py-0.5\",\n};\n\nconst colorClasses: Record<CodeColor, string> = {\n primary: \"bg-brand-50 text-brand-600 dark:bg-brand-500/15 dark:text-brand-400\",\n success:\n \"bg-success-50 text-success-600 dark:bg-success-500/15 dark:text-success-500\",\n error: \"bg-error-50 text-error-600 dark:bg-error-500/15 dark:text-error-500\",\n warning:\n \"bg-warning-50 text-warning-600 dark:bg-warning-500/15 dark:text-orange-400\",\n info: \"bg-blue-light-50 text-blue-light-500 dark:bg-blue-light-500/15 dark:text-blue-light-500\",\n default: \"bg-gray-100 text-gray-700 dark:bg-white/5 dark:text-white/80\",\n};\n\nexport const Code: React.FC<CodeProps> = ({\n color = \"default\",\n size = \"md\",\n className,\n children,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n return (\n <code\n className={cn(\n \"inline-flex items-center rounded-md font-mono font-normal\",\n sizeClasses[size],\n colorClasses[color],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n {children}\n </code>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { Check, Copy } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type SnippetSize = \"sm\" | \"md\";\n\nexport interface SnippetProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"color\" | \"children\">,\n ColorOverrideProps {\n /** Code content as a string (supports \"\\n\") or an array of lines. */\n code?: string | string[];\n /** Alternative to `code`. */\n children?: string | string[];\n /** Prefix rendered before each line (e.g. \"$ \"). */\n symbol?: string;\n /** Hide the copy-to-clipboard button. */\n hideCopyButton?: boolean;\n /** Hide the line prefix symbol. */\n hideSymbol?: boolean;\n size?: SnippetSize;\n}\n\nconst sizeClasses: Record<SnippetSize, string> = {\n sm: \"text-xs p-3\",\n md: \"text-sm p-4\",\n};\n\nexport const Snippet: React.FC<SnippetProps> = ({\n code,\n children,\n symbol = \"\",\n hideCopyButton = false,\n hideSymbol = false,\n size = \"md\",\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const [copied, setCopied] = useState(false);\n\n const raw = code ?? children ?? \"\";\n const lines = Array.isArray(raw) ? raw : raw.split(\"\\n\");\n const text = lines.join(\"\\n\");\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n } catch {\n // clipboard not available — silently ignore\n }\n };\n\n return (\n <div\n className={cn(\n \"relative rounded-xl border border-gray-200 bg-gray-50 font-mono text-gray-800 dark:border-gray-800 dark:bg-white/[0.03] dark:text-white/90\",\n sizeClasses[size],\n className\n )}\n style={{ ...styleOverride({ bgColor, textColor, borderColor }), ...style }}\n {...rest}\n >\n <pre className={cn(\"overflow-x-auto\", !hideCopyButton && \"pr-8\")}>\n <code>\n {lines.map((line, i) => (\n <span key={i} className=\"block whitespace-pre\">\n {!hideSymbol && symbol && (\n <span className=\"select-none text-gray-400 dark:text-gray-500\">\n {symbol}\n </span>\n )}\n {line}\n </span>\n ))}\n </code>\n </pre>\n {!hideCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={copied ? \"Copied\" : \"Copy to clipboard\"}\n className={cn(\n \"absolute right-2 top-2 inline-flex h-7 w-7 items-center justify-center rounded-lg text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:text-gray-400 dark:hover:bg-white/10 dark:hover:text-white/90\",\n copied && \"text-success-500 dark:text-success-500\"\n )}\n >\n {copied ? (\n <Check className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Copy className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nexport const Label: React.FC<LabelProps> = ({ children, className, ...rest }) => {\n return (\n <label\n className={cn(\n \"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\",\n className\n )}\n {...rest}\n >\n {children}\n </label>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface TextAreaProps {\n placeholder?: string;\n rows?: number;\n value?: string;\n onChange?: (value: string) => void;\n className?: string;\n disabled?: boolean;\n error?: boolean;\n hint?: string;\n}\n\nexport const TextArea: React.FC<TextAreaProps> = ({\n placeholder = \"Enter your message\",\n rows = 3,\n value = \"\",\n onChange,\n className,\n disabled = false,\n error = false,\n hint = \"\",\n}) => {\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (onChange) {\n onChange(e.target.value);\n }\n };\n\n const stateClass = disabled\n ? \"bg-gray-100 opacity-50 text-gray-500 border-gray-300 cursor-not-allowed dark:bg-gray-800 dark:text-gray-400 dark:border-gray-700\"\n : error\n ? \"bg-white text-gray-400 border-gray-300 focus:border-error-300 focus:ring-3 focus:ring-error-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus:border-error-800\"\n : \"bg-white text-gray-400 border-gray-300 focus:border-brand-300 focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus:border-brand-800\";\n\n return (\n <div className=\"relative\">\n <textarea\n placeholder={placeholder}\n rows={rows}\n value={value}\n onChange={handleChange}\n disabled={disabled}\n className={cn(\n \"w-full rounded-lg border px-4 py-2.5 text-sm shadow-theme-xs focus:outline-hidden\",\n stateClass,\n className\n )}\n />\n {hint && (\n <p\n className={cn(\n \"mt-2 text-sm\",\n error ? \"text-error-500\" : \"text-gray-500 dark:text-gray-400\"\n )}\n >\n {hint}\n </p>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface CheckboxProps {\n label?: string;\n checked: boolean;\n className?: string;\n id?: string;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n /** Override the checked accent color (maps to inline accentColor). */\n checkedColor?: string;\n}\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n label,\n checked,\n id,\n onChange,\n className,\n disabled = false,\n checkedColor,\n}) => {\n return (\n <label\n className={cn(\n \"flex items-center space-x-3 group cursor-pointer\",\n disabled && \"cursor-not-allowed opacity-60\"\n )}\n >\n <div className=\"relative w-5 h-5\">\n <input\n id={id}\n type=\"checkbox\"\n className={cn(\n \"w-5 h-5 appearance-none cursor-pointer dark:border-gray-700 border border-gray-300 checked:border-transparent rounded-md checked:bg-brand-500 disabled:opacity-60\",\n className\n )}\n checked={checked}\n onChange={(e) => onChange(e.target.checked)}\n disabled={disabled}\n style={checkedColor ? { accentColor: checkedColor } : undefined}\n />\n {checked && (\n <Check\n className=\"pointer-events-none absolute left-1/2 top-1/2 size-4 -translate-x-1/2 -translate-y-1/2 text-white\"\n strokeWidth={3}\n aria-hidden=\"true\"\n />\n )}\n {disabled && (\n <Check\n className=\"pointer-events-none absolute left-1/2 top-1/2 size-4 -translate-x-1/2 -translate-y-1/2 text-gray-200\"\n strokeWidth={3}\n aria-hidden=\"true\"\n />\n )}\n </div>\n {label && (\n <span className=\"text-sm font-medium text-gray-800 dark:text-gray-200\">\n {label}\n </span>\n )}\n </label>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface RadioProps {\n id: string;\n name: string;\n value: string;\n checked: boolean;\n label: string;\n onChange: (value: string) => void;\n className?: string;\n disabled?: boolean;\n}\n\nexport const Radio: React.FC<RadioProps> = ({\n id,\n name,\n value,\n checked,\n label,\n onChange,\n className,\n disabled = false,\n}) => {\n return (\n <label\n htmlFor={id}\n className={cn(\n \"relative flex cursor-pointer select-none items-center gap-3 text-sm font-medium\",\n disabled\n ? \"text-gray-300 dark:text-gray-600 cursor-not-allowed\"\n : \"text-gray-700 dark:text-gray-400\",\n className\n )}\n >\n <input\n id={id}\n name={name}\n type=\"radio\"\n value={value}\n checked={checked}\n onChange={() => !disabled && onChange(value)}\n className=\"sr-only\"\n disabled={disabled}\n />\n <span\n className={cn(\n \"flex h-5 w-5 items-center justify-center rounded-full border-[1.25px]\",\n checked\n ? \"border-brand-500 bg-brand-500\"\n : \"bg-transparent border-gray-300 dark:border-gray-700\",\n disabled &&\n \"bg-gray-100 dark:bg-gray-700 border-gray-200 dark:border-gray-700\"\n )}\n >\n <span\n className={cn(\n \"h-2 w-2 rounded-full bg-white\",\n checked ? \"block\" : \"hidden\"\n )}\n ></span>\n </span>\n {label}\n </label>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface RadioSmProps {\n id: string;\n name: string;\n value: string;\n checked: boolean;\n label: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport const RadioSm: React.FC<RadioSmProps> = ({\n id,\n name,\n value,\n checked,\n label,\n onChange,\n className,\n}) => {\n return (\n <label\n htmlFor={id}\n className={cn(\n \"flex cursor-pointer select-none items-center text-sm text-gray-500 dark:text-gray-400\",\n className\n )}\n >\n <span className=\"relative\">\n {/* Hidden Input */}\n <input\n type=\"radio\"\n id={id}\n name={name}\n value={value}\n checked={checked}\n onChange={() => onChange(value)}\n className=\"sr-only\"\n />\n {/* Styled Radio Circle */}\n <span\n className={cn(\n \"mr-2 flex h-4 w-4 items-center justify-center rounded-full border\",\n checked\n ? \"border-brand-500 bg-brand-500\"\n : \"bg-transparent border-gray-300 dark:border-gray-700\"\n )}\n >\n {/* Inner Dot */}\n <span\n className={cn(\n \"h-1.5 w-1.5 rounded-full\",\n checked ? \"bg-white\" : \"bg-white dark:bg-[#1e2636]\"\n )}\n ></span>\n </span>\n </span>\n {label}\n </label>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface SwitchProps\n extends Omit<React.LabelHTMLAttributes<HTMLLabelElement>, \"onChange\" | \"color\"> {\n label?: React.ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n disabled?: boolean;\n onChange?: (checked: boolean) => void;\n color?: \"blue\" | \"gray\";\n}\n\nexport const Switch: React.FC<SwitchProps> = ({\n label,\n checked,\n defaultChecked = false,\n disabled = false,\n onChange,\n color = \"blue\",\n className,\n onClick,\n onKeyDown,\n \"aria-label\": ariaLabel,\n ...rest\n}) => {\n const isControlled = checked !== undefined;\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const isChecked = isControlled ? checked : internalChecked;\n\n const handleToggle = () => {\n if (disabled) return;\n const newCheckedState = !isChecked;\n if (!isControlled) {\n setInternalChecked(newCheckedState);\n }\n if (onChange) {\n onChange(newCheckedState);\n }\n };\n\n const handleClick = (event: React.MouseEvent<HTMLLabelElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleToggle();\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLLabelElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n if (event.key === \" \" || event.key === \"Enter\") {\n event.preventDefault();\n handleToggle();\n }\n };\n\n // Match the neutral border used by Input, Select, and outline buttons.\n // `ring-inset` keeps the box size identical so the knob doesn't shift.\n const offTrack =\n \"bg-gray-200 ring-1 ring-inset ring-gray-300 dark:bg-white/10 dark:ring-gray-700\";\n\n const switchColors =\n color === \"blue\"\n ? {\n background: isChecked ? \"bg-brand-500 \" : offTrack, // Blue version\n knob: isChecked\n ? \"translate-x-full bg-white\"\n : \"translate-x-0 bg-white\",\n }\n : {\n background: isChecked\n ? \"bg-gray-800 dark:bg-white/10\"\n : offTrack, // Gray version\n knob: isChecked\n ? \"translate-x-full bg-white\"\n : \"translate-x-0 bg-white\",\n };\n\n const hasLabel = label !== undefined && label !== null && label !== \"\";\n\n return (\n <label\n role=\"switch\"\n aria-checked={isChecked}\n aria-disabled={disabled || undefined}\n aria-label={ariaLabel ?? (!hasLabel ? \"Toggle switch\" : undefined)}\n tabIndex={disabled ? -1 : 0}\n className={cn(\n \"flex cursor-pointer select-none items-center gap-3 text-sm font-medium\",\n disabled ? \"text-gray-400\" : \"text-gray-700 dark:text-gray-400\",\n className\n )}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n <div className=\"relative\">\n <div\n className={cn(\n \"block transition duration-150 ease-linear h-6 w-11 rounded-full\",\n disabled\n ? \"bg-gray-100 pointer-events-none dark:bg-gray-800\"\n : switchColors.background\n )}\n ></div>\n <div\n className={cn(\n \"absolute left-0.5 top-0.5 h-5 w-5 rounded-full shadow-theme-sm duration-150 ease-linear transform\",\n switchColors.knob\n )}\n ></div>\n </div>\n {hasLabel && <span>{label}</span>}\n </label>\n );\n};\n","\"use client\";\nimport React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n icon?: React.ReactNode;\n}\n\nexport interface SelectProps {\n options: SelectOption[];\n placeholder?: string;\n onChange: (value: string) => void;\n className?: string;\n defaultValue?: string;\n disabled?: boolean;\n /** Render menu under document.body to avoid clipping inside tables/cards. Default: true. */\n portal?: boolean;\n}\n\n/**\n * A custom single-select dropdown (no native `<select>`), so the menu is fully\n * styleable and theme-aware. The selected option shows a check mark.\n */\nexport const Select: React.FC<SelectProps> = ({\n options,\n placeholder = \"Select an option\",\n onChange,\n className,\n defaultValue = \"\",\n disabled = false,\n portal = true,\n}) => {\n const [selectedValue, setSelectedValue] = useState<string>(defaultValue);\n const [isOpen, setIsOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n const [menuPosition, setMenuPosition] = useState<React.CSSProperties>();\n\n // Close on outside click and on Escape.\n useEffect(() => {\n if (!isOpen) return;\n const onPointerDown = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n rootRef.current &&\n !rootRef.current.contains(target) &&\n !menuRef.current?.contains(target)\n ) {\n setIsOpen(false);\n }\n };\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setIsOpen(false);\n };\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen]);\n\n useLayoutEffect(() => {\n if (!isOpen || !portal) return;\n\n const updatePosition = () => {\n const trigger = triggerRef.current;\n const menu = menuRef.current;\n if (!trigger || !menu) return;\n\n const rect = trigger.getBoundingClientRect();\n const menuHeight = menu.offsetHeight;\n const viewportPadding = 8;\n const gap = 6;\n const width = rect.width;\n const fitsBelow =\n window.innerHeight - rect.bottom - gap >= menuHeight + viewportPadding;\n const top = fitsBelow\n ? rect.bottom + gap\n : Math.max(viewportPadding, rect.top - gap - menuHeight);\n const left = Math.min(\n Math.max(viewportPadding, rect.left),\n window.innerWidth - width - viewportPadding\n );\n\n setMenuPosition({ top, left, width });\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [isOpen, portal]);\n\n const toggleOpen = () => {\n if (!disabled) setIsOpen((prev) => !prev);\n };\n\n const handleSelect = (value: string) => {\n setSelectedValue(value);\n onChange(value);\n setIsOpen(false);\n };\n\n const selectedOption = options.find((option) => option.value === selectedValue);\n\n return (\n <div ref={rootRef} className={cn(\"relative w-full\", className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={toggleOpen}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n className={cn(\n \"flex h-11 w-full items-center justify-between rounded-lg border border-gray-300 bg-white px-4 py-2.5 text-left text-sm shadow-theme-xs transition focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:focus:border-brand-800\",\n disabled && \"cursor-not-allowed opacity-50\",\n selectedOption\n ? \"text-gray-800 dark:text-white/90\"\n : \"text-gray-400 dark:text-gray-400\"\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n {selectedOption?.icon && (\n <span\n aria-hidden=\"true\"\n className=\"flex h-5 w-5 shrink-0 items-center justify-center [&>svg]:size-4\"\n >\n {selectedOption.icon}\n </span>\n )}\n <span className=\"truncate\">{selectedOption?.label ?? placeholder}</span>\n </span>\n <ChevronDown\n className={cn(\n \"ml-2 size-4 shrink-0 stroke-current text-gray-500 transition-transform dark:text-gray-400\",\n isOpen && \"rotate-180\"\n )}\n aria-hidden=\"true\"\n />\n </button>\n\n {isOpen && (() => {\n const menu = (\n <ul\n ref={menuRef}\n role=\"listbox\"\n className={cn(\n \"max-h-60 overflow-y-auto rounded-lg border border-gray-200 bg-white py-1 shadow-theme-lg dark:border-gray-800 dark:bg-gray-900\",\n portal\n ? cn(\"fixed\", layers.portal)\n : cn(\"absolute left-0 top-full mt-1.5 w-full\", layers.menu)\n )}\n style={{\n ...(portal && !menuPosition ? { visibility: \"hidden\" } : undefined),\n ...(portal ? menuPosition : undefined),\n }}\n >\n {options.map((option) => {\n const isSelected = option.value === selectedValue;\n return (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleSelect(option.value)}\n className={cn(\n \"flex cursor-pointer items-center justify-between px-4 py-2 text-sm transition hover:bg-gray-50 dark:hover:bg-white/5\",\n isSelected\n ? \"bg-brand-50 font-medium text-brand-600 dark:bg-brand-500/15 dark:text-brand-400\"\n : \"text-gray-700 dark:text-gray-300\"\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n {option.icon && (\n <span\n aria-hidden=\"true\"\n className=\"flex h-5 w-5 shrink-0 items-center justify-center [&>svg]:size-4\"\n >\n {option.icon}\n </span>\n )}\n <span className=\"truncate\">{option.label}</span>\n </span>\n {isSelected && (\n <Check\n className=\"ml-2 size-4 shrink-0 stroke-current\"\n aria-hidden=\"true\"\n />\n )}\n </li>\n );\n })}\n </ul>\n );\n\n if (!portal || typeof document === \"undefined\") return menu;\n return createPortal(menu, document.body);\n })()}\n </div>\n );\n};\n","\"use client\";\nimport React, { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\nimport { layers } from \"../../lib/layers\";\n\ninterface Option {\n value: string;\n text: string;\n selected: boolean;\n}\n\nexport interface MultiSelectProps {\n label: string;\n options: Option[];\n defaultSelected?: string[];\n onChange?: (selected: string[]) => void;\n disabled?: boolean;\n /** Render menu under document.body to avoid clipping inside tables/cards. Default: true. */\n portal?: boolean;\n}\n\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n label,\n options,\n defaultSelected = [],\n onChange,\n disabled = false,\n portal = true,\n}) => {\n const [selectedOptions, setSelectedOptions] =\n useState<string[]>(defaultSelected);\n const [isOpen, setIsOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [menuPosition, setMenuPosition] = useState<React.CSSProperties>();\n\n useEffect(() => {\n if (!isOpen) return;\n const onPointerDown = (event: MouseEvent) => {\n const target = event.target as Node;\n if (\n rootRef.current &&\n !rootRef.current.contains(target) &&\n !menuRef.current?.contains(target)\n ) {\n setIsOpen(false);\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setIsOpen(false);\n };\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen]);\n\n useLayoutEffect(() => {\n if (!isOpen || !portal) return;\n\n const updatePosition = () => {\n const trigger = triggerRef.current;\n const menu = menuRef.current;\n if (!trigger || !menu) return;\n\n const rect = trigger.getBoundingClientRect();\n const menuHeight = menu.offsetHeight;\n const viewportPadding = 8;\n const gap = 6;\n const width = rect.width;\n const fitsBelow =\n window.innerHeight - rect.bottom - gap >= menuHeight + viewportPadding;\n const top = fitsBelow\n ? rect.bottom + gap\n : Math.max(viewportPadding, rect.top - gap - menuHeight);\n const left = Math.min(\n Math.max(viewportPadding, rect.left),\n window.innerWidth - width - viewportPadding\n );\n\n setMenuPosition({ top, left, width });\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [isOpen, portal]);\n\n const toggleDropdown = () => {\n if (disabled) return;\n setIsOpen((prev) => !prev);\n };\n\n const handleSelect = (optionValue: string) => {\n const newSelectedOptions = selectedOptions.includes(optionValue)\n ? selectedOptions.filter((value) => value !== optionValue)\n : [...selectedOptions, optionValue];\n\n setSelectedOptions(newSelectedOptions);\n if (onChange) onChange(newSelectedOptions);\n };\n\n const removeOption = (_index: number, value: string) => {\n const newSelectedOptions = selectedOptions.filter((opt) => opt !== value);\n setSelectedOptions(newSelectedOptions);\n if (onChange) onChange(newSelectedOptions);\n };\n\n const selectedValuesText = selectedOptions.map(\n (value) => options.find((option) => option.value === value)?.text || \"\"\n );\n\n return (\n <div ref={rootRef} className=\"w-full\">\n <label className=\"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-400\">\n {label}\n </label>\n\n <div className=\"relative inline-block w-full\">\n <div className=\"relative flex flex-col items-center\">\n <div onClick={toggleDropdown} className=\"w-full\">\n <div\n ref={triggerRef}\n className=\"flex h-11 items-center overflow-hidden rounded-lg border border-gray-300 bg-white px-4 py-1.5 shadow-theme-xs outline-hidden transition focus:border-brand-300 focus:shadow-focus-ring dark:border-gray-700 dark:bg-gray-900 dark:focus:border-brand-300\"\n >\n <div className=\"flex flex-wrap flex-auto gap-2\">\n {selectedValuesText.length > 0 ? (\n selectedValuesText.map((text, index) => (\n <div\n key={index}\n className=\"group flex items-center justify-center rounded-full border-[0.7px] border-transparent bg-gray-100 py-1 pl-2.5 pr-2 text-sm text-gray-800 hover:border-gray-200 dark:bg-gray-800 dark:text-white/90 dark:hover:border-gray-800\"\n >\n <span className=\"flex-initial max-w-full\">{text}</span>\n <div className=\"flex flex-row-reverse flex-auto\">\n <div\n onClick={() =>\n removeOption(index, selectedOptions[index])\n }\n className=\"pl-2 text-gray-500 cursor-pointer group-hover:text-gray-400 dark:text-gray-400\"\n >\n <X className=\"size-4\" role=\"button\" aria-hidden=\"true\" />\n </div>\n </div>\n </div>\n ))\n ) : (\n <input\n placeholder=\"Select option\"\n className=\"w-full h-full p-1 pr-2 text-sm bg-transparent border-0 outline-hidden appearance-none placeholder:text-gray-800 focus:border-0 focus:outline-hidden focus:ring-0 dark:placeholder:text-white/90\"\n readOnly\n value=\"Select option\"\n />\n )}\n </div>\n <div className=\"flex items-center py-1 pl-1 pr-1 w-7\">\n <button\n type=\"button\"\n onClick={toggleDropdown}\n className=\"w-5 h-5 text-gray-700 outline-hidden cursor-pointer focus:outline-hidden dark:text-gray-400\"\n >\n <ChevronDown\n className={`size-4 stroke-current ${isOpen ? \"rotate-180\" : \"\"}`}\n aria-hidden=\"true\"\n />\n </button>\n </div>\n </div>\n </div>\n\n {isOpen && (() => {\n const menu = (\n <div\n ref={menuRef}\n className={cn(\n \"max-h-select overflow-y-auto rounded-lg bg-white shadow-sm dark:bg-gray-900\",\n portal\n ? cn(\"fixed\", layers.portal)\n : cn(\"absolute left-0 top-full mt-1.5 w-full\", layers.menu)\n )}\n style={{\n ...(portal && !menuPosition ? { visibility: \"hidden\" } : undefined),\n ...(portal ? menuPosition : undefined),\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex flex-col\">\n {options.map((option, index) => {\n const isSelected = selectedOptions.includes(option.value);\n return (\n <div key={index}>\n <div\n className={`w-full cursor-pointer rounded-t border-b border-gray-200 hover:bg-brand-500/5 dark:border-gray-800`}\n onClick={() => handleSelect(option.value)}\n >\n <div\n className={`relative flex w-full items-center justify-between p-2 pl-2 ${\n isSelected ? \"bg-brand-500/10\" : \"\"\n }`}\n >\n <div\n className={`mx-2 leading-6 ${\n isSelected\n ? \"font-medium text-brand-600 dark:text-brand-400\"\n : \"text-gray-800 dark:text-white/90\"\n }`}\n >\n {option.text}\n </div>\n {isSelected && (\n <Check\n className=\"mr-2 size-4 shrink-0 stroke-current text-brand-500\"\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n\n if (!portal || typeof document === \"undefined\") return menu;\n return createPortal(menu, document.body);\n })()}\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface FileInputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nexport const FileInput: React.FC<FileInputProps> = ({ className, ...rest }) => {\n return (\n <input\n type=\"file\"\n className={cn(\n \"focus:border-ring-brand-300 h-11 w-full overflow-hidden rounded-lg border border-gray-300 bg-white text-sm text-gray-500 shadow-theme-xs transition-colors file:mr-5 file:border-collapse file:cursor-pointer file:rounded-l-lg file:border-0 file:border-r file:border-solid file:border-gray-200 file:bg-gray-50 file:py-3 file:pl-3.5 file:pr-3 file:text-sm file:text-gray-700 placeholder:text-gray-400 hover:file:bg-gray-100 focus:outline-hidden focus:file:ring-brand-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-400 dark:text-white/90 dark:file:border-gray-800 dark:file:bg-white/[0.03] dark:file:text-gray-400 dark:placeholder:text-gray-400\",\n className\n )}\n {...rest}\n />\n );\n};\n","\"use client\";\nimport React, { useEffect } from \"react\";\nimport flatpickr from \"flatpickr\";\nimport \"flatpickr/dist/flatpickr.css\";\nimport { Calendar } from \"lucide-react\";\nimport { Label } from \"./Label\";\n\ntype Hook = flatpickr.Options.Hook;\ntype DateOption = flatpickr.Options.DateOption;\n\nexport interface DatePickerProps {\n id: string;\n mode?: \"single\" | \"multiple\" | \"range\" | \"time\";\n onChange?: Hook | Hook[];\n defaultDate?: DateOption;\n label?: string;\n placeholder?: string;\n}\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n id,\n mode,\n onChange,\n label,\n defaultDate,\n placeholder,\n}) => {\n useEffect(() => {\n const flatPickr = flatpickr(`#${id}`, {\n mode: mode || \"single\",\n appendTo: document.body,\n monthSelectorType: \"static\",\n dateFormat: \"Y-m-d\",\n defaultDate,\n onChange,\n });\n\n return () => {\n if (!Array.isArray(flatPickr)) {\n flatPickr.destroy();\n }\n };\n }, [mode, onChange, id, defaultDate]);\n\n return (\n <div>\n {label && <Label htmlFor={id}>{label}</Label>}\n\n <div className=\"relative\">\n <input\n id={id}\n placeholder={placeholder}\n className=\"h-11 w-full rounded-lg border appearance-none pl-4 pr-11 py-2.5 text-sm shadow-theme-xs placeholder:text-gray-400 focus:outline-hidden focus:ring-3 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 bg-white text-gray-800 border-gray-300 focus:border-brand-300 focus:ring-brand-500/20 dark:border-gray-700 dark:focus:border-brand-800\"\n />\n\n <span className=\"absolute text-gray-500 -translate-y-1/2 pointer-events-none right-3 top-1/2 dark:text-gray-400\">\n <Calendar className=\"size-4\" aria-hidden=\"true\" />\n </span>\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport flatpickr from \"flatpickr\";\nimport \"flatpickr/dist/flatpickr.css\";\nimport { Calendar, Clock } from \"lucide-react\";\nimport { Label } from \"./Label\";\n\ntype DateOption = flatpickr.Options.DateOption;\n\nexport interface DateTimePickerProps {\n id: string;\n /** Optional field label rendered above the controls. */\n label?: string;\n /** Placeholder for the date input. */\n placeholder?: string;\n /** Initial date for the calendar. */\n defaultDate?: DateOption;\n /** Initial time as \"HH:MM\". */\n defaultTime?: string;\n /** Fires whenever the date or time changes. */\n onChange?: (value: { date: Date | undefined; time: string }) => void;\n}\n\n/** Keep only up to 2 digits and clamp to [0, max]. */\nconst clampNum = (raw: string, max: number) => {\n const digits = raw.replace(/\\D/g, \"\").slice(0, 2);\n if (digits === \"\") return \"\";\n return String(Math.min(parseInt(digits, 10), max));\n};\n\n/**\n * Date + time field: a flatpickr calendar for the date (same look as DatePicker)\n * paired with a compact HH:MM time input (two fields separated by a \":\").\n */\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n id,\n label,\n placeholder,\n defaultDate,\n defaultTime = \"\",\n onChange,\n}) => {\n const dateRef = useRef<Date | undefined>(undefined);\n const [hh, setHh] = useState(defaultTime.split(\":\")[0] ?? \"\");\n const [mm, setMm] = useState(defaultTime.split(\":\")[1] ?? \"\");\n const hhRef = useRef(hh);\n const mmRef = useRef(mm);\n hhRef.current = hh;\n mmRef.current = mm;\n\n const emit = () => {\n onChange?.({\n date: dateRef.current,\n time: `${(hhRef.current || \"0\").padStart(2, \"0\")}:${(mmRef.current || \"0\").padStart(2, \"0\")}`,\n });\n };\n\n useEffect(() => {\n const flatPickr = flatpickr(`#${id}-date`, {\n mode: \"single\",\n appendTo: document.body,\n monthSelectorType: \"static\",\n dateFormat: \"Y-m-d\",\n defaultDate,\n onChange: (dates) => {\n dateRef.current = dates[0];\n emit();\n },\n });\n\n return () => {\n if (!Array.isArray(flatPickr)) {\n flatPickr.destroy();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, defaultDate]);\n\n const handleHh = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = clampNum(e.target.value, 23);\n setHh(v);\n hhRef.current = v;\n emit();\n };\n const handleMm = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = clampNum(e.target.value, 59);\n setMm(v);\n mmRef.current = v;\n emit();\n };\n const padOnBlur =\n (value: string, setter: (v: string) => void) =>\n () => {\n if (value !== \"\") setter(value.padStart(2, \"0\"));\n };\n\n const timeFieldClass =\n \"w-7 bg-transparent text-center tabular-nums placeholder:text-gray-400 focus:outline-hidden dark:placeholder:text-white/30\";\n\n return (\n <div>\n {label && <Label htmlFor={`${id}-date`}>{label}</Label>}\n\n <div className=\"flex items-start gap-3\">\n {/* Date — flatpickr, same look as DatePicker */}\n <div className=\"relative flex-1\">\n <input\n id={`${id}-date`}\n placeholder={placeholder}\n className=\"h-11 w-full appearance-none rounded-lg border border-gray-300 bg-white py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/20 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\"\n />\n <span className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400\">\n <Calendar className=\"size-4\" aria-hidden=\"true\" />\n </span>\n </div>\n\n {/* Time — HH : MM */}\n <div className=\"flex h-11 items-center rounded-lg border border-gray-300 bg-white px-3 text-sm text-gray-800 shadow-theme-xs focus-within:border-brand-300 focus-within:ring-3 focus-within:ring-brand-500/20 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:focus-within:border-brand-800\">\n <input\n aria-label=\"Hours\"\n inputMode=\"numeric\"\n placeholder=\"00\"\n maxLength={2}\n value={hh}\n onChange={handleHh}\n onBlur={padOnBlur(hh, (v) => setHh(v))}\n className={timeFieldClass}\n />\n <span className=\"px-0.5 text-gray-400 dark:text-gray-500\">:</span>\n <input\n aria-label=\"Minutes\"\n inputMode=\"numeric\"\n placeholder=\"00\"\n maxLength={2}\n value={mm}\n onChange={handleMm}\n onBlur={padOnBlur(mm, (v) => setMm(v))}\n className={timeFieldClass}\n />\n <span className=\"ml-1 text-gray-500 dark:text-gray-400\">\n <Clock className=\"size-4\" aria-hidden=\"true\" />\n </span>\n </div>\n </div>\n </div>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { Eye, EyeOff } from \"lucide-react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface PasswordInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {}\n\n/** Password field with a show/hide toggle (eye icon), matching the template's \"Password Input\". */\nexport const PasswordInput: React.FC<PasswordInputProps> = ({\n className,\n ...rest\n}) => {\n const [show, setShow] = useState(false);\n\n return (\n <div className=\"relative\">\n <input\n type={show ? \"text\" : \"password\"}\n className={cn(\n \"h-11 w-full appearance-none rounded-lg border border-gray-300 bg-white py-2.5 pl-4 pr-11 text-sm text-gray-800 shadow-theme-xs placeholder:text-gray-400 focus:border-brand-300 focus:outline-hidden focus:ring-3 focus:ring-brand-500/10 dark:border-gray-700 dark:bg-gray-900 dark:text-white/90 dark:placeholder:text-white/30 dark:focus:border-brand-800\",\n className\n )}\n {...rest}\n />\n <button\n type=\"button\"\n onClick={() => setShow((s) => !s)}\n aria-label={show ? \"Hide password\" : \"Show password\"}\n className=\"absolute right-4 top-1/2 z-30 -translate-y-1/2 cursor-pointer text-gray-500 dark:text-gray-400\"\n >\n {show ? (\n <Eye className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <EyeOff className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n </div>\n );\n};\n","import React, { FormEvent } from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport interface FormProps\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n onSubmit?: (event: FormEvent<HTMLFormElement>) => void;\n}\n\nexport const Form: React.FC<FormProps> = ({\n onSubmit,\n children,\n className,\n ...rest\n}) => {\n return (\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmit?.(event);\n }}\n className={cn(className)}\n {...rest}\n >\n {children}\n </form>\n );\n};\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { styleOverride, type ColorOverrideProps } from \"../../lib/styleOverride\";\n\nexport type SliderColor =\n | \"brand\"\n | \"primary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\";\n\nexport interface SliderProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"color\" | \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n >,\n ColorOverrideProps {\n /** Controlled value. */\n value?: number;\n /** Uncontrolled initial value. */\n defaultValue?: number;\n /** Fires with the new numeric value on change. */\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n /** Accent color of the track + thumb. */\n color?: SliderColor;\n /** Optional label rendered above the slider. */\n label?: React.ReactNode;\n /** Show the current value next to the label. */\n showValue?: boolean;\n}\n\nconst accentClasses: Record<SliderColor, string> = {\n brand: \"accent-brand-500\",\n primary: \"accent-brand-500\",\n success: \"accent-success-500\",\n error: \"accent-error-500\",\n warning: \"accent-warning-500\",\n info: \"accent-blue-light-500\",\n};\n\nconst fillColors: Record<SliderColor, string> = {\n brand: \"#465fff\",\n primary: \"#465fff\",\n success: \"#12b76a\",\n error: \"#f04438\",\n warning: \"#f79009\",\n info: \"#0ba5ec\",\n};\n\nexport const Slider: React.FC<SliderProps> = ({\n value,\n defaultValue = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n color = \"brand\",\n label,\n showValue = false,\n className,\n bgColor,\n textColor,\n borderColor,\n style,\n ...rest\n}) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = isControlled ? (value as number) : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = Number(e.target.value);\n if (!isControlled) {\n setInternalValue(next);\n }\n onChange?.(next);\n };\n\n const percent =\n max === min ? 0 : ((currentValue - min) / (max - min)) * 100;\n const fill = fillColors[color];\n const trackBg = `linear-gradient(to right, ${fill} 0%, ${fill} ${percent}%, var(--slider-track, #e4e7ec) ${percent}%, var(--slider-track, #e4e7ec) 100%)`;\n\n return (\n <div className={cn(\"w-full\", disabled && \"opacity-50\")}>\n {(label || showValue) && (\n <div className=\"mb-1.5 flex items-center justify-between text-sm font-medium text-gray-700 dark:text-gray-400\">\n {label && <span>{label}</span>}\n {showValue && (\n <span className=\"text-gray-500 dark:text-gray-400\">\n {currentValue}\n </span>\n )}\n </div>\n )}\n <input\n type=\"range\"\n role=\"slider\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n disabled={disabled}\n onChange={handleChange}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n className={cn(\n \"h-2 w-full cursor-pointer appearance-none rounded-lg focus:outline-hidden focus:ring-3 focus:ring-brand-500/10\",\n accentClasses[color],\n disabled && \"cursor-not-allowed\",\n className\n )}\n style={{\n background: trackBg,\n ...styleOverride({ bgColor, textColor, borderColor }),\n ...style,\n }}\n {...rest}\n />\n </div>\n );\n};\n"]}