corekit-components 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import { ClassProp } from 'class-variance-authority/types';
2
2
  import { ComponentPropsWithRef } from 'react';
3
3
  import { ElementType } from 'react';
4
4
  import { ForwardRefExoticComponent } from 'react';
5
- import { JSX as JSX_2 } from 'react/jsx-runtime';
5
+ import { JSX } from 'react/jsx-runtime';
6
6
  import { ReactElement } from 'react';
7
7
  import { ReactNode } from 'react';
8
8
  import { ReactPortal } from 'react';
@@ -134,7 +134,7 @@ export declare interface AvatarProps extends Omit<ComponentPropsWithRef<"span">,
134
134
  export declare const avatarVariants: (props?: ({
135
135
  size?: "sm" | "md" | "lg" | "xs" | "xl" | null | undefined;
136
136
  shape?: "circle" | "square" | null | undefined;
137
- color?: "primary" | "secondary" | "muted" | "gray" | null | undefined;
137
+ color?: "primary" | "secondary" | "gray" | "muted" | null | undefined;
138
138
  } & ClassProp) | undefined) => string;
139
139
 
140
140
  export declare const Box: BoxComponent;
@@ -237,7 +237,7 @@ export declare const emptyStateVariants: (props?: ({
237
237
  bordered?: boolean | null | undefined;
238
238
  } & ClassProp) | undefined) => string;
239
239
 
240
- export declare function FormatNumber({ value, format, locale: localeProp, currency: currencyProp, currencyDisplay, notation, signDisplay, minimumFractionDigits, maximumFractionDigits, decimals, unit, unitDisplay, prefix, suffix, children, className, as: Tag, ...rest }: FormatNumberProps): JSX_2.Element;
240
+ export declare function FormatNumber({ value, format, locale: localeProp, currency: currencyProp, currencyDisplay, notation, signDisplay, minimumFractionDigits, maximumFractionDigits, decimals, unit, unitDisplay, prefix, suffix, children, className, as: Tag, ...rest }: FormatNumberProps): JSX.Element;
241
241
 
242
242
  export declare namespace FormatNumber {
243
243
  var displayName: string;
@@ -328,7 +328,7 @@ export declare interface ListProps extends Omit<ComponentPropsWithRef<"ul">, "re
328
328
  }
329
329
 
330
330
  export declare const ListSubheader: {
331
- ({ children, className }: ListSubheaderProps): JSX_2.Element;
331
+ ({ children, className }: ListSubheaderProps): JSX.Element;
332
332
  displayName: string;
333
333
  };
334
334
 
@@ -355,7 +355,7 @@ export declare interface LocaleContextValue {
355
355
  timezone: string;
356
356
  }
357
357
 
358
- export declare function LocaleProvider({ locale, currency, direction, timezone, children, }: LocaleProviderProps): JSX_2.Element;
358
+ export declare function LocaleProvider({ locale, currency, direction, timezone, children, }: LocaleProviderProps): JSX.Element;
359
359
 
