@kjaniec-dev/ui 0.9.2 → 0.9.3
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.cjs +1979 -1157
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -9
- package/dist/index.d.ts +10 -9
- package/dist/index.js +1979 -1157
- package/dist/index.js.map +1 -1
- package/dist/ui.css +34 -9
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/cn.ts","../src/components/button.tsx","../src/components/badge.tsx","../src/components/alert.tsx","../src/components/spinner.tsx","../src/components/progress.tsx","../src/components/field.tsx","../src/components/form-field.tsx","../src/components/progress-ring.tsx","../src/components/input.tsx","../src/components/select.tsx","../src/components/checkbox.tsx","../src/components/switch.tsx","../src/components/slider.tsx","../src/components/segmented.tsx","../src/components/toggle-group.tsx","../src/components/card.tsx","../src/components/stat.tsx","../src/components/avatar.tsx","../src/components/tabs.tsx","../src/components/accordion.tsx","../src/components/dropdown-menu.tsx","../src/components/breadcrumb.tsx","../src/components/pagination.tsx","../src/components/bottom-navigation.tsx","../src/components/table.tsx","../src/components/tooltip.tsx","../src/components/modal.tsx","../src/components/toast.tsx","../src/components/page-header.tsx","../src/components/section-header.tsx","../src/components/empty-state.tsx","../src/components/metric-card.tsx","../src/components/data-table.tsx","../src/components/error-state.tsx","../src/components/skeleton.tsx","../src/components/dashboard-shell.tsx","../src/components/settings-layout.tsx","../src/components/detail-page-layout.tsx","../src/components/table-toolbar.tsx","../src/components/confirm-dialog.tsx","../src/components/drawer.tsx","../src/components/command-palette.tsx","../src/components/sidebar-nav.tsx","../src/components/fab.tsx","../src/components/bottom-sheet.tsx","../src/components/kbd.tsx","../src/components/code-block.tsx","../src/components/separator.tsx","../src/components/popover.tsx","../src/components/combobox.tsx","../src/components/calendar-internals.ts","../src/components/calendar-grid.tsx","../src/components/calendar.tsx","../src/components/date-picker.tsx","../src/components/range-calendar.tsx","../src/components/date-range-picker.tsx","../src/components/dropzone.tsx","../src/components/file-upload-internals.ts","../src/components/file-upload.tsx","../src/components/timeline.tsx","../src/components/stepper.tsx","../src/components/app-shell.tsx","../src/components/rating/rating.tsx","../src/components/rating/rating-field.tsx","../src/components/rating/rating-summary.tsx","../src/components/pricing-card.tsx","../src/components/blog-card.tsx","../src/components/project-card.tsx","../src/components/inbox-popover.tsx","../src/components/color-picker.tsx","../src/components/image-gallery.tsx","../src/components/inpost-geowidget/use-inpost-script.ts","../src/components/inpost-geowidget/inpost-geowidget.tsx","../src/components/inpost-geowidget/inpost-geowidget-modal.tsx"],"names":["React","cva","React2","jsxs","jsx","React3","React4","React5","React6","React7","React8","range","React9","React10","React11","React12","React13","React14","React15","React16","React17","React18","React19","React20","React21","React22","React23","container","React24","React25","React26","React27","React28","React29","React30","React31","React32","React33","React34","React35","React36","React37","Fragment","React38","React39","React40","React41","React42","React43","Combobox","ComboboxField","React44","CalendarGrid","React45","Calendar","React46","DatePicker","DatePickerField","React47","RangeCalendar","displayFormat","React48","DateRangePicker","DateRangePickerField","React49","Dropzone","React50","FileUpload","FileUploadField","React51","sizeClasses","React53","React54","React55","React56","React57","React58","React59","React60","React61","React62","useState","useEffect","useRef"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names with Tailwind-aware conflict resolution.\n * `cn(\"px-2\", condition && \"px-4\")` → keeps the last conflicting utility.\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst buttonVariants = cva(\n [\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap select-none\",\n \"font-sans font-semibold leading-none\",\n \"border border-transparent rounded-kj-md cursor-pointer\",\n \"transition-[background-color,color,border-color,box-shadow,transform] duration-150\",\n \"active:translate-y-px\",\n \"focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/45\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n ],\n {\n variants: {\n variant: {\n primary: \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n outline: \"bg-transparent text-foreground border-border hover:bg-muted hover:border-muted-foreground\",\n ghost: \"bg-transparent text-foreground hover:bg-muted\",\n danger: \"bg-danger text-white hover:brightness-95\",\n },\n size: {\n sm: \"h-8 px-3 text-[0.8rem] rounded-kj-sm\",\n md: \"h-10 px-[1.1rem] text-sm\",\n lg: \"h-12 px-6 text-base\",\n icon: \"h-10 w-10 p-0\",\n \"icon-sm\": \"h-8 w-8 p-0 rounded-kj-sm\",\n },\n },\n defaultVariants: { variant: \"primary\", size: \"md\" },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Shows a spinner and disables interaction. */\n loading?: boolean;\n /** Icon rendered before the label. */\n leadingIcon?: React.ReactNode;\n /** Icon rendered after the label. */\n trailingIcon?: React.ReactNode;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, loading, leadingIcon, trailingIcon, children, disabled, ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={cn(buttonVariants({ variant, size }), loading && \"relative\", className)}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading && (\n <span\n aria-hidden\n className=\"absolute h-[1em] w-[1em] rounded-full border-2 border-current border-t-transparent animate-spin\"\n />\n )}\n <span className={cn(\"contents\", loading && \"invisible\")}>\n {leadingIcon && <span className=\"[&_svg]:h-[1.05em] [&_svg]:w-[1.05em]\">{leadingIcon}</span>}\n {children}\n {trailingIcon && <span className=\"[&_svg]:h-[1.05em] [&_svg]:w-[1.05em]\">{trailingIcon}</span>}\n </span>\n </button>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1.5 px-2.5 py-0.5 text-xs font-semibold leading-snug rounded-full border border-transparent\",\n {\n variants: {\n variant: {\n neutral: \"bg-muted text-muted-foreground\",\n primary: \"bg-primary/15 text-primary-hover dark:text-primary\",\n secondary: \"bg-secondary/15 text-secondary-hover dark:text-secondary\",\n success: \"bg-success-surface text-success\",\n warning: \"bg-warning-surface text-warning\",\n danger: \"bg-danger-surface text-danger\",\n info: \"bg-info-surface text-info\",\n solid: \"bg-primary text-primary-foreground\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n /** Render a leading status dot. */\n dot?: boolean;\n}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, dot, children, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant }), className)} {...props}>\n {dot && <span className=\"h-1.5 w-1.5 rounded-full bg-current\" aria-hidden />}\n {children}\n </span>\n )\n);\nBadge.displayName = \"Badge\";\n\nexport { badgeVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst alertVariants = cva(\n \"flex gap-3 items-start p-[0.9rem_1.1rem] rounded-kj-md border text-sm\",\n {\n variants: {\n variant: {\n info: \"bg-info-surface border-info/30\",\n success: \"bg-success-surface border-success/30\",\n warning: \"bg-warning-surface border-warning/30\",\n danger: \"bg-danger-surface border-danger/30\",\n },\n },\n defaultVariants: { variant: \"info\" },\n }\n);\n\nconst iconColor = {\n info: \"text-info\",\n success: \"text-success\",\n warning: \"text-warning\",\n danger: \"text-danger\",\n} as const;\n\nexport interface AlertProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof alertVariants> {\n /** Optional leading icon (e.g. an SVG). Inherits the variant color. */\n icon?: React.ReactNode;\n title?: React.ReactNode;\n}\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = \"info\", icon, title, children, ...props }, ref) => (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props}>\n {icon && (\n <span className={cn(\"shrink-0 mt-0.5 [&_svg]:h-[1.15rem] [&_svg]:w-[1.15rem]\", iconColor[variant ?? \"info\"])}>\n {icon}\n </span>\n )}\n <div className=\"text-foreground\">\n {title && <p className=\"font-bold m-0 mb-0.5 text-sm\">{title}</p>}\n {children && <p className=\"m-0 opacity-85\">{children}</p>}\n </div>\n </div>\n )\n);\nAlert.displayName = \"Alert\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Diameter in px. Default 24. */\n size?: number;\n}\n\nexport const Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size = 24, style, ...props }, ref) => (\n <span\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-block rounded-full border-[2.5px] border-muted border-t-primary animate-spin align-middle\",\n className\n )}\n style={{ width: size, height: size, ...style }}\n {...props}\n />\n )\n);\nSpinner.displayName = \"Spinner\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 0–100. */\n value?: number;\n tone?: \"primary\" | \"secondary\";\n /** Extra classes applied to the inner bar span — use for animation, transform-origin, etc. */\n barClassName?: string;\n}\n\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n ({ className, value = 0, tone = \"primary\", barClassName, ...props }, ref) => {\n const pct = Math.max(0, Math.min(100, value));\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-label={props[\"aria-label\"] ?? \"Progress\"}\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n className={cn(\"h-2 w-full overflow-hidden rounded-full bg-muted\", className)}\n {...props}\n >\n <span\n className={cn(\n \"block h-full rounded-full transition-[width] duration-500 ease-out\",\n tone === \"secondary\" ? \"bg-secondary\" : \"bg-primary\",\n barClassName\n )}\n style={{ width: `${pct}%` }}\n />\n </div>\n );\n }\n);\nProgress.displayName = \"Progress\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n /** Append a red required marker. */\n required?: boolean;\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, required, children, ...props }, ref) => (\n <label ref={ref} className={cn(\"text-[0.8rem] font-semibold text-foreground\", className)} {...props}>\n {children}\n {required && <span className=\"text-danger\"> *</span>}\n </label>\n )\n);\nLabel.displayName = \"Label\";\n\nexport interface HintProps extends React.HTMLAttributes<HTMLSpanElement> {\n error?: boolean;\n}\n\nexport const Hint = React.forwardRef<HTMLSpanElement, HintProps>(\n ({ className, error, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"text-[0.76rem]\", error ? \"text-danger\" : \"text-muted-foreground\", className)}\n {...props}\n />\n )\n);\nHint.displayName = \"Hint\";\n\n/** Vertical label + control + hint group. */\nexport const Field = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5\", className)} {...props} />\n )\n);\nField.displayName = \"Field\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label, Hint } from \"./field\";\n\nexport interface FormFieldProps extends React.HTMLAttributes<HTMLDivElement> {\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n children: React.ReactNode;\n}\n\nexport const FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n ({ className, label, hint, error, required, children, ...props }, ref) => {\n const id = React.useId();\n const hintId = `${id}-hint`;\n const errorId = `${id}-error`;\n\n const child = React.Children.only(children) as React.ReactElement<{\n id?: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: boolean | \"true\" | \"false\";\n required?: boolean;\n }>;\n const clonedChild = React.cloneElement(child, {\n id: child.props.id ?? id,\n \"aria-describedby\": cn(\n hint && hintId,\n error && errorId,\n child.props[\"aria-describedby\"]\n ) || undefined,\n \"aria-invalid\": error ? \"true\" : undefined,\n required: child.props.required ?? required,\n });\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5 w-full\", className)} {...props}>\n <Label htmlFor={id} required={required}>\n {label}\n </Label>\n {clonedChild}\n {hint && !error && <Hint id={hintId}>{hint}</Hint>}\n {error && (\n <Hint id={errorId} error>\n {error}\n </Hint>\n )}\n </div>\n );\n }\n);\nFormField.displayName = \"FormField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { FormField } from \"./form-field\";\n\nexport type ProgressRingSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type ProgressRingTone =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface ProgressRingProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current progress value. Defaults to 0. */\n value?: number;\n /** Minimum progress value. Defaults to 0. */\n min?: number;\n /** Maximum progress value. Defaults to 100. */\n max?: number;\n /** Preset size of the ring. Defaults to \"md\". */\n size?: ProgressRingSize;\n /** Override stroke thickness (in px). */\n strokeWidth?: number;\n /** Color tone of the progress indicator. Defaults to \"primary\". */\n tone?: ProgressRingTone;\n /** Whether to show the percentage text inside the ring center if no children are provided. Defaults to false. */\n showValue?: boolean;\n /** Optional formatter for the center percentage display. */\n formatValue?: (value: number, percentage: number) => React.ReactNode;\n /** Additional CSS class for the background track circle. */\n trackClassName?: string;\n /** Additional CSS class for the progress indicator circle. */\n indicatorClassName?: string;\n /** Custom center content. */\n children?: React.ReactNode;\n}\n\nconst sizeDimensions: Record<ProgressRingSize, number> = {\n sm: 36,\n md: 64,\n lg: 96,\n xl: 128,\n};\n\nconst defaultStrokeWidths: Record<ProgressRingSize, number> = {\n sm: 3.5,\n md: 6,\n lg: 8,\n xl: 10,\n};\n\nconst textSizeClasses: Record<ProgressRingSize, string> = {\n sm: \"text-[0.65rem] font-semibold leading-none\",\n md: \"text-xs font-semibold leading-none\",\n lg: \"text-base font-bold leading-none\",\n xl: \"text-xl font-bold leading-none\",\n};\n\nconst toneClasses: Record<ProgressRingTone, string> = {\n primary: \"text-primary stroke-current\",\n secondary: \"text-secondary stroke-current\",\n success: \"text-success stroke-current\",\n warning: \"text-warning stroke-current\",\n danger: \"text-danger stroke-current\",\n info: \"text-info stroke-current\",\n};\n\nexport const ProgressRing = React.forwardRef<HTMLDivElement, ProgressRingProps>(\n (\n {\n className,\n style,\n value = 0,\n min = 0,\n max = 100,\n size = \"md\",\n strokeWidth,\n tone = \"primary\",\n showValue = false,\n formatValue,\n trackClassName,\n indicatorClassName,\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const range = max > min ? max - min : 100;\n const clampedValue = Math.max(min, Math.min(max, value));\n const percentage = Math.max(0, Math.min(100, ((clampedValue - min) / range) * 100));\n\n const dimension = sizeDimensions[size];\n const strokeWidthVal = strokeWidth ?? defaultStrokeWidths[size];\n const radius = Math.max(0, (dimension - strokeWidthVal) / 2);\n const circumference = 2 * Math.PI * radius;\n const strokeDashoffset = circumference - (percentage / 100) * circumference;\n const computedAriaLabel = ariaLabel ?? (props[\"aria-labelledby\"] ? undefined : \"Progress\");\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-label={computedAriaLabel}\n aria-valuenow={clampedValue}\n aria-valuemin={min}\n aria-valuemax={max}\n className={cn(\"relative inline-flex items-center justify-center shrink-0\", className)}\n style={{ width: dimension, height: dimension, ...style }}\n {...props}\n >\n <svg\n width={dimension}\n height={dimension}\n viewBox={`0 0 ${dimension} ${dimension}`}\n className=\"-rotate-90 transform\"\n >\n {/* Background track circle */}\n <circle\n cx={dimension / 2}\n cy={dimension / 2}\n r={radius}\n strokeWidth={strokeWidthVal}\n className={cn(\"stroke-muted/30 fill-none\", trackClassName)}\n />\n {/* Progress indicator circle */}\n <circle\n cx={dimension / 2}\n cy={dimension / 2}\n r={radius}\n strokeWidth={strokeWidthVal}\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap={percentage === 0 ? \"butt\" : \"round\"}\n className={cn(\n \"fill-none transition-[stroke-dashoffset,opacity] duration-500 ease-in-out\",\n percentage === 0 && \"opacity-0\",\n toneClasses[tone],\n indicatorClassName\n )}\n />\n </svg>\n\n {(children || showValue) && (\n <div\n className={cn(\n \"absolute inset-0 flex flex-col items-center justify-center text-center text-foreground p-1\",\n textSizeClasses[size]\n )}\n >\n {children ??\n (formatValue\n ? formatValue(clampedValue, Math.round(percentage))\n : `${Math.round(percentage)}%`)}\n </div>\n )}\n </div>\n );\n }\n);\nProgressRing.displayName = \"ProgressRing\";\n\nexport interface ProgressRingFieldProps extends ProgressRingProps {\n /** Field label text. */\n label: string;\n /** Helper hint text displayed beneath the control. */\n hint?: string;\n /** Error message displayed beneath the control. */\n error?: string;\n /** Renders a required indicator (*). */\n required?: boolean;\n /** Class name for the outer field wrapper div. */\n fieldClassName?: string;\n}\n\nexport const ProgressRingField = React.forwardRef<HTMLDivElement, ProgressRingFieldProps>(\n ({ label, hint, error, required, fieldClassName, ...ringProps }, ref) => {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={fieldClassName}>\n <ProgressRing ref={ref} aria-label={ringProps[\"aria-label\"] ?? label} {...ringProps} />\n </FormField>\n );\n }\n);\nProgressRingField.displayName = \"ProgressRingField\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Visual error state (red border + ring). */\n error?: boolean;\n /** Icon shown inside the field, leading edge. */\n leadingIcon?: React.ReactNode;\n}\n\nconst baseField =\n \"w-full font-sans text-sm text-foreground bg-surface border rounded-kj-md px-[0.85rem] \" +\n \"transition-[border-color,box-shadow] duration-150 placeholder:text-muted-foreground \" +\n \"focus:outline-none focus:border-ring focus:ring-[3px] focus:ring-ring/30 \" +\n \"disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed\";\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, error, leadingIcon, ...props }, ref) => {\n const field = (\n <input\n ref={ref}\n aria-invalid={error || undefined}\n className={cn(\n baseField,\n \"py-[calc(0.6rem*var(--kj-density,1))]\",\n error\n ? \"border-danger focus:border-danger focus:ring-danger/25\"\n : \"border-input\",\n leadingIcon && \"pl-[2.3rem]\",\n className\n )}\n {...props}\n />\n );\n if (!leadingIcon) return field;\n return (\n <span className=\"relative flex items-center\">\n <span className=\"absolute left-[0.8rem] text-muted-foreground [&_svg]:h-[1.05rem] [&_svg]:w-[1.05rem] pointer-events-none\">\n {leadingIcon}\n </span>\n {field}\n </span>\n );\n }\n);\nInput.displayName = \"Input\";\n\nimport { FormField } from \"./form-field\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, error, ...props }, ref) => (\n <textarea\n ref={ref}\n aria-invalid={error || undefined}\n className={cn(\n baseField,\n \"py-[calc(0.6rem*var(--kj-density,1))] min-h-[84px] leading-relaxed resize-y\",\n error ? \"border-danger focus:border-danger focus:ring-danger/25\" : \"border-input\",\n className\n )}\n {...props}\n />\n )\n);\nTextarea.displayName = \"Textarea\";\n\nexport interface TextFieldProps extends Omit<React.ComponentPropsWithoutRef<typeof Input>, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n}\n\nexport const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(\n ({ label, hint, error, required, className, ...props }, ref) => {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <Input ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nTextField.displayName = \"TextField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n error?: boolean;\n}\n\nconst chevron =\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2371717a' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\";\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, error, style, children, ...props }, ref) => (\n <select\n ref={ref}\n aria-invalid={error || undefined}\n className={cn(\n \"w-full appearance-none cursor-pointer font-sans text-sm text-foreground bg-surface\",\n \"border rounded-kj-md py-[calc(0.6rem*var(--kj-density,1))] pl-[0.85rem] pr-9\",\n \"transition-[border-color,box-shadow] duration-150\",\n \"focus:outline-none focus:border-ring focus:ring-[3px] focus:ring-ring/30\",\n \"disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed\",\n error ? \"border-danger\" : \"border-input\",\n className\n )}\n style={{\n backgroundImage: `url(\"${chevron}\")`,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"right 0.75rem center\",\n backgroundSize: \"1rem\",\n ...style,\n }}\n {...props}\n >\n {children}\n </select>\n )\n);\nSelect.displayName = \"Select\";\n\nimport { FormField } from \"./form-field\";\n\nexport interface SelectFieldProps extends Omit<React.ComponentPropsWithoutRef<typeof Select>, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n}\n\nexport const SelectField = React.forwardRef<HTMLSelectElement, SelectFieldProps>(\n ({ label, hint, error, required, className, children, ...props }, ref) => {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <Select ref={ref} error={!!error} {...props}>\n {children}\n </Select>\n </FormField>\n );\n }\n);\nSelectField.displayName = \"SelectField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id, ...props }, ref) => {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n return (\n <label htmlFor={inputId} className={cn(\"inline-flex items-center gap-2.5 cursor-pointer text-sm select-none\", className)}>\n <input ref={ref} id={inputId} type=\"checkbox\" className=\"peer sr-only\" {...props} />\n <span className=\"grid place-items-center h-[1.15rem] w-[1.15rem] shrink-0 rounded-[0.4rem] border-[1.5px] border-input bg-surface transition-all duration-150 peer-checked:bg-primary peer-checked:border-primary peer-focus-visible:ring-[3px] peer-focus-visible:ring-ring/35 peer-checked:[&_svg]:opacity-100 peer-checked:[&_svg]:scale-100\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={3} strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"h-3 w-3 text-primary-foreground opacity-0 scale-50 transition-all duration-150\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n {label}\n </label>\n );\n }\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, id, ...props }, ref) => {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n return (\n <label htmlFor={inputId} className={cn(\"inline-flex items-center gap-2.5 cursor-pointer text-sm select-none\", className)}>\n <input ref={ref} id={inputId} type=\"radio\" className=\"peer sr-only\" {...props} />\n <span className=\"grid place-items-center h-[1.15rem] w-[1.15rem] shrink-0 rounded-full border-[1.5px] border-input bg-surface transition-all duration-150 peer-checked:bg-primary peer-checked:border-primary peer-focus-visible:ring-[3px] peer-focus-visible:ring-ring/35 peer-checked:[&>span]:opacity-100 peer-checked:[&>span]:scale-100\">\n <span className=\"h-2 w-2 rounded-full bg-primary-foreground opacity-0 scale-[0.4] transition-all duration-150\" />\n </span>\n {label}\n </label>\n );\n }\n);\nRadio.displayName = \"Radio\";\n\nimport { Hint } from \"./field\";\n\nexport interface CheckboxFieldProps extends React.ComponentPropsWithoutRef<typeof Checkbox> {\n label: React.ReactNode;\n hint?: string;\n error?: string;\n}\n\nexport const CheckboxField = React.forwardRef<HTMLInputElement, CheckboxFieldProps>(\n ({ label, hint, error, className, ...props }, ref) => {\n const id = React.useId();\n const hintId = `${id}-hint`;\n const errorId = `${id}-error`;\n return (\n <div className={cn(\"flex flex-col gap-1 w-full\", className)}>\n <Checkbox\n ref={ref}\n id={id}\n label={label}\n aria-describedby={cn(hint && hintId, error && errorId) || undefined}\n aria-invalid={error ? \"true\" : undefined}\n {...props}\n />\n {hint && !error && (\n <Hint id={hintId} className=\"pl-[1.8rem]\">{hint}</Hint>\n )}\n {error && (\n <Hint id={errorId} error className=\"pl-[1.8rem]\">{error}</Hint>\n )}\n </div>\n );\n }\n);\nCheckboxField.displayName = \"CheckboxField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SwitchProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, label, id, ...props }, ref) => {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n return (\n <label htmlFor={inputId} className={cn(\"inline-flex items-center gap-2.5 cursor-pointer text-sm select-none\", className)}>\n <input ref={ref} id={inputId} type=\"checkbox\" role=\"switch\" className=\"peer sr-only\" {...props} />\n <span className=\"relative h-[1.45rem] w-[2.6rem] shrink-0 rounded-full bg-input transition-colors duration-200 peer-checked:bg-primary peer-focus-visible:ring-[3px] peer-focus-visible:ring-ring/35 after:content-[''] after:absolute after:top-0.5 after:left-0.5 after:h-[calc(1.45rem-4px)] after:w-[calc(1.45rem-4px)] after:rounded-full after:bg-white after:shadow-kj-sm after:transition-transform after:duration-200 peer-checked:after:translate-x-[1.15rem]\" />\n {label}\n </label>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type SliderProps = React.InputHTMLAttributes<HTMLInputElement>;\n\n/**\n * Range slider styled with the kit's primary token. Thumb styling lives in a\n * scoped <style> tag because pseudo-elements (::-webkit-slider-thumb) can't be\n * expressed as Tailwind utilities.\n */\nexport const Slider = React.forwardRef<HTMLInputElement, SliderProps>(\n ({ className, style, value, defaultValue, min = 0, max = 100, onChange, ...props }, ref) => {\n const [localValue, setLocalValue] = React.useState<number>(\n Number(defaultValue ?? value ?? 50)\n );\n const isControlled = value !== undefined;\n const currentVal = isControlled ? Number(value) : localValue;\n\n const numMin = Number(min);\n const numMax = Number(max);\n const percentage = Math.min(\n 100,\n Math.max(0, ((currentVal - numMin) / (numMax - numMin)) * 100)\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setLocalValue(Number(e.target.value));\n }\n onChange?.(e);\n };\n\n return (\n <input\n ref={ref}\n type=\"range\"\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n onChange={handleChange}\n style={{\n background: `linear-gradient(to right, var(--kj-primary) ${percentage}%, var(--kj-border, rgba(120, 120, 128, 0.2)) ${percentage}%)`,\n ...style,\n }}\n className={cn(\n \"kj-slider w-full h-1.5 rounded-full appearance-none cursor-pointer accent-primary\",\n className\n )}\n {...props}\n />\n );\n }\n);\nSlider.displayName = \"Slider\";\n\n/** Inject once near the app root (or rely on the package stylesheet). */\nexport const sliderThumbCSS = `\n.kj-slider::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:9999px;background:var(--kj-primary);border:3px solid var(--kj-surface);box-shadow:var(--kj-shadow-sm);cursor:pointer}\n.kj-slider::-moz-range-thumb{width:18px;height:18px;border-radius:9999px;background:var(--kj-primary);border:3px solid var(--kj-surface);box-shadow:var(--kj-shadow-sm);cursor:pointer}\n`;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SegmentedOption<T extends string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface SegmentedProps<T extends string> {\n options: SegmentedOption<T>[];\n value: T;\n onChange: (value: T) => void;\n className?: string;\n \"aria-label\"?: string;\n}\n\n/** Segmented control / single-select toggle group. Controlled. */\nexport function Segmented<T extends string>({\n options,\n value,\n onChange,\n className,\n ...props\n}: SegmentedProps<T>) {\n return (\n <div\n role=\"tablist\"\n className={cn(\"inline-flex gap-0.5 p-[3px] rounded-kj-md bg-muted\", className)}\n {...props}\n >\n {options.map((opt) => {\n const active = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onChange(opt.value)}\n className={cn(\n \"px-3.5 py-1.5 text-[0.82rem] font-semibold rounded-[calc(var(--kj-radius-md)-3px)] cursor-pointer transition-all duration-150\",\n active\n ? \"bg-surface text-foreground shadow-kj-xs\"\n : \"bg-transparent text-muted-foreground hover:text-foreground\"\n )}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface ToggleGroupOption<T extends string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface ToggleGroupProps<T extends string> {\n options: ToggleGroupOption<T>[];\n value: T[];\n onChange: (value: T[]) => void;\n disabled?: boolean;\n className?: string;\n \"aria-label\": string;\n}\n\n/** Multi-select toggle row. Always controlled — each button's pressed state is independent. */\nexport function ToggleGroup<T extends string>({\n options,\n value,\n onChange,\n disabled,\n className,\n ...props\n}: ToggleGroupProps<T>) {\n const toggle = (optionValue: T) => {\n if (disabled) return;\n const next = value.includes(optionValue)\n ? value.filter((v) => v !== optionValue)\n : [...value, optionValue];\n onChange(next);\n };\n\n return (\n <div\n role=\"group\"\n className={cn(\"inline-flex gap-0.5 p-[3px] rounded-kj-md bg-muted\", className)}\n {...props}\n >\n {options.map((opt) => {\n const active = value.includes(opt.value);\n return (\n <button\n key={opt.value}\n type=\"button\"\n aria-pressed={active}\n disabled={disabled}\n onClick={() => toggle(opt.value)}\n className={cn(\n \"px-3.5 py-1.5 text-[0.82rem] font-semibold rounded-[calc(var(--kj-radius-md)-3px)] cursor-pointer transition-all duration-150 disabled:cursor-not-allowed disabled:opacity-50\",\n active\n ? \"bg-surface text-foreground shadow-kj-xs\"\n : \"bg-transparent text-muted-foreground hover:text-foreground\"\n )}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface CardProps extends Omit<React.AllHTMLAttributes<HTMLElement>, \"as\"> {\n as?: React.ElementType;\n /** Drop the border + heavier shadow for a floating look. */\n elevated?: boolean;\n /** Adds hover lift effect — translate-y + shadow. For keyboard accessibility pair with `as=\"a\"` or `as=\"button\"`. */\n interactive?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(\n ({ as: Tag = \"div\", className, elevated, interactive, ...props }, ref) => (\n <Tag\n ref={ref}\n className={cn(\n \"bg-card text-card-foreground rounded-kj-xl overflow-hidden border\",\n elevated ? \"border-transparent shadow-kj-lg\" : \"border-border shadow-kj-sm\",\n interactive && \"cursor-pointer transition-all duration-300 hover:-translate-y-1 hover:shadow-kj-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n )\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-[1.35rem] flex flex-col gap-1\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"m-0 text-base font-bold tracking-[-0.01em]\", className)} {...props}>{children}</h3>\n )\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"m-0 text-[0.85rem] text-muted-foreground\", className)} {...props} />\n )\n);\nCardDescription.displayName = \"CardDescription\";\n\n/** Body region with default padding. */\nexport const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-[1.35rem] pb-[1.35rem]\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex gap-2.5 px-[1.35rem] py-[1.1rem] border-t border-border bg-muted/40\", className)}\n {...props}\n />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\n\nexport interface StatProps extends React.HTMLAttributes<HTMLDivElement> {\n label: React.ReactNode;\n value: React.ReactNode;\n /** e.g. \"+12.3% mdm\" */\n delta?: React.ReactNode;\n trend?: \"up\" | \"down\";\n}\n\nexport const Stat = React.forwardRef<HTMLDivElement, StatProps>(\n ({ className, label, value, delta, trend, ...props }, ref) => (\n <Card ref={ref} className={cn(\"p-[1.35rem] flex flex-col gap-2\", className)} {...props}>\n <span className=\"text-[0.78rem] font-semibold uppercase tracking-[0.05em] text-muted-foreground\">\n {label}\n </span>\n <span className=\"text-[2rem] font-bold tracking-[-0.03em] tabular-nums leading-none\">\n {value}\n </span>\n {delta && (\n <span\n className={cn(\n \"inline-flex items-center gap-1 text-[0.8rem] font-semibold\",\n trend === \"down\" ? \"text-danger\" : \"text-success\"\n )}\n >\n {trend === \"down\" ? \"▼\" : \"▲\"} {delta}\n </span>\n )}\n </Card>\n )\n);\nStat.displayName = \"Stat\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst avatarVariants = cva(\n \"grid place-items-center shrink-0 rounded-full font-semibold border-2 border-surface\",\n {\n variants: {\n size: {\n sm: \"h-7 w-7 text-[0.7rem]\",\n md: \"h-9 w-9 text-[0.8rem]\",\n lg: \"h-12 w-12 text-base\",\n },\n tone: {\n secondary: \"bg-secondary text-secondary-foreground\",\n primary: \"bg-primary text-primary-foreground\",\n info: \"bg-info text-white\",\n muted: \"bg-muted text-muted-foreground\",\n },\n },\n defaultVariants: { size: \"md\", tone: \"secondary\" },\n }\n);\n\nexport interface AvatarProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof avatarVariants> {\n /** Image URL; falls back to initials/children when absent. */\n src?: string;\n alt?: string;\n /** Show an online status dot. */\n status?: boolean;\n}\n\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n ({ className, size, tone, src, alt, status, children, ...props }, ref) => {\n const node = (\n <span ref={ref} className={cn(avatarVariants({ size, tone }), \"overflow-hidden\", className)} {...props}>\n {src ? <img src={src} alt={alt} className=\"h-full w-full object-cover\" /> : children}\n </span>\n );\n if (!status) return node;\n return (\n <span className=\"relative inline-flex\">\n {node}\n <span className=\"absolute -right-px -bottom-px h-[0.7rem] w-[0.7rem] rounded-full bg-success border-2 border-surface\" />\n </span>\n );\n }\n);\nAvatar.displayName = \"Avatar\";\n\n/** Overlapping cluster of avatars. */\nexport const AvatarGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex [&>*:not(:first-child)]:-ml-2.5\", className)} {...props} />\n )\n);\nAvatarGroup.displayName = \"AvatarGroup\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\ninterface TabsCtx {\n value: string;\n setValue: (v: string) => void;\n /** Instance-unique prefix so multiple Tabs on one page never share DOM ids. */\n uid: string;\n}\nconst TabsContext = React.createContext<TabsCtx | null>(null);\nfunction useTabs() {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error(\"Tabs.* must be used within <Tabs>\");\n return ctx;\n}\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled active value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport function Tabs({ value, defaultValue, onValueChange, className, children, ...props }: TabsProps) {\n const [internal, setInternal] = React.useState(defaultValue ?? \"\");\n const uid = React.useId();\n const current = value ?? internal;\n const setValue = React.useCallback(\n (v: string) => {\n if (value === undefined) setInternal(v);\n onValueChange?.(v);\n },\n [value, onValueChange]\n );\n return (\n <TabsContext.Provider value={{ value: current, setValue, uid }}>\n <div className={className} {...props}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport const TabsList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, onKeyDown, ...props }, ref) => {\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const container = e.currentTarget;\n const tabs = Array.from(container.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]'));\n if (tabs.length === 0) return;\n\n const activeIndex = tabs.findIndex((tab) => tab.getAttribute(\"aria-selected\") === \"true\");\n let newIndex = activeIndex;\n\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n newIndex = (activeIndex + 1) % tabs.length;\n tabs[newIndex].focus();\n tabs[newIndex].click();\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n newIndex = (activeIndex - 1 + tabs.length) % tabs.length;\n tabs[newIndex].focus();\n tabs[newIndex].click();\n } else if (e.key === \"Home\") {\n e.preventDefault();\n newIndex = 0;\n tabs[newIndex].focus();\n tabs[newIndex].click();\n } else if (e.key === \"End\") {\n e.preventDefault();\n newIndex = tabs.length - 1;\n tabs[newIndex].focus();\n tabs[newIndex].click();\n }\n\n onKeyDown?.(e);\n };\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n onKeyDown={handleKeyDown}\n className={cn(\n \"flex gap-1 border-b border-border overflow-x-auto whitespace-nowrap [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n className\n )}\n {...props}\n />\n );\n }\n);\nTabsList.displayName = \"TabsList\";\n\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n}\n\nexport const TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, children, ...props }, ref) => {\n const { value: current, setValue, uid } = useTabs();\n const active = current === value;\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n id={`tabs-trigger-${uid}-${value}`}\n aria-controls={`tabs-panel-${uid}-${value}`}\n aria-selected={active}\n tabIndex={active ? 0 : -1}\n onClick={() => setValue(value)}\n className={cn(\n \"relative px-[0.9rem] py-2.5 text-sm font-semibold cursor-pointer transition-colors duration-150 outline-none shrink-0 whitespace-nowrap\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:rounded-sm\",\n \"after:content-[''] after:absolute after:left-[0.9rem] after:right-[0.9rem] after:-bottom-px after:h-0.5 after:rounded-sm after:transition-colors\",\n active\n ? \"text-foreground after:bg-primary\"\n : \"text-muted-foreground hover:text-foreground after:bg-transparent\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\nTabsTrigger.displayName = \"TabsTrigger\";\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n}\n\nexport const TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, ...props }, ref) => {\n const { value: current, uid } = useTabs();\n const active = current === value;\n if (!active) return null;\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`tabs-panel-${uid}-${value}`}\n aria-labelledby={`tabs-trigger-${uid}-${value}`}\n tabIndex={0}\n className={cn(\"pt-5 text-[0.9rem] text-muted-foreground outline-none\", className)}\n {...props}\n />\n );\n }\n);\nTabsContent.displayName = \"TabsContent\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\ninterface AccordionCtx {\n open: string[];\n toggle: (v: string) => void;\n}\nconst AccordionContext = React.createContext<AccordionCtx | null>(null);\n\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \"single\" closes others when one opens. */\n type?: \"single\" | \"multiple\";\n defaultValue?: string[];\n}\n\nexport function Accordion({ type = \"single\", defaultValue = [], className, children, ...props }: AccordionProps) {\n const [open, setOpen] = React.useState<string[]>(defaultValue);\n const toggle = React.useCallback(\n (v: string) => {\n setOpen((prev) => {\n const isOpen = prev.includes(v);\n if (type === \"single\") return isOpen ? [] : [v];\n return isOpen ? prev.filter((x) => x !== v) : [...prev, v];\n });\n },\n [type]\n );\n return (\n <AccordionContext.Provider value={{ open, toggle }}>\n <div className={cn(\"border border-border rounded-kj-lg overflow-hidden\", className)} {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nconst ItemContext = React.createContext<string>(\"\");\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n}\n\nexport const AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ className, value, ...props }, ref) => (\n <ItemContext.Provider value={value}>\n <div ref={ref} className={cn(\"border-t border-border first:border-t-0\", className)} {...props} />\n </ItemContext.Provider>\n )\n);\nAccordionItem.displayName = \"AccordionItem\";\n\nexport const AccordionTrigger = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, children, ...props }, ref) => {\n const ctx = React.useContext(AccordionContext)!;\n const value = React.useContext(ItemContext);\n const isOpen = ctx.open.includes(value);\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={isOpen}\n onClick={() => ctx.toggle(value)}\n className={cn(\n \"w-full flex justify-between items-center gap-4 text-left px-[1.2rem] py-4 bg-card text-foreground text-[0.9rem] font-semibold cursor-pointer hover:bg-muted transition-colors\",\n className\n )}\n {...props}\n >\n {children}\n <svg\n className={cn(\"shrink-0 text-muted-foreground transition-transform duration-200\", isOpen && \"rotate-180\")}\n width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n );\n }\n);\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nexport const AccordionContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const ctx = React.useContext(AccordionContext)!;\n const value = React.useContext(ItemContext);\n const isOpen = ctx.open.includes(value);\n return (\n <div\n ref={ref}\n className={cn(\"grid transition-[grid-template-rows] duration-200 ease-out\", isOpen ? \"[grid-template-rows:1fr]\" : \"[grid-template-rows:0fr]\")}\n {...props}\n >\n <div className=\"overflow-hidden\">\n <div className={cn(\"px-[1.2rem] pt-3 pb-4 text-[0.85rem] text-muted-foreground\", className)}>{children}</div>\n </div>\n </div>\n );\n }\n);\nAccordionContent.displayName = \"AccordionContent\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\ninterface MenuCtx {\n open: boolean;\n setOpen: (v: boolean) => void;\n}\nconst MenuContext = React.createContext<MenuCtx | null>(null);\n\nexport function DropdownMenu({ children, className }: { children: React.ReactNode; className?: string }) {\n const [open, setOpen] = React.useState(false);\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n const onEsc = (e: KeyboardEvent) => e.key === \"Escape\" && setOpen(false);\n document.addEventListener(\"mousedown\", onDoc);\n document.addEventListener(\"keydown\", onEsc);\n return () => {\n document.removeEventListener(\"mousedown\", onDoc);\n document.removeEventListener(\"keydown\", onEsc);\n };\n }, [open]);\n\n return (\n <MenuContext.Provider value={{ open, setOpen }}>\n <div ref={ref} className={cn(\"relative inline-block\", className)}>\n {children}\n </div>\n </MenuContext.Provider>\n );\n}\n\nexport const DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean }\n>(({ onClick, asChild, ...props }, ref) => {\n const ctx = React.useContext(MenuContext)!;\n if (asChild) {\n const child = React.Children.only(props.children) as React.ReactElement<\n React.ComponentPropsWithRef<\"button\">\n >;\n return React.cloneElement(child, {\n ref,\n ...props,\n ...child.props,\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n child.props.onClick?.(e);\n },\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": ctx.open,\n });\n }\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open}\n onClick={(e) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n }}\n {...props}\n />\n );\n});\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\";\n\nexport interface DropdownMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: \"start\" | \"end\";\n}\n\nexport function DropdownMenuContent({ className, align = \"start\", children, ...props }: DropdownMenuContentProps) {\n const ctx = React.useContext(MenuContext)!;\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!ctx.open) return;\n const container = ref.current;\n if (container) {\n const items = Array.from(container.querySelectorAll<HTMLButtonElement | HTMLAnchorElement>('[role=\"menuitem\"]'));\n if (items.length > 0) {\n setTimeout(() => items[0].focus(), 50);\n }\n }\n }, [ctx.open]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const container = ref.current;\n if (!container) return;\n\n const items = Array.from(container.querySelectorAll<HTMLElement>('[role=\"menuitem\"]'));\n if (items.length === 0) return;\n\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const nextIndex = (currentIndex + 1) % items.length;\n items[nextIndex].focus();\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prevIndex = (currentIndex - 1 + items.length) % items.length;\n items[prevIndex].focus();\n } else if (e.key === \"Tab\" || e.key === \"Escape\") {\n ctx.setOpen(false);\n }\n };\n\n if (!ctx.open) return null;\n return (\n <div\n ref={ref}\n role=\"menu\"\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className={cn(\n \"absolute top-[calc(100%+6px)] z-40 min-w-[200px] p-1.5 rounded-kj-md bg-surface border border-border shadow-kj-lg outline-none\",\n \"animate-[kjpop_.12s_ease]\",\n align === \"end\" ? \"right-0\" : \"left-0\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport interface DropdownMenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n danger?: boolean;\n icon?: React.ReactNode;\n}\n\nexport const DropdownMenuItem = React.forwardRef<HTMLButtonElement, DropdownMenuItemProps>(\n ({ className, danger, icon, children, onClick, ...props }, ref) => {\n const ctx = React.useContext(MenuContext)!;\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n onClick={(e) => {\n onClick?.(e);\n ctx.setOpen(false);\n }}\n className={cn(\n \"w-full flex items-center gap-2.5 text-left px-2.5 py-2 rounded-kj-sm text-[0.85rem] cursor-pointer transition-colors\",\n \"[&_svg]:h-4 [&_svg]:w-4\",\n danger ? \"text-danger hover:bg-danger-surface\" : \"text-foreground hover:bg-muted\",\n className\n )}\n {...props}\n >\n {icon}\n {children}\n </button>\n );\n }\n);\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nexport function DropdownMenuSeparator({ className }: { className?: string }) {\n return <div className={cn(\"h-px bg-border my-1.5\", className)} role=\"separator\" />;\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport const Breadcrumb = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, children, ...props }, ref) => (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn(\"flex items-center gap-1.5 text-[0.85rem] text-muted-foreground\", className)} {...props}>\n {children}\n </nav>\n )\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport interface BreadcrumbItemProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Marks the trailing current page (non-link, emphasized). */\n current?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef<HTMLAnchorElement, BreadcrumbItemProps>(\n ({ className, current, children, ...props }, ref) => {\n if (current) {\n return (\n <span aria-current=\"page\" className={cn(\"text-foreground font-semibold\", className)}>\n {children}\n </span>\n );\n }\n return (\n <a ref={ref} className={cn(\"text-inherit no-underline hover:text-foreground transition-colors\", className)} {...props}>\n {children}\n </a>\n );\n }\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport function BreadcrumbSeparator() {\n return <span aria-hidden className=\"text-muted-foreground/70\">/</span>;\n}\n","import { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nexport interface PaginationProps {\n page: number;\n pageCount: number;\n onPageChange: (page: number) => void;\n /** How many numbered buttons to show around the edges. Default 5. */\n siblingCount?: number;\n className?: string;\n}\n\nfunction range(start: number, end: number) {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n}\n\n/** Builds a compact page list with ellipses, e.g. [1,2,3,'…',9]. */\nfunction paginate(page: number, pageCount: number): (number | \"…\")[] {\n if (pageCount <= 7) return range(1, pageCount);\n const left = Math.max(2, page - 1);\n const right = Math.min(pageCount - 1, page + 1);\n const items: (number | \"…\")[] = [1];\n if (left > 2) items.push(\"…\");\n items.push(...range(left, right));\n if (right < pageCount - 1) items.push(\"…\");\n items.push(pageCount);\n return items;\n}\n\nconst Chevron = ({ dir }: { dir: \"left\" | \"right\" }) => (\n <svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points={dir === \"left\" ? \"15 18 9 12 15 6\" : \"9 18 15 12 9 6\"} />\n </svg>\n);\n\nexport function Pagination({ page, pageCount, onPageChange, className }: PaginationProps) {\n const items = paginate(page, pageCount);\n return (\n <nav aria-label=\"Paginacja\" className={cn(\"flex items-center gap-1\", className)}>\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label=\"Previous\" disabled={page <= 1} onClick={() => onPageChange(page - 1)}>\n <Chevron dir=\"left\" />\n </Button>\n {items.map((it, i) =>\n it === \"…\" ? (\n <span key={`e${i}`} className=\"px-1 text-muted-foreground select-none\">…</span>\n ) : (\n <Button\n key={it}\n variant={it === page ? \"primary\" : \"ghost\"}\n size=\"icon-sm\"\n aria-current={it === page ? \"page\" : undefined}\n onClick={() => onPageChange(it)}\n >\n {it}\n </Button>\n )\n )}\n <Button variant=\"ghost\" size=\"icon-sm\" aria-label=\"Next\" disabled={page >= pageCount} onClick={() => onPageChange(page + 1)}>\n <Chevron dir=\"right\" />\n </Button>\n </nav>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface BottomNavigationItem {\n id: string;\n label: string;\n href?: string;\n onClick?: () => void;\n icon: React.ReactNode;\n active?: boolean;\n badge?: React.ReactNode;\n}\n\nexport interface BottomNavigationProps extends React.HTMLAttributes<HTMLElement> {\n items: BottomNavigationItem[];\n /** Mode for displaying labels:\n * - 'always': Always show labels for all items.\n * - 'active': Only show label for the active item, hiding others.\n * - 'never': Hide all labels (only show icons).\n */\n showLabels?: \"always\" | \"active\" | \"never\";\n /** If true, uses fixed positioning at the bottom of the viewport with backdrop-blur. */\n fixed?: boolean;\n}\n\nexport const BottomNavigation = React.forwardRef<HTMLElement, BottomNavigationProps>(\n ({ className, items, showLabels = \"always\", fixed = true, ...props }, ref) => {\n return (\n <nav\n ref={ref}\n className={cn(\n \"bg-surface/90 border-t border-border flex items-center justify-around px-4 pt-2 pb-[calc(0.75rem+env(safe-area-inset-bottom,0))] shadow-kj-lg\",\n fixed ? \"fixed bottom-0 left-0 right-0 z-40 backdrop-blur-md\" : \"relative w-full\",\n className\n )}\n {...props}\n >\n {items.map((item) => {\n const isActive = item.active;\n const showLabel = showLabels !== \"never\" && (showLabels === \"always\" || isActive);\n\n const content = (\n <span className=\"flex flex-col items-center justify-center gap-1 w-full relative\">\n <span\n className={cn(\n \"relative flex items-center justify-center p-1 rounded-full transition-all duration-200\",\n isActive \n ? \"text-primary scale-110\" \n : \"text-muted-foreground group-hover:text-foreground group-active:scale-95\"\n )}\n >\n {item.icon}\n {item.badge !== undefined && item.badge !== null && (\n <span className=\"absolute -top-1 -right-1.5 min-w-[16px] h-[16px] px-1 rounded-full bg-primary text-primary-foreground text-[9px] font-bold flex items-center justify-center ring-2 ring-surface\">\n {item.badge}\n </span>\n )}\n </span>\n \n <span\n className={cn(\n \"text-[10px] font-semibold tracking-wide transition-all duration-200 select-none\",\n showLabel ? \"opacity-100 scale-100 h-auto\" : \"opacity-0 scale-75 h-0 overflow-hidden\",\n isActive ? \"text-primary font-bold\" : \"text-muted-foreground group-hover:text-foreground\"\n )}\n >\n {item.label}\n </span>\n \n {/* Subtle active indicator dot */}\n {isActive && (\n <span className=\"absolute -bottom-1.5 w-1 h-1 rounded-full bg-primary animate-fade-in\" />\n )}\n </span>\n );\n\n const itemClass = \"group flex-1 flex flex-col items-center justify-center py-1 cursor-pointer transition-all duration-150 relative focus:outline-none\";\n\n if (item.href) {\n return (\n <a\n key={item.id}\n href={item.href}\n className={itemClass}\n aria-current={isActive ? \"page\" : undefined}\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={item.onClick}\n className={itemClass}\n aria-pressed={isActive}\n >\n {content}\n </button>\n );\n })}\n </nav>\n );\n }\n);\n\nBottomNavigation.displayName = \"BottomNavigation\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/** Rounded, bordered wrapper around a <Table>. */\nexport const TableWrap = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"w-full max-w-full overflow-x-auto border border-border rounded-kj-lg\", className)} {...props} />\n )\n);\nTableWrap.displayName = \"TableWrap\";\n\nexport const Table = React.forwardRef<HTMLTableElement, React.TableHTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <table ref={ref} className={cn(\"w-full border-collapse text-[0.85rem]\", className)} {...props} />\n )\n);\nTable.displayName = \"Table\";\n\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <thead ref={ref} className={className} {...props} />\n);\nTableHeader.displayName = \"TableHeader\";\n\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <tbody ref={ref} className={className} {...props} />\n);\nTableBody.displayName = \"TableBody\";\n\nexport const TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr ref={ref} className={cn(\"transition-colors hover:bg-muted/50\", className)} {...props} />\n )\n);\nTableRow.displayName = \"TableRow\";\n\nexport interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n /** Right-align with tabular numerals. */\n numeric?: boolean;\n}\n\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, numeric, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"px-4 py-3 bg-muted border-b border-border text-[0.72rem] font-semibold uppercase tracking-[0.05em] text-muted-foreground\",\n numeric ? \"text-right\" : \"text-left\",\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = \"TableHead\";\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, numeric, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"px-4 py-3 border-b border-border [tr:last-child_&]:border-b-0\",\n numeric && \"text-right tabular-nums\",\n className\n )}\n {...props}\n />\n )\n);\nTableCell.displayName = \"TableCell\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}\n\n/** CSS-only hover/focus tooltip positioned above the trigger. */\nexport function Tooltip({ content, children, className }: TooltipProps) {\n return (\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n <span className={cn(\"relative inline-flex group\", className)} tabIndex={0}>\n {children}\n <span\n role=\"tooltip\"\n className={cn(\n \"pointer-events-none absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 translate-y-1 whitespace-nowrap\",\n \"rounded-kj-sm bg-foreground text-background text-xs font-medium px-2.5 py-1.5 shadow-kj-md\",\n \"opacity-0 transition-all duration-150 group-hover:opacity-100 group-hover:translate-y-0 group-focus-visible:opacity-100 group-focus-visible:translate-y-0\",\n \"after:content-[''] after:absolute after:top-full after:left-1/2 after:-translate-x-1/2 after:border-[5px] after:border-transparent after:border-t-foreground\"\n )}\n >\n {content}\n </span>\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n /** Max width of the panel. Default 440px. */\n width?: number;\n className?: string;\n showClose?: boolean;\n}\n\nconst ModalContext = React.createContext<{ titleId: string; descId: string } | null>(null);\n\n/** Centered overlay dialog. Closes on backdrop click and Escape. Includes focus trap and restore. */\nexport function Modal({ open, onClose, children, width = 440, className, showClose = true }: ModalProps) {\n const titleId = React.useId();\n const descId = React.useId();\n const containerRef = React.useRef<HTMLDivElement>(null);\n const lastActiveElement = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!open) {\n if (lastActiveElement.current) {\n lastActiveElement.current.focus();\n lastActiveElement.current = null;\n }\n return;\n }\n\n lastActiveElement.current = document.activeElement as HTMLElement;\n\n const container = containerRef.current;\n if (container) {\n const focusables = container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (focusables.length > 0) {\n // Delay slightly for transition to complete\n setTimeout(() => focusables[0].focus(), 50);\n } else {\n container.focus();\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n\n if (e.key === \"Tab\") {\n const container = containerRef.current;\n if (!container) return;\n\n const focusables = Array.from(\n container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n );\n if (focusables.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === first || document.activeElement === container) {\n last.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === last) {\n first.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, onClose]);\n\n return (\n <div\n onClick={(e) => e.target === e.currentTarget && onClose()}\n className={cn(\n \"fixed inset-0 z-[100] grid place-items-center p-6 backdrop-blur-[3px] transition-opacity duration-200\",\n \"bg-[color-mix(in_oklch,#09090b_55%,transparent)]\",\n open ? \"opacity-100 pointer-events-auto\" : \"opacity-0 pointer-events-none\"\n )}\n >\n <ModalContext.Provider value={{ titleId, descId }}>\n <div\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descId}\n tabIndex={-1}\n style={{ maxWidth: width }}\n className={cn(\n \"relative w-full p-7 rounded-kj-2xl bg-surface text-foreground border border-border shadow-kj-lg transition-transform duration-200 outline-none\",\n open ? \"scale-100 translate-y-0\" : \"scale-95 translate-y-2\",\n className\n )}\n >\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"absolute top-4 right-4 p-1.5 rounded-kj-sm text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n >\n <svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n {children}\n </div>\n </ModalContext.Provider>\n </div>\n );\n}\n\nexport function ModalTitle({ className, id, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\n const ctx = React.useContext(ModalContext);\n return <h3 id={id ?? ctx?.titleId} className={cn(\"m-0 mb-2 text-[1.15rem] font-bold tracking-[-0.01em] text-foreground\", className)} {...props}>{children}</h3>;\n}\n\nexport function ModalDescription({ className, id, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\n const ctx = React.useContext(ModalContext);\n return <p id={id ?? ctx?.descId} className={cn(\"m-0 text-[0.9rem] text-muted-foreground\", className)} {...props} />;\n}\n\nexport function ModalActions({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex gap-2.5 justify-end mt-6\", className)} {...props} />;\n}\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type ToastTone = \"default\" | \"success\" | \"danger\";\nexport interface ToastOptions {\n message: React.ReactNode;\n tone?: ToastTone;\n /** Auto-dismiss after ms. Default 3200. Pass 0 to keep open. */\n duration?: number;\n}\ninterface ToastItem extends Required<Omit<ToastOptions, \"duration\">> {\n id: number;\n duration: number;\n leaving?: boolean;\n}\n\ninterface ToastCtx {\n toast: (opts: ToastOptions) => void;\n}\nconst ToastContext = React.createContext<ToastCtx | null>(null);\n\nexport function useToast() {\n const ctx = React.useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used within <ToastProvider>\");\n return ctx;\n}\n\nconst icons: Record<ToastTone, React.ReactNode> = {\n default: (\n <svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-primary\"><circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"M12 16v-4M12 8h.01\" /></svg>\n ),\n success: (\n <svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-success\"><path d=\"M20 6 9 17l-5-5\" /></svg>\n ),\n danger: (\n <svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-danger\"><circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m15 9-6 6M9 9l6 6\" /></svg>\n ),\n};\n\nconst toneBorder: Record<ToastTone, string> = {\n default: \"border-l-primary\",\n success: \"border-l-success\",\n danger: \"border-l-danger\",\n};\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [items, setItems] = React.useState<ToastItem[]>([]);\n const idRef = React.useRef(0);\n\n const remove = React.useCallback((id: number) => {\n setItems((prev) => prev.map((t) => (t.id === id ? { ...t, leaving: true } : t)));\n setTimeout(() => setItems((prev) => prev.filter((t) => t.id !== id)), 250);\n }, []);\n\n const toast = React.useCallback(\n ({ message, tone = \"default\", duration = 3200 }: ToastOptions) => {\n const id = ++idRef.current;\n setItems((prev) => [...prev, { id, message, tone, duration }]);\n if (duration > 0) setTimeout(() => remove(id), duration);\n },\n [remove]\n );\n\n return (\n <ToastContext.Provider value={{ toast }}>\n {children}\n <div className=\"fixed bottom-6 right-6 z-[200] flex flex-col gap-2.5\">\n {items.map((t) => (\n <div\n key={t.id}\n role=\"status\"\n onClick={() => remove(t.id)}\n className={cn(\n \"flex items-center gap-2.5 min-w-[280px] px-4 py-3 cursor-pointer\",\n \"bg-surface border border-border border-l-[3px] rounded-kj-md shadow-kj-lg text-[0.85rem] font-medium\",\n toneBorder[t.tone],\n t.leaving ? \"animate-[kjtoastout_.25s_ease_forwards]\" : \"animate-[kjtoastin_.25s_ease]\"\n )}\n >\n <span className=\"grid place-items-center\">{icons[t.tone]}</span>\n <span>{t.message}</span>\n </div>\n ))}\n </div>\n </ToastContext.Provider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nexport interface PageHeaderProps {\n eyebrow?: string;\n title: string;\n description?: string;\n actions?: React.ReactNode;\n}\n\nexport const PageHeader = React.forwardRef<HTMLElement, PageHeaderProps>(\n ({ eyebrow, title, description, actions }, ref) => (\n <header ref={ref} className=\"py-12 md:py-16\">\n <div className=\"flex flex-col gap-6 md:flex-row md:items-end md:justify-between\">\n <div className=\"space-y-3 max-w-2xl\">\n {eyebrow && (\n <p className=\"font-mono text-xs font-bold uppercase tracking-[0.2em] text-primary\">\n {eyebrow}\n </p>\n )}\n <h1 className=\"font-sans text-4xl font-bold tracking-tight text-foreground sm:text-5xl md:text-6xl\">\n {title}\n </h1>\n {description && (\n <p className=\"text-base leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n )}\n </div>\n {actions && <div className=\"flex flex-wrap gap-3\">{actions}</div>}\n </div>\n </header>\n )\n);\nPageHeader.displayName = \"PageHeader\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type SectionHeaderAlign = \"left\" | \"center\";\nexport type SectionHeaderHeadingLevel = \"h2\" | \"h3\" | \"h4\";\n\nexport interface SectionHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n kicker?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n align?: SectionHeaderAlign;\n headingLevel?: SectionHeaderHeadingLevel;\n divider?: boolean;\n}\n\nexport type SectionHeaderKickerProps = React.HTMLAttributes<HTMLParagraphElement>;\nexport interface SectionHeaderTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n as?: SectionHeaderHeadingLevel;\n}\nexport type SectionHeaderDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;\nexport type SectionHeaderActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SectionHeaderKicker = React.forwardRef<HTMLParagraphElement, SectionHeaderKickerProps>(\n ({ className, children, ...props }, ref) => {\n if (!children) return null;\n return (\n <p\n ref={ref}\n className={cn(\n \"font-mono text-xs font-bold uppercase tracking-[0.2em] text-primary\",\n className\n )}\n {...props}\n >\n {children}\n </p>\n );\n }\n);\nSectionHeaderKicker.displayName = \"SectionHeaderKicker\";\n\nconst SectionHeaderTitle = React.forwardRef<HTMLHeadingElement, SectionHeaderTitleProps>(\n ({ className, as: Component = \"h2\", children, ...props }, ref) => {\n if (!children) return null;\n return (\n <Component\n ref={ref}\n className={cn(\"text-2xl font-bold tracking-tight text-foreground sm:text-3xl\", className)}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\nSectionHeaderTitle.displayName = \"SectionHeaderTitle\";\n\nconst SectionHeaderDescription = React.forwardRef<\n HTMLParagraphElement,\n SectionHeaderDescriptionProps\n>(({ className, children, ...props }, ref) => {\n if (!children) return null;\n return (\n <p\n ref={ref}\n className={cn(\"text-base leading-relaxed text-muted-foreground max-w-2xl\", className)}\n {...props}\n >\n {children}\n </p>\n );\n});\nSectionHeaderDescription.displayName = \"SectionHeaderDescription\";\n\nconst SectionHeaderActions = React.forwardRef<HTMLDivElement, SectionHeaderActionsProps>(\n ({ className, children, ...props }, ref) => {\n if (!children) return null;\n return (\n <div ref={ref} className={cn(\"flex flex-wrap items-center gap-3\", className)} {...props}>\n {children}\n </div>\n );\n }\n);\nSectionHeaderActions.displayName = \"SectionHeaderActions\";\n\nexport const SectionHeader = React.forwardRef<HTMLDivElement, SectionHeaderProps>(\n (\n {\n kicker,\n title,\n description,\n actions,\n align = \"left\",\n headingLevel = \"h2\",\n divider = false,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const isCentered = align === \"center\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"space-y-4\",\n isCentered ? \"text-center items-center mx-auto max-w-3xl\" : \"md:flex md:items-end md:justify-between md:space-y-0\",\n divider && \"border-b border-border pb-6\",\n className\n )}\n {...props}\n >\n {children ? (\n children\n ) : (\n <>\n <div\n className={cn(\n \"space-y-2\",\n isCentered && \"flex flex-col items-center\"\n )}\n >\n {kicker && <SectionHeaderKicker>{kicker}</SectionHeaderKicker>}\n {title && <SectionHeaderTitle as={headingLevel}>{title}</SectionHeaderTitle>}\n {description && (\n <SectionHeaderDescription>{description}</SectionHeaderDescription>\n )}\n </div>\n {actions && (\n <SectionHeaderActions className={cn(isCentered && \"justify-center mt-4\")}>\n {actions}\n </SectionHeaderActions>\n )}\n </>\n )}\n </div>\n );\n }\n) as React.ForwardRefExoticComponent<SectionHeaderProps & React.RefAttributes<HTMLDivElement>> & {\n Kicker: typeof SectionHeaderKicker;\n Title: typeof SectionHeaderTitle;\n Description: typeof SectionHeaderDescription;\n Actions: typeof SectionHeaderActions;\n};\n\nSectionHeader.displayName = \"SectionHeader\";\nSectionHeader.Kicker = SectionHeaderKicker;\nSectionHeader.Title = SectionHeaderTitle;\nSectionHeader.Description = SectionHeaderDescription;\nSectionHeader.Actions = SectionHeaderActions;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ className, icon, title, description, action, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col items-center justify-center text-center p-8 border border-dashed border-border rounded-kj-lg bg-muted/20 min-h-[300px]\",\n className\n )}\n {...props}\n >\n {icon && (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted text-muted-foreground mb-4 [&_svg]:h-6 [&_svg]:w-6\">\n {icon}\n </div>\n )}\n <h3 className=\"text-base font-bold text-foreground mb-1\">{title}</h3>\n {description && (\n <p className=\"text-sm text-muted-foreground max-w-sm mb-6 leading-relaxed\">\n {description}\n </p>\n )}\n {action && <div className=\"flex items-center gap-3\">{action}</div>}\n </div>\n )\n);\nEmptyState.displayName = \"EmptyState\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\n\nexport interface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n value: string | number;\n trend?: string;\n trendDirection?: \"up\" | \"down\" | \"neutral\";\n description?: string;\n icon?: React.ReactNode;\n}\n\nexport const MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\n ({ className, title, value, trend, trendDirection = \"neutral\", description, icon, ...props }, ref) => {\n const trendColor = {\n up: \"text-success bg-success-surface border-success/20\",\n down: \"text-danger bg-danger-surface border-danger/20\",\n neutral: \"text-muted-foreground bg-muted border-border/20\",\n }[trendDirection];\n\n return (\n <Card ref={ref} className={cn(\"p-6\", className)} {...props}>\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-xs font-mono font-semibold uppercase tracking-[0.1em] text-muted-foreground\">\n {title}\n </span>\n {icon && <span className=\"text-muted-foreground shrink-0 [&_svg]:h-4 [&_svg]:w-4\">{icon}</span>}\n </div>\n <div className=\"flex items-baseline gap-2.5 mb-1.5\">\n <span className=\"text-3xl font-bold tracking-tight text-foreground\">{value}</span>\n {trend && (\n <span className={cn(\"text-[0.75rem] font-bold px-2 py-0.5 rounded-full border\", trendColor)}>\n {trend}\n </span>\n )}\n </div>\n {description && <p className=\"text-xs text-muted-foreground\">{description}</p>}\n </Card>\n );\n }\n);\nMetricCard.displayName = \"MetricCard\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Table, TableWrap, TableHeader, TableBody, TableRow, TableHead, TableCell } from \"./table\";\nimport { Spinner } from \"./spinner\";\nimport { Alert } from \"./alert\";\nimport { EmptyState } from \"./empty-state\";\n\nexport interface DataTableColumn<T> {\n header: React.ReactNode;\n accessor: (row: T) => React.ReactNode;\n className?: string;\n align?: \"left\" | \"center\" | \"right\";\n sortable?: boolean;\n sortKey?: string;\n}\n\nexport interface DataTableProps<T> extends React.HTMLAttributes<HTMLDivElement> {\n columns: DataTableColumn<T>[];\n data: T[];\n loading?: boolean;\n error?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n emptyAction?: React.ReactNode;\n\n // Production-grade features\n getRowKey?: (row: T, index: number) => React.Key;\n onRowClick?: (row: T) => void;\n toolbar?: React.ReactNode;\n pagination?: React.ReactNode;\n selectedRows?: Set<React.Key>;\n onSelectionChange?: (selectedKeys: Set<React.Key>) => void;\n\n // Sorting props\n sortBy?: string;\n sortDirection?: \"asc\" | \"desc\";\n onSort?: (sortKey: string, direction: \"asc\" | \"desc\") => void;\n}\n\nexport function DataTable<T>({\n className,\n columns,\n data,\n loading = false,\n error,\n emptyTitle = \"No data available\",\n emptyDescription = \"There are no records to display at this time.\",\n emptyAction,\n getRowKey,\n onRowClick,\n toolbar,\n pagination,\n selectedRows,\n onSelectionChange,\n sortBy,\n sortDirection,\n onSort,\n ...props\n}: DataTableProps<T>) {\n const getRowId = React.useCallback(\n (row: T, index: number) => (getRowKey ? getRowKey(row, index) : index),\n [getRowKey]\n );\n\n const isSelectionActive = selectedRows !== undefined && onSelectionChange !== undefined;\n\n const allSelected = React.useMemo(() => {\n if (!isSelectionActive || data.length === 0) return false;\n return data.every((row, idx) => selectedRows.has(getRowId(row, idx)));\n }, [isSelectionActive, data, selectedRows, getRowId]);\n\n const someSelected = React.useMemo(() => {\n if (!isSelectionActive || data.length === 0) return false;\n const selectedCount = data.filter((row, idx) => selectedRows.has(getRowId(row, idx))).length;\n return selectedCount > 0 && selectedCount < data.length;\n }, [isSelectionActive, data, selectedRows, getRowId]);\n\n const headerCheckboxRef = React.useRef<HTMLInputElement>(null);\n React.useEffect(() => {\n if (headerCheckboxRef.current) {\n headerCheckboxRef.current.indeterminate = someSelected;\n }\n }, [someSelected]);\n\n const handleSelectAll = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!onSelectionChange) return;\n const checked = e.target.checked;\n const next = new Set<React.Key>(selectedRows);\n data.forEach((row, idx) => {\n const id = getRowId(row, idx);\n if (checked) {\n next.add(id);\n } else {\n next.delete(id);\n }\n });\n onSelectionChange(next);\n };\n\n const handleSelectRow = (row: T, idx: number, checked: boolean) => {\n if (!onSelectionChange || !selectedRows) return;\n const id = getRowId(row, idx);\n const next = new Set<React.Key>(selectedRows);\n if (checked) {\n next.add(id);\n } else {\n next.delete(id);\n }\n onSelectionChange(next);\n };\n\n return (\n <div className={cn(\"flex flex-col gap-4 w-full\", className)}>\n {/* Toolbar Slot */}\n {toolbar && (\n <div className=\"flex flex-col sm:flex-row items-stretch sm:items-center justify-between gap-3\">\n {toolbar}\n </div>\n )}\n\n <TableWrap className=\"relative overflow-x-auto overflow-y-hidden [scroll-behavior:smooth] [-webkit-overflow-scrolling:touch]\" {...props}>\n <Table>\n <TableHeader>\n <TableRow>\n {/* Row selection checkbox in header */}\n {isSelectionActive && (\n <TableHead className=\"w-12 px-4 text-center\">\n <div className=\"inline-flex items-center justify-center\">\n <input\n type=\"checkbox\"\n ref={headerCheckboxRef}\n checked={allSelected}\n onChange={handleSelectAll}\n aria-label=\"Select all rows\"\n className=\"h-4 w-4 rounded border-input text-primary focus:ring-ring\"\n />\n </div>\n </TableHead>\n )}\n {columns.map((col, idx) => {\n const alignClass = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n }[col.align || \"left\"];\n const isSortable = col.sortable && onSort && col.sortKey;\n const isSortedActive = sortBy && col.sortKey === sortBy;\n const ariaSort = isSortable\n ? (isSortedActive\n ? (sortDirection === \"asc\" ? \"ascending\" : \"descending\")\n : \"none\")\n : undefined;\n\n return (\n <TableHead\n key={idx}\n className={cn(\n alignClass,\n isSortable && \"p-0 hover:bg-muted/30 transition-colors\",\n col.className\n )}\n aria-sort={ariaSort}\n >\n {isSortable ? (\n <button\n type=\"button\"\n onClick={() => {\n if (!col.sortKey) return;\n const nextDirection =\n isSortedActive && sortDirection === \"asc\" ? \"desc\" : \"asc\";\n onSort(col.sortKey, nextDirection);\n }}\n className={cn(\n \"w-full px-4 py-3 flex items-center gap-1.5 font-semibold text-[0.72rem] uppercase tracking-[0.05em] text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 transition-colors cursor-pointer\",\n {\n \"justify-start text-left\": col.align === \"left\" || !col.align,\n \"justify-center text-center\": col.align === \"center\",\n \"justify-end text-right\": col.align === \"right\",\n }\n )}\n >\n <span>{col.header}</span>\n <span className=\"text-[10px] text-muted-foreground shrink-0 select-none\">\n {isSortedActive ? (\n sortDirection === \"asc\" ? \"▲\" : \"▼\"\n ) : (\n \"⇅\"\n )}\n </span>\n </button>\n ) : (\n <div className={cn(\"inline-flex items-center gap-1.5\", alignClass === \"text-right\" && \"justify-end w-full\")}>\n {col.header}\n </div>\n )}\n </TableHead>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading && data.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length + (isSelectionActive ? 1 : 0)} className=\"h-64 text-center\">\n <div className=\"flex flex-col items-center justify-center gap-3\">\n <Spinner size={32} />\n <span className=\"text-sm text-muted-foreground\">Loading dataset...</span>\n </div>\n </TableCell>\n </TableRow>\n ) : error ? (\n <TableRow>\n <TableCell colSpan={columns.length + (isSelectionActive ? 1 : 0)} className=\"p-8\">\n <Alert variant=\"danger\" title=\"Error loading data\">\n {error}\n </Alert>\n </TableCell>\n </TableRow>\n ) : data.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length + (isSelectionActive ? 1 : 0)} className=\"p-0\">\n <EmptyState\n title={emptyTitle}\n description={emptyDescription}\n action={emptyAction}\n className=\"border-none bg-transparent rounded-none py-16\"\n />\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rowIdx) => {\n const rowKey = getRowId(row, rowIdx);\n const isSelected = isSelectionActive && selectedRows.has(rowKey);\n return (\n <TableRow\n key={rowKey}\n onClick={() => onRowClick && onRowClick(row)}\n className={cn(\n onRowClick && \"cursor-pointer hover:bg-muted/40 transition-colors\",\n isSelected && \"bg-primary/5 hover:bg-primary/10\"\n )}\n >\n {isSelectionActive && (\n <TableCell\n className=\"w-12 px-4 text-center\"\n onClick={(e) => {\n // Stop propagation to prevent triggering onRowClick\n e.stopPropagation();\n }}\n >\n <div className=\"inline-flex items-center justify-center\">\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => handleSelectRow(row, rowIdx, e.target.checked)}\n aria-label={`Select row ${rowIdx + 1}`}\n className=\"h-4 w-4 rounded border-input text-primary focus:ring-ring\"\n />\n </div>\n </TableCell>\n )}\n {columns.map((col, colIdx) => {\n const alignClass = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n }[col.align || \"left\"];\n return (\n <TableCell key={colIdx} className={cn(alignClass, col.className)}>\n {col.accessor(row)}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </Table>\n {loading && data.length > 0 && (\n <div className=\"absolute inset-0 bg-background/50 backdrop-blur-[1px] grid place-items-center z-10 transition-opacity duration-150\">\n <Spinner size={36} />\n </div>\n )}\n </TableWrap>\n\n {/* Pagination Slot */}\n {pagination && <div className=\"flex items-center justify-end w-full\">{pagination}</div>}\n </div>\n );\n}\nDataTable.displayName = \"DataTable\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nexport interface ErrorStateProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n message: string;\n onRetry?: () => void;\n retryLabel?: string;\n}\n\nexport const ErrorState = React.forwardRef<HTMLDivElement, ErrorStateProps>(\n ({ className, title = \"Wystąpił błąd\", message, onRetry, retryLabel = \"Spróbuj ponownie\", ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col items-center justify-center text-center p-8 border border-danger/25 rounded-kj-lg bg-danger-surface/20 min-h-[300px]\",\n className\n )}\n {...props}\n >\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-danger-surface border border-danger/30 text-danger mb-4\">\n <svg fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} viewBox=\"0 0 24 24\" className=\"h-6 w-6\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z\" />\n </svg>\n </div>\n <h3 className=\"text-base font-bold text-foreground mb-1\">{title}</h3>\n <p className=\"text-sm text-muted-foreground max-w-sm mb-6 leading-relaxed\">\n {message}\n </p>\n {onRetry && (\n <Button size=\"sm\" variant=\"danger\" onClick={onRetry}>\n {retryLabel}\n </Button>\n )}\n </div>\n )\n);\nErrorState.displayName = \"ErrorState\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"circular\" | \"rectangular\";\n width?: string | number;\n height?: string | number;\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, variant = \"rectangular\", width, height, style, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"animate-pulse bg-muted/40\",\n variant === \"text\" && \"h-3 w-4/5 rounded-sm my-1.5\",\n variant === \"circular\" && \"rounded-full\",\n variant === \"rectangular\" && \"rounded-kj-md\",\n className\n )}\n style={{\n width,\n height,\n ...style,\n }}\n {...props}\n />\n )\n);\nSkeleton.displayName = \"Skeleton\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface DashboardShellProps extends React.HTMLAttributes<HTMLDivElement> {\n sidebar?: React.ReactNode;\n topbar?: React.ReactNode;\n children: React.ReactNode;\n sidebarWidth?: string;\n contentWidth?: \"default\" | \"wide\" | \"full\";\n stickyTopbar?: boolean;\n mobileSidebar?: React.ReactNode;\n}\n\nexport const DashboardShell = React.forwardRef<HTMLDivElement, DashboardShellProps>(\n (\n {\n className,\n sidebar,\n topbar,\n children,\n sidebarWidth = \"md:w-64\",\n contentWidth = \"default\",\n stickyTopbar = true,\n mobileSidebar,\n ...props\n },\n ref\n ) => {\n const [mobileOpen, setMobileOpen] = React.useState(false);\n const contentWidthClass = {\n default: \"max-w-7xl w-full mx-auto\",\n wide: \"max-w-screen-2xl w-full mx-auto\",\n full: \"max-w-none w-full\",\n }[contentWidth];\n\n return (\n <div\n ref={ref}\n className={cn(\n \"min-h-screen bg-canvas text-foreground flex flex-col md:flex-row\",\n className\n )}\n {...props}\n >\n {/* Sidebar (sticky desk, scrollable inside) */}\n {sidebar && (\n <aside\n className={cn(\n \"border-r border-border bg-surface shrink-0 z-20\",\n mobileSidebar ? \"hidden md:flex\" : \"w-full md:flex\",\n sidebarWidth\n )}\n >\n <div className={cn(\"sticky top-0 w-full flex flex-col\", mobileSidebar ? \"h-screen\" : \"h-auto md:h-screen\")}>\n {sidebar}\n </div>\n </aside>\n )}\n\n {/* Mobile Navigation Drawer */}\n {mobileSidebar && mobileOpen && (\n <div\n onClick={() => setMobileOpen(false)}\n className=\"fixed inset-0 z-50 md:hidden bg-[color-mix(in_oklch,#09090b_45%,transparent)] backdrop-blur-[2px] transition-opacity duration-300\"\n >\n <aside\n onClick={(e) => e.stopPropagation()}\n className=\"w-72 h-full bg-surface border-r border-border flex flex-col shadow-kj-lg\"\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border\">\n <span className=\"text-xs font-bold uppercase tracking-wider text-muted-foreground\">Navigation</span>\n <button\n type=\"button\"\n onClick={() => setMobileOpen(false)}\n className=\"p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n >\n <svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div className=\"flex-1 overflow-y-auto\">\n {mobileSidebar}\n </div>\n </aside>\n </div>\n )}\n\n {/* Main Content Area */}\n <div className=\"flex-1 flex flex-col min-w-0\">\n {/* Top Header Navigation */}\n {topbar && (\n <header\n className={cn(\n \"h-14 border-b border-border bg-surface flex items-center px-6 z-10 shrink-0 gap-4\",\n stickyTopbar && \"sticky top-0\"\n )}\n >\n {mobileSidebar && (\n <button\n type=\"button\"\n onClick={() => setMobileOpen(true)}\n className=\"md:hidden p-1.5 -ml-1.5 rounded-kj-sm text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n aria-label=\"Open navigation\"\n >\n <svg width={20} height={20} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n </button>\n )}\n {topbar}\n </header>\n )}\n\n {/* Inner page container */}\n <main className={cn(\"flex-1 p-6 md:p-8\", contentWidthClass)}>\n {children}\n </main>\n </div>\n </div>\n );\n }\n);\nDashboardShell.displayName = \"DashboardShell\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SettingsLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n sidebar: React.ReactNode;\n children: React.ReactNode;\n title?: string;\n description?: string;\n}\n\nexport const SettingsLayout = React.forwardRef<HTMLDivElement, SettingsLayoutProps>(\n ({ className, sidebar, children, title, description, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"space-y-6 w-full\", className)} {...props}>\n {/* Header */}\n {(title || description) && (\n <div className=\"border-b border-border pb-4\">\n {title && <h1 className=\"text-2xl font-bold tracking-tight text-foreground\">{title}</h1>}\n {description && <p className=\"text-sm text-muted-foreground mt-1\">{description}</p>}\n </div>\n )}\n\n {/* Layout */}\n <div className=\"flex flex-col lg:flex-row gap-8\">\n {/* Sidebar Tabs / Navigation */}\n <aside className=\"lg:w-1/4 shrink-0\">\n <nav className=\"flex flex-row lg:flex-col gap-1 overflow-x-auto lg:overflow-x-visible pb-2 lg:pb-0\">\n {sidebar}\n </nav>\n </aside>\n\n {/* Content */}\n <div className=\"flex-1 max-w-3xl\">\n {children}\n </div>\n </div>\n </div>\n );\n }\n);\nSettingsLayout.displayName = \"SettingsLayout\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Button, buttonVariants } from \"./button\";\n\nexport interface DetailPageLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n description?: string;\n backHref?: string;\n backLabel?: string;\n onBackClick?: () => void;\n actions?: React.ReactNode;\n aside?: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport const DetailPageLayout = React.forwardRef<HTMLDivElement, DetailPageLayoutProps>(\n ({ className, title, description, backHref, backLabel = \"Back\", onBackClick, actions, aside, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"space-y-6 w-full\", className)} {...props}>\n {/* Header/Top Area */}\n <div className=\"flex flex-col gap-3\">\n {(backHref || onBackClick) && (\n <div>\n {backHref ? (\n <a\n href={backHref}\n className={cn(\n buttonVariants({ variant: \"ghost\", size: \"sm\" }),\n \"-ml-3 h-8 text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5\"\n )}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" className=\"h-4 w-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 19.5 8.25 12l7.5-7.5\" />\n </svg>\n {backLabel}\n </a>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3 h-8 text-muted-foreground hover:text-foreground\"\n onClick={onBackClick}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" className=\"h-4 w-4 mr-1.5\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15.75 19.5 8.25 12l7.5-7.5\" />\n </svg>\n {backLabel}\n </Button>\n )}\n </div>\n )}\n\n <div className=\"flex flex-col md:flex-row md:items-center md:justify-between gap-4\">\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-bold tracking-tight text-foreground\">{title}</h1>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2 shrink-0\">{actions}</div>}\n </div>\n </div>\n\n {/* Content Body Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8 items-start\">\n <div className={cn(\"space-y-6\", aside ? \"lg:col-span-2\" : \"lg:col-span-3\")}>\n {children}\n </div>\n {aside && (\n <aside className=\"space-y-6 lg:col-span-1 bg-surface border border-border rounded-kj-xl p-6 shadow-kj-xs\">\n {aside}\n </aside>\n )}\n </div>\n </div>\n );\n }\n);\nDetailPageLayout.displayName = \"DetailPageLayout\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Input } from \"./input\";\n\nexport interface TableToolbarProps extends React.HTMLAttributes<HTMLDivElement> {\n searchQuery?: string;\n onSearchChange?: (query: string) => void;\n searchPlaceholder?: string;\n actions?: React.ReactNode;\n filters?: React.ReactNode;\n}\n\nexport const TableToolbar = React.forwardRef<HTMLDivElement, TableToolbarProps>(\n ({ className, searchQuery, onSearchChange, searchPlaceholder = \"Search...\", actions, filters, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col sm:flex-row items-stretch sm:items-center justify-between gap-3 w-full pb-1\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-1 flex-col sm:flex-row items-stretch sm:items-center gap-2 max-w-xl\">\n {onSearchChange && (\n <Input\n type=\"search\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n className=\"sm:w-64\"\n leadingIcon={\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" className=\"h-4 w-4\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\" />\n </svg>\n }\n />\n )}\n {filters && <div className=\"flex items-center gap-2\">{filters}</div>}\n </div>\n {actions && (\n <div className=\"flex items-center gap-2 shrink-0 justify-end\">\n {actions}\n </div>\n )}\n </div>\n );\n }\n);\nTableToolbar.displayName = \"TableToolbar\";\n","import { Modal, ModalTitle, ModalDescription, ModalActions } from \"./modal\";\nimport { Button } from \"./button\";\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n description: string;\n confirmLabel?: string;\n cancelLabel?: string;\n tone?: \"danger\" | \"primary\" | \"success\";\n loading?: boolean;\n}\n\nexport function ConfirmDialog({\n open,\n onClose,\n onConfirm,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n tone = \"primary\",\n loading = false,\n}: ConfirmDialogProps) {\n const toneButtonVariant = {\n danger: \"danger\" as const,\n primary: \"primary\" as const,\n success: \"secondary\" as const, // standard secondary in our system is teal (success-aligned)\n }[tone];\n\n return (\n <Modal open={open} onClose={onClose} width={400} showClose={!loading}>\n <ModalTitle>{title}</ModalTitle>\n <ModalDescription>{description}</ModalDescription>\n <ModalActions>\n <Button variant=\"outline\" onClick={onClose} disabled={loading}>\n {cancelLabel}\n </Button>\n <Button variant={toneButtonVariant} onClick={onConfirm} loading={loading}>\n {confirmLabel}\n </Button>\n </ModalActions>\n </Modal>\n );\n}\nConfirmDialog.displayName = \"ConfirmDialog\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: string;\n description?: string;\n width?: string;\n side?: \"right\" | \"left\";\n}\n\nexport function Drawer({\n open,\n onClose,\n children,\n title,\n description,\n width = \"max-w-md\",\n side = \"right\",\n}: DrawerProps) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const lastActiveElement = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!open) {\n if (lastActiveElement.current) {\n lastActiveElement.current.focus();\n lastActiveElement.current = null;\n }\n return;\n }\n\n lastActiveElement.current = document.activeElement as HTMLElement;\n\n const container = containerRef.current;\n if (container) {\n const focusables = container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (focusables.length > 0) {\n setTimeout(() => focusables[0].focus(), 50);\n } else {\n container.focus();\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n\n if (e.key === \"Tab\") {\n const container = containerRef.current;\n if (!container) return;\n\n const focusables = Array.from(\n container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n );\n if (focusables.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === first || document.activeElement === container) {\n last.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === last) {\n first.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, onClose]);\n\n const sideClasses = {\n right: cn(\n \"right-0 h-full border-l\",\n open ? \"translate-x-0\" : \"translate-x-full\"\n ),\n left: cn(\n \"left-0 h-full border-r\",\n open ? \"translate-x-0\" : \"-translate-x-full\"\n ),\n }[side];\n\n return (\n <div\n onClick={(e) => e.target === e.currentTarget && onClose()}\n className={cn(\n \"fixed inset-0 z-[100] transition-opacity duration-300 backdrop-blur-[2px]\",\n \"bg-[color-mix(in_oklch,#09090b_45%,transparent)]\",\n open ? \"opacity-100 pointer-events-auto\" : \"opacity-0 pointer-events-none\"\n )}\n >\n <div\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={!title ? \"Drawer\" : undefined}\n aria-labelledby={title ? \"drawer-title\" : undefined}\n aria-describedby={description ? \"drawer-description\" : undefined}\n tabIndex={-1}\n className={cn(\n \"fixed top-0 bottom-0 bg-surface border-border flex flex-col w-full shadow-kj-lg transition-transform duration-300 ease-spring outline-none\",\n width,\n sideClasses\n )}\n >\n {/* Header */}\n {(title || description) && (\n <div className=\"flex items-center justify-between p-6 border-b border-border\">\n <div className=\"space-y-1\">\n {title && <h2 id=\"drawer-title\" className=\"text-lg font-bold tracking-tight text-foreground\">{title}</h2>}\n {description && <p id=\"drawer-description\" className=\"text-xs text-muted-foreground\">{description}</p>}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"p-1.5 rounded-kj-sm text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n >\n <svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-6\">\n {children}\n </div>\n </div>\n </div>\n );\n}\nDrawer.displayName = \"Drawer\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface CommandPaletteItem {\n id: string;\n title: string;\n subtitle?: string;\n category?: string;\n shortcut?: string[];\n action: () => void;\n icon?: React.ReactNode;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n items: CommandPaletteItem[];\n placeholder?: string;\n}\n\nexport function CommandPalette({ open, onClose, items, placeholder = \"Type a command or search...\" }: CommandPaletteProps) {\n const [search, setSearch] = React.useState(\"\");\n const [activeIndex, setActiveIndex] = React.useState(0);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n\n // Reset state on open/close\n React.useEffect(() => {\n if (open) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setSearch(\"\");\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setActiveIndex(0);\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n }, [open]);\n\n // Filter items\n const filteredItems = React.useMemo(() => {\n if (!search) return items;\n const cleanSearch = search.toLowerCase();\n return items.filter(\n (item) =>\n item.title.toLowerCase().includes(cleanSearch) ||\n item.subtitle?.toLowerCase().includes(cleanSearch) ||\n item.category?.toLowerCase().includes(cleanSearch)\n );\n }, [search, items]);\n\n // Reset active index when filter changes\n React.useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setActiveIndex(0);\n }, [filteredItems]);\n\n // Handle keyboard navigation\n React.useEffect(() => {\n if (!open) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIndex((prev) => (filteredItems.length === 0 ? 0 : (prev + 1) % filteredItems.length));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((prev) => (filteredItems.length === 0 ? 0 : (prev - 1 + filteredItems.length) % filteredItems.length));\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredItems[activeIndex]) {\n filteredItems[activeIndex].action();\n onClose();\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, filteredItems, activeIndex, onClose]);\n\n // Scroll active item into view\n React.useEffect(() => {\n if (listRef.current) {\n const activeEl = listRef.current.querySelector('[aria-selected=\"true\"]') as HTMLElement;\n if (activeEl) {\n activeEl.scrollIntoView({ block: \"nearest\" });\n }\n }\n }, [activeIndex]);\n\n if (!open) return null;\n\n // Group filtered items by category\n const groups: { [key: string]: typeof filteredItems } = {};\n filteredItems.forEach((item) => {\n const cat = item.category || \"General\";\n if (!groups[cat]) groups[cat] = [];\n groups[cat].push(item);\n });\n\n // Flat list index calculation for grouping\n let absoluteItemIndex = 0;\n\n return (\n <div\n onClick={(e) => e.target === e.currentTarget && onClose()}\n className=\"fixed inset-0 z-[100] grid place-items-start justify-center p-6 md:p-24 backdrop-blur-[3px] bg-[color-mix(in_oklch,#09090b_60%,transparent)]\"\n >\n <div\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n className=\"w-[95vw] max-w-lg bg-surface border border-border rounded-kj-xl shadow-kj-lg flex flex-col overflow-hidden max-h-[500px]\"\n >\n {/* Search Input */}\n <div className=\"p-4 border-b border-border flex items-center gap-2\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" className=\"h-5 w-5 text-muted-foreground shrink-0 ml-1\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\" />\n </svg>\n <input\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-autocomplete=\"list\"\n aria-controls=\"command-palette-listbox\"\n aria-activedescendant={filteredItems.length > 0 ? `cmd-item-${activeIndex}` : undefined}\n placeholder={placeholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"flex-1 font-sans text-[0.95rem] bg-transparent text-foreground placeholder:text-muted-foreground outline-none border-none focus:ring-0\"\n autoFocus\n />\n </div>\n\n {/* Results List */}\n <div className=\"flex-1 overflow-y-auto p-2 min-h-[150px]\">\n {filteredItems.length === 0 ? (\n <div className=\"py-12 text-center text-sm text-muted-foreground\">\n No results found for \"{search}\"\n </div>\n ) : (\n <div\n ref={listRef}\n id=\"command-palette-listbox\"\n role=\"listbox\"\n aria-label=\"Commands\"\n className=\"space-y-4\"\n >\n {Object.entries(groups).map(([cat, itemsInCat]) => (\n <div key={cat} role=\"group\" aria-labelledby={`cmd-cat-${cat}`} className=\"space-y-1\">\n <div\n id={`cmd-cat-${cat}`}\n className=\"px-3 py-1 text-[0.65rem] font-bold uppercase tracking-wider text-muted-foreground\"\n >\n {cat}\n </div>\n {itemsInCat.map((item) => {\n const currentIdx = absoluteItemIndex++;\n const isActive = currentIdx === activeIndex;\n return (\n <div\n key={item.id}\n id={`cmd-item-${currentIdx}`}\n role=\"option\"\n aria-selected={isActive}\n onClick={() => {\n item.action();\n onClose();\n }}\n className={cn(\n \"flex items-center justify-between gap-3 px-3 py-2.5 rounded-kj-md cursor-pointer select-none transition-colors\",\n isActive ? \"bg-primary/10 text-foreground\" : \"text-muted-foreground hover:bg-muted hover:text-foreground\"\n )}\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n {item.icon && <span className=\"text-muted-foreground [&_svg]:h-[1.1rem] [&_svg]:w-[1.1rem]\">{item.icon}</span>}\n <div className=\"min-w-0 flex flex-col\">\n <span className={cn(\"text-[0.85rem] font-semibold\", isActive ? \"text-primary\" : \"text-foreground\")}>\n {item.title}\n </span>\n {item.subtitle && <span className=\"text-[0.75rem] text-muted-foreground truncate\">{item.subtitle}</span>}\n </div>\n </div>\n {item.shortcut && (\n <div className=\"flex items-center gap-1\">\n {item.shortcut.map((sc, scIdx) => (\n <kbd\n key={scIdx}\n className=\"px-1.5 py-0.5 rounded border border-border bg-subtle text-[10px] font-mono leading-none shadow-kj-xs text-muted-foreground\"\n >\n {sc}\n </kbd>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Footer info */}\n <div className=\"px-4 py-2.5 border-t border-border bg-subtle flex items-center justify-between text-[11px] text-muted-foreground font-medium\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex items-center gap-1\"><kbd className=\"font-mono text-[9px] px-1 border rounded bg-surface\">↑↓</kbd> Navigate</span>\n <span className=\"flex items-center gap-1\"><kbd className=\"font-mono text-[9px] px-1 border rounded bg-surface\">Enter</kbd> Select</span>\n </div>\n <div>\n <kbd className=\"font-mono text-[9px] px-1 border rounded bg-surface\">Esc</kbd> Close\n </div>\n </div>\n </div>\n </div>\n );\n}\nCommandPalette.displayName = \"CommandPalette\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SidebarNavItem {\n id: string;\n label: string;\n href?: string;\n onClick?: () => void;\n active?: boolean;\n icon?: React.ReactNode;\n badge?: React.ReactNode;\n}\n\nexport interface SidebarNavGroup {\n title?: string;\n items: SidebarNavItem[];\n}\n\nexport interface SidebarNavProps extends React.HTMLAttributes<HTMLDivElement> {\n groups: SidebarNavGroup[];\n currentHref?: string;\n}\n\nexport function SidebarNav({ className, groups, currentHref, ...props }: SidebarNavProps) {\n return (\n <div className={cn(\"space-y-6 py-4 px-3 w-full\", className)} {...props}>\n {groups.map((group, groupIdx) => (\n <div key={groupIdx} className=\"space-y-1.5\">\n {group.title && (\n <h4 className=\"px-3 text-[10px] font-bold uppercase tracking-widest text-muted-foreground/85\">\n {group.title}\n </h4>\n )}\n <div className=\"space-y-0.5\">\n {group.items.map((item) => {\n const isActive = item.active || (item.href && currentHref && currentHref === item.href);\n const content = (\n <>\n <span className=\"flex items-center gap-2.5 min-w-0\">\n {item.icon && (\n <span className={cn(\n \"[&_svg]:h-[1.1rem] [&_svg]:w-[1.1rem] shrink-0\",\n isActive ? \"text-primary\" : \"text-muted-foreground group-hover:text-foreground\"\n )}>\n {item.icon}\n </span>\n )}\n <span className=\"truncate\">{item.label}</span>\n </span>\n {item.badge && (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.badge}\n </span>\n )}\n </>\n );\n\n const itemClass = cn(\n \"group flex items-center justify-between gap-3 px-3 py-2 rounded-kj-md text-[0.85rem] font-semibold select-none cursor-pointer transition-all duration-150\",\n isActive\n ? \"bg-primary/10 text-primary border-l-2 border-primary rounded-l-none pl-2.5\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground border-l-2 border-transparent\"\n );\n\n if (item.href) {\n return (\n <a key={item.id} href={item.href} className={itemClass}>\n {content}\n </a>\n );\n }\n\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={item.onClick}\n className={itemClass}\n >\n {content}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n}\nSidebarNav.displayName = \"SidebarNav\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst fabVariants = cva(\n [\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap select-none\",\n \"font-sans font-semibold leading-none\",\n \"border border-transparent rounded-full cursor-pointer shadow-lg\",\n \"transition-[background-color,color,border-color,box-shadow,transform] duration-150\",\n \"active:translate-y-px active:shadow-md\",\n \"focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/45\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n ],\n {\n variants: {\n variant: {\n primary: \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n outline: \"bg-transparent text-foreground border-border hover:bg-muted hover:border-muted-foreground\",\n danger: \"bg-danger text-white hover:brightness-95\",\n },\n size: {\n sm: \"h-10 w-10 p-0 text-sm\",\n md: \"h-14 w-14 p-0 text-base\",\n lg: \"h-16 w-16 p-0 text-lg\",\n },\n position: {\n \"bottom-right\": \"fixed bottom-6 right-6 z-50\",\n \"bottom-left\": \"fixed bottom-6 left-6 z-50\",\n \"bottom-center\": \"fixed bottom-6 left-1/2 -translate-x-1/2 z-50\",\n none: \"relative\",\n },\n },\n defaultVariants: { variant: \"primary\", size: \"md\", position: \"bottom-right\" },\n }\n);\n\nexport interface FabProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\">,\n VariantProps<typeof fabVariants> {\n /** Icon rendered inside the button. */\n icon: React.ReactNode;\n \n /** Text label for accessibility (aria-label). */\n label: string;\n \n /** If true, the FAB will only be visible on mobile screens (< 768px). */\n mobileOnly?: boolean;\n \n /** Shows a spinner and disables interaction. */\n loading?: boolean;\n}\n\nexport const Fab = React.forwardRef<HTMLButtonElement, FabProps>(\n ({ className, variant, size, position, mobileOnly, icon, label, loading, disabled, ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={cn(\n fabVariants({ variant, size, position }),\n mobileOnly && \"md:hidden\",\n className\n )}\n {...props}\n disabled={disabled || loading}\n aria-label={label}\n aria-busy={loading || undefined}\n >\n {loading ? (\n <span\n aria-hidden\n className=\"h-[1.2em] w-[1.2em] rounded-full border-2 border-current border-t-transparent animate-spin\"\n />\n ) : (\n <span className=\"[&_svg]:h-[1.35em] [&_svg]:w-[1.35em] flex items-center justify-center\">\n {icon}\n </span>\n )}\n </button>\n );\n }\n);\nFab.displayName = \"Fab\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface BottomSheetProps {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n maxWidth?: \"max-w-sm\" | \"max-w-md\" | \"max-w-lg\" | \"max-w-xl\" | \"max-w-2xl\";\n className?: string;\n showClose?: boolean;\n}\n\nconst BottomSheetContext = React.createContext<{ titleId: string; descId: string } | null>(null);\n\nexport function BottomSheet({\n open,\n onClose,\n children,\n maxWidth = \"max-w-lg\",\n className,\n showClose = true,\n}: BottomSheetProps) {\n const titleId = React.useId();\n const descId = React.useId();\n const containerRef = React.useRef<HTMLDivElement>(null);\n const lastActiveElement = React.useRef<HTMLElement | null>(null);\n const [mounted, setMounted] = React.useState(open);\n\n React.useEffect(() => {\n if (open) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setMounted(true);\n } else {\n const timer = setTimeout(() => setMounted(false), 200);\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n React.useEffect(() => {\n if (!open) return;\n\n lastActiveElement.current = document.activeElement as HTMLElement;\n\n const container = containerRef.current;\n if (container) {\n const focusables = container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (focusables.length > 0) {\n focusables[0].focus();\n setTimeout(() => {\n if (container.contains(document.activeElement)) return;\n focusables[0].focus();\n }, 50);\n } else {\n container.focus();\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n\n if (e.key === \"Tab\") {\n const container = containerRef.current;\n if (!container) return;\n\n const focusables = Array.from(\n container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n );\n if (focusables.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n if (!container.contains(document.activeElement)) {\n e.preventDefault();\n if (e.shiftKey) {\n last.focus();\n } else {\n first.focus();\n }\n return;\n }\n\n if (e.shiftKey) {\n if (document.activeElement === first || document.activeElement === container) {\n last.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === last) {\n first.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n if (lastActiveElement.current) {\n lastActiveElement.current.focus();\n lastActiveElement.current = null;\n }\n };\n }, [open, onClose]);\n\n if (!open && !mounted) return null;\n\n return (\n <BottomSheetContext.Provider value={{ titleId, descId }}>\n {/* Backdrop overlay */}\n <div\n role=\"presentation\"\n onClick={(e) => e.target === e.currentTarget && onClose()}\n className={cn(\n \"fixed inset-0 z-[100] grid items-end sm:place-items-center p-0 sm:p-6 backdrop-blur-[3px] transition-all duration-200\",\n \"bg-[color-mix(in_oklch,#09090b_55%,transparent)]\",\n open ? \"opacity-100 pointer-events-auto visible\" : \"opacity-0 pointer-events-none invisible\"\n )}\n >\n {/* Panel wrapper */}\n <div\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descId}\n tabIndex={-1}\n className={cn(\n \"relative w-full bg-surface border-t sm:border border-border shadow-kj-lg transition-all duration-200 outline-none\",\n \"rounded-t-kj-2xl sm:rounded-kj-2xl flex flex-col max-h-[85vh] sm:max-h-[90vh]\",\n // Mobile sliding & Desktop scale/opacity transitions\n open\n ? \"translate-y-0 sm:scale-100 sm:opacity-100\"\n : \"translate-y-full sm:scale-95 sm:opacity-0\",\n // Mobile styling vs Desktop styling\n \"bottom-0 sm:bottom-auto\",\n maxWidth,\n className\n )}\n >\n {/* Mobile Drag Handle */}\n <div className=\"flex justify-center py-2 sm:hidden cursor-grab\">\n <div className=\"w-12 h-1.5 rounded-full bg-muted-foreground/20\" />\n </div>\n\n {/* Close button (rendered on top right for desktop modal look) */}\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"absolute top-4 right-4 p-1.5 rounded-kj-sm text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer z-10\"\n >\n <svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n\n {children}\n </div>\n </div>\n </BottomSheetContext.Provider>\n );\n}\n\nexport function BottomSheetHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"p-6 flex flex-col gap-1.5 border-b border-border\", className)} {...props} />;\n}\n\nexport function BottomSheetTitle({ className, id, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {\n const ctx = React.useContext(BottomSheetContext);\n return <h2 id={id ?? ctx?.titleId} className={cn(\"m-0 text-[1.15rem] font-bold tracking-[-0.01em]\", className)} {...props}>{children}</h2>;\n}\n\nexport function BottomSheetDescription({ className, id, ...props }: React.HTMLAttributes<HTMLParagraphElement>) {\n const ctx = React.useContext(BottomSheetContext);\n return <p id={id ?? ctx?.descId} className={cn(\"m-0 text-[0.9rem] text-muted-foreground\", className)} {...props} />;\n}\n\nexport function BottomSheetContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"p-6 overflow-y-auto flex-1\", className)} {...props} />;\n}\n\nexport function BottomSheetFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"p-6 border-t border-border flex gap-2.5 justify-end mt-auto\", className)} {...props} />;\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst kbdVariants = cva(\n \"inline-flex items-center justify-center font-mono font-medium text-muted-foreground bg-muted border border-border border-b-2 rounded-kj-sm select-none\",\n {\n variants: {\n size: {\n sm: \"h-5 min-w-5 px-1 text-[0.68rem]\",\n md: \"h-6 min-w-6 px-1.5 text-[0.78rem]\",\n },\n },\n defaultVariants: { size: \"sm\" },\n }\n);\n\nexport interface KbdProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof kbdVariants> {\n /** Render one <kbd> chip per key (separated by a small gap); children are ignored. */\n keys?: string[];\n}\n\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(\n ({ className, size, keys, children, ...props }, ref) => {\n if (keys && keys.length > 0) {\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n >\n {keys.map((k, i) => (\n <kbd key={i} className={kbdVariants({ size })}>\n {k}\n </kbd>\n ))}\n </span>\n );\n }\n return (\n <kbd ref={ref} className={cn(kbdVariants({ size }), className)} {...props}>\n {children}\n </kbd>\n );\n }\n);\nKbd.displayName = \"Kbd\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The snippet text to display. */\n code: string;\n /** Language label shown in the header when no filename is set (e.g. \"tsx\"). */\n language?: string;\n /** Optional filename label shown in the header; takes precedence over language. */\n filename?: string;\n /** Show the copy-to-clipboard button. */\n copyable?: boolean;\n /** Max height in pixels; content scrolls vertically beyond it. */\n maxHeight?: number;\n}\n\nexport const CodeBlock = React.forwardRef<HTMLDivElement, CodeBlockProps>(\n ({ className, code, language, filename, copyable = true, maxHeight, ...props }, ref) => {\n const [copied, setCopied] = React.useState(false);\n const canCopy = copyable && typeof navigator !== \"undefined\" && !!navigator.clipboard;\n\n const onCopy = () => {\n navigator.clipboard.writeText(code).then(\n () => {\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n },\n () => {\n /* clipboard rejected — keep \"Copy\" label */\n }\n );\n };\n\n const label = filename ?? language;\n\n return (\n <div\n ref={ref}\n className={cn(\"rounded-kj-md border border-border bg-muted/50 overflow-hidden\", className)}\n {...props}\n >\n {(label || canCopy) && (\n <div className=\"flex items-center justify-between gap-2 px-3.5 py-2 border-b border-border\">\n <span className=\"text-[0.72rem] font-mono text-muted-foreground\">{label}</span>\n {canCopy && (\n <button\n type=\"button\"\n onClick={onCopy}\n className=\"text-[0.72rem] font-medium text-muted-foreground hover:text-foreground transition-colors cursor-pointer bg-transparent border-0 p-0\"\n >\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n )}\n </div>\n )}\n <pre\n className=\"m-0 px-3.5 py-3 overflow-x-auto text-[0.8rem] leading-relaxed font-mono text-foreground\"\n style={maxHeight ? { maxHeight, overflowY: \"auto\" } : undefined}\n >\n <code>{code}</code>\n </pre>\n </div>\n );\n }\n);\nCodeBlock.displayName = \"CodeBlock\";\n","import { cn } from \"../lib/cn\";\n\nexport interface SeparatorProps {\n orientation?: \"horizontal\" | \"vertical\";\n /** Purely visual by default (role=\"none\", hidden from a11y tree). Set false for a semantically meaningful divider. */\n decorative?: boolean;\n className?: string;\n}\n\n/** Thin layout divider. Decorative by default; pass decorative={false} for a semantic role=\"separator\". */\nexport function Separator({ orientation = \"horizontal\", decorative = true, className }: SeparatorProps) {\n const semanticProps = decorative\n ? { role: \"none\" as const, \"aria-hidden\": true as const }\n : { role: \"separator\" as const, \"aria-orientation\": orientation };\n\n return (\n <div\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"w-px h-full\",\n className\n )}\n {...semanticProps}\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\ninterface PopoverCtx {\n open: boolean;\n setOpen: (v: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n}\nconst PopoverContext = React.createContext<PopoverCtx | null>(null);\n\nfunction usePopoverContext(part: string): PopoverCtx {\n const ctx = React.useContext(PopoverContext);\n if (!ctx) throw new Error(`${part} must be used inside <Popover>`);\n return ctx;\n}\n\nexport interface PopoverProps {\n /** Trigger and content elements. */\n children: React.ReactNode;\n /** Additional classes for the positioning wrapper. */\n className?: string;\n /** Controlled open state. Omit for uncontrolled behavior. */\n open?: boolean;\n /** Called whenever the open state should change. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function Popover({ children, className, open: openProp, onOpenChange }: PopoverProps) {\n const [openState, setOpenState] = React.useState(false);\n const controlled = openProp !== undefined;\n const open = controlled ? openProp : openState;\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n const ref = React.useRef<HTMLDivElement>(null);\n\n const setOpen = React.useCallback(\n (v: boolean) => {\n if (!controlled) setOpenState(v);\n onOpenChange?.(v);\n },\n [controlled, onOpenChange]\n );\n\n React.useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n const onEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n document.addEventListener(\"keydown\", onEsc);\n return () => {\n document.removeEventListener(\"mousedown\", onDoc);\n document.removeEventListener(\"keydown\", onEsc);\n };\n }, [open, setOpen]);\n\n return (\n <PopoverContext.Provider value={{ open, setOpen, triggerRef }}>\n <div ref={ref} className={cn(\"relative inline-block\", className)}>\n {children}\n </div>\n </PopoverContext.Provider>\n );\n}\n\nexport const PopoverTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean }\n>(({ onClick, asChild, ...props }, ref) => {\n const ctx = usePopoverContext(\"PopoverTrigger\");\n const setRefs = (node: HTMLButtonElement | null) => {\n // eslint-disable-next-line react-hooks/immutability\n ctx.triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n };\n if (asChild) {\n const child = React.Children.only(props.children) as React.ReactElement<\n React.ComponentPropsWithRef<\"button\">\n >;\n return React.cloneElement(child, {\n ref: setRefs,\n ...props,\n ...child.props,\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n child.props.onClick?.(e);\n },\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": ctx.open,\n });\n }\n return (\n <button\n /* eslint-disable-next-line react-hooks/immutability */\n ref={setRefs}\n {...props}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n onClick={(e) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n }}\n />\n );\n});\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\nconst sideAlignClasses: Record<string, string> = {\n \"bottom-start\": \"top-[calc(100%+6px)] left-0\",\n \"bottom-center\": \"top-[calc(100%+6px)] left-1/2 -translate-x-1/2\",\n \"bottom-end\": \"top-[calc(100%+6px)] right-0\",\n \"top-start\": \"bottom-[calc(100%+6px)] left-0\",\n \"top-center\": \"bottom-[calc(100%+6px)] left-1/2 -translate-x-1/2\",\n \"top-end\": \"bottom-[calc(100%+6px)] right-0\",\n \"left-start\": \"right-[calc(100%+6px)] top-0\",\n \"left-center\": \"right-[calc(100%+6px)] top-1/2 -translate-y-1/2\",\n \"left-end\": \"right-[calc(100%+6px)] bottom-0\",\n \"right-start\": \"left-[calc(100%+6px)] top-0\",\n \"right-center\": \"left-[calc(100%+6px)] top-1/2 -translate-y-1/2\",\n \"right-end\": \"left-[calc(100%+6px)] bottom-0\",\n};\n\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Which side of the trigger the panel opens on. */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Alignment along the chosen side. */\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport function PopoverContent({\n className,\n side = \"bottom\",\n align = \"center\",\n children,\n ...props\n}: PopoverContentProps) {\n const ctx = usePopoverContext(\"PopoverContent\");\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (ctx.open) ref.current?.focus();\n }, [ctx.open]);\n\n if (!ctx.open) return null;\n return (\n <div\n ref={ref}\n role=\"dialog\"\n tabIndex={-1}\n className={cn(\n \"absolute z-40 min-w-[200px] p-4 rounded-kj-md bg-surface border border-border shadow-kj-lg outline-none\",\n \"animate-[kjpop_.12s_ease]\",\n sideAlignClasses[`${side}-${align}`],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ninterface ComboboxBaseProps {\n options: ComboboxOption[];\n /** Trigger text when nothing is selected. Default \"Select…\". */\n placeholder?: string;\n /** Search input placeholder inside the popup. Default \"Search…\". */\n searchPlaceholder?: string;\n /** Shown when the filter matches no options. Default \"No results\". */\n emptyMessage?: string;\n disabled?: boolean;\n /** Visual error state (red border + aria-invalid on the trigger). */\n error?: boolean;\n /** Marks the trigger aria-required (buttons have no native `required` attribute). */\n required?: boolean;\n className?: string;\n id?: string;\n name?: string;\n \"aria-describedby\"?: string;\n}\n\nexport type ComboboxProps =\n | (ComboboxBaseProps & {\n multiple?: false;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n })\n | (ComboboxBaseProps & {\n multiple: true;\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n });\n\n// Internal selection is always an array; single mode holds at most one entry.\nfunction toArray(v: string | string[] | undefined): string[] {\n if (v == null) return [];\n return Array.isArray(v) ? v : [v];\n}\n\nexport const Combobox = React.forwardRef<HTMLButtonElement, ComboboxProps>(\n function Combobox(props, ref) {\n const {\n options,\n placeholder = \"Select…\",\n searchPlaceholder = \"Search…\",\n emptyMessage = \"No results\",\n disabled = false,\n error = false,\n required = false,\n className,\n id,\n name,\n \"aria-describedby\": describedBy,\n } = props;\n const multiple = props.multiple ?? false;\n\n const reactId = React.useId();\n const baseId = id ?? reactId;\n const listId = `${baseId}-listbox`;\n const optionId = (i: number) => `${baseId}-opt-${i}`;\n\n const controlled = props.value !== undefined;\n const [internal, setInternal] = React.useState<string[]>(() => toArray(props.defaultValue));\n const selected = controlled ? toArray(props.value) : internal;\n\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const [activeIndex, setActiveIndex] = React.useState(0);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n\n const setTriggerRef = (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n };\n\n const filtered = React.useMemo(() => {\n const q = search.trim().toLowerCase();\n return q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options;\n }, [search, options]);\n\n const firstEnabled = React.useCallback(() => {\n const i = filtered.findIndex((o) => !o.disabled);\n return i === -1 ? 0 : i;\n }, [filtered]);\n\n const labelFor = (v: string) => options.find((o) => o.value === v)?.label ?? v;\n\n const emit = (next: string[]) => {\n if (!controlled) setInternal(next);\n if (props.multiple) {\n props.onChange?.(next);\n } else {\n props.onChange?.(next[0] ?? \"\");\n }\n };\n\n const closePopup = React.useCallback(() => {\n setOpen(false);\n setSearch(\"\");\n }, []);\n\n const openPopup = () => {\n if (!disabled) setOpen(true);\n };\n\n const handleSelect = (opt: ComboboxOption) => {\n if (opt.disabled) return;\n if (multiple) {\n const next = selected.includes(opt.value)\n ? selected.filter((v) => v !== opt.value)\n : [...selected, opt.value];\n emit(next);\n inputRef.current?.focus();\n } else {\n emit([opt.value]);\n closePopup();\n triggerRef.current?.focus();\n }\n };\n\n const removeValue = (value: string) => {\n emit(selected.filter((v) => v !== value));\n };\n\n // Reset the active option to the first enabled row on open / filter change.\n React.useEffect(() => {\n if (open) setActiveIndex(firstEnabled());\n }, [open, firstEnabled]);\n\n // Autofocus the search input when the popup opens.\n React.useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n\n // Outside-click dismissal.\n React.useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) closePopup();\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, closePopup]);\n\n // Keep the active option scrolled into view.\n React.useEffect(() => {\n const el = listRef.current?.querySelector('[data-active=\"true\"]') as HTMLElement | null;\n el?.scrollIntoView({ block: \"nearest\" });\n }, [activeIndex]);\n\n const moveActive = (dir: 1 | -1) => {\n if (filtered.length === 0) return;\n setActiveIndex((prev) => {\n let i = prev;\n for (let step = 0; step < filtered.length; step++) {\n i = (i + dir + filtered.length) % filtered.length;\n if (!filtered[i]?.disabled) return i;\n }\n return prev;\n });\n };\n\n const onInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveActive(-1);\n break;\n case \"Home\":\n e.preventDefault();\n setActiveIndex(firstEnabled());\n break;\n case \"End\":\n e.preventDefault();\n for (let i = filtered.length - 1; i >= 0; i--) {\n if (!filtered[i].disabled) {\n setActiveIndex(i);\n break;\n }\n }\n break;\n case \"Enter\":\n e.preventDefault();\n if (filtered[activeIndex]) handleSelect(filtered[activeIndex]);\n break;\n case \"Escape\":\n e.preventDefault();\n closePopup();\n triggerRef.current?.focus();\n break;\n case \"Backspace\":\n if (multiple && search === \"\" && selected.length > 0) {\n removeValue(selected[selected.length - 1]);\n }\n break;\n }\n };\n\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPopup();\n }\n };\n\n const showPlaceholder = multiple ? selected.length === 0 : !selected[0];\n\n return (\n <div ref={containerRef} className={cn(\"relative w-full\", className)}>\n <div\n className={cn(\n \"relative flex w-full items-center gap-1.5 flex-wrap border rounded-kj-md bg-surface\",\n \"pl-[0.85rem] pr-9 py-[calc(0.45rem*var(--kj-density,1))] min-h-[calc(2.5rem*var(--kj-density,1))]\",\n \"transition-[border-color,box-shadow] duration-150\",\n \"focus-within:outline-none focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/30\",\n disabled && \"bg-muted cursor-not-allowed\",\n error ? \"border-danger\" : \"border-input\"\n )}\n >\n {multiple &&\n selected.map((value) => (\n <span\n key={value}\n className=\"inline-flex items-center gap-1 rounded-kj-sm bg-primary/10 text-primary text-xs font-medium pl-2 pr-1 py-0.5\"\n >\n {labelFor(value)}\n <button\n type=\"button\"\n aria-label={`Remove ${labelFor(value)}`}\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n removeValue(value);\n }}\n className=\"rounded-full p-0.5 leading-none hover:bg-primary/20\"\n >\n <svg viewBox=\"0 0 24 24\" className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\">\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </button>\n </span>\n ))}\n <button\n ref={setTriggerRef}\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open && filtered.length > 0 ? listId : undefined}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n aria-describedby={describedBy}\n onClick={() => (open ? closePopup() : openPopup())}\n onKeyDown={onTriggerKeyDown}\n className={cn(\n \"flex-1 min-w-[60px] text-left bg-transparent border-none outline-none cursor-pointer text-sm disabled:cursor-not-allowed\",\n showPlaceholder && \"text-muted-foreground\"\n )}\n >\n {multiple\n ? selected.length === 0\n ? placeholder\n : \"\"\n : (selected[0] ? labelFor(selected[0]) : \"\") || placeholder}\n </button>\n {name && multiple &&\n selected.map((v) => <input key={v} type=\"hidden\" name={name} value={v} />)}\n {name && !multiple && (\n <input type=\"hidden\" name={name} value={selected[0] ?? \"\"} />\n )}\n <span className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <svg viewBox=\"0 0 24 24\" className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </span>\n </div>\n\n {open && (\n <div className=\"absolute z-40 top-[calc(100%+6px)] left-0 w-full min-w-[12rem] bg-surface border border-border rounded-kj-md shadow-kj-lg overflow-hidden animate-[kjpop_.12s_ease]\">\n <div className=\"p-2 border-b border-border\">\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={filtered.length > 0 ? listId : undefined}\n aria-activedescendant={filtered[activeIndex] ? optionId(activeIndex) : undefined}\n aria-label={searchPlaceholder}\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onKeyDown={onInputKeyDown}\n className=\"w-full bg-transparent text-sm text-foreground placeholder:text-muted-foreground outline-none px-2 py-1\"\n />\n </div>\n {filtered.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">{emptyMessage}</div>\n ) : (\n <div\n ref={listRef}\n id={listId}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={placeholder}\n className=\"max-h-60 overflow-y-auto p-1\"\n >\n {filtered.map((opt, i) => {\n const isSelected = selected.includes(opt.value);\n const isActive = i === activeIndex;\n return (\n <div\n key={opt.value}\n id={optionId(i)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled || undefined}\n data-active={isActive || undefined}\n onMouseEnter={() => !opt.disabled && setActiveIndex(i)}\n onClick={() => handleSelect(opt)}\n className={cn(\n \"flex items-center justify-between gap-2 px-3 py-2 rounded-kj-sm text-sm cursor-pointer select-none\",\n opt.disabled && \"text-muted-foreground opacity-50 cursor-not-allowed\",\n !opt.disabled && isActive && \"bg-primary/10 text-primary\",\n !opt.disabled && !isActive && \"text-foreground hover:bg-muted\"\n )}\n >\n <span>{opt.label}</span>\n {isSelected && (\n <svg viewBox=\"0 0 24 24\" className=\"h-4 w-4 text-primary shrink-0\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m5 12 5 5L20 7\" />\n </svg>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n);\nCombobox.displayName = \"Combobox\";\n\n// Distributive omit preserves the discriminated union (plain Omit<Union, K>\n// collapses it to the shared keys and drops the `multiple` narrowing).\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\nexport type ComboboxFieldProps = DistributiveOmit<ComboboxProps, \"error\"> & {\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n};\n\nimport { FormField } from \"./form-field\";\n\nexport const ComboboxField = React.forwardRef<HTMLButtonElement, ComboboxFieldProps>(\n function ComboboxField({ label, hint, error, required, className, ...props }, ref) {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <Combobox ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nComboboxField.displayName = \"ComboboxField\";\n","export function startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n\nexport function addDays(d: Date, n: number): Date {\n const r = new Date(d);\n r.setDate(r.getDate() + n);\n return r;\n}\n\nexport function addMonths(d: Date, n: number): Date {\n const r = new Date(d);\n r.setMonth(r.getMonth() + n);\n return r;\n}\n\n// setMonth/setFullYear roll over into the next month when the target month is\n// shorter than the current day-of-month (e.g. Jan 31 + 1 month -> Mar 3, not\n// Feb 28). Clamp the day to the target month's actual length to avoid that.\nfunction clampToMonth(year: number, month: number, day: number): Date {\n const daysInTarget = new Date(year, month + 1, 0).getDate();\n return new Date(year, month, Math.min(day, daysInTarget));\n}\n\nexport function addMonthsClamped(d: Date, n: number): Date {\n return clampToMonth(d.getFullYear(), d.getMonth() + n, d.getDate());\n}\n\nexport function addYearsClamped(d: Date, n: number): Date {\n return clampToMonth(d.getFullYear() + n, d.getMonth(), d.getDate());\n}\n\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\nexport function startOfWeek(d: Date): Date {\n const r = startOfDay(d);\n r.setDate(r.getDate() - r.getDay());\n return r;\n}\n\nexport function buildGridDays(viewMonth: Date): Date[] {\n const gridStart = startOfWeek(startOfMonth(viewMonth));\n return Array.from({ length: 42 }, (_, i) => addDays(gridStart, i));\n}\n\nexport function dateKey(d: Date): string {\n return `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n}\n\n// Local YYYY-MM-DD, not Date#toISOString() — that converts to UTC first and\n// can shift the calendar date across a timezone boundary.\nexport function toISODateString(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n}\n\nexport const monthLabelFormat = new Intl.DateTimeFormat(undefined, { month: \"long\", year: \"numeric\" });\nexport const fullDateFormat = new Intl.DateTimeFormat(undefined, { dateStyle: \"full\" });\nconst weekdayShortFormat = new Intl.DateTimeFormat(undefined, { weekday: \"short\" });\nconst weekdayLongFormat = new Intl.DateTimeFormat(undefined, { weekday: \"long\" });\n\nexport const weekdayLabels = Array.from({ length: 7 }, (_, i) => {\n const d = addDays(startOfWeek(new Date()), i);\n return { key: i, short: weekdayShortFormat.format(d), long: weekdayLongFormat.format(d) };\n});\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n startOfDay,\n isSameDay,\n addDays,\n startOfWeek,\n buildGridDays,\n dateKey,\n addMonthsClamped,\n addYearsClamped,\n fullDateFormat,\n monthLabelFormat,\n weekdayLabels,\n} from \"./calendar-internals\";\n\nexport interface CalendarCellState {\n selected?: boolean;\n rangeStart?: boolean;\n rangeEnd?: boolean;\n inRange?: boolean;\n today?: boolean;\n}\n\nexport interface CalendarGridProps {\n viewMonth: Date;\n isDayDisabled: (d: Date) => boolean;\n cellState: (d: Date) => CalendarCellState;\n onSelectDay: (d: Date) => void;\n /** Fired on hover and on keyboard focus-move within this grid (not on click). */\n onFocusDay?: (d: Date) => void;\n /** Seeds the roving-tabindex focus once, on mount. Not re-synced on later prop changes (matches Calendar's existing behavior). */\n initialFocusDate: Date;\n className?: string;\n}\n\nexport const CalendarGrid = React.forwardRef<HTMLDivElement, CalendarGridProps>(function CalendarGrid(\n { viewMonth, isDayDisabled, cellState, onSelectDay, onFocusDay, initialFocusDate, className },\n ref\n) {\n const gridDays = React.useMemo(() => buildGridDays(viewMonth), [viewMonth]);\n const inViewMonth = (d: Date) => d.getMonth() === viewMonth.getMonth() && d.getFullYear() === viewMonth.getFullYear();\n\n const [focusedDate, setFocusedDate] = React.useState<Date>(() => startOfDay(initialFocusDate));\n const pendingFocusRef = React.useRef(false);\n const gridRef = React.useRef<HTMLDivElement>(null);\n\n const rovingTarget =\n inViewMonth(focusedDate) && !isDayDisabled(focusedDate)\n ? focusedDate\n : gridDays.find((d) => inViewMonth(d) && !isDayDisabled(d)) ?? gridDays.find((d) => inViewMonth(d)) ?? gridDays[0];\n\n const moveFocusTo = (next: Date, viaKeyboard: boolean) => {\n pendingFocusRef.current = viaKeyboard;\n setFocusedDate(next);\n onFocusDay?.(next);\n };\n\n React.useEffect(() => {\n if (!pendingFocusRef.current) return;\n pendingFocusRef.current = false;\n const el = gridRef.current?.querySelector(`[data-date=\"${dateKey(rovingTarget)}\"]`) as HTMLElement | null;\n el?.focus();\n }, [rovingTarget]);\n\n const step = (from: Date, delta: number): Date => {\n let next = addDays(from, delta);\n let guard = 0;\n while (isDayDisabled(next) && guard < 1000) {\n next = addDays(next, delta);\n guard++;\n }\n return isDayDisabled(next) ? from : next;\n };\n\n const selectDay = (d: Date) => {\n if (isDayDisabled(d)) return;\n moveFocusTo(d, false);\n onSelectDay(d);\n };\n\n const onGridKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case \"ArrowRight\":\n e.preventDefault();\n moveFocusTo(step(rovingTarget, 1), true);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n moveFocusTo(step(rovingTarget, -1), true);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n moveFocusTo(step(rovingTarget, 7), true);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveFocusTo(step(rovingTarget, -7), true);\n break;\n case \"Home\": {\n e.preventDefault();\n const target = startOfWeek(rovingTarget);\n moveFocusTo(isDayDisabled(target) ? step(target, 1) : target, true);\n break;\n }\n case \"End\": {\n e.preventDefault();\n const target = addDays(startOfWeek(rovingTarget), 6);\n moveFocusTo(isDayDisabled(target) ? step(target, -1) : target, true);\n break;\n }\n case \"PageUp\": {\n e.preventDefault();\n const target = e.shiftKey ? addYearsClamped(rovingTarget, -1) : addMonthsClamped(rovingTarget, -1);\n moveFocusTo(isDayDisabled(target) ? step(target, -1) : target, true);\n break;\n }\n case \"PageDown\": {\n e.preventDefault();\n const target = e.shiftKey ? addYearsClamped(rovingTarget, 1) : addMonthsClamped(rovingTarget, 1);\n moveFocusTo(isDayDisabled(target) ? step(target, 1) : target, true);\n break;\n }\n case \"Enter\":\n case \" \":\n e.preventDefault();\n selectDay(rovingTarget);\n break;\n }\n };\n\n return (\n <div ref={ref} className={cn(className)}>\n <div ref={gridRef} role=\"grid\" aria-label={monthLabelFormat.format(viewMonth)} onKeyDown={onGridKeyDown}>\n <div role=\"row\" className=\"grid grid-cols-7\">\n {weekdayLabels.map((w) => (\n <div\n key={w.key}\n role=\"columnheader\"\n aria-label={w.long}\n className=\"h-8 flex items-center justify-center text-xs font-medium text-muted-foreground\"\n >\n {w.short}\n </div>\n ))}\n </div>\n {Array.from({ length: 6 }, (_, week) => (\n <div role=\"row\" key={week} className=\"grid grid-cols-7\">\n {gridDays.slice(week * 7, week * 7 + 7).map((day) => {\n if (!inViewMonth(day)) {\n return <div key={dateKey(day)} role=\"gridcell\" aria-hidden=\"true\" className=\"h-9\" />;\n }\n const disabled = isDayDisabled(day);\n const state = cellState(day);\n const isRoving = isSameDay(day, rovingTarget);\n const isEndpoint = !!(state.selected || state.rangeStart || state.rangeEnd);\n return (\n <button\n key={dateKey(day)}\n type=\"button\"\n role=\"gridcell\"\n data-date={dateKey(day)}\n tabIndex={isRoving ? 0 : -1}\n aria-selected={isEndpoint}\n aria-disabled={disabled || undefined}\n aria-label={fullDateFormat.format(day)}\n onMouseEnter={() => onFocusDay?.(day)}\n onClick={() => selectDay(day)}\n className={cn(\n \"h-9 w-9 mx-auto flex items-center justify-center text-sm\",\n state.inRange && !isEndpoint ? \"rounded-none\" : \"rounded-full\",\n \"focus:outline-none focus:ring-[3px] focus:ring-ring/30\",\n disabled && \"text-muted-foreground opacity-40 cursor-not-allowed\",\n !disabled && isEndpoint && \"bg-primary text-primary-foreground\",\n !disabled && state.inRange && !isEndpoint && \"bg-primary/15 text-foreground\",\n !disabled && !isEndpoint && !state.inRange && state.today && \"ring-1 ring-primary text-primary font-medium\",\n !disabled && !isEndpoint && !state.inRange && !state.today && \"text-foreground hover:bg-muted\"\n )}\n >\n {day.getDate()}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n );\n});\nCalendarGrid.displayName = \"CalendarGrid\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CalendarGrid, type CalendarCellState } from \"./calendar-grid\";\nimport { isSameDay, addMonths, startOfMonth, startOfDay, monthLabelFormat } from \"./calendar-internals\";\n\nexport interface CalendarProps {\n value?: Date;\n defaultValue?: Date;\n onChange?: (date: Date) => void;\n /** Controlled displayed month. Omit for uncontrolled behavior. */\n month?: Date;\n /** Initial displayed month when uncontrolled. Defaults to `value` ?? today. */\n defaultMonth?: Date;\n onMonthChange?: (month: Date) => void;\n min?: Date;\n max?: Date;\n disabledDates?: (date: Date) => boolean;\n className?: string;\n}\n\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(\n { value, defaultValue, onChange, month, defaultMonth, onMonthChange, min, max, disabledDates, className },\n ref\n ) {\n const controlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(defaultValue);\n const selected = controlled ? value : internalValue;\n\n const monthControlled = month !== undefined;\n const [internalMonth, setInternalMonth] = React.useState<Date>(() =>\n startOfMonth(month ?? defaultMonth ?? selected ?? new Date())\n );\n const viewMonth = monthControlled ? startOfMonth(month as Date) : internalMonth;\n\n const setViewMonth = (next: Date) => {\n const normalized = startOfMonth(next);\n if (!monthControlled) setInternalMonth(normalized);\n onMonthChange?.(normalized);\n };\n\n const isDayDisabled = React.useCallback(\n (d: Date) => {\n if (min && d < startOfDay(min)) return true;\n if (max && d > startOfDay(max)) return true;\n return disabledDates?.(d) ?? false;\n },\n [min, max, disabledDates]\n );\n\n const commitValue = (d: Date) => {\n if (!controlled) setInternalValue(d);\n onChange?.(d);\n };\n\n const today = new Date();\n const cellState = (d: Date): CalendarCellState => ({\n selected: selected ? isSameDay(d, selected) : false,\n today: isSameDay(d, today),\n });\n\n const inViewMonth = (d: Date) => d.getMonth() === viewMonth.getMonth() && d.getFullYear() === viewMonth.getFullYear();\n\n // CalendarGrid owns roving focus internally and only reports where it moved.\n // When a keyboard move (PageUp/PageDown/Shift+PageUp/PageDown, or Arrow keys\n // near a month boundary) lands outside the currently displayed month, this\n // is what advances the header/grid to follow it — mirrors the pre-refactor\n // Calendar's own `moveFocusTo`, which called `setViewMonth` directly.\n const handleFocusDay = (d: Date) => {\n if (!inViewMonth(d)) setViewMonth(d);\n };\n\n return (\n <div ref={ref} className={cn(\"w-[280px] select-none\", className)}>\n <div className=\"flex items-center justify-between mb-2\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n onClick={() => setViewMonth(addMonths(viewMonth, -1))}\n className=\"p-1.5 rounded-kj-sm text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <svg viewBox=\"0 0 24 24\" className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n <span className=\"text-sm font-medium text-foreground\">{monthLabelFormat.format(viewMonth)}</span>\n <button\n type=\"button\"\n aria-label=\"Next month\"\n onClick={() => setViewMonth(addMonths(viewMonth, 1))}\n className=\"p-1.5 rounded-kj-sm text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <svg viewBox=\"0 0 24 24\" className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </button>\n </div>\n <CalendarGrid\n viewMonth={viewMonth}\n isDayDisabled={isDayDisabled}\n cellState={cellState}\n onSelectDay={commitValue}\n onFocusDay={handleFocusDay}\n initialFocusDate={selected ?? new Date()}\n />\n </div>\n );\n }\n);\nCalendar.displayName = \"Calendar\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Calendar } from \"./calendar\";\nimport { toISODateString } from \"./calendar-internals\";\n\nexport interface DatePickerProps {\n value?: Date;\n defaultValue?: Date;\n onChange?: (date: Date) => void;\n min?: Date;\n max?: Date;\n disabledDates?: (date: Date) => boolean;\n /** Trigger text when nothing is selected. Default \"Pick a date…\". */\n placeholder?: string;\n disabled?: boolean;\n /** Visual error state (red border + aria-invalid on the trigger). */\n error?: boolean;\n /** Marks the trigger aria-required (buttons have no native `required` attribute). */\n required?: boolean;\n className?: string;\n id?: string;\n name?: string;\n \"aria-describedby\"?: string;\n}\n\nconst displayFormat = new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" });\n\nexport const DatePicker = React.forwardRef<HTMLButtonElement, DatePickerProps>(\n function DatePicker(\n {\n value,\n defaultValue,\n onChange,\n min,\n max,\n disabledDates,\n placeholder = \"Pick a date…\",\n disabled = false,\n error = false,\n required = false,\n className,\n id,\n name,\n \"aria-describedby\": describedBy,\n },\n ref\n ) {\n const controlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(defaultValue);\n const selected = controlled ? value : internalValue;\n\n const [open, setOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n\n const setTriggerRef = (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n };\n\n const commitValue = (d: Date) => {\n if (!controlled) setInternalValue(d);\n onChange?.(d);\n };\n\n const closePopup = React.useCallback(() => setOpen(false), []);\n const openPopup = () => {\n if (!disabled) setOpen(true);\n };\n\n const handleCalendarChange = (d: Date) => {\n commitValue(d);\n closePopup();\n triggerRef.current?.focus();\n };\n\n // Outside-click dismissal.\n React.useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) closePopup();\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, closePopup]);\n\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPopup();\n } else if (e.key === \"Escape\" && open) {\n // The panel is a DOM sibling of the trigger, not a descendant, and\n // the Calendar deliberately doesn't auto-focus into the grid on\n // open. So while focus remains on the trigger, a real Escape\n // keydown never bubbles into the panel's onKeyDown handler — it\n // must be handled here instead. Focus is already on the trigger,\n // so no refocus is needed.\n e.preventDefault();\n closePopup();\n }\n };\n\n const onPanelKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n closePopup();\n triggerRef.current?.focus();\n }\n };\n\n return (\n <div ref={containerRef} className={cn(\"relative inline-block w-full\", className)}>\n <button\n ref={setTriggerRef}\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-haspopup=\"grid\"\n aria-expanded={open}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n aria-describedby={describedBy}\n onClick={() => (open ? closePopup() : openPopup())}\n onKeyDown={onTriggerKeyDown}\n className={cn(\n \"w-full flex items-center justify-between gap-2 border rounded-kj-md bg-surface text-left text-sm\",\n \"pl-[0.85rem] pr-3 py-[calc(0.6rem*var(--kj-density,1))]\",\n \"transition-[border-color,box-shadow] duration-150\",\n \"focus:outline-none focus:border-ring focus:ring-[3px] focus:ring-ring/30\",\n disabled && \"bg-muted text-muted-foreground cursor-not-allowed\",\n error ? \"border-danger\" : \"border-input\",\n !selected && \"text-muted-foreground\"\n )}\n >\n <span>{selected ? displayFormat.format(selected) : placeholder}</span>\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4 text-muted-foreground shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M3 10h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n {name && <input type=\"hidden\" name={name} value={selected ? toISODateString(selected) : \"\"} />}\n\n {open && (\n <div\n onKeyDown={onPanelKeyDown}\n className=\"absolute z-40 top-[calc(100%+6px)] left-0 bg-surface border border-border rounded-kj-md shadow-kj-lg p-3 animate-[kjpop_.12s_ease]\"\n >\n <Calendar value={selected} onChange={handleCalendarChange} min={min} max={max} disabledDates={disabledDates} />\n </div>\n )}\n </div>\n );\n }\n);\nDatePicker.displayName = \"DatePicker\";\n\nimport { FormField } from \"./form-field\";\n\nexport interface DatePickerFieldProps extends Omit<DatePickerProps, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n}\n\nexport const DatePickerField = React.forwardRef<HTMLButtonElement, DatePickerFieldProps>(\n function DatePickerField({ label, hint, error, required, className, ...props }, ref) {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <DatePicker ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nDatePickerField.displayName = \"DatePickerField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CalendarGrid, type CalendarCellState } from \"./calendar-grid\";\nimport { startOfDay, isSameDay, addMonths, startOfMonth, monthLabelFormat } from \"./calendar-internals\";\n\nexport interface DateRange {\n start?: Date;\n end?: Date;\n}\n\nexport interface RangeCalendarProps {\n value?: DateRange;\n defaultValue?: DateRange;\n onChange?: (range: DateRange) => void;\n /** Controlled left-month. The right month is always this + 1 (locked navigation). */\n month?: Date;\n defaultMonth?: Date;\n onMonthChange?: (month: Date) => void;\n min?: Date;\n max?: Date;\n disabledDates?: (date: Date) => boolean;\n /** Force rendering 1 month instead of 2 side-by-side. */\n singleMonth?: boolean;\n className?: string;\n}\n\nfunction isBetweenExclusive(d: Date, lo: Date, hi: Date): boolean {\n const t = startOfDay(d).getTime();\n return t > startOfDay(lo).getTime() && t < startOfDay(hi).getTime();\n}\n\nexport const RangeCalendar = React.forwardRef<HTMLDivElement, RangeCalendarProps>(\n function RangeCalendar(\n { value, defaultValue, onChange, month, defaultMonth, onMonthChange, min, max, disabledDates, singleMonth, className },\n ref\n ) {\n const controlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<DateRange>(defaultValue ?? {});\n const range = controlled ? (value as DateRange) : internalValue;\n\n const monthControlled = month !== undefined;\n const [internalMonth, setInternalMonth] = React.useState<Date>(() =>\n startOfMonth(month ?? defaultMonth ?? range.start ?? new Date())\n );\n const leftMonth = monthControlled ? startOfMonth(month as Date) : internalMonth;\n const rightMonth = addMonths(leftMonth, 1);\n\n const setViewMonth = (next: Date) => {\n const normalized = startOfMonth(next);\n if (!monthControlled) setInternalMonth(normalized);\n onMonthChange?.(normalized);\n };\n\n const isDayDisabled = React.useCallback(\n (d: Date) => {\n if (min && d < startOfDay(min)) return true;\n if (max && d > startOfDay(max)) return true;\n return disabledDates?.(d) ?? false;\n },\n [min, max, disabledDates]\n );\n\n // Purely internal — never part of the controlled/uncontrolled `value`. Tracks\n // an in-progress pick (start clicked, end not yet chosen) so onChange fires\n // exactly once, only when a full range completes.\n const [pendingStart, setPendingStart] = React.useState<Date | undefined>(undefined);\n const [hoverDate, setHoverDate] = React.useState<Date | undefined>(undefined);\n\n const commitRange = (next: DateRange) => {\n if (!controlled) setInternalValue(next);\n onChange?.(next);\n };\n\n const handleSelectDay = (d: Date) => {\n const day = startOfDay(d);\n if (pendingStart === undefined) {\n setPendingStart(day);\n setHoverDate(undefined);\n return;\n }\n if (day < startOfDay(pendingStart)) {\n setPendingStart(day);\n setHoverDate(undefined);\n return;\n }\n commitRange({ start: pendingStart, end: day });\n setPendingStart(undefined);\n setHoverDate(undefined);\n };\n\n const today = new Date();\n const previewEnd = pendingStart !== undefined ? hoverDate : undefined;\n\n const cellState = (d: Date): CalendarCellState => {\n const isToday = isSameDay(d, today);\n if (pendingStart !== undefined) {\n if (previewEnd === undefined) {\n return { rangeStart: isSameDay(d, pendingStart), today: isToday };\n }\n if (startOfDay(previewEnd) < startOfDay(pendingStart)) {\n return { rangeStart: isSameDay(d, previewEnd), today: isToday };\n }\n return {\n rangeStart: isSameDay(d, pendingStart),\n rangeEnd: isSameDay(d, previewEnd),\n inRange: isBetweenExclusive(d, pendingStart, previewEnd),\n today: isToday,\n };\n }\n if (range.start && range.end) {\n return {\n rangeStart: isSameDay(d, range.start),\n rangeEnd: isSameDay(d, range.end),\n inRange: isBetweenExclusive(d, range.start, range.end),\n today: isToday,\n };\n }\n return { rangeStart: range.start ? isSameDay(d, range.start) : false, today: isToday };\n };\n\n const inLockedRange = (d: Date) =>\n (d.getMonth() === leftMonth.getMonth() && d.getFullYear() === leftMonth.getFullYear()) ||\n (d.getMonth() === rightMonth.getMonth() && d.getFullYear() === rightMonth.getFullYear());\n\n // Each CalendarGrid owns its own roving focus internally and only reports\n // where it moved via onFocusDay. That single callback serves two purposes\n // here: (1) drives the hover/keyboard-focus range preview (setHoverDate),\n // and (2) — mirroring Calendar's own onFocusDay wiring — advances the\n // locked month pair when a keyboard move (PageUp/PageDown, Shift+PageUp/\n // PageDown, or an Arrow key) lands outside both currently visible months.\n const handleFocusDay = (d: Date) => {\n if (pendingStart !== undefined) setHoverDate(d);\n if (!inLockedRange(d)) setViewMonth(d);\n };\n\n const navButton = (direction: \"prev\" | \"next\") => (\n <button\n type=\"button\"\n aria-label={direction === \"prev\" ? \"Previous month\" : \"Next month\"}\n onClick={() => setViewMonth(addMonths(leftMonth, direction === \"prev\" ? -1 : 1))}\n className=\"p-1.5 rounded-kj-sm text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <svg viewBox=\"0 0 24 24\" className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {direction === \"prev\" ? <path d=\"m15 18-6-6 6-6\" /> : <path d=\"m9 18 6-6-6-6\" />}\n </svg>\n </button>\n );\n\n const showSingleMonth = singleMonth;\n\n return (\n <div ref={ref} className={cn(\"flex flex-col sm:flex-row gap-4 sm:gap-6 select-none max-w-full overflow-hidden\", className)}>\n <div className=\"w-full sm:w-[280px]\">\n <div className=\"flex items-center justify-between mb-2\">\n {navButton(\"prev\")}\n <span className=\"text-sm font-medium text-foreground\">{monthLabelFormat.format(leftMonth)}</span>\n <span className={showSingleMonth ? \"\" : \"sm:hidden\"}>{navButton(\"next\")}</span>\n </div>\n <CalendarGrid\n viewMonth={leftMonth}\n isDayDisabled={isDayDisabled}\n cellState={cellState}\n onSelectDay={handleSelectDay}\n onFocusDay={handleFocusDay}\n initialFocusDate={pendingStart ?? range.start ?? new Date()}\n />\n </div>\n {!showSingleMonth && (\n <div className=\"hidden sm:block w-[280px]\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"w-[26px]\" aria-hidden=\"true\" />\n <span className=\"text-sm font-medium text-foreground\">{monthLabelFormat.format(rightMonth)}</span>\n {navButton(\"next\")}\n </div>\n <CalendarGrid\n viewMonth={rightMonth}\n isDayDisabled={isDayDisabled}\n cellState={cellState}\n onSelectDay={handleSelectDay}\n onFocusDay={handleFocusDay}\n initialFocusDate={pendingStart ?? range.start ?? new Date()}\n />\n </div>\n )}\n </div>\n );\n }\n);\nRangeCalendar.displayName = \"RangeCalendar\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { RangeCalendar, type DateRange } from \"./range-calendar\";\nimport { toISODateString } from \"./calendar-internals\";\n\nexport interface DateRangePickerProps {\n value?: DateRange;\n defaultValue?: DateRange;\n onChange?: (range: DateRange) => void;\n min?: Date;\n max?: Date;\n disabledDates?: (date: Date) => boolean;\n /** Trigger text when nothing is selected. Default \"Pick a date range…\". */\n placeholder?: string;\n disabled?: boolean;\n /** Visual error state (red border + aria-invalid on the trigger). */\n error?: boolean;\n /** Marks the trigger aria-required (buttons have no native `required` attribute). */\n required?: boolean;\n className?: string;\n id?: string;\n name?: string;\n \"aria-describedby\"?: string;\n}\n\nconst displayFormat = new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" });\n\nfunction formatRangeLabel(range: DateRange): string | undefined {\n if (!range.start || !range.end) return undefined;\n return `${displayFormat.format(range.start)} – ${displayFormat.format(range.end)}`;\n}\n\nexport const DateRangePicker = React.forwardRef<HTMLButtonElement, DateRangePickerProps>(\n function DateRangePicker(\n {\n value,\n defaultValue,\n onChange,\n min,\n max,\n disabledDates,\n placeholder = \"Pick a date range…\",\n disabled = false,\n error = false,\n required = false,\n className,\n id,\n name,\n \"aria-describedby\": describedBy,\n },\n ref\n ) {\n const controlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<DateRange>(defaultValue ?? {});\n const selected = controlled ? value : internalValue;\n\n const [open, setOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n\n const setTriggerRef = (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n };\n\n const commitValue = (r: DateRange) => {\n if (!controlled) setInternalValue(r);\n onChange?.(r);\n };\n\n const closePopup = React.useCallback(() => setOpen(false), []);\n const openPopup = () => {\n if (!disabled) setOpen(true);\n };\n\n const handleRangeChange = (r: DateRange) => {\n commitValue(r);\n closePopup();\n triggerRef.current?.focus();\n };\n\n // Outside-click dismissal.\n React.useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) closePopup();\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, closePopup]);\n\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPopup();\n } else if (e.key === \"Escape\" && open) {\n // The panel is a DOM sibling of the trigger, not a descendant, and\n // RangeCalendar deliberately doesn't auto-focus into a grid on open.\n // So a real Escape keydown while focus is on the trigger never\n // bubbles into the panel's onKeyDown handler — it must be handled\n // here instead. Refocus the trigger explicitly rather than assuming\n // it already has focus.\n e.preventDefault();\n closePopup();\n triggerRef.current?.focus();\n }\n };\n\n const onPanelKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n closePopup();\n triggerRef.current?.focus();\n }\n };\n\n const label = formatRangeLabel(selected);\n\n return (\n <div ref={containerRef} className={cn(\"relative inline-block w-full\", className)}>\n <button\n ref={setTriggerRef}\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n aria-describedby={describedBy}\n onClick={() => (open ? closePopup() : openPopup())}\n onKeyDown={onTriggerKeyDown}\n className={cn(\n \"w-full flex items-center justify-between gap-2 border rounded-kj-md bg-surface text-left text-sm\",\n \"pl-[0.85rem] pr-3 py-[calc(0.6rem*var(--kj-density,1))]\",\n \"transition-[border-color,box-shadow] duration-150\",\n \"focus:outline-none focus:border-ring focus:ring-[3px] focus:ring-ring/30\",\n disabled && \"bg-muted text-muted-foreground cursor-not-allowed\",\n error ? \"border-danger\" : \"border-input\",\n !label && \"text-muted-foreground\"\n )}\n >\n <span>{label ?? placeholder}</span>\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4 text-muted-foreground shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M3 10h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n {name && (\n <>\n <input type=\"hidden\" name={`${name}Start`} value={selected.start ? toISODateString(selected.start) : \"\"} />\n <input type=\"hidden\" name={`${name}End`} value={selected.end ? toISODateString(selected.end) : \"\"} />\n </>\n )}\n\n {open && (\n <div\n onKeyDown={onPanelKeyDown}\n className=\"absolute z-40 top-[calc(100%+6px)] left-0 sm:left-auto right-0 sm:right-auto max-w-[calc(100vw-2rem)] bg-surface border border-border rounded-kj-md shadow-kj-lg p-3 animate-[kjpop_.12s_ease]\"\n >\n <RangeCalendar value={selected} onChange={handleRangeChange} min={min} max={max} disabledDates={disabledDates} />\n </div>\n )}\n </div>\n );\n }\n);\nDateRangePicker.displayName = \"DateRangePicker\";\n\nimport { FormField } from \"./form-field\";\n\nexport interface DateRangePickerFieldProps extends Omit<DateRangePickerProps, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n}\n\nexport const DateRangePickerField = React.forwardRef<HTMLButtonElement, DateRangePickerFieldProps>(\n function DateRangePickerField({ label, hint, error, required, className, ...props }, ref) {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <DateRangePicker ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nDateRangePickerField.displayName = \"DateRangePickerField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface DropzoneProps {\n onFiles: (files: File[]) => void;\n /** Native picker filter hint. Real enforcement lives in FileUpload's validation. */\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n className?: string;\n /** Overrides the default drop-region content. */\n children?: React.ReactNode;\n id?: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: boolean | \"true\" | \"false\";\n \"aria-required\"?: boolean;\n}\n\nexport const Dropzone = React.forwardRef<HTMLButtonElement, DropzoneProps>(\n function Dropzone(\n {\n onFiles,\n accept,\n multiple = true,\n disabled = false,\n className,\n children,\n id,\n \"aria-describedby\": describedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-required\": ariaRequired,\n },\n ref\n ) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [dragActive, setDragActive] = React.useState(false);\n // dragenter/dragleave fire as the pointer crosses child elements; count\n // them so the highlight only clears when the pointer truly leaves.\n const dragCounter = React.useRef(0);\n const invalid = ariaInvalid === true || ariaInvalid === \"true\";\n\n const openPicker = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files ? Array.from(e.target.files) : [];\n if (files.length > 0) onFiles(files);\n // Reset so re-selecting the same file fires change again.\n e.target.value = \"\";\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n if (disabled) return;\n dragCounter.current += 1;\n setDragActive(true);\n };\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n };\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n if (disabled) return;\n dragCounter.current -= 1;\n if (dragCounter.current <= 0) {\n dragCounter.current = 0;\n setDragActive(false);\n }\n };\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n dragCounter.current = 0;\n setDragActive(false);\n if (disabled) return;\n const files = e.dataTransfer?.files ? Array.from(e.dataTransfer.files) : [];\n if (files.length > 0) onFiles(files);\n };\n\n return (\n <div className={cn(\"w-full\", className)}>\n <button\n ref={ref}\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-describedby={describedBy}\n aria-invalid={ariaInvalid}\n aria-required={ariaRequired}\n data-drag-active={dragActive || undefined}\n onClick={openPicker}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n className={cn(\n \"w-full flex flex-col items-center justify-center gap-2 rounded-kj-md border-2 border-dashed px-6 py-8 text-center text-sm transition-colors\",\n \"focus:outline-none focus:ring-[3px] focus:ring-ring/30\",\n disabled\n ? \"border-input bg-muted text-muted-foreground cursor-not-allowed\"\n : dragActive\n ? \"border-primary bg-primary/5 text-foreground cursor-pointer\"\n : invalid\n ? \"border-danger bg-surface text-muted-foreground hover:text-foreground cursor-pointer\"\n : \"border-input bg-surface text-muted-foreground hover:border-primary hover:text-foreground cursor-pointer\"\n )}\n >\n {children ?? (\n <>\n <svg viewBox=\"0 0 24 24\" className=\"h-7 w-7\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 16V4M7 9l5-5 5 5\" />\n <path d=\"M20 16v3a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-3\" />\n </svg>\n <span>\n <span className=\"font-medium text-foreground\">Drag and drop files here</span>, or click to browse\n </span>\n </>\n )}\n </button>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleInputChange}\n className=\"sr-only\"\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n </div>\n );\n }\n);\nDropzone.displayName = \"Dropzone\";\n","export type UploadStatus = \"pending\" | \"uploading\" | \"success\" | \"error\";\n\nexport interface UploadItem {\n id: string;\n file: File;\n /** Defaults to \"pending\" when unset. Drives the row's rendering. */\n status?: UploadStatus;\n /** 0–100. Shown as a Progress bar when status === \"uploading\". */\n progress?: number;\n /** Shown (danger tone) when status === \"error\". */\n error?: string;\n}\n\nexport interface FileRejection {\n file: File;\n reason: \"type\" | \"size\" | \"count\";\n}\n\nconst KB = 1024;\n\nexport function formatBytes(bytes: number): string {\n if (bytes < KB) return `${bytes} B`;\n const units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n let value = bytes / KB;\n let unitIndex = 0;\n while (value >= KB && unitIndex < units.length - 1) {\n value /= KB;\n unitIndex++;\n }\n return `${value.toFixed(1)} ${units[unitIndex]}`;\n}\n\nexport function matchesAccept(file: File, accept?: string): boolean {\n if (!accept || accept.trim() === \"\") return true;\n const tokens = accept.split(\",\").map((t) => t.trim()).filter(Boolean);\n if (tokens.length === 0) return true;\n const fileType = file.type.toLowerCase();\n const fileName = file.name.toLowerCase();\n return tokens.some((token) => {\n const t = token.toLowerCase();\n if (t.startsWith(\".\")) return fileName.endsWith(t);\n if (t.endsWith(\"/*\")) return fileType.startsWith(t.slice(0, -1)); // \"image/*\" -> \"image/\"\n return fileType === t;\n });\n}\n\nlet idCounter = 0;\nexport function generateId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n idCounter += 1;\n return `file-${Date.now().toString(36)}-${idCounter}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\nexport interface ValidateOptions {\n accept?: string;\n maxSize?: number;\n maxFiles?: number;\n existingCount?: number;\n multiple?: boolean;\n}\n\nexport function validateFiles(\n files: File[],\n { accept, maxSize, maxFiles, existingCount = 0, multiple = true }: ValidateOptions\n): { accepted: File[]; rejected: FileRejection[] } {\n const accepted: File[] = [];\n const rejected: FileRejection[] = [];\n // Single mode replaces the list, so existing count doesn't consume capacity.\n const effectiveExisting = multiple ? existingCount : 0;\n\n for (const file of files) {\n if (!matchesAccept(file, accept)) {\n rejected.push({ file, reason: \"type\" });\n continue;\n }\n if (maxSize != null && file.size > maxSize) {\n rejected.push({ file, reason: \"size\" });\n continue;\n }\n if (!multiple) {\n // Single mode: first type/size-valid file wins; the rest overflow.\n if (accepted.length === 0) accepted.push(file);\n else rejected.push({ file, reason: \"count\" });\n continue;\n }\n const capacity = maxFiles != null ? maxFiles - effectiveExisting - accepted.length : Infinity;\n if (capacity <= 0) {\n rejected.push({ file, reason: \"count\" });\n continue;\n }\n accepted.push(file);\n }\n\n return { accepted, rejected };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Dropzone } from \"./dropzone\";\nimport { Progress } from \"./progress\";\nimport { FormField } from \"./form-field\";\nimport {\n formatBytes,\n generateId,\n validateFiles,\n type UploadItem,\n type UploadStatus,\n type FileRejection,\n} from \"./file-upload-internals\";\n\nexport type { UploadItem, UploadStatus, FileRejection };\n\nexport interface FileUploadProps {\n value?: UploadItem[];\n defaultValue?: UploadItem[];\n onChange?: (items: UploadItem[]) => void;\n /** Called with files rejected by validation on a given drop/selection. */\n onReject?: (rejections: FileRejection[]) => void;\n accept?: string;\n maxSize?: number;\n maxFiles?: number;\n multiple?: boolean;\n disabled?: boolean;\n /** Visual error state (danger border + aria-invalid on the dropzone). */\n error?: boolean;\n /** aria-required on the dropzone. */\n required?: boolean;\n className?: string;\n id?: string;\n \"aria-describedby\"?: string;\n}\n\nfunction FileIcon({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 24 24\" className={className} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n </svg>\n );\n}\n\nexport const FileUpload = React.forwardRef<HTMLButtonElement, FileUploadProps>(\n function FileUpload(\n {\n value,\n defaultValue,\n onChange,\n onReject,\n accept,\n maxSize,\n maxFiles,\n multiple = true,\n disabled = false,\n error = false,\n required = false,\n className,\n id,\n \"aria-describedby\": describedBy,\n },\n ref\n ) {\n const controlled = value !== undefined;\n const [internalItems, setInternalItems] = React.useState<UploadItem[]>(defaultValue ?? []);\n const items = controlled ? (value as UploadItem[]) : internalItems;\n\n const commit = (next: UploadItem[]) => {\n if (!controlled) setInternalItems(next);\n onChange?.(next);\n };\n\n const handleFiles = (files: File[]) => {\n const { accepted, rejected } = validateFiles(files, {\n accept,\n maxSize,\n maxFiles,\n existingCount: items.length,\n multiple,\n });\n if (rejected.length > 0) onReject?.(rejected);\n if (accepted.length === 0) return;\n const newItems: UploadItem[] = accepted.map((file) => ({\n id: generateId(),\n file,\n status: \"pending\",\n }));\n commit(multiple ? [...items, ...newItems] : newItems.slice(0, 1));\n };\n\n const removeItem = (itemId: string) => {\n commit(items.filter((it) => it.id !== itemId));\n };\n\n return (\n <div className={cn(\"w-full flex flex-col gap-3\", className)}>\n <Dropzone\n ref={ref}\n onFiles={handleFiles}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n id={id}\n aria-describedby={describedBy}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n />\n {items.length > 0 && (\n <ul className=\"flex flex-col gap-2\">\n {items.map((item) => (\n <li\n key={item.id}\n className=\"flex items-center gap-3 rounded-kj-md border border-border bg-surface px-3 py-2\"\n >\n <FileIcon className=\"h-5 w-5 shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"truncate text-sm text-foreground\">{item.file.name}</span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">{formatBytes(item.file.size)}</span>\n </div>\n {item.status === \"uploading\" && item.progress != null && (\n <div className=\"mt-1.5 flex items-center gap-2\">\n <Progress value={item.progress} className=\"h-1.5\" />\n <span className=\"shrink-0 text-xs text-muted-foreground\">{Math.round(item.progress)}%</span>\n </div>\n )}\n {item.status === \"success\" && (\n <span className=\"mt-0.5 block text-xs text-success\">Uploaded</span>\n )}\n {item.status === \"error\" && (\n <span className=\"mt-0.5 block text-xs text-danger\">{item.error ?? \"Upload failed\"}</span>\n )}\n </div>\n {!disabled && (\n <button\n type=\"button\"\n aria-label={`Remove ${item.file.name}`}\n onClick={() => removeItem(item.id)}\n className=\"shrink-0 rounded-kj-sm p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <svg viewBox=\"0 0 24 24\" className=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n }\n);\nFileUpload.displayName = \"FileUpload\";\n\nexport interface FileUploadFieldProps extends Omit<FileUploadProps, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n}\n\nexport const FileUploadField = React.forwardRef<HTMLButtonElement, FileUploadFieldProps>(\n function FileUploadField({ label, hint, error, required, className, ...props }, ref) {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <FileUpload ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nFileUploadField.displayName = \"FileUploadField\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type TimelineAlign = \"left\" | \"right\" | \"alternate\";\nexport type TimelineDotVariant = \"default\" | \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"danger\";\nexport type TimelineDotSize = \"sm\" | \"md\" | \"lg\";\n\ninterface TimelineCtx {\n align: TimelineAlign;\n count: number;\n}\nconst TimelineContext = React.createContext<TimelineCtx | null>(null);\n\ninterface TimelineItemCtx {\n isEven: boolean;\n align: TimelineAlign;\n isLast: boolean;\n}\nconst TimelineItemContext = React.createContext<TimelineItemCtx | null>(null);\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: TimelineAlign;\n}\n\nexport const Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n ({ align = \"left\", className, children, ...props }, ref) => {\n const validChildren = React.Children.toArray(children).filter(React.isValidElement);\n const count = validChildren.length;\n\n const childrenWithIndex = validChildren.map((child, index) => {\n return React.cloneElement(child as React.ReactElement<any>, {\n index,\n });\n });\n\n return (\n <TimelineContext.Provider value={{ align, count }}>\n <div\n ref={ref}\n role=\"list\"\n className={cn(\"flex flex-col gap-6 w-full\", className)}\n {...props}\n >\n {childrenWithIndex}\n </div>\n </TimelineContext.Provider>\n );\n }\n);\nTimeline.displayName = \"Timeline\";\n\nexport interface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement> {\n index?: number;\n}\n\nexport const TimelineItem = React.forwardRef<HTMLDivElement, TimelineItemProps>(\n ({ className, index = 0, children, ...props }, ref) => {\n const ctx = React.useContext(TimelineContext);\n if (!ctx) throw new Error(\"TimelineItem must be used within a Timeline\");\n\n const { align, count } = ctx;\n const isEven = index % 2 === 0;\n const isLast = index === count - 1;\n\n // Grid config per alignment\n const gridClass = cn(\n \"grid w-full gap-4 items-start group/timeline-item\",\n align === \"left\" && \"grid-cols-[auto_1fr]\",\n align === \"right\" && \"grid-cols-[1fr_auto] text-right\",\n align === \"alternate\" && \"md:grid-cols-[1fr_auto_1fr] grid-cols-[auto_1fr]\"\n );\n\n return (\n <TimelineItemContext.Provider value={{ isEven, align, isLast }}>\n <div\n ref={ref}\n role=\"listitem\"\n className={cn(gridClass, className)}\n {...props}\n >\n {children}\n </div>\n </TimelineItemContext.Provider>\n );\n }\n);\nTimelineItem.displayName = \"TimelineItem\";\n\nexport interface TimelineSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n isEven?: boolean;\n align?: TimelineAlign;\n}\n\nexport const TimelineSeparator = React.forwardRef<HTMLDivElement, TimelineSeparatorProps>(\n ({ className, align: propAlign, ...props }, ref) => {\n const ctx = React.useContext(TimelineItemContext);\n const align = propAlign ?? ctx?.align ?? \"left\";\n\n const separatorClass = cn(\n \"flex flex-col items-center justify-self-center h-full min-h-[40px]\",\n align === \"alternate\" && \"md:col-start-2 col-start-1\",\n align === \"left\" && \"col-start-1\",\n align === \"right\" && \"col-start-2\",\n className\n );\n\n return <div ref={ref} className={separatorClass} {...props} />;\n }\n);\nTimelineSeparator.displayName = \"TimelineSeparator\";\n\nexport interface TimelineConnectorProps extends React.HTMLAttributes<HTMLDivElement> {\n dashed?: boolean;\n}\n\nexport const TimelineConnector = React.forwardRef<HTMLDivElement, TimelineConnectorProps>(\n ({ className, dashed, ...props }, ref) => {\n const ctx = React.useContext(TimelineItemContext);\n const isLast = ctx?.isLast ?? false;\n\n const connectorClass = cn(\n \"grow\",\n isLast && \"hidden\",\n dashed ? \"w-0 border-l border-dashed border-border\" : \"w-0.5 bg-border\",\n className\n );\n\n\n return <div ref={ref} className={connectorClass} {...props} />;\n }\n);\nTimelineConnector.displayName = \"TimelineConnector\";\n\nexport interface TimelineDotProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: TimelineDotVariant;\n size?: TimelineDotSize;\n}\n\nexport const TimelineDot = React.forwardRef<HTMLDivElement, TimelineDotProps>(\n ({ className, variant = \"default\", size = \"md\", ...props }, ref) => {\n const sizeClasses = {\n sm: \"w-2.5 h-2.5 rounded-full my-1.5\",\n md: \"w-4 h-4 rounded-full my-1 border-2 bg-background border-border\",\n lg: \"w-8 h-8 rounded-full border flex items-center justify-center bg-background text-[0.8rem]\",\n };\n\n const variantClasses = {\n default: \"border-border text-muted-foreground\",\n primary: \"border-primary bg-primary/5 text-primary\",\n secondary: \"border-secondary bg-secondary/5 text-secondary\",\n success: \"border-success bg-success-surface text-success\",\n warning: \"border-warning bg-warning-surface text-warning\",\n danger: \"border-danger bg-danger-surface text-danger\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"shrink-0 select-none\",\n sizeClasses[size],\n variantClasses[variant],\n className\n )}\n {...props}\n />\n );\n }\n);\nTimelineDot.displayName = \"TimelineDot\";\n\nexport interface TimelineContentProps extends React.HTMLAttributes<HTMLDivElement> {\n isEven?: boolean;\n align?: TimelineAlign;\n}\n\nexport const TimelineContent = React.forwardRef<HTMLDivElement, TimelineContentProps>(\n ({ className, isEven: propIsEven, align: propAlign, ...props }, ref) => {\n const ctx = React.useContext(TimelineItemContext);\n const isEven = propIsEven ?? ctx?.isEven ?? false;\n const align = propAlign ?? ctx?.align ?? \"left\";\n\n const contentClass = cn(\n \"pb-8 flex flex-col gap-1 w-full\",\n align === \"left\" && \"col-start-2 text-left\",\n align === \"right\" && \"col-start-1 text-right\",\n align === \"alternate\" && (\n isEven \n ? \"md:col-start-3 col-start-2 text-left\" \n : \"md:col-start-1 col-start-2 md:text-right text-left\"\n ),\n className\n );\n\n return <div ref={ref} className={contentClass} {...props} />;\n }\n);\nTimelineContent.displayName = \"TimelineContent\";\n\nexport const TimelineTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) => (\n <h4\n ref={ref}\n className={cn(\"m-0 text-sm font-semibold tracking-[-0.01em] text-foreground\", className)}\n {...props}\n >\n {children}\n </h4>\n )\n);\nTimelineTitle.displayName = \"TimelineTitle\";\n\nexport const TimelineTime = React.forwardRef<HTMLTimeElement, React.TimeHTMLAttributes<HTMLTimeElement>>(\n ({ className, ...props }, ref) => (\n <time\n ref={ref}\n className={cn(\"text-[0.75rem] text-muted-foreground font-normal\", className)}\n {...props}\n />\n )\n);\nTimelineTime.displayName = \"TimelineTime\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface UseStepperOptions {\n initialStep?: number;\n stepsCount: number;\n}\n\nexport interface UseStepperReturn {\n activeStep: number;\n completedSteps: number[];\n setStep: (step: number) => void;\n nextStep: () => void;\n prevStep: () => void;\n completeStep: (step: number) => void;\n uncompleteStep: (step: number) => void;\n reset: () => void;\n isFirstStep: boolean;\n isLastStep: boolean;\n}\n\nexport function useStepper({ initialStep = 0, stepsCount }: UseStepperOptions): UseStepperReturn {\n const safeStepsCount = Math.max(1, stepsCount);\n const [activeStep, setActiveStep] = React.useState(initialStep);\n const [completedSteps, setCompletedSteps] = React.useState<number[]>([]);\n\n const setStep = React.useCallback((step: number) => {\n if (step >= 0 && step < safeStepsCount) {\n setActiveStep(step);\n }\n }, [safeStepsCount]);\n\n const nextStep = React.useCallback(() => {\n setActiveStep((prev) => Math.min(prev + 1, safeStepsCount - 1));\n }, [safeStepsCount]);\n\n const prevStep = React.useCallback(() => {\n setActiveStep((prev) => Math.max(prev - 1, 0));\n }, []);\n\n const completeStep = React.useCallback((step: number) => {\n setCompletedSteps((prev) => {\n if (step < 0 || step >= safeStepsCount) return prev; // ignore out-of-range\n if (prev.includes(step)) return prev;\n return [...prev, step].sort((a, b) => a - b);\n });\n }, [safeStepsCount]);\n\n const uncompleteStep = React.useCallback((step: number) => {\n setCompletedSteps((prev) => prev.filter((s) => s !== step));\n }, []);\n\n const reset = React.useCallback(() => {\n setActiveStep(initialStep);\n setCompletedSteps([]);\n }, [initialStep]);\n\n return {\n activeStep,\n completedSteps,\n setStep,\n nextStep,\n prevStep,\n completeStep,\n uncompleteStep,\n reset,\n isFirstStep: activeStep === 0,\n isLastStep: activeStep === safeStepsCount - 1,\n };\n}\n\nexport type StepperOrientation = \"horizontal\" | \"vertical\";\n\ninterface StepperCtx {\n activeStep: number;\n orientation: StepperOrientation;\n responsive?: boolean;\n linear: boolean;\n setStep: (step: number) => void;\n completedSteps: number[];\n registerStep: (value: number) => void;\n unregisterStep: (value: number) => void;\n steps: number[];\n}\n\nconst StepperContext = React.createContext<StepperCtx | null>(null);\n\ninterface StepperItemCtx {\n value: number;\n disabled: boolean;\n isLast: boolean;\n}\n\nconst StepperItemContext = React.createContext<StepperItemCtx | null>(null);\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n orientation?: StepperOrientation;\n responsive?: boolean;\n linear?: boolean;\n}\n\nexport const Stepper = React.forwardRef<HTMLDivElement, StepperProps>(\n ({ value, defaultValue, onValueChange, orientation = \"horizontal\", responsive = true, linear = true, children, className, ...props }, ref) => {\n const [localValue, setLocalValue] = React.useState(defaultValue ?? 0);\n const isControlled = value !== undefined;\n const activeStep = isControlled ? value : localValue;\n\n const [steps, setSteps] = React.useState<number[]>([]);\n const [completedSteps, setCompletedSteps] = React.useState<number[]>([]);\n\n const registerStep = React.useCallback((val: number) => {\n setSteps((prev) => (prev.includes(val) ? prev : [...prev, val].sort((a, b) => a - b)));\n }, []);\n\n const unregisterStep = React.useCallback((val: number) => {\n setSteps((prev) => prev.filter((v) => v !== val));\n }, []);\n\n const setStep = React.useCallback(\n (step: number) => {\n if (!isControlled) {\n setLocalValue(step);\n }\n onValueChange?.(step);\n\n // Auto mark previous steps as completed in linear mode\n if (linear) {\n setCompletedSteps((prev) => {\n const priorSteps = steps.filter((s) => s < step);\n const nextCompleted = Array.from(new Set([...prev, ...priorSteps])).sort((a, b) => a - b);\n return nextCompleted;\n });\n }\n },\n [isControlled, onValueChange, linear, steps]\n );\n\n const contextValue = React.useMemo(\n () => ({\n activeStep,\n orientation,\n responsive,\n linear,\n setStep,\n completedSteps,\n registerStep,\n unregisterStep,\n steps,\n }),\n [activeStep, orientation, responsive, linear, setStep, completedSteps, registerStep, unregisterStep, steps]\n );\n\n return (\n <StepperContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn(\n \"w-full\",\n orientation === \"vertical\" ? \"flex flex-col gap-6\" : \"space-y-6\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </StepperContext.Provider>\n );\n }\n);\nStepper.displayName = \"Stepper\";\n\nexport interface StepperContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n}\n\nexport const StepperContent = React.forwardRef<HTMLDivElement, StepperContentProps>(\n ({ value, className, children, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n if (!ctx) throw new Error(\"StepperContent must be used within a Stepper\");\n\n const isActive = ctx.activeStep === value;\n\n if (!isActive) return null;\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n tabIndex={0}\n className={cn(\"focus-visible:outline-none w-full\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\nStepperContent.displayName = \"StepperContent\";\n\nexport type StepperListProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const StepperList = React.forwardRef<HTMLDivElement, StepperListProps>(\n ({ className, children, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n if (!ctx) throw new Error(\"StepperList must be used within a Stepper\");\n\n const isResponsiveHorizontal = ctx.orientation === \"horizontal\" && (ctx.responsive ?? true);\n\n const orientationClass = isResponsiveHorizontal\n ? \"flex flex-col sm:flex-row items-start sm:items-center justify-between w-full relative gap-4\"\n : ctx.orientation === \"horizontal\"\n ? \"flex items-center justify-between w-full relative gap-4\"\n : \"flex flex-col items-start gap-6 relative w-full\";\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-orientation={ctx.orientation}\n className={cn(orientationClass, className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\nStepperList.displayName = \"StepperList\";\n\nexport interface StepperItemProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n disabled?: boolean;\n}\n\nexport const StepperItem = React.forwardRef<HTMLDivElement, StepperItemProps>(\n ({ value, disabled = false, className, children, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n if (!ctx) throw new Error(\"StepperItem must be used within a Stepper\");\n\n const { registerStep, unregisterStep } = ctx;\n\n React.useEffect(() => {\n registerStep(value);\n return () => unregisterStep(value);\n }, [value, registerStep, unregisterStep]);\n\n const isLast = ctx.steps[ctx.steps.length - 1] === value;\n const isResponsiveHorizontal = ctx.orientation === \"horizontal\" && (ctx.responsive ?? true);\n\n return (\n <StepperItemContext.Provider value={{ value, disabled, isLast }}>\n <div\n ref={ref}\n className={cn(\n \"group relative flex items-center gap-3 z-10\",\n ctx.orientation === \"vertical\"\n ? \"flex items-start w-full\"\n : isResponsiveHorizontal\n ? \"w-full sm:w-auto items-start sm:items-center\"\n : \"\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </StepperItemContext.Provider>\n );\n }\n);\nStepperItem.displayName = \"StepperItem\";\n\nexport type StepperSeparatorProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const StepperSeparator = React.forwardRef<HTMLDivElement, StepperSeparatorProps>(\n ({ className, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n if (!ctx) throw new Error(\"StepperSeparator must be used within a Stepper\");\n\n const isResponsiveHorizontal = ctx.orientation === \"horizontal\" && (ctx.responsive ?? true);\n\n return (\n <div\n ref={ref}\n className={cn(\n isResponsiveHorizontal\n ? \"hidden sm:block flex-1 h-[2px] bg-border transition-all duration-300\"\n : ctx.orientation === \"horizontal\"\n ? \"flex-1 h-[2px] bg-border transition-all duration-300\"\n : \"w-[2px] bg-border absolute left-[17px] top-8 bottom-0 -ml-px z-0\",\n className\n )}\n {...props}\n />\n );\n }\n);\nStepperSeparator.displayName = \"StepperSeparator\";\n\nexport type StepperTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const StepperTrigger = React.forwardRef<HTMLButtonElement, StepperTriggerProps>(\n ({ className, children, onClick, onKeyDown, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n const itemCtx = React.useContext(StepperItemContext);\n \n if (!ctx || !itemCtx) {\n throw new Error(\"StepperTrigger must be used within a StepperItem inside a Stepper\");\n }\n\n const isCompleted = ctx.completedSteps.includes(itemCtx.value) || itemCtx.value < ctx.activeStep;\n const isActive = ctx.activeStep === itemCtx.value;\n\n // In linear mode, user can click completed steps to go back, but not future uncompleted ones\n const isClickable = !ctx.linear || isCompleted || isActive;\n const disabled = itemCtx.disabled || !isClickable;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n ctx.setStep(itemCtx.value);\n onClick?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n \n const triggers = Array.from(\n e.currentTarget.closest('[role=\"tablist\"]')?.querySelectorAll('[role=\"tab\"]') || []\n ) as HTMLElement[];\n\n const currentIndex = triggers.indexOf(e.currentTarget);\n if (currentIndex === -1) return;\n\n let targetIndex = -1;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n targetIndex = Math.min(currentIndex + 1, triggers.length - 1);\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n targetIndex = Math.max(currentIndex - 1, 0);\n }\n\n if (targetIndex !== -1 && triggers[targetIndex]) {\n e.preventDefault();\n triggers[targetIndex].focus();\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-disabled={disabled}\n tabIndex={isActive ? 0 : -1}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={cn(\n \"flex items-center gap-3 bg-transparent border-0 p-0 text-left cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary rounded-md disabled:cursor-not-allowed disabled:opacity-50\",\n ctx.orientation === \"vertical\" ? \"w-full\" : \"\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\nStepperTrigger.displayName = \"StepperTrigger\";\n\nexport type StepperIndicatorProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const StepperIndicator = React.forwardRef<HTMLSpanElement, StepperIndicatorProps>(\n ({ className, children, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n const itemCtx = React.useContext(StepperItemContext);\n \n if (!ctx || !itemCtx) {\n throw new Error(\"StepperIndicator must be used within a StepperItem inside a Stepper\");\n }\n\n const isCompleted = ctx.completedSteps.includes(itemCtx.value) || itemCtx.value < ctx.activeStep;\n const isActive = ctx.activeStep === itemCtx.value;\n\n return (\n <span\n ref={ref}\n className={cn(\n \"flex h-9 w-9 shrink-0 items-center justify-center rounded-full border text-sm font-semibold transition-all duration-200\",\n isCompleted\n ? \"bg-primary border-primary text-primary-foreground\"\n : isActive\n ? \"border-primary text-primary bg-primary/10 ring-2 ring-primary/20\"\n : \"border-border text-muted-foreground bg-muted/40\",\n className\n )}\n {...props}\n >\n {children ?? (isCompleted ? \"✓\" : itemCtx.value + 1)}\n </span>\n );\n }\n);\nStepperIndicator.displayName = \"StepperIndicator\";\n\nexport type StepperTitleProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const StepperTitle = React.forwardRef<HTMLSpanElement, StepperTitleProps>(\n ({ className, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n const itemCtx = React.useContext(StepperItemContext);\n \n if (!ctx || !itemCtx) {\n throw new Error(\"StepperTitle must be used within a StepperItem inside a Stepper\");\n }\n\n const isActive = ctx.activeStep === itemCtx.value;\n\n return (\n <span\n ref={ref}\n className={cn(\n \"text-sm font-medium transition-colors duration-200\",\n isActive ? \"text-foreground font-semibold\" : \"text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n }\n);\nStepperTitle.displayName = \"StepperTitle\";\n\nexport type StepperDescriptionProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const StepperDescription = React.forwardRef<HTMLSpanElement, StepperDescriptionProps>(\n ({ className, ...props }, ref) => {\n const itemCtx = React.useContext(StepperItemContext);\n if (!itemCtx) throw new Error(\"StepperDescription must be used within a StepperItem\");\n\n return (\n <span\n ref={ref}\n className={cn(\"text-xs text-muted-foreground text-left block\", className)}\n {...props}\n />\n );\n }\n);\nStepperDescription.displayName = \"StepperDescription\";\n\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface AppShellProps extends React.HTMLAttributes<HTMLDivElement> {\n banner?: React.ReactNode;\n header?: React.ReactNode;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n contentWidth?: \"default\" | \"narrow\" | \"wide\" | \"full\";\n headerPosition?: \"sticky\" | \"fixed\" | \"static\";\n headerVariant?: \"glass\" | \"solid\" | \"transparent\";\n paddedContent?: boolean;\n mobileNav?: React.ReactNode;\n bottomNav?: React.ReactNode;\n}\n\n\nexport interface AppShellBannerProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"primary\" | \"accent\" | \"muted\";\n closable?: boolean;\n onClose?: () => void;\n children: React.ReactNode;\n}\n\nexport interface AppShellHeaderProps extends React.HTMLAttributes<HTMLElement> {\n variant?: \"glass\" | \"solid\" | \"transparent\";\n position?: \"sticky\" | \"fixed\" | \"static\";\n bordered?: boolean;\n children?: React.ReactNode;\n mobileNav?: React.ReactNode;\n}\n\nexport interface AppShellMainProps extends React.HTMLAttributes<HTMLElement> {\n width?: \"default\" | \"narrow\" | \"wide\" | \"full\";\n padded?: boolean;\n children: React.ReactNode;\n}\n\nexport interface AppShellFooterProps extends React.HTMLAttributes<HTMLElement> {\n bordered?: boolean;\n children: React.ReactNode;\n}\n\nexport const AppShellBanner = React.forwardRef<HTMLDivElement, AppShellBannerProps>(\n ({ className, variant = \"primary\", closable, onClose, children, ...props }, ref) => {\n const variantClass = {\n primary: \"bg-primary text-primary-foreground\",\n accent: \"bg-secondary text-secondary-foreground\",\n muted: \"bg-surface border-b border-border text-muted-foreground\",\n }[variant];\n\n return (\n <div\n ref={ref}\n className={cn(\"px-4 py-2 text-sm font-medium text-center flex items-center justify-center relative z-30\", variantClass, className)}\n {...props}\n >\n <div className=\"flex-1\">{children}</div>\n {closable && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1 rounded opacity-80 hover:opacity-100 transition-opacity ml-2 cursor-pointer\"\n aria-label=\"Close banner\"\n >\n <svg width={14} height={14} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n }\n);\nAppShellBanner.displayName = \"AppShellBanner\";\n\nexport const AppShellHeader = React.forwardRef<HTMLElement, AppShellHeaderProps>(\n (\n {\n className,\n variant = \"glass\",\n position = \"sticky\",\n bordered = true,\n children,\n mobileNav,\n ...props\n },\n ref\n ) => {\n const [mobileOpen, setMobileOpen] = React.useState(false);\n\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && mobileOpen) {\n setMobileOpen(false);\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [mobileOpen]);\n\n React.useEffect(() => {\n if (mobileOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [mobileOpen]);\n\n\n const positionClass = {\n sticky: \"sticky top-0 z-40\",\n fixed: \"fixed top-0 left-0 right-0 z-40\",\n static: \"relative z-40\",\n }[position];\n\n const variantClass = {\n glass: \"bg-surface/80 backdrop-blur-md text-foreground\",\n solid: \"bg-surface text-foreground\",\n transparent: \"bg-transparent text-foreground\",\n }[variant];\n\n return (\n <>\n <header\n ref={ref}\n className={cn(\n \"w-full transition-colors\",\n positionClass,\n variantClass,\n bordered && \"border-b border-border/60\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 h-16 flex items-center justify-between gap-4\">\n {mobileNav && (\n <button\n type=\"button\"\n onClick={() => setMobileOpen(true)}\n className=\"md:hidden p-2 -ml-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n aria-label=\"Open navigation\"\n >\n <svg width={20} height={20} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n </button>\n )}\n {children}\n </div>\n </header>\n\n {mobileNav && mobileOpen && (\n <div className=\"fixed inset-0 z-50 md:hidden flex\">\n <div\n aria-hidden=\"true\"\n onClick={() => setMobileOpen(false)}\n className=\"fixed inset-0 bg-overlay backdrop-blur-[2px] transition-opacity duration-300\"\n />\n <aside\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Mobile Navigation\"\n className=\"relative z-10 w-72 h-full bg-surface border-r border-border flex flex-col shadow-kj-lg\"\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border\">\n <span className=\"text-xs font-bold uppercase tracking-wider text-muted-foreground\">Navigation</span>\n <button\n type=\"button\"\n onClick={() => setMobileOpen(false)}\n className=\"p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n aria-label=\"Close navigation\"\n >\n <svg width={16} height={16} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div className=\"flex-1 overflow-y-auto p-4\">\n {mobileNav}\n </div>\n </aside>\n </div>\n )}\n </>\n );\n }\n);\nAppShellHeader.displayName = \"AppShellHeader\";\n\nexport const AppShellMain = React.forwardRef<HTMLElement, AppShellMainProps>(\n ({ className, width = \"default\", padded = true, children, ...props }, ref) => {\n const widthClass = {\n default: \"max-w-7xl mx-auto w-full\",\n narrow: \"max-w-5xl mx-auto w-full\",\n wide: \"max-w-screen-2xl mx-auto w-full\",\n full: \"max-w-none w-full\",\n }[width];\n\n return (\n <main\n ref={ref}\n className={cn(\"flex-1\", padded && \"px-4 sm:px-6 lg:px-8 py-4 sm:py-6 md:py-12\", widthClass, className)}\n {...props}\n >\n {children}\n </main>\n );\n }\n);\nAppShellMain.displayName = \"AppShellMain\";\n\nexport const AppShellFooter = React.forwardRef<HTMLElement, AppShellFooterProps>(\n ({ className, bordered = true, children, ...props }, ref) => {\n return (\n <footer\n ref={ref}\n className={cn(\n \"w-full bg-surface text-foreground py-12 mt-auto\",\n bordered && \"border-t border-border\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">{children}</div>\n </footer>\n );\n }\n);\nAppShellFooter.displayName = \"AppShellFooter\";\n\ntype AppShellComponent = React.ForwardRefExoticComponent<\n AppShellProps & React.RefAttributes<HTMLDivElement>\n> & {\n Banner: typeof AppShellBanner;\n Header: typeof AppShellHeader;\n Main: typeof AppShellMain;\n Footer: typeof AppShellFooter;\n};\n\nexport const AppShell = React.forwardRef<HTMLDivElement, AppShellProps>(\n (\n {\n className,\n banner,\n header,\n children,\n footer,\n contentWidth = \"default\",\n headerPosition = \"sticky\",\n headerVariant = \"glass\",\n paddedContent = true,\n mobileNav,\n bottomNav,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\"min-h-screen bg-canvas text-foreground flex flex-col antialiased\", className)}\n {...props}\n >\n {banner && <AppShellBanner>{banner}</AppShellBanner>}\n {header && (\n <AppShellHeader variant={headerVariant} position={headerPosition} mobileNav={mobileNav}>\n {header}\n </AppShellHeader>\n )}\n <AppShellMain width={contentWidth} padded={paddedContent}>\n {children}\n </AppShellMain>\n {footer && <AppShellFooter>{footer}</AppShellFooter>}\n {bottomNav && (\n <div className=\"md:hidden sticky bottom-0 z-30 w-full bg-surface border-t border-border\">\n {bottomNav}\n </div>\n )}\n </div>\n );\n }\n) as AppShellComponent;\n\nAppShell.displayName = \"AppShell\";\nAppShell.Banner = AppShellBanner;\nAppShell.Header = AppShellHeader;\nAppShell.Main = AppShellMain;\nAppShell.Footer = AppShellFooter;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type RatingSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type RatingIconType = \"star\" | \"heart\" | \"flame\" | \"shield\" | \"thumb\";\n\nexport interface RatingProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n value?: number;\n defaultValue?: number;\n max?: number;\n precision?: number;\n size?: RatingSize;\n icon?: RatingIconType | React.ComponentType<{ className?: string }>;\n color?: string;\n emptyColor?: string;\n allowClear?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n hoverPreview?: boolean;\n showValue?: boolean;\n showCount?: boolean;\n count?: number;\n name?: string;\n onChange?: (value: number) => void;\n onHoverChange?: (value: number | null) => void;\n}\n\nconst sizeClasses: Record<RatingSize, { wrapper: string; star: string; text: string }> = {\n sm: { wrapper: \"kj-rating-sm gap-1\", star: \"w-4 h-4\", text: \"text-xs\" },\n md: { wrapper: \"kj-rating-md gap-1.5\", star: \"w-5 h-5\", text: \"text-sm\" },\n lg: { wrapper: \"kj-rating-lg gap-2\", star: \"w-6 h-6\", text: \"text-base\" },\n xl: { wrapper: \"kj-rating-xl gap-2.5\", star: \"w-8 h-8\", text: \"text-lg\" },\n};\n\nconst iconPaths: Record<RatingIconType, string> = {\n star: \"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\",\n heart: \"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\",\n flame: \"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z\",\n shield: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67 0C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n thumb: \"M7 10v12M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\",\n};\n\nfunction roundToPrecision(value: number, precision: number): number {\n const inv = 1 / precision;\n return Math.round(value * inv) / inv;\n}\n\nfunction isCssColor(str: string): boolean {\n return str.startsWith(\"#\") || str.startsWith(\"rgb\") || str.startsWith(\"hsl\");\n}\n\nexport const Rating = React.forwardRef<HTMLDivElement, RatingProps>(\n (\n {\n value: controlledValue,\n defaultValue = 0,\n max = 5,\n precision = 1,\n size = \"md\",\n icon = \"star\",\n color = \"#f59e0b\",\n emptyColor = \"#e5e7eb\",\n allowClear = true,\n disabled = false,\n readOnly = false,\n hoverPreview = true,\n showValue = false,\n showCount = false,\n count,\n name,\n onChange,\n onHoverChange,\n className,\n onKeyDown,\n onMouseLeave,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = React.useState<number>(\n controlledValue ?? defaultValue\n );\n const [hoverValue, setHoverValue] = React.useState<number | null>(null);\n const instanceId = React.useId();\n\n React.useEffect(() => {\n if (isControlled) {\n setInternalValue(controlledValue);\n }\n }, [isControlled, controlledValue]);\n\n const currentValue = isControlled ? controlledValue : internalValue;\n const displayValue =\n hoverPreview && hoverValue !== null ? hoverValue : currentValue;\n\n const handleValueChange = (newValue: number) => {\n if (disabled || readOnly) return;\n const clamped = Math.max(0, Math.min(max, roundToPrecision(newValue, precision)));\n if (!isControlled) {\n setInternalValue(clamped);\n }\n onChange?.(clamped);\n };\n\n const getEventValue = (\n e: React.MouseEvent<HTMLButtonElement>,\n starIndex: number\n ): number => {\n const target = e.currentTarget;\n const width = target.offsetWidth;\n const nativeEv = e.nativeEvent as any;\n const offsetX =\n nativeEv?.offsetX ?? nativeEv?.nativeEvent?.offsetX ?? (e as any).offsetX;\n\n if (width > 0 && offsetX !== undefined && offsetX !== null) {\n const ratio = Math.max(0.001, Math.min(1, offsetX / width));\n const stepInStar = Math.ceil(ratio / precision) * precision;\n return Math.min(max, Math.max(precision, starIndex - 1 + stepInStar));\n }\n return starIndex;\n };\n\n const handleStarClick = (\n e: React.MouseEvent<HTMLButtonElement>,\n starIndex: number\n ) => {\n if (disabled || readOnly) return;\n const targetValue = getEventValue(e, starIndex);\n let nextValue = targetValue;\n if (allowClear && targetValue === currentValue) {\n nextValue = 0;\n }\n handleValueChange(nextValue);\n };\n\n const handleStarMouseMove = (\n e: React.MouseEvent<HTMLButtonElement>,\n starIndex: number\n ) => {\n if (disabled || readOnly) return;\n if (hoverPreview) {\n const hoveredVal = getEventValue(e, starIndex);\n setHoverValue(hoveredVal);\n onHoverChange?.(hoveredVal);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled || readOnly) {\n onKeyDown?.(e);\n return;\n }\n\n let nextVal: number | null = null;\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n nextVal = Math.min(max, currentValue + precision);\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n nextVal = Math.max(0, currentValue - precision);\n break;\n case \"Home\":\n nextVal = 0;\n break;\n case \"End\":\n nextVal = max;\n break;\n }\n\n if (nextVal !== null) {\n e.preventDefault();\n handleValueChange(nextVal);\n }\n\n onKeyDown?.(e);\n };\n\n const handleContainerMouseLeave = (e: React.MouseEvent<HTMLDivElement>) => {\n if (hoverPreview) {\n setHoverValue(null);\n onHoverChange?.(null);\n }\n onMouseLeave?.(e);\n };\n\n const sizing = sizeClasses[size] || sizeClasses.md;\n\n return (\n <div\n ref={ref}\n role={readOnly ? \"img\" : \"radiogroup\"}\n tabIndex={disabled || readOnly ? -1 : 0}\n aria-valuenow={displayValue}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n aria-label={\n ariaLabel || (readOnly ? `Rated ${displayValue} out of ${max}` : \"Rating\")\n }\n onKeyDown={handleKeyDown}\n onMouseLeave={handleContainerMouseLeave}\n className={cn(\n \"inline-flex items-center select-none focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md\",\n disabled && \"opacity-50 cursor-not-allowed\",\n readOnly && \"cursor-default\",\n !disabled && !readOnly && \"cursor-pointer\",\n sizing.wrapper,\n className\n )}\n {...props}\n >\n {name && <input type=\"hidden\" name={name} value={currentValue} />}\n\n <div className=\"inline-flex items-center gap-0.5\">\n {Array.from({ length: max }, (_, index) => {\n const starIndex = index + 1;\n const fillFraction = Math.max(\n 0,\n Math.min(1, displayValue - index)\n );\n const gradientId = `rating-grad-${instanceId}-${index}-${Math.round(\n fillFraction * 100\n )}`;\n\n const CustomIconComponent =\n typeof icon === \"function\" || typeof icon === \"object\"\n ? (icon as React.ComponentType<{ className?: string }>)\n : null;\n const builtInIconType =\n typeof icon === \"string\" ? icon : \"star\";\n const pathD = iconPaths[builtInIconType] || iconPaths.star;\n\n return (\n <button\n key={index}\n type=\"button\"\n tabIndex={-1}\n data-testid=\"rating-star\"\n role={readOnly ? undefined : \"radio\"}\n aria-checked={readOnly ? undefined : displayValue >= starIndex}\n aria-label={`${starIndex} of ${max} stars`}\n disabled={disabled}\n onClick={(e) => handleStarClick(e, starIndex)}\n onMouseMove={(e) => handleStarMouseMove(e, starIndex)}\n onMouseEnter={(e) => handleStarMouseMove(e, starIndex)}\n className={cn(\n \"p-0.5 focus:outline-none transition-transform active:scale-95 disabled:scale-100\",\n sizing.star\n )}\n >\n {CustomIconComponent ? (\n <CustomIconComponent\n className={cn(\n \"w-full h-full\",\n fillFraction >= 0.5\n ? !isCssColor(color) && color\n : !isCssColor(emptyColor) && emptyColor\n )}\n />\n ) : (\n <svg\n viewBox=\"0 0 24 24\"\n className=\"w-full h-full\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {fillFraction > 0 && fillFraction < 1 && (\n <defs>\n <linearGradient\n id={gradientId}\n x1=\"0%\"\n y1=\"0%\"\n x2=\"100%\"\n y2=\"0%\"\n >\n {isCssColor(color) ? (\n <stop\n offset={`${fillFraction * 100}%`}\n stopColor={color}\n />\n ) : (\n <stop\n offset={`${fillFraction * 100}%`}\n stopColor=\"currentColor\"\n className={color}\n />\n )}\n {isCssColor(emptyColor) ? (\n <stop\n offset={`${fillFraction * 100}%`}\n stopColor={emptyColor}\n />\n ) : (\n <stop\n offset={`${fillFraction * 100}%`}\n stopColor=\"currentColor\"\n className={emptyColor}\n />\n )}\n </linearGradient>\n </defs>\n )}\n <path\n d={pathD}\n fill={\n fillFraction === 1\n ? isCssColor(color)\n ? color\n : undefined\n : fillFraction === 0\n ? isCssColor(emptyColor)\n ? emptyColor\n : undefined\n : `url(#${gradientId})`\n }\n className={\n fillFraction === 1\n ? !isCssColor(color)\n ? color\n : undefined\n : fillFraction === 0\n ? !isCssColor(emptyColor)\n ? emptyColor\n : undefined\n : undefined\n }\n stroke=\"none\"\n />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n\n {showValue && (\n <span className={cn(\"font-medium text-foreground ml-1.5\", sizing.text)}>\n {displayValue}\n </span>\n )}\n\n {showCount && count !== undefined && (\n <span className={cn(\"text-muted-foreground ml-1\", sizing.text)}>\n ({count})\n </span>\n )}\n </div>\n );\n }\n);\n\nRating.displayName = \"Rating\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { Label, Hint } from \"../field\";\nimport { Rating, type RatingProps } from \"./rating\";\n\nexport interface RatingFieldProps extends RatingProps {\n label?: React.ReactNode;\n helperText?: React.ReactNode;\n errorMessage?: React.ReactNode;\n required?: boolean;\n containerClassName?: string;\n}\n\nexport const RatingField = React.forwardRef<HTMLDivElement, RatingFieldProps>(\n (\n {\n id: customId,\n label,\n helperText,\n errorMessage,\n required,\n className,\n containerClassName,\n \"aria-describedby\": ariaDescribedBy,\n ...ratingProps\n },\n ref\n ) => {\n const generatedId = React.useId();\n const id = customId || generatedId;\n const helperId = helperText ? `${id}-helper` : undefined;\n const errorId = errorMessage ? `${id}-error` : undefined;\n\n const describedBy =\n [ariaDescribedBy, helperId, errorId].filter(Boolean).join(\" \") || undefined;\n\n return (\n <div className={cn(\"flex flex-col gap-1.5\", containerClassName)}>\n {label && (\n <Label htmlFor={id} required={required}>\n {label}\n </Label>\n )}\n <Rating\n ref={ref}\n id={id}\n className={className}\n aria-describedby={describedBy}\n {...ratingProps}\n />\n {helperText && (\n <Hint id={helperId}>\n {helperText}\n </Hint>\n )}\n {errorMessage && (\n <Hint id={errorId} error>\n {errorMessage}\n </Hint>\n )}\n </div>\n );\n }\n);\n\nRatingField.displayName = \"RatingField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { Rating, type RatingSize, type RatingIconType } from \"./rating\";\nimport { Progress } from \"../progress\";\n\nexport interface RatingDistributionItem {\n stars: number;\n count: number;\n percentage: number;\n}\n\nexport interface RatingSummaryProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n average: number;\n totalCount: number;\n distribution: RatingDistributionItem[];\n max?: number;\n size?: RatingSize;\n icon?: RatingIconType | React.ComponentType<{ className?: string }>;\n}\n\nexport const RatingSummary = React.forwardRef<HTMLDivElement, RatingSummaryProps>(\n (\n {\n average,\n totalCount,\n distribution,\n max = 5,\n size = \"md\",\n icon = \"star\",\n className,\n ...props\n },\n ref\n ) => {\n const formattedAverage = Number.isInteger(average)\n ? average.toString()\n : average.toFixed(1);\n\n const formattedTotalCount = totalCount.toLocaleString();\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-6 sm:flex-row sm:items-center sm:gap-8 p-4 rounded-xl border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n >\n {/* Average Score Summary Section */}\n <div className=\"flex flex-col items-center justify-center p-4 rounded-lg bg-muted/40 text-center min-w-[140px]\">\n <div className=\"text-4xl font-bold tracking-tight text-foreground\">\n {formattedAverage}\n </div>\n <div className=\"my-1.5\">\n <Rating\n value={average}\n max={max}\n size={size}\n icon={icon}\n readOnly\n allowClear={false}\n hoverPreview={false}\n />\n </div>\n <div className=\"text-xs text-muted-foreground\">\n {formattedTotalCount} total ratings\n </div>\n </div>\n\n {/* Distribution Breakdown Progress Bars Section */}\n <div className=\"flex-1 flex flex-col gap-2.5\">\n {distribution.map((item) => (\n <div key={item.stars} className=\"flex items-center gap-3 text-sm\">\n <span className=\"w-12 text-right font-medium text-foreground whitespace-nowrap\">\n {item.stars} star\n </span>\n <Progress\n value={item.percentage}\n aria-label={`${item.stars} star ratings: ${item.percentage}%`}\n className=\"h-2.5 flex-1\"\n />\n <span className=\"w-12 text-right text-xs text-muted-foreground font-mono\">\n {item.percentage}%\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n }\n);\n\nRatingSummary.displayName = \"RatingSummary\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\nimport { Button, buttonVariants } from \"./button\";\n\nexport type PricingFeatureItem =\n | string\n | {\n text: string;\n included?: boolean;\n tooltip?: string;\n };\n\nexport interface PricingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n price: string | number;\n period?: string;\n description?: string;\n features?: PricingFeatureItem[];\n variant?: \"default\" | \"featured\" | \"outline\";\n badge?: string;\n popular?: boolean;\n ctaText?: string;\n onCtaClick?: React.MouseEventHandler<HTMLButtonElement>;\n ctaHref?: string;\n cta?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport const PricingCard = React.forwardRef<HTMLDivElement, PricingCardProps>(\n (\n {\n className,\n name,\n price,\n period,\n description,\n features = [],\n variant,\n badge,\n popular = false,\n ctaText = \"Get Started\",\n onCtaClick,\n ctaHref,\n cta,\n disabled = false,\n ...props\n },\n ref\n ) => {\n const resolvedVariant = variant || (popular ? \"featured\" : \"default\");\n const displayBadge = badge || (popular ? \"Most Popular\" : undefined);\n\n const isFeatured = resolvedVariant === \"featured\";\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"relative flex flex-col p-6 transition-all duration-300\",\n isFeatured\n ? \"border-amber-500/80 shadow-kj-lg ring-1 ring-amber-500/30\"\n : resolvedVariant === \"outline\"\n ? \"border-border/80 bg-transparent shadow-none\"\n : \"border-border shadow-kj-sm\",\n className\n )}\n {...props}\n >\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div>\n <h3 className=\"text-xl font-bold tracking-tight text-foreground\">{name}</h3>\n {description && <p className=\"mt-1 text-xs text-muted-foreground\">{description}</p>}\n </div>\n {displayBadge && (\n <span className=\"rounded-full bg-amber-500 px-3 py-0.5 text-[0.7rem] font-bold uppercase tracking-wider text-black shadow-sm shrink-0 mt-0.5\">\n {displayBadge}\n </span>\n )}\n </div>\n\n <div className=\"mb-6 flex items-baseline gap-1\">\n <span className=\"text-3xl font-extrabold tracking-tight text-foreground\">{price}</span>\n {period && <span className=\"text-xs font-medium text-muted-foreground\">{period}</span>}\n </div>\n\n {features.length > 0 && (\n <ul className=\"mb-6 flex flex-1 flex-col gap-2.5 p-0 text-xs list-none\">\n {features.map((feature, idx) => {\n const text = typeof feature === \"string\" ? feature : feature.text;\n const included = typeof feature === \"string\" ? true : feature.included ?? true;\n\n return (\n <li key={idx} className=\"flex items-center gap-2.5\">\n <span\n className={cn(\n \"flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[0.65rem] font-bold\",\n included\n ? \"bg-amber-500/15 text-amber-600 dark:text-amber-400\"\n : \"bg-muted text-muted-foreground/60\"\n )}\n >\n {included ? \"✓\" : \"✕\"}\n </span>\n <span className={cn(included ? \"text-foreground\" : \"text-muted-foreground line-through opacity-70\")}>\n {text}\n </span>\n </li>\n );\n })}\n </ul>\n )}\n\n <div className=\"mt-auto pt-2\">\n {cta ? (\n cta\n ) : ctaHref ? (\n /* eslint-disable-next-line jsx-a11y/anchor-is-valid */\n <a\n href={disabled ? undefined : ctaHref}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : undefined}\n className={cn(\n buttonVariants({ variant: isFeatured ? \"primary\" : \"outline\" }),\n \"w-full justify-center\",\n disabled && \"pointer-events-none opacity-50\"\n )}\n >\n {ctaText}\n </a>\n ) : (\n <Button\n variant={isFeatured ? \"primary\" : \"outline\"}\n className=\"w-full justify-center\"\n onClick={onCtaClick}\n disabled={disabled}\n >\n {ctaText}\n </Button>\n )}\n </div>\n </Card>\n );\n }\n);\nPricingCard.displayName = \"PricingCard\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\nimport { Badge } from \"./badge\";\nimport { Avatar } from \"./avatar\";\n\nexport interface BlogCardAuthor {\n name: string;\n avatarUrl?: string;\n role?: string;\n}\n\nexport interface BlogCardProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"title\"> {\n title: string;\n description?: string;\n coverUrl?: string;\n coverAlt?: string;\n category?: string;\n readTime?: string;\n publishedAt?: string;\n author?: BlogCardAuthor;\n orientation?: \"vertical\" | \"horizontal\";\n href?: string;\n}\n\nexport const BlogCard = React.forwardRef<HTMLElement, BlogCardProps>(\n (\n {\n className,\n title,\n description,\n coverUrl,\n coverAlt,\n category,\n readTime,\n publishedAt,\n author,\n orientation = \"vertical\",\n href,\n ...props\n },\n ref\n ) => {\n const isHorizontal = orientation === \"horizontal\";\n const isInteractive = Boolean(href || props.onClick);\n\n return (\n <Card\n ref={ref}\n as={href ? \"a\" : \"div\"}\n href={href}\n interactive={isInteractive}\n className={cn(\n \"group flex overflow-hidden transition-all duration-300\",\n isHorizontal ? \"flex-col sm:flex-row\" : \"flex-col\",\n className\n )}\n {...props}\n >\n {coverUrl && (\n <div\n className={cn(\n \"relative overflow-hidden bg-muted shrink-0\",\n isHorizontal ? \"w-full sm:w-2/5 min-h-[160px]\" : \"w-full aspect-[16/9]\"\n )}\n >\n <img\n src={coverUrl}\n alt={coverAlt || title}\n className=\"h-full w-full object-cover transition-transform duration-300 group-hover:scale-105\"\n />\n </div>\n )}\n\n <div className=\"flex flex-1 flex-col justify-between p-5\">\n <div>\n <div className=\"mb-2 flex items-center gap-2 text-[0.75rem] text-muted-foreground\">\n {category && <Badge variant=\"secondary\">{category}</Badge>}\n {(readTime || publishedAt) && (\n <span>\n {publishedAt} {publishedAt && readTime && \"•\"} {readTime}\n </span>\n )}\n </div>\n\n <h3 className=\"text-base font-bold tracking-tight text-foreground transition-colors group-hover:text-primary\">\n {title}\n </h3>\n\n {description && (\n <p className=\"mt-1.5 text-xs text-muted-foreground line-clamp-2\">{description}</p>\n )}\n </div>\n\n {author && (\n <div className=\"mt-4 flex items-center gap-2.5 border-t border-border/60 pt-3\">\n <Avatar src={author.avatarUrl} alt={author.name} size=\"sm\">\n {author.name.charAt(0)}\n </Avatar>\n <div className=\"flex flex-col text-xs\">\n <span className=\"font-semibold text-foreground\">{author.name}</span>\n {author.role && <span className=\"text-[0.7rem] text-muted-foreground\">{author.role}</span>}\n </div>\n </div>\n )}\n </div>\n </Card>\n );\n }\n);\nBlogCard.displayName = \"BlogCard\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\nimport { Badge } from \"./badge\";\n\nexport interface ProjectCardMetric {\n label?: string;\n value: string | number;\n icon?: React.ReactNode;\n}\n\nexport interface ProjectCardStatus {\n label: string;\n variant?: \"success\" | \"warning\" | \"danger\" | \"neutral\" | \"info\";\n}\n\nexport interface ProjectCardProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"title\"> {\n title: string;\n description?: string;\n status?: ProjectCardStatus;\n techStack?: string[];\n metrics?: ProjectCardMetric[];\n updatedAt?: string;\n actions?: React.ReactNode;\n}\n\nexport const ProjectCard = React.forwardRef<HTMLElement, ProjectCardProps>(\n (\n {\n className,\n title,\n description,\n status,\n techStack = [],\n metrics = [],\n updatedAt,\n actions,\n href,\n ...props\n },\n ref\n ) => {\n const isInteractive = Boolean(href || props.onClick);\n\n return (\n <Card\n ref={ref}\n as={href ? \"a\" : \"div\"}\n href={href}\n interactive={isInteractive}\n className={cn(\n \"group flex flex-col justify-between p-5 transition-all duration-300\",\n className\n )}\n {...props}\n >\n <div>\n <div className=\"flex items-start justify-between gap-3\">\n <h3 className=\"text-base font-bold tracking-tight text-foreground transition-colors group-hover:text-primary\">\n {title}\n </h3>\n {status && (\n <Badge variant={status.variant || \"neutral\"} className=\"shrink-0 text-[0.65rem]\">\n {status.label}\n </Badge>\n )}\n </div>\n\n {description && (\n <p className=\"mt-1.5 text-xs text-muted-foreground line-clamp-2\">{description}</p>\n )}\n\n {techStack.length > 0 && (\n <div className=\"mt-3.5 flex flex-wrap gap-1.5\">\n {techStack.map((tech) => (\n <Badge key={tech} variant=\"neutral\" className=\"text-[0.65rem] py-0 px-2 font-mono\">\n {tech}\n </Badge>\n ))}\n </div>\n )}\n </div>\n\n {(metrics.length > 0 || updatedAt || actions) && (\n <div className=\"mt-4 flex items-center justify-between border-t border-border/60 pt-3 text-[0.75rem] text-muted-foreground\">\n <div className=\"flex items-center gap-3\">\n {metrics.map((metric, idx) => (\n <span\n key={metric.label ? `${metric.label}-${idx}` : idx}\n className=\"flex items-center gap-1 font-mono font-medium\"\n >\n {metric.icon && <span className=\"shrink-0\">{metric.icon}</span>}\n <span>{metric.value}</span>\n {metric.label && <span className=\"text-muted-foreground/70\">{metric.label}</span>}\n </span>\n ))}\n {updatedAt && <span>{updatedAt}</span>}\n </div>\n\n {actions && (\n <div\n onClick={(e) => e.stopPropagation()}\n className=\"flex items-center gap-1 shrink-0\"\n >\n {actions}\n </div>\n )}\n </div>\n )}\n </Card>\n );\n }\n);\nProjectCard.displayName = \"ProjectCard\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface NotificationItemData {\n /** Unique stable identifier. */\n id: string;\n /** Primary notification text. */\n title: React.ReactNode;\n /** Optional second line (preview, quote, etc.). */\n body?: React.ReactNode;\n /**\n * Leading visual (28×28 circle).\n * SVG ReactNode → icon mode. If avatarSrc is also provided, avatarSrc wins.\n */\n icon?: React.ReactNode;\n /** Image URL for avatar mode. */\n avatarSrc?: string;\n /** 1–2 character initials for avatar fallback. */\n avatarFallback?: string;\n /** Shown as a relative time string. */\n timestamp: Date | string;\n /** Defaults to false (unread). */\n read?: boolean;\n /**\n * If provided, the row renders as <a href={href}>.\n * Clicking marks the item read and navigates.\n */\n href?: string;\n /** Called after the row is clicked (after mark-read). */\n onClick?: (id: string) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Relative timestamp utility (exported for unit tests)\n// ---------------------------------------------------------------------------\n\nexport function formatRelativeTime(date: Date | string): string {\n const d = typeof date === \"string\" ? new Date(date) : date;\n if (isNaN(d.getTime())) return \"\";\n const diffMs = Date.now() - d.getTime();\n const diffMin = Math.floor(diffMs / 60_000);\n const diffH = Math.floor(diffMs / 3_600_000);\n const diffD = Math.floor(diffMs / 86_400_000);\n\n if (diffMin < 1) return \"Just now\";\n if (diffMin < 60) return `${diffMin} min ago`;\n if (diffH < 24) return diffH === 1 ? \"1 hour ago\" : `${diffH} hours ago`;\n // \"Yesterday\" fires from 24h to 47h59m (floor-based). Intentional — matches common app conventions.\n if (diffD === 1) return \"Yesterday\";\n if (diffD < 7) return `${diffD} days ago`;\n return d.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n}\n\n// ---------------------------------------------------------------------------\n// useInboxState — optional local-state convenience hook\n// ---------------------------------------------------------------------------\n\nexport interface InboxStateReturn {\n items: NotificationItemData[];\n unreadCount: number;\n markRead: (id: string) => void;\n markAllRead: () => void;\n dismiss: (id: string) => void;\n}\n\n/**\n * Local-state convenience hook for InboxPopover.\n * Intended for demos, Storybook stories, and simple apps.\n *\n * NOTE: `initial` is used only as the seed value for `useState`.\n * Re-rendering the parent with a new `initial` array does NOT reset\n * the hook's state. This is intentional — the hook owns its state\n * independently after mount. To reset from the outside, remount the\n * component using a `key` prop.\n */\nexport function useInboxState(initial: NotificationItemData[]): InboxStateReturn {\n const [items, setItems] = React.useState<NotificationItemData[]>(initial);\n\n const unreadCount = items.filter((i) => !i.read).length;\n\n const markRead = React.useCallback((id: string) => {\n setItems((prev) =>\n prev.map((item) => (item.id === id ? { ...item, read: true } : item))\n );\n }, []);\n\n const markAllRead = React.useCallback(() => {\n setItems((prev) => prev.map((item) => ({ ...item, read: true })));\n }, []);\n\n const dismiss = React.useCallback((id: string) => {\n setItems((prev) => prev.filter((item) => item.id !== id));\n }, []);\n\n return { items, unreadCount, markRead, markAllRead, dismiss };\n}\n\n// ---------------------------------------------------------------------------\n// InboxPopover — context + root\n// ---------------------------------------------------------------------------\n\ninterface InboxCtx {\n open: boolean;\n setOpen: (v: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n}\nconst InboxContext = React.createContext<InboxCtx | null>(null);\n\nfunction useInboxContext(part: string): InboxCtx {\n const ctx = React.useContext(InboxContext);\n if (!ctx) throw new Error(`${part} must be used inside <InboxPopover>`);\n return ctx;\n}\n\nexport interface InboxPopoverProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n}\n\nexport function InboxPopover({\n children,\n className,\n open: openProp,\n onOpenChange,\n}: InboxPopoverProps) {\n const [openState, setOpenState] = React.useState(false);\n const controlled = openProp !== undefined;\n const open = controlled ? openProp : openState;\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n const ref = React.useRef<HTMLDivElement>(null);\n\n const setOpen = React.useCallback(\n (v: boolean) => {\n if (!controlled) setOpenState(v);\n onOpenChange?.(v);\n },\n [controlled, onOpenChange]\n );\n\n React.useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n const onEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n document.addEventListener(\"keydown\", onEsc);\n return () => {\n document.removeEventListener(\"mousedown\", onDoc);\n document.removeEventListener(\"keydown\", onEsc);\n };\n }, [open, setOpen]);\n\n const ctxValue = React.useMemo(() => ({ open, setOpen, triggerRef }), [open, setOpen]);\n\n return (\n <InboxContext.Provider value={ctxValue}>\n <div ref={ref} className={cn(\"relative inline-block\", className)}>\n {children}\n </div>\n </InboxContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InboxTrigger — bell button with unread badge\n// ---------------------------------------------------------------------------\n\nexport interface InboxTriggerProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Badge count. Hidden when 0 or undefined. */\n unreadCount?: number;\n /** Accessible label (default: \"Notifications\"). */\n label?: string;\n}\n\nexport function InboxTrigger({\n unreadCount,\n label = \"Notifications\",\n className,\n onClick,\n ...props\n}: InboxTriggerProps) {\n const ctx = useInboxContext(\"InboxTrigger\");\n const setRef = (node: HTMLButtonElement | null) => {\n // eslint-disable-next-line react-hooks/immutability\n ctx.triggerRef.current = node;\n };\n\n const displayCount =\n unreadCount == null || unreadCount <= 0\n ? null\n : unreadCount > 99\n ? \"99+\"\n : String(unreadCount);\n\n const defaultLabel = displayCount ? `${label} (${displayCount} unread)` : label;\n\n return (\n <button\n ref={setRef}\n type=\"button\"\n aria-label={defaultLabel}\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n className={cn(\n \"relative inline-flex items-center justify-center w-9 h-9 rounded-full\",\n \"bg-surface border border-border text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary\",\n className\n )}\n onClick={(e) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n }}\n {...props}\n >\n {/* Bell icon */}\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n\n {/* Unread badge */}\n {displayCount != null && (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"absolute -top-0.5 -right-0.5 min-w-[16px] h-4 px-1\",\n \"rounded-full bg-primary text-primary-foreground\",\n \"text-[9px] font-bold leading-4 flex items-center justify-center\"\n )}\n >\n {displayCount}\n </span>\n )}\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// NotificationItem\n// ---------------------------------------------------------------------------\n\nexport interface NotificationItemProps {\n item: NotificationItemData;\n onDismiss?: (id: string) => void;\n className?: string;\n}\n\nexport function NotificationItem({ item, onDismiss, className }: NotificationItemProps) {\n const leadingSlot = item.avatarSrc ? (\n <img\n src={item.avatarSrc}\n alt={item.avatarFallback ?? \"\"}\n className=\"w-7 h-7 rounded-full object-cover flex-shrink-0\"\n />\n ) : item.avatarFallback ? (\n <span className=\"w-7 h-7 rounded-full bg-primary/20 text-primary text-[10px] font-bold flex items-center justify-center flex-shrink-0 select-none\">\n {item.avatarFallback}\n </span>\n ) : item.icon ? (\n <span className=\"w-7 h-7 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0 text-primary\">\n {item.icon}\n </span>\n ) : null;\n\n const textBlock = (\n <div className=\"flex-1 min-w-0\">\n <p className={cn(\"text-sm leading-snug\", item.read ? \"text-muted-foreground\" : \"text-foreground\")}>\n {item.title}\n </p>\n {item.body && (\n <p className=\"text-xs text-muted-foreground mt-0.5 truncate\">{item.body}</p>\n )}\n <p className=\"text-xs text-muted-foreground mt-1\">{formatRelativeTime(item.timestamp)}</p>\n </div>\n );\n\n const sharedClass = cn(\n \"group relative flex items-start gap-2.5 px-3.5 py-2.5 w-full text-left\",\n \"border-b border-border last:border-0\",\n !item.read && \"bg-primary/[0.04]\",\n \"hover:bg-muted/50 transition-colors\",\n className\n );\n\n const mainContent = (\n <>\n {leadingSlot}\n {textBlock}\n </>\n );\n\n const mainAction = item.href ? (\n <a\n href={item.href}\n onClick={() => item.onClick?.(item.id)}\n className=\"flex-1 flex items-start gap-2.5 min-w-0 text-left outline-none\"\n >\n {mainContent}\n </a>\n ) : (\n <button\n type=\"button\"\n onClick={() => item.onClick?.(item.id)}\n className=\"flex-1 flex items-start gap-2.5 min-w-0 text-left outline-none\"\n >\n {mainContent}\n </button>\n );\n\n return (\n <div className={sharedClass}>\n {mainAction}\n <div className=\"flex items-start gap-2 flex-shrink-0 mt-0.5\">\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onDismiss?.(item.id);\n }}\n className={cn(\n \"text-muted-foreground hover:text-foreground transition-colors\",\n \"opacity-0 group-hover:opacity-100 focus:opacity-100\",\n \"text-base leading-none p-0.5 rounded\"\n )}\n >\n ×\n </button>\n <span\n aria-label={item.read ? undefined : \"Unread\"}\n aria-hidden={item.read ? true : undefined}\n className={cn(\n \"w-[7px] h-[7px] rounded-full flex-shrink-0 mt-1\",\n item.read ? \"border border-border\" : \"bg-primary\"\n )}\n />\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InboxContent — full panel\n// ---------------------------------------------------------------------------\n\nexport interface InboxContentProps {\n items: NotificationItemData[];\n onMarkAllRead?: () => void;\n onDismiss?: (id: string) => void;\n viewAllHref?: string;\n viewAllLabel?: string;\n emptyState?: React.ReactNode;\n align?: \"auto\" | \"start\" | \"end\";\n width?: number | string;\n maxHeight?: number | string;\n className?: string;\n}\n\nexport function InboxContent({\n items,\n onMarkAllRead,\n onDismiss,\n viewAllHref,\n viewAllLabel = \"View all notifications\",\n emptyState,\n align = \"auto\",\n width = 360,\n maxHeight = 320,\n className,\n}: InboxContentProps) {\n const ctx = useInboxContext(\"InboxContent\");\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (ctx.open) ref.current?.focus();\n }, [ctx.open]);\n\n if (!ctx.open) return null;\n\n const allRead = items.length === 0 || items.every((i) => i.read);\n\n const defaultEmptyState = (\n <div className=\"flex flex-col items-center justify-center py-10 px-5 text-center\">\n <span className=\"w-10 h-10 rounded-full bg-muted flex items-center justify-center mb-3 text-muted-foreground\">\n <svg width={18} height={18} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n </span>\n <p className=\"text-sm font-medium text-foreground\">All caught up</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">No new notifications</p>\n </div>\n );\n\n const alignClass = {\n start: \"left-0 top-[calc(100%+6px)]\",\n end: \"right-0 top-[calc(100%+6px)]\",\n auto: \"right-0 sm:right-0 left-auto top-[calc(100%+6px)] max-sm:left-1/2 max-sm:-translate-x-1/2\",\n }[align ?? \"auto\"];\n\n return (\n <div\n ref={ref}\n role=\"dialog\"\n aria-label=\"Notifications\"\n tabIndex={-1}\n style={{ width: typeof width === \"number\" ? `${width}px` : width }}\n className={cn(\n \"absolute z-40 max-w-[calc(100vw-1.5rem)]\",\n \"bg-surface border border-border rounded-kj-md shadow-kj-lg outline-none\",\n \"animate-[kjpop_.12s_ease]\",\n alignClass,\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-3.5 py-2.5 border-b border-border\">\n <span className=\"text-sm font-semibold text-foreground\">Notifications</span>\n <button\n type=\"button\"\n disabled={allRead}\n aria-disabled={allRead}\n onClick={allRead ? undefined : onMarkAllRead}\n className={cn(\n \"text-xs font-medium transition-colors\",\n allRead\n ? \"text-muted-foreground cursor-not-allowed\"\n : \"text-primary hover:text-primary/80\"\n )}\n >\n Mark all read\n </button>\n </div>\n\n {/* List or empty state */}\n {items.length === 0 ? (\n emptyState ?? defaultEmptyState\n ) : (\n <div\n className=\"overflow-y-auto\"\n style={{ maxHeight }}\n >\n {items.map((item) => (\n <NotificationItem\n key={item.id}\n item={item}\n onDismiss={onDismiss}\n />\n ))}\n </div>\n )}\n\n {/* Footer */}\n {items.length > 0 && viewAllHref && (\n <div className=\"border-t border-border px-3.5 py-2.5 text-center\">\n <a\n href={viewAllHref}\n className=\"text-xs font-medium text-primary hover:text-primary/80 transition-colors\"\n >\n {viewAllLabel} →\n </a>\n </div>\n )}\n </div>\n );\n}\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"./popover\";\nimport { Field, Label, Hint } from \"./field\";\n\nexport const DEFAULT_COLOR_SWATCHES = [\n \"#EF4444\", // Red\n \"#F97316\", // Orange\n \"#F59E0B\", // Amber\n \"#10B981\", // Emerald\n \"#14B8A6\", // Teal\n \"#06B6D4\", // Sky\n \"#3B82F6\", // Blue\n \"#6366F1\", // Indigo\n \"#8B5CF6\", // Purple\n \"#EC4899\", // Pink\n \"#64748B\", // Slate\n \"#1E293B\", // Charcoal\n] as const;\n\nexport function isValidHex(hex: string): boolean {\n const trimmed = hex.trim();\n const clean = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n return /^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(clean);\n}\n\nexport function normalizeHex(hex: string): string {\n let clean = hex.trim();\n if (!clean.startsWith(\"#\")) clean = `#${clean}`;\n if (/^#[0-9A-Fa-f]{3}$/.test(clean)) {\n clean = `#${clean[1]}${clean[1]}${clean[2]}${clean[2]}${clean[3]}${clean[3]}`;\n }\n return clean.toUpperCase();\n}\n\nexport function hexToHsl(hex: string): { h: number; s: number; l: number } {\n if (!isValidHex(hex)) return { h: 0, s: 0, l: 0 };\n const normalized = normalizeHex(hex);\n const r = parseInt(normalized.slice(1, 3), 16) / 255;\n const g = parseInt(normalized.slice(3, 5), 16) / 255;\n const b = parseInt(normalized.slice(5, 7), 16) / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\nexport function hslToHex(h: number, s: number, l: number): string {\n const normalizedH = ((h % 360) + 360) % 360;\n const sPct = s / 100;\n const lPct = l / 100;\n\n const c = (1 - Math.abs(2 * lPct - 1)) * sPct;\n const x = c * (1 - Math.abs(((normalizedH / 60) % 2) - 1));\n const m = lPct - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (0 <= normalizedH && normalizedH < 60) {\n r = c; g = x; b = 0;\n } else if (60 <= normalizedH && normalizedH < 120) {\n r = x; g = c; b = 0;\n } else if (120 <= normalizedH && normalizedH < 180) {\n r = 0; g = c; b = x;\n } else if (180 <= normalizedH && normalizedH < 240) {\n r = 0; g = x; b = c;\n } else if (240 <= normalizedH && normalizedH < 300) {\n r = x; g = 0; b = c;\n } else if (300 <= normalizedH && normalizedH < 360) {\n r = c; g = 0; b = x;\n }\n\n const toHex = (n: number) => {\n const hex = Math.round((n + m) * 255).toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n };\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase();\n}\n\nexport interface ColorPickerSwatchProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n color: string;\n selected?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const ColorPickerSwatch = React.forwardRef<\n HTMLButtonElement,\n ColorPickerSwatchProps\n>(({ color, selected = false, size = \"md\", className, style, ...props }, ref) => {\n const sizeClasses = {\n sm: \"w-5 h-5\",\n md: \"w-7 h-7\",\n lg: \"w-9 h-9\",\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={selected}\n style={{ backgroundColor: color, ...style }}\n className={cn(\n \"relative shrink-0 rounded-full border border-border/50 shadow-sm transition-transform hover:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary flex items-center justify-center text-white text-xs font-bold\",\n sizeClasses[size],\n selected && \"ring-2 ring-primary ring-offset-2 ring-offset-surface\",\n className\n )}\n {...props}\n >\n {selected && <span aria-hidden=\"true\">✓</span>}\n </button>\n );\n});\nColorPickerSwatch.displayName = \"ColorPickerSwatch\";\n\nexport interface ColorPickerProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"value\" | \"defaultValue\"> {\n /** Current hex color value (controlled). */\n value?: string;\n /** Initial hex color value (uncontrolled). Defaults to \"#3B82F6\". */\n defaultValue?: string;\n /** Called when color changes. */\n onChange?: (hex: string) => void;\n /** Array of hex color strings for preset palette. Defaults to DEFAULT_COLOR_SWATCHES. */\n swatches?: readonly string[] | string[];\n /** Whether the picker is disabled. */\n disabled?: boolean;\n /** Whether to show the manual Hex text input inside the popover. Defaults to true. */\n showHexInput?: boolean;\n /** Additional class name for the container. */\n className?: string;\n}\n\nexport const ColorPicker = React.forwardRef<HTMLDivElement, ColorPickerProps>(\n (\n {\n value,\n defaultValue = \"#3B82F6\",\n onChange,\n swatches = DEFAULT_COLOR_SWATCHES,\n disabled = false,\n showHexInput = true,\n className,\n ...props\n },\n ref\n ) => {\n const isControlled = value !== undefined;\n const [localColor, setLocalColor] = React.useState<string>(\n normalizeHex(defaultValue)\n );\n const color = isControlled ? normalizeHex(value) : localColor;\n\n const [hexInputValue, setHexInputValue] = React.useState<string>(color);\n\n React.useEffect(() => {\n setHexInputValue(color);\n }, [color]);\n\n const handleColorChange = React.useCallback(\n (newHex: string) => {\n const normalized = normalizeHex(newHex);\n if (!isControlled) {\n setLocalColor(normalized);\n }\n onChange?.(normalized);\n },\n [isControlled, onChange]\n );\n\n const hsl = React.useMemo(() => hexToHsl(color), [color]);\n\n const handleHueChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const h = Number(e.target.value);\n const s = hsl.s === 0 ? 100 : hsl.s;\n const l = hsl.s === 0 ? 50 : hsl.l;\n const newHex = hslToHex(h, s, l);\n handleColorChange(newHex);\n };\n\n const handleHexSubmit = () => {\n if (isValidHex(hexInputValue)) {\n handleColorChange(hexInputValue);\n } else {\n setHexInputValue(color);\n }\n };\n\n return (\n <div ref={ref} className={cn(\"inline-block\", className)} {...props}>\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n aria-label={`Select color, current ${color}`}\n className={cn(\n \"inline-flex items-center gap-2.5 px-3 py-1.5 rounded-kj-md border border-border bg-surface text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary disabled:cursor-not-allowed disabled:opacity-50\"\n )}\n >\n <span\n style={{ backgroundColor: color }}\n className=\"w-5 h-5 rounded-full border border-border/50 shadow-sm shrink-0\"\n />\n <span className=\"font-mono text-xs uppercase\">{color}</span>\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n className=\"text-muted-foreground ml-auto\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"bottom\" align=\"start\" className=\"w-64 p-3.5 space-y-3.5\">\n {/* Header Banner */}\n <div className=\"flex items-center gap-3 p-2 rounded-kj-md bg-muted/40 border border-border\">\n <span\n style={{ backgroundColor: color }}\n className=\"w-8 h-8 rounded-full border border-border/50 shadow-sm shrink-0\"\n />\n <div>\n <p className=\"text-xs text-muted-foreground\">Selected Color</p>\n <p className=\"text-sm font-mono font-bold text-foreground uppercase\">{color}</p>\n </div>\n </div>\n\n {/* Swatches Grid */}\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold text-muted-foreground\">Preset Swatches</p>\n <div className=\"grid grid-cols-6 gap-2\">\n {swatches.map((swatch) => {\n const normalizedSwatch = normalizeHex(swatch);\n return (\n <ColorPickerSwatch\n key={swatch}\n color={swatch}\n selected={normalizedSwatch === color}\n aria-label={`Select color ${swatch}`}\n onClick={() => handleColorChange(swatch)}\n />\n );\n })}\n </div>\n </div>\n\n {/* Hue Slider */}\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold text-muted-foreground\">Hue</p>\n <input\n type=\"range\"\n min={0}\n max={360}\n value={hsl.h}\n onChange={handleHueChange}\n aria-label=\"Hue slider\"\n className=\"w-full h-3 rounded-full appearance-none cursor-pointer\"\n style={{\n background:\n \"linear-gradient(to right, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%)\",\n }}\n />\n </div>\n\n {/* Manual Hex Input */}\n {showHexInput && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold text-muted-foreground\">Hex Code</p>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n aria-label=\"Hex Code\"\n value={hexInputValue}\n onChange={(e) => setHexInputValue(e.target.value)}\n onBlur={handleHexSubmit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleHexSubmit();\n }}\n placeholder=\"#000000\"\n className=\"flex-1 px-2.5 py-1 text-xs font-mono rounded-kj-md border border-border bg-surface text-foreground uppercase focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n />\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n );\n }\n);\nColorPicker.displayName = \"ColorPicker\";\n\nexport interface ColorPickerFieldProps extends ColorPickerProps {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: React.ReactNode;\n required?: boolean;\n}\n\nexport const ColorPickerField = React.forwardRef<\n HTMLDivElement,\n ColorPickerFieldProps\n>(({ label, hint, error, required, ...props }, ref) => {\n return (\n <Field>\n {label && <Label required={required}>{label}</Label>}\n <ColorPicker ref={ref} {...props} />\n {hint && <Hint>{hint}</Hint>}\n {error && <Hint error>{error}</Hint>}\n </Field>\n );\n});\nColorPickerField.displayName = \"ColorPickerField\";\n\n\n\n\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface GalleryImage {\n src: string;\n alt?: string;\n title?: string;\n caption?: string;\n thumbnailSrc?: string;\n}\n\nexport interface ImageGalleryProps {\n images: GalleryImage[];\n columns?: 2 | 3 | 4 | 5;\n aspectRatio?: \"square\" | \"video\" | \"4/3\" | \"auto\" | string;\n maxVisible?: number;\n className?: string;\n thumbnailClassName?: string;\n lightboxClassName?: string;\n onImageClick?: (index: number) => void;\n}\n\nconst COLUMN_CLASSES: Record<number, string> = {\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n};\n\nconst ASPECT_CLASSES: Record<string, string> = {\n square: \"aspect-square\",\n video: \"aspect-video\",\n \"4/3\": \"aspect-[4/3]\",\n auto: \"aspect-auto\",\n};\n\nexport function ImageGallery({\n images = [],\n columns = 3,\n aspectRatio = \"square\",\n maxVisible,\n className,\n thumbnailClassName,\n lightboxClassName,\n onImageClick,\n}: ImageGalleryProps) {\n const [selectedIndex, setSelectedIndex] = React.useState<number | null>(null);\n\n const columnClass = COLUMN_CLASSES[columns] || \"grid-cols-3\";\n const aspectClass = ASPECT_CLASSES[aspectRatio] || (aspectRatio.startsWith(\"aspect-\") ? aspectRatio : `aspect-[${aspectRatio}]`);\n\n const hasMaxVisible = typeof maxVisible === \"number\" && maxVisible > 0 && images.length > maxVisible;\n const visibleImages = hasMaxVisible ? images.slice(0, maxVisible) : images;\n const remainingCount = hasMaxVisible ? images.length - maxVisible + 1 : 0;\n\n const handleThumbnailClick = (index: number) => {\n setSelectedIndex(index);\n if (onImageClick) {\n onImageClick(index);\n }\n };\n\n const handleClose = React.useCallback(() => {\n setSelectedIndex(null);\n }, []);\n\n const handleNext = React.useCallback(() => {\n setSelectedIndex((prev) => (prev === null ? null : (prev + 1) % images.length));\n }, [images.length]);\n\n const handlePrev = React.useCallback(() => {\n setSelectedIndex((prev) => (prev === null ? null : (prev - 1 + images.length) % images.length));\n }, [images.length]);\n\n React.useEffect(() => {\n if (selectedIndex === null) return;\n\n const originalOverflow = document.body.style.overflow;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n handleClose();\n } else if (e.key === \"ArrowRight\") {\n handleNext();\n } else if (e.key === \"ArrowLeft\") {\n handlePrev();\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = originalOverflow;\n };\n }, [selectedIndex, handleClose, handleNext, handlePrev]);\n\n const activeImage = selectedIndex !== null ? images[selectedIndex] : null;\n\n return (\n <>\n <div className={cn(\"grid gap-3 w-full\", columnClass, className)}>\n {visibleImages.map((img, idx) => {\n const isLastOverlay = hasMaxVisible && idx === maxVisible - 1;\n const thumbSrc = img.thumbnailSrc || img.src;\n const defaultAlt = img.alt || `Thumbnail ${idx + 1}`;\n const buttonAriaLabel = isLastOverlay\n ? `View all ${images.length} images`\n : defaultAlt;\n\n return (\n <button\n key={idx}\n type=\"button\"\n aria-label={buttonAriaLabel}\n onClick={() => handleThumbnailClick(idx)}\n className={cn(\n \"relative group overflow-hidden rounded-kj-lg bg-muted focus:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 cursor-pointer transition-all duration-200\",\n aspectClass,\n thumbnailClassName\n )}\n >\n <img\n src={thumbSrc}\n alt={img.alt || `Thumbnail ${idx + 1}`}\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n />\n {isLastOverlay && (\n <div className=\"absolute inset-0 bg-black/60 backdrop-blur-[2px] flex items-center justify-center text-white font-bold text-xl group-hover:bg-black/70 transition-colors\">\n +{remainingCount}\n </div>\n )}\n </button>\n );\n })}\n </div>\n\n {selectedIndex !== null && activeImage && (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Image gallery lightbox\"\n onClick={(e) => e.target === e.currentTarget && handleClose()}\n className={cn(\n \"fixed inset-0 z-[100] bg-black/85 backdrop-blur-md flex flex-col justify-between p-4 sm:p-6 transition-opacity duration-200 animate-in fade-in-0\",\n lightboxClassName\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between w-full text-white z-10\">\n <span className=\"text-sm font-medium text-white/80 select-none\">\n {selectedIndex + 1} of {images.length}\n </span>\n <button\n type=\"button\"\n onClick={handleClose}\n aria-label=\"Close\"\n className=\"p-2 rounded-full text-white/80 hover:text-white hover:bg-white/10 transition-colors cursor-pointer\"\n >\n <svg width={20} height={20} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Main content with Prev/Image/Next */}\n <div className=\"relative flex-1 flex items-center justify-between gap-4 my-auto min-h-0 w-full\">\n {images.length > 1 && (\n <button\n type=\"button\"\n onClick={handlePrev}\n aria-label=\"Previous image\"\n className=\"p-3 rounded-full text-white/80 hover:text-white hover:bg-white/10 transition-colors cursor-pointer z-10 shrink-0\"\n >\n <svg width={24} height={24} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n )}\n\n <div className=\"flex-1 flex flex-col items-center justify-center h-full min-h-0 px-2 select-none\">\n <img\n src={activeImage.src}\n alt={activeImage.alt || `Image ${selectedIndex + 1}`}\n className=\"max-h-[70vh] max-w-full object-contain rounded-kj-md shadow-2xl transition-transform\"\n />\n </div>\n\n {images.length > 1 && (\n <button\n type=\"button\"\n onClick={handleNext}\n aria-label=\"Next image\"\n className=\"p-3 rounded-full text-white/80 hover:text-white hover:bg-white/10 transition-colors cursor-pointer z-10 shrink-0\"\n >\n <svg width={24} height={24} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2.5} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Footer (Title & Caption) */}\n {(activeImage.title || activeImage.caption) && (\n <div className=\"flex flex-col items-center justify-center text-center text-white pb-2 z-10\">\n {activeImage.title && <h3 className=\"text-base font-semibold text-white\">{activeImage.title}</h3>}\n {activeImage.caption && <p className=\"text-xs sm:text-sm text-white/70 max-w-lg mt-0.5\">{activeImage.caption}</p>}\n </div>\n )}\n </div>\n )}\n </>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport type { UseInPostScriptOptions, UseInPostScriptResult } from './types';\n\nconst OFFICIAL_SCRIPT_URL = 'https://geowidget.easypack24.net/js/sdk-for-javascript.js';\nconst OFFICIAL_CSS_URL = 'https://geowidget.easypack24.net/css/easypack.css';\n\nlet scriptPromise: Promise<void> | null = null;\n\nexport function useInPostScript(options: UseInPostScriptOptions = {}): UseInPostScriptResult {\n const [isLoaded, setIsLoaded] = useState(() => {\n if (typeof window === 'undefined') return false;\n return !!(\n window.customElements?.get('inpost-geowidget') ||\n (window as unknown as { easyPack?: unknown }).easyPack\n );\n });\n const [error, setError] = useState<Error | null>(null);\n\n const scriptUrl = options.customScriptUrl || OFFICIAL_SCRIPT_URL;\n const cssUrl = options.customCssUrl || OFFICIAL_CSS_URL;\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // Check if script/customElement is already defined\n if (\n window.customElements?.get('inpost-geowidget') ||\n (window as unknown as { easyPack?: unknown }).easyPack\n ) {\n return;\n }\n\n // Ensure CSS stylesheet is injected\n let linkTag = document.querySelector(`link[href=\"${cssUrl}\"]`) as HTMLLinkElement | null;\n if (!linkTag) {\n linkTag = document.createElement('link');\n linkTag.rel = 'stylesheet';\n linkTag.href = cssUrl;\n linkTag.type = 'text/css';\n document.head.appendChild(linkTag);\n }\n\n if (!scriptPromise) {\n scriptPromise = new Promise((resolve, reject) => {\n let scriptTag = document.querySelector(`script[src=\"${scriptUrl}\"]`) as HTMLScriptElement | null;\n if (!scriptTag) {\n scriptTag = document.createElement('script');\n scriptTag.src = scriptUrl;\n scriptTag.async = true;\n document.head.appendChild(scriptTag);\n }\n\n scriptTag.addEventListener('load', () => resolve());\n scriptTag.addEventListener('error', (err) =>\n reject(err instanceof Error ? err : new Error('Failed to load InPost GeoWidget SDK script'))\n );\n });\n }\n\n scriptPromise\n .then(async () => {\n if (typeof window !== 'undefined' && window.customElements?.whenDefined) {\n try {\n await Promise.race([\n window.customElements.whenDefined('inpost-geowidget'),\n new Promise((r) => setTimeout(r, 100)),\n ]);\n } catch {\n /* ignore */\n }\n }\n setIsLoaded(true);\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)));\n });\n }, [scriptUrl, cssUrl]);\n\n return { isLoaded, error };\n}\n","'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport type { InPostConfigType, InPostLanguage, InPostPoint } from './types';\nimport { useInPostScript } from './use-inpost-script';\n\n/** Props for the inline InPost GeoWidget map component. */\nexport interface InPostGeowidgetProps {\n /** InPost API Token generated in InPost Manager for your domain. Required for production map. */\n token?: string;\n /** Widget language ('pl', 'en', 'uk', 'de', 'it', 'fr'). Default 'pl'. */\n language?: InPostLanguage;\n /** Widget configuration type ('parcelCollect', 'parcelCollectPayment', 'international', 'postBuy'). Default 'parcelCollect'. */\n config?: InPostConfigType;\n /** Enable sandbox environment. Default false. */\n sandbox?: boolean;\n /** Callback triggered when user selects a parcel locker or pick-up point on the map. */\n onPointSelect?: (point: InPostPoint) => void;\n /** Callback triggered when GeoWidget finishes loading. */\n onReady?: () => void;\n /** Callback triggered on script load error. */\n onError?: (error: Error) => void;\n /** Outer container CSS class name. */\n className?: string;\n /** Inline container styles. */\n style?: React.CSSProperties;\n /** Custom SDK JavaScript URL. */\n customScriptUrl?: string;\n /** Custom SDK CSS URL. */\n customCssUrl?: string;\n}\n\nconst MOCK_POINTS: InPostPoint[] = [\n {\n name: 'WAW01M',\n address: { line1: 'ul. Towarowa 5', line2: '00-838 Warszawa' },\n address_details: { city: 'Warszawa', street: 'Towarowa', building_number: '5', post_code: '00-838' },\n location: { latitude: 52.2297, longitude: 21.0122 },\n type: ['parcel_locker'],\n status: 'Operating',\n location_description: 'Przy stacji benzynowej BP',\n },\n {\n name: 'KRA02N',\n address: { line1: 'ul. Floriańska 12', line2: '31-021 Kraków' },\n address_details: { city: 'Kraków', street: 'Floriańska', building_number: '12', post_code: '31-021' },\n location: { latitude: 50.0647, longitude: 19.9450 },\n type: ['parcel_locker'],\n status: 'Operating',\n location_description: 'Obok wejścia do sklepu',\n },\n {\n name: 'GDA03P',\n address: { line1: 'ul. Długa 8', line2: '80-827 Gdańsk' },\n address_details: { city: 'Gdańsk', street: 'Długa', building_number: '8', post_code: '80-827' },\n location: { latitude: 54.3520, longitude: 18.6466 },\n type: ['parcel_locker'],\n status: 'Operating',\n location_description: 'Róg ulicy Długiej i Tkackiej',\n },\n {\n name: 'POZ04S',\n address: { line1: 'ul. Półwiejska 42', line2: '61-888 Poznań' },\n address_details: { city: 'Poznań', street: 'Półwiejska', building_number: '42', post_code: '61-888' },\n location: { latitude: 52.4064, longitude: 16.9252 },\n type: ['parcel_locker'],\n status: 'Operating',\n location_description: 'Przy centrum handlowym Stary Browar',\n },\n];\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n 'inpost-geowidget': React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLElement> & {\n token?: string;\n language?: string;\n config?: string;\n sandbox?: string | boolean;\n onpointselect?: string;\n },\n HTMLElement\n >;\n }\n }\n}\n\nexport const InPostGeowidget: React.FC<InPostGeowidgetProps> = ({\n token,\n language = 'pl',\n config = 'parcelCollect',\n sandbox = false,\n onPointSelect,\n onReady,\n onError,\n className,\n style,\n customScriptUrl,\n customCssUrl,\n}) => {\n const { isLoaded, error } = useInPostScript({\n sandbox,\n customScriptUrl,\n customCssUrl,\n });\n\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedMock, setSelectedMock] = useState<InPostPoint | null>(null);\n\n const widgetRef = useRef<HTMLElement | null>(null);\n // eslint-disable-next-line react-hooks/purity\n const callbackNameRef = useRef<string>(`inpost_cb_${Math.random().toString(36).substring(2, 9)}`);\n\n useEffect(() => {\n if (error && onError) {\n onError(error);\n }\n }, [error, onError]);\n\n useEffect(() => {\n if (isLoaded && onReady) {\n onReady();\n }\n }, [isLoaded, onReady]);\n\n useEffect(() => {\n if (!token) return;\n\n const cbName = callbackNameRef.current;\n\n (window as unknown as Record<string, (point: InPostPoint) => void>)[cbName] = (point: InPostPoint) => {\n if (onPointSelect) {\n onPointSelect(point);\n }\n };\n\n const el = widgetRef.current;\n const handlePointSelect = (event: Event) => {\n const customEv = event as CustomEvent<InPostPoint>;\n const point = customEv.detail || (customEv as unknown as { point: InPostPoint }).point;\n if (point && onPointSelect) {\n onPointSelect(point);\n }\n };\n\n if (el) {\n el.addEventListener('inpostgeowidget', handlePointSelect);\n el.addEventListener('onpointselect', handlePointSelect);\n }\n document.addEventListener('onpointselect', handlePointSelect);\n\n return () => {\n delete (window as unknown as Record<string, unknown>)[cbName];\n if (el) {\n el.removeEventListener('inpostgeowidget', handlePointSelect);\n el.removeEventListener('onpointselect', handlePointSelect);\n }\n document.removeEventListener('onpointselect', handlePointSelect);\n };\n }, [onPointSelect, isLoaded, token]);\n\n if (error) {\n return (\n <div\n className={`flex flex-col items-center justify-center min-h-[450px] bg-danger/10 border-2 border-danger rounded-xl p-6 text-center ${\n className || ''\n }`}\n style={style}\n >\n <p className=\"text-base font-extrabold text-danger mb-1\">\n Błąd ładowania Geowidget InPost\n </p>\n <p className=\"text-xs text-muted-foreground font-semibold max-w-sm\">\n Nie udało się pobrać skryptu mapy z serwera InPost. Sprawdź połączenie z siecią.\n </p>\n </div>\n );\n }\n\n // Fallback interactive demo picker when token is not supplied\n if (!token) {\n const filteredPoints = MOCK_POINTS.filter(\n (p) =>\n p.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n p.address.line1.toLowerCase().includes(searchQuery.toLowerCase()) ||\n p.address_details.city.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <div\n className={`flex flex-col h-full min-h-[500px] bg-surface border-2 border-border rounded-xl p-4 font-sans text-foreground ${\n className || ''\n }`}\n style={style}\n >\n {/* Banner with high-contrast InPost yellow theme */}\n <div className=\"bg-gradient-to-r from-amber-400 via-amber-500 to-yellow-500 text-slate-950 rounded-xl p-4 mb-3.5 shadow-sm flex flex-col gap-1 border border-amber-600/30\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"w-2.5 h-2.5 rounded-full bg-slate-950 animate-pulse\" />\n <span className=\"font-black text-sm tracking-tight uppercase\">InPost Paczkomat®</span>\n </div>\n <span className=\"text-[0.7rem] font-black bg-slate-950 text-amber-400 px-2.5 py-0.5 rounded-md uppercase tracking-wider shadow-sm\">\n Tryb Pokazowy\n </span>\n </div>\n <p className=\"text-xs text-slate-950 font-bold leading-relaxed opacity-95\">\n Wybierz punkt z listy poniżej. Do załadowania produkcyjnej mapy przekaż prop <code className=\"bg-slate-950 text-amber-400 px-1.5 py-0.5 rounded font-mono text-[0.72rem] font-black\">token=\"TWOJ_TOKEN\"</code>.\n </p>\n </div>\n\n <div className=\"mb-3.5 relative\">\n <input\n type=\"text\"\n placeholder=\"Szukaj Paczkomatu (np. Warszawa, WAW01M, Towarowa)...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full px-4 py-2.5 text-sm bg-surface border-2 border-border rounded-xl outline-none text-foreground placeholder:text-muted-foreground font-bold focus:border-primary focus:ring-2 focus:ring-primary/20 shadow-sm transition-all\"\n />\n </div>\n\n <div className=\"flex-1 overflow-y-auto space-y-3 pr-1 max-h-[420px]\">\n {filteredPoints.map((p) => {\n const isSelected = selectedMock?.name === p.name;\n return (\n <div\n key={p.name}\n onClick={() => {\n setSelectedMock(p);\n if (onPointSelect) {\n onPointSelect(p);\n }\n }}\n className={`p-4 rounded-xl border-2 transition-all cursor-pointer flex items-center justify-between gap-3 ${\n isSelected\n ? 'bg-primary text-primary-foreground border-primary shadow-md'\n : 'bg-surface border-border hover:border-primary hover:shadow-md text-foreground'\n }`}\n >\n <div className=\"flex flex-col gap-1 min-w-0\">\n <div className=\"font-black text-base flex items-center gap-2\">\n <span className={isSelected ? 'text-primary-foreground font-black' : 'text-foreground font-black'}>\n Paczkomat® {p.name}\n </span>\n {p.location_description && (\n <span className={`text-[0.72rem] px-2.5 py-0.5 rounded-full font-bold ${isSelected ? 'bg-primary-hover text-primary-foreground' : 'bg-muted text-primary'}`}>\n {p.location_description}\n </span>\n )}\n </div>\n <div className={`text-xs font-bold ${isSelected ? 'text-primary-foreground/90' : 'text-muted-foreground'}`}>\n {p.address.line1}, {p.address.line2}\n </div>\n </div>\n\n <button\n type=\"button\"\n className={`px-4 py-2 rounded-lg text-xs font-black shrink-0 transition-all shadow-sm ${\n isSelected\n ? 'bg-amber-400 text-slate-950 border border-amber-500'\n : 'bg-primary hover:bg-primary-hover text-primary-foreground'\n }`}\n >\n {isSelected ? 'Wybrano ✓' : 'Wybierz'}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n\n if (!isLoaded) {\n return (\n <div\n className={`flex items-center justify-center min-h-[450px] bg-surface border-2 border-border rounded-xl p-6 ${\n className || ''\n }`}\n style={style}\n >\n <div className=\"flex flex-col items-center gap-3 text-muted-foreground\">\n <div className=\"w-9 h-9 border-4 border-primary border-t-transparent rounded-full animate-spin\" />\n <span className=\"text-sm font-extrabold text-foreground\">Ładowanie mapy InPost GeoWidget...</span>\n </div>\n </div>\n );\n }\n\n const widgetProps: Record<string, string> = {\n language,\n config: String(config).toLowerCase(),\n // eslint-disable-next-line react-hooks/refs\n onpointselect: callbackNameRef.current,\n };\n\n if (token) {\n widgetProps.token = token;\n }\n\n if (sandbox) {\n widgetProps.sandbox = 'true';\n }\n\n return (\n <div className={`w-full h-full min-h-[450px] relative ${className || ''}`} style={style}>\n {React.createElement('inpost-geowidget', {\n ref: widgetRef,\n ...widgetProps,\n style: { width: '100%', height: '100%', display: 'block', minHeight: '450px' },\n })}\n </div>\n );\n};\n","'use client';\n\nimport React, { useState } from 'react';\nimport { Button } from '../button';\nimport { Modal, ModalTitle } from '../modal';\nimport { InPostGeowidget } from './inpost-geowidget';\nimport type { InPostConfigType, InPostLanguage, InPostPoint } from './types';\n\n/** Props for the InPost GeoWidget Modal checkout component. */\nexport interface InPostGeowidgetModalProps {\n /** Currently selected point object or point code string (e.g. 'WAW01M'). */\n value?: InPostPoint | string | null;\n /** Callback triggered when point is selected on the map. */\n onSelect?: (point: InPostPoint) => void;\n /** Trigger button label. Default 'Wybierz Paczkomat®'. */\n triggerText?: string;\n /** Modal header title. Default 'Wybierz punkt odbioru InPost'. */\n modalTitle?: string;\n /** Disable trigger button. Default false. */\n disabled?: boolean;\n /** Controlled open state of the modal. */\n open?: boolean;\n /** Callback when open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Show selected point badge under trigger button. Default true. */\n showSelectedBadge?: boolean;\n /** Outer container CSS class name. */\n className?: string;\n /** Trigger button style variant ('primary', 'secondary', 'outline', 'ghost', 'danger'). Default 'outline'. */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';\n /** Trigger button size ('sm', 'md', 'lg'). Default 'md'. */\n buttonSize?: 'sm' | 'md' | 'lg';\n /** InPost API Token (optional for sandbox). */\n token?: string;\n /** Widget language ('pl', 'en', 'uk', 'de', 'it', 'fr'). Default 'pl'. */\n language?: InPostLanguage;\n /** Widget configuration type ('parcelCollect', 'parcelCollectPayment', 'international', 'postBuy'). Default 'parcelCollect'. */\n config?: InPostConfigType;\n /** Enable sandbox environment. Default false. */\n sandbox?: boolean;\n /** Custom SDK JavaScript URL. */\n customScriptUrl?: string;\n /** Custom SDK CSS URL. */\n customCssUrl?: string;\n}\n\nexport const InPostGeowidgetModal: React.FC<InPostGeowidgetModalProps> = ({\n value,\n onSelect,\n triggerText = 'Wybierz Paczkomat®',\n modalTitle = 'Wybierz punkt odbioru InPost',\n disabled = false,\n open: controlledOpen,\n onOpenChange,\n showSelectedBadge = true,\n className = '',\n buttonVariant = 'outline',\n buttonSize = 'md',\n token,\n language,\n config,\n sandbox,\n customScriptUrl,\n customCssUrl,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const [selectedPoint, setSelectedPoint] = useState<InPostPoint | null>(\n typeof value === 'object' && value ? value : null\n );\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenToggle = (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n if (onOpenChange) {\n onOpenChange(newOpen);\n }\n };\n\n const handlePointSelect = (point: InPostPoint) => {\n setSelectedPoint(point);\n if (onSelect) {\n onSelect(point);\n }\n handleOpenToggle(false);\n };\n\n const selectedCode = selectedPoint?.name || (typeof value === 'string' ? value : null);\n const selectedAddress = selectedPoint\n ? `${selectedPoint.address?.line1 || ''}, ${selectedPoint.address?.line2 || ''}`\n : null;\n\n const isOutline = buttonVariant === 'outline';\n\n return (\n <div className={`inline-flex flex-col gap-3 min-w-[280px] ${className}`}>\n <Button\n type=\"button\"\n variant={buttonVariant}\n size={buttonSize}\n disabled={disabled}\n onClick={() => handleOpenToggle(true)}\n className={`group w-full justify-between gap-4 text-left font-bold shadow-sm hover:shadow-md transition-all py-2.5 px-3.5 rounded-xl ${\n isOutline\n ? 'bg-surface hover:bg-muted text-foreground border-2 border-border hover:border-primary'\n : 'border-2 border-transparent'\n }`}\n >\n <span className=\"flex items-center gap-2.5 min-w-0\">\n <span className=\"font-black text-[0.7rem] bg-amber-400 text-slate-950 px-2.5 py-1 rounded-md shadow-sm tracking-tight uppercase border border-amber-500/40 shrink-0 group-hover:scale-105 transition-transform\">\n InPost\n </span>\n <span className={`truncate font-bold text-sm ${isOutline ? 'text-foreground group-hover:text-primary' : ''}`}>\n {selectedCode ? `Paczkomat® ${selectedCode}` : triggerText}\n </span>\n </span>\n <span\n className={`text-xs font-black px-2.5 py-1 rounded-md shrink-0 shadow-sm uppercase tracking-wide transition-all ${\n isOutline\n ? 'bg-primary text-primary-foreground group-hover:bg-primary-hover'\n : 'bg-amber-400 text-slate-950'\n }`}\n >\n {selectedCode ? 'Zmień' : 'Wybierz'}\n </span>\n </Button>\n\n {showSelectedBadge && selectedCode && (\n <div className=\"text-xs bg-surface text-foreground border-2 border-border p-3.5 rounded-xl flex flex-col gap-1.5 shadow-md\">\n <div className=\"font-bold flex items-center justify-between gap-2\">\n <span className=\"flex items-center gap-2 text-foreground\">\n <span className=\"w-2.5 h-2.5 rounded-full bg-primary shadow-sm animate-pulse\" />\n <span className=\"font-black text-sm text-primary\">Paczkomat® {selectedCode}</span>\n </span>\n <span className=\"text-[0.65rem] bg-amber-400 text-slate-950 font-black px-2 py-0.5 rounded uppercase tracking-wider\">\n Wybrany\n </span>\n </div>\n {selectedAddress && (\n <div className=\"text-muted-foreground text-[0.78rem] font-medium pl-4 border-l-2 border-border\">\n {selectedAddress}\n </div>\n )}\n </div>\n )}\n\n <Modal open={isOpen} onClose={() => handleOpenToggle(false)} width={850}>\n <div className=\"flex items-center gap-3 pb-3.5 border-b border-border\">\n <span className=\"font-black text-xs bg-amber-400 text-slate-950 px-2.5 py-1 rounded-md shadow-sm tracking-tight uppercase border border-amber-500/40 shrink-0\">\n InPost\n </span>\n <ModalTitle className=\"m-0 text-xl font-black text-primary tracking-tight\">\n {modalTitle}\n </ModalTitle>\n </div>\n\n <div className=\"w-full h-[600px] min-h-[500px] mt-3.5 rounded-xl overflow-hidden\">\n {isOpen && (\n <InPostGeowidget\n token={token}\n language={language}\n config={config}\n sandbox={sandbox}\n customScriptUrl={customScriptUrl}\n customCssUrl={customCssUrl}\n onPointSelect={handlePointSelect}\n />\n )}\n </div>\n </Modal>\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/cn.ts","../src/components/button.tsx","../src/components/badge.tsx","../src/components/alert.tsx","../src/components/spinner.tsx","../src/components/progress.tsx","../src/components/field.tsx","../src/components/form-field.tsx","../src/components/progress-ring.tsx","../src/components/input.tsx","../src/components/select.tsx","../src/components/checkbox.tsx","../src/components/switch.tsx","../src/components/slider.tsx","../src/components/segmented.tsx","../src/components/toggle-group.tsx","../src/components/card.tsx","../src/components/stat.tsx","../src/components/avatar.tsx","../src/components/tabs.tsx","../src/components/accordion.tsx","../src/components/dropdown-menu.tsx","../src/components/breadcrumb.tsx","../src/components/pagination.tsx","../src/components/bottom-navigation.tsx","../src/components/table.tsx","../src/components/tooltip.tsx","../src/components/modal.tsx","../src/components/toast.tsx","../src/components/page-header.tsx","../src/components/section-header.tsx","../src/components/empty-state.tsx","../src/components/metric-card.tsx","../src/components/data-table.tsx","../src/components/error-state.tsx","../src/components/skeleton.tsx","../src/components/dashboard-shell.tsx","../src/components/settings-layout.tsx","../src/components/detail-page-layout.tsx","../src/components/table-toolbar.tsx","../src/components/confirm-dialog.tsx","../src/components/drawer.tsx","../src/components/command-palette.tsx","../src/components/sidebar-nav.tsx","../src/components/fab.tsx","../src/components/bottom-sheet.tsx","../src/components/kbd.tsx","../src/components/code-block.tsx","../src/components/separator.tsx","../src/components/popover.tsx","../src/components/combobox.tsx","../src/components/calendar-internals.ts","../src/components/calendar-grid.tsx","../src/components/calendar.tsx","../src/components/date-picker.tsx","../src/components/range-calendar.tsx","../src/components/date-range-picker.tsx","../src/components/dropzone.tsx","../src/components/file-upload-internals.ts","../src/components/file-upload.tsx","../src/components/timeline.tsx","../src/components/stepper.tsx","../src/components/app-shell.tsx","../src/components/rating/rating.tsx","../src/components/rating/rating-field.tsx","../src/components/rating/rating-summary.tsx","../src/components/pricing-card.tsx","../src/components/blog-card.tsx","../src/components/project-card.tsx","../src/components/inbox-popover.tsx","../src/components/color-picker.tsx","../src/components/image-gallery.tsx","../src/components/inpost-geowidget/use-inpost-script.ts","../src/components/inpost-geowidget/inpost-geowidget.tsx","../src/components/inpost-geowidget/inpost-geowidget-modal.tsx"],"names":["React","cva","React2","jsxs","jsx","React3","React4","React5","React6","React7","React8","range","React9","React10","React11","React12","React13","React14","React15","React16","React17","React18","React19","React20","React21","React22","React23","container","React24","React25","React26","React27","React28","React29","React30","React31","React32","React33","React34","React35","React36","React37","Fragment","React38","React39","React40","React41","React42","React43","Combobox","ComboboxField","React44","CalendarGrid","React45","Calendar","React46","DatePicker","DatePickerField","React47","RangeCalendar","displayFormat","React48","DateRangePicker","DateRangePickerField","React49","Dropzone","React50","FileUpload","FileUploadField","React51","sizeClasses","React53","React54","React55","React56","React57","React58","React59","React60","React61","React62","useState","useEffect","useRef"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge class names with Tailwind-aware conflict resolution.\n * `cn(\"px-2\", condition && \"px-4\")` → keeps the last conflicting utility.\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst buttonVariants = cva(\n [\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap select-none\",\n \"font-sans font-semibold leading-none\",\n \"border border-transparent rounded-kj-md cursor-pointer\",\n \"transition-[background-color,color,border-color,box-shadow,transform] duration-150\",\n \"active:translate-y-px\",\n \"focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/45\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n ],\n {\n variants: {\n variant: {\n primary: \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n outline:\n \"bg-transparent text-foreground border-border hover:bg-muted hover:border-muted-foreground\",\n ghost: \"bg-transparent text-foreground hover:bg-muted\",\n danger: \"bg-danger text-white hover:brightness-95\",\n },\n size: {\n sm: \"h-8 px-3 text-[0.8rem] rounded-kj-sm\",\n md: \"h-10 px-[1.1rem] text-sm\",\n lg: \"h-12 px-6 text-base\",\n icon: \"h-10 w-10 p-0\",\n \"icon-sm\": \"h-8 w-8 p-0 rounded-kj-sm\",\n },\n },\n defaultVariants: { variant: \"primary\", size: \"md\" },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Shows a spinner and disables interaction. */\n loading?: boolean;\n /** Icon rendered before the label. */\n leadingIcon?: React.ReactNode;\n /** Icon rendered after the label. */\n trailingIcon?: React.ReactNode;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n { className, variant, size, loading, leadingIcon, trailingIcon, children, disabled, ...props },\n ref\n ) => {\n return (\n <button\n ref={ref}\n className={cn(buttonVariants({ variant, size }), loading && \"relative\", className)}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading && (\n <span\n aria-hidden\n className=\"absolute h-[1em] w-[1em] rounded-full border-2 border-current border-t-transparent animate-spin\"\n />\n )}\n <span className={cn(\"contents\", loading && \"invisible\")}>\n {leadingIcon && (\n <span className=\"[&_svg]:h-[1.05em] [&_svg]:w-[1.05em]\">{leadingIcon}</span>\n )}\n {children}\n {trailingIcon && (\n <span className=\"[&_svg]:h-[1.05em] [&_svg]:w-[1.05em]\">{trailingIcon}</span>\n )}\n </span>\n </button>\n );\n }\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1.5 px-2.5 py-0.5 text-xs font-semibold leading-snug rounded-full border border-transparent\",\n {\n variants: {\n variant: {\n neutral: \"bg-muted text-muted-foreground\",\n primary: \"bg-primary/15 text-primary-hover dark:text-primary\",\n secondary: \"bg-secondary/15 text-secondary-hover dark:text-secondary\",\n success: \"bg-success-surface text-success\",\n warning: \"bg-warning-surface text-warning\",\n danger: \"bg-danger-surface text-danger\",\n info: \"bg-info-surface text-info\",\n solid: \"bg-primary text-primary-foreground\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n }\n);\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n /** Render a leading status dot. */\n dot?: boolean;\n}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, dot, children, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant }), className)} {...props}>\n {dot && <span className=\"h-1.5 w-1.5 rounded-full bg-current\" aria-hidden />}\n {children}\n </span>\n )\n);\nBadge.displayName = \"Badge\";\n\nexport { badgeVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst alertVariants = cva(\"flex gap-3 items-start p-[0.9rem_1.1rem] rounded-kj-md border text-sm\", {\n variants: {\n variant: {\n info: \"bg-info-surface border-info/30\",\n success: \"bg-success-surface border-success/30\",\n warning: \"bg-warning-surface border-warning/30\",\n danger: \"bg-danger-surface border-danger/30\",\n },\n },\n defaultVariants: { variant: \"info\" },\n});\n\nconst iconColor = {\n info: \"text-info\",\n success: \"text-success\",\n warning: \"text-warning\",\n danger: \"text-danger\",\n} as const;\n\nexport interface AlertProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">,\n VariantProps<typeof alertVariants> {\n /** Optional leading icon (e.g. an SVG). Inherits the variant color. */\n icon?: React.ReactNode;\n title?: React.ReactNode;\n}\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = \"info\", icon, title, children, ...props }, ref) => (\n <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props}>\n {icon && (\n <span\n className={cn(\n \"shrink-0 mt-0.5 [&_svg]:h-[1.15rem] [&_svg]:w-[1.15rem]\",\n iconColor[variant ?? \"info\"]\n )}\n >\n {icon}\n </span>\n )}\n <div className=\"text-foreground\">\n {title && <p className=\"font-bold m-0 mb-0.5 text-sm\">{title}</p>}\n {children && <p className=\"m-0 opacity-85\">{children}</p>}\n </div>\n </div>\n )\n);\nAlert.displayName = \"Alert\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Diameter in px. Default 24. */\n size?: number;\n}\n\nexport const Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ className, size = 24, style, ...props }, ref) => (\n <span\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-block rounded-full border-[2.5px] border-muted border-t-primary animate-spin align-middle\",\n className\n )}\n style={{ width: size, height: size, ...style }}\n {...props}\n />\n )\n);\nSpinner.displayName = \"Spinner\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 0–100. */\n value?: number;\n tone?: \"primary\" | \"secondary\";\n /** Extra classes applied to the inner bar span — use for animation, transform-origin, etc. */\n barClassName?: string;\n}\n\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n ({ className, value = 0, tone = \"primary\", barClassName, ...props }, ref) => {\n const pct = Math.max(0, Math.min(100, value));\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-label={props[\"aria-label\"] ?? \"Progress\"}\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n className={cn(\"h-2 w-full overflow-hidden rounded-full bg-muted\", className)}\n {...props}\n >\n <span\n className={cn(\n \"block h-full rounded-full transition-[width] duration-500 ease-out\",\n tone === \"secondary\" ? \"bg-secondary\" : \"bg-primary\",\n barClassName\n )}\n style={{ width: `${pct}%` }}\n />\n </div>\n );\n }\n);\nProgress.displayName = \"Progress\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n /** Append a red required marker. */\n required?: boolean;\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, required, children, ...props }, ref) => (\n <label\n ref={ref}\n className={cn(\"text-[0.8rem] font-semibold text-foreground\", className)}\n {...props}\n >\n {children}\n {required && <span className=\"text-danger\"> *</span>}\n </label>\n )\n);\nLabel.displayName = \"Label\";\n\nexport interface HintProps extends React.HTMLAttributes<HTMLSpanElement> {\n error?: boolean;\n}\n\nexport const Hint = React.forwardRef<HTMLSpanElement, HintProps>(\n ({ className, error, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(\"text-[0.76rem]\", error ? \"text-danger\" : \"text-muted-foreground\", className)}\n {...props}\n />\n )\n);\nHint.displayName = \"Hint\";\n\n/** Vertical label + control + hint group. */\nexport const Field = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5\", className)} {...props} />\n )\n);\nField.displayName = \"Field\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label, Hint } from \"./field\";\n\nexport interface FormFieldProps extends React.HTMLAttributes<HTMLDivElement> {\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n children: React.ReactNode;\n}\n\nexport const FormField = React.forwardRef<HTMLDivElement, FormFieldProps>(\n ({ className, label, hint, error, required, children, ...props }, ref) => {\n const id = React.useId();\n const hintId = `${id}-hint`;\n const errorId = `${id}-error`;\n\n const child = React.Children.only(children) as React.ReactElement<{\n id?: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: boolean | \"true\" | \"false\";\n required?: boolean;\n }>;\n const clonedChild = React.cloneElement(child, {\n id: child.props.id ?? id,\n \"aria-describedby\":\n cn(hint && hintId, error && errorId, child.props[\"aria-describedby\"]) || undefined,\n \"aria-invalid\": error ? \"true\" : undefined,\n required: child.props.required ?? required,\n });\n\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-1.5 w-full\", className)} {...props}>\n <Label htmlFor={id} required={required}>\n {label}\n </Label>\n {clonedChild}\n {hint && !error && <Hint id={hintId}>{hint}</Hint>}\n {error && (\n <Hint id={errorId} error>\n {error}\n </Hint>\n )}\n </div>\n );\n }\n);\nFormField.displayName = \"FormField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { FormField } from \"./form-field\";\n\nexport type ProgressRingSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type ProgressRingTone = \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface ProgressRingProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current progress value. Defaults to 0. */\n value?: number;\n /** Minimum progress value. Defaults to 0. */\n min?: number;\n /** Maximum progress value. Defaults to 100. */\n max?: number;\n /** Preset size of the ring. Defaults to \"md\". */\n size?: ProgressRingSize;\n /** Override stroke thickness (in px). */\n strokeWidth?: number;\n /** Color tone of the progress indicator. Defaults to \"primary\". */\n tone?: ProgressRingTone;\n /** Whether to show the percentage text inside the ring center if no children are provided. Defaults to false. */\n showValue?: boolean;\n /** Optional formatter for the center percentage display. */\n formatValue?: (value: number, percentage: number) => React.ReactNode;\n /** Additional CSS class for the background track circle. */\n trackClassName?: string;\n /** Additional CSS class for the progress indicator circle. */\n indicatorClassName?: string;\n /** Custom center content. */\n children?: React.ReactNode;\n}\n\nconst sizeDimensions: Record<ProgressRingSize, number> = {\n sm: 36,\n md: 64,\n lg: 96,\n xl: 128,\n};\n\nconst defaultStrokeWidths: Record<ProgressRingSize, number> = {\n sm: 3.5,\n md: 6,\n lg: 8,\n xl: 10,\n};\n\nconst textSizeClasses: Record<ProgressRingSize, string> = {\n sm: \"text-[0.65rem] font-semibold leading-none\",\n md: \"text-xs font-semibold leading-none\",\n lg: \"text-base font-bold leading-none\",\n xl: \"text-xl font-bold leading-none\",\n};\n\nconst toneClasses: Record<ProgressRingTone, string> = {\n primary: \"text-primary stroke-current\",\n secondary: \"text-secondary stroke-current\",\n success: \"text-success stroke-current\",\n warning: \"text-warning stroke-current\",\n danger: \"text-danger stroke-current\",\n info: \"text-info stroke-current\",\n};\n\nexport const ProgressRing = React.forwardRef<HTMLDivElement, ProgressRingProps>(\n (\n {\n className,\n style,\n value = 0,\n min = 0,\n max = 100,\n size = \"md\",\n strokeWidth,\n tone = \"primary\",\n showValue = false,\n formatValue,\n trackClassName,\n indicatorClassName,\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const range = max > min ? max - min : 100;\n const clampedValue = Math.max(min, Math.min(max, value));\n const percentage = Math.max(0, Math.min(100, ((clampedValue - min) / range) * 100));\n\n const dimension = sizeDimensions[size];\n const strokeWidthVal = strokeWidth ?? defaultStrokeWidths[size];\n const radius = Math.max(0, (dimension - strokeWidthVal) / 2);\n const circumference = 2 * Math.PI * radius;\n const strokeDashoffset = circumference - (percentage / 100) * circumference;\n const computedAriaLabel = ariaLabel ?? (props[\"aria-labelledby\"] ? undefined : \"Progress\");\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-label={computedAriaLabel}\n aria-valuenow={clampedValue}\n aria-valuemin={min}\n aria-valuemax={max}\n className={cn(\"relative inline-flex items-center justify-center shrink-0\", className)}\n style={{ width: dimension, height: dimension, ...style }}\n {...props}\n >\n <svg\n width={dimension}\n height={dimension}\n viewBox={`0 0 ${dimension} ${dimension}`}\n className=\"-rotate-90 transform\"\n >\n {/* Background track circle */}\n <circle\n cx={dimension / 2}\n cy={dimension / 2}\n r={radius}\n strokeWidth={strokeWidthVal}\n className={cn(\"stroke-muted/30 fill-none\", trackClassName)}\n />\n {/* Progress indicator circle */}\n <circle\n cx={dimension / 2}\n cy={dimension / 2}\n r={radius}\n strokeWidth={strokeWidthVal}\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap={percentage === 0 ? \"butt\" : \"round\"}\n className={cn(\n \"fill-none transition-[stroke-dashoffset,opacity] duration-500 ease-in-out\",\n percentage === 0 && \"opacity-0\",\n toneClasses[tone],\n indicatorClassName\n )}\n />\n </svg>\n\n {(children || showValue) && (\n <div\n className={cn(\n \"absolute inset-0 flex flex-col items-center justify-center text-center text-foreground p-1\",\n textSizeClasses[size]\n )}\n >\n {children ??\n (formatValue\n ? formatValue(clampedValue, Math.round(percentage))\n : `${Math.round(percentage)}%`)}\n </div>\n )}\n </div>\n );\n }\n);\nProgressRing.displayName = \"ProgressRing\";\n\nexport interface ProgressRingFieldProps extends ProgressRingProps {\n /** Field label text. */\n label: string;\n /** Helper hint text displayed beneath the control. */\n hint?: string;\n /** Error message displayed beneath the control. */\n error?: string;\n /** Renders a required indicator (*). */\n required?: boolean;\n /** Class name for the outer field wrapper div. */\n fieldClassName?: string;\n}\n\nexport const ProgressRingField = React.forwardRef<HTMLDivElement, ProgressRingFieldProps>(\n ({ label, hint, error, required, fieldClassName, ...ringProps }, ref) => {\n return (\n <FormField\n label={label}\n hint={hint}\n error={error}\n required={required}\n className={fieldClassName}\n >\n <ProgressRing ref={ref} aria-label={ringProps[\"aria-label\"] ?? label} {...ringProps} />\n </FormField>\n );\n }\n);\nProgressRingField.displayName = \"ProgressRingField\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Visual error state (red border + ring). */\n error?: boolean;\n /** Icon shown inside the field, leading edge. */\n leadingIcon?: React.ReactNode;\n}\n\nconst baseField =\n \"w-full font-sans text-sm text-foreground bg-surface border rounded-kj-md px-[0.85rem] \" +\n \"transition-[border-color,box-shadow] duration-150 placeholder:text-muted-foreground \" +\n \"hover:border-control-border-hover focus:outline-none focus:border-ring focus:ring-[3px] focus:ring-ring/30 \" +\n \"disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed\";\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, error, leadingIcon, ...props }, ref) => {\n const field = (\n <input\n ref={ref}\n aria-invalid={error || undefined}\n className={cn(\n baseField,\n \"py-[calc(0.6rem*var(--kj-density,1))]\",\n error ? \"border-danger focus:border-danger focus:ring-danger/25\" : \"border-input\",\n leadingIcon && \"pl-[2.3rem]\",\n className\n )}\n {...props}\n />\n );\n if (!leadingIcon) return field;\n return (\n <span className=\"relative flex items-center\">\n <span className=\"absolute left-[0.8rem] text-muted-foreground [&_svg]:h-[1.05rem] [&_svg]:w-[1.05rem] pointer-events-none\">\n {leadingIcon}\n </span>\n {field}\n </span>\n );\n }\n);\nInput.displayName = \"Input\";\n\nimport { FormField } from \"./form-field\";\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, error, ...props }, ref) => (\n <textarea\n ref={ref}\n aria-invalid={error || undefined}\n className={cn(\n baseField,\n \"py-[calc(0.6rem*var(--kj-density,1))] min-h-[84px] leading-relaxed resize-y\",\n error ? \"border-danger focus:border-danger focus:ring-danger/25\" : \"border-input\",\n className\n )}\n {...props}\n />\n )\n);\nTextarea.displayName = \"Textarea\";\n\nexport interface TextFieldProps\n extends Omit<React.ComponentPropsWithoutRef<typeof Input>, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n}\n\nexport const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(\n ({ label, hint, error, required, className, ...props }, ref) => {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <Input ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nTextField.displayName = \"TextField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n error?: boolean;\n}\n\nconst chevron =\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2371717a' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\";\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, error, style, children, ...props }, ref) => (\n <select\n ref={ref}\n aria-invalid={error || undefined}\n className={cn(\n \"w-full appearance-none cursor-pointer font-sans text-sm text-foreground bg-surface\",\n \"border rounded-kj-md py-[calc(0.6rem*var(--kj-density,1))] pl-[0.85rem] pr-9\",\n \"transition-[border-color,box-shadow] duration-150\",\n \"focus:outline-none focus:border-ring focus:ring-[3px] focus:ring-ring/30\",\n \"disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed\",\n error ? \"border-danger\" : \"border-input\",\n className\n )}\n style={{\n backgroundImage: `url(\"${chevron}\")`,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"right 0.75rem center\",\n backgroundSize: \"1rem\",\n ...style,\n }}\n {...props}\n >\n {children}\n </select>\n )\n);\nSelect.displayName = \"Select\";\n\nimport { FormField } from \"./form-field\";\n\nexport interface SelectFieldProps\n extends Omit<React.ComponentPropsWithoutRef<typeof Select>, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n}\n\nexport const SelectField = React.forwardRef<HTMLSelectElement, SelectFieldProps>(\n ({ label, hint, error, required, className, children, ...props }, ref) => {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <Select ref={ref} error={!!error} {...props}>\n {children}\n </Select>\n </FormField>\n );\n }\n);\nSelectField.displayName = \"SelectField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id, ...props }, ref) => {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n return (\n <label\n htmlFor={inputId}\n className={cn(\n \"inline-flex items-center gap-2.5 cursor-pointer text-sm select-none\",\n className\n )}\n >\n <input ref={ref} id={inputId} type=\"checkbox\" className=\"peer sr-only\" {...props} />\n <span className=\"grid place-items-center h-[1.15rem] w-[1.15rem] shrink-0 rounded-[0.4rem] border-[1.5px] border-input bg-surface transition-all duration-150 peer-checked:bg-primary peer-checked:border-primary peer-focus-visible:ring-[3px] peer-focus-visible:ring-ring/35 peer-checked:[&_svg]:opacity-100 peer-checked:[&_svg]:scale-100\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"h-3 w-3 text-primary-foreground opacity-0 scale-50 transition-all duration-150\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n {label}\n </label>\n );\n }\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, id, ...props }, ref) => {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n return (\n <label\n htmlFor={inputId}\n className={cn(\n \"inline-flex items-center gap-2.5 cursor-pointer text-sm select-none\",\n className\n )}\n >\n <input ref={ref} id={inputId} type=\"radio\" className=\"peer sr-only\" {...props} />\n <span className=\"grid place-items-center h-[1.15rem] w-[1.15rem] shrink-0 rounded-full border-[1.5px] border-input bg-surface transition-all duration-150 peer-checked:bg-primary peer-checked:border-primary peer-focus-visible:ring-[3px] peer-focus-visible:ring-ring/35 peer-checked:[&>span]:opacity-100 peer-checked:[&>span]:scale-100\">\n <span className=\"h-2 w-2 rounded-full bg-primary-foreground opacity-0 scale-[0.4] transition-all duration-150\" />\n </span>\n {label}\n </label>\n );\n }\n);\nRadio.displayName = \"Radio\";\n\nimport { Hint } from \"./field\";\n\nexport interface CheckboxFieldProps extends React.ComponentPropsWithoutRef<typeof Checkbox> {\n label: React.ReactNode;\n hint?: string;\n error?: string;\n}\n\nexport const CheckboxField = React.forwardRef<HTMLInputElement, CheckboxFieldProps>(\n ({ label, hint, error, className, ...props }, ref) => {\n const id = React.useId();\n const hintId = `${id}-hint`;\n const errorId = `${id}-error`;\n return (\n <div className={cn(\"flex flex-col gap-1 w-full\", className)}>\n <Checkbox\n ref={ref}\n id={id}\n label={label}\n aria-describedby={cn(hint && hintId, error && errorId) || undefined}\n aria-invalid={error ? \"true\" : undefined}\n {...props}\n />\n {hint && !error && (\n <Hint id={hintId} className=\"pl-[1.8rem]\">\n {hint}\n </Hint>\n )}\n {error && (\n <Hint id={errorId} error className=\"pl-[1.8rem]\">\n {error}\n </Hint>\n )}\n </div>\n );\n }\n);\nCheckboxField.displayName = \"CheckboxField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SwitchProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport const Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, label, id, ...props }, ref) => {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n return (\n <label\n htmlFor={inputId}\n className={cn(\n \"inline-flex items-center gap-2.5 cursor-pointer text-sm select-none\",\n className\n )}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"peer sr-only\"\n {...props}\n />\n <span className=\"relative h-[1.45rem] w-[2.6rem] shrink-0 rounded-full bg-input transition-colors duration-200 peer-checked:bg-primary peer-focus-visible:ring-[3px] peer-focus-visible:ring-ring/35 after:content-[''] after:absolute after:top-0.5 after:left-0.5 after:h-[calc(1.45rem-4px)] after:w-[calc(1.45rem-4px)] after:rounded-full after:bg-white after:shadow-kj-sm after:transition-transform after:duration-200 peer-checked:after:translate-x-[1.15rem]\" />\n {label}\n </label>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type SliderProps = React.InputHTMLAttributes<HTMLInputElement>;\n\n/**\n * Range slider styled with the kit's primary token. Thumb styling lives in a\n * scoped <style> tag because pseudo-elements (::-webkit-slider-thumb) can't be\n * expressed as Tailwind utilities.\n */\nexport const Slider = React.forwardRef<HTMLInputElement, SliderProps>(\n ({ className, style, value, defaultValue, min = 0, max = 100, onChange, ...props }, ref) => {\n const [localValue, setLocalValue] = React.useState<number>(Number(defaultValue ?? value ?? 50));\n const isControlled = value !== undefined;\n const currentVal = isControlled ? Number(value) : localValue;\n\n const numMin = Number(min);\n const numMax = Number(max);\n const percentage = Math.min(\n 100,\n Math.max(0, ((currentVal - numMin) / (numMax - numMin)) * 100)\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setLocalValue(Number(e.target.value));\n }\n onChange?.(e);\n };\n\n return (\n <input\n ref={ref}\n type=\"range\"\n value={value}\n defaultValue={defaultValue}\n min={min}\n max={max}\n onChange={handleChange}\n style={{\n background: `linear-gradient(to right, var(--kj-primary) ${percentage}%, var(--kj-border, rgba(120, 120, 128, 0.2)) ${percentage}%)`,\n ...style,\n }}\n className={cn(\n \"kj-slider w-full h-1.5 rounded-full appearance-none cursor-pointer accent-primary\",\n className\n )}\n {...props}\n />\n );\n }\n);\nSlider.displayName = \"Slider\";\n\n/** Inject once near the app root (or rely on the package stylesheet). */\nexport const sliderThumbCSS = `\n.kj-slider::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:9999px;background:var(--kj-primary);border:3px solid var(--kj-surface);box-shadow:var(--kj-shadow-sm);cursor:pointer}\n.kj-slider::-moz-range-thumb{width:18px;height:18px;border-radius:9999px;background:var(--kj-primary);border:3px solid var(--kj-surface);box-shadow:var(--kj-shadow-sm);cursor:pointer}\n`;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SegmentedOption<T extends string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface SegmentedProps<T extends string> {\n options: SegmentedOption<T>[];\n value: T;\n onChange: (value: T) => void;\n className?: string;\n \"aria-label\"?: string;\n}\n\n/** Segmented control / single-select toggle group. Controlled. */\nexport function Segmented<T extends string>({\n options,\n value,\n onChange,\n className,\n ...props\n}: SegmentedProps<T>) {\n return (\n <div\n role=\"tablist\"\n className={cn(\"inline-flex gap-0.5 p-[3px] rounded-kj-md bg-muted\", className)}\n {...props}\n >\n {options.map((opt) => {\n const active = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onChange(opt.value)}\n className={cn(\n \"px-3.5 py-1.5 text-[0.82rem] font-semibold rounded-[calc(var(--kj-radius-md)-3px)] cursor-pointer transition-all duration-150\",\n active\n ? \"bg-surface text-foreground shadow-kj-xs\"\n : \"bg-transparent text-muted-foreground hover:text-foreground\"\n )}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface ToggleGroupOption<T extends string> {\n value: T;\n label: React.ReactNode;\n}\n\nexport interface ToggleGroupProps<T extends string> {\n options: ToggleGroupOption<T>[];\n value: T[];\n onChange: (value: T[]) => void;\n disabled?: boolean;\n className?: string;\n \"aria-label\": string;\n}\n\n/** Multi-select toggle row. Always controlled — each button's pressed state is independent. */\nexport function ToggleGroup<T extends string>({\n options,\n value,\n onChange,\n disabled,\n className,\n ...props\n}: ToggleGroupProps<T>) {\n const toggle = (optionValue: T) => {\n if (disabled) return;\n const next = value.includes(optionValue)\n ? value.filter((v) => v !== optionValue)\n : [...value, optionValue];\n onChange(next);\n };\n\n return (\n <div\n role=\"group\"\n className={cn(\"inline-flex gap-0.5 p-[3px] rounded-kj-md bg-muted\", className)}\n {...props}\n >\n {options.map((opt) => {\n const active = value.includes(opt.value);\n return (\n <button\n key={opt.value}\n type=\"button\"\n aria-pressed={active}\n disabled={disabled}\n onClick={() => toggle(opt.value)}\n className={cn(\n \"px-3.5 py-1.5 text-[0.82rem] font-semibold rounded-[calc(var(--kj-radius-md)-3px)] cursor-pointer transition-all duration-150 disabled:cursor-not-allowed disabled:opacity-50\",\n active\n ? \"bg-surface text-foreground shadow-kj-xs\"\n : \"bg-transparent text-muted-foreground hover:text-foreground\"\n )}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface CardProps extends Omit<React.AllHTMLAttributes<HTMLElement>, \"as\"> {\n as?: React.ElementType;\n /** Drop the border + heavier shadow for a floating look. */\n elevated?: boolean;\n /** Adds hover lift effect — translate-y + shadow. For keyboard accessibility pair with `as=\"a\"` or `as=\"button\"`. */\n interactive?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(\n ({ as: Tag = \"div\", className, elevated, interactive, ...props }, ref) => (\n <Tag\n ref={ref}\n className={cn(\n \"bg-card text-card-foreground rounded-kj-xl overflow-hidden border\",\n elevated ? \"border-transparent shadow-kj-lg\" : \"border-border shadow-kj-sm\",\n interactive &&\n \"cursor-pointer transition-all duration-300 hover:-translate-y-1 hover:shadow-kj-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n )\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-[1.35rem] flex flex-col gap-1\", className)} {...props} />\n )\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"m-0 text-base font-bold tracking-[-0.01em]\", className)} {...props}>\n {children}\n </h3>\n));\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"m-0 text-[0.85rem] text-muted-foreground\", className)} {...props} />\n));\nCardDescription.displayName = \"CardDescription\";\n\n/** Body region with default padding. */\nexport const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-[1.35rem] pb-[1.35rem]\", className)} {...props} />\n )\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex gap-2.5 px-[1.35rem] py-[1.1rem] border-t border-border bg-muted/40\",\n className\n )}\n {...props}\n />\n )\n);\nCardFooter.displayName = \"CardFooter\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\n\nexport interface StatProps extends React.HTMLAttributes<HTMLDivElement> {\n label: React.ReactNode;\n value: React.ReactNode;\n /** e.g. \"+12.3% mdm\" */\n delta?: React.ReactNode;\n trend?: \"up\" | \"down\";\n}\n\nexport const Stat = React.forwardRef<HTMLDivElement, StatProps>(\n ({ className, label, value, delta, trend, ...props }, ref) => (\n <Card ref={ref} className={cn(\"p-[1.35rem] flex flex-col gap-2\", className)} {...props}>\n <span className=\"text-[0.78rem] font-semibold uppercase tracking-[0.05em] text-muted-foreground\">\n {label}\n </span>\n <span className=\"text-[2rem] font-bold tracking-[-0.03em] tabular-nums leading-none\">\n {value}\n </span>\n {delta && (\n <span\n className={cn(\n \"inline-flex items-center gap-1 text-[0.8rem] font-semibold\",\n trend === \"down\" ? \"text-danger\" : \"text-success\"\n )}\n >\n {trend === \"down\" ? \"▼\" : \"▲\"} {delta}\n </span>\n )}\n </Card>\n )\n);\nStat.displayName = \"Stat\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst avatarVariants = cva(\n \"grid place-items-center shrink-0 rounded-full font-semibold border-2 border-surface\",\n {\n variants: {\n size: {\n sm: \"h-7 w-7 text-[0.7rem]\",\n md: \"h-9 w-9 text-[0.8rem]\",\n lg: \"h-12 w-12 text-base\",\n },\n tone: {\n secondary: \"bg-secondary text-secondary-foreground\",\n primary: \"bg-primary text-primary-foreground\",\n info: \"bg-info text-white\",\n muted: \"bg-muted text-muted-foreground\",\n },\n },\n defaultVariants: { size: \"md\", tone: \"secondary\" },\n }\n);\n\nexport interface AvatarProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof avatarVariants> {\n /** Image URL; falls back to initials/children when absent. */\n src?: string;\n alt?: string;\n /** Show an online status dot. */\n status?: boolean;\n}\n\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n ({ className, size, tone, src, alt, status, children, ...props }, ref) => {\n const node = (\n <span\n ref={ref}\n className={cn(avatarVariants({ size, tone }), \"overflow-hidden\", className)}\n {...props}\n >\n {src ? <img src={src} alt={alt} className=\"h-full w-full object-cover\" /> : children}\n </span>\n );\n if (!status) return node;\n return (\n <span className=\"relative inline-flex\">\n {node}\n <span className=\"absolute -right-px -bottom-px h-[0.7rem] w-[0.7rem] rounded-full bg-success border-2 border-surface\" />\n </span>\n );\n }\n);\nAvatar.displayName = \"Avatar\";\n\n/** Overlapping cluster of avatars. */\nexport const AvatarGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex [&>*:not(:first-child)]:-ml-2.5\", className)} {...props} />\n )\n);\nAvatarGroup.displayName = \"AvatarGroup\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\ninterface TabsCtx {\n value: string;\n setValue: (v: string) => void;\n /** Instance-unique prefix so multiple Tabs on one page never share DOM ids. */\n uid: string;\n}\nconst TabsContext = React.createContext<TabsCtx | null>(null);\nfunction useTabs() {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error(\"Tabs.* must be used within <Tabs>\");\n return ctx;\n}\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Controlled active value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport function Tabs({\n value,\n defaultValue,\n onValueChange,\n className,\n children,\n ...props\n}: TabsProps) {\n const [internal, setInternal] = React.useState(defaultValue ?? \"\");\n const uid = React.useId();\n const current = value ?? internal;\n const setValue = React.useCallback(\n (v: string) => {\n if (value === undefined) setInternal(v);\n onValueChange?.(v);\n },\n [value, onValueChange]\n );\n return (\n <TabsContext.Provider value={{ value: current, setValue, uid }}>\n <div className={className} {...props}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport const TabsList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, onKeyDown, ...props }, ref) => {\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const container = e.currentTarget;\n const tabs = Array.from(container.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]'));\n if (tabs.length === 0) return;\n\n const activeIndex = tabs.findIndex((tab) => tab.getAttribute(\"aria-selected\") === \"true\");\n let newIndex = activeIndex;\n\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n newIndex = (activeIndex + 1) % tabs.length;\n tabs[newIndex].focus();\n tabs[newIndex].click();\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n newIndex = (activeIndex - 1 + tabs.length) % tabs.length;\n tabs[newIndex].focus();\n tabs[newIndex].click();\n } else if (e.key === \"Home\") {\n e.preventDefault();\n newIndex = 0;\n tabs[newIndex].focus();\n tabs[newIndex].click();\n } else if (e.key === \"End\") {\n e.preventDefault();\n newIndex = tabs.length - 1;\n tabs[newIndex].focus();\n tabs[newIndex].click();\n }\n\n onKeyDown?.(e);\n };\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n onKeyDown={handleKeyDown}\n className={cn(\n \"flex gap-1 border-b border-border overflow-x-auto whitespace-nowrap [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n className\n )}\n {...props}\n />\n );\n }\n);\nTabsList.displayName = \"TabsList\";\n\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n}\n\nexport const TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, children, ...props }, ref) => {\n const { value: current, setValue, uid } = useTabs();\n const active = current === value;\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n id={`tabs-trigger-${uid}-${value}`}\n aria-controls={`tabs-panel-${uid}-${value}`}\n aria-selected={active}\n tabIndex={active ? 0 : -1}\n onClick={() => setValue(value)}\n className={cn(\n \"relative px-[0.9rem] py-2.5 text-sm font-semibold cursor-pointer transition-colors duration-150 outline-none shrink-0 whitespace-nowrap\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:rounded-sm\",\n \"after:content-[''] after:absolute after:left-[0.9rem] after:right-[0.9rem] after:-bottom-px after:h-0.5 after:rounded-sm after:transition-colors\",\n active\n ? \"text-foreground after:bg-primary\"\n : \"text-muted-foreground hover:text-foreground after:bg-transparent\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\nTabsTrigger.displayName = \"TabsTrigger\";\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n}\n\nexport const TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, ...props }, ref) => {\n const { value: current, uid } = useTabs();\n const active = current === value;\n if (!active) return null;\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`tabs-panel-${uid}-${value}`}\n aria-labelledby={`tabs-trigger-${uid}-${value}`}\n tabIndex={0}\n className={cn(\"pt-5 text-[0.9rem] text-muted-foreground outline-none\", className)}\n {...props}\n />\n );\n }\n);\nTabsContent.displayName = \"TabsContent\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\ninterface AccordionCtx {\n open: string[];\n toggle: (v: string) => void;\n}\nconst AccordionContext = React.createContext<AccordionCtx | null>(null);\n\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \"single\" closes others when one opens. */\n type?: \"single\" | \"multiple\";\n defaultValue?: string[];\n}\n\nexport function Accordion({\n type = \"single\",\n defaultValue = [],\n className,\n children,\n ...props\n}: AccordionProps) {\n const [open, setOpen] = React.useState<string[]>(defaultValue);\n const toggle = React.useCallback(\n (v: string) => {\n setOpen((prev) => {\n const isOpen = prev.includes(v);\n if (type === \"single\") return isOpen ? [] : [v];\n return isOpen ? prev.filter((x) => x !== v) : [...prev, v];\n });\n },\n [type]\n );\n return (\n <AccordionContext.Provider value={{ open, toggle }}>\n <div\n className={cn(\"border border-border rounded-kj-lg overflow-hidden\", className)}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nconst ItemContext = React.createContext<string>(\"\");\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n}\n\nexport const AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ className, value, ...props }, ref) => (\n <ItemContext.Provider value={value}>\n <div\n ref={ref}\n className={cn(\"border-t border-border first:border-t-0\", className)}\n {...props}\n />\n </ItemContext.Provider>\n )\n);\nAccordionItem.displayName = \"AccordionItem\";\n\nexport const AccordionTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, children, ...props }, ref) => {\n const ctx = React.useContext(AccordionContext)!;\n const value = React.useContext(ItemContext);\n const isOpen = ctx.open.includes(value);\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={isOpen}\n onClick={() => ctx.toggle(value)}\n className={cn(\n \"w-full flex justify-between items-center gap-4 text-left px-[1.2rem] py-4 bg-card text-foreground text-[0.9rem] font-semibold cursor-pointer hover:bg-muted transition-colors\",\n className\n )}\n {...props}\n >\n {children}\n <svg\n className={cn(\n \"shrink-0 text-muted-foreground transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n width={18}\n height={18}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n );\n});\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nexport const AccordionContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => {\n const ctx = React.useContext(AccordionContext)!;\n const value = React.useContext(ItemContext);\n const isOpen = ctx.open.includes(value);\n return (\n <div\n ref={ref}\n className={cn(\n \"grid transition-[grid-template-rows] duration-200 ease-out\",\n isOpen ? \"[grid-template-rows:1fr]\" : \"[grid-template-rows:0fr]\"\n )}\n {...props}\n >\n <div className=\"overflow-hidden\">\n <div\n className={cn(\"px-[1.2rem] pt-3 pb-4 text-[0.85rem] text-muted-foreground\", className)}\n >\n {children}\n </div>\n </div>\n </div>\n );\n});\nAccordionContent.displayName = \"AccordionContent\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\ninterface MenuCtx {\n open: boolean;\n setOpen: (v: boolean) => void;\n}\nconst MenuContext = React.createContext<MenuCtx | null>(null);\n\nexport function DropdownMenu({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n const [open, setOpen] = React.useState(false);\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n const onEsc = (e: KeyboardEvent) => e.key === \"Escape\" && setOpen(false);\n document.addEventListener(\"mousedown\", onDoc);\n document.addEventListener(\"keydown\", onEsc);\n return () => {\n document.removeEventListener(\"mousedown\", onDoc);\n document.removeEventListener(\"keydown\", onEsc);\n };\n }, [open]);\n\n return (\n <MenuContext.Provider value={{ open, setOpen }}>\n <div ref={ref} className={cn(\"relative inline-block\", className)}>\n {children}\n </div>\n </MenuContext.Provider>\n );\n}\n\nexport const DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean }\n>(({ onClick, asChild, ...props }, ref) => {\n const ctx = React.useContext(MenuContext)!;\n if (asChild) {\n const child = React.Children.only(props.children) as React.ReactElement<\n React.ComponentPropsWithRef<\"button\">\n >;\n return React.cloneElement(child, {\n ref,\n ...props,\n ...child.props,\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n child.props.onClick?.(e);\n },\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": ctx.open,\n });\n }\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open}\n onClick={(e) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n }}\n {...props}\n />\n );\n});\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\";\n\nexport interface DropdownMenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: \"start\" | \"end\";\n}\n\nexport function DropdownMenuContent({\n className,\n align = \"start\",\n children,\n ...props\n}: DropdownMenuContentProps) {\n const ctx = React.useContext(MenuContext)!;\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!ctx.open) return;\n const container = ref.current;\n if (container) {\n const items = Array.from(\n container.querySelectorAll<HTMLButtonElement | HTMLAnchorElement>('[role=\"menuitem\"]')\n );\n if (items.length > 0) {\n setTimeout(() => items[0].focus(), 50);\n }\n }\n }, [ctx.open]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const container = ref.current;\n if (!container) return;\n\n const items = Array.from(container.querySelectorAll<HTMLElement>('[role=\"menuitem\"]'));\n if (items.length === 0) return;\n\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n const nextIndex = (currentIndex + 1) % items.length;\n items[nextIndex].focus();\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n const prevIndex = (currentIndex - 1 + items.length) % items.length;\n items[prevIndex].focus();\n } else if (e.key === \"Tab\" || e.key === \"Escape\") {\n ctx.setOpen(false);\n }\n };\n\n if (!ctx.open) return null;\n return (\n <div\n ref={ref}\n role=\"menu\"\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className={cn(\n \"absolute top-[calc(100%+6px)] z-40 min-w-[200px] p-1.5 rounded-kj-md bg-surface border border-border shadow-kj-lg outline-none\",\n \"animate-[kjpop_.12s_ease]\",\n align === \"end\" ? \"right-0\" : \"left-0\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport interface DropdownMenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n danger?: boolean;\n icon?: React.ReactNode;\n}\n\nexport const DropdownMenuItem = React.forwardRef<HTMLButtonElement, DropdownMenuItemProps>(\n ({ className, danger, icon, children, onClick, ...props }, ref) => {\n const ctx = React.useContext(MenuContext)!;\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n onClick={(e) => {\n onClick?.(e);\n ctx.setOpen(false);\n }}\n className={cn(\n \"w-full flex items-center gap-2.5 text-left px-2.5 py-2 rounded-kj-sm text-[0.85rem] cursor-pointer transition-colors\",\n \"[&_svg]:h-4 [&_svg]:w-4\",\n danger ? \"text-danger hover:bg-danger-surface\" : \"text-foreground hover:bg-muted\",\n className\n )}\n {...props}\n >\n {icon}\n {children}\n </button>\n );\n }\n);\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nexport function DropdownMenuSeparator({ className }: { className?: string }) {\n return <div className={cn(\"h-px bg-border my-1.5\", className)} role=\"separator\" />;\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport const Breadcrumb = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, children, ...props }, ref) => (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn(\"flex items-center gap-1.5 text-[0.85rem] text-muted-foreground\", className)}\n {...props}\n >\n {children}\n </nav>\n )\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport interface BreadcrumbItemProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Marks the trailing current page (non-link, emphasized). */\n current?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef<HTMLAnchorElement, BreadcrumbItemProps>(\n ({ className, current, children, ...props }, ref) => {\n if (current) {\n return (\n <span aria-current=\"page\" className={cn(\"text-foreground font-semibold\", className)}>\n {children}\n </span>\n );\n }\n return (\n <a\n ref={ref}\n className={cn(\n \"text-inherit no-underline hover:text-foreground transition-colors\",\n className\n )}\n {...props}\n >\n {children}\n </a>\n );\n }\n);\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport function BreadcrumbSeparator() {\n return (\n <span aria-hidden className=\"text-muted-foreground/70\">\n /\n </span>\n );\n}\n","import { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nexport interface PaginationProps {\n page: number;\n pageCount: number;\n onPageChange: (page: number) => void;\n /** How many numbered buttons to show around the edges. Default 5. */\n siblingCount?: number;\n className?: string;\n}\n\nfunction range(start: number, end: number) {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n}\n\n/** Builds a compact page list with ellipses, e.g. [1,2,3,'…',9]. */\nfunction paginate(page: number, pageCount: number): (number | \"…\")[] {\n if (pageCount <= 7) return range(1, pageCount);\n const left = Math.max(2, page - 1);\n const right = Math.min(pageCount - 1, page + 1);\n const items: (number | \"…\")[] = [1];\n if (left > 2) items.push(\"…\");\n items.push(...range(left, right));\n if (right < pageCount - 1) items.push(\"…\");\n items.push(pageCount);\n return items;\n}\n\nconst Chevron = ({ dir }: { dir: \"left\" | \"right\" }) => (\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points={dir === \"left\" ? \"15 18 9 12 15 6\" : \"9 18 15 12 9 6\"} />\n </svg>\n);\n\nexport function Pagination({ page, pageCount, onPageChange, className }: PaginationProps) {\n const items = paginate(page, pageCount);\n return (\n <nav aria-label=\"Paginacja\" className={cn(\"flex items-center gap-1\", className)}>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Previous\"\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n >\n <Chevron dir=\"left\" />\n </Button>\n {items.map((it, i) =>\n it === \"…\" ? (\n <span key={`e${i}`} className=\"px-1 text-muted-foreground select-none\">\n …\n </span>\n ) : (\n <Button\n key={it}\n variant={it === page ? \"primary\" : \"ghost\"}\n size=\"icon-sm\"\n aria-current={it === page ? \"page\" : undefined}\n onClick={() => onPageChange(it)}\n >\n {it}\n </Button>\n )\n )}\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Next\"\n disabled={page >= pageCount}\n onClick={() => onPageChange(page + 1)}\n >\n <Chevron dir=\"right\" />\n </Button>\n </nav>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface BottomNavigationItem {\n id: string;\n label: string;\n href?: string;\n onClick?: () => void;\n icon: React.ReactNode;\n active?: boolean;\n badge?: React.ReactNode;\n}\n\nexport interface BottomNavigationProps extends React.HTMLAttributes<HTMLElement> {\n items: BottomNavigationItem[];\n /** Mode for displaying labels:\n * - 'always': Always show labels for all items.\n * - 'active': Only show label for the active item, hiding others.\n * - 'never': Hide all labels (only show icons).\n */\n showLabels?: \"always\" | \"active\" | \"never\";\n /** If true, uses fixed positioning at the bottom of the viewport with backdrop-blur. */\n fixed?: boolean;\n}\n\nexport const BottomNavigation = React.forwardRef<HTMLElement, BottomNavigationProps>(\n ({ className, items, showLabels = \"always\", fixed = true, ...props }, ref) => {\n return (\n <nav\n ref={ref}\n className={cn(\n \"bg-surface/90 border-t border-border flex items-center justify-around px-4 pt-2 pb-[calc(0.75rem+env(safe-area-inset-bottom,0))] shadow-kj-lg\",\n fixed ? \"fixed bottom-0 left-0 right-0 z-40 backdrop-blur-md\" : \"relative w-full\",\n className\n )}\n {...props}\n >\n {items.map((item) => {\n const isActive = item.active;\n const showLabel = showLabels !== \"never\" && (showLabels === \"always\" || isActive);\n\n const content = (\n <span className=\"flex flex-col items-center justify-center gap-1 w-full relative\">\n <span\n className={cn(\n \"relative flex items-center justify-center p-1 rounded-full transition-all duration-200\",\n isActive\n ? \"text-primary scale-110\"\n : \"text-muted-foreground group-hover:text-foreground group-active:scale-95\"\n )}\n >\n {item.icon}\n {item.badge !== undefined && item.badge !== null && (\n <span className=\"absolute -top-1 -right-1.5 min-w-[16px] h-[16px] px-1 rounded-full bg-primary text-primary-foreground text-[9px] font-bold flex items-center justify-center ring-2 ring-surface\">\n {item.badge}\n </span>\n )}\n </span>\n\n <span\n className={cn(\n \"text-[10px] font-semibold tracking-wide transition-all duration-200 select-none\",\n showLabel\n ? \"opacity-100 scale-100 h-auto\"\n : \"opacity-0 scale-75 h-0 overflow-hidden\",\n isActive\n ? \"text-primary font-bold\"\n : \"text-muted-foreground group-hover:text-foreground\"\n )}\n >\n {item.label}\n </span>\n\n {/* Subtle active indicator dot */}\n {isActive && (\n <span className=\"absolute -bottom-1.5 w-1 h-1 rounded-full bg-primary animate-fade-in\" />\n )}\n </span>\n );\n\n const itemClass =\n \"group flex-1 flex flex-col items-center justify-center py-1 cursor-pointer transition-all duration-150 relative focus:outline-none\";\n\n if (item.href) {\n return (\n <a\n key={item.id}\n href={item.href}\n className={itemClass}\n aria-current={isActive ? \"page\" : undefined}\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={item.onClick}\n className={itemClass}\n aria-pressed={isActive}\n >\n {content}\n </button>\n );\n })}\n </nav>\n );\n }\n);\n\nBottomNavigation.displayName = \"BottomNavigation\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/** Rounded, bordered wrapper around a <Table>. */\nexport const TableWrap = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"w-full max-w-full overflow-x-auto border border-border rounded-kj-lg\",\n className\n )}\n {...props}\n />\n )\n);\nTableWrap.displayName = \"TableWrap\";\n\nexport const Table = React.forwardRef<\n HTMLTableElement,\n React.TableHTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <table ref={ref} className={cn(\"w-full border-collapse text-[0.85rem]\", className)} {...props} />\n));\nTable.displayName = \"Table\";\n\nexport const TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => <thead ref={ref} className={className} {...props} />);\nTableHeader.displayName = \"TableHeader\";\n\nexport const TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => <tbody ref={ref} className={className} {...props} />);\nTableBody.displayName = \"TableBody\";\n\nexport const TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr ref={ref} className={cn(\"transition-colors hover:bg-muted/50\", className)} {...props} />\n));\nTableRow.displayName = \"TableRow\";\n\nexport interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n /** Right-align with tabular numerals. */\n numeric?: boolean;\n}\n\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, numeric, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"px-4 py-3 bg-muted border-b border-border text-[0.72rem] font-semibold uppercase tracking-[0.05em] text-muted-foreground\",\n numeric ? \"text-right\" : \"text-left\",\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = \"TableHead\";\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, numeric, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"px-4 py-3 border-b border-border [tr:last-child_&]:border-b-0\",\n numeric && \"text-right tabular-nums\",\n className\n )}\n {...props}\n />\n )\n);\nTableCell.displayName = \"TableCell\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface TooltipProps {\n content: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}\n\n/** CSS-only hover/focus tooltip positioned above the trigger. */\nexport function Tooltip({ content, children, className }: TooltipProps) {\n return (\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n <span className={cn(\"relative inline-flex group\", className)} tabIndex={0}>\n {children}\n <span\n role=\"tooltip\"\n className={cn(\n \"pointer-events-none absolute bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2 translate-y-1 whitespace-nowrap\",\n \"rounded-kj-sm bg-foreground text-background text-xs font-medium px-2.5 py-1.5 shadow-kj-md\",\n \"opacity-0 transition-all duration-150 group-hover:opacity-100 group-hover:translate-y-0 group-focus-visible:opacity-100 group-focus-visible:translate-y-0\",\n \"after:content-[''] after:absolute after:top-full after:left-1/2 after:-translate-x-1/2 after:border-[5px] after:border-transparent after:border-t-foreground\"\n )}\n >\n {content}\n </span>\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n /** Max width of the panel. Default 440px. */\n width?: number;\n className?: string;\n showClose?: boolean;\n}\n\nconst ModalContext = React.createContext<{ titleId: string; descId: string } | null>(null);\n\n/** Centered overlay dialog. Closes on backdrop click and Escape. Includes focus trap and restore. */\nexport function Modal({\n open,\n onClose,\n children,\n width = 440,\n className,\n showClose = true,\n}: ModalProps) {\n const titleId = React.useId();\n const descId = React.useId();\n const containerRef = React.useRef<HTMLDivElement>(null);\n const lastActiveElement = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!open) {\n if (lastActiveElement.current) {\n lastActiveElement.current.focus();\n lastActiveElement.current = null;\n }\n return;\n }\n\n lastActiveElement.current = document.activeElement as HTMLElement;\n\n const container = containerRef.current;\n if (container) {\n const focusables = container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (focusables.length > 0) {\n // Delay slightly for transition to complete\n setTimeout(() => focusables[0].focus(), 50);\n } else {\n container.focus();\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n\n if (e.key === \"Tab\") {\n const container = containerRef.current;\n if (!container) return;\n\n const focusables = Array.from(\n container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n );\n if (focusables.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === first || document.activeElement === container) {\n last.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === last) {\n first.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, onClose]);\n\n return (\n <div\n onClick={(e) => e.target === e.currentTarget && onClose()}\n className={cn(\n \"fixed inset-0 z-[100] grid place-items-center p-6 backdrop-blur-[3px] transition-opacity duration-200\",\n \"bg-[color-mix(in_oklch,#09090b_55%,transparent)]\",\n open ? \"opacity-100 pointer-events-auto\" : \"opacity-0 pointer-events-none\"\n )}\n >\n <ModalContext.Provider value={{ titleId, descId }}>\n <div\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descId}\n tabIndex={-1}\n style={{ maxWidth: width }}\n className={cn(\n \"relative w-full p-7 rounded-kj-2xl bg-surface text-foreground border border-border shadow-kj-lg transition-transform duration-200 outline-none\",\n open ? \"scale-100 translate-y-0\" : \"scale-95 translate-y-2\",\n className\n )}\n >\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"absolute top-4 right-4 p-1.5 rounded-kj-sm text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n >\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n {children}\n </div>\n </ModalContext.Provider>\n </div>\n );\n}\n\nexport function ModalTitle({\n className,\n id,\n children,\n ...props\n}: React.HTMLAttributes<HTMLHeadingElement>) {\n const ctx = React.useContext(ModalContext);\n return (\n <h3\n id={id ?? ctx?.titleId}\n className={cn(\n \"m-0 mb-2 text-[1.15rem] font-bold tracking-[-0.01em] text-foreground\",\n className\n )}\n {...props}\n >\n {children}\n </h3>\n );\n}\n\nexport function ModalDescription({\n className,\n id,\n ...props\n}: React.HTMLAttributes<HTMLParagraphElement>) {\n const ctx = React.useContext(ModalContext);\n return (\n <p\n id={id ?? ctx?.descId}\n className={cn(\"m-0 text-[0.9rem] text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport function ModalActions({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"flex gap-2.5 justify-end mt-6\", className)} {...props} />;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type ToastTone = \"default\" | \"success\" | \"danger\";\nexport interface ToastOptions {\n message: React.ReactNode;\n tone?: ToastTone;\n /** Auto-dismiss after ms. Default 3200. Pass 0 to keep open. */\n duration?: number;\n}\ninterface ToastItem extends Required<Omit<ToastOptions, \"duration\">> {\n id: number;\n duration: number;\n leaving?: boolean;\n}\n\ninterface ToastCtx {\n toast: (opts: ToastOptions) => void;\n}\nconst ToastContext = React.createContext<ToastCtx | null>(null);\n\nexport function useToast() {\n const ctx = React.useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used within <ToastProvider>\");\n return ctx;\n}\n\nconst icons: Record<ToastTone, React.ReactNode> = {\n default: (\n <svg\n width={18}\n height={18}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-primary\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4M12 8h.01\" />\n </svg>\n ),\n success: (\n <svg\n width={18}\n height={18}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-success\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ),\n danger: (\n <svg\n width={18}\n height={18}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-danger\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m15 9-6 6M9 9l6 6\" />\n </svg>\n ),\n};\n\nconst toneBorder: Record<ToastTone, string> = {\n default: \"border-l-primary\",\n success: \"border-l-success\",\n danger: \"border-l-danger\",\n};\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [items, setItems] = React.useState<ToastItem[]>([]);\n const idRef = React.useRef(0);\n\n const remove = React.useCallback((id: number) => {\n setItems((prev) => prev.map((t) => (t.id === id ? { ...t, leaving: true } : t)));\n setTimeout(() => setItems((prev) => prev.filter((t) => t.id !== id)), 250);\n }, []);\n\n const toast = React.useCallback(\n ({ message, tone = \"default\", duration = 3200 }: ToastOptions) => {\n const id = ++idRef.current;\n setItems((prev) => [...prev, { id, message, tone, duration }]);\n if (duration > 0) setTimeout(() => remove(id), duration);\n },\n [remove]\n );\n\n return (\n <ToastContext.Provider value={{ toast }}>\n {children}\n <div className=\"fixed bottom-6 right-6 z-[200] flex flex-col gap-2.5\">\n {items.map((t) => (\n <div\n key={t.id}\n role=\"status\"\n onClick={() => remove(t.id)}\n className={cn(\n \"flex items-center gap-2.5 min-w-[280px] px-4 py-3 cursor-pointer\",\n \"bg-surface border border-border border-l-[3px] rounded-kj-md shadow-kj-lg text-[0.85rem] font-medium\",\n toneBorder[t.tone],\n t.leaving\n ? \"animate-[kjtoastout_.25s_ease_forwards]\"\n : \"animate-[kjtoastin_.25s_ease]\"\n )}\n >\n <span className=\"grid place-items-center\">{icons[t.tone]}</span>\n <span>{t.message}</span>\n </div>\n ))}\n </div>\n </ToastContext.Provider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nexport interface PageHeaderProps {\n eyebrow?: string;\n title: string;\n description?: string;\n actions?: React.ReactNode;\n}\n\nexport const PageHeader = React.forwardRef<HTMLElement, PageHeaderProps>(\n ({ eyebrow, title, description, actions }, ref) => (\n <header ref={ref} className=\"py-12 md:py-16\">\n <div className=\"flex flex-col gap-6 md:flex-row md:items-end md:justify-between\">\n <div className=\"space-y-3 max-w-2xl\">\n {eyebrow && (\n <p className=\"font-mono text-xs font-bold uppercase tracking-[0.2em] text-primary\">\n {eyebrow}\n </p>\n )}\n <h1 className=\"font-sans text-4xl font-bold tracking-tight text-foreground sm:text-5xl md:text-6xl\">\n {title}\n </h1>\n {description && (\n <p className=\"text-base leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n )}\n </div>\n {actions && <div className=\"flex flex-wrap gap-3\">{actions}</div>}\n </div>\n </header>\n )\n);\nPageHeader.displayName = \"PageHeader\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type SectionHeaderAlign = \"left\" | \"center\";\nexport type SectionHeaderHeadingLevel = \"h2\" | \"h3\" | \"h4\";\n\nexport interface SectionHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n kicker?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n align?: SectionHeaderAlign;\n headingLevel?: SectionHeaderHeadingLevel;\n divider?: boolean;\n}\n\nexport type SectionHeaderKickerProps = React.HTMLAttributes<HTMLParagraphElement>;\nexport interface SectionHeaderTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n as?: SectionHeaderHeadingLevel;\n}\nexport type SectionHeaderDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;\nexport type SectionHeaderActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SectionHeaderKicker = React.forwardRef<HTMLParagraphElement, SectionHeaderKickerProps>(\n ({ className, children, ...props }, ref) => {\n if (!children) return null;\n return (\n <p\n ref={ref}\n className={cn(\n \"font-mono text-xs font-bold uppercase tracking-[0.2em] text-primary\",\n className\n )}\n {...props}\n >\n {children}\n </p>\n );\n }\n);\nSectionHeaderKicker.displayName = \"SectionHeaderKicker\";\n\nconst SectionHeaderTitle = React.forwardRef<HTMLHeadingElement, SectionHeaderTitleProps>(\n ({ className, as: Component = \"h2\", children, ...props }, ref) => {\n if (!children) return null;\n return (\n <Component\n ref={ref}\n className={cn(\"text-2xl font-bold tracking-tight text-foreground sm:text-3xl\", className)}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\nSectionHeaderTitle.displayName = \"SectionHeaderTitle\";\n\nconst SectionHeaderDescription = React.forwardRef<\n HTMLParagraphElement,\n SectionHeaderDescriptionProps\n>(({ className, children, ...props }, ref) => {\n if (!children) return null;\n return (\n <p\n ref={ref}\n className={cn(\"text-base leading-relaxed text-muted-foreground max-w-2xl\", className)}\n {...props}\n >\n {children}\n </p>\n );\n});\nSectionHeaderDescription.displayName = \"SectionHeaderDescription\";\n\nconst SectionHeaderActions = React.forwardRef<HTMLDivElement, SectionHeaderActionsProps>(\n ({ className, children, ...props }, ref) => {\n if (!children) return null;\n return (\n <div ref={ref} className={cn(\"flex flex-wrap items-center gap-3\", className)} {...props}>\n {children}\n </div>\n );\n }\n);\nSectionHeaderActions.displayName = \"SectionHeaderActions\";\n\nexport const SectionHeader = React.forwardRef<HTMLDivElement, SectionHeaderProps>(\n (\n {\n kicker,\n title,\n description,\n actions,\n align = \"left\",\n headingLevel = \"h2\",\n divider = false,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const isCentered = align === \"center\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"space-y-4\",\n isCentered\n ? \"text-center items-center mx-auto max-w-3xl\"\n : \"md:flex md:items-end md:justify-between md:space-y-0\",\n divider && \"border-b border-border pb-6\",\n className\n )}\n {...props}\n >\n {children ? (\n children\n ) : (\n <>\n <div className={cn(\"space-y-2\", isCentered && \"flex flex-col items-center\")}>\n {kicker && <SectionHeaderKicker>{kicker}</SectionHeaderKicker>}\n {title && <SectionHeaderTitle as={headingLevel}>{title}</SectionHeaderTitle>}\n {description && <SectionHeaderDescription>{description}</SectionHeaderDescription>}\n </div>\n {actions && (\n <SectionHeaderActions className={cn(isCentered && \"justify-center mt-4\")}>\n {actions}\n </SectionHeaderActions>\n )}\n </>\n )}\n </div>\n );\n }\n) as React.ForwardRefExoticComponent<SectionHeaderProps & React.RefAttributes<HTMLDivElement>> & {\n Kicker: typeof SectionHeaderKicker;\n Title: typeof SectionHeaderTitle;\n Description: typeof SectionHeaderDescription;\n Actions: typeof SectionHeaderActions;\n};\n\nSectionHeader.displayName = \"SectionHeader\";\nSectionHeader.Kicker = SectionHeaderKicker;\nSectionHeader.Title = SectionHeaderTitle;\nSectionHeader.Description = SectionHeaderDescription;\nSectionHeader.Actions = SectionHeaderActions;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n action?: React.ReactNode;\n}\n\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ className, icon, title, description, action, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col items-center justify-center text-center p-8 border border-dashed border-border rounded-kj-lg bg-muted/20 min-h-[300px]\",\n className\n )}\n {...props}\n >\n {icon && (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted text-muted-foreground mb-4 [&_svg]:h-6 [&_svg]:w-6\">\n {icon}\n </div>\n )}\n <h3 className=\"text-base font-bold text-foreground mb-1\">{title}</h3>\n {description && (\n <p className=\"text-sm text-muted-foreground max-w-sm mb-6 leading-relaxed\">{description}</p>\n )}\n {action && <div className=\"flex items-center gap-3\">{action}</div>}\n </div>\n )\n);\nEmptyState.displayName = \"EmptyState\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\n\nexport interface MetricCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n value: string | number;\n trend?: string;\n trendDirection?: \"up\" | \"down\" | \"neutral\";\n description?: string;\n icon?: React.ReactNode;\n}\n\nexport const MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\n (\n { className, title, value, trend, trendDirection = \"neutral\", description, icon, ...props },\n ref\n ) => {\n const trendColor = {\n up: \"text-success bg-success-surface border-success/20\",\n down: \"text-danger bg-danger-surface border-danger/20\",\n neutral: \"text-muted-foreground bg-muted border-border/20\",\n }[trendDirection];\n\n return (\n <Card ref={ref} className={cn(\"p-6\", className)} {...props}>\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-xs font-mono font-semibold uppercase tracking-[0.1em] text-muted-foreground\">\n {title}\n </span>\n {icon && (\n <span className=\"text-muted-foreground shrink-0 [&_svg]:h-4 [&_svg]:w-4\">{icon}</span>\n )}\n </div>\n <div className=\"flex items-baseline gap-2.5 mb-1.5\">\n <span className=\"text-3xl font-bold tracking-tight text-foreground\">{value}</span>\n {trend && (\n <span\n className={cn(\"text-[0.75rem] font-bold px-2 py-0.5 rounded-full border\", trendColor)}\n >\n {trend}\n </span>\n )}\n </div>\n {description && <p className=\"text-xs text-muted-foreground\">{description}</p>}\n </Card>\n );\n }\n);\nMetricCard.displayName = \"MetricCard\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Table, TableWrap, TableHeader, TableBody, TableRow, TableHead, TableCell } from \"./table\";\nimport { Spinner } from \"./spinner\";\nimport { Alert } from \"./alert\";\nimport { EmptyState } from \"./empty-state\";\n\nexport interface DataTableColumn<T> {\n header: React.ReactNode;\n accessor: (row: T) => React.ReactNode;\n className?: string;\n align?: \"left\" | \"center\" | \"right\";\n sortable?: boolean;\n sortKey?: string;\n}\n\nexport interface DataTableProps<T> extends React.HTMLAttributes<HTMLDivElement> {\n columns: DataTableColumn<T>[];\n data: T[];\n loading?: boolean;\n error?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n emptyAction?: React.ReactNode;\n\n // Production-grade features\n getRowKey?: (row: T, index: number) => React.Key;\n onRowClick?: (row: T) => void;\n toolbar?: React.ReactNode;\n pagination?: React.ReactNode;\n selectedRows?: Set<React.Key>;\n onSelectionChange?: (selectedKeys: Set<React.Key>) => void;\n\n // Sorting props\n sortBy?: string;\n sortDirection?: \"asc\" | \"desc\";\n onSort?: (sortKey: string, direction: \"asc\" | \"desc\") => void;\n}\n\nexport function DataTable<T>({\n className,\n columns,\n data,\n loading = false,\n error,\n emptyTitle = \"No data available\",\n emptyDescription = \"There are no records to display at this time.\",\n emptyAction,\n getRowKey,\n onRowClick,\n toolbar,\n pagination,\n selectedRows,\n onSelectionChange,\n sortBy,\n sortDirection,\n onSort,\n ...props\n}: DataTableProps<T>) {\n const getRowId = React.useCallback(\n (row: T, index: number) => (getRowKey ? getRowKey(row, index) : index),\n [getRowKey]\n );\n\n const isSelectionActive = selectedRows !== undefined && onSelectionChange !== undefined;\n\n const allSelected = React.useMemo(() => {\n if (!isSelectionActive || data.length === 0) return false;\n return data.every((row, idx) => selectedRows.has(getRowId(row, idx)));\n }, [isSelectionActive, data, selectedRows, getRowId]);\n\n const someSelected = React.useMemo(() => {\n if (!isSelectionActive || data.length === 0) return false;\n const selectedCount = data.filter((row, idx) => selectedRows.has(getRowId(row, idx))).length;\n return selectedCount > 0 && selectedCount < data.length;\n }, [isSelectionActive, data, selectedRows, getRowId]);\n\n const headerCheckboxRef = React.useRef<HTMLInputElement>(null);\n React.useEffect(() => {\n if (headerCheckboxRef.current) {\n headerCheckboxRef.current.indeterminate = someSelected;\n }\n }, [someSelected]);\n\n const handleSelectAll = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!onSelectionChange) return;\n const checked = e.target.checked;\n const next = new Set<React.Key>(selectedRows);\n data.forEach((row, idx) => {\n const id = getRowId(row, idx);\n if (checked) {\n next.add(id);\n } else {\n next.delete(id);\n }\n });\n onSelectionChange(next);\n };\n\n const handleSelectRow = (row: T, idx: number, checked: boolean) => {\n if (!onSelectionChange || !selectedRows) return;\n const id = getRowId(row, idx);\n const next = new Set<React.Key>(selectedRows);\n if (checked) {\n next.add(id);\n } else {\n next.delete(id);\n }\n onSelectionChange(next);\n };\n\n return (\n <div className={cn(\"flex flex-col gap-4 w-full\", className)}>\n {/* Toolbar Slot */}\n {toolbar && (\n <div className=\"flex flex-col sm:flex-row items-stretch sm:items-center justify-between gap-3\">\n {toolbar}\n </div>\n )}\n\n <TableWrap\n className=\"relative overflow-x-auto overflow-y-hidden [scroll-behavior:smooth] [-webkit-overflow-scrolling:touch]\"\n {...props}\n >\n <Table>\n <TableHeader>\n <TableRow>\n {/* Row selection checkbox in header */}\n {isSelectionActive && (\n <TableHead className=\"w-12 px-4 text-center\">\n <div className=\"inline-flex items-center justify-center\">\n <input\n type=\"checkbox\"\n ref={headerCheckboxRef}\n checked={allSelected}\n onChange={handleSelectAll}\n aria-label=\"Select all rows\"\n className=\"h-4 w-4 rounded border-input text-primary focus:ring-ring\"\n />\n </div>\n </TableHead>\n )}\n {columns.map((col, idx) => {\n const alignClass = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n }[col.align || \"left\"];\n const isSortable = col.sortable && onSort && col.sortKey;\n const isSortedActive = sortBy && col.sortKey === sortBy;\n const ariaSort = isSortable\n ? isSortedActive\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n : undefined;\n\n return (\n <TableHead\n key={idx}\n className={cn(\n alignClass,\n isSortable && \"p-0 hover:bg-muted/30 transition-colors\",\n col.className\n )}\n aria-sort={ariaSort}\n >\n {isSortable ? (\n <button\n type=\"button\"\n onClick={() => {\n if (!col.sortKey) return;\n const nextDirection =\n isSortedActive && sortDirection === \"asc\" ? \"desc\" : \"asc\";\n onSort(col.sortKey, nextDirection);\n }}\n className={cn(\n \"w-full px-4 py-3 flex items-center gap-1.5 font-semibold text-[0.72rem] uppercase tracking-[0.05em] text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 transition-colors cursor-pointer\",\n {\n \"justify-start text-left\": col.align === \"left\" || !col.align,\n \"justify-center text-center\": col.align === \"center\",\n \"justify-end text-right\": col.align === \"right\",\n }\n )}\n >\n <span>{col.header}</span>\n <span className=\"text-[10px] text-muted-foreground shrink-0 select-none\">\n {isSortedActive ? (sortDirection === \"asc\" ? \"▲\" : \"▼\") : \"⇅\"}\n </span>\n </button>\n ) : (\n <div\n className={cn(\n \"inline-flex items-center gap-1.5\",\n alignClass === \"text-right\" && \"justify-end w-full\"\n )}\n >\n {col.header}\n </div>\n )}\n </TableHead>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading && data.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (isSelectionActive ? 1 : 0)}\n className=\"h-64 text-center\"\n >\n <div className=\"flex flex-col items-center justify-center gap-3\">\n <Spinner size={32} />\n <span className=\"text-sm text-muted-foreground\">Loading dataset...</span>\n </div>\n </TableCell>\n </TableRow>\n ) : error ? (\n <TableRow>\n <TableCell colSpan={columns.length + (isSelectionActive ? 1 : 0)} className=\"p-8\">\n <Alert variant=\"danger\" title=\"Error loading data\">\n {error}\n </Alert>\n </TableCell>\n </TableRow>\n ) : data.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length + (isSelectionActive ? 1 : 0)} className=\"p-0\">\n <EmptyState\n title={emptyTitle}\n description={emptyDescription}\n action={emptyAction}\n className=\"border-none bg-transparent rounded-none py-16\"\n />\n </TableCell>\n </TableRow>\n ) : (\n data.map((row, rowIdx) => {\n const rowKey = getRowId(row, rowIdx);\n const isSelected = isSelectionActive && selectedRows.has(rowKey);\n return (\n <TableRow\n key={rowKey}\n onClick={() => onRowClick && onRowClick(row)}\n className={cn(\n onRowClick && \"cursor-pointer hover:bg-muted/40 transition-colors\",\n isSelected && \"bg-primary/5 hover:bg-primary/10\"\n )}\n >\n {isSelectionActive && (\n <TableCell\n className=\"w-12 px-4 text-center\"\n onClick={(e) => {\n // Stop propagation to prevent triggering onRowClick\n e.stopPropagation();\n }}\n >\n <div className=\"inline-flex items-center justify-center\">\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => handleSelectRow(row, rowIdx, e.target.checked)}\n aria-label={`Select row ${rowIdx + 1}`}\n className=\"h-4 w-4 rounded border-input text-primary focus:ring-ring\"\n />\n </div>\n </TableCell>\n )}\n {columns.map((col, colIdx) => {\n const alignClass = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n }[col.align || \"left\"];\n return (\n <TableCell key={colIdx} className={cn(alignClass, col.className)}>\n {col.accessor(row)}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </Table>\n {loading && data.length > 0 && (\n <div className=\"absolute inset-0 bg-background/50 backdrop-blur-[1px] grid place-items-center z-10 transition-opacity duration-150\">\n <Spinner size={36} />\n </div>\n )}\n </TableWrap>\n\n {/* Pagination Slot */}\n {pagination && <div className=\"flex items-center justify-end w-full\">{pagination}</div>}\n </div>\n );\n}\nDataTable.displayName = \"DataTable\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nexport interface ErrorStateProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n message: string;\n onRetry?: () => void;\n retryLabel?: string;\n}\n\nexport const ErrorState = React.forwardRef<HTMLDivElement, ErrorStateProps>(\n (\n {\n className,\n title = \"Wystąpił błąd\",\n message,\n onRetry,\n retryLabel = \"Spróbuj ponownie\",\n ...props\n },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col items-center justify-center text-center p-8 border border-danger/25 rounded-kj-lg bg-danger-surface/20 min-h-[300px]\",\n className\n )}\n {...props}\n >\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-danger-surface border border-danger/30 text-danger mb-4\">\n <svg\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n viewBox=\"0 0 24 24\"\n className=\"h-6 w-6\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m9-.75a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 3.75h.008v.008H12v-.008Z\"\n />\n </svg>\n </div>\n <h3 className=\"text-base font-bold text-foreground mb-1\">{title}</h3>\n <p className=\"text-sm text-muted-foreground max-w-sm mb-6 leading-relaxed\">{message}</p>\n {onRetry && (\n <Button size=\"sm\" variant=\"danger\" onClick={onRetry}>\n {retryLabel}\n </Button>\n )}\n </div>\n )\n);\nErrorState.displayName = \"ErrorState\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"circular\" | \"rectangular\";\n animation?: \"shimmer\" | \"pulse\" | \"none\";\n width?: string | number;\n height?: string | number;\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n (\n { className, variant = \"rectangular\", animation = \"shimmer\", width, height, style, ...props },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\n \"bg-muted-foreground/15 dark:bg-muted-foreground/20\",\n animation === \"pulse\" && \"animate-pulse\",\n animation === \"shimmer\" &&\n \"relative overflow-hidden after:absolute after:inset-0 after:-translate-x-full after:animate-[kjshimmer_2s_ease-in-out_infinite_alternate] after:bg-gradient-to-r after:from-transparent after:via-foreground/10 after:to-transparent\",\n variant === \"text\" && \"h-3 w-4/5 rounded-sm my-1.5\",\n variant === \"circular\" && \"rounded-full\",\n variant === \"rectangular\" && \"rounded-kj-md\",\n className\n )}\n style={{\n width,\n height,\n ...style,\n }}\n {...props}\n />\n )\n);\nSkeleton.displayName = \"Skeleton\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface DashboardShellProps extends React.HTMLAttributes<HTMLDivElement> {\n sidebar?: React.ReactNode;\n topbar?: React.ReactNode;\n children: React.ReactNode;\n sidebarWidth?: string;\n contentWidth?: \"default\" | \"wide\" | \"full\";\n stickyTopbar?: boolean;\n mobileSidebar?: React.ReactNode;\n}\n\nexport const DashboardShell = React.forwardRef<HTMLDivElement, DashboardShellProps>(\n (\n {\n className,\n sidebar,\n topbar,\n children,\n sidebarWidth = \"md:w-64\",\n contentWidth = \"default\",\n stickyTopbar = true,\n mobileSidebar,\n ...props\n },\n ref\n ) => {\n const [mobileOpen, setMobileOpen] = React.useState(false);\n const contentWidthClass = {\n default: \"max-w-7xl w-full mx-auto\",\n wide: \"max-w-screen-2xl w-full mx-auto\",\n full: \"max-w-none w-full\",\n }[contentWidth];\n\n return (\n <div\n ref={ref}\n className={cn(\n \"min-h-screen bg-canvas text-foreground flex flex-col md:flex-row\",\n className\n )}\n {...props}\n >\n {/* Sidebar (sticky desk, scrollable inside) */}\n {sidebar && (\n <aside\n className={cn(\n \"border-r border-border bg-surface shrink-0 z-20\",\n mobileSidebar ? \"hidden md:flex\" : \"w-full md:flex\",\n sidebarWidth\n )}\n >\n <div\n className={cn(\n \"sticky top-0 w-full flex flex-col\",\n mobileSidebar ? \"h-screen\" : \"h-auto md:h-screen\"\n )}\n >\n {sidebar}\n </div>\n </aside>\n )}\n\n {/* Mobile Navigation Drawer */}\n {mobileSidebar && mobileOpen && (\n <div\n onClick={() => setMobileOpen(false)}\n className=\"fixed inset-0 z-50 md:hidden bg-[color-mix(in_oklch,#09090b_45%,transparent)] backdrop-blur-[2px] transition-opacity duration-300\"\n >\n <aside\n onClick={(e) => e.stopPropagation()}\n className=\"w-72 h-full bg-surface border-r border-border flex flex-col shadow-kj-lg\"\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border\">\n <span className=\"text-xs font-bold uppercase tracking-wider text-muted-foreground\">\n Navigation\n </span>\n <button\n type=\"button\"\n onClick={() => setMobileOpen(false)}\n className=\"p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n >\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div className=\"flex-1 overflow-y-auto\">{mobileSidebar}</div>\n </aside>\n </div>\n )}\n\n {/* Main Content Area */}\n <div className=\"flex-1 flex flex-col min-w-0\">\n {/* Top Header Navigation */}\n {topbar && (\n <header\n className={cn(\n \"h-14 border-b border-border bg-surface flex items-center px-6 z-10 shrink-0 gap-4\",\n stickyTopbar && \"sticky top-0\"\n )}\n >\n {mobileSidebar && (\n <button\n type=\"button\"\n onClick={() => setMobileOpen(true)}\n className=\"md:hidden p-1.5 -ml-1.5 rounded-kj-sm text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n aria-label=\"Open navigation\"\n >\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n </button>\n )}\n {topbar}\n </header>\n )}\n\n {/* Inner page container */}\n <main className={cn(\"flex-1 p-6 md:p-8\", contentWidthClass)}>{children}</main>\n </div>\n </div>\n );\n }\n);\nDashboardShell.displayName = \"DashboardShell\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SettingsLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n sidebar: React.ReactNode;\n children: React.ReactNode;\n title?: string;\n description?: string;\n}\n\nexport const SettingsLayout = React.forwardRef<HTMLDivElement, SettingsLayoutProps>(\n ({ className, sidebar, children, title, description, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"space-y-6 w-full\", className)} {...props}>\n {/* Header */}\n {(title || description) && (\n <div className=\"border-b border-border pb-4\">\n {title && (\n <h1 className=\"text-2xl font-bold tracking-tight text-foreground\">{title}</h1>\n )}\n {description && <p className=\"text-sm text-muted-foreground mt-1\">{description}</p>}\n </div>\n )}\n\n {/* Layout */}\n <div className=\"flex flex-col lg:flex-row gap-8\">\n {/* Sidebar Tabs / Navigation */}\n <aside className=\"lg:w-1/4 shrink-0\">\n <nav className=\"flex flex-row lg:flex-col gap-1 overflow-x-auto lg:overflow-x-visible pb-2 lg:pb-0\">\n {sidebar}\n </nav>\n </aside>\n\n {/* Content */}\n <div className=\"flex-1 max-w-3xl\">{children}</div>\n </div>\n </div>\n );\n }\n);\nSettingsLayout.displayName = \"SettingsLayout\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Button, buttonVariants } from \"./button\";\n\nexport interface DetailPageLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n description?: string;\n backHref?: string;\n backLabel?: string;\n onBackClick?: () => void;\n actions?: React.ReactNode;\n aside?: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport const DetailPageLayout = React.forwardRef<HTMLDivElement, DetailPageLayoutProps>(\n (\n {\n className,\n title,\n description,\n backHref,\n backLabel = \"Back\",\n onBackClick,\n actions,\n aside,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <div ref={ref} className={cn(\"space-y-6 w-full\", className)} {...props}>\n {/* Header/Top Area */}\n <div className=\"flex flex-col gap-3\">\n {(backHref || onBackClick) && (\n <div>\n {backHref ? (\n <a\n href={backHref}\n className={cn(\n buttonVariants({ variant: \"ghost\", size: \"sm\" }),\n \"-ml-3 h-8 text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5\"\n )}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n className=\"h-4 w-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15.75 19.5 8.25 12l7.5-7.5\"\n />\n </svg>\n {backLabel}\n </a>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-3 h-8 text-muted-foreground hover:text-foreground\"\n onClick={onBackClick}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n className=\"h-4 w-4 mr-1.5\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M15.75 19.5 8.25 12l7.5-7.5\"\n />\n </svg>\n {backLabel}\n </Button>\n )}\n </div>\n )}\n\n <div className=\"flex flex-col md:flex-row md:items-center md:justify-between gap-4\">\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-bold tracking-tight text-foreground\">{title}</h1>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2 shrink-0\">{actions}</div>}\n </div>\n </div>\n\n {/* Content Body Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8 items-start\">\n <div className={cn(\"space-y-6\", aside ? \"lg:col-span-2\" : \"lg:col-span-3\")}>\n {children}\n </div>\n {aside && (\n <aside className=\"space-y-6 lg:col-span-1 bg-surface border border-border rounded-kj-xl p-6 shadow-kj-xs\">\n {aside}\n </aside>\n )}\n </div>\n </div>\n );\n }\n);\nDetailPageLayout.displayName = \"DetailPageLayout\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Input } from \"./input\";\n\nexport interface TableToolbarProps extends React.HTMLAttributes<HTMLDivElement> {\n searchQuery?: string;\n onSearchChange?: (query: string) => void;\n searchPlaceholder?: string;\n actions?: React.ReactNode;\n filters?: React.ReactNode;\n}\n\nexport const TableToolbar = React.forwardRef<HTMLDivElement, TableToolbarProps>(\n (\n {\n className,\n searchQuery,\n onSearchChange,\n searchPlaceholder = \"Search...\",\n actions,\n filters,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col sm:flex-row items-stretch sm:items-center justify-between gap-3 w-full pb-1\",\n className\n )}\n {...props}\n >\n <div className=\"flex flex-1 flex-col sm:flex-row items-stretch sm:items-center gap-2 max-w-xl\">\n {onSearchChange && (\n <Input\n type=\"search\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n className=\"sm:w-64\"\n leadingIcon={\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n className=\"h-4 w-4\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\"\n />\n </svg>\n }\n />\n )}\n {filters && <div className=\"flex items-center gap-2\">{filters}</div>}\n </div>\n {actions && <div className=\"flex items-center gap-2 shrink-0 justify-end\">{actions}</div>}\n </div>\n );\n }\n);\nTableToolbar.displayName = \"TableToolbar\";\n","import { Modal, ModalTitle, ModalDescription, ModalActions } from \"./modal\";\nimport { Button } from \"./button\";\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n description: string;\n confirmLabel?: string;\n cancelLabel?: string;\n tone?: \"danger\" | \"primary\" | \"success\";\n loading?: boolean;\n}\n\nexport function ConfirmDialog({\n open,\n onClose,\n onConfirm,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n tone = \"primary\",\n loading = false,\n}: ConfirmDialogProps) {\n const toneButtonVariant = {\n danger: \"danger\" as const,\n primary: \"primary\" as const,\n success: \"secondary\" as const, // standard secondary in our system is teal (success-aligned)\n }[tone];\n\n return (\n <Modal open={open} onClose={onClose} width={400} showClose={!loading}>\n <ModalTitle>{title}</ModalTitle>\n <ModalDescription>{description}</ModalDescription>\n <ModalActions>\n <Button variant=\"outline\" onClick={onClose} disabled={loading}>\n {cancelLabel}\n </Button>\n <Button variant={toneButtonVariant} onClick={onConfirm} loading={loading}>\n {confirmLabel}\n </Button>\n </ModalActions>\n </Modal>\n );\n}\nConfirmDialog.displayName = \"ConfirmDialog\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface DrawerProps {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: string;\n description?: string;\n width?: string;\n side?: \"right\" | \"left\";\n}\n\nexport function Drawer({\n open,\n onClose,\n children,\n title,\n description,\n width = \"max-w-md\",\n side = \"right\",\n}: DrawerProps) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const lastActiveElement = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!open) {\n if (lastActiveElement.current) {\n lastActiveElement.current.focus();\n lastActiveElement.current = null;\n }\n return;\n }\n\n lastActiveElement.current = document.activeElement as HTMLElement;\n\n const container = containerRef.current;\n if (container) {\n const focusables = container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (focusables.length > 0) {\n setTimeout(() => focusables[0].focus(), 50);\n } else {\n container.focus();\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n\n if (e.key === \"Tab\") {\n const container = containerRef.current;\n if (!container) return;\n\n const focusables = Array.from(\n container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n );\n if (focusables.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === first || document.activeElement === container) {\n last.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === last) {\n first.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, onClose]);\n\n const sideClasses = {\n right: cn(\"right-0 h-full border-l\", open ? \"translate-x-0\" : \"translate-x-full\"),\n left: cn(\"left-0 h-full border-r\", open ? \"translate-x-0\" : \"-translate-x-full\"),\n }[side];\n\n return (\n <div\n onClick={(e) => e.target === e.currentTarget && onClose()}\n className={cn(\n \"fixed inset-0 z-[100] transition-opacity duration-300 backdrop-blur-[2px]\",\n \"bg-[color-mix(in_oklch,#09090b_45%,transparent)]\",\n open ? \"opacity-100 pointer-events-auto\" : \"opacity-0 pointer-events-none\"\n )}\n >\n <div\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={!title ? \"Drawer\" : undefined}\n aria-labelledby={title ? \"drawer-title\" : undefined}\n aria-describedby={description ? \"drawer-description\" : undefined}\n tabIndex={-1}\n className={cn(\n \"fixed top-0 bottom-0 bg-surface border-border flex flex-col w-full shadow-kj-lg transition-transform duration-300 ease-spring outline-none\",\n width,\n sideClasses\n )}\n >\n {/* Header */}\n {(title || description) && (\n <div className=\"flex items-center justify-between p-6 border-b border-border\">\n <div className=\"space-y-1\">\n {title && (\n <h2 id=\"drawer-title\" className=\"text-lg font-bold tracking-tight text-foreground\">\n {title}\n </h2>\n )}\n {description && (\n <p id=\"drawer-description\" className=\"text-xs text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"p-1.5 rounded-kj-sm text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n >\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-6\">{children}</div>\n </div>\n </div>\n );\n}\nDrawer.displayName = \"Drawer\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface CommandPaletteItem {\n id: string;\n title: string;\n subtitle?: string;\n category?: string;\n shortcut?: string[];\n action: () => void;\n icon?: React.ReactNode;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n items: CommandPaletteItem[];\n placeholder?: string;\n}\n\nexport function CommandPalette({\n open,\n onClose,\n items,\n placeholder = \"Type a command or search...\",\n}: CommandPaletteProps) {\n const [search, setSearch] = React.useState(\"\");\n const [activeIndex, setActiveIndex] = React.useState(0);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n\n // Reset state on open/close\n React.useEffect(() => {\n if (open) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setSearch(\"\");\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setActiveIndex(0);\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n }, [open]);\n\n // Filter items\n const filteredItems = React.useMemo(() => {\n if (!search) return items;\n const cleanSearch = search.toLowerCase();\n return items.filter(\n (item) =>\n item.title.toLowerCase().includes(cleanSearch) ||\n item.subtitle?.toLowerCase().includes(cleanSearch) ||\n item.category?.toLowerCase().includes(cleanSearch)\n );\n }, [search, items]);\n\n // Reset active index when filter changes\n React.useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setActiveIndex(0);\n }, [filteredItems]);\n\n // Handle keyboard navigation\n React.useEffect(() => {\n if (!open) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIndex((prev) =>\n filteredItems.length === 0 ? 0 : (prev + 1) % filteredItems.length\n );\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((prev) =>\n filteredItems.length === 0 ? 0 : (prev - 1 + filteredItems.length) % filteredItems.length\n );\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredItems[activeIndex]) {\n filteredItems[activeIndex].action();\n onClose();\n }\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, filteredItems, activeIndex, onClose]);\n\n // Scroll active item into view\n React.useEffect(() => {\n if (listRef.current) {\n const activeEl = listRef.current.querySelector('[aria-selected=\"true\"]') as HTMLElement;\n if (activeEl) {\n activeEl.scrollIntoView({ block: \"nearest\" });\n }\n }\n }, [activeIndex]);\n\n if (!open) return null;\n\n // Group filtered items by category\n const groups: { [key: string]: typeof filteredItems } = {};\n filteredItems.forEach((item) => {\n const cat = item.category || \"General\";\n if (!groups[cat]) groups[cat] = [];\n groups[cat].push(item);\n });\n\n // Flat list index calculation for grouping\n let absoluteItemIndex = 0;\n\n return (\n <div\n onClick={(e) => e.target === e.currentTarget && onClose()}\n className=\"fixed inset-0 z-[100] grid place-items-start justify-center p-6 md:p-24 backdrop-blur-[3px] bg-[color-mix(in_oklch,#09090b_60%,transparent)]\"\n >\n <div\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n className=\"w-[95vw] max-w-lg bg-surface border border-border rounded-kj-xl shadow-kj-lg flex flex-col overflow-hidden max-h-[500px]\"\n >\n {/* Search Input */}\n <div className=\"p-4 border-b border-border flex items-center gap-2\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n className=\"h-5 w-5 text-muted-foreground shrink-0 ml-1\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\"\n />\n </svg>\n <input\n type=\"text\"\n role=\"combobox\"\n aria-expanded={open}\n aria-autocomplete=\"list\"\n aria-controls=\"command-palette-listbox\"\n aria-activedescendant={filteredItems.length > 0 ? `cmd-item-${activeIndex}` : undefined}\n placeholder={placeholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"flex-1 font-sans text-[0.95rem] bg-transparent text-foreground placeholder:text-muted-foreground outline-none border-none focus:ring-0\"\n autoFocus\n />\n </div>\n\n {/* Results List */}\n <div className=\"flex-1 overflow-y-auto p-2 min-h-[150px]\">\n {filteredItems.length === 0 ? (\n <div className=\"py-12 text-center text-sm text-muted-foreground\">\n No results found for \"{search}\"\n </div>\n ) : (\n <div\n ref={listRef}\n id=\"command-palette-listbox\"\n role=\"listbox\"\n aria-label=\"Commands\"\n className=\"space-y-4\"\n >\n {Object.entries(groups).map(([cat, itemsInCat]) => (\n <div\n key={cat}\n role=\"group\"\n aria-labelledby={`cmd-cat-${cat}`}\n className=\"space-y-1\"\n >\n <div\n id={`cmd-cat-${cat}`}\n className=\"px-3 py-1 text-[0.65rem] font-bold uppercase tracking-wider text-muted-foreground\"\n >\n {cat}\n </div>\n {itemsInCat.map((item) => {\n const currentIdx = absoluteItemIndex++;\n const isActive = currentIdx === activeIndex;\n return (\n <div\n key={item.id}\n id={`cmd-item-${currentIdx}`}\n role=\"option\"\n aria-selected={isActive}\n onClick={() => {\n item.action();\n onClose();\n }}\n className={cn(\n \"flex items-center justify-between gap-3 px-3 py-2.5 rounded-kj-md cursor-pointer select-none transition-colors\",\n isActive\n ? \"bg-primary/10 text-foreground\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\"\n )}\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n {item.icon && (\n <span className=\"text-muted-foreground [&_svg]:h-[1.1rem] [&_svg]:w-[1.1rem]\">\n {item.icon}\n </span>\n )}\n <div className=\"min-w-0 flex flex-col\">\n <span\n className={cn(\n \"text-[0.85rem] font-semibold\",\n isActive ? \"text-primary\" : \"text-foreground\"\n )}\n >\n {item.title}\n </span>\n {item.subtitle && (\n <span className=\"text-[0.75rem] text-muted-foreground truncate\">\n {item.subtitle}\n </span>\n )}\n </div>\n </div>\n {item.shortcut && (\n <div className=\"flex items-center gap-1\">\n {item.shortcut.map((sc, scIdx) => (\n <kbd\n key={scIdx}\n className=\"px-1.5 py-0.5 rounded border border-border bg-subtle text-[10px] font-mono leading-none shadow-kj-xs text-muted-foreground\"\n >\n {sc}\n </kbd>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Footer info */}\n <div className=\"px-4 py-2.5 border-t border-border bg-subtle flex items-center justify-between text-[11px] text-muted-foreground font-medium\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex items-center gap-1\">\n <kbd className=\"font-mono text-[9px] px-1 border rounded bg-surface\">↑↓</kbd> Navigate\n </span>\n <span className=\"flex items-center gap-1\">\n <kbd className=\"font-mono text-[9px] px-1 border rounded bg-surface\">Enter</kbd>{\" \"}\n Select\n </span>\n </div>\n <div>\n <kbd className=\"font-mono text-[9px] px-1 border rounded bg-surface\">Esc</kbd> Close\n </div>\n </div>\n </div>\n </div>\n );\n}\nCommandPalette.displayName = \"CommandPalette\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface SidebarNavItem {\n id: string;\n label: string;\n href?: string;\n onClick?: () => void;\n active?: boolean;\n icon?: React.ReactNode;\n badge?: React.ReactNode;\n}\n\nexport interface SidebarNavGroup {\n title?: string;\n items: SidebarNavItem[];\n}\n\nexport interface SidebarNavProps extends React.HTMLAttributes<HTMLDivElement> {\n groups: SidebarNavGroup[];\n currentHref?: string;\n}\n\nexport function SidebarNav({ className, groups, currentHref, ...props }: SidebarNavProps) {\n return (\n <div className={cn(\"space-y-6 py-4 px-3 w-full\", className)} {...props}>\n {groups.map((group, groupIdx) => (\n <div key={groupIdx} className=\"space-y-1.5\">\n {group.title && (\n <h4 className=\"px-3 text-[10px] font-bold uppercase tracking-widest text-muted-foreground/85\">\n {group.title}\n </h4>\n )}\n <div className=\"space-y-0.5\">\n {group.items.map((item) => {\n const isActive =\n item.active || (item.href && currentHref && currentHref === item.href);\n const content = (\n <>\n <span className=\"flex items-center gap-2.5 min-w-0\">\n {item.icon && (\n <span\n className={cn(\n \"[&_svg]:h-[1.1rem] [&_svg]:w-[1.1rem] shrink-0\",\n isActive\n ? \"text-primary\"\n : \"text-muted-foreground group-hover:text-foreground\"\n )}\n >\n {item.icon}\n </span>\n )}\n <span className=\"truncate\">{item.label}</span>\n </span>\n {item.badge && (\n <span className=\"shrink-0 flex items-center justify-center\">{item.badge}</span>\n )}\n </>\n );\n\n const itemClass = cn(\n \"group flex items-center justify-between gap-3 px-3 py-2 rounded-kj-md text-[0.85rem] font-semibold select-none cursor-pointer transition-all duration-150\",\n isActive\n ? \"bg-primary/10 text-primary border-l-2 border-primary rounded-l-none pl-2.5\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground border-l-2 border-transparent\"\n );\n\n if (item.href) {\n return (\n <a key={item.id} href={item.href} className={itemClass}>\n {content}\n </a>\n );\n }\n\n return (\n <button key={item.id} type=\"button\" onClick={item.onClick} className={itemClass}>\n {content}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n}\nSidebarNav.displayName = \"SidebarNav\";\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst fabVariants = cva(\n [\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap select-none\",\n \"font-sans font-semibold leading-none\",\n \"border border-transparent rounded-full cursor-pointer shadow-lg\",\n \"transition-[background-color,color,border-color,box-shadow,transform] duration-150\",\n \"active:translate-y-px active:shadow-md\",\n \"focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/45\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n ],\n {\n variants: {\n variant: {\n primary: \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n outline:\n \"bg-transparent text-foreground border-border hover:bg-muted hover:border-muted-foreground\",\n danger: \"bg-danger text-white hover:brightness-95\",\n },\n size: {\n sm: \"h-10 w-10 p-0 text-sm\",\n md: \"h-14 w-14 p-0 text-base\",\n lg: \"h-16 w-16 p-0 text-lg\",\n },\n position: {\n \"bottom-right\": \"fixed bottom-6 right-6 z-50\",\n \"bottom-left\": \"fixed bottom-6 left-6 z-50\",\n \"bottom-center\": \"fixed bottom-6 left-1/2 -translate-x-1/2 z-50\",\n none: \"relative\",\n },\n },\n defaultVariants: { variant: \"primary\", size: \"md\", position: \"bottom-right\" },\n }\n);\n\nexport interface FabProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\">,\n VariantProps<typeof fabVariants> {\n /** Icon rendered inside the button. */\n icon: React.ReactNode;\n\n /** Text label for accessibility (aria-label). */\n label: string;\n\n /** If true, the FAB will only be visible on mobile screens (< 768px). */\n mobileOnly?: boolean;\n\n /** Shows a spinner and disables interaction. */\n loading?: boolean;\n}\n\nexport const Fab = React.forwardRef<HTMLButtonElement, FabProps>(\n (\n { className, variant, size, position, mobileOnly, icon, label, loading, disabled, ...props },\n ref\n ) => {\n return (\n <button\n ref={ref}\n className={cn(\n fabVariants({ variant, size, position }),\n mobileOnly && \"md:hidden\",\n className\n )}\n {...props}\n disabled={disabled || loading}\n aria-label={label}\n aria-busy={loading || undefined}\n >\n {loading ? (\n <span\n aria-hidden\n className=\"h-[1.2em] w-[1.2em] rounded-full border-2 border-current border-t-transparent animate-spin\"\n />\n ) : (\n <span className=\"[&_svg]:h-[1.35em] [&_svg]:w-[1.35em] flex items-center justify-center\">\n {icon}\n </span>\n )}\n </button>\n );\n }\n);\nFab.displayName = \"Fab\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface BottomSheetProps {\n open: boolean;\n onClose: () => void;\n children: React.ReactNode;\n maxWidth?: \"max-w-sm\" | \"max-w-md\" | \"max-w-lg\" | \"max-w-xl\" | \"max-w-2xl\";\n className?: string;\n showClose?: boolean;\n}\n\nconst BottomSheetContext = React.createContext<{ titleId: string; descId: string } | null>(null);\n\nexport function BottomSheet({\n open,\n onClose,\n children,\n maxWidth = \"max-w-lg\",\n className,\n showClose = true,\n}: BottomSheetProps) {\n const titleId = React.useId();\n const descId = React.useId();\n const containerRef = React.useRef<HTMLDivElement>(null);\n const lastActiveElement = React.useRef<HTMLElement | null>(null);\n const [mounted, setMounted] = React.useState(open);\n\n React.useEffect(() => {\n if (open) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setMounted(true);\n } else {\n const timer = setTimeout(() => setMounted(false), 200);\n return () => clearTimeout(timer);\n }\n }, [open]);\n\n React.useEffect(() => {\n if (!open) return;\n\n lastActiveElement.current = document.activeElement as HTMLElement;\n\n const container = containerRef.current;\n if (container) {\n const focusables = container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n if (focusables.length > 0) {\n focusables[0].focus();\n setTimeout(() => {\n if (container.contains(document.activeElement)) return;\n focusables[0].focus();\n }, 50);\n } else {\n container.focus();\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n return;\n }\n\n if (e.key === \"Tab\") {\n const container = containerRef.current;\n if (!container) return;\n\n const focusables = Array.from(\n container.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n );\n if (focusables.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n\n if (!container.contains(document.activeElement)) {\n e.preventDefault();\n if (e.shiftKey) {\n last.focus();\n } else {\n first.focus();\n }\n return;\n }\n\n if (e.shiftKey) {\n if (document.activeElement === first || document.activeElement === container) {\n last.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === last) {\n first.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n if (lastActiveElement.current) {\n lastActiveElement.current.focus();\n lastActiveElement.current = null;\n }\n };\n }, [open, onClose]);\n\n if (!open && !mounted) return null;\n\n return (\n <BottomSheetContext.Provider value={{ titleId, descId }}>\n {/* Backdrop overlay */}\n <div\n role=\"presentation\"\n onClick={(e) => e.target === e.currentTarget && onClose()}\n className={cn(\n \"fixed inset-0 z-[100] grid items-end sm:place-items-center p-0 sm:p-6 backdrop-blur-[3px] transition-all duration-200\",\n \"bg-[color-mix(in_oklch,#09090b_55%,transparent)]\",\n open\n ? \"opacity-100 pointer-events-auto visible\"\n : \"opacity-0 pointer-events-none invisible\"\n )}\n >\n {/* Panel wrapper */}\n <div\n ref={containerRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descId}\n tabIndex={-1}\n className={cn(\n \"relative w-full bg-surface border-t sm:border border-border shadow-kj-lg transition-all duration-200 outline-none\",\n \"rounded-t-kj-2xl sm:rounded-kj-2xl flex flex-col max-h-[85vh] sm:max-h-[90vh]\",\n // Mobile sliding & Desktop scale/opacity transitions\n open\n ? \"translate-y-0 sm:scale-100 sm:opacity-100\"\n : \"translate-y-full sm:scale-95 sm:opacity-0\",\n // Mobile styling vs Desktop styling\n \"bottom-0 sm:bottom-auto\",\n maxWidth,\n className\n )}\n >\n {/* Mobile Drag Handle */}\n <div className=\"flex justify-center py-2 sm:hidden cursor-grab\">\n <div className=\"w-12 h-1.5 rounded-full bg-muted-foreground/20\" />\n </div>\n\n {/* Close button (rendered on top right for desktop modal look) */}\n {showClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"absolute top-4 right-4 p-1.5 rounded-kj-sm text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer z-10\"\n >\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n\n {children}\n </div>\n </div>\n </BottomSheetContext.Provider>\n );\n}\n\nexport function BottomSheetHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div className={cn(\"p-6 flex flex-col gap-1.5 border-b border-border\", className)} {...props} />\n );\n}\n\nexport function BottomSheetTitle({\n className,\n id,\n children,\n ...props\n}: React.HTMLAttributes<HTMLHeadingElement>) {\n const ctx = React.useContext(BottomSheetContext);\n return (\n <h2\n id={id ?? ctx?.titleId}\n className={cn(\"m-0 text-[1.15rem] font-bold tracking-[-0.01em]\", className)}\n {...props}\n >\n {children}\n </h2>\n );\n}\n\nexport function BottomSheetDescription({\n className,\n id,\n ...props\n}: React.HTMLAttributes<HTMLParagraphElement>) {\n const ctx = React.useContext(BottomSheetContext);\n return (\n <p\n id={id ?? ctx?.descId}\n className={cn(\"m-0 text-[0.9rem] text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport function BottomSheetContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={cn(\"p-6 overflow-y-auto flex-1\", className)} {...props} />;\n}\n\nexport function BottomSheetFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"p-6 border-t border-border flex gap-2.5 justify-end mt-auto\", className)}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../lib/cn\";\n\nconst kbdVariants = cva(\n \"inline-flex items-center justify-center font-mono font-medium text-muted-foreground bg-muted border border-border border-b-2 rounded-kj-sm select-none\",\n {\n variants: {\n size: {\n sm: \"h-5 min-w-5 px-1 text-[0.68rem]\",\n md: \"h-6 min-w-6 px-1.5 text-[0.78rem]\",\n },\n },\n defaultVariants: { size: \"sm\" },\n }\n);\n\nexport interface KbdProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof kbdVariants> {\n /** Render one <kbd> chip per key (separated by a small gap); children are ignored. */\n keys?: string[];\n}\n\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(\n ({ className, size, keys, children, ...props }, ref) => {\n if (keys && keys.length > 0) {\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n >\n {keys.map((k, i) => (\n <kbd key={i} className={kbdVariants({ size })}>\n {k}\n </kbd>\n ))}\n </span>\n );\n }\n return (\n <kbd ref={ref} className={cn(kbdVariants({ size }), className)} {...props}>\n {children}\n </kbd>\n );\n }\n);\nKbd.displayName = \"Kbd\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The snippet text to display. */\n code: string;\n /** Language label shown in the header when no filename is set (e.g. \"tsx\"). */\n language?: string;\n /** Optional filename label shown in the header; takes precedence over language. */\n filename?: string;\n /** Show the copy-to-clipboard button. */\n copyable?: boolean;\n /** Max height in pixels; content scrolls vertically beyond it. */\n maxHeight?: number;\n}\n\nexport const CodeBlock = React.forwardRef<HTMLDivElement, CodeBlockProps>(\n ({ className, code, language, filename, copyable = true, maxHeight, ...props }, ref) => {\n const [copied, setCopied] = React.useState(false);\n const canCopy = copyable && typeof navigator !== \"undefined\" && !!navigator.clipboard;\n\n const onCopy = () => {\n navigator.clipboard.writeText(code).then(\n () => {\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n },\n () => {\n /* clipboard rejected — keep \"Copy\" label */\n }\n );\n };\n\n const label = filename ?? language;\n\n return (\n <div\n ref={ref}\n className={cn(\"rounded-kj-md border border-border bg-muted/50 overflow-hidden\", className)}\n {...props}\n >\n {(label || canCopy) && (\n <div className=\"flex items-center justify-between gap-2 px-3.5 py-2 border-b border-border\">\n <span className=\"text-[0.72rem] font-mono text-muted-foreground\">{label}</span>\n {canCopy && (\n <button\n type=\"button\"\n onClick={onCopy}\n className=\"text-[0.72rem] font-medium text-muted-foreground hover:text-foreground transition-colors cursor-pointer bg-transparent border-0 p-0\"\n >\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n )}\n </div>\n )}\n <pre\n className=\"m-0 px-3.5 py-3 overflow-x-auto text-[0.8rem] leading-relaxed font-mono text-foreground\"\n style={maxHeight ? { maxHeight, overflowY: \"auto\" } : undefined}\n >\n <code>{code}</code>\n </pre>\n </div>\n );\n }\n);\nCodeBlock.displayName = \"CodeBlock\";\n","import { cn } from \"../lib/cn\";\n\nexport interface SeparatorProps {\n orientation?: \"horizontal\" | \"vertical\";\n /** Purely visual by default (role=\"none\", hidden from a11y tree). Set false for a semantically meaningful divider. */\n decorative?: boolean;\n className?: string;\n}\n\n/** Thin layout divider. Decorative by default; pass decorative={false} for a semantic role=\"separator\". */\nexport function Separator({\n orientation = \"horizontal\",\n decorative = true,\n className,\n}: SeparatorProps) {\n const semanticProps = decorative\n ? { role: \"none\" as const, \"aria-hidden\": true as const }\n : { role: \"separator\" as const, \"aria-orientation\": orientation };\n\n return (\n <div\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"w-px h-full\",\n className\n )}\n {...semanticProps}\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\ninterface PopoverCtx {\n open: boolean;\n setOpen: (v: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n}\nconst PopoverContext = React.createContext<PopoverCtx | null>(null);\n\nfunction usePopoverContext(part: string): PopoverCtx {\n const ctx = React.useContext(PopoverContext);\n if (!ctx) throw new Error(`${part} must be used inside <Popover>`);\n return ctx;\n}\n\nexport interface PopoverProps {\n /** Trigger and content elements. */\n children: React.ReactNode;\n /** Additional classes for the positioning wrapper. */\n className?: string;\n /** Controlled open state. Omit for uncontrolled behavior. */\n open?: boolean;\n /** Called whenever the open state should change. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function Popover({ children, className, open: openProp, onOpenChange }: PopoverProps) {\n const [openState, setOpenState] = React.useState(false);\n const controlled = openProp !== undefined;\n const open = controlled ? openProp : openState;\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n const ref = React.useRef<HTMLDivElement>(null);\n\n const setOpen = React.useCallback(\n (v: boolean) => {\n if (!controlled) setOpenState(v);\n onOpenChange?.(v);\n },\n [controlled, onOpenChange]\n );\n\n React.useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n const onEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n document.addEventListener(\"keydown\", onEsc);\n return () => {\n document.removeEventListener(\"mousedown\", onDoc);\n document.removeEventListener(\"keydown\", onEsc);\n };\n }, [open, setOpen]);\n\n return (\n <PopoverContext.Provider value={{ open, setOpen, triggerRef }}>\n <div ref={ref} className={cn(\"relative inline-block\", className)}>\n {children}\n </div>\n </PopoverContext.Provider>\n );\n}\n\nexport const PopoverTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean }\n>(({ onClick, asChild, ...props }, ref) => {\n const ctx = usePopoverContext(\"PopoverTrigger\");\n const setRefs = (node: HTMLButtonElement | null) => {\n // eslint-disable-next-line react-hooks/immutability\n ctx.triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n };\n if (asChild) {\n const child = React.Children.only(props.children) as React.ReactElement<\n React.ComponentPropsWithRef<\"button\">\n >;\n return React.cloneElement(child, {\n ref: setRefs,\n ...props,\n ...child.props,\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n child.props.onClick?.(e);\n },\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": ctx.open,\n });\n }\n return (\n <button\n /* eslint-disable-next-line react-hooks/immutability */\n ref={setRefs}\n {...props}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n onClick={(e) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n }}\n />\n );\n});\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\nconst sideAlignClasses: Record<string, string> = {\n \"bottom-start\": \"top-[calc(100%+6px)] left-0\",\n \"bottom-center\": \"top-[calc(100%+6px)] left-1/2 -translate-x-1/2\",\n \"bottom-end\": \"top-[calc(100%+6px)] right-0\",\n \"top-start\": \"bottom-[calc(100%+6px)] left-0\",\n \"top-center\": \"bottom-[calc(100%+6px)] left-1/2 -translate-x-1/2\",\n \"top-end\": \"bottom-[calc(100%+6px)] right-0\",\n \"left-start\": \"right-[calc(100%+6px)] top-0\",\n \"left-center\": \"right-[calc(100%+6px)] top-1/2 -translate-y-1/2\",\n \"left-end\": \"right-[calc(100%+6px)] bottom-0\",\n \"right-start\": \"left-[calc(100%+6px)] top-0\",\n \"right-center\": \"left-[calc(100%+6px)] top-1/2 -translate-y-1/2\",\n \"right-end\": \"left-[calc(100%+6px)] bottom-0\",\n};\n\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Which side of the trigger the panel opens on. */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Alignment along the chosen side. */\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport function PopoverContent({\n className,\n side = \"bottom\",\n align = \"center\",\n children,\n ...props\n}: PopoverContentProps) {\n const ctx = usePopoverContext(\"PopoverContent\");\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (ctx.open) ref.current?.focus();\n }, [ctx.open]);\n\n if (!ctx.open) return null;\n return (\n <div\n ref={ref}\n role=\"dialog\"\n tabIndex={-1}\n className={cn(\n \"absolute z-40 min-w-[200px] p-4 rounded-kj-md bg-surface border border-border shadow-kj-lg outline-none\",\n \"animate-[kjpop_.12s_ease]\",\n sideAlignClasses[`${side}-${align}`],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ninterface ComboboxBaseProps {\n options: ComboboxOption[];\n /** Trigger text when nothing is selected. Default \"Select…\". */\n placeholder?: string;\n /** Search input placeholder inside the popup. Default \"Search…\". */\n searchPlaceholder?: string;\n /** Shown when the filter matches no options. Default \"No results\". */\n emptyMessage?: string;\n disabled?: boolean;\n /** Visual error state (red border + aria-invalid on the trigger). */\n error?: boolean;\n /** Marks the trigger aria-required (buttons have no native `required` attribute). */\n required?: boolean;\n className?: string;\n id?: string;\n name?: string;\n \"aria-describedby\"?: string;\n}\n\nexport type ComboboxProps =\n | (ComboboxBaseProps & {\n multiple?: false;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n })\n | (ComboboxBaseProps & {\n multiple: true;\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n });\n\n// Internal selection is always an array; single mode holds at most one entry.\nfunction toArray(v: string | string[] | undefined): string[] {\n if (v == null) return [];\n return Array.isArray(v) ? v : [v];\n}\n\nexport const Combobox = React.forwardRef<HTMLButtonElement, ComboboxProps>(\n function Combobox(props, ref) {\n const {\n options,\n placeholder = \"Select…\",\n searchPlaceholder = \"Search…\",\n emptyMessage = \"No results\",\n disabled = false,\n error = false,\n required = false,\n className,\n id,\n name,\n \"aria-describedby\": describedBy,\n } = props;\n const multiple = props.multiple ?? false;\n\n const reactId = React.useId();\n const baseId = id ?? reactId;\n const listId = `${baseId}-listbox`;\n const optionId = (i: number) => `${baseId}-opt-${i}`;\n\n const controlled = props.value !== undefined;\n const [internal, setInternal] = React.useState<string[]>(() => toArray(props.defaultValue));\n const selected = controlled ? toArray(props.value) : internal;\n\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const [activeIndex, setActiveIndex] = React.useState(0);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n\n const setTriggerRef = (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n };\n\n const filtered = React.useMemo(() => {\n const q = search.trim().toLowerCase();\n return q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options;\n }, [search, options]);\n\n const firstEnabled = React.useCallback(() => {\n const i = filtered.findIndex((o) => !o.disabled);\n return i === -1 ? 0 : i;\n }, [filtered]);\n\n const labelFor = (v: string) => options.find((o) => o.value === v)?.label ?? v;\n\n const emit = (next: string[]) => {\n if (!controlled) setInternal(next);\n if (props.multiple) {\n props.onChange?.(next);\n } else {\n props.onChange?.(next[0] ?? \"\");\n }\n };\n\n const closePopup = React.useCallback(() => {\n setOpen(false);\n setSearch(\"\");\n }, []);\n\n const openPopup = () => {\n if (!disabled) setOpen(true);\n };\n\n const handleSelect = (opt: ComboboxOption) => {\n if (opt.disabled) return;\n if (multiple) {\n const next = selected.includes(opt.value)\n ? selected.filter((v) => v !== opt.value)\n : [...selected, opt.value];\n emit(next);\n inputRef.current?.focus();\n } else {\n emit([opt.value]);\n closePopup();\n triggerRef.current?.focus();\n }\n };\n\n const removeValue = (value: string) => {\n emit(selected.filter((v) => v !== value));\n };\n\n // Reset the active option to the first enabled row on open / filter change.\n React.useEffect(() => {\n if (open) setActiveIndex(firstEnabled());\n }, [open, firstEnabled]);\n\n // Autofocus the search input when the popup opens.\n React.useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n\n // Outside-click dismissal.\n React.useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) closePopup();\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, closePopup]);\n\n // Keep the active option scrolled into view.\n React.useEffect(() => {\n const el = listRef.current?.querySelector('[data-active=\"true\"]') as HTMLElement | null;\n el?.scrollIntoView({ block: \"nearest\" });\n }, [activeIndex]);\n\n const moveActive = (dir: 1 | -1) => {\n if (filtered.length === 0) return;\n setActiveIndex((prev) => {\n let i = prev;\n for (let step = 0; step < filtered.length; step++) {\n i = (i + dir + filtered.length) % filtered.length;\n if (!filtered[i]?.disabled) return i;\n }\n return prev;\n });\n };\n\n const onInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n moveActive(1);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveActive(-1);\n break;\n case \"Home\":\n e.preventDefault();\n setActiveIndex(firstEnabled());\n break;\n case \"End\":\n e.preventDefault();\n for (let i = filtered.length - 1; i >= 0; i--) {\n if (!filtered[i].disabled) {\n setActiveIndex(i);\n break;\n }\n }\n break;\n case \"Enter\":\n e.preventDefault();\n if (filtered[activeIndex]) handleSelect(filtered[activeIndex]);\n break;\n case \"Escape\":\n e.preventDefault();\n closePopup();\n triggerRef.current?.focus();\n break;\n case \"Backspace\":\n if (multiple && search === \"\" && selected.length > 0) {\n removeValue(selected[selected.length - 1]);\n }\n break;\n }\n };\n\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPopup();\n }\n };\n\n const showPlaceholder = multiple ? selected.length === 0 : !selected[0];\n\n return (\n <div ref={containerRef} className={cn(\"relative w-full\", className)}>\n <div\n className={cn(\n \"relative flex w-full items-center gap-1.5 flex-wrap border rounded-kj-md bg-surface\",\n \"pl-[0.85rem] pr-9 py-[calc(0.45rem*var(--kj-density,1))] min-h-[calc(2.5rem*var(--kj-density,1))]\",\n \"transition-[border-color,box-shadow] duration-150\",\n \"focus-within:outline-none focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/30\",\n disabled && \"bg-muted cursor-not-allowed\",\n error ? \"border-danger\" : \"border-input\"\n )}\n >\n {multiple &&\n selected.map((value) => (\n <span\n key={value}\n className=\"inline-flex items-center gap-1 rounded-kj-sm bg-primary/10 text-primary text-xs font-medium pl-2 pr-1 py-0.5\"\n >\n {labelFor(value)}\n <button\n type=\"button\"\n aria-label={`Remove ${labelFor(value)}`}\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n removeValue(value);\n }}\n className=\"rounded-full p-0.5 leading-none hover:bg-primary/20\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-3 w-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </button>\n </span>\n ))}\n <button\n ref={setTriggerRef}\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open && filtered.length > 0 ? listId : undefined}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n aria-describedby={describedBy}\n onClick={() => (open ? closePopup() : openPopup())}\n onKeyDown={onTriggerKeyDown}\n className={cn(\n \"flex-1 min-w-[60px] text-left bg-transparent border-none outline-none cursor-pointer text-sm disabled:cursor-not-allowed\",\n showPlaceholder && \"text-muted-foreground\"\n )}\n >\n {multiple\n ? selected.length === 0\n ? placeholder\n : \"\"\n : (selected[0] ? labelFor(selected[0]) : \"\") || placeholder}\n </button>\n {name &&\n multiple &&\n selected.map((v) => <input key={v} type=\"hidden\" name={name} value={v} />)}\n {name && !multiple && <input type=\"hidden\" name={name} value={selected[0] ?? \"\"} />}\n <span className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </span>\n </div>\n\n {open && (\n <div className=\"absolute z-40 top-[calc(100%+6px)] left-0 w-full min-w-[12rem] bg-surface border border-border rounded-kj-md shadow-kj-lg overflow-hidden animate-[kjpop_.12s_ease]\">\n <div className=\"p-2 border-b border-border\">\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={filtered.length > 0 ? listId : undefined}\n aria-activedescendant={filtered[activeIndex] ? optionId(activeIndex) : undefined}\n aria-label={searchPlaceholder}\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onKeyDown={onInputKeyDown}\n className=\"w-full bg-transparent text-sm text-foreground placeholder:text-muted-foreground outline-none px-2 py-1\"\n />\n </div>\n {filtered.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">{emptyMessage}</div>\n ) : (\n <div\n ref={listRef}\n id={listId}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-label={placeholder}\n className=\"max-h-60 overflow-y-auto p-1\"\n >\n {filtered.map((opt, i) => {\n const isSelected = selected.includes(opt.value);\n const isActive = i === activeIndex;\n return (\n <div\n key={opt.value}\n id={optionId(i)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled || undefined}\n data-active={isActive || undefined}\n onMouseEnter={() => !opt.disabled && setActiveIndex(i)}\n onClick={() => handleSelect(opt)}\n className={cn(\n \"flex items-center justify-between gap-2 px-3 py-2 rounded-kj-sm text-sm cursor-pointer select-none\",\n opt.disabled && \"text-muted-foreground opacity-50 cursor-not-allowed\",\n !opt.disabled && isActive && \"bg-primary/10 text-primary\",\n !opt.disabled && !isActive && \"text-foreground hover:bg-muted\"\n )}\n >\n <span>{opt.label}</span>\n {isSelected && (\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4 text-primary shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m5 12 5 5L20 7\" />\n </svg>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n);\nCombobox.displayName = \"Combobox\";\n\n// Distributive omit preserves the discriminated union (plain Omit<Union, K>\n// collapses it to the shared keys and drops the `multiple` narrowing).\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n\nexport type ComboboxFieldProps = DistributiveOmit<ComboboxProps, \"error\"> & {\n label: string;\n hint?: string;\n error?: string;\n required?: boolean;\n};\n\nimport { FormField } from \"./form-field\";\n\nexport const ComboboxField = React.forwardRef<HTMLButtonElement, ComboboxFieldProps>(\n function ComboboxField({ label, hint, error, required, className, ...props }, ref) {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <Combobox ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nComboboxField.displayName = \"ComboboxField\";\n","export function startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function addDays(d: Date, n: number): Date {\n const r = new Date(d);\n r.setDate(r.getDate() + n);\n return r;\n}\n\nexport function addMonths(d: Date, n: number): Date {\n const r = new Date(d);\n r.setMonth(r.getMonth() + n);\n return r;\n}\n\n// setMonth/setFullYear roll over into the next month when the target month is\n// shorter than the current day-of-month (e.g. Jan 31 + 1 month -> Mar 3, not\n// Feb 28). Clamp the day to the target month's actual length to avoid that.\nfunction clampToMonth(year: number, month: number, day: number): Date {\n const daysInTarget = new Date(year, month + 1, 0).getDate();\n return new Date(year, month, Math.min(day, daysInTarget));\n}\n\nexport function addMonthsClamped(d: Date, n: number): Date {\n return clampToMonth(d.getFullYear(), d.getMonth() + n, d.getDate());\n}\n\nexport function addYearsClamped(d: Date, n: number): Date {\n return clampToMonth(d.getFullYear() + n, d.getMonth(), d.getDate());\n}\n\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\nexport function startOfWeek(d: Date): Date {\n const r = startOfDay(d);\n r.setDate(r.getDate() - r.getDay());\n return r;\n}\n\nexport function buildGridDays(viewMonth: Date): Date[] {\n const gridStart = startOfWeek(startOfMonth(viewMonth));\n return Array.from({ length: 42 }, (_, i) => addDays(gridStart, i));\n}\n\nexport function dateKey(d: Date): string {\n return `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n}\n\n// Local YYYY-MM-DD, not Date#toISOString() — that converts to UTC first and\n// can shift the calendar date across a timezone boundary.\nexport function toISODateString(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n}\n\nexport const monthLabelFormat = new Intl.DateTimeFormat(undefined, {\n month: \"long\",\n year: \"numeric\",\n});\nexport const fullDateFormat = new Intl.DateTimeFormat(undefined, { dateStyle: \"full\" });\nconst weekdayShortFormat = new Intl.DateTimeFormat(undefined, { weekday: \"short\" });\nconst weekdayLongFormat = new Intl.DateTimeFormat(undefined, { weekday: \"long\" });\n\nexport const weekdayLabels = Array.from({ length: 7 }, (_, i) => {\n const d = addDays(startOfWeek(new Date()), i);\n return { key: i, short: weekdayShortFormat.format(d), long: weekdayLongFormat.format(d) };\n});\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n startOfDay,\n isSameDay,\n addDays,\n startOfWeek,\n buildGridDays,\n dateKey,\n addMonthsClamped,\n addYearsClamped,\n fullDateFormat,\n monthLabelFormat,\n weekdayLabels,\n} from \"./calendar-internals\";\n\nexport interface CalendarCellState {\n selected?: boolean;\n rangeStart?: boolean;\n rangeEnd?: boolean;\n inRange?: boolean;\n today?: boolean;\n}\n\nexport interface CalendarGridProps {\n viewMonth: Date;\n isDayDisabled: (d: Date) => boolean;\n cellState: (d: Date) => CalendarCellState;\n onSelectDay: (d: Date) => void;\n /** Fired on hover and on keyboard focus-move within this grid (not on click). */\n onFocusDay?: (d: Date) => void;\n /** Seeds the roving-tabindex focus once, on mount. Not re-synced on later prop changes (matches Calendar's existing behavior). */\n initialFocusDate: Date;\n className?: string;\n}\n\nexport const CalendarGrid = React.forwardRef<HTMLDivElement, CalendarGridProps>(\n function CalendarGrid(\n { viewMonth, isDayDisabled, cellState, onSelectDay, onFocusDay, initialFocusDate, className },\n ref\n ) {\n const gridDays = React.useMemo(() => buildGridDays(viewMonth), [viewMonth]);\n const inViewMonth = (d: Date) =>\n d.getMonth() === viewMonth.getMonth() && d.getFullYear() === viewMonth.getFullYear();\n\n const [focusedDate, setFocusedDate] = React.useState<Date>(() => startOfDay(initialFocusDate));\n const pendingFocusRef = React.useRef(false);\n const gridRef = React.useRef<HTMLDivElement>(null);\n\n const rovingTarget =\n inViewMonth(focusedDate) && !isDayDisabled(focusedDate)\n ? focusedDate\n : (gridDays.find((d) => inViewMonth(d) && !isDayDisabled(d)) ??\n gridDays.find((d) => inViewMonth(d)) ??\n gridDays[0]);\n\n const moveFocusTo = (next: Date, viaKeyboard: boolean) => {\n pendingFocusRef.current = viaKeyboard;\n setFocusedDate(next);\n onFocusDay?.(next);\n };\n\n React.useEffect(() => {\n if (!pendingFocusRef.current) return;\n pendingFocusRef.current = false;\n const el = gridRef.current?.querySelector(\n `[data-date=\"${dateKey(rovingTarget)}\"]`\n ) as HTMLElement | null;\n el?.focus();\n }, [rovingTarget]);\n\n const step = (from: Date, delta: number): Date => {\n let next = addDays(from, delta);\n let guard = 0;\n while (isDayDisabled(next) && guard < 1000) {\n next = addDays(next, delta);\n guard++;\n }\n return isDayDisabled(next) ? from : next;\n };\n\n const selectDay = (d: Date) => {\n if (isDayDisabled(d)) return;\n moveFocusTo(d, false);\n onSelectDay(d);\n };\n\n const onGridKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case \"ArrowRight\":\n e.preventDefault();\n moveFocusTo(step(rovingTarget, 1), true);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n moveFocusTo(step(rovingTarget, -1), true);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n moveFocusTo(step(rovingTarget, 7), true);\n break;\n case \"ArrowUp\":\n e.preventDefault();\n moveFocusTo(step(rovingTarget, -7), true);\n break;\n case \"Home\": {\n e.preventDefault();\n const target = startOfWeek(rovingTarget);\n moveFocusTo(isDayDisabled(target) ? step(target, 1) : target, true);\n break;\n }\n case \"End\": {\n e.preventDefault();\n const target = addDays(startOfWeek(rovingTarget), 6);\n moveFocusTo(isDayDisabled(target) ? step(target, -1) : target, true);\n break;\n }\n case \"PageUp\": {\n e.preventDefault();\n const target = e.shiftKey\n ? addYearsClamped(rovingTarget, -1)\n : addMonthsClamped(rovingTarget, -1);\n moveFocusTo(isDayDisabled(target) ? step(target, -1) : target, true);\n break;\n }\n case \"PageDown\": {\n e.preventDefault();\n const target = e.shiftKey\n ? addYearsClamped(rovingTarget, 1)\n : addMonthsClamped(rovingTarget, 1);\n moveFocusTo(isDayDisabled(target) ? step(target, 1) : target, true);\n break;\n }\n case \"Enter\":\n case \" \":\n e.preventDefault();\n selectDay(rovingTarget);\n break;\n }\n };\n\n return (\n <div ref={ref} className={cn(className)}>\n <div\n ref={gridRef}\n role=\"grid\"\n aria-label={monthLabelFormat.format(viewMonth)}\n onKeyDown={onGridKeyDown}\n >\n <div role=\"row\" className=\"grid grid-cols-7\">\n {weekdayLabels.map((w) => (\n <div\n key={w.key}\n role=\"columnheader\"\n aria-label={w.long}\n className=\"h-8 flex items-center justify-center text-xs font-medium text-muted-foreground\"\n >\n {w.short}\n </div>\n ))}\n </div>\n {Array.from({ length: 6 }, (_, week) => (\n <div role=\"row\" key={week} className=\"grid grid-cols-7\">\n {gridDays.slice(week * 7, week * 7 + 7).map((day) => {\n if (!inViewMonth(day)) {\n return (\n <div key={dateKey(day)} role=\"gridcell\" aria-hidden=\"true\" className=\"h-9\" />\n );\n }\n const disabled = isDayDisabled(day);\n const state = cellState(day);\n const isRoving = isSameDay(day, rovingTarget);\n const isEndpoint = !!(state.selected || state.rangeStart || state.rangeEnd);\n return (\n <button\n key={dateKey(day)}\n type=\"button\"\n role=\"gridcell\"\n data-date={dateKey(day)}\n tabIndex={isRoving ? 0 : -1}\n aria-selected={isEndpoint}\n aria-disabled={disabled || undefined}\n aria-label={fullDateFormat.format(day)}\n onMouseEnter={() => onFocusDay?.(day)}\n onClick={() => selectDay(day)}\n className={cn(\n \"h-9 w-9 mx-auto flex items-center justify-center text-sm\",\n state.inRange && !isEndpoint ? \"rounded-none\" : \"rounded-full\",\n \"focus:outline-none focus:ring-[3px] focus:ring-ring/30\",\n disabled && \"text-muted-foreground opacity-40 cursor-not-allowed\",\n !disabled && isEndpoint && \"bg-primary text-primary-foreground\",\n !disabled && state.inRange && !isEndpoint && \"bg-primary/15 text-foreground\",\n !disabled &&\n !isEndpoint &&\n !state.inRange &&\n state.today &&\n \"ring-1 ring-primary text-primary font-medium\",\n !disabled &&\n !isEndpoint &&\n !state.inRange &&\n !state.today &&\n \"text-foreground hover:bg-muted\"\n )}\n >\n {day.getDate()}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n );\n }\n);\nCalendarGrid.displayName = \"CalendarGrid\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CalendarGrid, type CalendarCellState } from \"./calendar-grid\";\nimport {\n isSameDay,\n addMonths,\n startOfMonth,\n startOfDay,\n monthLabelFormat,\n} from \"./calendar-internals\";\n\nexport interface CalendarProps {\n value?: Date;\n defaultValue?: Date;\n onChange?: (date: Date) => void;\n /** Controlled displayed month. Omit for uncontrolled behavior. */\n month?: Date;\n /** Initial displayed month when uncontrolled. Defaults to `value` ?? today. */\n defaultMonth?: Date;\n onMonthChange?: (month: Date) => void;\n min?: Date;\n max?: Date;\n disabledDates?: (date: Date) => boolean;\n className?: string;\n}\n\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(function Calendar(\n {\n value,\n defaultValue,\n onChange,\n month,\n defaultMonth,\n onMonthChange,\n min,\n max,\n disabledDates,\n className,\n },\n ref\n) {\n const controlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(defaultValue);\n const selected = controlled ? value : internalValue;\n\n const monthControlled = month !== undefined;\n const [internalMonth, setInternalMonth] = React.useState<Date>(() =>\n startOfMonth(month ?? defaultMonth ?? selected ?? new Date())\n );\n const viewMonth = monthControlled ? startOfMonth(month as Date) : internalMonth;\n\n const setViewMonth = (next: Date) => {\n const normalized = startOfMonth(next);\n if (!monthControlled) setInternalMonth(normalized);\n onMonthChange?.(normalized);\n };\n\n const isDayDisabled = React.useCallback(\n (d: Date) => {\n if (min && d < startOfDay(min)) return true;\n if (max && d > startOfDay(max)) return true;\n return disabledDates?.(d) ?? false;\n },\n [min, max, disabledDates]\n );\n\n const commitValue = (d: Date) => {\n if (!controlled) setInternalValue(d);\n onChange?.(d);\n };\n\n const today = new Date();\n const cellState = (d: Date): CalendarCellState => ({\n selected: selected ? isSameDay(d, selected) : false,\n today: isSameDay(d, today),\n });\n\n const inViewMonth = (d: Date) =>\n d.getMonth() === viewMonth.getMonth() && d.getFullYear() === viewMonth.getFullYear();\n\n // CalendarGrid owns roving focus internally and only reports where it moved.\n // When a keyboard move (PageUp/PageDown/Shift+PageUp/PageDown, or Arrow keys\n // near a month boundary) lands outside the currently displayed month, this\n // is what advances the header/grid to follow it — mirrors the pre-refactor\n // Calendar's own `moveFocusTo`, which called `setViewMonth` directly.\n const handleFocusDay = (d: Date) => {\n if (!inViewMonth(d)) setViewMonth(d);\n };\n\n return (\n <div ref={ref} className={cn(\"w-[280px] select-none\", className)}>\n <div className=\"flex items-center justify-between mb-2\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n onClick={() => setViewMonth(addMonths(viewMonth, -1))}\n className=\"p-1.5 rounded-kj-sm text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n <span className=\"text-sm font-medium text-foreground\">\n {monthLabelFormat.format(viewMonth)}\n </span>\n <button\n type=\"button\"\n aria-label=\"Next month\"\n onClick={() => setViewMonth(addMonths(viewMonth, 1))}\n className=\"p-1.5 rounded-kj-sm text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </button>\n </div>\n <CalendarGrid\n viewMonth={viewMonth}\n isDayDisabled={isDayDisabled}\n cellState={cellState}\n onSelectDay={commitValue}\n onFocusDay={handleFocusDay}\n initialFocusDate={selected ?? new Date()}\n />\n </div>\n );\n});\nCalendar.displayName = \"Calendar\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Calendar } from \"./calendar\";\nimport { toISODateString } from \"./calendar-internals\";\n\nexport interface DatePickerProps {\n value?: Date;\n defaultValue?: Date;\n onChange?: (date: Date) => void;\n min?: Date;\n max?: Date;\n disabledDates?: (date: Date) => boolean;\n /** Trigger text when nothing is selected. Default \"Pick a date…\". */\n placeholder?: string;\n disabled?: boolean;\n /** Visual error state (red border + aria-invalid on the trigger). */\n error?: boolean;\n /** Marks the trigger aria-required (buttons have no native `required` attribute). */\n required?: boolean;\n className?: string;\n id?: string;\n name?: string;\n \"aria-describedby\"?: string;\n}\n\nconst displayFormat = new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" });\n\nexport const DatePicker = React.forwardRef<HTMLButtonElement, DatePickerProps>(function DatePicker(\n {\n value,\n defaultValue,\n onChange,\n min,\n max,\n disabledDates,\n placeholder = \"Pick a date…\",\n disabled = false,\n error = false,\n required = false,\n className,\n id,\n name,\n \"aria-describedby\": describedBy,\n },\n ref\n) {\n const controlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<Date | undefined>(defaultValue);\n const selected = controlled ? value : internalValue;\n\n const [open, setOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n\n const setTriggerRef = (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n };\n\n const commitValue = (d: Date) => {\n if (!controlled) setInternalValue(d);\n onChange?.(d);\n };\n\n const closePopup = React.useCallback(() => setOpen(false), []);\n const openPopup = () => {\n if (!disabled) setOpen(true);\n };\n\n const handleCalendarChange = (d: Date) => {\n commitValue(d);\n closePopup();\n triggerRef.current?.focus();\n };\n\n // Outside-click dismissal.\n React.useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) closePopup();\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, closePopup]);\n\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPopup();\n } else if (e.key === \"Escape\" && open) {\n // The panel is a DOM sibling of the trigger, not a descendant, and\n // the Calendar deliberately doesn't auto-focus into the grid on\n // open. So while focus remains on the trigger, a real Escape\n // keydown never bubbles into the panel's onKeyDown handler — it\n // must be handled here instead. Focus is already on the trigger,\n // so no refocus is needed.\n e.preventDefault();\n closePopup();\n }\n };\n\n const onPanelKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n closePopup();\n triggerRef.current?.focus();\n }\n };\n\n return (\n <div ref={containerRef} className={cn(\"relative inline-block w-full\", className)}>\n <button\n ref={setTriggerRef}\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-haspopup=\"grid\"\n aria-expanded={open}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n aria-describedby={describedBy}\n onClick={() => (open ? closePopup() : openPopup())}\n onKeyDown={onTriggerKeyDown}\n className={cn(\n \"w-full flex items-center justify-between gap-2 border rounded-kj-md bg-surface text-left text-sm\",\n \"pl-[0.85rem] pr-3 py-[calc(0.6rem*var(--kj-density,1))]\",\n \"transition-[border-color,box-shadow] duration-150\",\n \"focus:outline-none focus:border-ring focus:ring-[3px] focus:ring-ring/30\",\n disabled && \"bg-muted text-muted-foreground cursor-not-allowed\",\n error ? \"border-danger\" : \"border-input\",\n !selected && \"text-muted-foreground\"\n )}\n >\n <span>{selected ? displayFormat.format(selected) : placeholder}</span>\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4 text-muted-foreground shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M3 10h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n {name && (\n <input type=\"hidden\" name={name} value={selected ? toISODateString(selected) : \"\"} />\n )}\n\n {open && (\n <div\n onKeyDown={onPanelKeyDown}\n className=\"absolute z-40 top-[calc(100%+6px)] left-0 bg-surface border border-border rounded-kj-md shadow-kj-lg p-3 animate-[kjpop_.12s_ease]\"\n >\n <Calendar\n value={selected}\n onChange={handleCalendarChange}\n min={min}\n max={max}\n disabledDates={disabledDates}\n />\n </div>\n )}\n </div>\n );\n});\nDatePicker.displayName = \"DatePicker\";\n\nimport { FormField } from \"./form-field\";\n\nexport interface DatePickerFieldProps extends Omit<DatePickerProps, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n}\n\nexport const DatePickerField = React.forwardRef<HTMLButtonElement, DatePickerFieldProps>(\n function DatePickerField({ label, hint, error, required, className, ...props }, ref) {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <DatePicker ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nDatePickerField.displayName = \"DatePickerField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CalendarGrid, type CalendarCellState } from \"./calendar-grid\";\nimport {\n startOfDay,\n isSameDay,\n addMonths,\n startOfMonth,\n monthLabelFormat,\n} from \"./calendar-internals\";\n\nexport interface DateRange {\n start?: Date;\n end?: Date;\n}\n\nexport interface RangeCalendarProps {\n value?: DateRange;\n defaultValue?: DateRange;\n onChange?: (range: DateRange) => void;\n /** Controlled left-month. The right month is always this + 1 (locked navigation). */\n month?: Date;\n defaultMonth?: Date;\n onMonthChange?: (month: Date) => void;\n min?: Date;\n max?: Date;\n disabledDates?: (date: Date) => boolean;\n /** Force rendering 1 month instead of 2 side-by-side. */\n singleMonth?: boolean;\n className?: string;\n}\n\nfunction isBetweenExclusive(d: Date, lo: Date, hi: Date): boolean {\n const t = startOfDay(d).getTime();\n return t > startOfDay(lo).getTime() && t < startOfDay(hi).getTime();\n}\n\nexport const RangeCalendar = React.forwardRef<HTMLDivElement, RangeCalendarProps>(\n function RangeCalendar(\n {\n value,\n defaultValue,\n onChange,\n month,\n defaultMonth,\n onMonthChange,\n min,\n max,\n disabledDates,\n singleMonth,\n className,\n },\n ref\n ) {\n const controlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<DateRange>(defaultValue ?? {});\n const range = controlled ? (value as DateRange) : internalValue;\n\n const monthControlled = month !== undefined;\n const [internalMonth, setInternalMonth] = React.useState<Date>(() =>\n startOfMonth(month ?? defaultMonth ?? range.start ?? new Date())\n );\n const leftMonth = monthControlled ? startOfMonth(month as Date) : internalMonth;\n const rightMonth = addMonths(leftMonth, 1);\n\n const setViewMonth = (next: Date) => {\n const normalized = startOfMonth(next);\n if (!monthControlled) setInternalMonth(normalized);\n onMonthChange?.(normalized);\n };\n\n const isDayDisabled = React.useCallback(\n (d: Date) => {\n if (min && d < startOfDay(min)) return true;\n if (max && d > startOfDay(max)) return true;\n return disabledDates?.(d) ?? false;\n },\n [min, max, disabledDates]\n );\n\n // Purely internal — never part of the controlled/uncontrolled `value`. Tracks\n // an in-progress pick (start clicked, end not yet chosen) so onChange fires\n // exactly once, only when a full range completes.\n const [pendingStart, setPendingStart] = React.useState<Date | undefined>(undefined);\n const [hoverDate, setHoverDate] = React.useState<Date | undefined>(undefined);\n\n const commitRange = (next: DateRange) => {\n if (!controlled) setInternalValue(next);\n onChange?.(next);\n };\n\n const handleSelectDay = (d: Date) => {\n const day = startOfDay(d);\n if (pendingStart === undefined) {\n setPendingStart(day);\n setHoverDate(undefined);\n return;\n }\n if (day < startOfDay(pendingStart)) {\n setPendingStart(day);\n setHoverDate(undefined);\n return;\n }\n commitRange({ start: pendingStart, end: day });\n setPendingStart(undefined);\n setHoverDate(undefined);\n };\n\n const today = new Date();\n const previewEnd = pendingStart !== undefined ? hoverDate : undefined;\n\n const cellState = (d: Date): CalendarCellState => {\n const isToday = isSameDay(d, today);\n if (pendingStart !== undefined) {\n if (previewEnd === undefined) {\n return { rangeStart: isSameDay(d, pendingStart), today: isToday };\n }\n if (startOfDay(previewEnd) < startOfDay(pendingStart)) {\n return { rangeStart: isSameDay(d, previewEnd), today: isToday };\n }\n return {\n rangeStart: isSameDay(d, pendingStart),\n rangeEnd: isSameDay(d, previewEnd),\n inRange: isBetweenExclusive(d, pendingStart, previewEnd),\n today: isToday,\n };\n }\n if (range.start && range.end) {\n return {\n rangeStart: isSameDay(d, range.start),\n rangeEnd: isSameDay(d, range.end),\n inRange: isBetweenExclusive(d, range.start, range.end),\n today: isToday,\n };\n }\n return { rangeStart: range.start ? isSameDay(d, range.start) : false, today: isToday };\n };\n\n const inLockedRange = (d: Date) =>\n (d.getMonth() === leftMonth.getMonth() && d.getFullYear() === leftMonth.getFullYear()) ||\n (d.getMonth() === rightMonth.getMonth() && d.getFullYear() === rightMonth.getFullYear());\n\n // Each CalendarGrid owns its own roving focus internally and only reports\n // where it moved via onFocusDay. That single callback serves two purposes\n // here: (1) drives the hover/keyboard-focus range preview (setHoverDate),\n // and (2) — mirroring Calendar's own onFocusDay wiring — advances the\n // locked month pair when a keyboard move (PageUp/PageDown, Shift+PageUp/\n // PageDown, or an Arrow key) lands outside both currently visible months.\n const handleFocusDay = (d: Date) => {\n if (pendingStart !== undefined) setHoverDate(d);\n if (!inLockedRange(d)) setViewMonth(d);\n };\n\n const navButton = (direction: \"prev\" | \"next\") => (\n <button\n type=\"button\"\n aria-label={direction === \"prev\" ? \"Previous month\" : \"Next month\"}\n onClick={() => setViewMonth(addMonths(leftMonth, direction === \"prev\" ? -1 : 1))}\n className=\"p-1.5 rounded-kj-sm text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {direction === \"prev\" ? <path d=\"m15 18-6-6 6-6\" /> : <path d=\"m9 18 6-6-6-6\" />}\n </svg>\n </button>\n );\n\n const showSingleMonth = singleMonth;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col sm:flex-row gap-4 sm:gap-6 select-none max-w-full overflow-hidden\",\n className\n )}\n >\n <div className=\"w-full sm:w-[280px]\">\n <div className=\"flex items-center justify-between mb-2\">\n {navButton(\"prev\")}\n <span className=\"text-sm font-medium text-foreground\">\n {monthLabelFormat.format(leftMonth)}\n </span>\n <span className={showSingleMonth ? \"\" : \"sm:hidden\"}>{navButton(\"next\")}</span>\n </div>\n <CalendarGrid\n viewMonth={leftMonth}\n isDayDisabled={isDayDisabled}\n cellState={cellState}\n onSelectDay={handleSelectDay}\n onFocusDay={handleFocusDay}\n initialFocusDate={pendingStart ?? range.start ?? new Date()}\n />\n </div>\n {!showSingleMonth && (\n <div className=\"hidden sm:block w-[280px]\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"w-[26px]\" aria-hidden=\"true\" />\n <span className=\"text-sm font-medium text-foreground\">\n {monthLabelFormat.format(rightMonth)}\n </span>\n {navButton(\"next\")}\n </div>\n <CalendarGrid\n viewMonth={rightMonth}\n isDayDisabled={isDayDisabled}\n cellState={cellState}\n onSelectDay={handleSelectDay}\n onFocusDay={handleFocusDay}\n initialFocusDate={pendingStart ?? range.start ?? new Date()}\n />\n </div>\n )}\n </div>\n );\n }\n);\nRangeCalendar.displayName = \"RangeCalendar\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { RangeCalendar, type DateRange } from \"./range-calendar\";\nimport { toISODateString } from \"./calendar-internals\";\n\nexport interface DateRangePickerProps {\n value?: DateRange;\n defaultValue?: DateRange;\n onChange?: (range: DateRange) => void;\n min?: Date;\n max?: Date;\n disabledDates?: (date: Date) => boolean;\n /** Trigger text when nothing is selected. Default \"Pick a date range…\". */\n placeholder?: string;\n disabled?: boolean;\n /** Visual error state (red border + aria-invalid on the trigger). */\n error?: boolean;\n /** Marks the trigger aria-required (buttons have no native `required` attribute). */\n required?: boolean;\n className?: string;\n id?: string;\n name?: string;\n \"aria-describedby\"?: string;\n}\n\nconst displayFormat = new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" });\n\nfunction formatRangeLabel(range: DateRange): string | undefined {\n if (!range.start || !range.end) return undefined;\n return `${displayFormat.format(range.start)} – ${displayFormat.format(range.end)}`;\n}\n\nexport const DateRangePicker = React.forwardRef<HTMLButtonElement, DateRangePickerProps>(\n function DateRangePicker(\n {\n value,\n defaultValue,\n onChange,\n min,\n max,\n disabledDates,\n placeholder = \"Pick a date range…\",\n disabled = false,\n error = false,\n required = false,\n className,\n id,\n name,\n \"aria-describedby\": describedBy,\n },\n ref\n ) {\n const controlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<DateRange>(defaultValue ?? {});\n const selected = controlled ? value : internalValue;\n\n const [open, setOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n\n const setTriggerRef = (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n };\n\n const commitValue = (r: DateRange) => {\n if (!controlled) setInternalValue(r);\n onChange?.(r);\n };\n\n const closePopup = React.useCallback(() => setOpen(false), []);\n const openPopup = () => {\n if (!disabled) setOpen(true);\n };\n\n const handleRangeChange = (r: DateRange) => {\n commitValue(r);\n closePopup();\n triggerRef.current?.focus();\n };\n\n // Outside-click dismissal.\n React.useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) closePopup();\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, closePopup]);\n\n const onTriggerKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPopup();\n } else if (e.key === \"Escape\" && open) {\n // The panel is a DOM sibling of the trigger, not a descendant, and\n // RangeCalendar deliberately doesn't auto-focus into a grid on open.\n // So a real Escape keydown while focus is on the trigger never\n // bubbles into the panel's onKeyDown handler — it must be handled\n // here instead. Refocus the trigger explicitly rather than assuming\n // it already has focus.\n e.preventDefault();\n closePopup();\n triggerRef.current?.focus();\n }\n };\n\n const onPanelKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n closePopup();\n triggerRef.current?.focus();\n }\n };\n\n const label = formatRangeLabel(selected);\n\n return (\n <div ref={containerRef} className={cn(\"relative inline-block w-full\", className)}>\n <button\n ref={setTriggerRef}\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n aria-describedby={describedBy}\n onClick={() => (open ? closePopup() : openPopup())}\n onKeyDown={onTriggerKeyDown}\n className={cn(\n \"w-full flex items-center justify-between gap-2 border rounded-kj-md bg-surface text-left text-sm\",\n \"pl-[0.85rem] pr-3 py-[calc(0.6rem*var(--kj-density,1))]\",\n \"transition-[border-color,box-shadow] duration-150\",\n \"focus:outline-none focus:border-ring focus:ring-[3px] focus:ring-ring/30\",\n disabled && \"bg-muted text-muted-foreground cursor-not-allowed\",\n error ? \"border-danger\" : \"border-input\",\n !label && \"text-muted-foreground\"\n )}\n >\n <span>{label ?? placeholder}</span>\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4 text-muted-foreground shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M3 10h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n {name && (\n <>\n <input\n type=\"hidden\"\n name={`${name}Start`}\n value={selected.start ? toISODateString(selected.start) : \"\"}\n />\n <input\n type=\"hidden\"\n name={`${name}End`}\n value={selected.end ? toISODateString(selected.end) : \"\"}\n />\n </>\n )}\n\n {open && (\n <div\n onKeyDown={onPanelKeyDown}\n className=\"absolute z-40 top-[calc(100%+6px)] left-0 sm:left-auto right-0 sm:right-auto max-w-[calc(100vw-2rem)] bg-surface border border-border rounded-kj-md shadow-kj-lg p-3 animate-[kjpop_.12s_ease]\"\n >\n <RangeCalendar\n value={selected}\n onChange={handleRangeChange}\n min={min}\n max={max}\n disabledDates={disabledDates}\n />\n </div>\n )}\n </div>\n );\n }\n);\nDateRangePicker.displayName = \"DateRangePicker\";\n\nimport { FormField } from \"./form-field\";\n\nexport interface DateRangePickerFieldProps extends Omit<DateRangePickerProps, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n}\n\nexport const DateRangePickerField = React.forwardRef<HTMLButtonElement, DateRangePickerFieldProps>(\n function DateRangePickerField({ label, hint, error, required, className, ...props }, ref) {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <DateRangePicker ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nDateRangePickerField.displayName = \"DateRangePickerField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface DropzoneProps {\n onFiles: (files: File[]) => void;\n /** Native picker filter hint. Real enforcement lives in FileUpload's validation. */\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n className?: string;\n /** Overrides the default drop-region content. */\n children?: React.ReactNode;\n id?: string;\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: boolean | \"true\" | \"false\";\n \"aria-required\"?: boolean;\n}\n\nexport const Dropzone = React.forwardRef<HTMLButtonElement, DropzoneProps>(function Dropzone(\n {\n onFiles,\n accept,\n multiple = true,\n disabled = false,\n className,\n children,\n id,\n \"aria-describedby\": describedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-required\": ariaRequired,\n },\n ref\n) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [dragActive, setDragActive] = React.useState(false);\n // dragenter/dragleave fire as the pointer crosses child elements; count\n // them so the highlight only clears when the pointer truly leaves.\n const dragCounter = React.useRef(0);\n const invalid = ariaInvalid === true || ariaInvalid === \"true\";\n\n const openPicker = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files ? Array.from(e.target.files) : [];\n if (files.length > 0) onFiles(files);\n // Reset so re-selecting the same file fires change again.\n e.target.value = \"\";\n };\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault();\n if (disabled) return;\n dragCounter.current += 1;\n setDragActive(true);\n };\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n };\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n if (disabled) return;\n dragCounter.current -= 1;\n if (dragCounter.current <= 0) {\n dragCounter.current = 0;\n setDragActive(false);\n }\n };\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n dragCounter.current = 0;\n setDragActive(false);\n if (disabled) return;\n const files = e.dataTransfer?.files ? Array.from(e.dataTransfer.files) : [];\n if (files.length > 0) onFiles(files);\n };\n\n return (\n <div className={cn(\"w-full\", className)}>\n <button\n ref={ref}\n type=\"button\"\n id={id}\n disabled={disabled}\n aria-describedby={describedBy}\n aria-invalid={ariaInvalid}\n aria-required={ariaRequired}\n data-drag-active={dragActive || undefined}\n onClick={openPicker}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n className={cn(\n \"w-full flex flex-col items-center justify-center gap-2 rounded-kj-md border-2 border-dashed px-6 py-8 text-center text-sm transition-colors\",\n \"focus:outline-none focus:ring-[3px] focus:ring-ring/30\",\n disabled\n ? \"border-input bg-muted text-muted-foreground cursor-not-allowed\"\n : dragActive\n ? \"border-primary bg-primary/5 text-foreground cursor-pointer\"\n : invalid\n ? \"border-danger bg-surface text-muted-foreground hover:text-foreground cursor-pointer\"\n : \"border-input bg-surface text-muted-foreground hover:border-primary hover:text-foreground cursor-pointer\"\n )}\n >\n {children ?? (\n <>\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-7 w-7\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 16V4M7 9l5-5 5 5\" />\n <path d=\"M20 16v3a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-3\" />\n </svg>\n <span>\n <span className=\"font-medium text-foreground\">Drag and drop files here</span>, or\n click to browse\n </span>\n </>\n )}\n </button>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleInputChange}\n className=\"sr-only\"\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n </div>\n );\n});\nDropzone.displayName = \"Dropzone\";\n","export type UploadStatus = \"pending\" | \"uploading\" | \"success\" | \"error\";\n\nexport interface UploadItem {\n id: string;\n file: File;\n /** Defaults to \"pending\" when unset. Drives the row's rendering. */\n status?: UploadStatus;\n /** 0–100. Shown as a Progress bar when status === \"uploading\". */\n progress?: number;\n /** Shown (danger tone) when status === \"error\". */\n error?: string;\n}\n\nexport interface FileRejection {\n file: File;\n reason: \"type\" | \"size\" | \"count\";\n}\n\nconst KB = 1024;\n\nexport function formatBytes(bytes: number): string {\n if (bytes < KB) return `${bytes} B`;\n const units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n let value = bytes / KB;\n let unitIndex = 0;\n while (value >= KB && unitIndex < units.length - 1) {\n value /= KB;\n unitIndex++;\n }\n return `${value.toFixed(1)} ${units[unitIndex]}`;\n}\n\nexport function matchesAccept(file: File, accept?: string): boolean {\n if (!accept || accept.trim() === \"\") return true;\n const tokens = accept\n .split(\",\")\n .map((t) => t.trim())\n .filter(Boolean);\n if (tokens.length === 0) return true;\n const fileType = file.type.toLowerCase();\n const fileName = file.name.toLowerCase();\n return tokens.some((token) => {\n const t = token.toLowerCase();\n if (t.startsWith(\".\")) return fileName.endsWith(t);\n if (t.endsWith(\"/*\")) return fileType.startsWith(t.slice(0, -1)); // \"image/*\" -> \"image/\"\n return fileType === t;\n });\n}\n\nlet idCounter = 0;\nexport function generateId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n idCounter += 1;\n return `file-${Date.now().toString(36)}-${idCounter}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\nexport interface ValidateOptions {\n accept?: string;\n maxSize?: number;\n maxFiles?: number;\n existingCount?: number;\n multiple?: boolean;\n}\n\nexport function validateFiles(\n files: File[],\n { accept, maxSize, maxFiles, existingCount = 0, multiple = true }: ValidateOptions\n): { accepted: File[]; rejected: FileRejection[] } {\n const accepted: File[] = [];\n const rejected: FileRejection[] = [];\n // Single mode replaces the list, so existing count doesn't consume capacity.\n const effectiveExisting = multiple ? existingCount : 0;\n\n for (const file of files) {\n if (!matchesAccept(file, accept)) {\n rejected.push({ file, reason: \"type\" });\n continue;\n }\n if (maxSize != null && file.size > maxSize) {\n rejected.push({ file, reason: \"size\" });\n continue;\n }\n if (!multiple) {\n // Single mode: first type/size-valid file wins; the rest overflow.\n if (accepted.length === 0) accepted.push(file);\n else rejected.push({ file, reason: \"count\" });\n continue;\n }\n const capacity = maxFiles != null ? maxFiles - effectiveExisting - accepted.length : Infinity;\n if (capacity <= 0) {\n rejected.push({ file, reason: \"count\" });\n continue;\n }\n accepted.push(file);\n }\n\n return { accepted, rejected };\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Dropzone } from \"./dropzone\";\nimport { Progress } from \"./progress\";\nimport { FormField } from \"./form-field\";\nimport {\n formatBytes,\n generateId,\n validateFiles,\n type UploadItem,\n type UploadStatus,\n type FileRejection,\n} from \"./file-upload-internals\";\n\nexport type { UploadItem, UploadStatus, FileRejection };\n\nexport interface FileUploadProps {\n value?: UploadItem[];\n defaultValue?: UploadItem[];\n onChange?: (items: UploadItem[]) => void;\n /** Called with files rejected by validation on a given drop/selection. */\n onReject?: (rejections: FileRejection[]) => void;\n accept?: string;\n maxSize?: number;\n maxFiles?: number;\n multiple?: boolean;\n disabled?: boolean;\n /** Visual error state (danger border + aria-invalid on the dropzone). */\n error?: boolean;\n /** aria-required on the dropzone. */\n required?: boolean;\n className?: string;\n id?: string;\n \"aria-describedby\"?: string;\n}\n\nfunction FileIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 2v6h6\" />\n </svg>\n );\n}\n\nexport const FileUpload = React.forwardRef<HTMLButtonElement, FileUploadProps>(function FileUpload(\n {\n value,\n defaultValue,\n onChange,\n onReject,\n accept,\n maxSize,\n maxFiles,\n multiple = true,\n disabled = false,\n error = false,\n required = false,\n className,\n id,\n \"aria-describedby\": describedBy,\n },\n ref\n) {\n const controlled = value !== undefined;\n const [internalItems, setInternalItems] = React.useState<UploadItem[]>(defaultValue ?? []);\n const items = controlled ? (value as UploadItem[]) : internalItems;\n\n const commit = (next: UploadItem[]) => {\n if (!controlled) setInternalItems(next);\n onChange?.(next);\n };\n\n const handleFiles = (files: File[]) => {\n const { accepted, rejected } = validateFiles(files, {\n accept,\n maxSize,\n maxFiles,\n existingCount: items.length,\n multiple,\n });\n if (rejected.length > 0) onReject?.(rejected);\n if (accepted.length === 0) return;\n const newItems: UploadItem[] = accepted.map((file) => ({\n id: generateId(),\n file,\n status: \"pending\",\n }));\n commit(multiple ? [...items, ...newItems] : newItems.slice(0, 1));\n };\n\n const removeItem = (itemId: string) => {\n commit(items.filter((it) => it.id !== itemId));\n };\n\n return (\n <div className={cn(\"w-full flex flex-col gap-3\", className)}>\n <Dropzone\n ref={ref}\n onFiles={handleFiles}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n id={id}\n aria-describedby={describedBy}\n aria-invalid={error || undefined}\n aria-required={required || undefined}\n />\n {items.length > 0 && (\n <ul className=\"flex flex-col gap-2\">\n {items.map((item) => (\n <li\n key={item.id}\n className=\"flex items-center gap-3 rounded-kj-md border border-border bg-surface px-3 py-2\"\n >\n <FileIcon className=\"h-5 w-5 shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"truncate text-sm text-foreground\">{item.file.name}</span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {formatBytes(item.file.size)}\n </span>\n </div>\n {item.status === \"uploading\" && item.progress != null && (\n <div className=\"mt-1.5 flex items-center gap-2\">\n <Progress value={item.progress} className=\"h-1.5\" />\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {Math.round(item.progress)}%\n </span>\n </div>\n )}\n {item.status === \"success\" && (\n <span className=\"mt-0.5 block text-xs text-success\">Uploaded</span>\n )}\n {item.status === \"error\" && (\n <span className=\"mt-0.5 block text-xs text-danger\">\n {item.error ?? \"Upload failed\"}\n </span>\n )}\n </div>\n {!disabled && (\n <button\n type=\"button\"\n aria-label={`Remove ${item.file.name}`}\n onClick={() => removeItem(item.id)}\n className=\"shrink-0 rounded-kj-sm p-1 text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n});\nFileUpload.displayName = \"FileUpload\";\n\nexport interface FileUploadFieldProps extends Omit<FileUploadProps, \"error\"> {\n label: string;\n hint?: string;\n error?: string;\n}\n\nexport const FileUploadField = React.forwardRef<HTMLButtonElement, FileUploadFieldProps>(\n function FileUploadField({ label, hint, error, required, className, ...props }, ref) {\n return (\n <FormField label={label} hint={hint} error={error} required={required} className={className}>\n <FileUpload ref={ref} error={!!error} {...props} />\n </FormField>\n );\n }\n);\nFileUploadField.displayName = \"FileUploadField\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport type TimelineAlign = \"left\" | \"right\" | \"alternate\";\nexport type TimelineDotVariant =\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"danger\";\nexport type TimelineDotSize = \"sm\" | \"md\" | \"lg\";\n\ninterface TimelineCtx {\n align: TimelineAlign;\n count: number;\n}\nconst TimelineContext = React.createContext<TimelineCtx | null>(null);\n\ninterface TimelineItemCtx {\n isEven: boolean;\n align: TimelineAlign;\n isLast: boolean;\n}\nconst TimelineItemContext = React.createContext<TimelineItemCtx | null>(null);\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: TimelineAlign;\n}\n\nexport const Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n ({ align = \"left\", className, children, ...props }, ref) => {\n const validChildren = React.Children.toArray(children).filter(React.isValidElement);\n const count = validChildren.length;\n\n const childrenWithIndex = validChildren.map((child, index) => {\n return React.cloneElement(child as React.ReactElement<any>, {\n index,\n });\n });\n\n return (\n <TimelineContext.Provider value={{ align, count }}>\n <div\n ref={ref}\n role=\"list\"\n className={cn(\"flex flex-col gap-6 w-full\", className)}\n {...props}\n >\n {childrenWithIndex}\n </div>\n </TimelineContext.Provider>\n );\n }\n);\nTimeline.displayName = \"Timeline\";\n\nexport interface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement> {\n index?: number;\n}\n\nexport const TimelineItem = React.forwardRef<HTMLDivElement, TimelineItemProps>(\n ({ className, index = 0, children, ...props }, ref) => {\n const ctx = React.useContext(TimelineContext);\n if (!ctx) throw new Error(\"TimelineItem must be used within a Timeline\");\n\n const { align, count } = ctx;\n const isEven = index % 2 === 0;\n const isLast = index === count - 1;\n\n // Grid config per alignment\n const gridClass = cn(\n \"grid w-full gap-4 items-start group/timeline-item\",\n align === \"left\" && \"grid-cols-[auto_1fr]\",\n align === \"right\" && \"grid-cols-[1fr_auto] text-right\",\n align === \"alternate\" && \"md:grid-cols-[1fr_auto_1fr] grid-cols-[auto_1fr]\"\n );\n\n return (\n <TimelineItemContext.Provider value={{ isEven, align, isLast }}>\n <div ref={ref} role=\"listitem\" className={cn(gridClass, className)} {...props}>\n {children}\n </div>\n </TimelineItemContext.Provider>\n );\n }\n);\nTimelineItem.displayName = \"TimelineItem\";\n\nexport interface TimelineSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n isEven?: boolean;\n align?: TimelineAlign;\n}\n\nexport const TimelineSeparator = React.forwardRef<HTMLDivElement, TimelineSeparatorProps>(\n ({ className, align: propAlign, ...props }, ref) => {\n const ctx = React.useContext(TimelineItemContext);\n const align = propAlign ?? ctx?.align ?? \"left\";\n\n const separatorClass = cn(\n \"flex flex-col items-center justify-self-center h-full min-h-[40px]\",\n align === \"alternate\" && \"md:col-start-2 col-start-1\",\n align === \"left\" && \"col-start-1\",\n align === \"right\" && \"col-start-2\",\n className\n );\n\n return <div ref={ref} className={separatorClass} {...props} />;\n }\n);\nTimelineSeparator.displayName = \"TimelineSeparator\";\n\nexport interface TimelineConnectorProps extends React.HTMLAttributes<HTMLDivElement> {\n dashed?: boolean;\n}\n\nexport const TimelineConnector = React.forwardRef<HTMLDivElement, TimelineConnectorProps>(\n ({ className, dashed, ...props }, ref) => {\n const ctx = React.useContext(TimelineItemContext);\n const isLast = ctx?.isLast ?? false;\n\n const connectorClass = cn(\n \"grow\",\n isLast && \"hidden\",\n dashed ? \"w-0 border-l border-dashed border-border\" : \"w-0.5 bg-border\",\n className\n );\n\n return <div ref={ref} className={connectorClass} {...props} />;\n }\n);\nTimelineConnector.displayName = \"TimelineConnector\";\n\nexport interface TimelineDotProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: TimelineDotVariant;\n size?: TimelineDotSize;\n}\n\nexport const TimelineDot = React.forwardRef<HTMLDivElement, TimelineDotProps>(\n ({ className, variant = \"default\", size = \"md\", ...props }, ref) => {\n const sizeClasses = {\n sm: \"w-2.5 h-2.5 rounded-full my-1.5\",\n md: \"w-4 h-4 rounded-full my-1 border-2 bg-background border-border\",\n lg: \"w-8 h-8 rounded-full border flex items-center justify-center bg-background text-[0.8rem]\",\n };\n\n const variantClasses = {\n default: \"border-border text-muted-foreground\",\n primary: \"border-primary bg-primary/5 text-primary\",\n secondary: \"border-secondary bg-secondary/5 text-secondary\",\n success: \"border-success bg-success-surface text-success\",\n warning: \"border-warning bg-warning-surface text-warning\",\n danger: \"border-danger bg-danger-surface text-danger\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"shrink-0 select-none\",\n sizeClasses[size],\n variantClasses[variant],\n className\n )}\n {...props}\n />\n );\n }\n);\nTimelineDot.displayName = \"TimelineDot\";\n\nexport interface TimelineContentProps extends React.HTMLAttributes<HTMLDivElement> {\n isEven?: boolean;\n align?: TimelineAlign;\n}\n\nexport const TimelineContent = React.forwardRef<HTMLDivElement, TimelineContentProps>(\n ({ className, isEven: propIsEven, align: propAlign, ...props }, ref) => {\n const ctx = React.useContext(TimelineItemContext);\n const isEven = propIsEven ?? ctx?.isEven ?? false;\n const align = propAlign ?? ctx?.align ?? \"left\";\n\n const contentClass = cn(\n \"pb-8 flex flex-col gap-1 w-full\",\n align === \"left\" && \"col-start-2 text-left\",\n align === \"right\" && \"col-start-1 text-right\",\n align === \"alternate\" &&\n (isEven\n ? \"md:col-start-3 col-start-2 text-left\"\n : \"md:col-start-1 col-start-2 md:text-right text-left\"),\n className\n );\n\n return <div ref={ref} className={contentClass} {...props} />;\n }\n);\nTimelineContent.displayName = \"TimelineContent\";\n\nexport const TimelineTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h4\n ref={ref}\n className={cn(\"m-0 text-sm font-semibold tracking-[-0.01em] text-foreground\", className)}\n {...props}\n >\n {children}\n </h4>\n));\nTimelineTitle.displayName = \"TimelineTitle\";\n\nexport const TimelineTime = React.forwardRef<\n HTMLTimeElement,\n React.TimeHTMLAttributes<HTMLTimeElement>\n>(({ className, ...props }, ref) => (\n <time\n ref={ref}\n className={cn(\"text-[0.75rem] text-muted-foreground font-normal\", className)}\n {...props}\n />\n));\nTimelineTime.displayName = \"TimelineTime\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface UseStepperOptions {\n initialStep?: number;\n stepsCount: number;\n}\n\nexport interface UseStepperReturn {\n activeStep: number;\n completedSteps: number[];\n setStep: (step: number) => void;\n nextStep: () => void;\n prevStep: () => void;\n completeStep: (step: number) => void;\n uncompleteStep: (step: number) => void;\n reset: () => void;\n isFirstStep: boolean;\n isLastStep: boolean;\n}\n\nexport function useStepper({ initialStep = 0, stepsCount }: UseStepperOptions): UseStepperReturn {\n const safeStepsCount = Math.max(1, stepsCount);\n const [activeStep, setActiveStep] = React.useState(initialStep);\n const [completedSteps, setCompletedSteps] = React.useState<number[]>([]);\n\n const setStep = React.useCallback(\n (step: number) => {\n if (step >= 0 && step < safeStepsCount) {\n setActiveStep(step);\n }\n },\n [safeStepsCount]\n );\n\n const nextStep = React.useCallback(() => {\n setActiveStep((prev) => Math.min(prev + 1, safeStepsCount - 1));\n }, [safeStepsCount]);\n\n const prevStep = React.useCallback(() => {\n setActiveStep((prev) => Math.max(prev - 1, 0));\n }, []);\n\n const completeStep = React.useCallback(\n (step: number) => {\n setCompletedSteps((prev) => {\n if (step < 0 || step >= safeStepsCount) return prev; // ignore out-of-range\n if (prev.includes(step)) return prev;\n return [...prev, step].sort((a, b) => a - b);\n });\n },\n [safeStepsCount]\n );\n\n const uncompleteStep = React.useCallback((step: number) => {\n setCompletedSteps((prev) => prev.filter((s) => s !== step));\n }, []);\n\n const reset = React.useCallback(() => {\n setActiveStep(initialStep);\n setCompletedSteps([]);\n }, [initialStep]);\n\n return {\n activeStep,\n completedSteps,\n setStep,\n nextStep,\n prevStep,\n completeStep,\n uncompleteStep,\n reset,\n isFirstStep: activeStep === 0,\n isLastStep: activeStep === safeStepsCount - 1,\n };\n}\n\nexport type StepperOrientation = \"horizontal\" | \"vertical\";\n\ninterface StepperCtx {\n activeStep: number;\n orientation: StepperOrientation;\n responsive?: boolean;\n linear: boolean;\n setStep: (step: number) => void;\n completedSteps: number[];\n registerStep: (value: number) => void;\n unregisterStep: (value: number) => void;\n steps: number[];\n}\n\nconst StepperContext = React.createContext<StepperCtx | null>(null);\n\ninterface StepperItemCtx {\n value: number;\n disabled: boolean;\n isLast: boolean;\n}\n\nconst StepperItemContext = React.createContext<StepperItemCtx | null>(null);\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n orientation?: StepperOrientation;\n responsive?: boolean;\n linear?: boolean;\n}\n\nexport const Stepper = React.forwardRef<HTMLDivElement, StepperProps>(\n (\n {\n value,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n responsive = true,\n linear = true,\n children,\n className,\n ...props\n },\n ref\n ) => {\n const [localValue, setLocalValue] = React.useState(defaultValue ?? 0);\n const isControlled = value !== undefined;\n const activeStep = isControlled ? value : localValue;\n\n const [steps, setSteps] = React.useState<number[]>([]);\n const [completedSteps, setCompletedSteps] = React.useState<number[]>([]);\n\n const registerStep = React.useCallback((val: number) => {\n setSteps((prev) => (prev.includes(val) ? prev : [...prev, val].sort((a, b) => a - b)));\n }, []);\n\n const unregisterStep = React.useCallback((val: number) => {\n setSteps((prev) => prev.filter((v) => v !== val));\n }, []);\n\n const setStep = React.useCallback(\n (step: number) => {\n if (!isControlled) {\n setLocalValue(step);\n }\n onValueChange?.(step);\n\n // Auto mark previous steps as completed in linear mode\n if (linear) {\n setCompletedSteps((prev) => {\n const priorSteps = steps.filter((s) => s < step);\n const nextCompleted = Array.from(new Set([...prev, ...priorSteps])).sort(\n (a, b) => a - b\n );\n return nextCompleted;\n });\n }\n },\n [isControlled, onValueChange, linear, steps]\n );\n\n const contextValue = React.useMemo(\n () => ({\n activeStep,\n orientation,\n responsive,\n linear,\n setStep,\n completedSteps,\n registerStep,\n unregisterStep,\n steps,\n }),\n [\n activeStep,\n orientation,\n responsive,\n linear,\n setStep,\n completedSteps,\n registerStep,\n unregisterStep,\n steps,\n ]\n );\n\n return (\n <StepperContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn(\n \"w-full\",\n orientation === \"vertical\" ? \"flex flex-col gap-6\" : \"space-y-6\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </StepperContext.Provider>\n );\n }\n);\nStepper.displayName = \"Stepper\";\n\nexport interface StepperContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n}\n\nexport const StepperContent = React.forwardRef<HTMLDivElement, StepperContentProps>(\n ({ value, className, children, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n if (!ctx) throw new Error(\"StepperContent must be used within a Stepper\");\n\n const isActive = ctx.activeStep === value;\n\n if (!isActive) return null;\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n tabIndex={0}\n className={cn(\"focus-visible:outline-none w-full\", className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\nStepperContent.displayName = \"StepperContent\";\n\nexport type StepperListProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const StepperList = React.forwardRef<HTMLDivElement, StepperListProps>(\n ({ className, children, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n if (!ctx) throw new Error(\"StepperList must be used within a Stepper\");\n\n const isResponsiveHorizontal = ctx.orientation === \"horizontal\" && (ctx.responsive ?? true);\n\n const orientationClass = isResponsiveHorizontal\n ? \"flex flex-col sm:flex-row items-start sm:items-center justify-between w-full relative gap-4\"\n : ctx.orientation === \"horizontal\"\n ? \"flex items-center justify-between w-full relative gap-4\"\n : \"flex flex-col items-start gap-6 relative w-full\";\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-orientation={ctx.orientation}\n className={cn(orientationClass, className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\nStepperList.displayName = \"StepperList\";\n\nexport interface StepperItemProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n disabled?: boolean;\n}\n\nexport const StepperItem = React.forwardRef<HTMLDivElement, StepperItemProps>(\n ({ value, disabled = false, className, children, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n if (!ctx) throw new Error(\"StepperItem must be used within a Stepper\");\n\n const { registerStep, unregisterStep } = ctx;\n\n React.useEffect(() => {\n registerStep(value);\n return () => unregisterStep(value);\n }, [value, registerStep, unregisterStep]);\n\n const isLast = ctx.steps[ctx.steps.length - 1] === value;\n const isResponsiveHorizontal = ctx.orientation === \"horizontal\" && (ctx.responsive ?? true);\n\n return (\n <StepperItemContext.Provider value={{ value, disabled, isLast }}>\n <div\n ref={ref}\n className={cn(\n \"group relative flex items-center gap-3 z-10\",\n ctx.orientation === \"vertical\"\n ? \"flex items-start w-full\"\n : isResponsiveHorizontal\n ? \"w-full sm:w-auto items-start sm:items-center\"\n : \"\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </StepperItemContext.Provider>\n );\n }\n);\nStepperItem.displayName = \"StepperItem\";\n\nexport type StepperSeparatorProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const StepperSeparator = React.forwardRef<HTMLDivElement, StepperSeparatorProps>(\n ({ className, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n if (!ctx) throw new Error(\"StepperSeparator must be used within a Stepper\");\n\n const isResponsiveHorizontal = ctx.orientation === \"horizontal\" && (ctx.responsive ?? true);\n\n return (\n <div\n ref={ref}\n className={cn(\n isResponsiveHorizontal\n ? \"hidden sm:block flex-1 h-[2px] bg-border transition-all duration-300\"\n : ctx.orientation === \"horizontal\"\n ? \"flex-1 h-[2px] bg-border transition-all duration-300\"\n : \"w-[2px] bg-border absolute left-[17px] top-8 bottom-0 -ml-px z-0\",\n className\n )}\n {...props}\n />\n );\n }\n);\nStepperSeparator.displayName = \"StepperSeparator\";\n\nexport type StepperTriggerProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const StepperTrigger = React.forwardRef<HTMLButtonElement, StepperTriggerProps>(\n ({ className, children, onClick, onKeyDown, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n const itemCtx = React.useContext(StepperItemContext);\n\n if (!ctx || !itemCtx) {\n throw new Error(\"StepperTrigger must be used within a StepperItem inside a Stepper\");\n }\n\n const isCompleted =\n ctx.completedSteps.includes(itemCtx.value) || itemCtx.value < ctx.activeStep;\n const isActive = ctx.activeStep === itemCtx.value;\n\n // In linear mode, user can click completed steps to go back, but not future uncompleted ones\n const isClickable = !ctx.linear || isCompleted || isActive;\n const disabled = itemCtx.disabled || !isClickable;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n ctx.setStep(itemCtx.value);\n onClick?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n\n const triggers = Array.from(\n e.currentTarget.closest('[role=\"tablist\"]')?.querySelectorAll('[role=\"tab\"]') || []\n ) as HTMLElement[];\n\n const currentIndex = triggers.indexOf(e.currentTarget);\n if (currentIndex === -1) return;\n\n let targetIndex = -1;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n targetIndex = Math.min(currentIndex + 1, triggers.length - 1);\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n targetIndex = Math.max(currentIndex - 1, 0);\n }\n\n if (targetIndex !== -1 && triggers[targetIndex]) {\n e.preventDefault();\n triggers[targetIndex].focus();\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-disabled={disabled}\n tabIndex={isActive ? 0 : -1}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={cn(\n \"flex items-center gap-3 bg-transparent border-0 p-0 text-left cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary rounded-md disabled:cursor-not-allowed disabled:opacity-50\",\n ctx.orientation === \"vertical\" ? \"w-full\" : \"\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\nStepperTrigger.displayName = \"StepperTrigger\";\n\nexport type StepperIndicatorProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const StepperIndicator = React.forwardRef<HTMLSpanElement, StepperIndicatorProps>(\n ({ className, children, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n const itemCtx = React.useContext(StepperItemContext);\n\n if (!ctx || !itemCtx) {\n throw new Error(\"StepperIndicator must be used within a StepperItem inside a Stepper\");\n }\n\n const isCompleted =\n ctx.completedSteps.includes(itemCtx.value) || itemCtx.value < ctx.activeStep;\n const isActive = ctx.activeStep === itemCtx.value;\n\n return (\n <span\n ref={ref}\n className={cn(\n \"flex h-9 w-9 shrink-0 items-center justify-center rounded-full border text-sm font-semibold transition-all duration-200\",\n isCompleted\n ? \"bg-primary border-primary text-primary-foreground\"\n : isActive\n ? \"border-primary text-primary bg-primary/10 ring-2 ring-primary/20\"\n : \"border-border text-muted-foreground bg-muted/40\",\n className\n )}\n {...props}\n >\n {children ?? (isCompleted ? \"✓\" : itemCtx.value + 1)}\n </span>\n );\n }\n);\nStepperIndicator.displayName = \"StepperIndicator\";\n\nexport type StepperTitleProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const StepperTitle = React.forwardRef<HTMLSpanElement, StepperTitleProps>(\n ({ className, ...props }, ref) => {\n const ctx = React.useContext(StepperContext);\n const itemCtx = React.useContext(StepperItemContext);\n\n if (!ctx || !itemCtx) {\n throw new Error(\"StepperTitle must be used within a StepperItem inside a Stepper\");\n }\n\n const isActive = ctx.activeStep === itemCtx.value;\n\n return (\n <span\n ref={ref}\n className={cn(\n \"text-sm font-medium transition-colors duration-200\",\n isActive ? \"text-foreground font-semibold\" : \"text-muted-foreground\",\n className\n )}\n {...props}\n />\n );\n }\n);\nStepperTitle.displayName = \"StepperTitle\";\n\nexport type StepperDescriptionProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport const StepperDescription = React.forwardRef<HTMLSpanElement, StepperDescriptionProps>(\n ({ className, ...props }, ref) => {\n const itemCtx = React.useContext(StepperItemContext);\n if (!itemCtx) throw new Error(\"StepperDescription must be used within a StepperItem\");\n\n return (\n <span\n ref={ref}\n className={cn(\"text-xs text-muted-foreground text-left block\", className)}\n {...props}\n />\n );\n }\n);\nStepperDescription.displayName = \"StepperDescription\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface AppShellProps extends React.HTMLAttributes<HTMLDivElement> {\n banner?: React.ReactNode;\n header?: React.ReactNode;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n contentWidth?: \"default\" | \"narrow\" | \"wide\" | \"full\";\n headerPosition?: \"sticky\" | \"fixed\" | \"static\";\n headerVariant?: \"glass\" | \"solid\" | \"transparent\";\n paddedContent?: boolean;\n mobileNav?: React.ReactNode;\n bottomNav?: React.ReactNode;\n}\n\nexport interface AppShellBannerProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"primary\" | \"accent\" | \"muted\";\n closable?: boolean;\n onClose?: () => void;\n children: React.ReactNode;\n}\n\nexport interface AppShellHeaderProps extends React.HTMLAttributes<HTMLElement> {\n variant?: \"glass\" | \"solid\" | \"transparent\";\n position?: \"sticky\" | \"fixed\" | \"static\";\n bordered?: boolean;\n children?: React.ReactNode;\n mobileNav?: React.ReactNode;\n}\n\nexport interface AppShellMainProps extends React.HTMLAttributes<HTMLElement> {\n width?: \"default\" | \"narrow\" | \"wide\" | \"full\";\n padded?: boolean;\n children: React.ReactNode;\n}\n\nexport interface AppShellFooterProps extends React.HTMLAttributes<HTMLElement> {\n bordered?: boolean;\n children: React.ReactNode;\n}\n\nexport const AppShellBanner = React.forwardRef<HTMLDivElement, AppShellBannerProps>(\n ({ className, variant = \"primary\", closable, onClose, children, ...props }, ref) => {\n const variantClass = {\n primary: \"bg-primary text-primary-foreground\",\n accent: \"bg-secondary text-secondary-foreground\",\n muted: \"bg-surface border-b border-border text-muted-foreground\",\n }[variant];\n\n return (\n <div\n ref={ref}\n className={cn(\n \"px-4 py-2 text-sm font-medium text-center flex items-center justify-center relative z-30\",\n variantClass,\n className\n )}\n {...props}\n >\n <div className=\"flex-1\">{children}</div>\n {closable && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1 rounded opacity-80 hover:opacity-100 transition-opacity ml-2 cursor-pointer\"\n aria-label=\"Close banner\"\n >\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n }\n);\nAppShellBanner.displayName = \"AppShellBanner\";\n\nexport const AppShellHeader = React.forwardRef<HTMLElement, AppShellHeaderProps>(\n (\n {\n className,\n variant = \"glass\",\n position = \"sticky\",\n bordered = true,\n children,\n mobileNav,\n ...props\n },\n ref\n ) => {\n const [mobileOpen, setMobileOpen] = React.useState(false);\n\n React.useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && mobileOpen) {\n setMobileOpen(false);\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [mobileOpen]);\n\n React.useEffect(() => {\n if (mobileOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [mobileOpen]);\n\n const positionClass = {\n sticky: \"sticky top-0 z-40\",\n fixed: \"fixed top-0 left-0 right-0 z-40\",\n static: \"relative z-40\",\n }[position];\n\n const variantClass = {\n glass: \"bg-surface/80 backdrop-blur-md text-foreground\",\n solid: \"bg-surface text-foreground\",\n transparent: \"bg-transparent text-foreground\",\n }[variant];\n\n return (\n <>\n <header\n ref={ref}\n className={cn(\n \"w-full transition-colors\",\n positionClass,\n variantClass,\n bordered && \"border-b border-border/60\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 h-16 flex items-center justify-between gap-4\">\n {mobileNav && (\n <button\n type=\"button\"\n onClick={() => setMobileOpen(true)}\n className=\"md:hidden p-2 -ml-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n aria-label=\"Open navigation\"\n >\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n </button>\n )}\n {children}\n </div>\n </header>\n\n {mobileNav && mobileOpen && (\n <div className=\"fixed inset-0 z-50 md:hidden flex\">\n <div\n aria-hidden=\"true\"\n onClick={() => setMobileOpen(false)}\n className=\"fixed inset-0 bg-overlay backdrop-blur-[2px] transition-opacity duration-300\"\n />\n <aside\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Mobile Navigation\"\n className=\"relative z-10 w-72 h-full bg-surface border-r border-border flex flex-col shadow-kj-lg\"\n >\n <div className=\"flex items-center justify-between p-4 border-b border-border\">\n <span className=\"text-xs font-bold uppercase tracking-wider text-muted-foreground\">\n Navigation\n </span>\n <button\n type=\"button\"\n onClick={() => setMobileOpen(false)}\n className=\"p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors cursor-pointer\"\n aria-label=\"Close navigation\"\n >\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div className=\"flex-1 overflow-y-auto p-4\">{mobileNav}</div>\n </aside>\n </div>\n )}\n </>\n );\n }\n);\nAppShellHeader.displayName = \"AppShellHeader\";\n\nexport const AppShellMain = React.forwardRef<HTMLElement, AppShellMainProps>(\n ({ className, width = \"default\", padded = true, children, ...props }, ref) => {\n const widthClass = {\n default: \"max-w-7xl mx-auto w-full\",\n narrow: \"max-w-5xl mx-auto w-full\",\n wide: \"max-w-screen-2xl mx-auto w-full\",\n full: \"max-w-none w-full\",\n }[width];\n\n return (\n <main\n ref={ref}\n className={cn(\n \"flex-1\",\n padded && \"px-4 sm:px-6 lg:px-8 py-4 sm:py-6 md:py-12\",\n widthClass,\n className\n )}\n {...props}\n >\n {children}\n </main>\n );\n }\n);\nAppShellMain.displayName = \"AppShellMain\";\n\nexport const AppShellFooter = React.forwardRef<HTMLElement, AppShellFooterProps>(\n ({ className, bordered = true, children, ...props }, ref) => {\n return (\n <footer\n ref={ref}\n className={cn(\n \"w-full bg-surface text-foreground py-12 mt-auto\",\n bordered && \"border-t border-border\",\n className\n )}\n {...props}\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">{children}</div>\n </footer>\n );\n }\n);\nAppShellFooter.displayName = \"AppShellFooter\";\n\ntype AppShellComponent = React.ForwardRefExoticComponent<\n AppShellProps & React.RefAttributes<HTMLDivElement>\n> & {\n Banner: typeof AppShellBanner;\n Header: typeof AppShellHeader;\n Main: typeof AppShellMain;\n Footer: typeof AppShellFooter;\n};\n\nexport const AppShell = React.forwardRef<HTMLDivElement, AppShellProps>(\n (\n {\n className,\n banner,\n header,\n children,\n footer,\n contentWidth = \"default\",\n headerPosition = \"sticky\",\n headerVariant = \"glass\",\n paddedContent = true,\n mobileNav,\n bottomNav,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"min-h-screen bg-canvas text-foreground flex flex-col antialiased\",\n className\n )}\n {...props}\n >\n {banner && <AppShellBanner>{banner}</AppShellBanner>}\n {header && (\n <AppShellHeader variant={headerVariant} position={headerPosition} mobileNav={mobileNav}>\n {header}\n </AppShellHeader>\n )}\n <AppShellMain width={contentWidth} padded={paddedContent}>\n {children}\n </AppShellMain>\n {footer && <AppShellFooter>{footer}</AppShellFooter>}\n {bottomNav && (\n <div className=\"md:hidden sticky bottom-0 z-30 w-full bg-surface border-t border-border\">\n {bottomNav}\n </div>\n )}\n </div>\n );\n }\n) as AppShellComponent;\n\nAppShell.displayName = \"AppShell\";\nAppShell.Banner = AppShellBanner;\nAppShell.Header = AppShellHeader;\nAppShell.Main = AppShellMain;\nAppShell.Footer = AppShellFooter;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\n\nexport type RatingSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type RatingIconType = \"star\" | \"heart\" | \"flame\" | \"shield\" | \"thumb\";\n\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n value?: number;\n defaultValue?: number;\n max?: number;\n precision?: number;\n size?: RatingSize;\n icon?: RatingIconType | React.ComponentType<{ className?: string }>;\n color?: string;\n emptyColor?: string;\n allowClear?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n hoverPreview?: boolean;\n showValue?: boolean;\n showCount?: boolean;\n count?: number;\n name?: string;\n onChange?: (value: number) => void;\n onHoverChange?: (value: number | null) => void;\n}\n\nconst sizeClasses: Record<RatingSize, { wrapper: string; star: string; text: string }> = {\n sm: { wrapper: \"kj-rating-sm gap-1\", star: \"w-4 h-4\", text: \"text-xs\" },\n md: { wrapper: \"kj-rating-md gap-1.5\", star: \"w-5 h-5\", text: \"text-sm\" },\n lg: { wrapper: \"kj-rating-lg gap-2\", star: \"w-6 h-6\", text: \"text-base\" },\n xl: { wrapper: \"kj-rating-xl gap-2.5\", star: \"w-8 h-8\", text: \"text-lg\" },\n};\n\nconst iconPaths: Record<RatingIconType, string> = {\n star: \"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\",\n heart:\n \"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\",\n flame:\n \"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z\",\n shield:\n \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67 0C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n thumb:\n \"M7 10v12M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\",\n};\n\nfunction roundToPrecision(value: number, precision: number): number {\n const inv = 1 / precision;\n return Math.round(value * inv) / inv;\n}\n\nfunction isCssColor(str: string): boolean {\n return str.startsWith(\"#\") || str.startsWith(\"rgb\") || str.startsWith(\"hsl\");\n}\n\nexport const Rating = React.forwardRef<HTMLDivElement, RatingProps>(\n (\n {\n value: controlledValue,\n defaultValue = 0,\n max = 5,\n precision = 1,\n size = \"md\",\n icon = \"star\",\n color = \"#f59e0b\",\n emptyColor = \"#e5e7eb\",\n allowClear = true,\n disabled = false,\n readOnly = false,\n hoverPreview = true,\n showValue = false,\n showCount = false,\n count,\n name,\n onChange,\n onHoverChange,\n className,\n onKeyDown,\n onMouseLeave,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref\n ) => {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = React.useState<number>(\n controlledValue ?? defaultValue\n );\n const [hoverValue, setHoverValue] = React.useState<number | null>(null);\n const instanceId = React.useId();\n\n React.useEffect(() => {\n if (isControlled) {\n setInternalValue(controlledValue);\n }\n }, [isControlled, controlledValue]);\n\n const currentValue = isControlled ? controlledValue : internalValue;\n const displayValue = hoverPreview && hoverValue !== null ? hoverValue : currentValue;\n\n const handleValueChange = (newValue: number) => {\n if (disabled || readOnly) return;\n const clamped = Math.max(0, Math.min(max, roundToPrecision(newValue, precision)));\n if (!isControlled) {\n setInternalValue(clamped);\n }\n onChange?.(clamped);\n };\n\n const getEventValue = (e: React.MouseEvent<HTMLButtonElement>, starIndex: number): number => {\n const target = e.currentTarget;\n const width = target.offsetWidth;\n const nativeEv = e.nativeEvent as any;\n const offsetX = nativeEv?.offsetX ?? nativeEv?.nativeEvent?.offsetX ?? (e as any).offsetX;\n\n if (width > 0 && offsetX !== undefined && offsetX !== null) {\n const ratio = Math.max(0.001, Math.min(1, offsetX / width));\n const stepInStar = Math.ceil(ratio / precision) * precision;\n return Math.min(max, Math.max(precision, starIndex - 1 + stepInStar));\n }\n return starIndex;\n };\n\n const handleStarClick = (e: React.MouseEvent<HTMLButtonElement>, starIndex: number) => {\n if (disabled || readOnly) return;\n const targetValue = getEventValue(e, starIndex);\n let nextValue = targetValue;\n if (allowClear && targetValue === currentValue) {\n nextValue = 0;\n }\n handleValueChange(nextValue);\n };\n\n const handleStarMouseMove = (e: React.MouseEvent<HTMLButtonElement>, starIndex: number) => {\n if (disabled || readOnly) return;\n if (hoverPreview) {\n const hoveredVal = getEventValue(e, starIndex);\n setHoverValue(hoveredVal);\n onHoverChange?.(hoveredVal);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled || readOnly) {\n onKeyDown?.(e);\n return;\n }\n\n let nextVal: number | null = null;\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n nextVal = Math.min(max, currentValue + precision);\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n nextVal = Math.max(0, currentValue - precision);\n break;\n case \"Home\":\n nextVal = 0;\n break;\n case \"End\":\n nextVal = max;\n break;\n }\n\n if (nextVal !== null) {\n e.preventDefault();\n handleValueChange(nextVal);\n }\n\n onKeyDown?.(e);\n };\n\n const handleContainerMouseLeave = (e: React.MouseEvent<HTMLDivElement>) => {\n if (hoverPreview) {\n setHoverValue(null);\n onHoverChange?.(null);\n }\n onMouseLeave?.(e);\n };\n\n const sizing = sizeClasses[size] || sizeClasses.md;\n\n return (\n <div\n ref={ref}\n role={readOnly ? \"img\" : \"radiogroup\"}\n tabIndex={disabled || readOnly ? -1 : 0}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n aria-label={ariaLabel || (readOnly ? `Rated ${displayValue} out of ${max}` : \"Rating\")}\n onKeyDown={handleKeyDown}\n onMouseLeave={handleContainerMouseLeave}\n className={cn(\n \"inline-flex items-center select-none focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md\",\n disabled && \"opacity-50 cursor-not-allowed\",\n readOnly && \"cursor-default\",\n !disabled && !readOnly && \"cursor-pointer\",\n sizing.wrapper,\n className\n )}\n {...props}\n >\n {name && <input type=\"hidden\" name={name} value={currentValue} />}\n\n <div className=\"inline-flex items-center gap-0.5\">\n {Array.from({ length: max }, (_, index) => {\n const starIndex = index + 1;\n const fillFraction = Math.max(0, Math.min(1, displayValue - index));\n const gradientId = `rating-grad-${instanceId}-${index}-${Math.round(\n fillFraction * 100\n )}`;\n\n const CustomIconComponent =\n typeof icon === \"function\" || typeof icon === \"object\"\n ? (icon as React.ComponentType<{ className?: string }>)\n : null;\n const builtInIconType = typeof icon === \"string\" ? icon : \"star\";\n const pathD = iconPaths[builtInIconType] || iconPaths.star;\n\n return (\n <button\n key={index}\n type=\"button\"\n tabIndex={-1}\n data-testid=\"rating-star\"\n role={readOnly ? undefined : \"radio\"}\n aria-checked={readOnly ? undefined : displayValue >= starIndex}\n aria-label={`${starIndex} of ${max} stars`}\n disabled={disabled}\n onClick={(e) => handleStarClick(e, starIndex)}\n onMouseMove={(e) => handleStarMouseMove(e, starIndex)}\n onMouseEnter={(e) => handleStarMouseMove(e, starIndex)}\n className={cn(\n \"p-0.5 focus:outline-none transition-transform active:scale-95 disabled:scale-100\",\n sizing.star\n )}\n >\n {CustomIconComponent ? (\n <CustomIconComponent\n className={cn(\n \"w-full h-full\",\n fillFraction >= 0.5\n ? !isCssColor(color) && color\n : !isCssColor(emptyColor) && emptyColor\n )}\n />\n ) : (\n <svg\n viewBox=\"0 0 24 24\"\n className=\"w-full h-full\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {fillFraction > 0 && fillFraction < 1 && (\n <defs>\n <linearGradient id={gradientId} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n {isCssColor(color) ? (\n <stop offset={`${fillFraction * 100}%`} stopColor={color} />\n ) : (\n <stop\n offset={`${fillFraction * 100}%`}\n stopColor=\"currentColor\"\n className={color}\n />\n )}\n {isCssColor(emptyColor) ? (\n <stop offset={`${fillFraction * 100}%`} stopColor={emptyColor} />\n ) : (\n <stop\n offset={`${fillFraction * 100}%`}\n stopColor=\"currentColor\"\n className={emptyColor}\n />\n )}\n </linearGradient>\n </defs>\n )}\n <path\n d={pathD}\n fill={\n fillFraction === 1\n ? isCssColor(color)\n ? color\n : undefined\n : fillFraction === 0\n ? isCssColor(emptyColor)\n ? emptyColor\n : undefined\n : `url(#${gradientId})`\n }\n className={\n fillFraction === 1\n ? !isCssColor(color)\n ? color\n : undefined\n : fillFraction === 0\n ? !isCssColor(emptyColor)\n ? emptyColor\n : undefined\n : undefined\n }\n stroke=\"none\"\n />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n\n {showValue && (\n <span className={cn(\"font-medium text-foreground ml-1.5\", sizing.text)}>\n {displayValue}\n </span>\n )}\n\n {showCount && count !== undefined && (\n <span className={cn(\"text-muted-foreground ml-1\", sizing.text)}>({count})</span>\n )}\n </div>\n );\n }\n);\n\nRating.displayName = \"Rating\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { Label, Hint } from \"../field\";\nimport { Rating, type RatingProps } from \"./rating\";\n\nexport interface RatingFieldProps extends RatingProps {\n label?: React.ReactNode;\n helperText?: React.ReactNode;\n errorMessage?: React.ReactNode;\n required?: boolean;\n containerClassName?: string;\n}\n\nexport const RatingField = React.forwardRef<HTMLDivElement, RatingFieldProps>(\n (\n {\n id: customId,\n label,\n helperText,\n errorMessage,\n required,\n className,\n containerClassName,\n \"aria-describedby\": ariaDescribedBy,\n ...ratingProps\n },\n ref\n ) => {\n const generatedId = React.useId();\n const id = customId || generatedId;\n const helperId = helperText ? `${id}-helper` : undefined;\n const errorId = errorMessage ? `${id}-error` : undefined;\n\n const describedBy = [ariaDescribedBy, helperId, errorId].filter(Boolean).join(\" \") || undefined;\n\n return (\n <div className={cn(\"flex flex-col gap-1.5\", containerClassName)}>\n {label && (\n <Label htmlFor={id} required={required}>\n {label}\n </Label>\n )}\n <Rating\n ref={ref}\n id={id}\n className={className}\n aria-describedby={describedBy}\n {...ratingProps}\n />\n {helperText && <Hint id={helperId}>{helperText}</Hint>}\n {errorMessage && (\n <Hint id={errorId} error>\n {errorMessage}\n </Hint>\n )}\n </div>\n );\n }\n);\n\nRatingField.displayName = \"RatingField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { Rating, type RatingSize, type RatingIconType } from \"./rating\";\nimport { Progress } from \"../progress\";\n\nexport interface RatingDistributionItem {\n stars: number;\n count: number;\n percentage: number;\n}\n\nexport interface RatingSummaryProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n average: number;\n totalCount: number;\n distribution: RatingDistributionItem[];\n max?: number;\n size?: RatingSize;\n icon?: RatingIconType | React.ComponentType<{ className?: string }>;\n}\n\nexport const RatingSummary = React.forwardRef<HTMLDivElement, RatingSummaryProps>(\n (\n { average, totalCount, distribution, max = 5, size = \"md\", icon = \"star\", className, ...props },\n ref\n ) => {\n const formattedAverage = Number.isInteger(average) ? average.toString() : average.toFixed(1);\n\n const formattedTotalCount = totalCount.toLocaleString();\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-6 sm:flex-row sm:items-center sm:gap-8 p-4 rounded-xl border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n >\n {/* Average Score Summary Section */}\n <div className=\"flex flex-col items-center justify-center p-4 rounded-lg bg-muted/40 text-center min-w-[140px]\">\n <div className=\"text-4xl font-bold tracking-tight text-foreground\">\n {formattedAverage}\n </div>\n <div className=\"my-1.5\">\n <Rating\n value={average}\n max={max}\n size={size}\n icon={icon}\n readOnly\n allowClear={false}\n hoverPreview={false}\n />\n </div>\n <div className=\"text-xs text-muted-foreground\">{formattedTotalCount} total ratings</div>\n </div>\n\n {/* Distribution Breakdown Progress Bars Section */}\n <div className=\"flex-1 flex flex-col gap-2.5\">\n {distribution.map((item) => (\n <div key={item.stars} className=\"flex items-center gap-3 text-sm\">\n <span className=\"w-12 text-right font-medium text-foreground whitespace-nowrap\">\n {item.stars} star\n </span>\n <Progress\n value={item.percentage}\n aria-label={`${item.stars} star ratings: ${item.percentage}%`}\n className=\"h-2.5 flex-1\"\n />\n <span className=\"w-12 text-right text-xs text-muted-foreground font-mono\">\n {item.percentage}%\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n }\n);\n\nRatingSummary.displayName = \"RatingSummary\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\nimport { Button, buttonVariants } from \"./button\";\n\nexport type PricingFeatureItem =\n | string\n | {\n text: string;\n included?: boolean;\n tooltip?: string;\n };\n\nexport interface PricingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n price: string | number;\n period?: string;\n description?: string;\n features?: PricingFeatureItem[];\n variant?: \"default\" | \"featured\" | \"outline\";\n badge?: string;\n popular?: boolean;\n ctaText?: string;\n onCtaClick?: React.MouseEventHandler<HTMLButtonElement>;\n ctaHref?: string;\n cta?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport const PricingCard = React.forwardRef<HTMLDivElement, PricingCardProps>(\n (\n {\n className,\n name,\n price,\n period,\n description,\n features = [],\n variant,\n badge,\n popular = false,\n ctaText = \"Get Started\",\n onCtaClick,\n ctaHref,\n cta,\n disabled = false,\n ...props\n },\n ref\n ) => {\n const resolvedVariant = variant || (popular ? \"featured\" : \"default\");\n const displayBadge = badge || (popular ? \"Most Popular\" : undefined);\n\n const isFeatured = resolvedVariant === \"featured\";\n\n return (\n <Card\n ref={ref}\n className={cn(\n \"relative flex flex-col p-6 transition-all duration-300\",\n isFeatured\n ? \"border-amber-500/80 shadow-kj-lg ring-1 ring-amber-500/30\"\n : resolvedVariant === \"outline\"\n ? \"border-border/80 bg-transparent shadow-none\"\n : \"border-border shadow-kj-sm\",\n className\n )}\n {...props}\n >\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div>\n <h3 className=\"text-xl font-bold tracking-tight text-foreground\">{name}</h3>\n {description && <p className=\"mt-1 text-xs text-muted-foreground\">{description}</p>}\n </div>\n {displayBadge && (\n <span className=\"rounded-full bg-amber-500 px-3 py-0.5 text-[0.7rem] font-bold uppercase tracking-wider text-black shadow-sm shrink-0 mt-0.5\">\n {displayBadge}\n </span>\n )}\n </div>\n\n <div className=\"mb-6 flex items-baseline gap-1\">\n <span className=\"text-3xl font-extrabold tracking-tight text-foreground\">{price}</span>\n {period && <span className=\"text-xs font-medium text-muted-foreground\">{period}</span>}\n </div>\n\n {features.length > 0 && (\n <ul className=\"mb-6 flex flex-1 flex-col gap-2.5 p-0 text-xs list-none\">\n {features.map((feature, idx) => {\n const text = typeof feature === \"string\" ? feature : feature.text;\n const included = typeof feature === \"string\" ? true : (feature.included ?? true);\n\n return (\n <li key={idx} className=\"flex items-center gap-2.5\">\n <span\n className={cn(\n \"flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[0.65rem] font-bold\",\n included\n ? \"bg-amber-500/15 text-amber-600 dark:text-amber-400\"\n : \"bg-muted text-muted-foreground/60\"\n )}\n >\n {included ? \"✓\" : \"✕\"}\n </span>\n <span\n className={cn(\n included ? \"text-foreground\" : \"text-muted-foreground line-through opacity-70\"\n )}\n >\n {text}\n </span>\n </li>\n );\n })}\n </ul>\n )}\n\n <div className=\"mt-auto pt-2\">\n {cta ? (\n cta\n ) : ctaHref ? (\n /* eslint-disable-next-line jsx-a11y/anchor-is-valid */\n <a\n href={disabled ? undefined : ctaHref}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : undefined}\n className={cn(\n buttonVariants({ variant: isFeatured ? \"primary\" : \"outline\" }),\n \"w-full justify-center\",\n disabled && \"pointer-events-none opacity-50\"\n )}\n >\n {ctaText}\n </a>\n ) : (\n <Button\n variant={isFeatured ? \"primary\" : \"outline\"}\n className=\"w-full justify-center\"\n onClick={onCtaClick}\n disabled={disabled}\n >\n {ctaText}\n </Button>\n )}\n </div>\n </Card>\n );\n }\n);\nPricingCard.displayName = \"PricingCard\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\nimport { Badge } from \"./badge\";\nimport { Avatar } from \"./avatar\";\n\nexport interface BlogCardAuthor {\n name: string;\n avatarUrl?: string;\n role?: string;\n}\n\nexport interface BlogCardProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"title\"> {\n title: string;\n description?: string;\n coverUrl?: string;\n coverAlt?: string;\n category?: string;\n readTime?: string;\n publishedAt?: string;\n author?: BlogCardAuthor;\n orientation?: \"vertical\" | \"horizontal\";\n href?: string;\n}\n\nexport const BlogCard = React.forwardRef<HTMLElement, BlogCardProps>(\n (\n {\n className,\n title,\n description,\n coverUrl,\n coverAlt,\n category,\n readTime,\n publishedAt,\n author,\n orientation = \"vertical\",\n href,\n ...props\n },\n ref\n ) => {\n const isHorizontal = orientation === \"horizontal\";\n const isInteractive = Boolean(href || props.onClick);\n\n return (\n <Card\n ref={ref}\n as={href ? \"a\" : \"div\"}\n href={href}\n interactive={isInteractive}\n className={cn(\n \"group flex overflow-hidden transition-all duration-300\",\n isHorizontal ? \"flex-col sm:flex-row\" : \"flex-col\",\n className\n )}\n {...props}\n >\n {coverUrl && (\n <div\n className={cn(\n \"relative overflow-hidden bg-muted shrink-0\",\n isHorizontal ? \"w-full sm:w-2/5 min-h-[160px]\" : \"w-full aspect-[16/9]\"\n )}\n >\n <img\n src={coverUrl}\n alt={coverAlt || title}\n className=\"h-full w-full object-cover transition-transform duration-300 group-hover:scale-105\"\n />\n </div>\n )}\n\n <div className=\"flex flex-1 flex-col justify-between p-5\">\n <div>\n <div className=\"mb-2 flex items-center gap-2 text-[0.75rem] text-muted-foreground\">\n {category && <Badge variant=\"secondary\">{category}</Badge>}\n {(readTime || publishedAt) && (\n <span>\n {publishedAt} {publishedAt && readTime && \"•\"} {readTime}\n </span>\n )}\n </div>\n\n <h3 className=\"text-base font-bold tracking-tight text-foreground transition-colors group-hover:text-primary\">\n {title}\n </h3>\n\n {description && (\n <p className=\"mt-1.5 text-xs text-muted-foreground line-clamp-2\">{description}</p>\n )}\n </div>\n\n {author && (\n <div className=\"mt-4 flex items-center gap-2.5 border-t border-border/60 pt-3\">\n <Avatar src={author.avatarUrl} alt={author.name} size=\"sm\">\n {author.name.charAt(0)}\n </Avatar>\n <div className=\"flex flex-col text-xs\">\n <span className=\"font-semibold text-foreground\">{author.name}</span>\n {author.role && (\n <span className=\"text-[0.7rem] text-muted-foreground\">{author.role}</span>\n )}\n </div>\n </div>\n )}\n </div>\n </Card>\n );\n }\n);\nBlogCard.displayName = \"BlogCard\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Card } from \"./card\";\nimport { Badge } from \"./badge\";\n\nexport interface ProjectCardMetric {\n label?: string;\n value: string | number;\n icon?: React.ReactNode;\n}\n\nexport interface ProjectCardStatus {\n label: string;\n variant?: \"success\" | \"warning\" | \"danger\" | \"neutral\" | \"info\";\n}\n\nexport interface ProjectCardProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"title\"> {\n title: string;\n description?: string;\n status?: ProjectCardStatus;\n techStack?: string[];\n metrics?: ProjectCardMetric[];\n updatedAt?: string;\n actions?: React.ReactNode;\n}\n\nexport const ProjectCard = React.forwardRef<HTMLElement, ProjectCardProps>(\n (\n {\n className,\n title,\n description,\n status,\n techStack = [],\n metrics = [],\n updatedAt,\n actions,\n href,\n ...props\n },\n ref\n ) => {\n const isInteractive = Boolean(href || props.onClick);\n\n return (\n <Card\n ref={ref}\n as={href ? \"a\" : \"div\"}\n href={href}\n interactive={isInteractive}\n className={cn(\n \"group flex flex-col justify-between p-5 transition-all duration-300\",\n className\n )}\n {...props}\n >\n <div>\n <div className=\"flex items-start justify-between gap-3\">\n <h3 className=\"text-base font-bold tracking-tight text-foreground transition-colors group-hover:text-primary\">\n {title}\n </h3>\n {status && (\n <Badge variant={status.variant || \"neutral\"} className=\"shrink-0 text-[0.65rem]\">\n {status.label}\n </Badge>\n )}\n </div>\n\n {description && (\n <p className=\"mt-1.5 text-xs text-muted-foreground line-clamp-2\">{description}</p>\n )}\n\n {techStack.length > 0 && (\n <div className=\"mt-3.5 flex flex-wrap gap-1.5\">\n {techStack.map((tech) => (\n <Badge key={tech} variant=\"neutral\" className=\"text-[0.65rem] py-0 px-2 font-mono\">\n {tech}\n </Badge>\n ))}\n </div>\n )}\n </div>\n\n {(metrics.length > 0 || updatedAt || actions) && (\n <div className=\"mt-4 flex items-center justify-between border-t border-border/60 pt-3 text-[0.75rem] text-muted-foreground\">\n <div className=\"flex items-center gap-3\">\n {metrics.map((metric, idx) => (\n <span\n key={metric.label ? `${metric.label}-${idx}` : idx}\n className=\"flex items-center gap-1 font-mono font-medium\"\n >\n {metric.icon && <span className=\"shrink-0\">{metric.icon}</span>}\n <span>{metric.value}</span>\n {metric.label && <span className=\"text-muted-foreground/70\">{metric.label}</span>}\n </span>\n ))}\n {updatedAt && <span>{updatedAt}</span>}\n </div>\n\n {actions && (\n <div\n onClick={(e) => e.stopPropagation()}\n className=\"flex items-center gap-1 shrink-0\"\n >\n {actions}\n </div>\n )}\n </div>\n )}\n </Card>\n );\n }\n);\nProjectCard.displayName = \"ProjectCard\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface NotificationItemData {\n /** Unique stable identifier. */\n id: string;\n /** Primary notification text. */\n title: React.ReactNode;\n /** Optional second line (preview, quote, etc.). */\n body?: React.ReactNode;\n /**\n * Leading visual (28×28 circle).\n * SVG ReactNode → icon mode. If avatarSrc is also provided, avatarSrc wins.\n */\n icon?: React.ReactNode;\n /** Image URL for avatar mode. */\n avatarSrc?: string;\n /** 1–2 character initials for avatar fallback. */\n avatarFallback?: string;\n /** Shown as a relative time string. */\n timestamp: Date | string;\n /** Defaults to false (unread). */\n read?: boolean;\n /**\n * If provided, the row renders as <a href={href}>.\n * Clicking marks the item read and navigates.\n */\n href?: string;\n /** Called after the row is clicked (after mark-read). */\n onClick?: (id: string) => void;\n}\n\n// ---------------------------------------------------------------------------\n// Relative timestamp utility (exported for unit tests)\n// ---------------------------------------------------------------------------\n\nexport function formatRelativeTime(date: Date | string): string {\n const d = typeof date === \"string\" ? new Date(date) : date;\n if (isNaN(d.getTime())) return \"\";\n const diffMs = Date.now() - d.getTime();\n const diffMin = Math.floor(diffMs / 60_000);\n const diffH = Math.floor(diffMs / 3_600_000);\n const diffD = Math.floor(diffMs / 86_400_000);\n\n if (diffMin < 1) return \"Just now\";\n if (diffMin < 60) return `${diffMin} min ago`;\n if (diffH < 24) return diffH === 1 ? \"1 hour ago\" : `${diffH} hours ago`;\n // \"Yesterday\" fires from 24h to 47h59m (floor-based). Intentional — matches common app conventions.\n if (diffD === 1) return \"Yesterday\";\n if (diffD < 7) return `${diffD} days ago`;\n return d.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n}\n\n// ---------------------------------------------------------------------------\n// useInboxState — optional local-state convenience hook\n// ---------------------------------------------------------------------------\n\nexport interface InboxStateReturn {\n items: NotificationItemData[];\n unreadCount: number;\n markRead: (id: string) => void;\n markAllRead: () => void;\n dismiss: (id: string) => void;\n}\n\n/**\n * Local-state convenience hook for InboxPopover.\n * Intended for demos, Storybook stories, and simple apps.\n *\n * NOTE: `initial` is used only as the seed value for `useState`.\n * Re-rendering the parent with a new `initial` array does NOT reset\n * the hook's state. This is intentional — the hook owns its state\n * independently after mount. To reset from the outside, remount the\n * component using a `key` prop.\n */\nexport function useInboxState(initial: NotificationItemData[]): InboxStateReturn {\n const [items, setItems] = React.useState<NotificationItemData[]>(initial);\n\n const unreadCount = items.filter((i) => !i.read).length;\n\n const markRead = React.useCallback((id: string) => {\n setItems((prev) => prev.map((item) => (item.id === id ? { ...item, read: true } : item)));\n }, []);\n\n const markAllRead = React.useCallback(() => {\n setItems((prev) => prev.map((item) => ({ ...item, read: true })));\n }, []);\n\n const dismiss = React.useCallback((id: string) => {\n setItems((prev) => prev.filter((item) => item.id !== id));\n }, []);\n\n return { items, unreadCount, markRead, markAllRead, dismiss };\n}\n\n// ---------------------------------------------------------------------------\n// InboxPopover — context + root\n// ---------------------------------------------------------------------------\n\ninterface InboxCtx {\n open: boolean;\n setOpen: (v: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n}\nconst InboxContext = React.createContext<InboxCtx | null>(null);\n\nfunction useInboxContext(part: string): InboxCtx {\n const ctx = React.useContext(InboxContext);\n if (!ctx) throw new Error(`${part} must be used inside <InboxPopover>`);\n return ctx;\n}\n\nexport interface InboxPopoverProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n}\n\nexport function InboxPopover({\n children,\n className,\n open: openProp,\n onOpenChange,\n}: InboxPopoverProps) {\n const [openState, setOpenState] = React.useState(false);\n const controlled = openProp !== undefined;\n const open = controlled ? openProp : openState;\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n const ref = React.useRef<HTMLDivElement>(null);\n\n const setOpen = React.useCallback(\n (v: boolean) => {\n if (!controlled) setOpenState(v);\n onOpenChange?.(v);\n },\n [controlled, onOpenChange]\n );\n\n React.useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n const onEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onDoc);\n document.addEventListener(\"keydown\", onEsc);\n return () => {\n document.removeEventListener(\"mousedown\", onDoc);\n document.removeEventListener(\"keydown\", onEsc);\n };\n }, [open, setOpen]);\n\n const ctxValue = React.useMemo(() => ({ open, setOpen, triggerRef }), [open, setOpen]);\n\n return (\n <InboxContext.Provider value={ctxValue}>\n <div ref={ref} className={cn(\"relative inline-block\", className)}>\n {children}\n </div>\n </InboxContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InboxTrigger — bell button with unread badge\n// ---------------------------------------------------------------------------\n\nexport interface InboxTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Badge count. Hidden when 0 or undefined. */\n unreadCount?: number;\n /** Accessible label (default: \"Notifications\"). */\n label?: string;\n}\n\nexport function InboxTrigger({\n unreadCount,\n label = \"Notifications\",\n className,\n onClick,\n ...props\n}: InboxTriggerProps) {\n const ctx = useInboxContext(\"InboxTrigger\");\n const setRef = (node: HTMLButtonElement | null) => {\n // eslint-disable-next-line react-hooks/immutability\n ctx.triggerRef.current = node;\n };\n\n const displayCount =\n unreadCount == null || unreadCount <= 0 ? null : unreadCount > 99 ? \"99+\" : String(unreadCount);\n\n const defaultLabel = displayCount ? `${label} (${displayCount} unread)` : label;\n\n return (\n <button\n ref={setRef}\n type=\"button\"\n aria-label={defaultLabel}\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open}\n className={cn(\n \"relative inline-flex items-center justify-center w-9 h-9 rounded-full\",\n \"bg-surface border border-border text-muted-foreground\",\n \"hover:bg-muted hover:text-foreground transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary\",\n className\n )}\n onClick={(e) => {\n ctx.setOpen(!ctx.open);\n onClick?.(e);\n }}\n {...props}\n >\n {/* Bell icon */}\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n\n {/* Unread badge */}\n {displayCount != null && (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"absolute -top-0.5 -right-0.5 min-w-[16px] h-4 px-1\",\n \"rounded-full bg-primary text-primary-foreground\",\n \"text-[9px] font-bold leading-4 flex items-center justify-center\"\n )}\n >\n {displayCount}\n </span>\n )}\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// NotificationItem\n// ---------------------------------------------------------------------------\n\nexport interface NotificationItemProps {\n item: NotificationItemData;\n onDismiss?: (id: string) => void;\n className?: string;\n}\n\nexport function NotificationItem({ item, onDismiss, className }: NotificationItemProps) {\n const leadingSlot = item.avatarSrc ? (\n <img\n src={item.avatarSrc}\n alt={item.avatarFallback ?? \"\"}\n className=\"w-7 h-7 rounded-full object-cover flex-shrink-0\"\n />\n ) : item.avatarFallback ? (\n <span className=\"w-7 h-7 rounded-full bg-primary/20 text-primary text-[10px] font-bold flex items-center justify-center flex-shrink-0 select-none\">\n {item.avatarFallback}\n </span>\n ) : item.icon ? (\n <span className=\"w-7 h-7 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0 text-primary\">\n {item.icon}\n </span>\n ) : null;\n\n const textBlock = (\n <div className=\"flex-1 min-w-0\">\n <p\n className={cn(\n \"text-sm leading-snug\",\n item.read ? \"text-muted-foreground\" : \"text-foreground\"\n )}\n >\n {item.title}\n </p>\n {item.body && <p className=\"text-xs text-muted-foreground mt-0.5 truncate\">{item.body}</p>}\n <p className=\"text-xs text-muted-foreground mt-1\">{formatRelativeTime(item.timestamp)}</p>\n </div>\n );\n\n const sharedClass = cn(\n \"group relative flex items-start gap-2.5 px-3.5 py-2.5 w-full text-left\",\n \"border-b border-border last:border-0\",\n !item.read && \"bg-primary/[0.04]\",\n \"hover:bg-muted/50 transition-colors\",\n className\n );\n\n const mainContent = (\n <>\n {leadingSlot}\n {textBlock}\n </>\n );\n\n const mainAction = item.href ? (\n <a\n href={item.href}\n onClick={() => item.onClick?.(item.id)}\n className=\"flex-1 flex items-start gap-2.5 min-w-0 text-left outline-none\"\n >\n {mainContent}\n </a>\n ) : (\n <button\n type=\"button\"\n onClick={() => item.onClick?.(item.id)}\n className=\"flex-1 flex items-start gap-2.5 min-w-0 text-left outline-none\"\n >\n {mainContent}\n </button>\n );\n\n return (\n <div className={sharedClass}>\n {mainAction}\n <div className=\"flex items-start gap-2 flex-shrink-0 mt-0.5\">\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onDismiss?.(item.id);\n }}\n className={cn(\n \"text-muted-foreground hover:text-foreground transition-colors\",\n \"opacity-0 group-hover:opacity-100 focus:opacity-100\",\n \"text-base leading-none p-0.5 rounded\"\n )}\n >\n ×\n </button>\n <span\n aria-label={item.read ? undefined : \"Unread\"}\n aria-hidden={item.read ? true : undefined}\n className={cn(\n \"w-[7px] h-[7px] rounded-full flex-shrink-0 mt-1\",\n item.read ? \"border border-border\" : \"bg-primary\"\n )}\n />\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InboxContent — full panel\n// ---------------------------------------------------------------------------\n\nexport interface InboxContentProps {\n items: NotificationItemData[];\n onMarkAllRead?: () => void;\n onDismiss?: (id: string) => void;\n viewAllHref?: string;\n viewAllLabel?: string;\n emptyState?: React.ReactNode;\n align?: \"auto\" | \"start\" | \"end\";\n width?: number | string;\n maxHeight?: number | string;\n className?: string;\n}\n\nexport function InboxContent({\n items,\n onMarkAllRead,\n onDismiss,\n viewAllHref,\n viewAllLabel = \"View all notifications\",\n emptyState,\n align = \"auto\",\n width = 360,\n maxHeight = 320,\n className,\n}: InboxContentProps) {\n const ctx = useInboxContext(\"InboxContent\");\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (ctx.open) ref.current?.focus();\n }, [ctx.open]);\n\n if (!ctx.open) return null;\n\n const allRead = items.length === 0 || items.every((i) => i.read);\n\n const defaultEmptyState = (\n <div className=\"flex flex-col items-center justify-center py-10 px-5 text-center\">\n <span className=\"w-10 h-10 rounded-full bg-muted flex items-center justify-center mb-3 text-muted-foreground\">\n <svg\n width={18}\n height={18}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n </span>\n <p className=\"text-sm font-medium text-foreground\">All caught up</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">No new notifications</p>\n </div>\n );\n\n const alignClass = {\n start: \"left-0 top-[calc(100%+6px)]\",\n end: \"right-0 top-[calc(100%+6px)]\",\n auto: \"right-0 sm:right-0 left-auto top-[calc(100%+6px)] max-sm:left-1/2 max-sm:-translate-x-1/2\",\n }[align ?? \"auto\"];\n\n return (\n <div\n ref={ref}\n role=\"dialog\"\n aria-label=\"Notifications\"\n tabIndex={-1}\n style={{ width: typeof width === \"number\" ? `${width}px` : width }}\n className={cn(\n \"absolute z-40 max-w-[calc(100vw-1.5rem)]\",\n \"bg-surface border border-border rounded-kj-md shadow-kj-lg outline-none\",\n \"animate-[kjpop_.12s_ease]\",\n alignClass,\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-3.5 py-2.5 border-b border-border\">\n <span className=\"text-sm font-semibold text-foreground\">Notifications</span>\n <button\n type=\"button\"\n disabled={allRead}\n aria-disabled={allRead}\n onClick={allRead ? undefined : onMarkAllRead}\n className={cn(\n \"text-xs font-medium transition-colors\",\n allRead\n ? \"text-muted-foreground cursor-not-allowed\"\n : \"text-primary hover:text-primary/80\"\n )}\n >\n Mark all read\n </button>\n </div>\n\n {/* List or empty state */}\n {items.length === 0 ? (\n (emptyState ?? defaultEmptyState)\n ) : (\n <div className=\"overflow-y-auto\" style={{ maxHeight }}>\n {items.map((item) => (\n <NotificationItem key={item.id} item={item} onDismiss={onDismiss} />\n ))}\n </div>\n )}\n\n {/* Footer */}\n {items.length > 0 && viewAllHref && (\n <div className=\"border-t border-border px-3.5 py-2.5 text-center\">\n <a\n href={viewAllHref}\n className=\"text-xs font-medium text-primary hover:text-primary/80 transition-colors\"\n >\n {viewAllLabel} →\n </a>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"./popover\";\nimport { Field, Label, Hint } from \"./field\";\n\nexport const DEFAULT_COLOR_SWATCHES = [\n \"#EF4444\", // Red\n \"#F97316\", // Orange\n \"#F59E0B\", // Amber\n \"#10B981\", // Emerald\n \"#14B8A6\", // Teal\n \"#06B6D4\", // Sky\n \"#3B82F6\", // Blue\n \"#6366F1\", // Indigo\n \"#8B5CF6\", // Purple\n \"#EC4899\", // Pink\n \"#64748B\", // Slate\n \"#1E293B\", // Charcoal\n] as const;\n\nexport function isValidHex(hex: string): boolean {\n const trimmed = hex.trim();\n const clean = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n return /^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(clean);\n}\n\nexport function normalizeHex(hex: string): string {\n let clean = hex.trim();\n if (!clean.startsWith(\"#\")) clean = `#${clean}`;\n if (/^#[0-9A-Fa-f]{3}$/.test(clean)) {\n clean = `#${clean[1]}${clean[1]}${clean[2]}${clean[2]}${clean[3]}${clean[3]}`;\n }\n return clean.toUpperCase();\n}\n\nexport function hexToHsl(hex: string): { h: number; s: number; l: number } {\n if (!isValidHex(hex)) return { h: 0, s: 0, l: 0 };\n const normalized = normalizeHex(hex);\n const r = parseInt(normalized.slice(1, 3), 16) / 255;\n const g = parseInt(normalized.slice(3, 5), 16) / 255;\n const b = parseInt(normalized.slice(5, 7), 16) / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\nexport function hslToHex(h: number, s: number, l: number): string {\n const normalizedH = ((h % 360) + 360) % 360;\n const sPct = s / 100;\n const lPct = l / 100;\n\n const c = (1 - Math.abs(2 * lPct - 1)) * sPct;\n const x = c * (1 - Math.abs(((normalizedH / 60) % 2) - 1));\n const m = lPct - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (0 <= normalizedH && normalizedH < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (60 <= normalizedH && normalizedH < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (120 <= normalizedH && normalizedH < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (180 <= normalizedH && normalizedH < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (240 <= normalizedH && normalizedH < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (300 <= normalizedH && normalizedH < 360) {\n r = c;\n g = 0;\n b = x;\n }\n\n const toHex = (n: number) => {\n const hex = Math.round((n + m) * 255).toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n };\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase();\n}\n\nexport interface ColorPickerSwatchProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n color: string;\n selected?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const ColorPickerSwatch = React.forwardRef<HTMLButtonElement, ColorPickerSwatchProps>(\n ({ color, selected = false, size = \"md\", className, style, ...props }, ref) => {\n const sizeClasses = {\n sm: \"w-5 h-5\",\n md: \"w-7 h-7\",\n lg: \"w-9 h-9\",\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={selected}\n style={{ backgroundColor: color, ...style }}\n className={cn(\n \"relative shrink-0 rounded-full border border-border/50 shadow-sm transition-transform hover:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary flex items-center justify-center text-white text-xs font-bold\",\n sizeClasses[size],\n selected && \"ring-2 ring-primary ring-offset-2 ring-offset-surface\",\n className\n )}\n {...props}\n >\n {selected && <span aria-hidden=\"true\">✓</span>}\n </button>\n );\n }\n);\nColorPickerSwatch.displayName = \"ColorPickerSwatch\";\n\nexport interface ColorPickerProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"value\" | \"defaultValue\"> {\n /** Current hex color value (controlled). */\n value?: string;\n /** Initial hex color value (uncontrolled). Defaults to \"#3B82F6\". */\n defaultValue?: string;\n /** Called when color changes. */\n onChange?: (hex: string) => void;\n /** Array of hex color strings for preset palette. Defaults to DEFAULT_COLOR_SWATCHES. */\n swatches?: readonly string[] | string[];\n /** Whether the picker is disabled. */\n disabled?: boolean;\n /** Whether to show the manual Hex text input inside the popover. Defaults to true. */\n showHexInput?: boolean;\n /** Additional class name for the container. */\n className?: string;\n}\n\nexport const ColorPicker = React.forwardRef<HTMLDivElement, ColorPickerProps>(\n (\n {\n value,\n defaultValue = \"#3B82F6\",\n onChange,\n swatches = DEFAULT_COLOR_SWATCHES,\n disabled = false,\n showHexInput = true,\n className,\n ...props\n },\n ref\n ) => {\n const isControlled = value !== undefined;\n const [localColor, setLocalColor] = React.useState<string>(normalizeHex(defaultValue));\n const color = isControlled ? normalizeHex(value) : localColor;\n\n const [hexInputValue, setHexInputValue] = React.useState<string>(color);\n\n React.useEffect(() => {\n setHexInputValue(color);\n }, [color]);\n\n const handleColorChange = React.useCallback(\n (newHex: string) => {\n const normalized = normalizeHex(newHex);\n if (!isControlled) {\n setLocalColor(normalized);\n }\n onChange?.(normalized);\n },\n [isControlled, onChange]\n );\n\n const hsl = React.useMemo(() => hexToHsl(color), [color]);\n\n const handleHueChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const h = Number(e.target.value);\n const s = hsl.s === 0 ? 100 : hsl.s;\n const l = hsl.s === 0 ? 50 : hsl.l;\n const newHex = hslToHex(h, s, l);\n handleColorChange(newHex);\n };\n\n const handleHexSubmit = () => {\n if (isValidHex(hexInputValue)) {\n handleColorChange(hexInputValue);\n } else {\n setHexInputValue(color);\n }\n };\n\n return (\n <div ref={ref} className={cn(\"inline-block\", className)} {...props}>\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n aria-label={`Select color, current ${color}`}\n className={cn(\n \"inline-flex items-center gap-2.5 px-3 py-1.5 rounded-kj-md border border-border bg-surface text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary disabled:cursor-not-allowed disabled:opacity-50\"\n )}\n >\n <span\n style={{ backgroundColor: color }}\n className=\"w-5 h-5 rounded-full border border-border/50 shadow-sm shrink-0\"\n />\n <span className=\"font-mono text-xs uppercase\">{color}</span>\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n className=\"text-muted-foreground ml-auto\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"bottom\" align=\"start\" className=\"w-64 p-3.5 space-y-3.5\">\n {/* Header Banner */}\n <div className=\"flex items-center gap-3 p-2 rounded-kj-md bg-muted/40 border border-border\">\n <span\n style={{ backgroundColor: color }}\n className=\"w-8 h-8 rounded-full border border-border/50 shadow-sm shrink-0\"\n />\n <div>\n <p className=\"text-xs text-muted-foreground\">Selected Color</p>\n <p className=\"text-sm font-mono font-bold text-foreground uppercase\">{color}</p>\n </div>\n </div>\n\n {/* Swatches Grid */}\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold text-muted-foreground\">Preset Swatches</p>\n <div className=\"grid grid-cols-6 gap-2\">\n {swatches.map((swatch) => {\n const normalizedSwatch = normalizeHex(swatch);\n return (\n <ColorPickerSwatch\n key={swatch}\n color={swatch}\n selected={normalizedSwatch === color}\n aria-label={`Select color ${swatch}`}\n onClick={() => handleColorChange(swatch)}\n />\n );\n })}\n </div>\n </div>\n\n {/* Hue Slider */}\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold text-muted-foreground\">Hue</p>\n <input\n type=\"range\"\n min={0}\n max={360}\n value={hsl.h}\n onChange={handleHueChange}\n aria-label=\"Hue slider\"\n className=\"w-full h-3 rounded-full appearance-none cursor-pointer\"\n style={{\n background:\n \"linear-gradient(to right, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%)\",\n }}\n />\n </div>\n\n {/* Manual Hex Input */}\n {showHexInput && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold text-muted-foreground\">Hex Code</p>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n aria-label=\"Hex Code\"\n value={hexInputValue}\n onChange={(e) => setHexInputValue(e.target.value)}\n onBlur={handleHexSubmit}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleHexSubmit();\n }}\n placeholder=\"#000000\"\n className=\"flex-1 px-2.5 py-1 text-xs font-mono rounded-kj-md border border-border bg-surface text-foreground uppercase focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n />\n </div>\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n );\n }\n);\nColorPicker.displayName = \"ColorPicker\";\n\nexport interface ColorPickerFieldProps extends ColorPickerProps {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: React.ReactNode;\n required?: boolean;\n}\n\nexport const ColorPickerField = React.forwardRef<HTMLDivElement, ColorPickerFieldProps>(\n ({ label, hint, error, required, ...props }, ref) => {\n return (\n <Field>\n {label && <Label required={required}>{label}</Label>}\n <ColorPicker ref={ref} {...props} />\n {hint && <Hint>{hint}</Hint>}\n {error && <Hint error>{error}</Hint>}\n </Field>\n );\n }\n);\nColorPickerField.displayName = \"ColorPickerField\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface GalleryImage {\n src: string;\n alt?: string;\n title?: string;\n caption?: string;\n thumbnailSrc?: string;\n}\n\nexport interface ImageGalleryProps {\n images: GalleryImage[];\n columns?: 2 | 3 | 4 | 5;\n aspectRatio?: \"square\" | \"video\" | \"4/3\" | \"auto\" | string;\n maxVisible?: number;\n className?: string;\n thumbnailClassName?: string;\n lightboxClassName?: string;\n onImageClick?: (index: number) => void;\n}\n\nconst COLUMN_CLASSES: Record<number, string> = {\n 2: \"grid-cols-2\",\n 3: \"grid-cols-3\",\n 4: \"grid-cols-4\",\n 5: \"grid-cols-5\",\n};\n\nconst ASPECT_CLASSES: Record<string, string> = {\n square: \"aspect-square\",\n video: \"aspect-video\",\n \"4/3\": \"aspect-[4/3]\",\n auto: \"aspect-auto\",\n};\n\nexport function ImageGallery({\n images = [],\n columns = 3,\n aspectRatio = \"square\",\n maxVisible,\n className,\n thumbnailClassName,\n lightboxClassName,\n onImageClick,\n}: ImageGalleryProps) {\n const [selectedIndex, setSelectedIndex] = React.useState<number | null>(null);\n\n const columnClass = COLUMN_CLASSES[columns] || \"grid-cols-3\";\n const aspectClass =\n ASPECT_CLASSES[aspectRatio] ||\n (aspectRatio.startsWith(\"aspect-\") ? aspectRatio : `aspect-[${aspectRatio}]`);\n\n const hasMaxVisible =\n typeof maxVisible === \"number\" && maxVisible > 0 && images.length > maxVisible;\n const visibleImages = hasMaxVisible ? images.slice(0, maxVisible) : images;\n const remainingCount = hasMaxVisible ? images.length - maxVisible + 1 : 0;\n\n const handleThumbnailClick = (index: number) => {\n setSelectedIndex(index);\n if (onImageClick) {\n onImageClick(index);\n }\n };\n\n const handleClose = React.useCallback(() => {\n setSelectedIndex(null);\n }, []);\n\n const handleNext = React.useCallback(() => {\n setSelectedIndex((prev) => (prev === null ? null : (prev + 1) % images.length));\n }, [images.length]);\n\n const handlePrev = React.useCallback(() => {\n setSelectedIndex((prev) => (prev === null ? null : (prev - 1 + images.length) % images.length));\n }, [images.length]);\n\n React.useEffect(() => {\n if (selectedIndex === null) return;\n\n const originalOverflow = document.body.style.overflow;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n handleClose();\n } else if (e.key === \"ArrowRight\") {\n handleNext();\n } else if (e.key === \"ArrowLeft\") {\n handlePrev();\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = originalOverflow;\n };\n }, [selectedIndex, handleClose, handleNext, handlePrev]);\n\n const activeImage = selectedIndex !== null ? images[selectedIndex] : null;\n\n return (\n <>\n <div className={cn(\"grid gap-3 w-full\", columnClass, className)}>\n {visibleImages.map((img, idx) => {\n const isLastOverlay = hasMaxVisible && idx === maxVisible - 1;\n const thumbSrc = img.thumbnailSrc || img.src;\n const defaultAlt = img.alt || `Thumbnail ${idx + 1}`;\n const buttonAriaLabel = isLastOverlay ? `View all ${images.length} images` : defaultAlt;\n\n return (\n <button\n key={idx}\n type=\"button\"\n aria-label={buttonAriaLabel}\n onClick={() => handleThumbnailClick(idx)}\n className={cn(\n \"relative group overflow-hidden rounded-kj-lg bg-muted focus:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 cursor-pointer transition-all duration-200\",\n aspectClass,\n thumbnailClassName\n )}\n >\n <img\n src={thumbSrc}\n alt={img.alt || `Thumbnail ${idx + 1}`}\n className=\"w-full h-full object-cover transition-transform duration-300 group-hover:scale-105\"\n />\n {isLastOverlay && (\n <div className=\"absolute inset-0 bg-black/60 backdrop-blur-[2px] flex items-center justify-center text-white font-bold text-xl group-hover:bg-black/70 transition-colors\">\n +{remainingCount}\n </div>\n )}\n </button>\n );\n })}\n </div>\n\n {selectedIndex !== null && activeImage && (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Image gallery lightbox\"\n onClick={(e) => e.target === e.currentTarget && handleClose()}\n className={cn(\n \"fixed inset-0 z-[100] bg-black/85 backdrop-blur-md flex flex-col justify-between p-4 sm:p-6 transition-opacity duration-200 animate-in fade-in-0\",\n lightboxClassName\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between w-full text-white z-10\">\n <span className=\"text-sm font-medium text-white/80 select-none\">\n {selectedIndex + 1} of {images.length}\n </span>\n <button\n type=\"button\"\n onClick={handleClose}\n aria-label=\"Close\"\n className=\"p-2 rounded-full text-white/80 hover:text-white hover:bg-white/10 transition-colors cursor-pointer\"\n >\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Main content with Prev/Image/Next */}\n <div className=\"relative flex-1 flex items-center justify-between gap-4 my-auto min-h-0 w-full\">\n {images.length > 1 && (\n <button\n type=\"button\"\n onClick={handlePrev}\n aria-label=\"Previous image\"\n className=\"p-3 rounded-full text-white/80 hover:text-white hover:bg-white/10 transition-colors cursor-pointer z-10 shrink-0\"\n >\n <svg\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n )}\n\n <div className=\"flex-1 flex flex-col items-center justify-center h-full min-h-0 px-2 select-none\">\n <img\n src={activeImage.src}\n alt={activeImage.alt || `Image ${selectedIndex + 1}`}\n className=\"max-h-[70vh] max-w-full object-contain rounded-kj-md shadow-2xl transition-transform\"\n />\n </div>\n\n {images.length > 1 && (\n <button\n type=\"button\"\n onClick={handleNext}\n aria-label=\"Next image\"\n className=\"p-3 rounded-full text-white/80 hover:text-white hover:bg-white/10 transition-colors cursor-pointer z-10 shrink-0\"\n >\n <svg\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Footer (Title & Caption) */}\n {(activeImage.title || activeImage.caption) && (\n <div className=\"flex flex-col items-center justify-center text-center text-white pb-2 z-10\">\n {activeImage.title && (\n <h3 className=\"text-base font-semibold text-white\">{activeImage.title}</h3>\n )}\n {activeImage.caption && (\n <p className=\"text-xs sm:text-sm text-white/70 max-w-lg mt-0.5\">\n {activeImage.caption}\n </p>\n )}\n </div>\n )}\n </div>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport type { UseInPostScriptOptions, UseInPostScriptResult } from \"./types\";\n\nconst OFFICIAL_SCRIPT_URL = \"https://geowidget.easypack24.net/js/sdk-for-javascript.js\";\nconst OFFICIAL_CSS_URL = \"https://geowidget.easypack24.net/css/easypack.css\";\n\nlet scriptPromise: Promise<void> | null = null;\n\nexport function useInPostScript(options: UseInPostScriptOptions = {}): UseInPostScriptResult {\n const [isLoaded, setIsLoaded] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return !!(\n window.customElements?.get(\"inpost-geowidget\") ||\n (window as unknown as { easyPack?: unknown }).easyPack\n );\n });\n const [error, setError] = useState<Error | null>(null);\n\n const scriptUrl = options.customScriptUrl || OFFICIAL_SCRIPT_URL;\n const cssUrl = options.customCssUrl || OFFICIAL_CSS_URL;\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n // Check if script/customElement is already defined\n if (\n window.customElements?.get(\"inpost-geowidget\") ||\n (window as unknown as { easyPack?: unknown }).easyPack\n ) {\n return;\n }\n\n // Ensure CSS stylesheet is injected\n let linkTag = document.querySelector(`link[href=\"${cssUrl}\"]`) as HTMLLinkElement | null;\n if (!linkTag) {\n linkTag = document.createElement(\"link\");\n linkTag.rel = \"stylesheet\";\n linkTag.href = cssUrl;\n linkTag.type = \"text/css\";\n document.head.appendChild(linkTag);\n }\n\n if (!scriptPromise) {\n scriptPromise = new Promise((resolve, reject) => {\n let scriptTag = document.querySelector(\n `script[src=\"${scriptUrl}\"]`\n ) as HTMLScriptElement | null;\n if (!scriptTag) {\n scriptTag = document.createElement(\"script\");\n scriptTag.src = scriptUrl;\n scriptTag.async = true;\n document.head.appendChild(scriptTag);\n }\n\n scriptTag.addEventListener(\"load\", () => resolve());\n scriptTag.addEventListener(\"error\", (err) =>\n reject(\n err instanceof Error ? err : new Error(\"Failed to load InPost GeoWidget SDK script\")\n )\n );\n });\n }\n\n scriptPromise\n .then(async () => {\n if (typeof window !== \"undefined\" && window.customElements?.whenDefined) {\n try {\n await Promise.race([\n window.customElements.whenDefined(\"inpost-geowidget\"),\n new Promise((r) => setTimeout(r, 100)),\n ]);\n } catch {\n /* ignore */\n }\n }\n setIsLoaded(true);\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(String(err)));\n });\n }, [scriptUrl, cssUrl]);\n\n return { isLoaded, error };\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport type { InPostConfigType, InPostLanguage, InPostPoint } from \"./types\";\nimport { useInPostScript } from \"./use-inpost-script\";\n\n/** Props for the inline InPost GeoWidget map component. */\nexport interface InPostGeowidgetProps {\n /** InPost API Token generated in InPost Manager for your domain. Required for production map. */\n token?: string;\n /** Widget language ('pl', 'en', 'uk', 'de', 'it', 'fr'). Default 'pl'. */\n language?: InPostLanguage;\n /** Widget configuration type ('parcelCollect', 'parcelCollectPayment', 'international', 'postBuy'). Default 'parcelCollect'. */\n config?: InPostConfigType;\n /** Enable sandbox environment. Default false. */\n sandbox?: boolean;\n /** Callback triggered when user selects a parcel locker or pick-up point on the map. */\n onPointSelect?: (point: InPostPoint) => void;\n /** Callback triggered when GeoWidget finishes loading. */\n onReady?: () => void;\n /** Callback triggered on script load error. */\n onError?: (error: Error) => void;\n /** Outer container CSS class name. */\n className?: string;\n /** Inline container styles. */\n style?: React.CSSProperties;\n /** Custom SDK JavaScript URL. */\n customScriptUrl?: string;\n /** Custom SDK CSS URL. */\n customCssUrl?: string;\n}\n\nconst MOCK_POINTS: InPostPoint[] = [\n {\n name: \"WAW01M\",\n address: { line1: \"ul. Towarowa 5\", line2: \"00-838 Warszawa\" },\n address_details: {\n city: \"Warszawa\",\n street: \"Towarowa\",\n building_number: \"5\",\n post_code: \"00-838\",\n },\n location: { latitude: 52.2297, longitude: 21.0122 },\n type: [\"parcel_locker\"],\n status: \"Operating\",\n location_description: \"Przy stacji benzynowej BP\",\n },\n {\n name: \"KRA02N\",\n address: { line1: \"ul. Floriańska 12\", line2: \"31-021 Kraków\" },\n address_details: {\n city: \"Kraków\",\n street: \"Floriańska\",\n building_number: \"12\",\n post_code: \"31-021\",\n },\n location: { latitude: 50.0647, longitude: 19.945 },\n type: [\"parcel_locker\"],\n status: \"Operating\",\n location_description: \"Obok wejścia do sklepu\",\n },\n {\n name: \"GDA03P\",\n address: { line1: \"ul. Długa 8\", line2: \"80-827 Gdańsk\" },\n address_details: { city: \"Gdańsk\", street: \"Długa\", building_number: \"8\", post_code: \"80-827\" },\n location: { latitude: 54.352, longitude: 18.6466 },\n type: [\"parcel_locker\"],\n status: \"Operating\",\n location_description: \"Róg ulicy Długiej i Tkackiej\",\n },\n {\n name: \"POZ04S\",\n address: { line1: \"ul. Półwiejska 42\", line2: \"61-888 Poznań\" },\n address_details: {\n city: \"Poznań\",\n street: \"Półwiejska\",\n building_number: \"42\",\n post_code: \"61-888\",\n },\n location: { latitude: 52.4064, longitude: 16.9252 },\n type: [\"parcel_locker\"],\n status: \"Operating\",\n location_description: \"Przy centrum handlowym Stary Browar\",\n },\n];\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n \"inpost-geowidget\": React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLElement> & {\n token?: string;\n language?: string;\n config?: string;\n sandbox?: string | boolean;\n onpointselect?: string;\n },\n HTMLElement\n >;\n }\n }\n}\n\nexport const InPostGeowidget: React.FC<InPostGeowidgetProps> = ({\n token,\n language = \"pl\",\n config = \"parcelCollect\",\n sandbox = false,\n onPointSelect,\n onReady,\n onError,\n className,\n style,\n customScriptUrl,\n customCssUrl,\n}) => {\n const { isLoaded, error } = useInPostScript({\n sandbox,\n customScriptUrl,\n customCssUrl,\n });\n\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [selectedMock, setSelectedMock] = useState<InPostPoint | null>(null);\n\n const widgetRef = useRef<HTMLElement | null>(null);\n // eslint-disable-next-line react-hooks/purity\n const callbackNameRef = useRef<string>(`inpost_cb_${Math.random().toString(36).substring(2, 9)}`);\n\n useEffect(() => {\n if (error && onError) {\n onError(error);\n }\n }, [error, onError]);\n\n useEffect(() => {\n if (isLoaded && onReady) {\n onReady();\n }\n }, [isLoaded, onReady]);\n\n useEffect(() => {\n if (!token) return;\n\n const cbName = callbackNameRef.current;\n\n (window as unknown as Record<string, (point: InPostPoint) => void>)[cbName] = (\n point: InPostPoint\n ) => {\n if (onPointSelect) {\n onPointSelect(point);\n }\n };\n\n const el = widgetRef.current;\n const handlePointSelect = (event: Event) => {\n const customEv = event as CustomEvent<InPostPoint>;\n const point = customEv.detail || (customEv as unknown as { point: InPostPoint }).point;\n if (point && onPointSelect) {\n onPointSelect(point);\n }\n };\n\n if (el) {\n el.addEventListener(\"inpostgeowidget\", handlePointSelect);\n el.addEventListener(\"onpointselect\", handlePointSelect);\n }\n document.addEventListener(\"onpointselect\", handlePointSelect);\n\n return () => {\n delete (window as unknown as Record<string, unknown>)[cbName];\n if (el) {\n el.removeEventListener(\"inpostgeowidget\", handlePointSelect);\n el.removeEventListener(\"onpointselect\", handlePointSelect);\n }\n document.removeEventListener(\"onpointselect\", handlePointSelect);\n };\n }, [onPointSelect, isLoaded, token]);\n\n if (error) {\n return (\n <div\n className={`flex flex-col items-center justify-center min-h-[450px] bg-danger/10 border-2 border-danger rounded-xl p-6 text-center ${\n className || \"\"\n }`}\n style={style}\n >\n <p className=\"text-base font-extrabold text-danger mb-1\">Błąd ładowania Geowidget InPost</p>\n <p className=\"text-xs text-muted-foreground font-semibold max-w-sm\">\n Nie udało się pobrać skryptu mapy z serwera InPost. Sprawdź połączenie z siecią.\n </p>\n </div>\n );\n }\n\n // Fallback interactive demo picker when token is not supplied\n if (!token) {\n const filteredPoints = MOCK_POINTS.filter(\n (p) =>\n p.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n p.address.line1.toLowerCase().includes(searchQuery.toLowerCase()) ||\n p.address_details.city.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <div\n className={`flex flex-col h-full min-h-[500px] bg-surface border-2 border-border rounded-xl p-4 font-sans text-foreground ${\n className || \"\"\n }`}\n style={style}\n >\n {/* Banner with high-contrast InPost yellow theme */}\n <div className=\"bg-gradient-to-r from-amber-400 via-amber-500 to-yellow-500 text-slate-950 rounded-xl p-4 mb-3.5 shadow-sm flex flex-col gap-1 border border-amber-600/30\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"w-2.5 h-2.5 rounded-full bg-slate-950 animate-pulse\" />\n <span className=\"font-black text-sm tracking-tight uppercase\">InPost Paczkomat®</span>\n </div>\n <span className=\"text-[0.7rem] font-black bg-slate-950 text-amber-400 px-2.5 py-0.5 rounded-md uppercase tracking-wider shadow-sm\">\n Tryb Pokazowy\n </span>\n </div>\n <p className=\"text-xs text-slate-950 font-bold leading-relaxed opacity-95\">\n Wybierz punkt z listy poniżej. Do załadowania produkcyjnej mapy przekaż prop{\" \"}\n <code className=\"bg-slate-950 text-amber-400 px-1.5 py-0.5 rounded font-mono text-[0.72rem] font-black\">\n token=\"TWOJ_TOKEN\"\n </code>\n .\n </p>\n </div>\n\n <div className=\"mb-3.5 relative\">\n <input\n type=\"text\"\n placeholder=\"Szukaj Paczkomatu (np. Warszawa, WAW01M, Towarowa)...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full px-4 py-2.5 text-sm bg-surface border-2 border-border rounded-xl outline-none text-foreground placeholder:text-muted-foreground font-bold focus:border-primary focus:ring-2 focus:ring-primary/20 shadow-sm transition-all\"\n />\n </div>\n\n <div className=\"flex-1 overflow-y-auto space-y-3 pr-1 max-h-[420px]\">\n {filteredPoints.map((p) => {\n const isSelected = selectedMock?.name === p.name;\n return (\n <div\n key={p.name}\n onClick={() => {\n setSelectedMock(p);\n if (onPointSelect) {\n onPointSelect(p);\n }\n }}\n className={`p-4 rounded-xl border-2 transition-all cursor-pointer flex items-center justify-between gap-3 ${\n isSelected\n ? \"bg-primary text-primary-foreground border-primary shadow-md\"\n : \"bg-surface border-border hover:border-primary hover:shadow-md text-foreground\"\n }`}\n >\n <div className=\"flex flex-col gap-1 min-w-0\">\n <div className=\"font-black text-base flex items-center gap-2\">\n <span\n className={\n isSelected\n ? \"text-primary-foreground font-black\"\n : \"text-foreground font-black\"\n }\n >\n Paczkomat® {p.name}\n </span>\n {p.location_description && (\n <span\n className={`text-[0.72rem] px-2.5 py-0.5 rounded-full font-bold ${isSelected ? \"bg-primary-hover text-primary-foreground\" : \"bg-muted text-primary\"}`}\n >\n {p.location_description}\n </span>\n )}\n </div>\n <div\n className={`text-xs font-bold ${isSelected ? \"text-primary-foreground/90\" : \"text-muted-foreground\"}`}\n >\n {p.address.line1}, {p.address.line2}\n </div>\n </div>\n\n <button\n type=\"button\"\n className={`px-4 py-2 rounded-lg text-xs font-black shrink-0 transition-all shadow-sm ${\n isSelected\n ? \"bg-amber-400 text-slate-950 border border-amber-500\"\n : \"bg-primary hover:bg-primary-hover text-primary-foreground\"\n }`}\n >\n {isSelected ? \"Wybrano ✓\" : \"Wybierz\"}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n\n if (!isLoaded) {\n return (\n <div\n className={`flex items-center justify-center min-h-[450px] bg-surface border-2 border-border rounded-xl p-6 ${\n className || \"\"\n }`}\n style={style}\n >\n <div className=\"flex flex-col items-center gap-3 text-muted-foreground\">\n <div className=\"w-9 h-9 border-4 border-primary border-t-transparent rounded-full animate-spin\" />\n <span className=\"text-sm font-extrabold text-foreground\">\n Ładowanie mapy InPost GeoWidget...\n </span>\n </div>\n </div>\n );\n }\n\n const widgetProps: Record<string, string> = {\n language,\n config: String(config).toLowerCase(),\n // eslint-disable-next-line react-hooks/refs\n onpointselect: callbackNameRef.current,\n };\n\n if (token) {\n widgetProps.token = token;\n }\n\n if (sandbox) {\n widgetProps.sandbox = \"true\";\n }\n\n return (\n <div className={`w-full h-full min-h-[450px] relative ${className || \"\"}`} style={style}>\n {React.createElement(\"inpost-geowidget\", {\n ref: widgetRef,\n ...widgetProps,\n style: { width: \"100%\", height: \"100%\", display: \"block\", minHeight: \"450px\" },\n })}\n </div>\n );\n};\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Button } from \"../button\";\nimport { Modal, ModalTitle } from \"../modal\";\nimport { InPostGeowidget } from \"./inpost-geowidget\";\nimport type { InPostConfigType, InPostLanguage, InPostPoint } from \"./types\";\n\n/** Props for the InPost GeoWidget Modal checkout component. */\nexport interface InPostGeowidgetModalProps {\n /** Currently selected point object or point code string (e.g. 'WAW01M'). */\n value?: InPostPoint | string | null;\n /** Callback triggered when point is selected on the map. */\n onSelect?: (point: InPostPoint) => void;\n /** Trigger button label. Default 'Wybierz Paczkomat®'. */\n triggerText?: string;\n /** Modal header title. Default 'Wybierz punkt odbioru InPost'. */\n modalTitle?: string;\n /** Disable trigger button. Default false. */\n disabled?: boolean;\n /** Controlled open state of the modal. */\n open?: boolean;\n /** Callback when open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Show selected point badge under trigger button. Default true. */\n showSelectedBadge?: boolean;\n /** Outer container CSS class name. */\n className?: string;\n /** Trigger button style variant ('primary', 'secondary', 'outline', 'ghost', 'danger'). Default 'outline'. */\n buttonVariant?: \"primary\" | \"secondary\" | \"outline\" | \"ghost\" | \"danger\";\n /** Trigger button size ('sm', 'md', 'lg'). Default 'md'. */\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n /** InPost API Token (optional for sandbox). */\n token?: string;\n /** Widget language ('pl', 'en', 'uk', 'de', 'it', 'fr'). Default 'pl'. */\n language?: InPostLanguage;\n /** Widget configuration type ('parcelCollect', 'parcelCollectPayment', 'international', 'postBuy'). Default 'parcelCollect'. */\n config?: InPostConfigType;\n /** Enable sandbox environment. Default false. */\n sandbox?: boolean;\n /** Custom SDK JavaScript URL. */\n customScriptUrl?: string;\n /** Custom SDK CSS URL. */\n customCssUrl?: string;\n}\n\nexport const InPostGeowidgetModal: React.FC<InPostGeowidgetModalProps> = ({\n value,\n onSelect,\n triggerText = \"Wybierz Paczkomat®\",\n modalTitle = \"Wybierz punkt odbioru InPost\",\n disabled = false,\n open: controlledOpen,\n onOpenChange,\n showSelectedBadge = true,\n className = \"\",\n buttonVariant = \"outline\",\n buttonSize = \"md\",\n token,\n language,\n config,\n sandbox,\n customScriptUrl,\n customCssUrl,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const [selectedPoint, setSelectedPoint] = useState<InPostPoint | null>(\n typeof value === \"object\" && value ? value : null\n );\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenToggle = (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n if (onOpenChange) {\n onOpenChange(newOpen);\n }\n };\n\n const handlePointSelect = (point: InPostPoint) => {\n setSelectedPoint(point);\n if (onSelect) {\n onSelect(point);\n }\n handleOpenToggle(false);\n };\n\n const selectedCode = selectedPoint?.name || (typeof value === \"string\" ? value : null);\n const selectedAddress = selectedPoint\n ? `${selectedPoint.address?.line1 || \"\"}, ${selectedPoint.address?.line2 || \"\"}`\n : null;\n\n const isOutline = buttonVariant === \"outline\";\n\n return (\n <div className={`inline-flex flex-col gap-3 min-w-[280px] ${className}`}>\n <Button\n type=\"button\"\n variant={buttonVariant}\n size={buttonSize}\n disabled={disabled}\n onClick={() => handleOpenToggle(true)}\n className={`group w-full justify-between gap-4 text-left font-bold shadow-sm hover:shadow-md transition-all py-2.5 px-3.5 rounded-xl ${\n isOutline\n ? \"bg-surface hover:bg-muted text-foreground border-2 border-border hover:border-primary\"\n : \"border-2 border-transparent\"\n }`}\n >\n <span className=\"flex items-center gap-2.5 min-w-0\">\n <span className=\"font-black text-[0.7rem] bg-amber-400 text-slate-950 px-2.5 py-1 rounded-md shadow-sm tracking-tight uppercase border border-amber-500/40 shrink-0 group-hover:scale-105 transition-transform\">\n InPost\n </span>\n <span\n className={`truncate font-bold text-sm ${isOutline ? \"text-foreground group-hover:text-primary\" : \"\"}`}\n >\n {selectedCode ? `Paczkomat® ${selectedCode}` : triggerText}\n </span>\n </span>\n <span\n className={`text-xs font-black px-2.5 py-1 rounded-md shrink-0 shadow-sm uppercase tracking-wide transition-all ${\n isOutline\n ? \"bg-primary text-primary-foreground group-hover:bg-primary-hover\"\n : \"bg-amber-400 text-slate-950\"\n }`}\n >\n {selectedCode ? \"Zmień\" : \"Wybierz\"}\n </span>\n </Button>\n\n {showSelectedBadge && selectedCode && (\n <div className=\"text-xs bg-surface text-foreground border-2 border-border p-3.5 rounded-xl flex flex-col gap-1.5 shadow-md\">\n <div className=\"font-bold flex items-center justify-between gap-2\">\n <span className=\"flex items-center gap-2 text-foreground\">\n <span className=\"w-2.5 h-2.5 rounded-full bg-primary shadow-sm animate-pulse\" />\n <span className=\"font-black text-sm text-primary\">Paczkomat® {selectedCode}</span>\n </span>\n <span className=\"text-[0.65rem] bg-amber-400 text-slate-950 font-black px-2 py-0.5 rounded uppercase tracking-wider\">\n Wybrany\n </span>\n </div>\n {selectedAddress && (\n <div className=\"text-muted-foreground text-[0.78rem] font-medium pl-4 border-l-2 border-border\">\n {selectedAddress}\n </div>\n )}\n </div>\n )}\n\n <Modal open={isOpen} onClose={() => handleOpenToggle(false)} width={850}>\n <div className=\"flex items-center gap-3 pb-3.5 border-b border-border\">\n <span className=\"font-black text-xs bg-amber-400 text-slate-950 px-2.5 py-1 rounded-md shadow-sm tracking-tight uppercase border border-amber-500/40 shrink-0\">\n InPost\n </span>\n <ModalTitle className=\"m-0 text-xl font-black text-primary tracking-tight\">\n {modalTitle}\n </ModalTitle>\n </div>\n\n <div className=\"w-full h-[600px] min-h-[500px] mt-3.5 rounded-xl overflow-hidden\">\n {isOpen && (\n <InPostGeowidget\n token={token}\n language={language}\n config={config}\n sandbox={sandbox}\n customScriptUrl={customScriptUrl}\n customCssUrl={customCssUrl}\n onPointSelect={handlePointSelect}\n />\n )}\n </div>\n </Modal>\n </div>\n );\n};\n"]}
|