360
360
  export declare namespace LocaleProvider {
361
361
  var displayName: string;
@@ -588,8 +588,8 @@ export declare type StackVariantProps = VariantProps<typeof stackVariants>;
588
588
  export declare const stackVariants: (props?: ({
589
589
  direction?: "horizontal" | "vertical" | null | undefined;
590
590
  gap?: 1 | 2 | 4 | null | undefined;
591
- align?: "center" | "end" | "start" | "stretch" | null | undefined;
592
- justify?: "center" | "end" | "start" | "between" | null | undefined;
591
+ align?: "center" | "start" | "end" | "stretch" | null | undefined;
592
+ justify?: "center" | "start" | "end" | "between" | null | undefined;
593
593
  wrap?: boolean | null | undefined;
594
594
  } & ClassProp) | undefined) => string;
595
595
 
package/dist/index.js CHANGED
@@ -3150,20 +3150,16 @@ const Timeline = forwardRef(
3150
3150
  ...rest,
3151
3151
  children: childArray.map((child, i) => {
3152
3152
  if (child && typeof child === "object" && "type" in child && child.type.displayName === "TimelineItem") {
3153
- return {
3154
- ...child,
3155
- props: {
3156
- ...child.props,
3157
- _variant: variant,
3158
- _size: size,
3159
- _orientation: orientation,
3160
- _lineStyle: lineStyle,
3161
- _isLast: i === count - 1,
3162
- _trailingLine: trailingLine,
3163
- _alternate: alternate,
3164
- _index: i
3165
- }
3166
- };
3153
+ return isValidElement(child) ? cloneElement(child, {
3154
+ _variant: variant,
3155
+ _size: size,
3156
+ _orientation: orientation,
3157
+ _lineStyle: lineStyle,
3158
+ _isLast: i === count - 1,
3159
+ _trailingLine: trailingLine,
3160
+ _alternate: alternate,
3161
+ _index: i
3162
+ }) : child;
3167
3163
  }
3168
3164
  return child;
3169
3165
  })
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Card/Card.tsx","../src/components/Box/Box.tsx","../src/components/Stack/Stack.tsx","../src/components/Modal/Modal.tsx","../src/components/Autocomplete/Autocomplete.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/Switch/Switch.tsx","../src/components/Snackbar/Snackbar.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Avatar/Avatar.tsx","../src/components/List/List.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Marquee/Marquee.tsx","../src/components/LocaleProvider/LocaleProvider.tsx","../src/components/Stat/Stat.tsx","../src/components/Stat/StatGroup.tsx","../src/components/FormatNumber/useFormatNumber.ts","../src/components/FormatNumber/FormatNumber.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Timeline/Timeline.tsx","../src/tokens/colors.ts","../src/tokens/spacing.ts","../src/tokens/radius.ts"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type ButtonProps } from \"./types\";\n\nexport const buttonVariants = cva(\n [\n \"inline-flex items-center justify-center font-medium transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"rounded-md\",\n ],\n {\n variants: {\n variant: {\n primary: \"bg-primary text-white hover:bg-primary/90\",\n secondary: \"bg-secondary text-white hover:bg-secondary/90\",\n outline:\n \"border border-primary text-primary bg-transparent hover:bg-primary/10\",\n ghost: \"text-primary bg-transparent hover:bg-primary/10\",\n },\n size: {\n sm: \"h-8 px-3 text-sm gap-token-1\",\n md: \"h-10 px-4 text-base gap-token-2\",\n lg: \"h-12 px-6 text-lg gap-token-2\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n }\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, children, ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={clsx(buttonVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import { forwardRef, useId } from \"react\";\nimport { clsx } from \"clsx\";\nimport { type InputProps } from \"./types\";\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, id: externalId, disabled, ...props }, ref) => {\n const generatedId = useId();\n const inputId = externalId ?? generatedId;\n const errorId = `${inputId}-error`;\n\n return (\n <div className=\"flex flex-col gap-token-1\">\n {label && (\n <label\n htmlFor={inputId}\n className={clsx(\n \"text-sm font-medium\",\n disabled ? \"text-muted/60\" : \"text-muted\"\n )}\n >\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n className={clsx(\n \"h-10 w-full rounded-md border px-3 text-sm transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"placeholder:text-muted/50\",\n error\n ? \"border-red-500 focus-visible:ring-red-500\"\n : \"border-muted/30\",\n className\n )}\n {...props}\n />\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import { forwardRef } from \"react\";\nimport { clsx } from \"clsx\";\nimport {\n type CardProps,\n type CardHeaderProps,\n type CardContentProps,\n type CardFooterProps,\n} from \"./types\";\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\n \"rounded-lg border border-muted/20 bg-white shadow-sm\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\"flex flex-col gap-token-1 p-token-4\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardContent = forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\"px-token-4 pb-token-4\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\n \"flex items-center border-t border-muted/20 px-token-4 py-token-2\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardFooter.displayName = \"CardFooter\";\n","import { forwardRef, type ElementType, type ReactNode, type Ref } from \"react\";\nimport { clsx } from \"clsx\";\nimport { type BoxComponent } from \"./types\";\n\nexport const Box: BoxComponent = forwardRef(\n <T extends ElementType = \"div\">(\n {\n as,\n className,\n children,\n ...props\n }: {\n as?: T;\n className?: string;\n children?: ReactNode;\n },\n ref: Ref<HTMLElement>\n ) => {\n const Component: ElementType = as ?? \"div\";\n return (\n <Component ref={ref} className={clsx(className)} {...props}>\n {children}\n </Component>\n );\n }\n) as BoxComponent;\n\n(Box as { displayName?: string }).displayName = \"Box\";\n","import { forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type StackProps } from \"./types\";\n\nexport const stackVariants = cva(\"flex\", {\n variants: {\n direction: {\n horizontal: \"flex-row\",\n vertical: \"flex-col\",\n },\n gap: {\n 1: \"gap-token-1\",\n 2: \"gap-token-2\",\n 4: \"gap-token-4\",\n },\n align: {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n },\n justify: {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n },\n wrap: {\n true: \"flex-wrap\",\n false: \"flex-nowrap\",\n },\n },\n defaultVariants: {\n direction: \"vertical\",\n gap: 2,\n align: \"stretch\",\n wrap: false,\n },\n});\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n (\n { className, direction, gap, align, justify, wrap, children, ...props },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n stackVariants({ direction, gap, align, justify, wrap }),\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nStack.displayName = \"Stack\";\n","import { useEffect, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { clsx } from \"clsx\";\nimport { type ModalProps } from \"./types\";\n\nexport const Modal = ({\n open,\n onClose,\n children,\n className,\n closeOnBackdropClick = true,\n closeOnEsc = true,\n ...props\n}: ModalProps) => {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (closeOnEsc && event.key === \"Escape\") {\n onClose();\n }\n },\n [closeOnEsc, onClose]\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n const handleBackdropClick = useCallback(\n (event: React.MouseEvent) => {\n if (closeOnBackdropClick && event.target === event.currentTarget) {\n onClose();\n }\n },\n [closeOnBackdropClick, onClose]\n );\n\n if (!open) return null;\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n >\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 bg-black/50 transition-opacity\"\n aria-hidden=\"true\"\n onClick={handleBackdropClick}\n />\n {/* Content */}\n <div\n className={clsx(\n \"relative z-10 w-full max-w-lg rounded-lg bg-white shadow-md\",\n \"p-token-4\",\n className\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>,\n document.body\n );\n};\n\nModal.displayName = \"Modal\";\n","import {\n forwardRef,\n useState,\n useRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type AutocompleteProps, type AutocompleteOption } from \"./types\";\n\nexport const autocompleteVariants = cva(\n [\n \"h-10 w-full rounded-md border px-3 text-sm transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"placeholder:text-muted/50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-8 text-xs px-2\",\n md: \"h-10 text-sm px-3\",\n lg: \"h-12 text-base px-4\",\n },\n variant: {\n default: \"border-muted/30 focus-visible:ring-primary\",\n error: \"border-red-500 focus-visible:ring-red-500\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n);\n\nexport const Autocomplete = forwardRef<HTMLInputElement, AutocompleteProps>(\n (\n {\n className,\n options,\n value: controlledValue,\n onChange,\n onSelect,\n label,\n error,\n placeholder,\n id: externalId,\n disabled,\n open: controlledOpen,\n onOpenChange,\n size,\n emptyMessage = \"No results found\",\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const inputId = externalId ?? generatedId;\n const listboxId = `${inputId}-listbox`;\n const errorId = `${inputId}-error`;\n\n const [internalValue, setInternalValue] = useState(\"\");\n const [internalOpen, setInternalOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const inputValue = controlledValue ?? internalValue;\n const isOpen = controlledOpen ?? internalOpen;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (onOpenChange) {\n onOpenChange(nextOpen);\n } else {\n setInternalOpen(nextOpen);\n }\n if (!nextOpen) {\n setActiveIndex(-1);\n }\n },\n [onOpenChange]\n );\n\n const filteredOptions = useMemo(\n () =>\n options.filter((option) =>\n option.label.toLowerCase().includes(inputValue.toLowerCase())\n ),\n [options, inputValue]\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const nextValue = e.target.value;\n if (onChange) {\n onChange(nextValue);\n } else {\n setInternalValue(nextValue);\n }\n setOpen(true);\n setActiveIndex(-1);\n },\n [onChange, setOpen]\n );\n\n const handleSelect = useCallback(\n (option: AutocompleteOption) => {\n if (option.disabled) return;\n if (onChange) {\n onChange(option.label);\n } else {\n setInternalValue(option.label);\n }\n onSelect?.(option);\n setOpen(false);\n },\n [onChange, onSelect, setOpen]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen && (e.key === \"ArrowDown\" || e.key === \"ArrowUp\")) {\n setOpen(true);\n return;\n }\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n setActiveIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0\n );\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n setActiveIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1\n );\n break;\n }\n case \"Enter\": {\n e.preventDefault();\n const activeOption = filteredOptions[activeIndex];\n if (activeOption && !activeOption.disabled) {\n handleSelect(activeOption);\n }\n break;\n }\n case \"Escape\": {\n setOpen(false);\n break;\n }\n }\n },\n [isOpen, filteredOptions, activeIndex, handleSelect, setOpen]\n );\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [setOpen]);\n\n const resolvedVariant = error ? \"error\" as const : \"default\" as const;\n\n return (\n <div ref={containerRef} className=\"relative flex flex-col gap-token-1\">\n {label && (\n <label\n htmlFor={inputId}\n className={clsx(\n \"text-sm font-medium\",\n disabled ? \"text-muted/60\" : \"text-muted\"\n )}\n >\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n activeIndex >= 0 ? `${inputId}-option-${activeIndex}` : undefined\n }\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n disabled={disabled}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => setOpen(true)}\n className={clsx(\n autocompleteVariants({ size, variant: resolvedVariant }),\n className\n )}\n {...props}\n />\n {isOpen && (\n <ul\n id={listboxId}\n role=\"listbox\"\n aria-label={label ?? \"Suggestions\"}\n className={clsx(\n \"absolute top-full z-50 mt-1 max-h-60 w-full overflow-auto\",\n \"rounded-md border border-muted/20 bg-white shadow-md\",\n \"py-1\"\n )}\n >\n {filteredOptions.length === 0 ? (\n <li\n className=\"px-3 py-2 text-sm text-muted\"\n role=\"option\"\n aria-selected={false}\n aria-disabled=\"true\"\n >\n {emptyMessage}\n </li>\n ) : (\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n id={`${inputId}-option-${index}`}\n role=\"option\"\n aria-selected={activeIndex === index}\n aria-disabled={option.disabled ?? false}\n onMouseDown={(e) => {\n e.preventDefault();\n handleSelect(option);\n }}\n onMouseEnter={() => setActiveIndex(index)}\n className={clsx(\n \"flex cursor-pointer items-center gap-token-2 px-3 py-2 text-sm\",\n \"transition-colors\",\n activeIndex === index && \"bg-primary/10 text-primary\",\n option.disabled &&\n \"cursor-not-allowed opacity-50\"\n )}\n >\n {option.logo && (\n <span\n className=\"flex h-5 w-5 shrink-0 items-center justify-center\"\n aria-hidden=\"true\"\n >\n {option.logo}\n </span>\n )}\n <span className=\"truncate\">{option.label}</span>\n </li>\n ))\n )}\n </ul>\n )}\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nAutocomplete.displayName = \"Autocomplete\";\n","import { forwardRef, useId } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type CheckboxProps } from \"./types\";\n\nexport const checkboxVariants = cva(\n [\n \"peer shrink-0 appearance-none rounded-sm border-2 border-muted/30 bg-white transition-colors\",\n \"checked:border-primary checked:bg-primary\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"cursor-pointer\",\n ],\n {\n variants: {\n size: {\n sm: \"h-3.5 w-3.5\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nconst tickSizeMap = {\n sm: \"h-2.5 w-2.5\",\n md: \"h-3 w-3\",\n lg: \"h-3.5 w-3.5\",\n} as const;\n\nconst labelSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n label,\n description,\n error,\n size = \"md\",\n id: externalId,\n disabled,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const checkboxId = externalId ?? generatedId;\n const errorId = `${checkboxId}-error`;\n const descriptionId = `${checkboxId}-description`;\n\n const ariaDescribedBy = [\n error ? errorId : undefined,\n description ? descriptionId : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className=\"flex flex-col gap-token-1\">\n <div className=\"flex items-start gap-token-2\">\n <div className=\"relative inline-flex shrink-0 items-center justify-center\">\n <input\n ref={ref}\n id={checkboxId}\n type=\"checkbox\"\n disabled={disabled}\n aria-invalid={error ? true : undefined}\n aria-describedby={ariaDescribedBy}\n className={clsx(\n checkboxVariants({ size }),\n error && \"border-red-500\",\n className\n )}\n {...props}\n />\n {/* Tick mark — visible only when checked */}\n <svg\n className={clsx(\n \"pointer-events-none absolute hidden text-white peer-checked:block\",\n tickSizeMap[size]\n )}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n {label && (\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={checkboxId}\n className={clsx(\n \"font-medium leading-none\",\n labelSizeMap[size],\n disabled\n ? \"cursor-not-allowed text-muted/60\"\n : \"cursor-pointer text-muted\"\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n className={clsx(\n \"text-muted/70\",\n size === \"sm\" ? \"text-xs\" : \"text-xs\"\n )}\n >\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n","import { forwardRef, useId, useCallback, useState } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type RadioProps, type RadioItemProps } from \"./types\";\n\nexport const radioVariants = cva(\n [\n \"peer shrink-0 appearance-none rounded-full border-2 border-muted/30 bg-white transition-colors\",\n \"checked:border-primary\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"cursor-pointer\",\n ],\n {\n variants: {\n size: {\n sm: \"h-3.5 w-3.5\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nconst dotSizeMap = {\n sm: \"h-1.5 w-1.5\",\n md: \"h-2 w-2\",\n lg: \"h-2.5 w-2.5\",\n} as const;\n\nconst labelSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\n/**\n * Individual radio input — can be used standalone.\n */\nexport const RadioItem = forwardRef<HTMLInputElement, RadioItemProps>(\n (\n { className, label, description, size = \"md\", id: externalId, disabled, ...props },\n ref\n ) => {\n const generatedId = useId();\n const radioId = externalId ?? generatedId;\n const descriptionId = `${radioId}-description`;\n\n return (\n <div className=\"flex items-start gap-token-2\">\n <div className=\"relative inline-flex shrink-0 items-center justify-center\">\n <input\n ref={ref}\n id={radioId}\n type=\"radio\"\n disabled={disabled}\n aria-describedby={description ? descriptionId : undefined}\n className={clsx(radioVariants({ size }), className)}\n {...props}\n />\n {/* Inner dot — visible only when checked */}\n <span\n className={clsx(\n \"pointer-events-none absolute hidden rounded-full bg-primary peer-checked:block\",\n dotSizeMap[size]\n )}\n aria-hidden=\"true\"\n />\n </div>\n {label && (\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={radioId}\n className={clsx(\n \"font-medium leading-none\",\n labelSizeMap[size],\n disabled\n ? \"cursor-not-allowed text-muted/60\"\n : \"cursor-pointer text-muted\"\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n className=\"text-xs text-muted/70\"\n >\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nRadioItem.displayName = \"RadioItem\";\n\n/**\n * Radio group — renders a list of RadioItem components from options.\n */\nexport const Radio = forwardRef<HTMLFieldSetElement, RadioProps>(\n (\n {\n className,\n label,\n error,\n size = \"md\",\n name,\n value: controlledValue,\n defaultValue,\n onChange,\n options,\n direction = \"vertical\",\n id: externalId,\n disabled,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const groupId = externalId ?? generatedId;\n const errorId = `${groupId}-error`;\n\n const [internalValue, setInternalValue] = useState(defaultValue ?? \"\");\n const selectedValue = controlledValue ?? internalValue;\n\n const handleChange = useCallback(\n (nextValue: string) => {\n if (onChange) {\n onChange(nextValue);\n } else {\n setInternalValue(nextValue);\n }\n },\n [onChange]\n );\n\n return (\n <fieldset\n ref={ref}\n id={groupId}\n role=\"radiogroup\"\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n aria-label={label}\n disabled={disabled}\n className={clsx(\"flex flex-col gap-token-2\", className)}\n {...props}\n >\n {label && (\n <legend\n className={clsx(\n \"text-sm font-medium\",\n disabled ? \"text-muted/60\" : \"text-muted\"\n )}\n >\n {label}\n </legend>\n )}\n <div\n className={clsx(\n \"flex\",\n direction === \"vertical\" ? \"flex-col gap-token-2\" : \"flex-row gap-token-4 flex-wrap\"\n )}\n >\n {options.map((option) => (\n <RadioItem\n key={option.value}\n name={name}\n value={option.value}\n checked={selectedValue === option.value}\n onChange={() => handleChange(option.value)}\n label={option.label}\n description={option.description}\n size={size}\n disabled={disabled ?? option.disabled}\n />\n ))}\n </div>\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </fieldset>\n );\n }\n);\n\nRadio.displayName = \"Radio\";\n","import { forwardRef, useId } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type SwitchProps } from \"./types\";\n\n/**\n * Track — the pill-shaped container the knob sits inside.\n * Grey when off, primary when on.\n */\nexport const switchVariants = cva(\n [\n \"group relative inline-flex shrink-0 cursor-pointer items-center\",\n \"rounded-full transition-colors duration-200 ease-in-out\",\n \"border border-gray-300\",\n \"bg-muted/40\",\n \"has-[:checked]:bg-primary has-[:checked]:border-primary\",\n \"has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-primary has-[:focus-visible]:ring-offset-2\",\n \"has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n md: \"h-6 w-11\",\n lg: \"h-8 w-14\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\n/**\n * Knob — the round toggle lever that slides inside the track.\n * White circle with shadow, moves right when checked.\n */\nconst knobVariants = cva(\n [\n \"pointer-events-none inline-block rounded-full bg-white\",\n \"shadow-[0_2px_4px_rgba(0,0,0,0.2)]\",\n \"ring-0 transition-transform duration-200 ease-in-out\",\n \"peer-checked:translate-x-full\",\n ],\n {\n variants: {\n size: {\n sm: \"h-4 w-4 translate-x-0.5 peer-checked:translate-x-[1.125rem]\",\n md: \"h-5 w-5 translate-x-0.5 peer-checked:translate-x-[1.375rem]\",\n lg: \"h-7 w-7 translate-x-0.5 peer-checked:translate-x-[1.625rem]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nconst labelSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n (\n {\n className,\n label,\n description,\n error,\n size = \"md\",\n id: externalId,\n disabled,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const switchId = externalId ?? generatedId;\n const errorId = `${switchId}-error`;\n const descriptionId = `${switchId}-description`;\n\n const ariaDescribedBy =\n [\n error ? errorId : undefined,\n description ? descriptionId : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className=\"flex flex-col gap-token-1\">\n <div className=\"flex items-center gap-token-2\">\n {/* Clickable track — label wraps input so clicking anywhere toggles */}\n <label\n htmlFor={switchId}\n className={clsx(\n switchVariants({ size }),\n error && \"ring-2 ring-red-500 ring-offset-2\",\n className\n )}\n >\n {/* Hidden native checkbox */}\n <input\n ref={ref}\n id={switchId}\n type=\"checkbox\"\n role=\"switch\"\n disabled={disabled}\n aria-invalid={error ? true : undefined}\n aria-describedby={ariaDescribedBy}\n className=\"peer sr-only\"\n {...props}\n />\n {/* Toggle knob */}\n <span\n className={clsx(knobVariants({ size }))}\n aria-hidden=\"true\"\n />\n </label>\n\n {/* Text label & description */}\n {label && (\n <label htmlFor={switchId} className=\"flex flex-col gap-0.5\">\n <span\n className={clsx(\n \"font-medium leading-none\",\n labelSizeMap[size],\n disabled\n ? \"cursor-not-allowed text-muted/60\"\n : \"cursor-pointer text-muted\"\n )}\n >\n {label}\n </span>\n {description && (\n <p\n id={descriptionId}\n className=\"text-xs text-muted/70\"\n >\n {description}\n </p>\n )}\n </label>\n )}\n </div>\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nSwitch.displayName = \"Switch\";\n","import { useEffect, useCallback, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type SnackbarProps, type SnackbarVariant } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA Variants */\n/* ------------------------------------------------------------------ */\n\nexport const snackbarVariants = cva(\n [\n \"pointer-events-auto flex w-full max-w-sm items-start gap-3\",\n \"rounded-lg px-4 py-3 shadow-md\",\n \"text-sm font-medium\",\n \"animate-[snackbar-in_200ms_ease-out]\",\n ],\n {\n variants: {\n variant: {\n info: \"bg-blue-50 text-blue-900 border border-blue-200\",\n success: \"bg-green-50 text-green-900 border border-green-200\",\n warning: \"bg-amber-50 text-amber-900 border border-amber-200\",\n error: \"bg-red-50 text-red-900 border border-red-200\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n }\n);\n\nconst positionVariants = cva(\"fixed z-[9999] flex pointer-events-none p-4\", {\n variants: {\n position: {\n \"top-left\": \"top-0 left-0 justify-start items-start\",\n \"top-center\": \"top-0 left-0 right-0 justify-center items-start\",\n \"top-right\": \"top-0 right-0 justify-end items-start\",\n \"bottom-left\": \"bottom-0 left-0 justify-start items-end\",\n \"bottom-center\": \"bottom-0 left-0 right-0 justify-center items-end\",\n \"bottom-right\": \"bottom-0 right-0 justify-end items-end\",\n },\n },\n defaultVariants: {\n position: \"bottom-center\",\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Default icons per variant */\n/* ------------------------------------------------------------------ */\n\nconst InfoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5 shrink-0 text-blue-500\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-7-4a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM9 9a.75.75 0 0 0 0 1.5h.253a.25.25 0 0 1 .244.304l-.459 2.066A1.75 1.75 0 0 0 10.747 15H11a.75.75 0 0 0 0-1.5h-.253a.25.25 0 0 1-.244-.304l.459-2.066A1.75 1.75 0 0 0 9.253 9H9Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst SuccessIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5 shrink-0 text-green-500\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5 shrink-0 text-amber-500\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495ZM10 6a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 10 6Zm0 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5 shrink-0 text-red-500\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst defaultIcons: Record<SnackbarVariant, ReactNode> = {\n info: <InfoIcon />,\n success: <SuccessIcon />,\n warning: <WarningIcon />,\n error: <ErrorIcon />,\n};\n\n/* ------------------------------------------------------------------ */\n/* Close button */\n/* ------------------------------------------------------------------ */\n\nconst CloseButton = ({ onClick }: { onClick: () => void }) => (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label=\"Close\"\n className=\"ml-auto -mr-1 -mt-0.5 inline-flex shrink-0 items-center justify-center rounded-md p-1 opacity-60 transition-opacity hover:opacity-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-current\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-4 w-4\"\n >\n <path d=\"M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z\" />\n </svg>\n </button>\n);\n\n/* ------------------------------------------------------------------ */\n/* Snackbar component */\n/* ------------------------------------------------------------------ */\n\nexport const Snackbar = ({\n open,\n onClose,\n message,\n variant = \"info\",\n position = \"bottom-center\",\n autoCloseDuration = 5000,\n showCloseButton = true,\n action,\n icon,\n className,\n ...props\n}: SnackbarProps) => {\n /* ---- Auto-close timer ---- */\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n useEffect(() => {\n if (!open || autoCloseDuration === false || autoCloseDuration === 0) {\n return;\n }\n\n const timer = setTimeout(handleClose, autoCloseDuration);\n return () => clearTimeout(timer);\n }, [open, autoCloseDuration, handleClose]);\n\n if (!open) return null;\n\n const resolvedIcon = icon === null ? null : icon ?? defaultIcons[variant];\n\n return createPortal(\n <div\n className={positionVariants({ position })}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={props[\"aria-label\"] ?? \"Notification\"}\n >\n <div className={clsx(snackbarVariants({ variant }), className)}>\n {/* Icon */}\n {resolvedIcon && <span className=\"mt-0.5\">{resolvedIcon}</span>}\n\n {/* Message + action */}\n <div className=\"flex flex-1 flex-col gap-1\">\n <span>{message}</span>\n {action && <div className=\"mt-1\">{action}</div>}\n </div>\n\n {/* Close button */}\n {showCloseButton && <CloseButton onClick={handleClose} />}\n </div>\n </div>,\n document.body\n );\n};\n\nSnackbar.displayName = \"Snackbar\";\n","import { forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type SkeletonProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const skeletonVariants = cva(\"shrink-0 bg-gray-200\", {\n variants: {\n variant: {\n text: \"w-full rounded\",\n circular: \"rounded-full\",\n rectangular: \"w-full rounded-none\",\n rounded: \"w-full rounded-md\",\n },\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n animation: {\n pulse: \"animate-skeleton-pulse\",\n wave: \"relative overflow-hidden animate-none\",\n none: \"animate-none\",\n },\n },\n compoundVariants: [\n /* text heights */\n { variant: \"text\", size: \"sm\", class: \"h-3\" },\n { variant: \"text\", size: \"md\", class: \"h-4\" },\n { variant: \"text\", size: \"lg\", class: \"h-5\" },\n\n /* circular sizes */\n { variant: \"circular\", size: \"sm\", class: \"h-8 w-8\" },\n { variant: \"circular\", size: \"md\", class: \"h-10 w-10\" },\n { variant: \"circular\", size: \"lg\", class: \"h-14 w-14\" },\n\n /* rectangular heights */\n { variant: \"rectangular\", size: \"sm\", class: \"h-16\" },\n { variant: \"rectangular\", size: \"md\", class: \"h-24\" },\n { variant: \"rectangular\", size: \"lg\", class: \"h-40\" },\n\n /* rounded heights */\n { variant: \"rounded\", size: \"sm\", class: \"h-16\" },\n { variant: \"rounded\", size: \"md\", class: \"h-24\" },\n { variant: \"rounded\", size: \"lg\", class: \"h-40\" },\n ],\n defaultVariants: {\n variant: \"text\",\n size: \"md\",\n animation: \"pulse\",\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Wave shimmer overlay */\n/* ------------------------------------------------------------------ */\n\nconst WaveOverlay = () => (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0 -translate-x-full animate-skeleton-wave bg-gradient-to-r from-transparent via-white/40 to-transparent\"\n />\n);\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nconst toCss = (value: number | string) =>\n typeof value === \"number\" ? `${value}px` : value;\n\n/* ------------------------------------------------------------------ */\n/* Single skeleton block */\n/* ------------------------------------------------------------------ */\n\nconst SkeletonBlock = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"lines\" | \"lineGap\" | \"lastLineWidth\"> & {\n /** Override width — used internally for lastLineWidth */\n overrideWidth?: number | string;\n }\n>(\n (\n {\n variant = \"text\",\n size = \"md\",\n animation = \"pulse\",\n width,\n height,\n overrideWidth,\n className,\n style,\n ...rest\n },\n ref,\n ) => {\n const resolvedWidth = overrideWidth ?? width;\n\n return (\n <div\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={clsx(skeletonVariants({ variant, size, animation }), className)}\n style={{\n ...(resolvedWidth !== undefined && { width: toCss(resolvedWidth) }),\n ...(height !== undefined && { height: toCss(height) }),\n ...style,\n }}\n {...rest}\n >\n {animation === \"wave\" && <WaveOverlay />}\n </div>\n );\n },\n);\n\nSkeletonBlock.displayName = \"SkeletonBlock\";\n\n/* ------------------------------------------------------------------ */\n/* Main Skeleton component */\n/* ------------------------------------------------------------------ */\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n size = \"md\",\n animation = \"pulse\",\n width,\n height,\n lines = 1,\n lineGap = 8,\n lastLineWidth = \"75%\",\n className,\n style,\n ...rest\n },\n ref,\n ) => {\n /* Non-text variants or a single line — render one block */\n if (variant !== \"text\" || lines <= 1) {\n return (\n <SkeletonBlock\n ref={ref}\n variant={variant}\n size={size}\n animation={animation}\n width={width}\n height={height}\n className={className}\n style={style}\n {...rest}\n />\n );\n }\n\n /* Multi-line text skeleton */\n return (\n <div\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: `${lineGap}px`,\n ...style,\n }}\n {...rest}\n >\n {Array.from({ length: lines }, (_, i) => {\n const isLast = i === lines - 1;\n return (\n <SkeletonBlock\n key={i}\n variant=\"text\"\n size={size}\n animation={animation}\n height={height}\n overrideWidth={isLast ? lastLineWidth : width}\n />\n );\n })}\n </div>\n );\n },\n);\n\nSkeleton.displayName = \"Skeleton\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useState,\n} from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type AccordionProps, type AccordionItemProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface AccordionCtx {\n openKeys: string[];\n toggle: (key: string) => void;\n variant: NonNullable<AccordionProps[\"variant\"]>;\n size: NonNullable<AccordionProps[\"size\"]>;\n}\n\nconst AccordionContext = createContext<AccordionCtx | null>(null);\n\nconst useAccordion = () => {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error(\"AccordionItem must be used inside an Accordion.\");\n return ctx;\n};\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const accordionVariants = cva(\"w-full\", {\n variants: {\n variant: {\n default: \"divide-y divide-gray-200\",\n bordered: \"divide-y divide-gray-200 rounded-lg border border-gray-200\",\n separated: \"space-y-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nconst itemVariants = cva(\"\", {\n variants: {\n variant: {\n default: \"\",\n bordered: \"\",\n separated: \"rounded-lg border border-gray-200\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nconst triggerVariants = cva(\n [\n \"flex w-full items-center justify-between text-left font-medium\",\n \"transition-colors duration-150\",\n \"hover:bg-gray-50\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent\",\n ],\n {\n variants: {\n size: {\n sm: \"px-3 py-2 text-xs\",\n md: \"px-4 py-3 text-sm\",\n lg: \"px-5 py-4 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst contentVariants = cva(\"text-muted\", {\n variants: {\n size: {\n sm: \"px-3 pb-2 text-xs\",\n md: \"px-4 pb-3 text-sm\",\n lg: \"px-5 pb-4 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Chevron icon */\n/* ------------------------------------------------------------------ */\n\nconst ChevronIcon = ({ open, size }: { open: boolean; size: string }) => {\n const sizeMap = { sm: \"h-3.5 w-3.5\", md: \"h-4 w-4\", lg: \"h-5 w-5\" } as const;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className={clsx(\n sizeMap[size as keyof typeof sizeMap] ?? sizeMap.md,\n \"shrink-0 text-muted transition-transform duration-200\",\n open && \"rotate-180\",\n )}\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* AccordionItem */\n/* ------------------------------------------------------------------ */\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ itemKey, trigger, children, disabled = false, className, ...rest }, ref) => {\n const { openKeys, toggle, variant, size } = useAccordion();\n const isOpen = openKeys.includes(itemKey);\n const generatedId = useId();\n const triggerId = `${generatedId}-trigger`;\n const panelId = `${generatedId}-panel`;\n\n return (\n <div\n ref={ref}\n className={clsx(itemVariants({ variant }), className)}\n {...rest}\n >\n {/* Trigger */}\n <button\n id={triggerId}\n type=\"button\"\n role=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={() => !disabled && toggle(itemKey)}\n className={triggerVariants({ size })}\n >\n <span>{trigger}</span>\n <ChevronIcon open={isOpen} size={size} />\n </button>\n\n {/* Content panel */}\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className={clsx(\n \"grid transition-[grid-template-rows] duration-200 ease-in-out\",\n isOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n )}\n >\n <div className=\"overflow-hidden\">\n {isOpen && (\n <div className={contentVariants({ size })}>\n {children}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nAccordionItem.displayName = \"AccordionItem\";\n\n/* ------------------------------------------------------------------ */\n/* Accordion (root) */\n/* ------------------------------------------------------------------ */\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n (\n {\n children,\n multiple = false,\n defaultOpenKeys = [],\n openKeys: controlledOpenKeys,\n onOpenKeysChange,\n variant = \"default\",\n size = \"md\",\n className,\n ...rest\n },\n ref,\n ) => {\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys);\n\n const isControlled = controlledOpenKeys !== undefined;\n const openKeys = isControlled ? controlledOpenKeys : internalOpenKeys;\n\n const toggle = useCallback(\n (key: string) => {\n const next = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : multiple\n ? [...openKeys, key]\n : [key];\n\n if (!isControlled) setInternalOpenKeys(next);\n onOpenKeysChange?.(next);\n },\n [openKeys, multiple, isControlled, onOpenKeysChange],\n );\n\n return (\n <AccordionContext.Provider value={{ openKeys, toggle, variant, size }}>\n <div\n ref={ref}\n className={clsx(accordionVariants({ variant }), className)}\n {...rest}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n },\n);\n\nAccordion.displayName = \"Accordion\";\n","import { forwardRef, useState, Children, isValidElement, cloneElement } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type AvatarProps, type AvatarGroupProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const avatarVariants = cva(\n [\n \"relative inline-flex shrink-0 items-center justify-center\",\n \"overflow-hidden font-medium select-none\",\n ],\n {\n variants: {\n size: {\n xs: \"h-6 w-6 text-[0.625rem]\",\n sm: \"h-8 w-8 text-xs\",\n md: \"h-10 w-10 text-sm\",\n lg: \"h-14 w-14 text-lg\",\n xl: \"h-20 w-20 text-xl\",\n },\n shape: {\n circle: \"rounded-full\",\n square: \"rounded-md\",\n },\n color: {\n primary: \"bg-primary text-white\",\n secondary: \"bg-secondary text-white\",\n muted: \"bg-muted/20 text-muted\",\n gray: \"bg-gray-200 text-gray-600\",\n },\n },\n defaultVariants: {\n size: \"md\",\n shape: \"circle\",\n color: \"gray\",\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Status indicator */\n/* ------------------------------------------------------------------ */\n\nconst statusColorMap = {\n online: \"bg-green-500\",\n offline: \"bg-gray-400\",\n away: \"bg-amber-400\",\n busy: \"bg-red-500\",\n} as const;\n\nconst statusSizeMap = {\n xs: \"h-1.5 w-1.5 ring-1\",\n sm: \"h-2 w-2 ring-1\",\n md: \"h-2.5 w-2.5 ring-2\",\n lg: \"h-3 w-3 ring-2\",\n xl: \"h-3.5 w-3.5 ring-2\",\n} as const;\n\nconst statusPositionMap = {\n \"top-right\": \"top-0 right-0\",\n \"bottom-right\": \"bottom-0 right-0\",\n} as const;\n\nconst StatusDot = ({\n status,\n size,\n position,\n}: {\n status: NonNullable<AvatarProps[\"status\"]>;\n size: NonNullable<AvatarProps[\"size\"]>;\n position: NonNullable<AvatarProps[\"statusPosition\"]>;\n}) => (\n <span\n aria-label={status}\n className={clsx(\n \"absolute block rounded-full ring-white\",\n statusColorMap[status],\n statusSizeMap[size],\n statusPositionMap[position],\n )}\n />\n);\n\n/* ------------------------------------------------------------------ */\n/* Default fallback icon (user silhouette) */\n/* ------------------------------------------------------------------ */\n\nconst DefaultIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-[60%] w-[60%] opacity-60\"\n aria-hidden=\"true\"\n >\n <path d=\"M10 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM3.465 14.493a1.23 1.23 0 0 0 .41 1.412A9.957 9.957 0 0 0 10 18c2.31 0 4.438-.784 6.131-2.1.43-.333.604-.903.408-1.41a7.002 7.002 0 0 0-13.074.003Z\" />\n </svg>\n);\n\n/* ------------------------------------------------------------------ */\n/* Avatar */\n/* ------------------------------------------------------------------ */\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n src,\n alt = \"\",\n fallback,\n fallbackIcon,\n size = \"md\",\n shape = \"circle\",\n color = \"gray\",\n status,\n statusPosition = \"bottom-right\",\n className,\n ...rest\n },\n ref,\n ) => {\n const [imgError, setImgError] = useState(false);\n\n const showImage = src && !imgError;\n\n return (\n <span\n ref={ref}\n role=\"img\"\n aria-label={alt || fallback || \"avatar\"}\n className={clsx(avatarVariants({ size, shape, color }), className)}\n {...rest}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt}\n onError={() => setImgError(true)}\n className=\"h-full w-full object-cover\"\n draggable={false}\n />\n ) : fallback ? (\n <span aria-hidden=\"true\">{fallback}</span>\n ) : fallbackIcon !== undefined ? (\n fallbackIcon\n ) : (\n <DefaultIcon />\n )}\n\n {status && <StatusDot status={status} size={size} position={statusPosition} />}\n </span>\n );\n },\n);\n\nAvatar.displayName = \"Avatar\";\n\n/* ------------------------------------------------------------------ */\n/* AvatarGroup */\n/* ------------------------------------------------------------------ */\n\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ children, max, size, className, ...rest }, ref) => {\n const childArray = Children.toArray(children).filter(isValidElement);\n const total = childArray.length;\n const visible = max && max < total ? childArray.slice(0, max) : childArray;\n const overflow = max && max < total ? total - max : 0;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"Avatar group\"\n className={clsx(\"flex -space-x-2\", className)}\n {...rest}\n >\n {visible.map((child, i) => {\n if (!isValidElement<AvatarProps>(child)) return child;\n return cloneElement(child, {\n key: i,\n ...(size && { size }),\n className: clsx(\n \"ring-2 ring-white\",\n (child.props as AvatarProps).className,\n ),\n } as Partial<AvatarProps>);\n })}\n\n {overflow > 0 && (\n <span\n className={clsx(\n avatarVariants({ size: size ?? \"md\", shape: \"circle\", color: \"gray\" }),\n \"ring-2 ring-white font-semibold\",\n )}\n aria-label={`${overflow} more`}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n },\n);\n\nAvatarGroup.displayName = \"AvatarGroup\";\n","import { createContext, forwardRef, useContext } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport {\n type ListProps,\n type ListItemProps,\n type ListSubheaderProps,\n} from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* Context — share variant + size from List → ListItem */\n/* ------------------------------------------------------------------ */\n\ninterface ListCtx {\n variant: NonNullable<ListProps[\"variant\"]>;\n size: NonNullable<ListProps[\"size\"]>;\n interactive: boolean;\n}\n\nconst ListContext = createContext<ListCtx>({\n variant: \"plain\",\n size: \"md\",\n interactive: false,\n});\n\nconst useList = () => useContext(ListContext);\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const listVariants = cva(\"w-full list-none p-0 m-0\", {\n variants: {\n variant: {\n plain: \"\",\n bordered: \"rounded-lg border border-gray-200\",\n divided: \"divide-y divide-gray-200\",\n striped: \"\",\n },\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n },\n compoundVariants: [\n { variant: \"bordered\", class: \"divide-y divide-gray-200\" },\n ],\n defaultVariants: {\n variant: \"plain\",\n size: \"md\",\n },\n});\n\nconst listItemVariants = cva(\n \"flex items-center gap-3 transition-colors duration-150\",\n {\n variants: {\n size: {\n sm: \"px-3 py-1.5 text-xs\",\n md: \"px-4 py-2.5 text-sm\",\n lg: \"px-5 py-3.5 text-base\",\n },\n interactive: {\n true: \"cursor-pointer hover:bg-gray-50 focus-visible:outline-none focus-visible:bg-gray-100\",\n false: \"\",\n },\n selected: {\n true: \"bg-primary/5 text-primary\",\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n striped: {\n true: \"even:bg-gray-50\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n interactive: false,\n selected: false,\n disabled: false,\n striped: false,\n },\n },\n);\n\nconst subheaderVariants = cva(\n \"font-semibold uppercase tracking-wider text-muted\",\n {\n variants: {\n size: {\n sm: \"px-3 py-1 text-[0.625rem]\",\n md: \"px-4 py-1.5 text-xs\",\n lg: \"px-5 py-2 text-xs\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* ListSubheader */\n/* ------------------------------------------------------------------ */\n\nexport const ListSubheader = ({ children, className }: ListSubheaderProps) => {\n const { size } = useList();\n\n return (\n <li\n role=\"presentation\"\n className={clsx(subheaderVariants({ size }), className)}\n >\n {children}\n </li>\n );\n};\n\nListSubheader.displayName = \"ListSubheader\";\n\n/* ------------------------------------------------------------------ */\n/* ListItem */\n/* ------------------------------------------------------------------ */\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(\n (\n {\n leading,\n trailing,\n secondary,\n selected = false,\n disabled = false,\n onClick,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const { size, interactive: listInteractive, variant } = useList();\n const isInteractive = listInteractive || !!onClick;\n\n return (\n <li\n ref={ref}\n role={isInteractive ? \"option\" : undefined}\n aria-selected={isInteractive ? selected : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={isInteractive && !disabled ? 0 : undefined}\n onClick={disabled ? undefined : onClick}\n onKeyDown={\n isInteractive && !disabled\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLLIElement>);\n }\n }\n : undefined\n }\n className={clsx(\n listItemVariants({\n size,\n interactive: isInteractive,\n selected,\n disabled,\n striped: variant === \"striped\",\n }),\n className,\n )}\n {...rest}\n >\n {/* Leading */}\n {leading && (\n <span className=\"flex shrink-0 items-center text-muted\">\n {leading}\n </span>\n )}\n\n {/* Content */}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate\">{children}</span>\n {secondary && (\n <span className=\"truncate text-muted\" style={{ fontSize: \"0.85em\" }}>\n {secondary}\n </span>\n )}\n </span>\n\n {/* Trailing */}\n {trailing && (\n <span className=\"flex shrink-0 items-center text-muted\">\n {trailing}\n </span>\n )}\n </li>\n );\n },\n);\n\nListItem.displayName = \"ListItem\";\n\n/* ------------------------------------------------------------------ */\n/* List (root) */\n/* ------------------------------------------------------------------ */\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(\n (\n {\n variant = \"plain\",\n size = \"md\",\n ordered = false,\n interactive = false,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const sharedProps = {\n role: interactive ? (\"listbox\" as const) : (\"list\" as const),\n className: clsx(listVariants({ variant, size }), className),\n };\n\n return (\n <ListContext.Provider value={{ variant, size, interactive }}>\n {ordered ? (\n <ol ref={ref as unknown as React.Ref<HTMLOListElement>} {...sharedProps} {...rest}>\n {children}\n </ol>\n ) : (\n <ul ref={ref} {...sharedProps} {...rest}>\n {children}\n </ul>\n )}\n </ListContext.Provider>\n );\n },\n);\n\nList.displayName = \"List\";\n","import { forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type EmptyStateProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const emptyStateVariants = cva(\"w-full\", {\n variants: {\n size: {\n sm: \"py-6 px-4\",\n md: \"py-10 px-6\",\n lg: \"py-16 px-8\",\n },\n layout: {\n vertical: \"flex flex-col items-center text-center\",\n horizontal: \"flex items-center text-left gap-6\",\n },\n bordered: {\n true: \"rounded-lg border border-gray-200\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n layout: \"vertical\",\n bordered: false,\n },\n});\n\nconst iconContainerVariants = cva(\n \"flex shrink-0 items-center justify-center rounded-full bg-gray-100 text-muted\",\n {\n variants: {\n size: {\n sm: \"h-10 w-10\",\n md: \"h-14 w-14\",\n lg: \"h-20 w-20\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst iconSizeMap = {\n sm: \"h-5 w-5\",\n md: \"h-7 w-7\",\n lg: \"h-10 w-10\",\n} as const;\n\nconst titleVariants = cva(\"font-semibold text-gray-900\", {\n variants: {\n size: {\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nconst descriptionVariants = cva(\"text-muted\", {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nconst gapMap = {\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Default icon (empty box illustration) */\n/* ------------------------------------------------------------------ */\n\nconst DefaultIcon = ({ size }: { size: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={iconSizeMap[size as keyof typeof iconSizeMap] ?? iconSizeMap.md}\n aria-hidden=\"true\"\n >\n <path d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" />\n </svg>\n);\n\n/* ------------------------------------------------------------------ */\n/* EmptyState */\n/* ------------------------------------------------------------------ */\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n {\n icon,\n image,\n title,\n description,\n primaryAction,\n secondaryAction,\n size = \"md\",\n layout = \"vertical\",\n bordered = false,\n className,\n ...rest\n },\n ref,\n ) => {\n const isVertical = layout === \"vertical\";\n\n const resolvedIcon = image ? null : icon === undefined ? <DefaultIcon size={size} /> : icon;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n className={clsx(emptyStateVariants({ size, layout, bordered }), className)}\n {...rest}\n >\n {/* Image (full-width, vertical only) */}\n {image && isVertical && (\n <div className=\"mb-4 flex justify-center\">{image}</div>\n )}\n\n {/* Icon circle */}\n {resolvedIcon && (\n <div className={clsx(iconContainerVariants({ size }), !isVertical && \"shrink-0\")}>\n {resolvedIcon}\n </div>\n )}\n\n {/* Horizontal: image on the left */}\n {image && !isVertical && (\n <div className=\"shrink-0\">{image}</div>\n )}\n\n {/* Text + actions */}\n <div className={clsx(\"flex flex-col\", isVertical ? \"items-center\" : \"items-start\", gapMap[size])}>\n {/* Title */}\n <h3 className={clsx(titleVariants({ size }), isVertical && \"mt-3\")}>\n {title}\n </h3>\n\n {/* Description */}\n {description && (\n <p className={clsx(descriptionVariants({ size }), \"max-w-sm\")}>\n {description}\n </p>\n )}\n\n {/* Actions */}\n {(primaryAction || secondaryAction) && (\n <div className={clsx(\"flex items-center gap-3\", isVertical && \"mt-1\")}>\n {primaryAction}\n {secondaryAction}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nEmptyState.displayName = \"EmptyState\";\n","import { forwardRef, useMemo } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type MarqueeProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const marqueeVariants = cva(\"relative overflow-hidden\", {\n variants: {\n direction: {\n left: \"\",\n right: \"\",\n up: \"\",\n down: \"\",\n },\n fade: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n direction: \"left\",\n fade: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Speed → duration map (seconds) */\n/* ------------------------------------------------------------------ */\n\nconst speedMap = {\n slow: 40,\n normal: 25,\n fast: 12,\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Gap map (Tailwind gap values) */\n/* ------------------------------------------------------------------ */\n\nconst gapMap = {\n \"2\": \"gap-2\",\n \"4\": \"gap-4\",\n \"6\": \"gap-6\",\n \"8\": \"gap-8\",\n \"12\": \"gap-12\",\n \"16\": \"gap-16\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Direction helpers */\n/* ------------------------------------------------------------------ */\n\nconst isHorizontal = (dir: string) => dir === \"left\" || dir === \"right\";\n\nconst getAnimationName = (dir: string) => {\n if (dir === \"left\") return \"marquee-left\";\n if (dir === \"right\") return \"marquee-right\";\n if (dir === \"up\") return \"marquee-up\";\n return \"marquee-down\";\n};\n\nconst getFadeMask = (dir: string, fadeWidth: string) => {\n if (isHorizontal(dir)) {\n return `linear-gradient(to right, transparent 0%, black ${fadeWidth}, black calc(100% - ${fadeWidth}), transparent 100%)`;\n }\n return `linear-gradient(to bottom, transparent 0%, black ${fadeWidth}, black calc(100% - ${fadeWidth}), transparent 100%)`;\n};\n\n/* ------------------------------------------------------------------ */\n/* Marquee */\n/* ------------------------------------------------------------------ */\n\nexport const Marquee = forwardRef<HTMLDivElement, MarqueeProps>(\n (\n {\n children,\n direction = \"left\",\n speed = \"normal\",\n duration,\n pauseOnHover = false,\n repeat = 4,\n gap = \"8\",\n fade = true,\n fadeWidth = \"4rem\",\n playing = true,\n className,\n ...rest\n },\n ref,\n ) => {\n const resolvedDuration = duration ?? speedMap[speed];\n const horizontal = isHorizontal(direction);\n const animationName = getAnimationName(direction);\n\n const copies = useMemo(\n () => Array.from({ length: repeat }, (_, i) => i),\n [repeat],\n );\n\n const trackStyle: React.CSSProperties = {\n animationName,\n animationDuration: `${resolvedDuration}s`,\n animationTimingFunction: \"linear\",\n animationIterationCount: \"infinite\",\n animationPlayState: playing ? \"running\" : \"paused\",\n };\n\n const maskStyle: React.CSSProperties = fade\n ? { WebkitMaskImage: getFadeMask(direction, fadeWidth), maskImage: getFadeMask(direction, fadeWidth) }\n : {};\n\n return (\n <div\n ref={ref}\n className={clsx(marqueeVariants({ direction, fade }), className)}\n style={maskStyle}\n aria-live=\"off\"\n {...rest}\n >\n <div\n className={clsx(\n \"flex min-w-full\",\n horizontal ? \"flex-row\" : \"flex-col\",\n gapMap[gap],\n pauseOnHover && \"hover:[animation-play-state:paused]\",\n /* children inside also need to pause */\n pauseOnHover && \"[&>*]:hover:[animation-play-state:paused]\",\n )}\n style={trackStyle}\n >\n {copies.map((i) => (\n <div\n key={i}\n aria-hidden={i > 0 || undefined}\n className={clsx(\n \"flex shrink-0 items-center justify-around\",\n horizontal ? \"flex-row\" : \"flex-col\",\n gapMap[gap],\n )}\n >\n {children}\n </div>\n ))}\n </div>\n </div>\n );\n },\n);\n\nMarquee.displayName = \"Marquee\";\n","import { createContext, useContext, useMemo } from \"react\";\nimport { type LocaleContextValue, type LocaleProviderProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* Defaults */\n/* ------------------------------------------------------------------ */\n\nconst defaultLocaleContext: LocaleContextValue = {\n locale: \"en-US\",\n currency: \"USD\",\n direction: \"ltr\",\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n};\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\nconst LocaleContext = createContext<LocaleContextValue>(defaultLocaleContext);\n\n/* ------------------------------------------------------------------ */\n/* Provider */\n/* ------------------------------------------------------------------ */\n\nexport function LocaleProvider({\n locale,\n currency,\n direction,\n timezone,\n children,\n}: LocaleProviderProps) {\n /* Read the parent context so nested providers merge correctly */\n const parent = useContext(LocaleContext);\n\n const value = useMemo<LocaleContextValue>(\n () => ({\n locale: locale ?? parent.locale,\n currency: currency ?? parent.currency,\n direction: direction ?? parent.direction,\n timezone: timezone ?? parent.timezone,\n }),\n [locale, currency, direction, timezone, parent],\n );\n\n return (\n <LocaleContext.Provider value={value}>\n {children}\n </LocaleContext.Provider>\n );\n}\n\nLocaleProvider.displayName = \"LocaleProvider\";\n\n/* ------------------------------------------------------------------ */\n/* Hook */\n/* ------------------------------------------------------------------ */\n\n/**\n * Read the current locale context.\n *\n * - Inside a `<LocaleProvider>`: returns the provider's values.\n * - Outside any provider: returns sensible defaults (`en-US`, `USD`, `ltr`).\n */\nexport function useLocale(): LocaleContextValue {\n return useContext(LocaleContext);\n}\n\n/**\n * Return only the locale string.\n * Convenience shortcut for `useLocale().locale`.\n */\nexport function useLocaleString(): string {\n return useContext(LocaleContext).locale;\n}\n\n/**\n * Return only the currency code.\n * Convenience shortcut for `useLocale().currency`.\n */\nexport function useCurrency(): string {\n return useContext(LocaleContext).currency;\n}\n\n/**\n * Return only the text direction.\n * Convenience shortcut for `useLocale().direction`.\n */\nexport function useDirection(): \"ltr\" | \"rtl\" {\n return useContext(LocaleContext).direction;\n}\n\n/**\n * Return only the timezone.\n * Convenience shortcut for `useLocale().timezone`.\n */\nexport function useTimezone(): string {\n return useContext(LocaleContext).timezone;\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type StatProps } from \"./types\";\nimport { useLocale } from \"../LocaleProvider\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const statVariants = cva(\"flex flex-col\", {\n variants: {\n variant: {\n default: \"\",\n bordered: \"rounded-lg border border-gray-200 bg-white\",\n filled: \"rounded-lg bg-gray-50\",\n minimal: \"\",\n },\n size: {\n sm: \"gap-0.5\",\n md: \"gap-1\",\n lg: \"gap-1.5\",\n },\n },\n compoundVariants: [\n { variant: \"bordered\", size: \"sm\", class: \"p-3\" },\n { variant: \"bordered\", size: \"md\", class: \"p-4\" },\n { variant: \"bordered\", size: \"lg\", class: \"p-6\" },\n { variant: \"filled\", size: \"sm\", class: \"p-3\" },\n { variant: \"filled\", size: \"md\", class: \"p-4\" },\n { variant: \"filled\", size: \"lg\", class: \"p-6\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nconst valueSizeMap = {\n sm: \"text-xl font-bold\",\n md: \"text-3xl font-bold\",\n lg: \"text-4xl font-bold\",\n} as const;\n\nconst labelSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\nconst iconSizeMap = {\n sm: \"h-8 w-8\",\n md: \"h-10 w-10\",\n lg: \"h-12 w-12\",\n} as const;\n\nconst trendColors = {\n up: \"text-green-600\",\n down: \"text-red-600\",\n neutral: \"text-gray-500\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Trend arrow SVGs */\n/* ------------------------------------------------------------------ */\n\nconst TrendArrow = ({ trend, className }: { trend: \"up\" | \"down\" | \"neutral\"; className?: string }) => {\n if (trend === \"up\") {\n return (\n <svg\n className={clsx(\"h-3.5 w-3.5\", className)}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M8 12V4M4 7l4-3 4 3\" />\n </svg>\n );\n }\n\n if (trend === \"down\") {\n return (\n <svg\n className={clsx(\"h-3.5 w-3.5\", className)}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M8 4v8M4 9l4 3 4-3\" />\n </svg>\n );\n }\n\n return (\n <svg\n className={clsx(\"h-3.5 w-3.5\", className)}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 8h10\" />\n </svg>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* useAnimatedCounter hook */\n/* ------------------------------------------------------------------ */\n\nfunction easeOutQuart(t: number): number {\n return 1 - Math.pow(1 - t, 4);\n}\n\nfunction useAnimatedCounter(\n target: number,\n duration: number,\n enabled: boolean,\n decimals: number,\n) {\n const [value, setValue] = useState(enabled ? 0 : target);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const hasAnimated = useRef(false);\n\n const animate = useCallback(() => {\n if (hasAnimated.current) return;\n hasAnimated.current = true;\n\n const start = performance.now();\n\n const step = (now: number) => {\n const elapsed = now - start;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeOutQuart(progress);\n const current = eased * target;\n\n setValue(Number(current.toFixed(decimals)));\n\n if (progress < 1) {\n requestAnimationFrame(step);\n } else {\n setValue(target);\n }\n };\n\n requestAnimationFrame(step);\n }, [target, duration, decimals]);\n\n useEffect(() => {\n if (!enabled) {\n setValue(target);\n return;\n }\n\n const node = containerRef.current;\n if (!node) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry?.isIntersecting) {\n animate();\n observer.disconnect();\n }\n },\n { threshold: 0.3 },\n );\n\n observer.observe(node);\n return () => observer.disconnect();\n }, [enabled, animate, target]);\n\n return { value, containerRef };\n}\n\n/* ------------------------------------------------------------------ */\n/* Number formatter */\n/* ------------------------------------------------------------------ */\n\nfunction formatValue(\n value: number,\n format: StatProps[\"format\"],\n locale: string,\n decimals: number,\n currency: string,\n): string {\n switch (format) {\n case \"currency\":\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value);\n\n case \"percent\":\n return new Intl.NumberFormat(locale, {\n style: \"percent\",\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value / 100);\n\n case \"compact\":\n return new Intl.NumberFormat(locale, {\n notation: \"compact\",\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value);\n\n default:\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value);\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Stat */\n/* ------------------------------------------------------------------ */\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(\n (\n {\n value,\n label,\n prefix,\n suffix,\n format = \"number\",\n locale: localeProp,\n decimals = 0,\n animationDuration = 1500,\n animated = true,\n trend,\n trendValue,\n icon,\n variant = \"default\",\n size = \"md\",\n className,\n ...rest\n },\n ref,\n ) => {\n const ctx = useLocale();\n const locale = localeProp ?? ctx.locale;\n const resolvedCurrency = ctx.currency;\n\n const { value: animatedValue, containerRef } = useAnimatedCounter(\n value,\n animationDuration,\n animated,\n decimals,\n );\n\n const formattedValue = formatValue(animatedValue, format, locale, decimals, resolvedCurrency);\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx(statVariants({ variant, size }), className)}\n {...rest}\n >\n {/* Icon */}\n {icon && (\n <div\n className={clsx(\n \"flex shrink-0 items-center justify-center rounded-lg bg-gray-100 text-muted mb-2\",\n iconSizeMap[size],\n )}\n >\n {icon}\n </div>\n )}\n\n {/* Label (above value for some layouts) */}\n <span className={clsx(\"text-muted\", labelSizeMap[size])}>\n {label}\n </span>\n\n {/* Value row */}\n <div className=\"flex items-baseline gap-1\">\n {prefix && format !== \"currency\" && (\n <span className={clsx(\"text-gray-900\", valueSizeMap[size])}>\n {prefix}\n </span>\n )}\n <span className={clsx(\"tabular-nums text-gray-900\", valueSizeMap[size])}>\n {formattedValue}\n </span>\n {suffix && (\n <span className={clsx(\"text-muted\", labelSizeMap[size])}>\n {suffix}\n </span>\n )}\n </div>\n\n {/* Trend indicator */}\n {trend && (\n <div\n className={clsx(\n \"flex items-center gap-1 text-xs font-medium\",\n trendColors[trend],\n )}\n >\n <TrendArrow trend={trend} />\n {trendValue && <span>{trendValue}</span>}\n </div>\n )}\n </div>\n );\n },\n);\n\nStat.displayName = \"Stat\";\n","import { forwardRef, Children } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type StatGroupProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const statGroupVariants = cva(\"grid w-full\", {\n variants: {\n columns: {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n 6: \"grid-cols-6\",\n },\n gap: {\n \"2\": \"gap-2\",\n \"4\": \"gap-4\",\n \"6\": \"gap-6\",\n \"8\": \"gap-8\",\n },\n dividers: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n gap: \"6\",\n dividers: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* StatGroup */\n/* ------------------------------------------------------------------ */\n\nexport const StatGroup = forwardRef<HTMLDivElement, StatGroupProps>(\n (\n {\n columns,\n gap = \"6\",\n dividers = false,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const childCount = Children.count(children);\n const resolvedColumns = columns ?? (childCount <= 6 ? (childCount as 1 | 2 | 3 | 4 | 5 | 6) : 4);\n\n if (!dividers) {\n return (\n <div\n ref={ref}\n className={clsx(\n statGroupVariants({ columns: resolvedColumns, gap, dividers: false }),\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n }\n\n /* With dividers — wrap each child with a right border */\n const childArray = Children.toArray(children);\n\n return (\n <div\n ref={ref}\n className={clsx(\n statGroupVariants({ columns: resolvedColumns, gap, dividers: true }),\n className,\n )}\n {...rest}\n >\n {childArray.map((child, i) => (\n <div\n key={i}\n className={clsx(\n i < childArray.length - 1 && \"border-r border-gray-200 pr-4\",\n )}\n >\n {child}\n </div>\n ))}\n </div>\n );\n },\n);\n\nStatGroup.displayName = \"StatGroup\";\n","import { useCallback, useMemo } from \"react\";\nimport {\n type NumberFormatStyle,\n type UseFormatNumberOptions,\n} from \"./types\";\nimport { useLocale } from \"../LocaleProvider\";\n\n/* ------------------------------------------------------------------ */\n/* Ordinal suffixes (English) */\n/* ------------------------------------------------------------------ */\n\nfunction ordinalSuffix(n: number): string {\n const abs = Math.abs(Math.round(n));\n const mod100 = abs % 100;\n if (mod100 >= 11 && mod100 <= 13) return `${n}th`;\n switch (abs % 10) {\n case 1:\n return `${n}st`;\n case 2:\n return `${n}nd`;\n case 3:\n return `${n}rd`;\n default:\n return `${n}th`;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* File-size formatting */\n/* ------------------------------------------------------------------ */\n\nconst FILE_SIZE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"] as const;\n\nfunction formatFileSize(bytes: number, decimals: number): string {\n if (bytes === 0) return \"0 B\";\n const sign = bytes < 0 ? \"-\" : \"\";\n const abs = Math.abs(bytes);\n const k = 1024;\n const i = Math.min(\n Math.floor(Math.log(abs) / Math.log(k)),\n FILE_SIZE_UNITS.length - 1,\n );\n const val = abs / Math.pow(k, i);\n return `${sign}${val.toFixed(decimals)} ${FILE_SIZE_UNITS[i]}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Duration formatting */\n/* ------------------------------------------------------------------ */\n\nfunction formatDuration(seconds: number): string {\n const sign = seconds < 0 ? \"-\" : \"\";\n let abs = Math.abs(Math.round(seconds));\n\n const d = Math.floor(abs / 86400);\n abs %= 86400;\n const h = Math.floor(abs / 3600);\n abs %= 3600;\n const m = Math.floor(abs / 60);\n const s = abs % 60;\n\n const parts: string[] = [];\n if (d > 0) parts.push(`${d}d`);\n if (h > 0) parts.push(`${h}h`);\n if (m > 0) parts.push(`${m}m`);\n if (s > 0 || parts.length === 0) parts.push(`${s}s`);\n\n return `${sign}${parts.join(\" \")}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Core formatter */\n/* ------------------------------------------------------------------ */\n\nfunction coreFormat(\n value: number,\n format: NumberFormatStyle,\n locale: string,\n options: {\n currency?: string;\n currencyDisplay?: \"symbol\" | \"narrowSymbol\" | \"code\" | \"name\";\n notation?: Intl.NumberFormatOptions[\"notation\"];\n signDisplay?: Intl.NumberFormatOptions[\"signDisplay\"];\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n unit?: string;\n unitDisplay?: \"short\" | \"long\" | \"narrow\";\n },\n): string {\n switch (format) {\n case \"ordinal\":\n return ordinalSuffix(value);\n\n case \"filesize\":\n return formatFileSize(value, options.maximumFractionDigits ?? 1);\n\n case \"duration\":\n return formatDuration(value);\n\n case \"accounting\":\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency: options.currency ?? \"USD\",\n currencyDisplay: options.currencyDisplay ?? \"symbol\",\n currencySign: \"accounting\",\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n\n case \"currency\":\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency: options.currency ?? \"USD\",\n currencyDisplay: options.currencyDisplay ?? \"symbol\",\n notation: options.notation,\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n\n case \"percent\":\n return new Intl.NumberFormat(locale, {\n style: \"percent\",\n notation: options.notation,\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value / 100);\n\n case \"compact\":\n return new Intl.NumberFormat(locale, {\n notation: \"compact\",\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n\n case \"unit\":\n return new Intl.NumberFormat(locale, {\n style: \"unit\",\n unit: options.unit ?? \"kilogram\",\n unitDisplay: options.unitDisplay ?? \"short\",\n notation: options.notation,\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n\n case \"decimal\":\n case \"number\":\n default:\n return new Intl.NumberFormat(locale, {\n style: \"decimal\",\n notation: options.notation,\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* useFormatNumber hook */\n/* ------------------------------------------------------------------ */\n\nexport function useFormatNumber(opts: UseFormatNumberOptions = {}) {\n const ctx = useLocale();\n const {\n format = \"number\",\n locale: localeProp,\n currency: currencyProp,\n currencyDisplay,\n notation,\n signDisplay,\n minimumFractionDigits,\n maximumFractionDigits,\n decimals,\n unit,\n unitDisplay,\n prefix = \"\",\n suffix = \"\",\n } = opts;\n\n const locale = localeProp ?? ctx.locale;\n const currency = currencyProp ?? ctx.currency;\n\n const minFrac = decimals ?? minimumFractionDigits;\n const maxFrac = decimals ?? maximumFractionDigits;\n\n const formatFn = useCallback(\n (value: number) => {\n const formatted = coreFormat(value, format, locale, {\n currency,\n currencyDisplay,\n notation,\n signDisplay,\n minimumFractionDigits: minFrac,\n maximumFractionDigits: maxFrac,\n unit,\n unitDisplay,\n });\n\n return `${prefix}${formatted}${suffix}`;\n },\n [\n format,\n locale,\n currency,\n currencyDisplay,\n notation,\n signDisplay,\n minFrac,\n maxFrac,\n unit,\n unitDisplay,\n prefix,\n suffix,\n ],\n );\n\n return useMemo(() => ({ format: formatFn }), [formatFn]);\n}\n\n/* Re-export coreFormat for the component */\nexport { coreFormat };\n","import { clsx } from \"clsx\";\nimport { type FormatNumberProps } from \"./types\";\nimport { coreFormat } from \"./useFormatNumber\";\nimport { useLocale } from \"../LocaleProvider\";\n\n/* ------------------------------------------------------------------ */\n/* FormatNumber */\n/* ------------------------------------------------------------------ */\n\nexport function FormatNumber({\n value,\n format = \"number\",\n locale: localeProp,\n currency: currencyProp,\n currencyDisplay = \"symbol\",\n notation,\n signDisplay,\n minimumFractionDigits,\n maximumFractionDigits,\n decimals,\n unit,\n unitDisplay,\n prefix = \"\",\n suffix = \"\",\n children,\n className,\n as: Tag = \"span\",\n ...rest\n}: FormatNumberProps) {\n const ctx = useLocale();\n const locale = localeProp ?? ctx.locale;\n const currency = currencyProp ?? ctx.currency;\n\n const minFrac = decimals ?? minimumFractionDigits;\n const maxFrac = decimals ?? maximumFractionDigits;\n\n const formatted = coreFormat(value, format, locale, {\n currency,\n currencyDisplay,\n notation,\n signDisplay,\n minimumFractionDigits: minFrac,\n maximumFractionDigits: maxFrac,\n unit,\n unitDisplay,\n });\n\n const display = `${prefix}${formatted}${suffix}`;\n\n /* Render prop */\n if (children) {\n return <>{children(display)}</>;\n }\n\n return (\n <Tag\n className={clsx(\"tabular-nums\", className)}\n {...rest}\n >\n {display}\n </Tag>\n );\n}\n\nFormatNumber.displayName = \"FormatNumber\";\n","import { forwardRef, useCallback, useId, useState } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type TabsProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const tabsVariants = cva(\"\", {\n variants: {\n orientation: {\n horizontal: \"flex flex-col\",\n vertical: \"flex flex-row\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n});\n\nconst tabListVariants = cva(\"flex\", {\n variants: {\n variant: {\n underline: \"border-b border-gray-200\",\n pills: \"gap-1\",\n bordered: \"border-b border-gray-200\",\n lifted: \"border-b border-gray-200\",\n },\n orientation: {\n horizontal: \"flex-row\",\n vertical: \"flex-col border-b-0 border-r border-gray-200\",\n },\n fullWidth: {\n true: \"\",\n false: \"\",\n },\n align: {\n start: \"\",\n center: \"\",\n end: \"\",\n },\n },\n compoundVariants: [\n { orientation: \"horizontal\", fullWidth: false, align: \"start\", class: \"justify-start\" },\n { orientation: \"horizontal\", fullWidth: false, align: \"center\", class: \"justify-center\" },\n { orientation: \"horizontal\", fullWidth: false, align: \"end\", class: \"justify-end\" },\n { orientation: \"horizontal\", fullWidth: true, class: \"\" },\n ],\n defaultVariants: {\n variant: \"underline\",\n orientation: \"horizontal\",\n fullWidth: false,\n align: \"start\",\n },\n});\n\nconst tabTriggerVariants = cva(\n \"inline-flex items-center gap-2 font-medium transition-colors outline-none cursor-pointer select-none whitespace-nowrap\",\n {\n variants: {\n variant: {\n underline:\n \"border-b-2 border-transparent text-muted hover:text-gray-900 hover:border-gray-300\",\n pills:\n \"rounded-md text-muted hover:bg-gray-100 hover:text-gray-900\",\n bordered:\n \"border border-transparent rounded-t-md -mb-px text-muted hover:text-gray-900\",\n lifted:\n \"border-b-2 border-transparent text-muted hover:text-gray-900 -mb-px\",\n },\n size: {\n sm: \"px-3 py-1.5 text-xs\",\n md: \"px-4 py-2 text-sm\",\n lg: \"px-5 py-2.5 text-base\",\n },\n fullWidth: {\n true: \"flex-1 justify-center\",\n false: \"\",\n },\n active: {\n true: \"\",\n false: \"\",\n },\n disabled: {\n true: \"opacity-40 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n },\n compoundVariants: [\n /* Active states */\n { variant: \"underline\", active: true, class: \"border-primary text-primary\" },\n { variant: \"pills\", active: true, class: \"bg-primary text-white hover:bg-primary hover:text-white\" },\n { variant: \"bordered\", active: true, class: \"border-gray-200 border-b-white bg-white text-gray-900 rounded-t-md\" },\n { variant: \"lifted\", active: true, class: \"border-primary text-primary bg-white shadow-sm rounded-t-md\" },\n ],\n defaultVariants: {\n variant: \"underline\",\n size: \"md\",\n fullWidth: false,\n active: false,\n disabled: false,\n },\n },\n);\n\nconst tabPanelVariants = cva(\"outline-none\", {\n variants: {\n size: {\n sm: \"pt-2\",\n md: \"pt-3\",\n lg: \"pt-4\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"pl-4\",\n },\n animated: {\n true: \"animate-[tab-fade-in_200ms_ease-out]\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n orientation: \"horizontal\",\n animated: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Tabs */\n/* ------------------------------------------------------------------ */\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n items,\n activeKey: activeKeyProp,\n defaultActiveKey,\n onTabChange,\n variant = \"underline\",\n size = \"md\",\n fullWidth = false,\n align = \"start\",\n animated = true,\n orientation = \"horizontal\",\n className,\n ...rest\n },\n ref,\n ) => {\n const id = useId();\n\n /* ---- State ---- */\n const firstEnabledKey = items.find((t) => !t.disabled)?.key ?? items[0]?.key ?? \"\";\n const [internalKey, setInternalKey] = useState(defaultActiveKey ?? firstEnabledKey);\n const isControlled = activeKeyProp !== undefined;\n const currentKey = isControlled ? activeKeyProp : internalKey;\n\n const handleSelect = useCallback(\n (key: string) => {\n if (!isControlled) setInternalKey(key);\n onTabChange?.(key);\n },\n [isControlled, onTabChange],\n );\n\n /* ---- Keyboard navigation ---- */\n const enabledItems = items.filter((t) => !t.disabled);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const isHorizontal = orientation === \"horizontal\";\n const prevKey = isHorizontal ? \"ArrowLeft\" : \"ArrowUp\";\n const nextKey = isHorizontal ? \"ArrowRight\" : \"ArrowDown\";\n\n if (e.key !== prevKey && e.key !== nextKey && e.key !== \"Home\" && e.key !== \"End\") return;\n e.preventDefault();\n\n const currentIdx = enabledItems.findIndex((t) => t.key === currentKey);\n\n let nextIdx = currentIdx;\n if (e.key === prevKey) {\n nextIdx = currentIdx <= 0 ? enabledItems.length - 1 : currentIdx - 1;\n } else if (e.key === nextKey) {\n nextIdx = currentIdx >= enabledItems.length - 1 ? 0 : currentIdx + 1;\n } else if (e.key === \"Home\") {\n nextIdx = 0;\n } else if (e.key === \"End\") {\n nextIdx = enabledItems.length - 1;\n }\n\n const nextItem = enabledItems[nextIdx];\n if (nextItem) {\n handleSelect(nextItem.key);\n /* Focus the button */\n const el = document.getElementById(`${id}-tab-${nextItem.key}`);\n el?.focus();\n }\n },\n [orientation, enabledItems, currentKey, handleSelect, id],\n );\n\n const activeItem = items.find((t) => t.key === currentKey);\n\n return (\n <div\n ref={ref}\n className={clsx(tabsVariants({ orientation }), className)}\n {...rest}\n >\n {/* Tab list */}\n <div\n role=\"tablist\"\n aria-orientation={orientation}\n className={clsx(tabListVariants({ variant, orientation, fullWidth, align }))}\n onKeyDown={handleKeyDown}\n >\n {items.map((item) => {\n const isActive = item.key === currentKey;\n return (\n <button\n key={item.key}\n id={`${id}-tab-${item.key}`}\n role=\"tab\"\n type=\"button\"\n aria-selected={isActive}\n aria-controls={`${id}-panel-${item.key}`}\n tabIndex={isActive ? 0 : -1}\n disabled={item.disabled}\n className={clsx(\n tabTriggerVariants({\n variant,\n size,\n fullWidth,\n active: isActive,\n disabled: item.disabled ?? false,\n }),\n )}\n onClick={() => {\n if (!item.disabled) handleSelect(item.key);\n }}\n >\n {item.icon}\n {item.label}\n </button>\n );\n })}\n </div>\n\n {/* Tab panel */}\n {activeItem && (\n <div\n key={activeItem.key}\n id={`${id}-panel-${activeItem.key}`}\n role=\"tabpanel\"\n aria-labelledby={`${id}-tab-${activeItem.key}`}\n tabIndex={0}\n className={clsx(tabPanelVariants({ size, orientation, animated }))}\n >\n {activeItem.content}\n </div>\n )}\n </div>\n );\n },\n);\n\nTabs.displayName = \"Tabs\";\n","import { Children, forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type TimelineProps, type TimelineItemProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const timelineVariants = cva(\"relative\", {\n variants: {\n orientation: {\n vertical: \"flex flex-col\",\n horizontal: \"flex flex-row\",\n },\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n size: \"md\",\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Dot sizes */\n/* ------------------------------------------------------------------ */\n\nconst dotSizeMap = {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n} as const;\n\nconst iconDotSizeMap = {\n sm: \"h-6 w-6\",\n md: \"h-8 w-8\",\n lg: \"h-10 w-10\",\n} as const;\n\nconst iconInnerSizeMap = {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Color maps */\n/* ------------------------------------------------------------------ */\n\nconst dotColorMap = {\n primary: \"bg-primary\",\n secondary: \"bg-secondary\",\n green: \"bg-green-500\",\n red: \"bg-red-500\",\n yellow: \"bg-yellow-500\",\n gray: \"bg-gray-400\",\n} as const;\n\nconst outlinedDotColorMap = {\n primary: \"border-primary text-primary\",\n secondary: \"border-secondary text-secondary\",\n green: \"border-green-500 text-green-500\",\n red: \"border-red-500 text-red-500\",\n yellow: \"border-yellow-500 text-yellow-500\",\n gray: \"border-gray-400 text-gray-400\",\n} as const;\n\nconst filledDotColorMap = {\n primary: \"bg-primary text-white\",\n secondary: \"bg-secondary text-white\",\n green: \"bg-green-500 text-white\",\n red: \"bg-red-500 text-white\",\n yellow: \"bg-yellow-500 text-white\",\n gray: \"bg-gray-400 text-white\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Status → color resolution */\n/* ------------------------------------------------------------------ */\n\nfunction resolveColor(\n color: TimelineItemProps[\"color\"],\n status: TimelineItemProps[\"status\"],\n): NonNullable<TimelineItemProps[\"color\"]> {\n if (color) return color;\n switch (status) {\n case \"completed\":\n return \"green\";\n case \"active\":\n return \"primary\";\n case \"pending\":\n return \"gray\";\n default:\n return \"primary\";\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Line style */\n/* ------------------------------------------------------------------ */\n\nconst lineStyleMap = {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Title / description sizes */\n/* ------------------------------------------------------------------ */\n\nconst titleSizeMap = {\n sm: \"text-xs font-medium\",\n md: \"text-sm font-semibold\",\n lg: \"text-base font-semibold\",\n} as const;\n\nconst descSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-sm\",\n} as const;\n\nconst dateSizeMap = {\n sm: \"text-[10px]\",\n md: \"text-xs\",\n lg: \"text-sm\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Checkmark SVG for completed status */\n/* ------------------------------------------------------------------ */\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n className={className}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3.5 8.5L6.5 11.5L12.5 4.5\" />\n </svg>\n);\n\n/* ------------------------------------------------------------------ */\n/* TimelineItem */\n/* ------------------------------------------------------------------ */\n\nexport const TimelineItem = forwardRef<HTMLDivElement, TimelineItemProps & {\n /** @internal */ _variant?: TimelineProps[\"variant\"];\n /** @internal */ _size?: TimelineProps[\"size\"];\n /** @internal */ _orientation?: TimelineProps[\"orientation\"];\n /** @internal */ _lineStyle?: TimelineProps[\"lineStyle\"];\n /** @internal */ _isLast?: boolean;\n /** @internal */ _trailingLine?: boolean;\n /** @internal */ _alternate?: boolean;\n /** @internal */ _index?: number;\n}>(\n (\n {\n title,\n description,\n date,\n icon,\n color: colorProp,\n status,\n className,\n _variant = \"default\",\n _size = \"md\",\n _orientation = \"vertical\",\n _lineStyle = \"solid\",\n _isLast = false,\n _trailingLine = false,\n _alternate = false,\n _index = 0,\n ...rest\n },\n ref,\n ) => {\n const resolvedColor = resolveColor(colorProp, status);\n const showLine = !_isLast || _trailingLine;\n const isRight = _alternate && _index % 2 === 1;\n\n /* ---- Dot rendering ---- */\n const renderDot = () => {\n const hasIcon = icon || status === \"completed\";\n const dotSize = hasIcon ? iconDotSizeMap[_size] : dotSizeMap[_size];\n\n let colorClass: string;\n if (_variant === \"outlined\") {\n colorClass = clsx(\"border-2 bg-white\", outlinedDotColorMap[resolvedColor]);\n } else if (_variant === \"filled\") {\n colorClass = filledDotColorMap[resolvedColor];\n } else {\n /* default */\n colorClass = hasIcon\n ? filledDotColorMap[resolvedColor]\n : dotColorMap[resolvedColor];\n }\n\n return (\n <div\n className={clsx(\n \"z-10 flex shrink-0 items-center justify-center rounded-full\",\n dotSize,\n colorClass,\n status === \"active\" && \"ring-2 ring-offset-2 ring-primary/30\",\n )}\n >\n {status === \"completed\" && !icon && (\n <CheckIcon className={clsx(\"text-white\", iconInnerSizeMap[_size])} />\n )}\n {icon && (\n <span className={clsx(\"flex items-center justify-center\", iconInnerSizeMap[_size])}>\n {icon}\n </span>\n )}\n </div>\n );\n };\n\n /* ---- Vertical layout ---- */\n if (_orientation === \"vertical\") {\n return (\n <div\n ref={ref}\n className={clsx(\n \"relative flex\",\n _alternate ? \"justify-center\" : \"gap-3\",\n className,\n )}\n {...rest}\n >\n {_alternate ? (\n /* Alternating layout */\n <>\n {/* Left content */}\n <div className={clsx(\"flex-1 pb-6\", isRight ? \"text-right pr-4\" : \"invisible pr-4\")}>\n {isRight && (\n <>\n {date && <span className={clsx(\"text-muted\", dateSizeMap[_size])}>{date}</span>}\n <h4 className={clsx(\"text-gray-900\", titleSizeMap[_size])}>{title}</h4>\n {description && <div className={clsx(\"text-muted mt-0.5\", descSizeMap[_size])}>{description}</div>}\n </>\n )}\n </div>\n\n {/* Center dot + line */}\n <div className=\"relative flex flex-col items-center\">\n {renderDot()}\n {showLine && (\n <div\n className={clsx(\n \"flex-1 border-l-2\",\n lineStyleMap[_lineStyle],\n status === \"pending\" ? \"border-gray-200\" : \"border-gray-300\",\n )}\n />\n )}\n </div>\n\n {/* Right content */}\n <div className={clsx(\"flex-1 pb-6\", !isRight ? \"text-left pl-4\" : \"invisible pl-4\")}>\n {!isRight && (\n <>\n {date && <span className={clsx(\"text-muted\", dateSizeMap[_size])}>{date}</span>}\n <h4 className={clsx(\"text-gray-900\", titleSizeMap[_size])}>{title}</h4>\n {description && <div className={clsx(\"text-muted mt-0.5\", descSizeMap[_size])}>{description}</div>}\n </>\n )}\n </div>\n </>\n ) : (\n /* Standard vertical */\n <>\n <div className=\"relative flex flex-col items-center\">\n {renderDot()}\n {showLine && (\n <div\n className={clsx(\n \"flex-1 border-l-2\",\n lineStyleMap[_lineStyle],\n status === \"pending\" ? \"border-gray-200\" : \"border-gray-300\",\n )}\n />\n )}\n </div>\n <div className=\"pb-6 pt-0\">\n {date && (\n <span className={clsx(\"block text-muted\", dateSizeMap[_size])}>\n {date}\n </span>\n )}\n <h4 className={clsx(\"text-gray-900\", titleSizeMap[_size])}>{title}</h4>\n {description && (\n <div className={clsx(\"text-muted mt-0.5\", descSizeMap[_size])}>\n {description}\n </div>\n )}\n </div>\n </>\n )}\n </div>\n );\n }\n\n /* ---- Horizontal layout ---- */\n return (\n <div\n ref={ref}\n className={clsx(\"relative flex flex-col items-center flex-1\", className)}\n {...rest}\n >\n <div className=\"relative flex w-full items-center\">\n {/* Left line */}\n {_index > 0 && (\n <div\n className={clsx(\n \"flex-1 border-t-2\",\n lineStyleMap[_lineStyle],\n \"border-gray-300\",\n )}\n />\n )}\n {_index === 0 && <div className=\"flex-1\" />}\n\n {renderDot()}\n\n {/* Right line */}\n {showLine && (\n <div\n className={clsx(\n \"flex-1 border-t-2\",\n lineStyleMap[_lineStyle],\n status === \"pending\" ? \"border-gray-200\" : \"border-gray-300\",\n )}\n />\n )}\n {!showLine && <div className=\"flex-1\" />}\n </div>\n <div className=\"mt-2 text-center\">\n {date && (\n <span className={clsx(\"block text-muted\", dateSizeMap[_size])}>\n {date}\n </span>\n )}\n <h4 className={clsx(\"text-gray-900\", titleSizeMap[_size])}>{title}</h4>\n {description && (\n <div className={clsx(\"text-muted mt-0.5\", descSizeMap[_size])}>\n {description}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nTimelineItem.displayName = \"TimelineItem\";\n\n/* ------------------------------------------------------------------ */\n/* Timeline */\n/* ------------------------------------------------------------------ */\n\nexport const Timeline = forwardRef<HTMLDivElement, TimelineProps>(\n (\n {\n children,\n variant = \"default\",\n size = \"md\",\n orientation = \"vertical\",\n lineStyle = \"solid\",\n trailingLine = false,\n alternate = false,\n className,\n ...rest\n },\n ref,\n ) => {\n const childArray = Children.toArray(children);\n const count = childArray.length;\n\n return (\n <div\n ref={ref}\n className={clsx(timelineVariants({ orientation, size }), className)}\n {...rest}\n >\n {childArray.map((child, i) => {\n /* Inject internal props */\n if (\n child &&\n typeof child === \"object\" &&\n \"type\" in child &&\n (child.type as { displayName?: string }).displayName === \"TimelineItem\"\n ) {\n return {\n ...child,\n props: {\n ...child.props,\n _variant: variant,\n _size: size,\n _orientation: orientation,\n _lineStyle: lineStyle,\n _isLast: i === count - 1,\n _trailingLine: trailingLine,\n _alternate: alternate,\n _index: i,\n },\n };\n }\n return child;\n })}\n </div>\n );\n },\n);\n\nTimeline.displayName = \"Timeline\";\n","export const colors = {\n primary: \"var(--color-primary)\",\n secondary: \"var(--color-secondary)\",\n muted: \"var(--color-muted)\",\n} as const;\n\nexport type Color = keyof typeof colors;\n","export const spacing = {\n 1: \"var(--space-1)\",\n 2: \"var(--space-2)\",\n 4: \"var(--space-4)\",\n} as const;\n\nexport type Spacing = keyof typeof spacing;\n","export const radius = {\n sm: \"var(--radius-sm)\",\n md: \"var(--radius-md)\",\n lg: \"var(--radius-lg)\",\n} as const;\n\nexport type Radius = keyof typeof radius;\n"],"names":["param","labelSizeMap","dotSizeMap","DefaultIcon","iconSizeMap","gapMap","isHorizontal"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../src/components/Button/Button.tsx","../src/components/Input/Input.tsx","../src/components/Card/Card.tsx","../src/components/Box/Box.tsx","../src/components/Stack/Stack.tsx","../src/components/Modal/Modal.tsx","../src/components/Autocomplete/Autocomplete.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/Switch/Switch.tsx","../src/components/Snackbar/Snackbar.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Accordion/Accordion.tsx","../src/components/Avatar/Avatar.tsx","../src/components/List/List.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Marquee/Marquee.tsx","../src/components/LocaleProvider/LocaleProvider.tsx","../src/components/Stat/Stat.tsx","../src/components/Stat/StatGroup.tsx","../src/components/FormatNumber/useFormatNumber.ts","../src/components/FormatNumber/FormatNumber.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Timeline/Timeline.tsx","../src/tokens/colors.ts","../src/tokens/spacing.ts","../src/tokens/radius.ts"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type ButtonProps } from \"./types\";\n\nexport const buttonVariants = cva(\n [\n \"inline-flex items-center justify-center font-medium transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"rounded-md\",\n ],\n {\n variants: {\n variant: {\n primary: \"bg-primary text-white hover:bg-primary/90\",\n secondary: \"bg-secondary text-white hover:bg-secondary/90\",\n outline:\n \"border border-primary text-primary bg-transparent hover:bg-primary/10\",\n ghost: \"text-primary bg-transparent hover:bg-primary/10\",\n },\n size: {\n sm: \"h-8 px-3 text-sm gap-token-1\",\n md: \"h-10 px-4 text-base gap-token-2\",\n lg: \"h-12 px-6 text-lg gap-token-2\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n }\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, children, ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={clsx(buttonVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import { forwardRef, useId } from \"react\";\nimport { clsx } from \"clsx\";\nimport { type InputProps } from \"./types\";\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, label, error, id: externalId, disabled, ...props }, ref) => {\n const generatedId = useId();\n const inputId = externalId ?? generatedId;\n const errorId = `${inputId}-error`;\n\n return (\n <div className=\"flex flex-col gap-token-1\">\n {label && (\n <label\n htmlFor={inputId}\n className={clsx(\n \"text-sm font-medium\",\n disabled ? \"text-muted/60\" : \"text-muted\"\n )}\n >\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n disabled={disabled}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n className={clsx(\n \"h-10 w-full rounded-md border px-3 text-sm transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"placeholder:text-muted/50\",\n error\n ? \"border-red-500 focus-visible:ring-red-500\"\n : \"border-muted/30\",\n className\n )}\n {...props}\n />\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import { forwardRef } from \"react\";\nimport { clsx } from \"clsx\";\nimport {\n type CardProps,\n type CardHeaderProps,\n type CardContentProps,\n type CardFooterProps,\n} from \"./types\";\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\n \"rounded-lg border border-muted/20 bg-white shadow-sm\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\"flex flex-col gap-token-1 p-token-4\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardContent = forwardRef<HTMLDivElement, CardContentProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\"px-token-4 pb-token-4\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={clsx(\n \"flex items-center border-t border-muted/20 px-token-4 py-token-2\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardFooter.displayName = \"CardFooter\";\n","import { forwardRef, type ElementType, type ReactNode, type Ref } from \"react\";\nimport { clsx } from \"clsx\";\nimport { type BoxComponent } from \"./types\";\n\nexport const Box: BoxComponent = forwardRef(\n <T extends ElementType = \"div\">(\n {\n as,\n className,\n children,\n ...props\n }: {\n as?: T;\n className?: string;\n children?: ReactNode;\n },\n ref: Ref<HTMLElement>\n ) => {\n const Component: ElementType = as ?? \"div\";\n return (\n <Component ref={ref} className={clsx(className)} {...props}>\n {children}\n </Component>\n );\n }\n) as BoxComponent;\n\n(Box as { displayName?: string }).displayName = \"Box\";\n","import { forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type StackProps } from \"./types\";\n\nexport const stackVariants = cva(\"flex\", {\n variants: {\n direction: {\n horizontal: \"flex-row\",\n vertical: \"flex-col\",\n },\n gap: {\n 1: \"gap-token-1\",\n 2: \"gap-token-2\",\n 4: \"gap-token-4\",\n },\n align: {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\",\n },\n justify: {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n },\n wrap: {\n true: \"flex-wrap\",\n false: \"flex-nowrap\",\n },\n },\n defaultVariants: {\n direction: \"vertical\",\n gap: 2,\n align: \"stretch\",\n wrap: false,\n },\n});\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n (\n { className, direction, gap, align, justify, wrap, children, ...props },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={clsx(\n stackVariants({ direction, gap, align, justify, wrap }),\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nStack.displayName = \"Stack\";\n","import { useEffect, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { clsx } from \"clsx\";\nimport { type ModalProps } from \"./types\";\n\nexport const Modal = ({\n open,\n onClose,\n children,\n className,\n closeOnBackdropClick = true,\n closeOnEsc = true,\n ...props\n}: ModalProps) => {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (closeOnEsc && event.key === \"Escape\") {\n onClose();\n }\n },\n [closeOnEsc, onClose]\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n const handleBackdropClick = useCallback(\n (event: React.MouseEvent) => {\n if (closeOnBackdropClick && event.target === event.currentTarget) {\n onClose();\n }\n },\n [closeOnBackdropClick, onClose]\n );\n\n if (!open) return null;\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"]}\n aria-describedby={props[\"aria-describedby\"]}\n >\n {/* Backdrop */}\n <div\n className=\"fixed inset-0 bg-black/50 transition-opacity\"\n aria-hidden=\"true\"\n onClick={handleBackdropClick}\n />\n {/* Content */}\n <div\n className={clsx(\n \"relative z-10 w-full max-w-lg rounded-lg bg-white shadow-md\",\n \"p-token-4\",\n className\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>,\n document.body\n );\n};\n\nModal.displayName = \"Modal\";\n","import {\n forwardRef,\n useState,\n useRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type AutocompleteProps, type AutocompleteOption } from \"./types\";\n\nexport const autocompleteVariants = cva(\n [\n \"h-10 w-full rounded-md border px-3 text-sm transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"placeholder:text-muted/50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-8 text-xs px-2\",\n md: \"h-10 text-sm px-3\",\n lg: \"h-12 text-base px-4\",\n },\n variant: {\n default: \"border-muted/30 focus-visible:ring-primary\",\n error: \"border-red-500 focus-visible:ring-red-500\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n);\n\nexport const Autocomplete = forwardRef<HTMLInputElement, AutocompleteProps>(\n (\n {\n className,\n options,\n value: controlledValue,\n onChange,\n onSelect,\n label,\n error,\n placeholder,\n id: externalId,\n disabled,\n open: controlledOpen,\n onOpenChange,\n size,\n emptyMessage = \"No results found\",\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const inputId = externalId ?? generatedId;\n const listboxId = `${inputId}-listbox`;\n const errorId = `${inputId}-error`;\n\n const [internalValue, setInternalValue] = useState(\"\");\n const [internalOpen, setInternalOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const inputValue = controlledValue ?? internalValue;\n const isOpen = controlledOpen ?? internalOpen;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (onOpenChange) {\n onOpenChange(nextOpen);\n } else {\n setInternalOpen(nextOpen);\n }\n if (!nextOpen) {\n setActiveIndex(-1);\n }\n },\n [onOpenChange]\n );\n\n const filteredOptions = useMemo(\n () =>\n options.filter((option) =>\n option.label.toLowerCase().includes(inputValue.toLowerCase())\n ),\n [options, inputValue]\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const nextValue = e.target.value;\n if (onChange) {\n onChange(nextValue);\n } else {\n setInternalValue(nextValue);\n }\n setOpen(true);\n setActiveIndex(-1);\n },\n [onChange, setOpen]\n );\n\n const handleSelect = useCallback(\n (option: AutocompleteOption) => {\n if (option.disabled) return;\n if (onChange) {\n onChange(option.label);\n } else {\n setInternalValue(option.label);\n }\n onSelect?.(option);\n setOpen(false);\n },\n [onChange, onSelect, setOpen]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!isOpen && (e.key === \"ArrowDown\" || e.key === \"ArrowUp\")) {\n setOpen(true);\n return;\n }\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n setActiveIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0\n );\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n setActiveIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1\n );\n break;\n }\n case \"Enter\": {\n e.preventDefault();\n const activeOption = filteredOptions[activeIndex];\n if (activeOption && !activeOption.disabled) {\n handleSelect(activeOption);\n }\n break;\n }\n case \"Escape\": {\n setOpen(false);\n break;\n }\n }\n },\n [isOpen, filteredOptions, activeIndex, handleSelect, setOpen]\n );\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [setOpen]);\n\n const resolvedVariant = error ? \"error\" as const : \"default\" as const;\n\n return (\n <div ref={containerRef} className=\"relative flex flex-col gap-token-1\">\n {label && (\n <label\n htmlFor={inputId}\n className={clsx(\n \"text-sm font-medium\",\n disabled ? \"text-muted/60\" : \"text-muted\"\n )}\n >\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n activeIndex >= 0 ? `${inputId}-option-${activeIndex}` : undefined\n }\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n disabled={disabled}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => setOpen(true)}\n className={clsx(\n autocompleteVariants({ size, variant: resolvedVariant }),\n className\n )}\n {...props}\n />\n {isOpen && (\n <ul\n id={listboxId}\n role=\"listbox\"\n aria-label={label ?? \"Suggestions\"}\n className={clsx(\n \"absolute top-full z-50 mt-1 max-h-60 w-full overflow-auto\",\n \"rounded-md border border-muted/20 bg-white shadow-md\",\n \"py-1\"\n )}\n >\n {filteredOptions.length === 0 ? (\n <li\n className=\"px-3 py-2 text-sm text-muted\"\n role=\"option\"\n aria-selected={false}\n aria-disabled=\"true\"\n >\n {emptyMessage}\n </li>\n ) : (\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n id={`${inputId}-option-${index}`}\n role=\"option\"\n aria-selected={activeIndex === index}\n aria-disabled={option.disabled ?? false}\n onMouseDown={(e) => {\n e.preventDefault();\n handleSelect(option);\n }}\n onMouseEnter={() => setActiveIndex(index)}\n className={clsx(\n \"flex cursor-pointer items-center gap-token-2 px-3 py-2 text-sm\",\n \"transition-colors\",\n activeIndex === index && \"bg-primary/10 text-primary\",\n option.disabled &&\n \"cursor-not-allowed opacity-50\"\n )}\n >\n {option.logo && (\n <span\n className=\"flex h-5 w-5 shrink-0 items-center justify-center\"\n aria-hidden=\"true\"\n >\n {option.logo}\n </span>\n )}\n <span className=\"truncate\">{option.label}</span>\n </li>\n ))\n )}\n </ul>\n )}\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nAutocomplete.displayName = \"Autocomplete\";\n","import { forwardRef, useId } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type CheckboxProps } from \"./types\";\n\nexport const checkboxVariants = cva(\n [\n \"peer shrink-0 appearance-none rounded-sm border-2 border-muted/30 bg-white transition-colors\",\n \"checked:border-primary checked:bg-primary\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"cursor-pointer\",\n ],\n {\n variants: {\n size: {\n sm: \"h-3.5 w-3.5\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nconst tickSizeMap = {\n sm: \"h-2.5 w-2.5\",\n md: \"h-3 w-3\",\n lg: \"h-3.5 w-3.5\",\n} as const;\n\nconst labelSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n label,\n description,\n error,\n size = \"md\",\n id: externalId,\n disabled,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const checkboxId = externalId ?? generatedId;\n const errorId = `${checkboxId}-error`;\n const descriptionId = `${checkboxId}-description`;\n\n const ariaDescribedBy = [\n error ? errorId : undefined,\n description ? descriptionId : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className=\"flex flex-col gap-token-1\">\n <div className=\"flex items-start gap-token-2\">\n <div className=\"relative inline-flex shrink-0 items-center justify-center\">\n <input\n ref={ref}\n id={checkboxId}\n type=\"checkbox\"\n disabled={disabled}\n aria-invalid={error ? true : undefined}\n aria-describedby={ariaDescribedBy}\n className={clsx(\n checkboxVariants({ size }),\n error && \"border-red-500\",\n className\n )}\n {...props}\n />\n {/* Tick mark — visible only when checked */}\n <svg\n className={clsx(\n \"pointer-events-none absolute hidden text-white peer-checked:block\",\n tickSizeMap[size]\n )}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n {label && (\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={checkboxId}\n className={clsx(\n \"font-medium leading-none\",\n labelSizeMap[size],\n disabled\n ? \"cursor-not-allowed text-muted/60\"\n : \"cursor-pointer text-muted\"\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n className={clsx(\n \"text-muted/70\",\n size === \"sm\" ? \"text-xs\" : \"text-xs\"\n )}\n >\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n","import { forwardRef, useId, useCallback, useState } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type RadioProps, type RadioItemProps } from \"./types\";\n\nexport const radioVariants = cva(\n [\n \"peer shrink-0 appearance-none rounded-full border-2 border-muted/30 bg-white transition-colors\",\n \"checked:border-primary\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"cursor-pointer\",\n ],\n {\n variants: {\n size: {\n sm: \"h-3.5 w-3.5\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nconst dotSizeMap = {\n sm: \"h-1.5 w-1.5\",\n md: \"h-2 w-2\",\n lg: \"h-2.5 w-2.5\",\n} as const;\n\nconst labelSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\n/**\n * Individual radio input — can be used standalone.\n */\nexport const RadioItem = forwardRef<HTMLInputElement, RadioItemProps>(\n (\n { className, label, description, size = \"md\", id: externalId, disabled, ...props },\n ref\n ) => {\n const generatedId = useId();\n const radioId = externalId ?? generatedId;\n const descriptionId = `${radioId}-description`;\n\n return (\n <div className=\"flex items-start gap-token-2\">\n <div className=\"relative inline-flex shrink-0 items-center justify-center\">\n <input\n ref={ref}\n id={radioId}\n type=\"radio\"\n disabled={disabled}\n aria-describedby={description ? descriptionId : undefined}\n className={clsx(radioVariants({ size }), className)}\n {...props}\n />\n {/* Inner dot — visible only when checked */}\n <span\n className={clsx(\n \"pointer-events-none absolute hidden rounded-full bg-primary peer-checked:block\",\n dotSizeMap[size]\n )}\n aria-hidden=\"true\"\n />\n </div>\n {label && (\n <div className=\"flex flex-col gap-0.5\">\n <label\n htmlFor={radioId}\n className={clsx(\n \"font-medium leading-none\",\n labelSizeMap[size],\n disabled\n ? \"cursor-not-allowed text-muted/60\"\n : \"cursor-pointer text-muted\"\n )}\n >\n {label}\n </label>\n {description && (\n <p\n id={descriptionId}\n className=\"text-xs text-muted/70\"\n >\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nRadioItem.displayName = \"RadioItem\";\n\n/**\n * Radio group — renders a list of RadioItem components from options.\n */\nexport const Radio = forwardRef<HTMLFieldSetElement, RadioProps>(\n (\n {\n className,\n label,\n error,\n size = \"md\",\n name,\n value: controlledValue,\n defaultValue,\n onChange,\n options,\n direction = \"vertical\",\n id: externalId,\n disabled,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const groupId = externalId ?? generatedId;\n const errorId = `${groupId}-error`;\n\n const [internalValue, setInternalValue] = useState(defaultValue ?? \"\");\n const selectedValue = controlledValue ?? internalValue;\n\n const handleChange = useCallback(\n (nextValue: string) => {\n if (onChange) {\n onChange(nextValue);\n } else {\n setInternalValue(nextValue);\n }\n },\n [onChange]\n );\n\n return (\n <fieldset\n ref={ref}\n id={groupId}\n role=\"radiogroup\"\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n aria-label={label}\n disabled={disabled}\n className={clsx(\"flex flex-col gap-token-2\", className)}\n {...props}\n >\n {label && (\n <legend\n className={clsx(\n \"text-sm font-medium\",\n disabled ? \"text-muted/60\" : \"text-muted\"\n )}\n >\n {label}\n </legend>\n )}\n <div\n className={clsx(\n \"flex\",\n direction === \"vertical\" ? \"flex-col gap-token-2\" : \"flex-row gap-token-4 flex-wrap\"\n )}\n >\n {options.map((option) => (\n <RadioItem\n key={option.value}\n name={name}\n value={option.value}\n checked={selectedValue === option.value}\n onChange={() => handleChange(option.value)}\n label={option.label}\n description={option.description}\n size={size}\n disabled={disabled ?? option.disabled}\n />\n ))}\n </div>\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </fieldset>\n );\n }\n);\n\nRadio.displayName = \"Radio\";\n","import { forwardRef, useId } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type SwitchProps } from \"./types\";\n\n/**\n * Track — the pill-shaped container the knob sits inside.\n * Grey when off, primary when on.\n */\nexport const switchVariants = cva(\n [\n \"group relative inline-flex shrink-0 cursor-pointer items-center\",\n \"rounded-full transition-colors duration-200 ease-in-out\",\n \"border border-gray-300\",\n \"bg-muted/40\",\n \"has-[:checked]:bg-primary has-[:checked]:border-primary\",\n \"has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-primary has-[:focus-visible]:ring-offset-2\",\n \"has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-5 w-9\",\n md: \"h-6 w-11\",\n lg: \"h-8 w-14\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\n/**\n * Knob — the round toggle lever that slides inside the track.\n * White circle with shadow, moves right when checked.\n */\nconst knobVariants = cva(\n [\n \"pointer-events-none inline-block rounded-full bg-white\",\n \"shadow-[0_2px_4px_rgba(0,0,0,0.2)]\",\n \"ring-0 transition-transform duration-200 ease-in-out\",\n \"peer-checked:translate-x-full\",\n ],\n {\n variants: {\n size: {\n sm: \"h-4 w-4 translate-x-0.5 peer-checked:translate-x-[1.125rem]\",\n md: \"h-5 w-5 translate-x-0.5 peer-checked:translate-x-[1.375rem]\",\n lg: \"h-7 w-7 translate-x-0.5 peer-checked:translate-x-[1.625rem]\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nconst labelSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n (\n {\n className,\n label,\n description,\n error,\n size = \"md\",\n id: externalId,\n disabled,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const switchId = externalId ?? generatedId;\n const errorId = `${switchId}-error`;\n const descriptionId = `${switchId}-description`;\n\n const ariaDescribedBy =\n [\n error ? errorId : undefined,\n description ? descriptionId : undefined,\n ]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className=\"flex flex-col gap-token-1\">\n <div className=\"flex items-center gap-token-2\">\n {/* Clickable track — label wraps input so clicking anywhere toggles */}\n <label\n htmlFor={switchId}\n className={clsx(\n switchVariants({ size }),\n error && \"ring-2 ring-red-500 ring-offset-2\",\n className\n )}\n >\n {/* Hidden native checkbox */}\n <input\n ref={ref}\n id={switchId}\n type=\"checkbox\"\n role=\"switch\"\n disabled={disabled}\n aria-invalid={error ? true : undefined}\n aria-describedby={ariaDescribedBy}\n className=\"peer sr-only\"\n {...props}\n />\n {/* Toggle knob */}\n <span\n className={clsx(knobVariants({ size }))}\n aria-hidden=\"true\"\n />\n </label>\n\n {/* Text label & description */}\n {label && (\n <label htmlFor={switchId} className=\"flex flex-col gap-0.5\">\n <span\n className={clsx(\n \"font-medium leading-none\",\n labelSizeMap[size],\n disabled\n ? \"cursor-not-allowed text-muted/60\"\n : \"cursor-pointer text-muted\"\n )}\n >\n {label}\n </span>\n {description && (\n <p\n id={descriptionId}\n className=\"text-xs text-muted/70\"\n >\n {description}\n </p>\n )}\n </label>\n )}\n </div>\n {error && (\n <p id={errorId} className=\"text-sm text-red-500\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nSwitch.displayName = \"Switch\";\n","import { useEffect, useCallback, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type SnackbarProps, type SnackbarVariant } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA Variants */\n/* ------------------------------------------------------------------ */\n\nexport const snackbarVariants = cva(\n [\n \"pointer-events-auto flex w-full max-w-sm items-start gap-3\",\n \"rounded-lg px-4 py-3 shadow-md\",\n \"text-sm font-medium\",\n \"animate-[snackbar-in_200ms_ease-out]\",\n ],\n {\n variants: {\n variant: {\n info: \"bg-blue-50 text-blue-900 border border-blue-200\",\n success: \"bg-green-50 text-green-900 border border-green-200\",\n warning: \"bg-amber-50 text-amber-900 border border-amber-200\",\n error: \"bg-red-50 text-red-900 border border-red-200\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n }\n);\n\nconst positionVariants = cva(\"fixed z-[9999] flex pointer-events-none p-4\", {\n variants: {\n position: {\n \"top-left\": \"top-0 left-0 justify-start items-start\",\n \"top-center\": \"top-0 left-0 right-0 justify-center items-start\",\n \"top-right\": \"top-0 right-0 justify-end items-start\",\n \"bottom-left\": \"bottom-0 left-0 justify-start items-end\",\n \"bottom-center\": \"bottom-0 left-0 right-0 justify-center items-end\",\n \"bottom-right\": \"bottom-0 right-0 justify-end items-end\",\n },\n },\n defaultVariants: {\n position: \"bottom-center\",\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Default icons per variant */\n/* ------------------------------------------------------------------ */\n\nconst InfoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5 shrink-0 text-blue-500\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-7-4a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM9 9a.75.75 0 0 0 0 1.5h.253a.25.25 0 0 1 .244.304l-.459 2.066A1.75 1.75 0 0 0 10.747 15H11a.75.75 0 0 0 0-1.5h-.253a.25.25 0 0 1-.244-.304l.459-2.066A1.75 1.75 0 0 0 9.253 9H9Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst SuccessIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5 shrink-0 text-green-500\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5 shrink-0 text-amber-500\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495ZM10 6a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 10 6Zm0 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-5 w-5 shrink-0 text-red-500\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst defaultIcons: Record<SnackbarVariant, ReactNode> = {\n info: <InfoIcon />,\n success: <SuccessIcon />,\n warning: <WarningIcon />,\n error: <ErrorIcon />,\n};\n\n/* ------------------------------------------------------------------ */\n/* Close button */\n/* ------------------------------------------------------------------ */\n\nconst CloseButton = ({ onClick }: { onClick: () => void }) => (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label=\"Close\"\n className=\"ml-auto -mr-1 -mt-0.5 inline-flex shrink-0 items-center justify-center rounded-md p-1 opacity-60 transition-opacity hover:opacity-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-current\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-4 w-4\"\n >\n <path d=\"M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z\" />\n </svg>\n </button>\n);\n\n/* ------------------------------------------------------------------ */\n/* Snackbar component */\n/* ------------------------------------------------------------------ */\n\nexport const Snackbar = ({\n open,\n onClose,\n message,\n variant = \"info\",\n position = \"bottom-center\",\n autoCloseDuration = 5000,\n showCloseButton = true,\n action,\n icon,\n className,\n ...props\n}: SnackbarProps) => {\n /* ---- Auto-close timer ---- */\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n useEffect(() => {\n if (!open || autoCloseDuration === false || autoCloseDuration === 0) {\n return;\n }\n\n const timer = setTimeout(handleClose, autoCloseDuration);\n return () => clearTimeout(timer);\n }, [open, autoCloseDuration, handleClose]);\n\n if (!open) return null;\n\n const resolvedIcon = icon === null ? null : icon ?? defaultIcons[variant];\n\n return createPortal(\n <div\n className={positionVariants({ position })}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={props[\"aria-label\"] ?? \"Notification\"}\n >\n <div className={clsx(snackbarVariants({ variant }), className)}>\n {/* Icon */}\n {resolvedIcon && <span className=\"mt-0.5\">{resolvedIcon}</span>}\n\n {/* Message + action */}\n <div className=\"flex flex-1 flex-col gap-1\">\n <span>{message}</span>\n {action && <div className=\"mt-1\">{action}</div>}\n </div>\n\n {/* Close button */}\n {showCloseButton && <CloseButton onClick={handleClose} />}\n </div>\n </div>,\n document.body\n );\n};\n\nSnackbar.displayName = \"Snackbar\";\n","import { forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type SkeletonProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const skeletonVariants = cva(\"shrink-0 bg-gray-200\", {\n variants: {\n variant: {\n text: \"w-full rounded\",\n circular: \"rounded-full\",\n rectangular: \"w-full rounded-none\",\n rounded: \"w-full rounded-md\",\n },\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n animation: {\n pulse: \"animate-skeleton-pulse\",\n wave: \"relative overflow-hidden animate-none\",\n none: \"animate-none\",\n },\n },\n compoundVariants: [\n /* text heights */\n { variant: \"text\", size: \"sm\", class: \"h-3\" },\n { variant: \"text\", size: \"md\", class: \"h-4\" },\n { variant: \"text\", size: \"lg\", class: \"h-5\" },\n\n /* circular sizes */\n { variant: \"circular\", size: \"sm\", class: \"h-8 w-8\" },\n { variant: \"circular\", size: \"md\", class: \"h-10 w-10\" },\n { variant: \"circular\", size: \"lg\", class: \"h-14 w-14\" },\n\n /* rectangular heights */\n { variant: \"rectangular\", size: \"sm\", class: \"h-16\" },\n { variant: \"rectangular\", size: \"md\", class: \"h-24\" },\n { variant: \"rectangular\", size: \"lg\", class: \"h-40\" },\n\n /* rounded heights */\n { variant: \"rounded\", size: \"sm\", class: \"h-16\" },\n { variant: \"rounded\", size: \"md\", class: \"h-24\" },\n { variant: \"rounded\", size: \"lg\", class: \"h-40\" },\n ],\n defaultVariants: {\n variant: \"text\",\n size: \"md\",\n animation: \"pulse\",\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Wave shimmer overlay */\n/* ------------------------------------------------------------------ */\n\nconst WaveOverlay = () => (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0 -translate-x-full animate-skeleton-wave bg-gradient-to-r from-transparent via-white/40 to-transparent\"\n />\n);\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nconst toCss = (value: number | string) =>\n typeof value === \"number\" ? `${value}px` : value;\n\n/* ------------------------------------------------------------------ */\n/* Single skeleton block */\n/* ------------------------------------------------------------------ */\n\nconst SkeletonBlock = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"lines\" | \"lineGap\" | \"lastLineWidth\"> & {\n /** Override width — used internally for lastLineWidth */\n overrideWidth?: number | string;\n }\n>(\n (\n {\n variant = \"text\",\n size = \"md\",\n animation = \"pulse\",\n width,\n height,\n overrideWidth,\n className,\n style,\n ...rest\n },\n ref,\n ) => {\n const resolvedWidth = overrideWidth ?? width;\n\n return (\n <div\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={clsx(skeletonVariants({ variant, size, animation }), className)}\n style={{\n ...(resolvedWidth !== undefined && { width: toCss(resolvedWidth) }),\n ...(height !== undefined && { height: toCss(height) }),\n ...style,\n }}\n {...rest}\n >\n {animation === \"wave\" && <WaveOverlay />}\n </div>\n );\n },\n);\n\nSkeletonBlock.displayName = \"SkeletonBlock\";\n\n/* ------------------------------------------------------------------ */\n/* Main Skeleton component */\n/* ------------------------------------------------------------------ */\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n size = \"md\",\n animation = \"pulse\",\n width,\n height,\n lines = 1,\n lineGap = 8,\n lastLineWidth = \"75%\",\n className,\n style,\n ...rest\n },\n ref,\n ) => {\n /* Non-text variants or a single line — render one block */\n if (variant !== \"text\" || lines <= 1) {\n return (\n <SkeletonBlock\n ref={ref}\n variant={variant}\n size={size}\n animation={animation}\n width={width}\n height={height}\n className={className}\n style={style}\n {...rest}\n />\n );\n }\n\n /* Multi-line text skeleton */\n return (\n <div\n ref={ref}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: `${lineGap}px`,\n ...style,\n }}\n {...rest}\n >\n {Array.from({ length: lines }, (_, i) => {\n const isLast = i === lines - 1;\n return (\n <SkeletonBlock\n key={i}\n variant=\"text\"\n size={size}\n animation={animation}\n height={height}\n overrideWidth={isLast ? lastLineWidth : width}\n />\n );\n })}\n </div>\n );\n },\n);\n\nSkeleton.displayName = \"Skeleton\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useState,\n} from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type AccordionProps, type AccordionItemProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface AccordionCtx {\n openKeys: string[];\n toggle: (key: string) => void;\n variant: NonNullable<AccordionProps[\"variant\"]>;\n size: NonNullable<AccordionProps[\"size\"]>;\n}\n\nconst AccordionContext = createContext<AccordionCtx | null>(null);\n\nconst useAccordion = () => {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error(\"AccordionItem must be used inside an Accordion.\");\n return ctx;\n};\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const accordionVariants = cva(\"w-full\", {\n variants: {\n variant: {\n default: \"divide-y divide-gray-200\",\n bordered: \"divide-y divide-gray-200 rounded-lg border border-gray-200\",\n separated: \"space-y-2\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nconst itemVariants = cva(\"\", {\n variants: {\n variant: {\n default: \"\",\n bordered: \"\",\n separated: \"rounded-lg border border-gray-200\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nconst triggerVariants = cva(\n [\n \"flex w-full items-center justify-between text-left font-medium\",\n \"transition-colors duration-150\",\n \"hover:bg-gray-50\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset\",\n \"disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent\",\n ],\n {\n variants: {\n size: {\n sm: \"px-3 py-2 text-xs\",\n md: \"px-4 py-3 text-sm\",\n lg: \"px-5 py-4 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst contentVariants = cva(\"text-muted\", {\n variants: {\n size: {\n sm: \"px-3 pb-2 text-xs\",\n md: \"px-4 pb-3 text-sm\",\n lg: \"px-5 pb-4 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Chevron icon */\n/* ------------------------------------------------------------------ */\n\nconst ChevronIcon = ({ open, size }: { open: boolean; size: string }) => {\n const sizeMap = { sm: \"h-3.5 w-3.5\", md: \"h-4 w-4\", lg: \"h-5 w-5\" } as const;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className={clsx(\n sizeMap[size as keyof typeof sizeMap] ?? sizeMap.md,\n \"shrink-0 text-muted transition-transform duration-200\",\n open && \"rotate-180\",\n )}\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* AccordionItem */\n/* ------------------------------------------------------------------ */\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ itemKey, trigger, children, disabled = false, className, ...rest }, ref) => {\n const { openKeys, toggle, variant, size } = useAccordion();\n const isOpen = openKeys.includes(itemKey);\n const generatedId = useId();\n const triggerId = `${generatedId}-trigger`;\n const panelId = `${generatedId}-panel`;\n\n return (\n <div\n ref={ref}\n className={clsx(itemVariants({ variant }), className)}\n {...rest}\n >\n {/* Trigger */}\n <button\n id={triggerId}\n type=\"button\"\n role=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={() => !disabled && toggle(itemKey)}\n className={triggerVariants({ size })}\n >\n <span>{trigger}</span>\n <ChevronIcon open={isOpen} size={size} />\n </button>\n\n {/* Content panel */}\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n className={clsx(\n \"grid transition-[grid-template-rows] duration-200 ease-in-out\",\n isOpen ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\",\n )}\n >\n <div className=\"overflow-hidden\">\n {isOpen && (\n <div className={contentVariants({ size })}>\n {children}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nAccordionItem.displayName = \"AccordionItem\";\n\n/* ------------------------------------------------------------------ */\n/* Accordion (root) */\n/* ------------------------------------------------------------------ */\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n (\n {\n children,\n multiple = false,\n defaultOpenKeys = [],\n openKeys: controlledOpenKeys,\n onOpenKeysChange,\n variant = \"default\",\n size = \"md\",\n className,\n ...rest\n },\n ref,\n ) => {\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys);\n\n const isControlled = controlledOpenKeys !== undefined;\n const openKeys = isControlled ? controlledOpenKeys : internalOpenKeys;\n\n const toggle = useCallback(\n (key: string) => {\n const next = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : multiple\n ? [...openKeys, key]\n : [key];\n\n if (!isControlled) setInternalOpenKeys(next);\n onOpenKeysChange?.(next);\n },\n [openKeys, multiple, isControlled, onOpenKeysChange],\n );\n\n return (\n <AccordionContext.Provider value={{ openKeys, toggle, variant, size }}>\n <div\n ref={ref}\n className={clsx(accordionVariants({ variant }), className)}\n {...rest}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n },\n);\n\nAccordion.displayName = \"Accordion\";\n","import { forwardRef, useState, Children, isValidElement, cloneElement } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type AvatarProps, type AvatarGroupProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const avatarVariants = cva(\n [\n \"relative inline-flex shrink-0 items-center justify-center\",\n \"overflow-hidden font-medium select-none\",\n ],\n {\n variants: {\n size: {\n xs: \"h-6 w-6 text-[0.625rem]\",\n sm: \"h-8 w-8 text-xs\",\n md: \"h-10 w-10 text-sm\",\n lg: \"h-14 w-14 text-lg\",\n xl: \"h-20 w-20 text-xl\",\n },\n shape: {\n circle: \"rounded-full\",\n square: \"rounded-md\",\n },\n color: {\n primary: \"bg-primary text-white\",\n secondary: \"bg-secondary text-white\",\n muted: \"bg-muted/20 text-muted\",\n gray: \"bg-gray-200 text-gray-600\",\n },\n },\n defaultVariants: {\n size: \"md\",\n shape: \"circle\",\n color: \"gray\",\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Status indicator */\n/* ------------------------------------------------------------------ */\n\nconst statusColorMap = {\n online: \"bg-green-500\",\n offline: \"bg-gray-400\",\n away: \"bg-amber-400\",\n busy: \"bg-red-500\",\n} as const;\n\nconst statusSizeMap = {\n xs: \"h-1.5 w-1.5 ring-1\",\n sm: \"h-2 w-2 ring-1\",\n md: \"h-2.5 w-2.5 ring-2\",\n lg: \"h-3 w-3 ring-2\",\n xl: \"h-3.5 w-3.5 ring-2\",\n} as const;\n\nconst statusPositionMap = {\n \"top-right\": \"top-0 right-0\",\n \"bottom-right\": \"bottom-0 right-0\",\n} as const;\n\nconst StatusDot = ({\n status,\n size,\n position,\n}: {\n status: NonNullable<AvatarProps[\"status\"]>;\n size: NonNullable<AvatarProps[\"size\"]>;\n position: NonNullable<AvatarProps[\"statusPosition\"]>;\n}) => (\n <span\n aria-label={status}\n className={clsx(\n \"absolute block rounded-full ring-white\",\n statusColorMap[status],\n statusSizeMap[size],\n statusPositionMap[position],\n )}\n />\n);\n\n/* ------------------------------------------------------------------ */\n/* Default fallback icon (user silhouette) */\n/* ------------------------------------------------------------------ */\n\nconst DefaultIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"h-[60%] w-[60%] opacity-60\"\n aria-hidden=\"true\"\n >\n <path d=\"M10 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM3.465 14.493a1.23 1.23 0 0 0 .41 1.412A9.957 9.957 0 0 0 10 18c2.31 0 4.438-.784 6.131-2.1.43-.333.604-.903.408-1.41a7.002 7.002 0 0 0-13.074.003Z\" />\n </svg>\n);\n\n/* ------------------------------------------------------------------ */\n/* Avatar */\n/* ------------------------------------------------------------------ */\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n src,\n alt = \"\",\n fallback,\n fallbackIcon,\n size = \"md\",\n shape = \"circle\",\n color = \"gray\",\n status,\n statusPosition = \"bottom-right\",\n className,\n ...rest\n },\n ref,\n ) => {\n const [imgError, setImgError] = useState(false);\n\n const showImage = src && !imgError;\n\n return (\n <span\n ref={ref}\n role=\"img\"\n aria-label={alt || fallback || \"avatar\"}\n className={clsx(avatarVariants({ size, shape, color }), className)}\n {...rest}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt}\n onError={() => setImgError(true)}\n className=\"h-full w-full object-cover\"\n draggable={false}\n />\n ) : fallback ? (\n <span aria-hidden=\"true\">{fallback}</span>\n ) : fallbackIcon !== undefined ? (\n fallbackIcon\n ) : (\n <DefaultIcon />\n )}\n\n {status && <StatusDot status={status} size={size} position={statusPosition} />}\n </span>\n );\n },\n);\n\nAvatar.displayName = \"Avatar\";\n\n/* ------------------------------------------------------------------ */\n/* AvatarGroup */\n/* ------------------------------------------------------------------ */\n\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ children, max, size, className, ...rest }, ref) => {\n const childArray = Children.toArray(children).filter(isValidElement);\n const total = childArray.length;\n const visible = max && max < total ? childArray.slice(0, max) : childArray;\n const overflow = max && max < total ? total - max : 0;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"Avatar group\"\n className={clsx(\"flex -space-x-2\", className)}\n {...rest}\n >\n {visible.map((child, i) => {\n if (!isValidElement<AvatarProps>(child)) return child;\n return cloneElement(child, {\n key: i,\n ...(size && { size }),\n className: clsx(\n \"ring-2 ring-white\",\n (child.props as AvatarProps).className,\n ),\n } as Partial<AvatarProps>);\n })}\n\n {overflow > 0 && (\n <span\n className={clsx(\n avatarVariants({ size: size ?? \"md\", shape: \"circle\", color: \"gray\" }),\n \"ring-2 ring-white font-semibold\",\n )}\n aria-label={`${overflow} more`}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n },\n);\n\nAvatarGroup.displayName = \"AvatarGroup\";\n","import { createContext, forwardRef, useContext } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport {\n type ListProps,\n type ListItemProps,\n type ListSubheaderProps,\n} from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* Context — share variant + size from List → ListItem */\n/* ------------------------------------------------------------------ */\n\ninterface ListCtx {\n variant: NonNullable<ListProps[\"variant\"]>;\n size: NonNullable<ListProps[\"size\"]>;\n interactive: boolean;\n}\n\nconst ListContext = createContext<ListCtx>({\n variant: \"plain\",\n size: \"md\",\n interactive: false,\n});\n\nconst useList = () => useContext(ListContext);\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const listVariants = cva(\"w-full list-none p-0 m-0\", {\n variants: {\n variant: {\n plain: \"\",\n bordered: \"rounded-lg border border-gray-200\",\n divided: \"divide-y divide-gray-200\",\n striped: \"\",\n },\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n },\n compoundVariants: [\n { variant: \"bordered\", class: \"divide-y divide-gray-200\" },\n ],\n defaultVariants: {\n variant: \"plain\",\n size: \"md\",\n },\n});\n\nconst listItemVariants = cva(\n \"flex items-center gap-3 transition-colors duration-150\",\n {\n variants: {\n size: {\n sm: \"px-3 py-1.5 text-xs\",\n md: \"px-4 py-2.5 text-sm\",\n lg: \"px-5 py-3.5 text-base\",\n },\n interactive: {\n true: \"cursor-pointer hover:bg-gray-50 focus-visible:outline-none focus-visible:bg-gray-100\",\n false: \"\",\n },\n selected: {\n true: \"bg-primary/5 text-primary\",\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n striped: {\n true: \"even:bg-gray-50\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n interactive: false,\n selected: false,\n disabled: false,\n striped: false,\n },\n },\n);\n\nconst subheaderVariants = cva(\n \"font-semibold uppercase tracking-wider text-muted\",\n {\n variants: {\n size: {\n sm: \"px-3 py-1 text-[0.625rem]\",\n md: \"px-4 py-1.5 text-xs\",\n lg: \"px-5 py-2 text-xs\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* ListSubheader */\n/* ------------------------------------------------------------------ */\n\nexport const ListSubheader = ({ children, className }: ListSubheaderProps) => {\n const { size } = useList();\n\n return (\n <li\n role=\"presentation\"\n className={clsx(subheaderVariants({ size }), className)}\n >\n {children}\n </li>\n );\n};\n\nListSubheader.displayName = \"ListSubheader\";\n\n/* ------------------------------------------------------------------ */\n/* ListItem */\n/* ------------------------------------------------------------------ */\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(\n (\n {\n leading,\n trailing,\n secondary,\n selected = false,\n disabled = false,\n onClick,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const { size, interactive: listInteractive, variant } = useList();\n const isInteractive = listInteractive || !!onClick;\n\n return (\n <li\n ref={ref}\n role={isInteractive ? \"option\" : undefined}\n aria-selected={isInteractive ? selected : undefined}\n aria-disabled={disabled || undefined}\n tabIndex={isInteractive && !disabled ? 0 : undefined}\n onClick={disabled ? undefined : onClick}\n onKeyDown={\n isInteractive && !disabled\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLLIElement>);\n }\n }\n : undefined\n }\n className={clsx(\n listItemVariants({\n size,\n interactive: isInteractive,\n selected,\n disabled,\n striped: variant === \"striped\",\n }),\n className,\n )}\n {...rest}\n >\n {/* Leading */}\n {leading && (\n <span className=\"flex shrink-0 items-center text-muted\">\n {leading}\n </span>\n )}\n\n {/* Content */}\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate\">{children}</span>\n {secondary && (\n <span className=\"truncate text-muted\" style={{ fontSize: \"0.85em\" }}>\n {secondary}\n </span>\n )}\n </span>\n\n {/* Trailing */}\n {trailing && (\n <span className=\"flex shrink-0 items-center text-muted\">\n {trailing}\n </span>\n )}\n </li>\n );\n },\n);\n\nListItem.displayName = \"ListItem\";\n\n/* ------------------------------------------------------------------ */\n/* List (root) */\n/* ------------------------------------------------------------------ */\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(\n (\n {\n variant = \"plain\",\n size = \"md\",\n ordered = false,\n interactive = false,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const sharedProps = {\n role: interactive ? (\"listbox\" as const) : (\"list\" as const),\n className: clsx(listVariants({ variant, size }), className),\n };\n\n return (\n <ListContext.Provider value={{ variant, size, interactive }}>\n {ordered ? (\n <ol ref={ref as unknown as React.Ref<HTMLOListElement>} {...sharedProps} {...rest}>\n {children}\n </ol>\n ) : (\n <ul ref={ref} {...sharedProps} {...rest}>\n {children}\n </ul>\n )}\n </ListContext.Provider>\n );\n },\n);\n\nList.displayName = \"List\";\n","import { forwardRef } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type EmptyStateProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const emptyStateVariants = cva(\"w-full\", {\n variants: {\n size: {\n sm: \"py-6 px-4\",\n md: \"py-10 px-6\",\n lg: \"py-16 px-8\",\n },\n layout: {\n vertical: \"flex flex-col items-center text-center\",\n horizontal: \"flex items-center text-left gap-6\",\n },\n bordered: {\n true: \"rounded-lg border border-gray-200\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n layout: \"vertical\",\n bordered: false,\n },\n});\n\nconst iconContainerVariants = cva(\n \"flex shrink-0 items-center justify-center rounded-full bg-gray-100 text-muted\",\n {\n variants: {\n size: {\n sm: \"h-10 w-10\",\n md: \"h-14 w-14\",\n lg: \"h-20 w-20\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst iconSizeMap = {\n sm: \"h-5 w-5\",\n md: \"h-7 w-7\",\n lg: \"h-10 w-10\",\n} as const;\n\nconst titleVariants = cva(\"font-semibold text-gray-900\", {\n variants: {\n size: {\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nconst descriptionVariants = cva(\"text-muted\", {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nconst gapMap = {\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-4\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Default icon (empty box illustration) */\n/* ------------------------------------------------------------------ */\n\nconst DefaultIcon = ({ size }: { size: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={iconSizeMap[size as keyof typeof iconSizeMap] ?? iconSizeMap.md}\n aria-hidden=\"true\"\n >\n <path d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" />\n </svg>\n);\n\n/* ------------------------------------------------------------------ */\n/* EmptyState */\n/* ------------------------------------------------------------------ */\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n {\n icon,\n image,\n title,\n description,\n primaryAction,\n secondaryAction,\n size = \"md\",\n layout = \"vertical\",\n bordered = false,\n className,\n ...rest\n },\n ref,\n ) => {\n const isVertical = layout === \"vertical\";\n\n const resolvedIcon = image ? null : icon === undefined ? <DefaultIcon size={size} /> : icon;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n className={clsx(emptyStateVariants({ size, layout, bordered }), className)}\n {...rest}\n >\n {/* Image (full-width, vertical only) */}\n {image && isVertical && (\n <div className=\"mb-4 flex justify-center\">{image}</div>\n )}\n\n {/* Icon circle */}\n {resolvedIcon && (\n <div className={clsx(iconContainerVariants({ size }), !isVertical && \"shrink-0\")}>\n {resolvedIcon}\n </div>\n )}\n\n {/* Horizontal: image on the left */}\n {image && !isVertical && (\n <div className=\"shrink-0\">{image}</div>\n )}\n\n {/* Text + actions */}\n <div className={clsx(\"flex flex-col\", isVertical ? \"items-center\" : \"items-start\", gapMap[size])}>\n {/* Title */}\n <h3 className={clsx(titleVariants({ size }), isVertical && \"mt-3\")}>\n {title}\n </h3>\n\n {/* Description */}\n {description && (\n <p className={clsx(descriptionVariants({ size }), \"max-w-sm\")}>\n {description}\n </p>\n )}\n\n {/* Actions */}\n {(primaryAction || secondaryAction) && (\n <div className={clsx(\"flex items-center gap-3\", isVertical && \"mt-1\")}>\n {primaryAction}\n {secondaryAction}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nEmptyState.displayName = \"EmptyState\";\n","import { forwardRef, useMemo } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type MarqueeProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const marqueeVariants = cva(\"relative overflow-hidden\", {\n variants: {\n direction: {\n left: \"\",\n right: \"\",\n up: \"\",\n down: \"\",\n },\n fade: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n direction: \"left\",\n fade: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Speed → duration map (seconds) */\n/* ------------------------------------------------------------------ */\n\nconst speedMap = {\n slow: 40,\n normal: 25,\n fast: 12,\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Gap map (Tailwind gap values) */\n/* ------------------------------------------------------------------ */\n\nconst gapMap = {\n \"2\": \"gap-2\",\n \"4\": \"gap-4\",\n \"6\": \"gap-6\",\n \"8\": \"gap-8\",\n \"12\": \"gap-12\",\n \"16\": \"gap-16\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Direction helpers */\n/* ------------------------------------------------------------------ */\n\nconst isHorizontal = (dir: string) => dir === \"left\" || dir === \"right\";\n\nconst getAnimationName = (dir: string) => {\n if (dir === \"left\") return \"marquee-left\";\n if (dir === \"right\") return \"marquee-right\";\n if (dir === \"up\") return \"marquee-up\";\n return \"marquee-down\";\n};\n\nconst getFadeMask = (dir: string, fadeWidth: string) => {\n if (isHorizontal(dir)) {\n return `linear-gradient(to right, transparent 0%, black ${fadeWidth}, black calc(100% - ${fadeWidth}), transparent 100%)`;\n }\n return `linear-gradient(to bottom, transparent 0%, black ${fadeWidth}, black calc(100% - ${fadeWidth}), transparent 100%)`;\n};\n\n/* ------------------------------------------------------------------ */\n/* Marquee */\n/* ------------------------------------------------------------------ */\n\nexport const Marquee = forwardRef<HTMLDivElement, MarqueeProps>(\n (\n {\n children,\n direction = \"left\",\n speed = \"normal\",\n duration,\n pauseOnHover = false,\n repeat = 4,\n gap = \"8\",\n fade = true,\n fadeWidth = \"4rem\",\n playing = true,\n className,\n ...rest\n },\n ref,\n ) => {\n const resolvedDuration = duration ?? speedMap[speed];\n const horizontal = isHorizontal(direction);\n const animationName = getAnimationName(direction);\n\n const copies = useMemo(\n () => Array.from({ length: repeat }, (_, i) => i),\n [repeat],\n );\n\n const trackStyle: React.CSSProperties = {\n animationName,\n animationDuration: `${resolvedDuration}s`,\n animationTimingFunction: \"linear\",\n animationIterationCount: \"infinite\",\n animationPlayState: playing ? \"running\" : \"paused\",\n };\n\n const maskStyle: React.CSSProperties = fade\n ? { WebkitMaskImage: getFadeMask(direction, fadeWidth), maskImage: getFadeMask(direction, fadeWidth) }\n : {};\n\n return (\n <div\n ref={ref}\n className={clsx(marqueeVariants({ direction, fade }), className)}\n style={maskStyle}\n aria-live=\"off\"\n {...rest}\n >\n <div\n className={clsx(\n \"flex min-w-full\",\n horizontal ? \"flex-row\" : \"flex-col\",\n gapMap[gap],\n pauseOnHover && \"hover:[animation-play-state:paused]\",\n /* children inside also need to pause */\n pauseOnHover && \"[&>*]:hover:[animation-play-state:paused]\",\n )}\n style={trackStyle}\n >\n {copies.map((i) => (\n <div\n key={i}\n aria-hidden={i > 0 || undefined}\n className={clsx(\n \"flex shrink-0 items-center justify-around\",\n horizontal ? \"flex-row\" : \"flex-col\",\n gapMap[gap],\n )}\n >\n {children}\n </div>\n ))}\n </div>\n </div>\n );\n },\n);\n\nMarquee.displayName = \"Marquee\";\n","import { createContext, useContext, useMemo } from \"react\";\nimport { type LocaleContextValue, type LocaleProviderProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* Defaults */\n/* ------------------------------------------------------------------ */\n\nconst defaultLocaleContext: LocaleContextValue = {\n locale: \"en-US\",\n currency: \"USD\",\n direction: \"ltr\",\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n};\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\nconst LocaleContext = createContext<LocaleContextValue>(defaultLocaleContext);\n\n/* ------------------------------------------------------------------ */\n/* Provider */\n/* ------------------------------------------------------------------ */\n\nexport function LocaleProvider({\n locale,\n currency,\n direction,\n timezone,\n children,\n}: LocaleProviderProps) {\n /* Read the parent context so nested providers merge correctly */\n const parent = useContext(LocaleContext);\n\n const value = useMemo<LocaleContextValue>(\n () => ({\n locale: locale ?? parent.locale,\n currency: currency ?? parent.currency,\n direction: direction ?? parent.direction,\n timezone: timezone ?? parent.timezone,\n }),\n [locale, currency, direction, timezone, parent],\n );\n\n return (\n <LocaleContext.Provider value={value}>\n {children}\n </LocaleContext.Provider>\n );\n}\n\nLocaleProvider.displayName = \"LocaleProvider\";\n\n/* ------------------------------------------------------------------ */\n/* Hook */\n/* ------------------------------------------------------------------ */\n\n/**\n * Read the current locale context.\n *\n * - Inside a `<LocaleProvider>`: returns the provider's values.\n * - Outside any provider: returns sensible defaults (`en-US`, `USD`, `ltr`).\n */\nexport function useLocale(): LocaleContextValue {\n return useContext(LocaleContext);\n}\n\n/**\n * Return only the locale string.\n * Convenience shortcut for `useLocale().locale`.\n */\nexport function useLocaleString(): string {\n return useContext(LocaleContext).locale;\n}\n\n/**\n * Return only the currency code.\n * Convenience shortcut for `useLocale().currency`.\n */\nexport function useCurrency(): string {\n return useContext(LocaleContext).currency;\n}\n\n/**\n * Return only the text direction.\n * Convenience shortcut for `useLocale().direction`.\n */\nexport function useDirection(): \"ltr\" | \"rtl\" {\n return useContext(LocaleContext).direction;\n}\n\n/**\n * Return only the timezone.\n * Convenience shortcut for `useLocale().timezone`.\n */\nexport function useTimezone(): string {\n return useContext(LocaleContext).timezone;\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type StatProps } from \"./types\";\nimport { useLocale } from \"../LocaleProvider\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const statVariants = cva(\"flex flex-col\", {\n variants: {\n variant: {\n default: \"\",\n bordered: \"rounded-lg border border-gray-200 bg-white\",\n filled: \"rounded-lg bg-gray-50\",\n minimal: \"\",\n },\n size: {\n sm: \"gap-0.5\",\n md: \"gap-1\",\n lg: \"gap-1.5\",\n },\n },\n compoundVariants: [\n { variant: \"bordered\", size: \"sm\", class: \"p-3\" },\n { variant: \"bordered\", size: \"md\", class: \"p-4\" },\n { variant: \"bordered\", size: \"lg\", class: \"p-6\" },\n { variant: \"filled\", size: \"sm\", class: \"p-3\" },\n { variant: \"filled\", size: \"md\", class: \"p-4\" },\n { variant: \"filled\", size: \"lg\", class: \"p-6\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nconst valueSizeMap = {\n sm: \"text-xl font-bold\",\n md: \"text-3xl font-bold\",\n lg: \"text-4xl font-bold\",\n} as const;\n\nconst labelSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\nconst iconSizeMap = {\n sm: \"h-8 w-8\",\n md: \"h-10 w-10\",\n lg: \"h-12 w-12\",\n} as const;\n\nconst trendColors = {\n up: \"text-green-600\",\n down: \"text-red-600\",\n neutral: \"text-gray-500\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Trend arrow SVGs */\n/* ------------------------------------------------------------------ */\n\nconst TrendArrow = ({ trend, className }: { trend: \"up\" | \"down\" | \"neutral\"; className?: string }) => {\n if (trend === \"up\") {\n return (\n <svg\n className={clsx(\"h-3.5 w-3.5\", className)}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M8 12V4M4 7l4-3 4 3\" />\n </svg>\n );\n }\n\n if (trend === \"down\") {\n return (\n <svg\n className={clsx(\"h-3.5 w-3.5\", className)}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M8 4v8M4 9l4 3 4-3\" />\n </svg>\n );\n }\n\n return (\n <svg\n className={clsx(\"h-3.5 w-3.5\", className)}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 8h10\" />\n </svg>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* useAnimatedCounter hook */\n/* ------------------------------------------------------------------ */\n\nfunction easeOutQuart(t: number): number {\n return 1 - Math.pow(1 - t, 4);\n}\n\nfunction useAnimatedCounter(\n target: number,\n duration: number,\n enabled: boolean,\n decimals: number,\n) {\n const [value, setValue] = useState(enabled ? 0 : target);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const hasAnimated = useRef(false);\n\n const animate = useCallback(() => {\n if (hasAnimated.current) return;\n hasAnimated.current = true;\n\n const start = performance.now();\n\n const step = (now: number) => {\n const elapsed = now - start;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeOutQuart(progress);\n const current = eased * target;\n\n setValue(Number(current.toFixed(decimals)));\n\n if (progress < 1) {\n requestAnimationFrame(step);\n } else {\n setValue(target);\n }\n };\n\n requestAnimationFrame(step);\n }, [target, duration, decimals]);\n\n useEffect(() => {\n if (!enabled) {\n setValue(target);\n return;\n }\n\n const node = containerRef.current;\n if (!node) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry?.isIntersecting) {\n animate();\n observer.disconnect();\n }\n },\n { threshold: 0.3 },\n );\n\n observer.observe(node);\n return () => observer.disconnect();\n }, [enabled, animate, target]);\n\n return { value, containerRef };\n}\n\n/* ------------------------------------------------------------------ */\n/* Number formatter */\n/* ------------------------------------------------------------------ */\n\nfunction formatValue(\n value: number,\n format: StatProps[\"format\"],\n locale: string,\n decimals: number,\n currency: string,\n): string {\n switch (format) {\n case \"currency\":\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value);\n\n case \"percent\":\n return new Intl.NumberFormat(locale, {\n style: \"percent\",\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value / 100);\n\n case \"compact\":\n return new Intl.NumberFormat(locale, {\n notation: \"compact\",\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value);\n\n default:\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }).format(value);\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Stat */\n/* ------------------------------------------------------------------ */\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(\n (\n {\n value,\n label,\n prefix,\n suffix,\n format = \"number\",\n locale: localeProp,\n decimals = 0,\n animationDuration = 1500,\n animated = true,\n trend,\n trendValue,\n icon,\n variant = \"default\",\n size = \"md\",\n className,\n ...rest\n },\n ref,\n ) => {\n const ctx = useLocale();\n const locale = localeProp ?? ctx.locale;\n const resolvedCurrency = ctx.currency;\n\n const { value: animatedValue, containerRef } = useAnimatedCounter(\n value,\n animationDuration,\n animated,\n decimals,\n );\n\n const formattedValue = formatValue(animatedValue, format, locale, decimals, resolvedCurrency);\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={clsx(statVariants({ variant, size }), className)}\n {...rest}\n >\n {/* Icon */}\n {icon && (\n <div\n className={clsx(\n \"flex shrink-0 items-center justify-center rounded-lg bg-gray-100 text-muted mb-2\",\n iconSizeMap[size],\n )}\n >\n {icon}\n </div>\n )}\n\n {/* Label (above value for some layouts) */}\n <span className={clsx(\"text-muted\", labelSizeMap[size])}>\n {label}\n </span>\n\n {/* Value row */}\n <div className=\"flex items-baseline gap-1\">\n {prefix && format !== \"currency\" && (\n <span className={clsx(\"text-gray-900\", valueSizeMap[size])}>\n {prefix}\n </span>\n )}\n <span className={clsx(\"tabular-nums text-gray-900\", valueSizeMap[size])}>\n {formattedValue}\n </span>\n {suffix && (\n <span className={clsx(\"text-muted\", labelSizeMap[size])}>\n {suffix}\n </span>\n )}\n </div>\n\n {/* Trend indicator */}\n {trend && (\n <div\n className={clsx(\n \"flex items-center gap-1 text-xs font-medium\",\n trendColors[trend],\n )}\n >\n <TrendArrow trend={trend} />\n {trendValue && <span>{trendValue}</span>}\n </div>\n )}\n </div>\n );\n },\n);\n\nStat.displayName = \"Stat\";\n","import { forwardRef, Children } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type StatGroupProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const statGroupVariants = cva(\"grid w-full\", {\n variants: {\n columns: {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n 6: \"grid-cols-6\",\n },\n gap: {\n \"2\": \"gap-2\",\n \"4\": \"gap-4\",\n \"6\": \"gap-6\",\n \"8\": \"gap-8\",\n },\n dividers: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n gap: \"6\",\n dividers: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* StatGroup */\n/* ------------------------------------------------------------------ */\n\nexport const StatGroup = forwardRef<HTMLDivElement, StatGroupProps>(\n (\n {\n columns,\n gap = \"6\",\n dividers = false,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const childCount = Children.count(children);\n const resolvedColumns = columns ?? (childCount <= 6 ? (childCount as 1 | 2 | 3 | 4 | 5 | 6) : 4);\n\n if (!dividers) {\n return (\n <div\n ref={ref}\n className={clsx(\n statGroupVariants({ columns: resolvedColumns, gap, dividers: false }),\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n }\n\n /* With dividers — wrap each child with a right border */\n const childArray = Children.toArray(children);\n\n return (\n <div\n ref={ref}\n className={clsx(\n statGroupVariants({ columns: resolvedColumns, gap, dividers: true }),\n className,\n )}\n {...rest}\n >\n {childArray.map((child, i) => (\n <div\n key={i}\n className={clsx(\n i < childArray.length - 1 && \"border-r border-gray-200 pr-4\",\n )}\n >\n {child}\n </div>\n ))}\n </div>\n );\n },\n);\n\nStatGroup.displayName = \"StatGroup\";\n","import { useCallback, useMemo } from \"react\";\nimport {\n type NumberFormatStyle,\n type UseFormatNumberOptions,\n} from \"./types\";\nimport { useLocale } from \"../LocaleProvider\";\n\n/* ------------------------------------------------------------------ */\n/* Ordinal suffixes (English) */\n/* ------------------------------------------------------------------ */\n\nfunction ordinalSuffix(n: number): string {\n const abs = Math.abs(Math.round(n));\n const mod100 = abs % 100;\n if (mod100 >= 11 && mod100 <= 13) return `${n}th`;\n switch (abs % 10) {\n case 1:\n return `${n}st`;\n case 2:\n return `${n}nd`;\n case 3:\n return `${n}rd`;\n default:\n return `${n}th`;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* File-size formatting */\n/* ------------------------------------------------------------------ */\n\nconst FILE_SIZE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"] as const;\n\nfunction formatFileSize(bytes: number, decimals: number): string {\n if (bytes === 0) return \"0 B\";\n const sign = bytes < 0 ? \"-\" : \"\";\n const abs = Math.abs(bytes);\n const k = 1024;\n const i = Math.min(\n Math.floor(Math.log(abs) / Math.log(k)),\n FILE_SIZE_UNITS.length - 1,\n );\n const val = abs / Math.pow(k, i);\n return `${sign}${val.toFixed(decimals)} ${FILE_SIZE_UNITS[i]}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Duration formatting */\n/* ------------------------------------------------------------------ */\n\nfunction formatDuration(seconds: number): string {\n const sign = seconds < 0 ? \"-\" : \"\";\n let abs = Math.abs(Math.round(seconds));\n\n const d = Math.floor(abs / 86400);\n abs %= 86400;\n const h = Math.floor(abs / 3600);\n abs %= 3600;\n const m = Math.floor(abs / 60);\n const s = abs % 60;\n\n const parts: string[] = [];\n if (d > 0) parts.push(`${d}d`);\n if (h > 0) parts.push(`${h}h`);\n if (m > 0) parts.push(`${m}m`);\n if (s > 0 || parts.length === 0) parts.push(`${s}s`);\n\n return `${sign}${parts.join(\" \")}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Core formatter */\n/* ------------------------------------------------------------------ */\n\nfunction coreFormat(\n value: number,\n format: NumberFormatStyle,\n locale: string,\n options: {\n currency?: string;\n currencyDisplay?: \"symbol\" | \"narrowSymbol\" | \"code\" | \"name\";\n notation?: Intl.NumberFormatOptions[\"notation\"];\n signDisplay?: Intl.NumberFormatOptions[\"signDisplay\"];\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n unit?: string;\n unitDisplay?: \"short\" | \"long\" | \"narrow\";\n },\n): string {\n switch (format) {\n case \"ordinal\":\n return ordinalSuffix(value);\n\n case \"filesize\":\n return formatFileSize(value, options.maximumFractionDigits ?? 1);\n\n case \"duration\":\n return formatDuration(value);\n\n case \"accounting\":\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency: options.currency ?? \"USD\",\n currencyDisplay: options.currencyDisplay ?? \"symbol\",\n currencySign: \"accounting\",\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n\n case \"currency\":\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency: options.currency ?? \"USD\",\n currencyDisplay: options.currencyDisplay ?? \"symbol\",\n notation: options.notation,\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n\n case \"percent\":\n return new Intl.NumberFormat(locale, {\n style: \"percent\",\n notation: options.notation,\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value / 100);\n\n case \"compact\":\n return new Intl.NumberFormat(locale, {\n notation: \"compact\",\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n\n case \"unit\":\n return new Intl.NumberFormat(locale, {\n style: \"unit\",\n unit: options.unit ?? \"kilogram\",\n unitDisplay: options.unitDisplay ?? \"short\",\n notation: options.notation,\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n\n case \"decimal\":\n case \"number\":\n default:\n return new Intl.NumberFormat(locale, {\n style: \"decimal\",\n notation: options.notation,\n signDisplay: options.signDisplay,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n }).format(value);\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* useFormatNumber hook */\n/* ------------------------------------------------------------------ */\n\nexport function useFormatNumber(opts: UseFormatNumberOptions = {}) {\n const ctx = useLocale();\n const {\n format = \"number\",\n locale: localeProp,\n currency: currencyProp,\n currencyDisplay,\n notation,\n signDisplay,\n minimumFractionDigits,\n maximumFractionDigits,\n decimals,\n unit,\n unitDisplay,\n prefix = \"\",\n suffix = \"\",\n } = opts;\n\n const locale = localeProp ?? ctx.locale;\n const currency = currencyProp ?? ctx.currency;\n\n const minFrac = decimals ?? minimumFractionDigits;\n const maxFrac = decimals ?? maximumFractionDigits;\n\n const formatFn = useCallback(\n (value: number) => {\n const formatted = coreFormat(value, format, locale, {\n currency,\n currencyDisplay,\n notation,\n signDisplay,\n minimumFractionDigits: minFrac,\n maximumFractionDigits: maxFrac,\n unit,\n unitDisplay,\n });\n\n return `${prefix}${formatted}${suffix}`;\n },\n [\n format,\n locale,\n currency,\n currencyDisplay,\n notation,\n signDisplay,\n minFrac,\n maxFrac,\n unit,\n unitDisplay,\n prefix,\n suffix,\n ],\n );\n\n return useMemo(() => ({ format: formatFn }), [formatFn]);\n}\n\n/* Re-export coreFormat for the component */\nexport { coreFormat };\n","import { clsx } from \"clsx\";\nimport { type FormatNumberProps } from \"./types\";\nimport { coreFormat } from \"./useFormatNumber\";\nimport { useLocale } from \"../LocaleProvider\";\n\n/* ------------------------------------------------------------------ */\n/* FormatNumber */\n/* ------------------------------------------------------------------ */\n\nexport function FormatNumber({\n value,\n format = \"number\",\n locale: localeProp,\n currency: currencyProp,\n currencyDisplay = \"symbol\",\n notation,\n signDisplay,\n minimumFractionDigits,\n maximumFractionDigits,\n decimals,\n unit,\n unitDisplay,\n prefix = \"\",\n suffix = \"\",\n children,\n className,\n as: Tag = \"span\",\n ...rest\n}: FormatNumberProps) {\n const ctx = useLocale();\n const locale = localeProp ?? ctx.locale;\n const currency = currencyProp ?? ctx.currency;\n\n const minFrac = decimals ?? minimumFractionDigits;\n const maxFrac = decimals ?? maximumFractionDigits;\n\n const formatted = coreFormat(value, format, locale, {\n currency,\n currencyDisplay,\n notation,\n signDisplay,\n minimumFractionDigits: minFrac,\n maximumFractionDigits: maxFrac,\n unit,\n unitDisplay,\n });\n\n const display = `${prefix}${formatted}${suffix}`;\n\n /* Render prop */\n if (children) {\n return <>{children(display)}</>;\n }\n\n return (\n <Tag\n className={clsx(\"tabular-nums\", className)}\n {...rest}\n >\n {display}\n </Tag>\n );\n}\n\nFormatNumber.displayName = \"FormatNumber\";\n","import { forwardRef, useCallback, useId, useState } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type TabsProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const tabsVariants = cva(\"\", {\n variants: {\n orientation: {\n horizontal: \"flex flex-col\",\n vertical: \"flex flex-row\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n});\n\nconst tabListVariants = cva(\"flex\", {\n variants: {\n variant: {\n underline: \"border-b border-gray-200\",\n pills: \"gap-1\",\n bordered: \"border-b border-gray-200\",\n lifted: \"border-b border-gray-200\",\n },\n orientation: {\n horizontal: \"flex-row\",\n vertical: \"flex-col border-b-0 border-r border-gray-200\",\n },\n fullWidth: {\n true: \"\",\n false: \"\",\n },\n align: {\n start: \"\",\n center: \"\",\n end: \"\",\n },\n },\n compoundVariants: [\n { orientation: \"horizontal\", fullWidth: false, align: \"start\", class: \"justify-start\" },\n { orientation: \"horizontal\", fullWidth: false, align: \"center\", class: \"justify-center\" },\n { orientation: \"horizontal\", fullWidth: false, align: \"end\", class: \"justify-end\" },\n { orientation: \"horizontal\", fullWidth: true, class: \"\" },\n ],\n defaultVariants: {\n variant: \"underline\",\n orientation: \"horizontal\",\n fullWidth: false,\n align: \"start\",\n },\n});\n\nconst tabTriggerVariants = cva(\n \"inline-flex items-center gap-2 font-medium transition-colors outline-none cursor-pointer select-none whitespace-nowrap\",\n {\n variants: {\n variant: {\n underline:\n \"border-b-2 border-transparent text-muted hover:text-gray-900 hover:border-gray-300\",\n pills:\n \"rounded-md text-muted hover:bg-gray-100 hover:text-gray-900\",\n bordered:\n \"border border-transparent rounded-t-md -mb-px text-muted hover:text-gray-900\",\n lifted:\n \"border-b-2 border-transparent text-muted hover:text-gray-900 -mb-px\",\n },\n size: {\n sm: \"px-3 py-1.5 text-xs\",\n md: \"px-4 py-2 text-sm\",\n lg: \"px-5 py-2.5 text-base\",\n },\n fullWidth: {\n true: \"flex-1 justify-center\",\n false: \"\",\n },\n active: {\n true: \"\",\n false: \"\",\n },\n disabled: {\n true: \"opacity-40 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n },\n compoundVariants: [\n /* Active states */\n { variant: \"underline\", active: true, class: \"border-primary text-primary\" },\n { variant: \"pills\", active: true, class: \"bg-primary text-white hover:bg-primary hover:text-white\" },\n { variant: \"bordered\", active: true, class: \"border-gray-200 border-b-white bg-white text-gray-900 rounded-t-md\" },\n { variant: \"lifted\", active: true, class: \"border-primary text-primary bg-white shadow-sm rounded-t-md\" },\n ],\n defaultVariants: {\n variant: \"underline\",\n size: \"md\",\n fullWidth: false,\n active: false,\n disabled: false,\n },\n },\n);\n\nconst tabPanelVariants = cva(\"outline-none\", {\n variants: {\n size: {\n sm: \"pt-2\",\n md: \"pt-3\",\n lg: \"pt-4\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"pl-4\",\n },\n animated: {\n true: \"animate-[tab-fade-in_200ms_ease-out]\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n orientation: \"horizontal\",\n animated: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Tabs */\n/* ------------------------------------------------------------------ */\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n items,\n activeKey: activeKeyProp,\n defaultActiveKey,\n onTabChange,\n variant = \"underline\",\n size = \"md\",\n fullWidth = false,\n align = \"start\",\n animated = true,\n orientation = \"horizontal\",\n className,\n ...rest\n },\n ref,\n ) => {\n const id = useId();\n\n /* ---- State ---- */\n const firstEnabledKey = items.find((t) => !t.disabled)?.key ?? items[0]?.key ?? \"\";\n const [internalKey, setInternalKey] = useState(defaultActiveKey ?? firstEnabledKey);\n const isControlled = activeKeyProp !== undefined;\n const currentKey = isControlled ? activeKeyProp : internalKey;\n\n const handleSelect = useCallback(\n (key: string) => {\n if (!isControlled) setInternalKey(key);\n onTabChange?.(key);\n },\n [isControlled, onTabChange],\n );\n\n /* ---- Keyboard navigation ---- */\n const enabledItems = items.filter((t) => !t.disabled);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const isHorizontal = orientation === \"horizontal\";\n const prevKey = isHorizontal ? \"ArrowLeft\" : \"ArrowUp\";\n const nextKey = isHorizontal ? \"ArrowRight\" : \"ArrowDown\";\n\n if (e.key !== prevKey && e.key !== nextKey && e.key !== \"Home\" && e.key !== \"End\") return;\n e.preventDefault();\n\n const currentIdx = enabledItems.findIndex((t) => t.key === currentKey);\n\n let nextIdx = currentIdx;\n if (e.key === prevKey) {\n nextIdx = currentIdx <= 0 ? enabledItems.length - 1 : currentIdx - 1;\n } else if (e.key === nextKey) {\n nextIdx = currentIdx >= enabledItems.length - 1 ? 0 : currentIdx + 1;\n } else if (e.key === \"Home\") {\n nextIdx = 0;\n } else if (e.key === \"End\") {\n nextIdx = enabledItems.length - 1;\n }\n\n const nextItem = enabledItems[nextIdx];\n if (nextItem) {\n handleSelect(nextItem.key);\n /* Focus the button */\n const el = document.getElementById(`${id}-tab-${nextItem.key}`);\n el?.focus();\n }\n },\n [orientation, enabledItems, currentKey, handleSelect, id],\n );\n\n const activeItem = items.find((t) => t.key === currentKey);\n\n return (\n <div\n ref={ref}\n className={clsx(tabsVariants({ orientation }), className)}\n {...rest}\n >\n {/* Tab list */}\n <div\n role=\"tablist\"\n aria-orientation={orientation}\n className={clsx(tabListVariants({ variant, orientation, fullWidth, align }))}\n onKeyDown={handleKeyDown}\n >\n {items.map((item) => {\n const isActive = item.key === currentKey;\n return (\n <button\n key={item.key}\n id={`${id}-tab-${item.key}`}\n role=\"tab\"\n type=\"button\"\n aria-selected={isActive}\n aria-controls={`${id}-panel-${item.key}`}\n tabIndex={isActive ? 0 : -1}\n disabled={item.disabled}\n className={clsx(\n tabTriggerVariants({\n variant,\n size,\n fullWidth,\n active: isActive,\n disabled: item.disabled ?? false,\n }),\n )}\n onClick={() => {\n if (!item.disabled) handleSelect(item.key);\n }}\n >\n {item.icon}\n {item.label}\n </button>\n );\n })}\n </div>\n\n {/* Tab panel */}\n {activeItem && (\n <div\n key={activeItem.key}\n id={`${id}-panel-${activeItem.key}`}\n role=\"tabpanel\"\n aria-labelledby={`${id}-tab-${activeItem.key}`}\n tabIndex={0}\n className={clsx(tabPanelVariants({ size, orientation, animated }))}\n >\n {activeItem.content}\n </div>\n )}\n </div>\n );\n },\n);\n\nTabs.displayName = \"Tabs\";\n","import { Children, cloneElement, forwardRef, isValidElement } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { clsx } from \"clsx\";\nimport { type TimelineProps, type TimelineItemProps } from \"./types\";\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nexport const timelineVariants = cva(\"relative\", {\n variants: {\n orientation: {\n vertical: \"flex flex-col\",\n horizontal: \"flex flex-row\",\n },\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n size: \"md\",\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Dot sizes */\n/* ------------------------------------------------------------------ */\n\nconst dotSizeMap = {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n} as const;\n\nconst iconDotSizeMap = {\n sm: \"h-6 w-6\",\n md: \"h-8 w-8\",\n lg: \"h-10 w-10\",\n} as const;\n\nconst iconInnerSizeMap = {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Color maps */\n/* ------------------------------------------------------------------ */\n\nconst dotColorMap = {\n primary: \"bg-primary\",\n secondary: \"bg-secondary\",\n green: \"bg-green-500\",\n red: \"bg-red-500\",\n yellow: \"bg-yellow-500\",\n gray: \"bg-gray-400\",\n} as const;\n\nconst outlinedDotColorMap = {\n primary: \"border-primary text-primary\",\n secondary: \"border-secondary text-secondary\",\n green: \"border-green-500 text-green-500\",\n red: \"border-red-500 text-red-500\",\n yellow: \"border-yellow-500 text-yellow-500\",\n gray: \"border-gray-400 text-gray-400\",\n} as const;\n\nconst filledDotColorMap = {\n primary: \"bg-primary text-white\",\n secondary: \"bg-secondary text-white\",\n green: \"bg-green-500 text-white\",\n red: \"bg-red-500 text-white\",\n yellow: \"bg-yellow-500 text-white\",\n gray: \"bg-gray-400 text-white\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Status → color resolution */\n/* ------------------------------------------------------------------ */\n\nfunction resolveColor(\n color: TimelineItemProps[\"color\"],\n status: TimelineItemProps[\"status\"],\n): NonNullable<TimelineItemProps[\"color\"]> {\n if (color) return color;\n switch (status) {\n case \"completed\":\n return \"green\";\n case \"active\":\n return \"primary\";\n case \"pending\":\n return \"gray\";\n default:\n return \"primary\";\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Line style */\n/* ------------------------------------------------------------------ */\n\nconst lineStyleMap = {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Title / description sizes */\n/* ------------------------------------------------------------------ */\n\nconst titleSizeMap = {\n sm: \"text-xs font-medium\",\n md: \"text-sm font-semibold\",\n lg: \"text-base font-semibold\",\n} as const;\n\nconst descSizeMap = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-sm\",\n} as const;\n\nconst dateSizeMap = {\n sm: \"text-[10px]\",\n md: \"text-xs\",\n lg: \"text-sm\",\n} as const;\n\n/* ------------------------------------------------------------------ */\n/* Checkmark SVG for completed status */\n/* ------------------------------------------------------------------ */\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n className={className}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3.5 8.5L6.5 11.5L12.5 4.5\" />\n </svg>\n);\n\n/* ------------------------------------------------------------------ */\n/* TimelineItem */\n/* ------------------------------------------------------------------ */\n\nexport const TimelineItem = forwardRef<HTMLDivElement, TimelineItemProps & {\n /** @internal */ _variant?: TimelineProps[\"variant\"];\n /** @internal */ _size?: TimelineProps[\"size\"];\n /** @internal */ _orientation?: TimelineProps[\"orientation\"];\n /** @internal */ _lineStyle?: TimelineProps[\"lineStyle\"];\n /** @internal */ _isLast?: boolean;\n /** @internal */ _trailingLine?: boolean;\n /** @internal */ _alternate?: boolean;\n /** @internal */ _index?: number;\n}>(\n (\n {\n title,\n description,\n date,\n icon,\n color: colorProp,\n status,\n className,\n _variant = \"default\",\n _size = \"md\",\n _orientation = \"vertical\",\n _lineStyle = \"solid\",\n _isLast = false,\n _trailingLine = false,\n _alternate = false,\n _index = 0,\n ...rest\n },\n ref,\n ) => {\n const resolvedColor = resolveColor(colorProp, status);\n const showLine = !_isLast || _trailingLine;\n const isRight = _alternate && _index % 2 === 1;\n\n /* ---- Dot rendering ---- */\n const renderDot = () => {\n const hasIcon = icon || status === \"completed\";\n const dotSize = hasIcon ? iconDotSizeMap[_size] : dotSizeMap[_size];\n\n let colorClass: string;\n if (_variant === \"outlined\") {\n colorClass = clsx(\"border-2 bg-white\", outlinedDotColorMap[resolvedColor]);\n } else if (_variant === \"filled\") {\n colorClass = filledDotColorMap[resolvedColor];\n } else {\n /* default */\n colorClass = hasIcon\n ? filledDotColorMap[resolvedColor]\n : dotColorMap[resolvedColor];\n }\n\n return (\n <div\n className={clsx(\n \"z-10 flex shrink-0 items-center justify-center rounded-full\",\n dotSize,\n colorClass,\n status === \"active\" && \"ring-2 ring-offset-2 ring-primary/30\",\n )}\n >\n {status === \"completed\" && !icon && (\n <CheckIcon className={clsx(\"text-white\", iconInnerSizeMap[_size])} />\n )}\n {icon && (\n <span className={clsx(\"flex items-center justify-center\", iconInnerSizeMap[_size])}>\n {icon}\n </span>\n )}\n </div>\n );\n };\n\n /* ---- Vertical layout ---- */\n if (_orientation === \"vertical\") {\n return (\n <div\n ref={ref}\n className={clsx(\n \"relative flex\",\n _alternate ? \"justify-center\" : \"gap-3\",\n className,\n )}\n {...rest}\n >\n {_alternate ? (\n /* Alternating layout */\n <>\n {/* Left content */}\n <div className={clsx(\"flex-1 pb-6\", isRight ? \"text-right pr-4\" : \"invisible pr-4\")}>\n {isRight && (\n <>\n {date && <span className={clsx(\"text-muted\", dateSizeMap[_size])}>{date}</span>}\n <h4 className={clsx(\"text-gray-900\", titleSizeMap[_size])}>{title}</h4>\n {description && <div className={clsx(\"text-muted mt-0.5\", descSizeMap[_size])}>{description}</div>}\n </>\n )}\n </div>\n\n {/* Center dot + line */}\n <div className=\"relative flex flex-col items-center\">\n {renderDot()}\n {showLine && (\n <div\n className={clsx(\n \"flex-1 border-l-2\",\n lineStyleMap[_lineStyle],\n status === \"pending\" ? \"border-gray-200\" : \"border-gray-300\",\n )}\n />\n )}\n </div>\n\n {/* Right content */}\n <div className={clsx(\"flex-1 pb-6\", !isRight ? \"text-left pl-4\" : \"invisible pl-4\")}>\n {!isRight && (\n <>\n {date && <span className={clsx(\"text-muted\", dateSizeMap[_size])}>{date}</span>}\n <h4 className={clsx(\"text-gray-900\", titleSizeMap[_size])}>{title}</h4>\n {description && <div className={clsx(\"text-muted mt-0.5\", descSizeMap[_size])}>{description}</div>}\n </>\n )}\n </div>\n </>\n ) : (\n /* Standard vertical */\n <>\n <div className=\"relative flex flex-col items-center\">\n {renderDot()}\n {showLine && (\n <div\n className={clsx(\n \"flex-1 border-l-2\",\n lineStyleMap[_lineStyle],\n status === \"pending\" ? \"border-gray-200\" : \"border-gray-300\",\n )}\n />\n )}\n </div>\n <div className=\"pb-6 pt-0\">\n {date && (\n <span className={clsx(\"block text-muted\", dateSizeMap[_size])}>\n {date}\n </span>\n )}\n <h4 className={clsx(\"text-gray-900\", titleSizeMap[_size])}>{title}</h4>\n {description && (\n <div className={clsx(\"text-muted mt-0.5\", descSizeMap[_size])}>\n {description}\n </div>\n )}\n </div>\n </>\n )}\n </div>\n );\n }\n\n /* ---- Horizontal layout ---- */\n return (\n <div\n ref={ref}\n className={clsx(\"relative flex flex-col items-center flex-1\", className)}\n {...rest}\n >\n <div className=\"relative flex w-full items-center\">\n {/* Left line */}\n {_index > 0 && (\n <div\n className={clsx(\n \"flex-1 border-t-2\",\n lineStyleMap[_lineStyle],\n \"border-gray-300\",\n )}\n />\n )}\n {_index === 0 && <div className=\"flex-1\" />}\n\n {renderDot()}\n\n {/* Right line */}\n {showLine && (\n <div\n className={clsx(\n \"flex-1 border-t-2\",\n lineStyleMap[_lineStyle],\n status === \"pending\" ? \"border-gray-200\" : \"border-gray-300\",\n )}\n />\n )}\n {!showLine && <div className=\"flex-1\" />}\n </div>\n <div className=\"mt-2 text-center\">\n {date && (\n <span className={clsx(\"block text-muted\", dateSizeMap[_size])}>\n {date}\n </span>\n )}\n <h4 className={clsx(\"text-gray-900\", titleSizeMap[_size])}>{title}</h4>\n {description && (\n <div className={clsx(\"text-muted mt-0.5\", descSizeMap[_size])}>\n {description}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nTimelineItem.displayName = \"TimelineItem\";\n\n/* ------------------------------------------------------------------ */\n/* Timeline */\n/* ------------------------------------------------------------------ */\n\nexport const Timeline = forwardRef<HTMLDivElement, TimelineProps>(\n (\n {\n children,\n variant = \"default\",\n size = \"md\",\n orientation = \"vertical\",\n lineStyle = \"solid\",\n trailingLine = false,\n alternate = false,\n className,\n ...rest\n },\n ref,\n ) => {\n const childArray = Children.toArray(children);\n const count = childArray.length;\n\n return (\n <div\n ref={ref}\n className={clsx(timelineVariants({ orientation, size }), className)}\n {...rest}\n >\n {childArray.map((child, i) => {\n /* Inject internal props */\n if (\n child &&\n typeof child === \"object\" &&\n \"type\" in child &&\n (child.type as { displayName?: string }).displayName === \"TimelineItem\"\n ) {\n return isValidElement(child)\n ? cloneElement(child, {\n _variant: variant,\n _size: size,\n _orientation: orientation,\n _lineStyle: lineStyle,\n _isLast: i === count - 1,\n _trailingLine: trailingLine,\n _alternate: alternate,\n _index: i,\n } as Record<string, unknown>)\n : child;\n }\n return child;\n })}\n </div>\n );\n },\n);\n\nTimeline.displayName = \"Timeline\";\n","export const colors = {\n primary: \"var(--color-primary)\",\n secondary: \"var(--color-secondary)\",\n muted: \"var(--color-muted)\",\n} as const;\n\nexport type Color = keyof typeof colors;\n","export const spacing = {\n 1: \"var(--space-1)\",\n 2: \"var(--space-2)\",\n 4: \"var(--space-4)\",\n} as const;\n\nexport type Spacing = keyof typeof spacing;\n","export const radius = {\n sm: \"var(--radius-sm)\",\n md: \"var(--radius-md)\",\n lg: \"var(--radius-lg)\",\n} as const;\n\nexport type Radius = keyof typeof radius;\n"],"names":["param","labelSizeMap","dotSizeMap","DefaultIcon","iconSizeMap","gapMap","isHorizontal"],"mappings":"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","x_google_ignoreList":[0,1]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "corekit-components",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "A modern React component library built with TypeScript, TailwindCSS, and class-variance-authority.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -44,8 +44,8 @@
44
44
  "build-storybook": "storybook build"
45
45
  },
46
46
  "peerDependencies": {
47
- "react": "^18.0.0",
48
- "react-dom": "^18.0.0"
47
+ "react": "^19.0.0",
48
+ "react-dom": "^19.0.0"
49
49
  },
50
50
  "dependencies": {
51
51
  "class-variance-authority": "^0.7.1",
@@ -55,12 +55,12 @@
55
55
  "@storybook/addon-essentials": "^8.4.7",
56
56
  "@storybook/react": "^8.4.7",
57
57
  "@storybook/react-vite": "^8.4.7",
58
- "@types/react": "^18.3.18",
59
- "@types/react-dom": "^18.3.5",
58
+ "@types/react": "^19.2.14",
59
+ "@types/react-dom": "^19.2.3",
60
60
  "autoprefixer": "^10.4.20",
61
61
  "postcss": "^8.4.49",
62
- "react": "^18.3.1",
63
- "react-dom": "^18.3.1",
62
+ "react": "^19.2.4",
63
+ "react-dom": "^19.2.4",
64
64
  "storybook": "^8.4.7",
65
65
  "tailwindcss": "^3.4.17",
66
66
  "typescript": "^5.7.3",