@reopt-ai/opt-ui 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMPONENT_CATALOG.md +95 -12
- package/dist/app.css +24 -0
- package/dist/core/index.cjs +3 -3
- package/dist/core/index.d.cts +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +2 -2
- package/dist/docs/02-components/03-shells.md +104 -11
- package/dist/docs/02-components/index.md +3 -3
- package/dist/docs/05-migration/01-breaking-changes.md +18 -1
- package/dist/field-sidebar-BTZCBviA.d.cts +1031 -0
- package/dist/field-sidebar-BTZCBviA.d.cts.map +1 -0
- package/dist/field-sidebar-CB8vjvUM.d.ts +1031 -0
- package/dist/field-sidebar-CB8vjvUM.d.ts.map +1 -0
- package/dist/{workflow-canvas-BGBAcjf-.js → field-sidebar-Cs-J-5VE.js} +1882 -52
- package/dist/field-sidebar-Cs-J-5VE.js.map +1 -0
- package/dist/{workflow-canvas-3Jeevkgy.cjs → field-sidebar-CzIQX70-.cjs} +2010 -48
- package/dist/id-registry.cjs +41 -1
- package/dist/id-registry.d.cts +1 -1
- package/dist/id-registry.d.cts.map +1 -1
- package/dist/id-registry.d.ts +1 -1
- package/dist/id-registry.d.ts.map +1 -1
- package/dist/id-registry.js +41 -1
- package/dist/id-registry.js.map +1 -1
- package/dist/id-registry.json +85 -0
- package/dist/index.cjs +142 -56
- package/dist/index.d.cts +149 -80
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +149 -80
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +73 -11
- package/dist/index.js.map +1 -1
- package/dist/meta.cjs +292 -0
- package/dist/meta.d.cts.map +1 -1
- package/dist/meta.d.ts.map +1 -1
- package/dist/meta.js +292 -0
- package/dist/meta.js.map +1 -1
- package/dist/{pagination-By7Ozv3U.js → pagination-DWbvACuN.js} +93 -31
- package/dist/pagination-DWbvACuN.js.map +1 -0
- package/dist/{pagination-Uv3CnGJz.cjs → pagination-DjfxBcjX.cjs} +98 -36
- package/dist/query.cjs +386 -0
- package/dist/query.d.cts +141 -0
- package/dist/query.d.cts.map +1 -0
- package/dist/query.d.ts +141 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +371 -0
- package/dist/query.js.map +1 -0
- package/dist/{shader-surface-BWhO2xkk.js → shader-surface-BUPZ0P-n.js} +22 -83
- package/dist/shader-surface-BUPZ0P-n.js.map +1 -0
- package/dist/{shader-surface-DIVWtpFl.d.ts → shader-surface-BfTP9c1Q.d.ts} +139 -139
- package/dist/shader-surface-BfTP9c1Q.d.ts.map +1 -0
- package/dist/{shader-surface-BK1GMt5_.d.cts → shader-surface-DRrcLrWf.d.cts} +139 -139
- package/dist/shader-surface-DRrcLrWf.d.cts.map +1 -0
- package/dist/{shader-surface-DxLLfrE6.cjs → shader-surface-Fav5K9UC.cjs} +20 -87
- package/dist/shells/index.cjs +31 -24
- package/dist/shells/index.d.cts +2 -2
- package/dist/shells/index.d.ts +2 -2
- package/dist/shells/index.js +3 -2
- package/dist/theme/presets/default.css +2 -2
- package/dist/theme/presets/minimal.css +2 -2
- package/dist/theme/presets/mono-dark.css +2 -2
- package/dist/theme/presets/natural.css +1 -1
- package/dist/theme/presets/pro.css +2 -2
- package/package.json +17 -6
- package/dist/pagination-By7Ozv3U.js.map +0 -1
- package/dist/shader-surface-BK1GMt5_.d.cts.map +0 -1
- package/dist/shader-surface-BWhO2xkk.js.map +0 -1
- package/dist/shader-surface-DIVWtpFl.d.ts.map +0 -1
- package/dist/workflow-canvas-BGBAcjf-.js.map +0 -1
- package/dist/workflow-canvas-Bar_O2SQ.d.ts +0 -494
- package/dist/workflow-canvas-Bar_O2SQ.d.ts.map +0 -1
- package/dist/workflow-canvas-DghDRtHn.d.cts +0 -494
- package/dist/workflow-canvas-DghDRtHn.d.cts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pagination-By7Ozv3U.js","names":["variantStyles","sizeStyles","variantStyles","sizeStyles","sizeStyles","triggerClass","DisclosureRoot","PrimDisclosureRoot","DisclosureTrigger","PrimDisclosureTrigger","DisclosureContent","PrimDisclosureContent","TabsRoot","PrimTabsRoot","TabList","PrimTabList","Tab","PrimTab","TabPanel","PrimTabPanel","popoverClass","itemClass","SelectRoot","PrimSelectRoot","SelectLabel","PrimSelectLabel","SelectTrigger","PrimSelectTrigger","SelectPopover","PrimSelectPopover","SelectItem","PrimSelectItem","DialogRoot","PrimDialogRoot","DialogDisclosure","PrimDialogDisclosure","DialogPanel","PrimDialogPanel","AlertDialogPanel","PrimAlertDialogPanel","DialogHeading","PrimDialogHeading","DialogDescription","PrimDialogDescription","DialogDismiss","PrimDialogDismiss","inputClass","ComboboxRoot","PrimComboboxRoot","ComboboxInput","PrimComboboxInput","ComboboxPopover","PrimComboboxPopover","ComboboxItem","PrimComboboxItem","ComboboxGroup","PrimComboboxGroup","ComboboxGroupLabel","PrimComboboxGroupLabel","MenubarRoot","PrimMenubarRoot","MenubarContainer","PrimMenubarContainer","MenuRoot","PrimMenuRoot","MenuTrigger","PrimMenuTrigger","MenuButtonArrow","PrimMenuButtonArrow","MenuPopover","PrimMenuPopover","MenuItem","PrimMenuItem","MenuItemCheckbox","PrimMenuItemCheckbox","MenuItemRadio","PrimMenuItemRadio","MenuSeparator","PrimMenuSeparator","ToolbarRoot","PrimToolbarRoot","ToolbarContainer","PrimToolbarContainer","ToolbarButton","PrimToolbarButton","ToolbarSeparator","PrimToolbarSeparator","TooltipProvider","PrimTooltipProvider","TooltipAnchor","PrimTooltipAnchor","Tooltip","PrimTooltip","DEFAULT_LABELS","normalizedControlledValue","PopoverRoot","PrimPopoverRoot","PopoverTrigger","PrimPopoverTrigger","PopoverContent","PrimPopoverContent","PopoverClose","PrimPopoverClose","DEFAULT_PRESETS","PopoverRoot","PopoverTrigger","PopoverContent","PopoverRoot","PopoverTrigger","PopoverContent","PopoverRoot","PopoverTrigger","PopoverContent","FormRoot","PrimFormRoot","PrimFormProvider","FormInput","PrimFormInput","SelectRoot","SelectTrigger","SelectPopover","SelectItem","FormSwitch","PrimFormSwitch","FormLabel","PrimFormLabel","FormError","PrimFormError","FormSubmit","PrimFormSubmit","FormProvider","FormGroup","PrimFormGroup","FormGroupLabel","PrimFormGroupLabel","FormDescription","PrimFormDescription","FormField","PrimFormField","FormControl","PrimFormControl","FormPush","PrimFormPush","FormRemove","PrimFormRemove","FormReset","PrimFormReset","FormCheckbox","PrimFormCheckbox","FormRadioGroup","PrimFormRadioGroup","FormRadio","PrimFormRadio"],"sources":["../src/lib/cn.ts","../src/core/kbd.tsx","../src/lib/styles.ts","../src/lib/field-messages.tsx","../src/lib/use-controlled-state.ts","../src/core/stat-card.tsx","../src/i18n/ko.ts","../src/core/button.tsx","../src/core/empty-state.tsx","../src/core/badge.tsx","../src/core/spinner.tsx","../src/core/alert.tsx","../src/lib/use-input-id.ts","../src/core/star-rating.tsx","../src/core/composite-zone.tsx","../src/core/disclosure.tsx","../src/core/tabs.tsx","../src/core/select.tsx","../src/core/dialog.tsx","../src/core/combobox.tsx","../src/core/menu.tsx","../src/core/toolbar.tsx","../src/core/number-input.tsx","../src/core/slider.tsx","../src/core/popover.tsx","../src/core/color-picker.tsx","../src/lib/icon-registry.tsx","../src/core/icon-picker.tsx","../src/core/tag-input.tsx","../src/core/date-range-picker.tsx","../src/core/form.tsx","../src/core/checkbox.tsx","../src/core/pagination.tsx"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Handles cn. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"../lib/cn\";\n\n/** Props for the kbd component. */\nexport interface KbdProps {\n children: React.ReactNode;\n /**\n * Mark this as an inline shortcut hint — the badge sitting next to a menu\n * item or button that merely advertises a shortcut, not documentation of\n * one. Hints hide when the app sets `data-shortcut-hints=\"hidden\"` (see\n * `@reopt-ai/opt-ui/app.css`), which is how a \"hide keyboard hints\" setting\n * is implemented without threading the preference through every call site.\n */\n hint?: boolean;\n className?: string;\n}\n\n/** Renders the kbd component. */\nexport function Kbd({ children, hint = false, className }: KbdProps) {\n return (\n <kbd\n className={cn(\n \"border-border bg-bg-subtle text-text-tertiary inline-flex h-5 items-center gap-0.5 rounded border px-1.5 text-[11px] font-medium\",\n hint && \"opt-shortcut-hint\",\n className,\n )}\n data-opt-id=\"NPHB8\"\n data-opt-slug=\"kbd.Kbd\"\n >\n {children}\n </kbd>\n );\n}\n","/**\n * 공유 스타일 토큰 — Primitive 전체에서 중복되는 Tailwind 패턴을 상수화합니다.\n * 각 primitive는 이 토큰을 조합하고, 컴포넌트별 특수 스타일만 로컬에 정의합니다.\n *\n * CSS 변수 기반 — dark: prefix 불필요. 테마 프리셋이 모드별 값을 자동 해석합니다.\n */\n\n// ═══════════════════════════════════════════════════════════════════\n// OPT 스타일 토큰\n// 핵심 원칙: accent active items, 반투명 테두리, opacity 기반 텍스트,\n// accent-tinted hover, outline focus.\n// ═══════════════════════════════════════════════════════════════════\n\n// ── Focus ──\n// data-[focus-visible] 기반 outline 포커스 표현\nexport const OPT_FOCUS =\n \"outline-none data-[focus-visible]:outline-2 data-[focus-visible]:outline-ring data-[focus-visible]:-outline-offset-1\";\n\nexport const OPT_FOCUS_VISIBLE =\n \"outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset\";\n\n// ── Active Item ──\n// 활성 항목 = accent bg + accent-fg 텍스트\nexport const OPT_ACTIVE_ITEM =\n \"data-[active-item]:bg-accent data-[active-item]:text-accent-fg\";\n\n// 부드러운 accent tint 버전 (hover-only 컨텍스트용)\nexport const OPT_HOVER_ITEM =\n \"[@media(any-hover:hover)]:hover:bg-accent-subtle active:bg-accent-subtle\";\n\n// ── Borders ──\n// 반투명 테두리\nexport const OPT_BORDER = \"border border-border\";\n\nexport const OPT_BORDER_HOVER = \"hover:border-border-hover\";\n\nexport const OPT_DIVIDER = \"divide-border-subtle\";\n\n// ── Surfaces ──\n// 카드/컨테이너 — 그림자 + 반투명 테두리\nexport const OPT_SURFACE = \"rounded-lg bg-surface shadow-sm\";\n\nexport const OPT_SURFACE_RAISED = \"rounded-xl bg-surface-raised shadow-md\";\n\nexport const OPT_SURFACE_POPOVER =\n \"z-50 rounded-lg border border-border bg-surface-overlay p-2 shadow-lg\";\n\nexport const OPT_SURFACE_INPUT =\n \"rounded-lg bg-surface-input hover:bg-surface-input-hover\";\n\n// ── Text ──\n// 시맨틱 텍스트 색상\nexport const OPT_TEXT_PRIMARY = \"text-text-primary\";\nexport const OPT_TEXT_SECONDARY = \"text-text-secondary\";\nexport const OPT_TEXT_TERTIARY = \"text-text-tertiary\";\nexport const OPT_TEXT_LABEL = \"text-sm font-medium text-text-primary\";\n\n// ── Items ──\n// 리스트/메뉴 항목 (rounded, compact, accent active)\nexport const OPT_ITEM_BASE =\n \"cursor-default rounded px-2 py-2 text-sm outline-none text-text-primary\";\n\n// 전체 조합: base + active + scroll-margin\nexport const OPT_ITEM = `${OPT_ITEM_BASE} data-[active-item]:bg-accent data-[active-item]:text-accent-fg scroll-m-2`;\n\n// ── AK: Inputs ──\nexport const OPT_INPUT =\n \"flex h-10 w-full rounded-lg border border-border bg-surface px-4 text-sm text-text-primary outline-none placeholder:text-text-tertiary focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset\";\n\nexport const OPT_INPUT_SIZE = {\n sm: \"h-8 px-3 text-xs\",\n md: \"\",\n lg: \"h-12 px-5 text-base\",\n} as const;\n\nexport const OPT_TEXTAREA_SIZE = {\n sm: \"px-3 py-2 text-xs\",\n md: \"\",\n lg: \"px-5 py-4 text-base\",\n} as const;\n\nexport const OPT_INPUT_ERROR = \"border-danger focus-visible:outline-danger\";\n\nexport const OPT_ERROR_TEXT = \"text-danger-fg text-sm\";\n\nexport const OPT_HINT_TEXT = \"text-text-tertiary text-sm\";\n\n// ── AK: Badges ──\nexport const OPT_BADGE =\n \"inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium\";\n\nexport const OPT_BADGE_BLUE = `${OPT_BADGE} bg-info-subtle text-info-fg`;\n\nexport const OPT_BADGE_GREEN = `${OPT_BADGE} bg-success-subtle text-success-fg`;\n\nexport const OPT_BADGE_YELLOW = `${OPT_BADGE} bg-warning-subtle text-warning-fg`;\n\nexport const OPT_BADGE_RED = `${OPT_BADGE} bg-danger-subtle text-danger-fg`;\n\nexport const OPT_BADGE_NEUTRAL = `${OPT_BADGE} bg-bg-subtle text-text-secondary`;\n\n// ── AK: Buttons ──\nexport const OPT_BUTTON_PRIMARY =\n \"inline-flex h-10 items-center justify-center rounded-lg bg-accent px-4 text-sm font-medium text-accent-fg outline-none hover:bg-accent-hover active:bg-accent-active focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\";\n\nexport const OPT_BUTTON_SECONDARY =\n \"inline-flex h-10 items-center justify-center rounded-lg border border-border bg-surface px-4 text-sm font-medium text-text-primary outline-none hover:bg-bg-subtle active:bg-bg-muted focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\";\n\n// ── AK: Table ──\nexport const OPT_TH =\n \"px-3 py-2.5 text-left text-xs font-semibold uppercase tracking-wider text-text-tertiary\";\n\nexport const OPT_TD = \"px-3 py-2.5 text-sm text-text-primary whitespace-nowrap\";\n\nexport const OPT_TD_MUTED =\n \"px-3 py-2.5 text-sm text-text-tertiary whitespace-nowrap\";\n\nexport const OPT_TABLE_ROW_ACTIVE =\n \"outline-none data-[active-item]:bg-accent-subtle data-[focus-visible]:outline-2 data-[focus-visible]:outline-ring data-[focus-visible]:-outline-offset-1\";\n\n// ── AK: Disclosure ──\nexport const OPT_DISCLOSURE_TRIGGER =\n \"flex w-full items-center justify-between px-4 py-3.5 text-left text-sm font-medium text-text-primary outline-none hover:underline decoration-border underline-offset-2 data-[focus-visible]:outline-2 data-[focus-visible]:outline-ring data-[focus-visible]:-outline-offset-2\";\n\nexport const OPT_DISCLOSURE_CONTENT =\n \"overflow-hidden data-[enter]:animate-in data-[enter]:fade-in data-[leave]:animate-out data-[leave]:fade-out\";\n\n// ── Animations ──\nexport const OPT_ANIMATE_ENTER_EXIT =\n \"data-[enter]:animate-in data-[enter]:fade-in data-[enter]:slide-in-from-top-1 data-[leave]:animate-out data-[leave]:fade-out\";\n\nexport const OPT_ANIMATE_DIALOG =\n \"data-[enter]:animate-in data-[enter]:fade-in data-[enter]:slide-in-from-top-2 data-[leave]:animate-out data-[leave]:fade-out data-[leave]:slide-out-to-top-2\";\n\n/**\n * Drawer slide-in/out animations per side. ariakit `data-[enter]/data-[leave]`\n * 패턴으로 `animate-in/animate-out` + `slide-in-from-{side}` 조합을 노출한다.\n *\n * Drawer 컴포넌트가 직접 인라인으로 정의하지 않고 이 토큰을 참조하도록 일관화.\n */\nexport const OPT_ANIMATE_DRAWER = {\n right:\n \"data-[enter]:animate-in data-[enter]:slide-in-from-right data-[leave]:animate-out data-[leave]:slide-out-to-right\",\n left: \"data-[enter]:animate-in data-[enter]:slide-in-from-left data-[leave]:animate-out data-[leave]:slide-out-to-left\",\n bottom:\n \"data-[enter]:animate-in data-[enter]:slide-in-from-bottom data-[leave]:animate-out data-[leave]:slide-out-to-bottom\",\n} as const;\n\n// ── Spacing ──\nexport const SURFACE_ROOT = \"flex flex-col gap-section\";\nexport const SECTION_GAP = \"gap-group\";\nexport const ELEMENT_GAP = \"gap-element\";\n\n// ── AK: Status dots ──\nexport const OPT_DOT_GREEN = \"h-2 w-2 rounded-full bg-success\";\nexport const OPT_DOT_YELLOW = \"h-2 w-2 rounded-full bg-warning\";\nexport const OPT_DOT_RED = \"h-2 w-2 rounded-full bg-danger\";\nexport const OPT_DOT_BLUE = \"h-2 w-2 rounded-full bg-info\";\nexport const OPT_DOT_GRAY = \"h-2 w-2 rounded-full bg-bg-muted\";\n","/**\n * Internal utilities for field label/error/hint rendering.\n * Not exported from the package — used only by Core components.\n */\n\nimport { OPT_ERROR_TEXT, OPT_HINT_TEXT } from \"./styles\";\n\n/** Renders a red asterisk for required fields. */\nexport function RequiredMark() {\n return (\n <span className=\"text-danger-fg ml-0.5\" aria-hidden=\"true\">\n *\n </span>\n );\n}\n\n/** Computes the aria-describedby value from error/hint state. */\nexport function getDescribedBy(\n id: string | undefined,\n error: string | undefined,\n hint: string | undefined,\n): string | undefined {\n if (!id) return undefined;\n if (error) return `${id}-error`;\n if (hint) return `${id}-hint`;\n return undefined;\n}\n\n/** Renders error or hint message below a field. Error takes priority. */\nexport function FieldMessages({\n id,\n error,\n hint,\n}: {\n id?: string;\n error?: string;\n hint?: string;\n}) {\n if (!error && !hint) return null;\n return (\n <>\n {error && (\n <p\n id={id ? `${id}-error` : undefined}\n className={OPT_ERROR_TEXT}\n role=\"alert\"\n >\n {error}\n </p>\n )}\n {hint && !error && (\n <p id={id ? `${id}-hint` : undefined} className={OPT_HINT_TEXT}>\n {hint}\n </p>\n )}\n </>\n );\n}\n","import { useState, useCallback } from \"react\";\n\n/**\n * Manages controlled/uncontrolled state for input components.\n * When `controlledValue` is provided, acts as controlled; otherwise uses internal state.\n */\nexport function useControlledState<T>(\n defaultValue: T,\n controlledValue: T | undefined,\n onChange: ((value: T) => void) | undefined,\n): [T, (value: T) => void] {\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange],\n );\n\n return [value, setValue];\n}\n","import * as React from \"react\";\nimport type { StatCard as StatCardType } from \"../lib/types\";\nimport { cn } from \"../lib/cn\";\nimport {\n OPT_SURFACE,\n OPT_BORDER,\n OPT_TEXT_SECONDARY,\n OPT_TEXT_PRIMARY,\n} from \"../lib/styles\";\n\n/** Props for the stat card component. */\nexport interface StatCardProps extends StatCardType {\n sparklineData?: number[];\n className?: string;\n}\n\n/** Renders the stat card component. */\nexport function StatCard({\n title,\n value,\n change,\n trend,\n sparklineData,\n className,\n}: StatCardProps) {\n const trendColor =\n trend === \"up\"\n ? \"text-success-fg\"\n : trend === \"down\"\n ? \"text-danger-fg\"\n : \"text-text-tertiary\";\n\n const trendIcon =\n trend === \"up\" ? \"\\u2191\" : trend === \"down\" ? \"\\u2193\" : \"\\u2192\";\n\n const sparkColor =\n trend === \"up\"\n ? \"var(--opt-chart-diverging-positive)\"\n : trend === \"down\"\n ? \"var(--opt-chart-diverging-negative)\"\n : \"var(--opt-chart-1)\";\n\n return (\n <div\n className={cn(\n OPT_SURFACE,\n OPT_BORDER,\n \"flex flex-col gap-1 p-5\",\n className,\n )}\n data-opt-id=\"GAX47\"\n data-opt-slug=\"stat-card.StatCard\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className={cn(OPT_TEXT_SECONDARY, \"truncate text-sm\")}>\n {title}\n </span>\n <span className={cn(OPT_TEXT_PRIMARY, \"text-2xl font-bold\")}>\n {value}\n </span>\n <span className={cn(\"text-sm font-medium\", trendColor)}>\n {trendIcon} {change}\n </span>\n </div>\n {sparklineData && sparklineData.length > 1 && (\n <MiniSparkline data={sparklineData} color={sparkColor} />\n )}\n </div>\n </div>\n );\n}\n\nfunction MiniSparkline({ data, color }: { data: number[]; color: string }) {\n const width = 80;\n const height = 32;\n const padding = 2;\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n\n const points = data\n .map((v, i) => {\n const x = padding + (i / (data.length - 1)) * (width - padding * 2);\n const y = padding + (1 - (v - min) / range) * (height - padding * 2);\n return `${x},${y}`;\n })\n .join(\" \");\n\n return (\n <svg\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className=\"flex-shrink-0 self-center\"\n aria-hidden=\"true\"\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke={color}\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nStatCard.displayName = \"StatCard\";\n","/**\n * opt-ui Korean default labels.\n *\n * Components consume these as defaults so consumers don't have to pass labels\n * for the most common case. Korean is the package default — other locales\n * should be imported explicitly (e.g. `enLabels`) and passed via component\n * props or wrapped with a labels provider.\n */\nexport const koComboboxLabels = {\n empty: \"결과가 없습니다.\",\n} as const;\n\nexport const koStarRatingLabels = {\n /** {value}/{max}점 — readonly fallback aria-label */\n readonlyAriaLabel: \"{value}/{max}점\",\n /** rating group aria-label */\n groupAriaLabel: \"별점\",\n /** {star}점 — individual star aria-label */\n starAriaLabel: \"{star}점\",\n} as const;\n\nexport const koBreadcrumbLabels = {\n /** {label}(으)로 이동 */\n navAriaLabel: \"{label}(으)로 이동\",\n} as const;\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { OPT_FOCUS_VISIBLE } from \"../lib/styles\";\n\n/** Props for the button component. */\nexport interface ButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n variant?: \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\n size?: \"sm\" | \"md\" | \"lg\";\n loading?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n}\n\nconst variantStyles: Record<NonNullable<ButtonProps[\"variant\"]>, string> = {\n primary:\n \"bg-accent text-accent-fg hover:bg-accent-hover active:bg-accent-active focus-visible:ring-offset-2\",\n secondary:\n \"border border-border bg-surface text-text-primary hover:bg-bg-subtle active:bg-bg-muted focus-visible:ring-offset-1\",\n ghost:\n \"text-text-secondary hover:bg-bg-subtle active:bg-bg-muted focus-visible:ring-offset-1\",\n danger:\n \"bg-danger text-danger-fg hover:bg-danger active:bg-danger focus-visible:ring-offset-2\",\n};\n\nconst sizeStyles: Record<NonNullable<ButtonProps[\"size\"]>, string> = {\n sm: \"h-[var(--opt-control-sm)] px-[var(--opt-control-padding-sm)] text-xs gap-[var(--opt-space-1-5)]\",\n md: \"h-[var(--opt-control-md)] px-[var(--opt-control-padding-md)] text-sm gap-[var(--opt-space-2)]\",\n lg: \"h-[var(--opt-control-lg)] px-[var(--opt-control-padding-lg)] text-base gap-[var(--opt-space-2)]\",\n};\n\n/** Renders the button component. */\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n loading = false,\n leftIcon,\n rightIcon,\n className,\n disabled,\n children,\n \"aria-busy\": ariaBusy,\n ...props\n}: ButtonProps) {\n const isDisabled = disabled || loading;\n\n return (\n <button\n type=\"button\"\n className={cn(\n \"inline-flex cursor-pointer items-center justify-center rounded-lg font-medium transition-colors\",\n OPT_FOCUS_VISIBLE,\n variantStyles[variant],\n sizeStyles[size],\n isDisabled && \"pointer-events-none cursor-not-allowed opacity-50\",\n className,\n )}\n disabled={isDisabled}\n {...props}\n aria-busy={loading ? true : ariaBusy}\n data-opt-id=\"RGX84\"\n data-opt-slug=\"button.Button\"\n data-opt-component=\"button\"\n data-opt-part=\"root\"\n data-variant={variant}\n data-size={size}\n data-state={loading ? \"loading\" : isDisabled ? \"disabled\" : \"idle\"}\n >\n {loading ? (\n <svg\n className=\"h-4 w-4 animate-spin\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n ) : (\n leftIcon\n )}\n {children}\n {!loading && rightIcon}\n </button>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\nimport {\n OPT_TEXT_PRIMARY,\n OPT_TEXT_SECONDARY,\n OPT_TEXT_TERTIARY,\n} from \"../lib/styles\";\n\n/** Defines the empty state action shape. */\nexport interface EmptyStateAction {\n id: string;\n label: string;\n onClick: () => void;\n variant?: \"primary\" | \"secondary\";\n disabled?: boolean;\n}\n\n/** Props for the empty component. */\nexport interface EmptyStateProps {\n icon?: React.ReactNode;\n title: string;\n description?: string;\n actions?: EmptyStateAction[];\n className?: string;\n /** Icon size preset */\n iconSize?: \"sm\" | \"md\" | \"lg\";\n /** Heading level for semantic hierarchy */\n headingLevel?: \"h2\" | \"h3\" | \"h4\";\n}\n\nconst iconSizeClasses = {\n sm: \"text-3xl\",\n md: \"text-4xl\",\n lg: \"text-5xl\",\n};\n\n/** Renders the empty state component. */\nexport function EmptyState({\n icon,\n title,\n description,\n actions,\n className,\n iconSize = \"md\",\n headingLevel = \"h3\",\n}: EmptyStateProps) {\n const HeadingTag = headingLevel;\n\n return (\n <div\n role=\"status\"\n aria-label={title}\n className={cn(\n \"flex flex-col items-center justify-center px-4 py-12 text-center\",\n className,\n )}\n data-opt-id=\"5ZK92\"\n data-opt-slug=\"empty-state.EmptyState\"\n >\n {icon && (\n <div\n className={cn(`mb-4 ${OPT_TEXT_TERTIARY}`, iconSizeClasses[iconSize])}\n aria-hidden=\"true\"\n >\n {icon}\n </div>\n )}\n <HeadingTag className={`text-lg font-semibold ${OPT_TEXT_PRIMARY}`}>\n {title}\n </HeadingTag>\n {description && (\n <p className={`mt-2 max-w-sm text-sm ${OPT_TEXT_SECONDARY}`}>\n {description}\n </p>\n )}\n {actions && actions.length > 0 && (\n <div className=\"mt-6 flex items-center gap-3\">\n {actions.map((action) => (\n <Button\n key={action.id}\n onClick={action.onClick}\n disabled={action.disabled}\n variant={action.variant === \"secondary\" ? \"secondary\" : \"primary\"}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { OPT_BADGE } from \"../lib/styles\";\n\n/** Props for the badge component. */\nexport interface BadgeProps extends ComponentPropsWithoutRef<\"span\"> {\n variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n size?: \"sm\" | \"md\";\n dot?: boolean;\n /** Show a circular progress indicator (0-100) */\n progress?: number;\n /** Diameter of the progress ring in px (default: 16) */\n progressSize?: number;\n}\n\nconst variantStyles: Record<NonNullable<BadgeProps[\"variant\"]>, string> = {\n default: \"bg-bg-subtle text-text-secondary\",\n success: \"bg-success-subtle text-success-fg\",\n warning: \"bg-warning-subtle text-warning-fg\",\n error: \"bg-danger-subtle text-danger-fg\",\n info: \"bg-info-subtle text-info-fg\",\n};\n\nconst dotStyles: Record<NonNullable<BadgeProps[\"variant\"]>, string> = {\n default: \"bg-text-tertiary\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n error: \"bg-danger\",\n info: \"bg-info\",\n};\n\nconst progressStroke: Record<NonNullable<BadgeProps[\"variant\"]>, string> = {\n default: \"stroke-text-tertiary\",\n success: \"stroke-success\",\n warning: \"stroke-warning\",\n error: \"stroke-danger\",\n info: \"stroke-info\",\n};\n\nconst sizeStyles: Record<NonNullable<BadgeProps[\"size\"]>, string> = {\n sm: \"px-1.5 py-0.5 text-[10px]\",\n md: \"px-2 py-0.5 text-[11px]\",\n};\n\n/** Renders the badge component. */\nexport function Badge({\n variant = \"default\",\n size = \"md\",\n dot = false,\n progress,\n progressSize = 16,\n className,\n children,\n ...props\n}: BadgeProps) {\n const hasProgress = progress != null;\n const clampedProgress = hasProgress\n ? Math.min(100, Math.max(0, progress))\n : 0;\n const radius = (progressSize - 3) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (clampedProgress / 100) * circumference;\n\n return (\n <span\n className={cn(\n OPT_BADGE,\n variantStyles[variant],\n sizeStyles[size],\n className,\n )}\n {...props}\n data-opt-id=\"9GBGZ\"\n data-opt-slug=\"badge.Badge\"\n >\n {hasProgress && (\n <svg\n width={progressSize}\n height={progressSize}\n viewBox={`0 0 ${progressSize} ${progressSize}`}\n className=\"mr-1 -ml-0.5 shrink-0\"\n aria-hidden=\"true\"\n >\n <circle\n cx={progressSize / 2}\n cy={progressSize / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={2}\n className=\"stroke-current opacity-20\"\n />\n <circle\n cx={progressSize / 2}\n cy={progressSize / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n className={cn(progressStroke[variant], \"transition-all\")}\n transform={`rotate(-90 ${progressSize / 2} ${progressSize / 2})`}\n />\n </svg>\n )}\n {dot && !hasProgress && (\n <span\n className={cn(\"mr-1.5 h-1.5 w-1.5 rounded-full\", dotStyles[variant])}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/** Props for the spinner component. */\nexport interface SpinnerProps extends ComponentPropsWithoutRef<\"svg\"> {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeStyles: Record<NonNullable<SpinnerProps[\"size\"]>, string> = {\n sm: \"h-4 w-4\",\n md: \"h-6 w-6\",\n lg: \"h-8 w-8\",\n};\n\n/** Renders the spinner component. */\nexport function Spinner({\n size = \"md\",\n className,\n role,\n \"aria-hidden\": ariaHidden,\n \"aria-label\": ariaLabel,\n ...props\n}: SpinnerProps) {\n const isDecorative = ariaHidden === true || ariaHidden === \"true\";\n\n return (\n <svg\n className={cn(\"animate-spin text-current\", sizeStyles[size], className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={isDecorative ? undefined : (role ?? \"status\")}\n aria-hidden={ariaHidden}\n aria-label={isDecorative ? undefined : (ariaLabel ?? \"Loading\")}\n {...props}\n data-opt-id=\"DJS29\"\n data-opt-slug=\"spinner.Spinner\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n );\n}\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { OPT_FOCUS_VISIBLE } from \"../lib/styles\";\n\n/** Props for the alert component. */\nexport interface AlertProps extends ComponentPropsWithoutRef<\"div\"> {\n variant?: \"info\" | \"success\" | \"warning\" | \"error\";\n title?: string;\n icon?: ReactNode;\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nconst variantStyles: Record<NonNullable<AlertProps[\"variant\"]>, string> = {\n info: \"border-info bg-info-subtle text-info-fg\",\n success: \"border-success bg-success-subtle text-success-fg\",\n warning: \"border-warning bg-warning-subtle text-warning-fg\",\n error: \"border-danger bg-danger-subtle text-danger-fg\",\n};\n\nconst iconColors: Record<NonNullable<AlertProps[\"variant\"]>, string> = {\n info: \"text-info-fg\",\n success: \"text-success-fg\",\n warning: \"text-warning-fg\",\n error: \"text-danger-fg\",\n};\n\nconst defaultIcons: Record<NonNullable<AlertProps[\"variant\"]>, ReactNode> = {\n info: (\n <svg\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n success: (\n <svg\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n warning: (\n <svg\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n error: (\n <svg\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\"\n clipRule=\"evenodd\"\n />\n </svg>\n ),\n};\n\n/** Renders the alert component. */\nexport function Alert({\n variant = \"info\",\n title,\n icon,\n dismissible = false,\n onDismiss,\n className,\n children,\n ...props\n}: AlertProps) {\n const displayIcon = icon ?? defaultIcons[variant];\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"relative rounded-lg border p-4\",\n variantStyles[variant],\n className,\n )}\n {...props}\n data-opt-id=\"4SPK6\"\n data-opt-slug=\"alert.Alert\"\n >\n <div className=\"flex\">\n {displayIcon && (\n <div className={cn(\"flex-shrink-0\", iconColors[variant])}>\n {displayIcon}\n </div>\n )}\n <div className={cn(\"flex-1\", displayIcon && \"ml-3\")}>\n {title && <h3 className=\"text-sm font-medium\">{title}</h3>}\n {children && (\n <div className={cn(\"text-sm\", title && \"mt-1\", \"opacity-90\")}>\n {children}\n </div>\n )}\n </div>\n {dismissible && (\n <div className=\"ml-auto pl-3\">\n <button\n type=\"button\"\n onClick={onDismiss}\n className={cn(\n \"hover:bg-bg-subtle inline-flex rounded-md p-1.5 transition-colors\",\n OPT_FOCUS_VISIBLE,\n )}\n aria-label=\"Dismiss\"\n >\n <svg\n className=\"h-4 w-4\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n )}\n </div>\n </div>\n );\n}\n","/**\n * Generates a stable component ID from label text.\n * Eliminates the duplicated `id ?? label?.replace(...)` pattern across input components.\n */\nexport function useInputId(\n id: string | undefined,\n label: string | undefined,\n prefix: string,\n): string | undefined {\n return (\n id ??\n (label\n ? `${prefix}-${label.replace(/\\s+/g, \"-\").toLowerCase()}`\n : undefined)\n );\n}\n","\"use client\";\n\nimport { useState, useCallback, useId } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { koStarRatingLabels } from \"../i18n/ko\";\n\nfunction interpolate(\n template: string,\n values: Record<string, string | number>,\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) =>\n key in values ? String(values[key]) : `{${key}}`,\n );\n}\n\n/** Props for the star rating component. */\nexport interface StarRatingProps {\n value?: number;\n onChange?: (value: number) => void;\n /** 최대 별 개수 (default: 5) */\n max?: number;\n /** 읽기 전용 (default: false) */\n readOnly?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n ariaLabel?: string;\n}\n\nconst sizeMap = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n} as const;\n\nconst gapMap = {\n sm: \"gap-0.5\",\n md: \"gap-1\",\n lg: \"gap-1\",\n} as const;\n\nfunction StarIcon({\n filled,\n className,\n}: {\n filled: boolean;\n className?: string;\n}) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n className={cn(\n filled\n ? // eslint-disable-next-line opt-ui/no-raw-color -- 별점은 amber-400이 디자인 표준 (Apple/Material 등)\n \"fill-amber-400 text-amber-400\"\n : \"text-text-tertiary fill-none\",\n className,\n )}\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"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 </svg>\n );\n}\n\n/** Renders the star rating component. */\nexport function StarRating({\n value = 0,\n onChange,\n max = 5,\n readOnly = false,\n size = \"md\",\n className,\n ariaLabel,\n}: StarRatingProps) {\n const id = useId();\n const [hovered, setHovered] = useState<number | null>(null);\n\n const displayValue = hovered ?? value;\n const iconSize = sizeMap[size];\n const gap = gapMap[size];\n\n const handleClick = useCallback(\n (star: number) => {\n if (!readOnly && onChange) {\n onChange(star);\n }\n },\n [readOnly, onChange],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (readOnly || !onChange) return;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n onChange(Math.min(value + 1, max));\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n onChange(Math.max(value - 1, 1));\n } else if (e.key === \"Home\") {\n e.preventDefault();\n onChange(1);\n } else if (e.key === \"End\") {\n e.preventDefault();\n onChange(max);\n }\n },\n [readOnly, onChange, value, max],\n );\n\n if (readOnly) {\n return (\n <div\n className={cn(\"inline-flex items-center\", gap, className)}\n role=\"img\"\n aria-label={\n ariaLabel ??\n interpolate(koStarRatingLabels.readonlyAriaLabel, { value, max })\n }\n data-opt-id=\"B6ZY4\"\n data-opt-slug=\"star-rating.StarRating\"\n >\n {Array.from({ length: max }, (_, i) => (\n <StarIcon key={i} filled={i < value} className={iconSize} />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\"inline-flex items-center\", gap, className)}\n role=\"radiogroup\"\n aria-label={ariaLabel ?? koStarRatingLabels.groupAriaLabel}\n onKeyDown={handleKeyDown}\n onMouseLeave={() => setHovered(null)}\n data-opt-id=\"B6ZY4\"\n data-opt-slug=\"star-rating.StarRating\"\n >\n {Array.from({ length: max }, (_, i) => {\n const star = i + 1;\n const checked = star === value;\n return (\n <button\n key={i}\n type=\"button\"\n role=\"radio\"\n aria-checked={checked}\n aria-label={interpolate(koStarRatingLabels.starAriaLabel, { star })}\n tabIndex={checked || (value === 0 && i === 0) ? 0 : -1}\n className={cn(\n \"cursor-pointer rounded-sm transition-transform\",\n \"focus-visible:outline-accent hover:scale-110 focus-visible:outline-2 focus-visible:outline-offset-2\",\n )}\n onClick={() => handleClick(star)}\n onMouseEnter={() => setHovered(star)}\n >\n <StarIcon filled={i < displayValue} className={iconSize} />\n </button>\n );\n })}\n <input type=\"hidden\" name={`${id}-rating`} value={value} />\n </div>\n );\n}\n","import {\n Composite,\n CompositeItem,\n CompositeProvider,\n CompositeRow,\n} from \"@reopt-ai/opt-ui-primitives\";\n\nexport { Composite, CompositeItem, CompositeProvider, CompositeRow };\n\ninterface CompositeZoneProps {\n children: React.ReactNode;\n label: string;\n focusLoop?: boolean;\n focusWrap?: boolean;\n className?: string;\n}\n\n/** Renders the composite zone component. */\nexport function CompositeZone({\n children,\n label,\n focusLoop = true,\n focusWrap = true,\n className,\n}: CompositeZoneProps) {\n return (\n <CompositeProvider\n focusLoop={focusLoop}\n focusWrap={focusWrap}\n data-opt-id=\"1JZXE\"\n data-opt-slug=\"composite-zone.CompositeZone\"\n >\n <Composite role=\"grid\" aria-label={label} className={className}>\n {children}\n </Composite>\n </CompositeProvider>\n );\n}\n","\"use client\";\n\nimport {\n DisclosureRoot as PrimDisclosureRoot,\n DisclosureTrigger as PrimDisclosureTrigger,\n DisclosureContent as PrimDisclosureContent,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type {\n DisclosureRootProps,\n DisclosureTriggerProps as PrimDisclosureTriggerProps,\n DisclosureContentProps as PrimDisclosureContentProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport { cn } from \"../lib/cn\";\nimport { OPT_FOCUS, OPT_ANIMATE_ENTER_EXIT } from \"../lib/styles\";\n\nconst triggerClass = `flex w-full cursor-pointer items-center justify-between px-4 py-4 text-left text-sm font-medium text-text-primary transition-colors hover:bg-bg-subtle ${OPT_FOCUS} data-[active-item]:bg-bg-subtle data-[disabled]:cursor-not-allowed`;\n\nconst contentClass = `overflow-hidden ${OPT_ANIMATE_ENTER_EXIT}`;\n\n// ── Root ──\n\n/** Renders the disclosure root component. */\nexport function DisclosureRoot(props: DisclosureRootProps) {\n return (\n <PrimDisclosureRoot\n animated\n {...props}\n data-opt-id=\"AS61F\"\n data-opt-slug=\"disclosure.DisclosureRoot\"\n />\n );\n}\n\n// ── Trigger ──\n\nexport type { PrimDisclosureTriggerProps as DisclosureTriggerProps };\n\n/** Renders the disclosure trigger component. */\nexport function DisclosureTrigger({\n className,\n ...props\n}: PrimDisclosureTriggerProps) {\n return (\n <PrimDisclosureTrigger\n className={cn(triggerClass, className)}\n {...props}\n data-opt-id=\"14EZW\"\n data-opt-slug=\"disclosure.DisclosureTrigger\"\n />\n );\n}\n\n// ── Content ──\n\nexport type { PrimDisclosureContentProps as DisclosureContentProps };\n\n/** Renders the disclosure content component. */\nexport function DisclosureContent({\n className,\n ...props\n}: PrimDisclosureContentProps) {\n return (\n <PrimDisclosureContent\n className={cn(contentClass, className)}\n {...props}\n data-opt-id=\"78HYF\"\n data-opt-slug=\"disclosure.DisclosureContent\"\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n TabsRoot as PrimTabsRoot,\n TabList as PrimTabList,\n Tab as PrimTab,\n TabPanel as PrimTabPanel,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type {\n TabsRootProps as PrimTabsRootProps,\n TabListProps as PrimTabListProps,\n TabProps as PrimTabProps,\n TabPanelProps as PrimTabPanelProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport { cn } from \"../lib/cn\";\nimport { OPT_FOCUS } from \"../lib/styles\";\n\n/**\n * Tab 프레임 형태.\n *\n * - `underline` — 밑줄 강조. 페이지 안에서 콘텐츠를 전환하는 기본 형태.\n * - `workspace` — 편집기 탭. 문서/쿼리처럼 각 탭이 독립적인 작업 상태를 갖고,\n * 열고 닫히며, 저장되지 않은 변경이나 실행 중 같은 상태를 표시해야 할 때.\n */\nexport type TabsVariant = \"underline\" | \"workspace\";\n\n/** Tab의 작업 상태 인디케이터. */\nexport type TabStatus = \"dirty\" | \"running\";\n\nconst TabsVariantContext = React.createContext<TabsVariant>(\"underline\");\n\n// ── Styles ──\n\nconst tabClass = `cursor-pointer border-b-2 border-transparent px-4 py-2.5 text-sm text-text-tertiary transition-colors hover:text-text-primary data-[active-item]:text-text-primary data-[active-item]:border-text-primary data-[disabled]:cursor-not-allowed ${OPT_FOCUS}`;\n\nconst tabListClass = \"flex border-b border-border-subtle\";\n\nconst workspaceTabClass = `group relative inline-flex min-h-9 min-w-33 max-w-54 flex-none cursor-pointer items-center gap-element rounded-t-md border border-b-0 border-transparent px-group py-element font-mono text-xs text-text-tertiary transition-colors data-[disabled]:cursor-not-allowed [&:not([data-active-item]):hover]:bg-raised [&:not([data-active-item]):hover]:text-secondary data-[active-item]:z-10 data-[active-item]:-mb-px data-[active-item]:border-border data-[active-item]:bg-surface data-[active-item]:text-primary before:absolute before:inset-x-group before:top-0 before:h-0.5 before:rounded-b-sm before:bg-accent before:opacity-0 before:transition-opacity before:content-[''] data-[active-item]:before:opacity-100 ${OPT_FOCUS}`;\n\nconst workspaceTabListClass =\n \"flex min-w-0 flex-1 items-end gap-element overflow-x-auto px-element [scrollbar-width:thin]\";\n\nconst workspaceBarClass =\n \"flex min-h-11 items-end border-b border-border bg-subtle pt-element\";\n\nconst workspaceActionsClass =\n \"flex flex-none items-center gap-element self-stretch border-l border-border-subtle bg-subtle px-element\";\n\nconst barClass = \"flex items-center justify-between gap-group\";\n\nconst actionsClass = \"flex flex-none items-center gap-element\";\n\nconst tabPanelClass = `pt-4 ${OPT_FOCUS} data-[focus-visible]:rounded-lg`;\n\n// ── Root ──\n\n/** Props for the tabs root component. */\nexport interface TabsRootProps extends PrimTabsRootProps {\n /** Tab 프레임 형태. 하위 TabList/Tab이 이 값을 따른다. */\n variant?: TabsVariant;\n}\n\n/** Renders the tabs root component. */\nexport function TabsRoot({ variant = \"underline\", ...props }: TabsRootProps) {\n return (\n <TabsVariantContext.Provider value={variant}>\n <PrimTabsRoot\n {...props}\n data-opt-id=\"DJ8K8\"\n data-opt-slug=\"tabs.TabsRoot\"\n />\n </TabsVariantContext.Provider>\n );\n}\n\n// ── TabList ──\n\n/** Props for the tab list component. */\nexport interface TabListProps extends PrimTabListProps {\n /**\n * 탭 줄 오른쪽에 붙는 액션 영역 (새 탭, 닫기 등). tablist 바깥에 렌더되므로\n * 버튼이 탭 순회에 끼어들지 않는다.\n */\n actions?: React.ReactNode;\n}\n\n/** Renders the tab list component. */\nexport function TabList({ className, actions, ...props }: TabListProps) {\n const variant = React.useContext(TabsVariantContext);\n const list = (\n <PrimTabList\n className={cn(\n variant === \"workspace\" ? workspaceTabListClass : tabListClass,\n className,\n )}\n {...props}\n data-opt-id=\"68K7E\"\n data-opt-slug=\"tabs.TabList\"\n />\n );\n\n if (!actions) return list;\n\n return (\n // eslint-disable-next-line opt-ui/require-opt-id -- 식별자는 실제 tablist(PrimTabList)에 있어야 devtool 인스펙터가 의미 있는 요소를 가리킨다. 이 래퍼는 actions가 있을 때만 생기는 레이아웃 프레임이다.\n <div className={variant === \"workspace\" ? workspaceBarClass : barClass}>\n {list}\n <div\n className={\n variant === \"workspace\" ? workspaceActionsClass : actionsClass\n }\n >\n {actions}\n </div>\n </div>\n );\n}\n\n// ── Tab ──\n\n/** Props for the tab component. */\nexport interface TabProps extends PrimTabProps {\n /** 탭 이름 앞에 놓이는 아이콘. 활성 탭에서 accent 색으로 전환된다. */\n icon?: React.ReactNode;\n /** 저장되지 않은 변경(`dirty`)이나 실행 중(`running`) 표시. */\n status?: TabStatus;\n /** status 인디케이터의 접근성 레이블. status를 쓰면 함께 지정한다. */\n statusLabel?: string;\n}\n\n/** Renders the tab component. */\nexport function Tab({\n className,\n icon,\n status,\n statusLabel,\n children,\n ...props\n}: TabProps) {\n const variant = React.useContext(TabsVariantContext);\n const decorated = icon != null || status != null;\n\n return (\n <PrimTab\n className={cn(\n variant === \"workspace\" ? workspaceTabClass : tabClass,\n className,\n )}\n {...props}\n data-opt-id=\"HZTNP\"\n data-opt-slug=\"tabs.Tab\"\n >\n {decorated ? (\n <>\n {icon != null && (\n <span\n aria-hidden=\"true\"\n className=\"text-text-tertiary group-data-[active-item]:text-accent flex flex-none items-center transition-colors\"\n >\n {icon}\n </span>\n )}\n <span className=\"min-w-0 flex-1 truncate text-left\">{children}</span>\n {status != null && (\n <span\n role=\"status\"\n aria-label={statusLabel}\n className={cn(\n \"size-element flex-none rounded-full\",\n status === \"running\"\n ? \"bg-accent ring-accent-subtle ring-2\"\n : \"bg-text-tertiary\",\n )}\n />\n )}\n </>\n ) : (\n children\n )}\n </PrimTab>\n );\n}\n\n// ── TabPanel ──\n\n/** Props for the tab panel component. */\nexport type TabPanelProps = PrimTabPanelProps;\n\n/** Renders the tab panel component. */\nexport function TabPanel({ className, ...props }: TabPanelProps) {\n return (\n <PrimTabPanel\n className={cn(tabPanelClass, className)}\n {...props}\n data-opt-id=\"C0MBP\"\n data-opt-slug=\"tabs.TabPanel\"\n />\n );\n}\n","\"use client\";\n\nimport {\n SelectRoot as PrimSelectRoot,\n SelectLabel as PrimSelectLabel,\n SelectTrigger as PrimSelectTrigger,\n SelectPopover as PrimSelectPopover,\n SelectItem as PrimSelectItem,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type {\n SelectRootProps,\n SelectLabelProps as PrimSelectLabelProps,\n SelectTriggerProps as PrimSelectTriggerProps,\n SelectPopoverProps as PrimSelectPopoverProps,\n SelectItemProps as PrimSelectItemProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport { cn } from \"../lib/cn\";\nimport {\n OPT_INPUT,\n OPT_SURFACE_POPOVER,\n OPT_ANIMATE_ENTER_EXIT,\n OPT_ITEM_BASE,\n OPT_ACTIVE_ITEM,\n OPT_FOCUS,\n} from \"../lib/styles\";\n\nconst triggerClass = `${OPT_INPUT} cursor-pointer items-center justify-between data-[disabled]:cursor-not-allowed ${OPT_FOCUS}`;\n\nconst popoverClass = `${OPT_SURFACE_POPOVER} ${OPT_ANIMATE_ENTER_EXIT} z-[120]`;\n\nconst itemClass = `flex cursor-pointer items-center gap-2 data-[disabled]:cursor-not-allowed ${OPT_ITEM_BASE} ${OPT_ACTIVE_ITEM}`;\n\n// ── Root ──\n\n/** Renders the select root component. */\nexport function SelectRoot(props: SelectRootProps) {\n return (\n <PrimSelectRoot\n {...props}\n data-opt-id=\"A5TYW\"\n data-opt-slug=\"select.SelectRoot\"\n />\n );\n}\n\n// ── Label ──\n\n/** Renders the select label component. */\nexport function SelectLabel(props: PrimSelectLabelProps) {\n return (\n <PrimSelectLabel\n {...props}\n data-opt-id=\"SKM59\"\n data-opt-slug=\"select.SelectLabel\"\n />\n );\n}\n\n// ── Trigger ──\n\ntype SelectTriggerProps = PrimSelectTriggerProps & {\n minWidth?: number | string;\n};\n\n/** Renders the select trigger component. */\nexport function SelectTrigger({\n className,\n minWidth = 140,\n style,\n ...props\n}: SelectTriggerProps) {\n return (\n <PrimSelectTrigger\n className={cn(triggerClass, className)}\n style={{\n minWidth: typeof minWidth === \"number\" ? `${minWidth}px` : minWidth,\n ...style,\n }}\n {...props}\n data-opt-id=\"V6F86\"\n data-opt-slug=\"select.SelectTrigger\"\n />\n );\n}\n\n// ── Popover ──\n\n/** Renders the select popover component. */\nexport function SelectPopover({ className, ...props }: PrimSelectPopoverProps) {\n return (\n <PrimSelectPopover\n className={cn(popoverClass, className)}\n {...props}\n data-opt-id=\"P152F\"\n data-opt-slug=\"select.SelectPopover\"\n />\n );\n}\n\n// ── Item ──\n\n/** Renders the select item component. */\nexport function SelectItem({ className, ...props }: PrimSelectItemProps) {\n return (\n <PrimSelectItem\n className={cn(itemClass, className)}\n {...props}\n data-opt-id=\"KKBAF\"\n data-opt-slug=\"select.SelectItem\"\n />\n );\n}\n","\"use client\";\n\nimport {\n DialogRoot as PrimDialogRoot,\n DialogDisclosure as PrimDialogDisclosure,\n DialogPanel as PrimDialogPanel,\n AlertDialogPanel as PrimAlertDialogPanel,\n DialogHeading as PrimDialogHeading,\n DialogDescription as PrimDialogDescription,\n DialogDismiss as PrimDialogDismiss,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type {\n DialogRootProps,\n DialogPanelProps as PrimDialogPanelProps,\n AlertDialogPanelProps as PrimAlertDialogPanelProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n OPT_ANIMATE_DIALOG,\n OPT_FOCUS,\n OPT_FOCUS_VISIBLE,\n OPT_TEXT_PRIMARY,\n OPT_TEXT_SECONDARY,\n OPT_BUTTON_PRIMARY,\n} from \"../lib/styles\";\n\nconst sizeClasses = {\n xs: \"max-w-xs\",\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n xl: \"max-w-4xl\",\n full: \"max-w-[calc(100vw-2rem)]\",\n} as const;\n\n/** Type definition for dialog size. */\nexport type DialogSize = keyof typeof sizeClasses;\n\nconst panelBase = `fixed inset-auto left-1/2 top-[20%] z-50 m-0 w-full -translate-x-1/2 rounded-xl border border-border bg-surface p-0 shadow-2xl ${OPT_ANIMATE_DIALOG}`;\n\n// ── Root ──\n\n/** Renders the dialog root component. */\nexport function DialogRoot(props: DialogRootProps) {\n return (\n <PrimDialogRoot\n animated\n {...props}\n data-opt-id=\"MDC91\"\n data-opt-slug=\"dialog.DialogRoot\"\n />\n );\n}\n\n// ── Disclosure (trigger) ──\n\ntype DialogDisclosureProps = ComponentPropsWithoutRef<\"button\">;\n\n/** Renders the dialog disclosure component. */\nexport function DialogDisclosure({\n className,\n ...props\n}: DialogDisclosureProps) {\n return (\n <PrimDialogDisclosure\n className={cn(\n \"inline-flex cursor-pointer items-center justify-center rounded-lg font-medium transition-colors\",\n OPT_BUTTON_PRIMARY,\n OPT_FOCUS_VISIBLE,\n className,\n )}\n {...props}\n data-opt-id=\"32QJK\"\n data-opt-slug=\"dialog.DialogDisclosure\"\n />\n );\n}\n\n// ── Panel ──\n\ntype DialogPanelProps = PrimDialogPanelProps & {\n size?: DialogSize;\n};\n\n/** Renders the dialog panel component. */\nexport function DialogPanel({\n className,\n size = \"md\",\n ...props\n}: DialogPanelProps) {\n return (\n <PrimDialogPanel\n className={cn(panelBase, sizeClasses[size], className)}\n {...props}\n data-opt-id=\"BTMTG\"\n data-opt-slug=\"dialog.DialogPanel\"\n />\n );\n}\n\n// ── Alert Dialog Panel (role=\"alertdialog\", no accidental dismissal) ──\n\n/** Props for the alert dialog panel component. */\nexport type AlertDialogPanelProps = PrimAlertDialogPanelProps & {\n size?: DialogSize;\n};\n\n/**\n * A dialog that demands an explicit choice: `role=\"alertdialog\"` with no\n * backdrop/Escape dismissal. Use for destructive confirmations. Compose with\n * the other Dialog parts (DialogRoot/Heading/Description/Dismiss/…).\n */\nexport function AlertDialogPanel({\n className,\n size = \"sm\",\n ...props\n}: AlertDialogPanelProps) {\n return (\n <PrimAlertDialogPanel\n className={cn(panelBase, sizeClasses[size], className)}\n {...props}\n data-opt-id=\"80HGS\"\n data-opt-slug=\"dialog.AlertDialogPanel\"\n />\n );\n}\n\n// ── Heading (auto aria-labelledby) ──\n\ntype DialogHeadingProps = ComponentPropsWithoutRef<\"h2\">;\n\n/** Renders the dialog heading component. */\nexport function DialogHeading({ className, ...props }: DialogHeadingProps) {\n return (\n <PrimDialogHeading\n className={cn(`text-lg font-semibold ${OPT_TEXT_PRIMARY}`, className)}\n {...props}\n data-opt-id=\"4NW4H\"\n data-opt-slug=\"dialog.DialogHeading\"\n />\n );\n}\n\n// ── Description (auto aria-describedby) ──\n\ntype DialogDescriptionProps = ComponentPropsWithoutRef<\"p\">;\n\n/** Renders the dialog description component. */\nexport function DialogDescription({\n className,\n ...props\n}: DialogDescriptionProps) {\n return (\n <PrimDialogDescription\n className={cn(`text-sm ${OPT_TEXT_SECONDARY}`, className)}\n {...props}\n data-opt-id=\"2BN3X\"\n data-opt-slug=\"dialog.DialogDescription\"\n />\n );\n}\n\n// ── Dismiss ──\n\ntype DialogDismissProps = ComponentPropsWithoutRef<\"button\">;\n\n/** Renders the dialog dismiss component. */\nexport function DialogDismiss({ className, ...props }: DialogDismissProps) {\n return (\n <PrimDialogDismiss\n className={cn(\n \"hover:bg-bg-subtle rounded-md p-1.5 transition-colors\",\n \"cursor-pointer data-[disabled]:cursor-not-allowed\",\n OPT_FOCUS,\n className,\n )}\n {...props}\n data-opt-id=\"JXT0Y\"\n data-opt-slug=\"dialog.DialogDismiss\"\n />\n );\n}\n\n// ── Header (heading + dismiss layout) ──\n\n/** Props for the dialog header component. */\nexport interface DialogHeaderProps {\n children: ReactNode;\n className?: string;\n}\n\n/** Renders the dialog header component. */\nexport function DialogHeader({ children, className }: DialogHeaderProps) {\n return (\n <div\n className={cn(\n \"border-border flex items-start justify-between gap-4 border-b px-6 py-4\",\n className,\n )}\n data-opt-id=\"K8NYY\"\n data-opt-slug=\"dialog.DialogHeader\"\n >\n <div className=\"gap-element flex min-w-0 flex-1 flex-col\">{children}</div>\n </div>\n );\n}\n\n// ── Body (scrollable content area) ──\n\n/** Props for the dialog body component. */\nexport interface DialogBodyProps {\n children: ReactNode;\n className?: string;\n}\n\n/** Renders the dialog body component. */\nexport function DialogBody({ children, className }: DialogBodyProps) {\n return (\n <div\n className={cn(\"flex-1 overflow-y-auto px-6 py-4\", className)}\n data-opt-id=\"EE32H\"\n data-opt-slug=\"dialog.DialogBody\"\n >\n {children}\n </div>\n );\n}\n\n// ── Footer (action bar) ──\n\n/** Props for the dialog footer component. */\nexport interface DialogFooterProps {\n children: ReactNode;\n className?: string;\n}\n\n/** Renders the dialog footer component. */\nexport function DialogFooter({ children, className }: DialogFooterProps) {\n return (\n <div\n className={cn(\n \"border-border gap-element flex items-center justify-end border-t px-6 py-4\",\n className,\n )}\n data-opt-id=\"AYQSR\"\n data-opt-slug=\"dialog.DialogFooter\"\n >\n {children}\n </div>\n );\n}\n","\"use client\";\n\nimport {\n ComboboxRoot as PrimComboboxRoot,\n ComboboxInput as PrimComboboxInput,\n ComboboxPopover as PrimComboboxPopover,\n ComboboxItem as PrimComboboxItem,\n ComboboxGroup as PrimComboboxGroup,\n ComboboxGroupLabel as PrimComboboxGroupLabel,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type {\n ComboboxRootProps,\n ComboboxInputProps as PrimComboboxInputProps,\n ComboboxPopoverProps as PrimComboboxPopoverProps,\n ComboboxItemProps as PrimComboboxItemProps,\n ComboboxGroupProps as PrimComboboxGroupProps,\n ComboboxGroupLabelProps as PrimComboboxGroupLabelProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport { cn } from \"../lib/cn\";\nimport { koComboboxLabels } from \"../i18n/ko\";\nimport {\n OPT_INPUT,\n OPT_SURFACE_POPOVER,\n OPT_ANIMATE_ENTER_EXIT,\n OPT_ITEM_BASE,\n OPT_ACTIVE_ITEM,\n OPT_FOCUS,\n} from \"../lib/styles\";\n\nconst inputClass = `${OPT_INPUT} ${OPT_FOCUS}`;\n\nconst popoverClass = `${OPT_SURFACE_POPOVER} max-h-60 overflow-y-auto ${OPT_ANIMATE_ENTER_EXIT}`;\n\nconst itemClass = `${OPT_ITEM_BASE} ${OPT_ACTIVE_ITEM}`;\n\nconst groupLabelClass = \"px-2 py-1.5 text-xs font-medium text-text-tertiary\";\n\nconst emptyClass = \"py-4 text-center text-sm text-text-tertiary\";\n\n// ── Root ──\n\n/** Renders the combobox root component. */\nexport function ComboboxRoot(props: ComboboxRootProps) {\n return (\n <PrimComboboxRoot\n {...props}\n data-opt-id=\"VACXX\"\n data-opt-slug=\"combobox.ComboboxRoot\"\n />\n );\n}\n\n// ── Input ──\n\n/** Renders the combobox input component. */\nexport function ComboboxInput({ className, ...props }: PrimComboboxInputProps) {\n return (\n <PrimComboboxInput\n className={cn(inputClass, className)}\n {...props}\n data-opt-id=\"92FZS\"\n data-opt-slug=\"combobox.ComboboxInput\"\n />\n );\n}\n\n// ── Popover ──\n\n/** Renders the combobox popover component. */\nexport function ComboboxPopover({\n className,\n ...props\n}: PrimComboboxPopoverProps) {\n return (\n <PrimComboboxPopover\n className={cn(popoverClass, className)}\n {...props}\n data-opt-id=\"WS4PD\"\n data-opt-slug=\"combobox.ComboboxPopover\"\n />\n );\n}\n\n// ── Item ──\n\n/** Renders the combobox item component. */\nexport function ComboboxItem({ className, ...props }: PrimComboboxItemProps) {\n return (\n <PrimComboboxItem\n className={cn(itemClass, className)}\n {...props}\n data-opt-id=\"MAZJN\"\n data-opt-slug=\"combobox.ComboboxItem\"\n />\n );\n}\n\n// ── Group ──\n\n/** Renders the combobox group component. */\nexport function ComboboxGroup(props: PrimComboboxGroupProps) {\n return (\n <PrimComboboxGroup\n {...props}\n data-opt-id=\"SPJQC\"\n data-opt-slug=\"combobox.ComboboxGroup\"\n />\n );\n}\n\n// ── GroupLabel ──\n\n/** Renders the combobox group label component. */\nexport function ComboboxGroupLabel({\n className,\n ...props\n}: PrimComboboxGroupLabelProps) {\n return (\n <PrimComboboxGroupLabel\n className={cn(groupLabelClass, className)}\n {...props}\n data-opt-id=\"512YF\"\n data-opt-slug=\"combobox.ComboboxGroupLabel\"\n />\n );\n}\n\n// ── Empty ──\n\n/** Renders the combobox empty component. */\nexport function ComboboxEmpty({\n className,\n children = koComboboxLabels.empty,\n}: {\n className?: string;\n children?: React.ReactNode;\n}) {\n return (\n <p\n className={cn(emptyClass, className)}\n data-opt-id=\"RZ06M\"\n data-opt-slug=\"combobox.ComboboxEmpty\"\n >\n {children}\n </p>\n );\n}\n","\"use client\";\n\nimport {\n MenubarRoot as PrimMenubarRoot,\n MenubarContainer as PrimMenubarContainer,\n MenuRoot as PrimMenuRoot,\n MenuTrigger as PrimMenuTrigger,\n MenuPopover as PrimMenuPopover,\n MenuItem as PrimMenuItem,\n MenuItemCheckbox as PrimMenuItemCheckbox,\n MenuItemRadio as PrimMenuItemRadio,\n MenuSeparator as PrimMenuSeparator,\n MenuButtonArrow as PrimMenuButtonArrow,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type {\n MenubarRootProps,\n MenubarContainerProps as PrimMenubarContainerProps,\n MenuRootProps,\n MenuTriggerProps as PrimMenuTriggerProps,\n MenuPopoverProps as PrimMenuPopoverProps,\n MenuItemProps as PrimMenuItemProps,\n MenuItemCheckboxProps as PrimMenuItemCheckboxProps,\n MenuItemRadioProps as PrimMenuItemRadioProps,\n MenuSeparatorProps as PrimMenuSeparatorProps,\n MenuButtonArrowProps as PrimMenuButtonArrowProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport { cn } from \"../lib/cn\";\nimport {\n OPT_SURFACE_POPOVER,\n OPT_SURFACE,\n OPT_BORDER,\n OPT_ANIMATE_ENTER_EXIT,\n OPT_ACTIVE_ITEM,\n OPT_FOCUS,\n} from \"../lib/styles\";\n\nconst menuButtonClass = `inline-flex cursor-pointer items-center gap-1 rounded px-3 py-1.5 text-sm text-text-primary hover:bg-bg-subtle data-[active]:bg-bg-subtle data-[disabled]:cursor-not-allowed ${OPT_FOCUS}`;\n\nconst menuPopoverClass = `${OPT_SURFACE_POPOVER} min-w-[180px] ${OPT_ANIMATE_ENTER_EXIT}`;\n\nconst menuItemClass = `flex cursor-pointer items-center justify-between rounded-md px-2 py-1.5 text-sm text-text-primary outline-none data-[disabled]:cursor-not-allowed ${OPT_ACTIVE_ITEM}`;\n\nconst menuSeparatorClass = \"my-1 border-t border-border-subtle\";\n\nconst menubarClass = `${OPT_SURFACE} ${OPT_BORDER} flex items-center gap-1 px-1 py-1`;\n\n// ── MenubarRoot ──\n\n/** Renders the menubar root component. */\nexport function MenubarRoot(props: MenubarRootProps) {\n return (\n <PrimMenubarRoot\n {...props}\n data-opt-id=\"2ERC6\"\n data-opt-slug=\"menu.MenubarRoot\"\n />\n );\n}\n\n// ── Menubar ──\n\n/** Renders the menubar container component. */\nexport function MenubarContainer({\n className,\n ...props\n}: PrimMenubarContainerProps) {\n return (\n <PrimMenubarContainer\n className={cn(menubarClass, className)}\n {...props}\n data-opt-id=\"4MVQT\"\n data-opt-slug=\"menu.MenubarContainer\"\n />\n );\n}\n\n// ── MenuRoot ──\n\n/** Renders the menu root component. */\nexport function MenuRoot(props: MenuRootProps) {\n return (\n <PrimMenuRoot\n {...props}\n data-opt-id=\"H2WRF\"\n data-opt-slug=\"menu.MenuRoot\"\n />\n );\n}\n\n// ── MenuTrigger ──\n\n/** Renders the menu trigger component. */\nexport function MenuTrigger({ className, ...props }: PrimMenuTriggerProps) {\n return (\n <PrimMenuTrigger\n className={cn(menuButtonClass, className)}\n {...props}\n data-opt-id=\"46BJG\"\n data-opt-slug=\"menu.MenuTrigger\"\n />\n );\n}\n\n// ── MenuButtonArrow ──\n\n/** Renders the menu button arrow component. */\nexport function MenuButtonArrow(props: PrimMenuButtonArrowProps) {\n return (\n <PrimMenuButtonArrow\n {...props}\n data-opt-id=\"J1AQH\"\n data-opt-slug=\"menu.MenuButtonArrow\"\n />\n );\n}\n\n// ── MenuPopover ──\n\n/** Renders the menu popover component. */\nexport function MenuPopover({ className, ...props }: PrimMenuPopoverProps) {\n return (\n <PrimMenuPopover\n className={cn(menuPopoverClass, className)}\n {...props}\n data-opt-id=\"Q1MFY\"\n data-opt-slug=\"menu.MenuPopover\"\n />\n );\n}\n\n// ── MenuItem ──\n\n/** Renders the menu item component. */\nexport function MenuItem({ className, ...props }: PrimMenuItemProps) {\n return (\n <PrimMenuItem\n className={cn(menuItemClass, className)}\n {...props}\n data-opt-id=\"71JVB\"\n data-opt-slug=\"menu.MenuItem\"\n />\n );\n}\n\n// ── MenuItemCheckbox ──\n\n/** Renders the menu item checkbox component. */\nexport function MenuItemCheckbox({\n className,\n ...props\n}: PrimMenuItemCheckboxProps) {\n return (\n <PrimMenuItemCheckbox\n className={cn(menuItemClass, className)}\n {...props}\n data-opt-id=\"DG8B3\"\n data-opt-slug=\"menu.MenuItemCheckbox\"\n />\n );\n}\n\n// ── MenuItemRadio ──\n\n/** Renders the menu item radio component. */\nexport function MenuItemRadio({ className, ...props }: PrimMenuItemRadioProps) {\n return (\n <PrimMenuItemRadio\n className={cn(menuItemClass, className)}\n {...props}\n data-opt-id=\"ZT759\"\n data-opt-slug=\"menu.MenuItemRadio\"\n />\n );\n}\n\n// ── MenuSeparator ──\n\n/** Renders the menu separator component. */\nexport function MenuSeparator({ className, ...props }: PrimMenuSeparatorProps) {\n return (\n <PrimMenuSeparator\n className={cn(menuSeparatorClass, className)}\n {...props}\n data-opt-id=\"AJV8K\"\n data-opt-slug=\"menu.MenuSeparator\"\n />\n );\n}\n","\"use client\";\n\nimport {\n ToolbarRoot as PrimToolbarRoot,\n ToolbarContainer as PrimToolbarContainer,\n ToolbarButton as PrimToolbarButton,\n ToolbarSeparator as PrimToolbarSeparator,\n TooltipProvider as PrimTooltipProvider,\n TooltipAnchor as PrimTooltipAnchor,\n Tooltip as PrimTooltip,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type {\n ToolbarRootProps,\n ToolbarContainerProps as PrimToolbarContainerProps,\n ToolbarButtonProps as PrimToolbarButtonProps,\n ToolbarSeparatorProps as PrimToolbarSeparatorProps,\n TooltipProviderProps,\n TooltipAnchorProps as PrimTooltipAnchorProps,\n TooltipProps as PrimTooltipProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport { cn } from \"../lib/cn\";\nimport {\n OPT_SURFACE,\n OPT_BORDER,\n OPT_ACTIVE_ITEM,\n OPT_FOCUS,\n} from \"../lib/styles\";\n\nconst toolbarClass = `${OPT_SURFACE} ${OPT_BORDER} inline-flex w-fit items-center gap-0.5 px-1.5 py-1`;\n\nconst buttonClass = `cursor-pointer rounded-md px-2.5 py-1.5 text-text-primary transition-colors data-[disabled]:cursor-not-allowed ${OPT_ACTIVE_ITEM} ${OPT_FOCUS}`;\n\nconst separatorClass = \"mx-1 h-6 w-px bg-border-subtle\";\n\nconst tooltipClass =\n \"z-50 rounded-md bg-foreground px-2 py-1 text-xs text-background shadow-lg\";\n\n// ── Root ──\n\n/** Renders the toolbar root component. */\nexport function ToolbarRoot(props: ToolbarRootProps) {\n return (\n <PrimToolbarRoot\n {...props}\n data-opt-id=\"V33Y0\"\n data-opt-slug=\"toolbar.ToolbarRoot\"\n />\n );\n}\n\n// ── Toolbar ──\n\n/** Renders the toolbar container component. */\nexport function ToolbarContainer({\n className,\n ...props\n}: PrimToolbarContainerProps) {\n return (\n <PrimToolbarContainer\n className={cn(toolbarClass, className)}\n {...props}\n data-opt-id=\"2AVXB\"\n data-opt-slug=\"toolbar.ToolbarContainer\"\n />\n );\n}\n\n// ── Button ──\n\n/** Renders the toolbar button component. */\nexport function ToolbarButton({ className, ...props }: PrimToolbarButtonProps) {\n return (\n <PrimToolbarButton\n className={cn(buttonClass, className)}\n {...props}\n data-opt-id=\"C212C\"\n data-opt-slug=\"toolbar.ToolbarButton\"\n />\n );\n}\n\n// ── Separator ──\n\n/** Renders the toolbar separator component. */\nexport function ToolbarSeparator({\n className,\n ...props\n}: PrimToolbarSeparatorProps) {\n return (\n <PrimToolbarSeparator\n className={cn(separatorClass, className)}\n {...props}\n data-opt-id=\"9J72S\"\n data-opt-slug=\"toolbar.ToolbarSeparator\"\n />\n );\n}\n\n// ── Tooltip helpers (re-export) ──\n\n/** Renders the tooltip provider component. */\nexport function TooltipProvider(props: TooltipProviderProps) {\n return (\n <PrimTooltipProvider\n {...props}\n data-opt-id=\"6NKHT\"\n data-opt-slug=\"toolbar.TooltipProvider\"\n />\n );\n}\n\n/** Renders the tooltip anchor component. */\nexport function TooltipAnchor({ className, ...props }: PrimTooltipAnchorProps) {\n return (\n <PrimTooltipAnchor\n className={className}\n {...props}\n data-opt-id=\"SAW1B\"\n data-opt-slug=\"toolbar.TooltipAnchor\"\n />\n );\n}\n\n/** Renders the tooltip component. */\nexport function Tooltip({ className, ...props }: PrimTooltipProps) {\n return (\n <PrimTooltip\n className={cn(tooltipClass, className)}\n {...props}\n data-opt-id=\"XSAT4\"\n data-opt-slug=\"toolbar.Tooltip\"\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n FieldMessages,\n RequiredMark,\n getDescribedBy,\n} from \"../lib/field-messages\";\nimport {\n OPT_INPUT,\n OPT_INPUT_ERROR,\n OPT_FOCUS_VISIBLE,\n OPT_TEXT_LABEL,\n} from \"../lib/styles\";\nimport { useControlledState } from \"../lib/use-controlled-state\";\nimport { useInputId } from \"../lib/use-input-id\";\n\n/** Number of decimal places a finite number is written with (handles exponents). */\nfunction decimalPlaces(n: number): number {\n if (!Number.isFinite(n)) return 0;\n const s = String(n);\n const exp = s.indexOf(\"e\");\n if (exp >= 0) {\n const mantissa = s.slice(0, exp);\n const dot = mantissa.indexOf(\".\");\n const mantissaDecimals = dot >= 0 ? mantissa.length - dot - 1 : 0;\n return Math.max(0, mantissaDecimals - Number(s.slice(exp + 1)));\n }\n const dot = s.indexOf(\".\");\n return dot >= 0 ? s.length - dot - 1 : 0;\n}\n\n/**\n * Adds `delta` to `value` without binary floating-point drift (e.g. 0.1 + 0.2).\n * Rounds to the largest precision present among the operands and `step`.\n */\nfunction addPrecise(value: number, delta: number, step: number): number {\n const decimals = Math.max(\n decimalPlaces(value),\n decimalPlaces(delta),\n decimalPlaces(step),\n );\n if (decimals === 0) return value + delta;\n const factor = 10 ** Math.min(decimals, 15);\n return Math.round((value + delta) * factor) / factor;\n}\n\ntype NumberInputValue = number | null;\n\ntype DraftState =\n | { kind: \"empty\" }\n | { kind: \"partial\" }\n | { kind: \"invalid\" }\n | { kind: \"valid\"; value: number };\n\nconst NUMBER_PATTERN = /^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\nconst PARTIAL_NUMBER_PATTERN =\n /^[+-]?$|^[+-]?\\.$|^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)[eE][+-]?$/;\n\nfunction parseDraftValue(raw: string): DraftState {\n const value = raw.trim();\n if (value === \"\") return { kind: \"empty\" };\n if (PARTIAL_NUMBER_PATTERN.test(value)) return { kind: \"partial\" };\n if (!NUMBER_PATTERN.test(value)) return { kind: \"invalid\" };\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return { kind: \"invalid\" };\n return { kind: \"valid\", value: parsed };\n}\n\n/** Accessible labels used by NumberInput controls and validation text. */\nexport interface NumberInputLabels {\n input?: string;\n decrease?: string;\n increase?: string;\n clear?: string;\n invalid?: string;\n}\n\nconst DEFAULT_LABELS: Required<NumberInputLabels> = {\n input: \"Number\",\n decrease: \"Decrease\",\n increase: \"Increase\",\n clear: \"Clear value\",\n invalid: \"Enter a valid number\",\n};\n\n/** Props for the number input component. */\nexport interface NumberInputProps<TNullable extends boolean = false> {\n value?: TNullable extends true ? NumberInputValue : number;\n defaultValue?: TNullable extends true ? NumberInputValue : number;\n onChange?: (\n value: TNullable extends true ? NumberInputValue : number,\n ) => void;\n /** Allows the field to commit an empty value as `null`. */\n nullable?: TNullable;\n /** Shows a clear button when `nullable` is true and the current value is set. */\n clearable?: boolean;\n min?: number;\n max?: number;\n step?: number;\n /** Step used for PageUp/PageDown. Defaults to `step * 10`. */\n largeStep?: number;\n /**\n * When `true` (and a `label` is set), the label becomes a horizontal drag\n * handle that scrubs the value, like a spinner knob.\n */\n scrub?: boolean;\n label?: string;\n /** Unit suffix rendered inside the input, for example `%`, `px`, or `ms`. */\n unit?: React.ReactNode;\n required?: boolean;\n error?: string;\n hint?: string;\n disabled?: boolean;\n /** Keeps the field focusable with `aria-disabled` and exposes the reason. */\n disabledReason?: string;\n labels?: NumberInputLabels;\n className?: string;\n id?: string;\n \"aria-label\"?: string;\n}\n\n/** Renders the number input component. */\nexport function NumberInput<TNullable extends boolean = false>({\n value: controlledValue,\n defaultValue,\n onChange,\n nullable,\n clearable = false,\n min,\n max,\n step = 1,\n largeStep,\n scrub = false,\n label,\n unit,\n required,\n error,\n hint,\n disabled = false,\n disabledReason,\n labels,\n className,\n id,\n \"aria-label\": ariaLabel,\n}: NumberInputProps<TNullable>) {\n const generatedId = React.useId();\n const inputId =\n useInputId(id, label, \"number-input\") ?? `${generatedId}-number-input`;\n const resolvedLabels = { ...DEFAULT_LABELS, ...labels };\n const isNullable = nullable === true;\n const nativeDisabled = disabled && !disabledReason;\n const interactionDisabled = disabled;\n const [invalidDraft, setInvalidDraft] = React.useState(false);\n const effectiveError = error ?? (invalidDraft ? resolvedLabels.invalid : \"\");\n const hasError = Boolean(effectiveError);\n const clamp = React.useCallback(\n (v: number) => {\n let clamped = v;\n if (min !== undefined) clamped = Math.max(min, clamped);\n if (max !== undefined) clamped = Math.min(max, clamped);\n return clamped;\n },\n [min, max],\n );\n\n const normalizedDefaultValue =\n (defaultValue as NumberInputValue | undefined) ?? (isNullable ? null : 0);\n const normalizedControlledValue = controlledValue as\n | NumberInputValue\n | undefined;\n const emitChange = React.useCallback(\n (next: NumberInputValue) => {\n if (isNullable) {\n (onChange as ((value: NumberInputValue) => void) | undefined)?.(next);\n return;\n }\n if (next !== null) {\n (onChange as ((value: number) => void) | undefined)?.(next);\n }\n },\n [isNullable, onChange],\n );\n const [rawValue, setRawValue] = useControlledState<NumberInputValue>(\n normalizedDefaultValue,\n normalizedControlledValue,\n emitChange,\n );\n const value = rawValue;\n const numericValue = value ?? 0;\n\n const setValue = React.useCallback(\n (next: NumberInputValue) => {\n setRawValue(next === null ? null : clamp(next));\n },\n [clamp, setRawValue],\n );\n\n // Format the display value, preserving the value's own precision so a\n // controlled `3.14159` with `step={1}` is not truncated to `3`.\n const format = React.useCallback(\n (v: number) => {\n const decimals = Math.max(decimalPlaces(step), decimalPlaces(v));\n return v.toFixed(Math.min(decimals, 20));\n },\n [step],\n );\n\n // While focused, keep the raw typed text so users can type \"3.\" or \"-\"\n // mid-edit without the formatter fighting their cursor. Revert on blur.\n const [inputText, setInputText] = React.useState<string | null>(null);\n const focusedRef = React.useRef(false);\n const displayValue = inputText ?? (value === null ? \"\" : format(value));\n\n // Latest step/clamp/format for stable handlers used in timers/listeners.\n const stateRef = React.useRef({ step, clamp, format });\n stateRef.current = { step, clamp, format };\n\n // Live value, updated both on render (reflects controlled/uncontrolled value)\n // and synchronously inside spin/setTo so rapid repeat steps accumulate even\n // when several fire before the next React render.\n const valueRef = React.useRef(value);\n valueRef.current = value;\n\n const getSpinBase = React.useCallback(() => {\n if (valueRef.current !== null) return valueRef.current;\n return clamp(min ?? 0);\n }, [clamp, min]);\n\n // Apply a delta with precision; reflect into the editing text when focused.\n const spin = React.useCallback(\n (delta: number) => {\n if (interactionDisabled) return;\n const s = stateRef.current;\n const next = s.clamp(addPrecise(getSpinBase(), delta, s.step));\n valueRef.current = next;\n setInvalidDraft(false);\n setValue(next);\n if (focusedRef.current) setInputText(s.format(next));\n },\n [getSpinBase, interactionDisabled, setValue],\n );\n\n const setTo = React.useCallback(\n (next: number) => {\n if (interactionDisabled) return;\n const s = stateRef.current;\n const clamped = s.clamp(next);\n valueRef.current = clamped;\n setInvalidDraft(false);\n setValue(clamped);\n if (focusedRef.current) setInputText(s.format(clamped));\n },\n [interactionDisabled, setValue],\n );\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n setInputText(raw);\n const parsed = parseDraftValue(raw);\n if (parsed.kind === \"empty\") {\n setInvalidDraft(false);\n if (isNullable) {\n valueRef.current = null;\n setValue(null);\n }\n return;\n }\n if (parsed.kind === \"partial\") {\n setInvalidDraft(false);\n return;\n }\n if (parsed.kind === \"invalid\") {\n setInvalidDraft(true);\n return;\n }\n setInvalidDraft(false);\n setValue(parsed.value);\n },\n [isNullable, setValue],\n );\n\n const handleFocus = React.useCallback(() => {\n focusedRef.current = true;\n }, []);\n\n const handleBlur = React.useCallback(() => {\n focusedRef.current = false;\n setInputText(null);\n setInvalidDraft(false);\n setValue(valueRef.current);\n }, [setValue]);\n\n const handleClear = React.useCallback(() => {\n if (!isNullable || interactionDisabled) return;\n valueRef.current = null;\n setInvalidDraft(false);\n setInputText(focusedRef.current ? \"\" : null);\n setValue(null);\n }, [interactionDisabled, isNullable, setValue]);\n\n // ── Long-press repeat for the stepper buttons ──\n const repeatedRef = React.useRef(false);\n const timersRef = React.useRef<{ timeout?: number; interval?: number }>({});\n\n const stopRepeat = React.useCallback(() => {\n const t = timersRef.current;\n if (t.timeout !== undefined) window.clearTimeout(t.timeout);\n if (t.interval !== undefined) window.clearInterval(t.interval);\n timersRef.current = {};\n }, []);\n\n React.useEffect(() => stopRepeat, [stopRepeat]);\n\n const handleStepPointerDown = React.useCallback(\n (dir: 1 | -1) => (e: React.PointerEvent) => {\n if (e.button !== 0 || interactionDisabled) return;\n repeatedRef.current = false;\n stopRepeat();\n const delta = () => dir * stateRef.current.step;\n timersRef.current.timeout = window.setTimeout(() => {\n timersRef.current.interval = window.setInterval(() => {\n repeatedRef.current = true;\n spin(delta());\n }, 60);\n }, 300);\n },\n [interactionDisabled, spin, stopRepeat],\n );\n\n const handleStepClick = React.useCallback(\n (dir: 1 | -1) => () => {\n if (interactionDisabled) return;\n // A press that triggered repeats already applied its steps; skip the\n // trailing click so it doesn't add one extra.\n if (repeatedRef.current) {\n repeatedRef.current = false;\n return;\n }\n spin(dir * stateRef.current.step);\n },\n [interactionDisabled, spin],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (interactionDisabled) return;\n const s = stateRef.current;\n const big = largeStep ?? s.step * 10;\n switch (e.key) {\n case \"ArrowUp\":\n e.preventDefault();\n spin(s.step);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n spin(-s.step);\n break;\n case \"PageUp\":\n e.preventDefault();\n spin(big);\n break;\n case \"PageDown\":\n e.preventDefault();\n spin(-big);\n break;\n case \"Home\":\n if (min !== undefined) {\n e.preventDefault();\n setTo(min);\n }\n break;\n case \"End\":\n if (max !== undefined) {\n e.preventDefault();\n setTo(max);\n }\n break;\n default:\n break;\n }\n },\n [interactionDisabled, spin, setTo, largeStep, min, max],\n );\n\n // ── Optional scrub on the label ──\n const scrubStartRef = React.useRef<{ x: number; value: number } | null>(null);\n\n const handleScrubPointerDown = React.useCallback(\n (e: React.PointerEvent) => {\n if (e.button !== 0 || interactionDisabled) return;\n e.preventDefault();\n scrubStartRef.current = { x: e.clientX, value: getSpinBase() };\n try {\n e.currentTarget.setPointerCapture(e.pointerId);\n } catch {\n // setPointerCapture is unavailable in some environments (e.g. jsdom).\n }\n },\n [getSpinBase, interactionDisabled],\n );\n\n const handleScrubPointerMove = React.useCallback(\n (e: React.PointerEvent) => {\n const start = scrubStartRef.current;\n if (!start) return;\n const s = stateRef.current;\n // ~6px of travel per step.\n const steps = Math.round((e.clientX - start.x) / 6);\n setInvalidDraft(false);\n setValue(s.clamp(addPrecise(start.value, steps * s.step, s.step)));\n },\n [setValue],\n );\n\n const handleScrubPointerUp = React.useCallback((e: React.PointerEvent) => {\n scrubStartRef.current = null;\n try {\n e.currentTarget.releasePointerCapture(e.pointerId);\n } catch {\n // ignore\n }\n }, []);\n\n const canDecrement =\n value === null || min === undefined || numericValue > min;\n const canIncrement =\n value === null || max === undefined || numericValue < max;\n const decrementUnavailable = interactionDisabled || !canDecrement;\n const incrementUnavailable = interactionDisabled || !canIncrement;\n const showClear = isNullable && clearable && value !== null;\n\n return (\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-opt-id=\"GKPSV\"\n data-opt-slug=\"number-input.NumberInput\"\n >\n {label && (\n <span\n className={cn(\n OPT_TEXT_LABEL,\n scrub &&\n !interactionDisabled &&\n \"w-fit cursor-ew-resize touch-none select-none\",\n )}\n onPointerDown={scrub ? handleScrubPointerDown : undefined}\n onPointerMove={scrub ? handleScrubPointerMove : undefined}\n onPointerUp={scrub ? handleScrubPointerUp : undefined}\n onPointerCancel={scrub ? handleScrubPointerUp : undefined}\n >\n {label}\n {required && <RequiredMark />}\n </span>\n )}\n <div className=\"flex items-center\">\n <button\n type=\"button\"\n onClick={handleStepClick(-1)}\n onPointerDown={handleStepPointerDown(-1)}\n onPointerUp={stopRepeat}\n onPointerLeave={stopRepeat}\n onPointerCancel={stopRepeat}\n disabled={nativeDisabled || !canDecrement}\n aria-disabled={decrementUnavailable || undefined}\n aria-label={resolvedLabels.decrease}\n title={disabledReason}\n className={cn(\n \"border-border bg-surface text-text-secondary flex h-10 w-10 items-center justify-center rounded-l-lg border border-r-0 text-sm font-medium\",\n decrementUnavailable\n ? \"cursor-not-allowed opacity-40\"\n : \"hover:bg-bg-subtle cursor-pointer\",\n nativeDisabled && \"pointer-events-none\",\n OPT_FOCUS_VISIBLE,\n )}\n >\n −\n </button>\n <div className=\"relative min-w-0 flex-1\">\n <input\n type=\"text\"\n inputMode=\"decimal\"\n id={inputId}\n value={displayValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={nativeDisabled}\n readOnly={interactionDisabled}\n aria-disabled={interactionDisabled || undefined}\n aria-label={ariaLabel ?? label ?? resolvedLabels.input}\n aria-invalid={hasError}\n aria-required={required}\n aria-describedby={getDescribedBy(inputId, effectiveError, hint)}\n min={min}\n max={max}\n step={step}\n title={disabledReason}\n className={cn(\n OPT_INPUT,\n \"[appearance:textfield] rounded-none border-x-0 text-center [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\",\n (unit || showClear) && \"pr-10\",\n unit && showClear && \"pr-16\",\n interactionDisabled && \"cursor-not-allowed opacity-60\",\n hasError && OPT_INPUT_ERROR,\n )}\n />\n {unit && (\n <span\n className={cn(\n \"text-text-tertiary pointer-events-none absolute top-1/2 -translate-y-1/2 text-sm\",\n showClear ? \"right-10\" : \"right-3\",\n )}\n aria-hidden=\"true\"\n >\n {unit}\n </span>\n )}\n {showClear && (\n <button\n type=\"button\"\n onClick={handleClear}\n disabled={nativeDisabled}\n aria-disabled={interactionDisabled || undefined}\n aria-label={resolvedLabels.clear}\n title={disabledReason}\n className={cn(\n \"text-text-tertiary absolute top-1/2 right-2 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded text-sm\",\n interactionDisabled\n ? \"cursor-not-allowed opacity-40\"\n : \"hover:bg-bg-subtle hover:text-text-primary cursor-pointer\",\n nativeDisabled && \"pointer-events-none\",\n OPT_FOCUS_VISIBLE,\n )}\n >\n ×\n </button>\n )}\n </div>\n <button\n type=\"button\"\n onClick={handleStepClick(1)}\n onPointerDown={handleStepPointerDown(1)}\n onPointerUp={stopRepeat}\n onPointerLeave={stopRepeat}\n onPointerCancel={stopRepeat}\n disabled={nativeDisabled || !canIncrement}\n aria-disabled={incrementUnavailable || undefined}\n aria-label={resolvedLabels.increase}\n title={disabledReason}\n className={cn(\n \"border-border bg-surface text-text-secondary flex h-10 w-10 items-center justify-center rounded-r-lg border border-l-0 text-sm font-medium\",\n incrementUnavailable\n ? \"cursor-not-allowed opacity-40\"\n : \"hover:bg-bg-subtle cursor-pointer\",\n nativeDisabled && \"pointer-events-none\",\n OPT_FOCUS_VISIBLE,\n )}\n >\n +\n </button>\n </div>\n <FieldMessages id={inputId} error={effectiveError} hint={hint} />\n </div>\n );\n}\n\nNumberInput.displayName = \"NumberInput\";\n","\"use client\";\n\nimport { useState, useCallback, type ChangeEvent } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { OPT_FOCUS_VISIBLE, OPT_TEXT_LABEL } from \"../lib/styles\";\n\n/** Props for the slider component. */\nexport interface SliderProps {\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n /** Show numeric value next to slider */\n showValue?: boolean;\n /** Format function for the displayed value */\n formatValue?: (value: number) => string;\n disabled?: boolean;\n className?: string;\n \"aria-label\"?: string;\n}\n\nfunction getSliderState(value: number, min: number, max: number, step: number) {\n const safeMin = Number.isFinite(min) ? min : 0;\n const rawMax = Number.isFinite(max) ? max : 100;\n const safeMax = rawMax >= safeMin ? rawMax : safeMin;\n const safeStep = Number.isFinite(step) && step > 0 ? step : 1;\n const safeValue = Number.isFinite(value) ? value : safeMin;\n const clampedValue = Math.min(Math.max(safeValue, safeMin), safeMax);\n const percentage =\n safeMax === safeMin\n ? 0\n : ((clampedValue - safeMin) / (safeMax - safeMin)) * 100;\n\n return {\n value: clampedValue,\n min: safeMin,\n max: safeMax,\n step: safeStep,\n percentage,\n };\n}\n\n/** Renders the slider component. */\nexport function Slider({\n value: controlledValue,\n defaultValue = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n label,\n showValue = false,\n formatValue,\n disabled = false,\n className,\n \"aria-label\": ariaLabel,\n}: SliderProps) {\n const [localValue, setLocalValue] = useState(defaultValue);\n const rawValue = controlledValue ?? localValue;\n const sliderState = getSliderState(rawValue, min, max, step);\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const next = getSliderState(\n parseFloat(e.target.value),\n min,\n max,\n step,\n ).value;\n if (controlledValue === undefined) setLocalValue(next);\n onChange?.(next);\n },\n [controlledValue, min, max, step, onChange],\n );\n\n const displayValue = formatValue\n ? formatValue(sliderState.value)\n : String(sliderState.value);\n\n return (\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-opt-id=\"VJCDH\"\n data-opt-slug=\"slider.Slider\"\n >\n {(label || showValue) && (\n <div className=\"flex items-center justify-between\">\n {label && <span className={OPT_TEXT_LABEL}>{label}</span>}\n {showValue && (\n <span className=\"text-text-tertiary text-sm\">{displayValue}</span>\n )}\n </div>\n )}\n <input\n type=\"range\"\n min={sliderState.min}\n max={sliderState.max}\n step={sliderState.step}\n value={sliderState.value}\n onChange={handleChange}\n disabled={disabled}\n aria-label={ariaLabel ?? label ?? \"Slider\"}\n aria-valuemin={sliderState.min}\n aria-valuemax={sliderState.max}\n aria-valuenow={sliderState.value}\n aria-valuetext={displayValue}\n className={cn(\n \"h-2 w-full cursor-pointer appearance-none rounded-full\",\n \"bg-bg-subtle\",\n \"[&::-webkit-slider-thumb]:bg-accent [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:shadow-sm\",\n \"[&::-moz-range-thumb]:bg-accent [&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:shadow-sm\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n OPT_FOCUS_VISIBLE,\n )}\n style={{\n background: disabled\n ? undefined\n : `linear-gradient(to right, var(--color-accent) ${sliderState.percentage}%, var(--color-bg-subtle) ${sliderState.percentage}%)`,\n }}\n />\n </div>\n );\n}\n\nSlider.displayName = \"Slider\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport {\n PopoverRoot as PrimPopoverRoot,\n PopoverTrigger as PrimPopoverTrigger,\n PopoverContent as PrimPopoverContent,\n PopoverClose as PrimPopoverClose,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type {\n PopoverRootProps,\n PopoverTriggerProps as PrimPopoverTriggerProps,\n PopoverContentProps as PrimPopoverContentProps,\n PopoverCloseProps as PrimPopoverCloseProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport { cn } from \"../lib/cn\";\nimport {\n OPT_BORDER,\n OPT_FOCUS_VISIBLE,\n OPT_ANIMATE_ENTER_EXIT,\n} from \"../lib/styles\";\n\n// ── PopoverRoot ──\n\n/** Renders the popover root component. */\nexport function PopoverRoot(props: PopoverRootProps) {\n return (\n <PrimPopoverRoot\n {...props}\n data-opt-id=\"DWJD5\"\n data-opt-slug=\"popover.PopoverRoot\"\n />\n );\n}\n\n// ── PopoverTrigger ──\n\n/** Props for the popover trigger component. */\nexport type PopoverTriggerProps = PrimPopoverTriggerProps;\n\nexport const PopoverTrigger = forwardRef<\n HTMLButtonElement,\n PrimPopoverTriggerProps\n>(({ className, ...props }, ref) => {\n return (\n <PrimPopoverTrigger\n ref={ref}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-lg px-3 py-2 text-sm\",\n \"cursor-pointer data-[disabled]:cursor-not-allowed\",\n OPT_FOCUS_VISIBLE,\n className,\n )}\n {...props}\n data-opt-id=\"2W9BZ\"\n data-opt-slug=\"popover.PopoverTrigger\"\n />\n );\n});\n\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\n// ── PopoverContent ──\n\n/** Props for the popover content component. */\nexport type PopoverContentProps = PrimPopoverContentProps;\n\n/** Renders the popover content component. */\nexport function PopoverContent({ className, ...props }: PopoverContentProps) {\n return (\n <PrimPopoverContent\n className={cn(\n \"bg-surface-overlay z-50 rounded-lg p-4 shadow-lg\",\n OPT_BORDER,\n OPT_ANIMATE_ENTER_EXIT,\n className,\n )}\n {...props}\n data-opt-id=\"E03EY\"\n data-opt-slug=\"popover.PopoverContent\"\n />\n );\n}\n\n// ── PopoverClose ──\n\n/** Renders the popover close component. */\nexport function PopoverClose({ className, ...props }: PrimPopoverCloseProps) {\n return (\n <PrimPopoverClose\n className={cn(\n \"text-text-tertiary hover:bg-bg-subtle inline-flex items-center justify-center rounded-md p-1 text-sm\",\n \"cursor-pointer data-[disabled]:cursor-not-allowed\",\n OPT_FOCUS_VISIBLE,\n className,\n )}\n {...props}\n data-opt-id=\"FP4KF\"\n data-opt-slug=\"popover.PopoverClose\"\n />\n );\n}\n","\"use client\";\n\nimport { useState, useCallback, useRef, useId, forwardRef } from \"react\";\nimport { PopoverRoot, PopoverTrigger, PopoverContent } from \"../core/popover\";\nimport { cn } from \"../lib/cn\";\nimport {\n FieldMessages,\n RequiredMark,\n getDescribedBy,\n} from \"../lib/field-messages\";\nimport { useControlledState } from \"../lib/use-controlled-state\";\nimport { useInputId } from \"../lib/use-input-id\";\nimport {\n OPT_BORDER,\n OPT_TEXT_PRIMARY,\n OPT_TEXT_LABEL,\n OPT_INPUT_ERROR,\n OPT_FOCUS_VISIBLE,\n OPT_INPUT,\n} from \"../lib/styles\";\n\n/** Props for the color picker component. */\nexport interface ColorPickerProps {\n value?: string;\n onChange?: (color: string) => void;\n presets?: string[];\n label?: string;\n required?: boolean;\n error?: string;\n hint?: string;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n id?: string;\n \"aria-label\"?: string;\n}\n\nconst DEFAULT_PRESETS = [\n \"#3b82f6\", // blue\n \"#10b981\", // emerald\n \"#f59e0b\", // amber\n \"#8b5cf6\", // violet\n \"#ef4444\", // red\n \"#06b6d4\", // cyan\n \"#f97316\", // orange\n \"#ec4899\", // pink\n \"#84cc16\", // lime\n \"#6366f1\", // indigo\n \"#14b8a6\", // teal\n \"#a855f7\", // purple\n \"#78716c\", // stone\n \"#000000\", // black\n \"#6b7280\", // gray\n \"#ffffff\", // white\n];\n\nexport const ColorPicker = forwardRef<HTMLInputElement, ColorPickerProps>(\n (\n {\n value,\n onChange,\n presets = DEFAULT_PRESETS,\n label,\n required,\n error,\n hint,\n placeholder = \"#000000\",\n disabled = false,\n className,\n id,\n \"aria-label\": ariaLabel,\n },\n ref,\n ) => {\n const [color, setColor] = useControlledState(\"#3b82f6\", value, onChange);\n const fallbackId = useId().replace(/:/g, \"\");\n const pickerId =\n useInputId(id, label, \"color-picker\") ?? `color-picker-${fallbackId}`;\n const hasError = Boolean(error);\n\n const [inputValue, setInputValue] = useState(color);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handlePresetClick = useCallback(\n (preset: string) => {\n setColor(preset);\n setInputValue(preset);\n },\n [setColor],\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value;\n setInputValue(val);\n if (/^#[0-9a-fA-F]{6}$/.test(val)) {\n setColor(val);\n }\n },\n [setColor],\n );\n\n const handleInputBlur = useCallback(() => {\n if (!/^#[0-9a-fA-F]{6}$/.test(inputValue)) {\n setInputValue(color);\n }\n }, [inputValue, color]);\n\n // Sync inputValue when controlled value changes\n const lastValueRef = useRef(value);\n if (value !== undefined && value !== lastValueRef.current) {\n lastValueRef.current = value;\n if (value !== inputValue) {\n setInputValue(value);\n }\n }\n\n return (\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-opt-id=\"V2CSG\"\n data-opt-slug=\"color-picker.ColorPicker\"\n >\n {label && (\n <span className={OPT_TEXT_LABEL}>\n {label}\n {required && <RequiredMark />}\n </span>\n )}\n <PopoverRoot>\n <PopoverTrigger\n id={pickerId}\n className={cn(\n OPT_INPUT,\n \"cursor-pointer items-center gap-2\",\n hasError && OPT_INPUT_ERROR,\n disabled && \"pointer-events-none opacity-50\",\n )}\n disabled={disabled}\n aria-label={ariaLabel ?? label ?? \"Color picker\"}\n aria-required={required}\n aria-invalid={hasError}\n aria-describedby={getDescribedBy(pickerId, error, hint)}\n >\n <span\n className=\"border-border inline-block h-5 w-5 rounded border\"\n style={{ backgroundColor: color }}\n aria-hidden=\"true\"\n />\n <span className={OPT_TEXT_PRIMARY}>{color}</span>\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"bg-surface-overlay z-50 rounded-lg p-3 shadow-lg\",\n OPT_BORDER,\n )}\n >\n {/* Preset grid */}\n <div\n className=\"mb-3 grid grid-cols-8 gap-1.5\"\n role=\"listbox\"\n aria-label=\"Color presets\"\n >\n {presets.map((preset) => (\n <button\n key={preset}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={cn(\n \"h-7 w-7 rounded-md border transition-transform hover:scale-110\",\n OPT_FOCUS_VISIBLE,\n preset === color\n ? \"border-accent ring-ring ring-offset-ring-offset ring-2 ring-offset-1\"\n : \"border-border\",\n // eslint-disable-next-line opt-ui/no-raw-color -- 흰색 프리셋의 경계 visibility 보장\n preset === \"#ffffff\" && \"border-black/20\",\n )}\n style={{ backgroundColor: preset }}\n role=\"option\"\n aria-selected={preset === color}\n aria-label={preset}\n />\n ))}\n </div>\n\n {/* Hex input */}\n <div className=\"flex items-center gap-2\">\n <span\n className=\"border-border h-8 w-8 rounded-md border\"\n style={{ backgroundColor: color }}\n aria-hidden=\"true\"\n />\n <input\n ref={ref ?? inputRef}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n placeholder={placeholder}\n maxLength={7}\n className={cn(\n \"border-border bg-surface flex-1 rounded-md border px-2 py-1.5 font-mono text-sm\",\n OPT_TEXT_PRIMARY,\n OPT_FOCUS_VISIBLE,\n )}\n aria-label=\"Hex color value\"\n />\n </div>\n </PopoverContent>\n </PopoverRoot>\n <FieldMessages id={pickerId} error={error} hint={hint} />\n </div>\n );\n },\n);\n\nColorPicker.displayName = \"ColorPicker\";\n","import * as React from \"react\";\nimport type { LucideIcon, LucideProps } from \"lucide-react\";\nimport {\n Bell,\n ChartColumn,\n Check,\n CircleAlert,\n CircleCheck,\n CreditCard,\n Download,\n Eye,\n FileText,\n Flag,\n Folder,\n Globe,\n Heart,\n Info,\n Link2,\n LogIn,\n Mail,\n MessageCircle,\n MousePointerClick,\n Search,\n Settings,\n Share2,\n ShoppingCart,\n Star,\n TrendingUp,\n TriangleAlert,\n Upload,\n User,\n UserPlus,\n XCircle,\n Zap,\n} from \"lucide-react\";\n\n/** Defines the icon registry entry shape. */\nexport interface IconRegistryEntry {\n id: string;\n label: string;\n Icon: LucideIcon;\n group?: string;\n}\n\nconst defaultIconEntries: IconRegistryEntry[] = [\n {\n id: \"click\",\n label: \"Click\",\n Icon: MousePointerClick,\n group: \"Actions\",\n },\n { id: \"view\", label: \"View\", Icon: Eye, group: \"Actions\" },\n { id: \"cart\", label: \"Cart\", Icon: ShoppingCart, group: \"Actions\" },\n {\n id: \"purchase\",\n label: \"Purchase\",\n Icon: CreditCard,\n group: \"Actions\",\n },\n { id: \"signup\", label: \"Sign Up\", Icon: UserPlus, group: \"Actions\" },\n { id: \"login\", label: \"Login\", Icon: LogIn, group: \"Actions\" },\n { id: \"search\", label: \"Search\", Icon: Search, group: \"Actions\" },\n { id: \"download\", label: \"Download\", Icon: Download, group: \"Actions\" },\n { id: \"share\", label: \"Share\", Icon: Share2, group: \"Social\" },\n { id: \"like\", label: \"Like\", Icon: Heart, group: \"Social\" },\n {\n id: \"comment\",\n label: \"Comment\",\n Icon: MessageCircle,\n group: \"Social\",\n },\n { id: \"follow\", label: \"Follow\", Icon: UserPlus, group: \"Social\" },\n { id: \"star\", label: \"Star\", Icon: Star, group: \"Status\" },\n { id: \"flag\", label: \"Flag\", Icon: Flag, group: \"Status\" },\n { id: \"check\", label: \"Check\", Icon: Check, group: \"Status\" },\n { id: \"error\", label: \"Error\", Icon: CircleAlert, group: \"Status\" },\n {\n id: \"warning\",\n label: \"Warning\",\n Icon: TriangleAlert,\n group: \"Status\",\n },\n { id: \"info\", label: \"Info\", Icon: Info, group: \"Status\" },\n { id: \"bell\", label: \"Bell\", Icon: Bell, group: \"Objects\" },\n { id: \"mail\", label: \"Mail\", Icon: Mail, group: \"Objects\" },\n { id: \"file\", label: \"File\", Icon: FileText, group: \"Objects\" },\n { id: \"folder\", label: \"Folder\", Icon: Folder, group: \"Objects\" },\n { id: \"settings\", label: \"Settings\", Icon: Settings, group: \"Objects\" },\n { id: \"link\", label: \"Link\", Icon: Link2, group: \"Objects\" },\n];\n\nconst extraIconEntries: IconRegistryEntry[] = [\n { id: \"eye\", label: \"Eye\", Icon: Eye },\n { id: \"user\", label: \"User\", Icon: User },\n { id: \"shopping-cart\", label: \"Shopping Cart\", Icon: ShoppingCart },\n { id: \"credit-card\", label: \"Credit Card\", Icon: CreditCard },\n { id: \"heart\", label: \"Heart\", Icon: Heart },\n { id: \"upload\", label: \"Upload\", Icon: Upload },\n { id: \"globe\", label: \"Globe\", Icon: Globe },\n { id: \"zap\", label: \"Zap\", Icon: Zap },\n { id: \"trending-up\", label: \"Trending Up\", Icon: TrendingUp },\n { id: \"bar-chart\", label: \"Bar Chart\", Icon: ChartColumn },\n { id: \"check-circle\", label: \"Check Circle\", Icon: CircleCheck },\n { id: \"x-circle\", label: \"X Circle\", Icon: XCircle },\n];\n\nconst iconRegistry = new Map<string, IconRegistryEntry>(\n [...defaultIconEntries, ...extraIconEntries].map((entry) => [\n entry.id,\n entry,\n ]),\n);\n\nexport const defaultIconRegistry = defaultIconEntries;\n\n/** Returns icon registry entry. */\nexport function getIconRegistryEntry(id: string) {\n return iconRegistry.get(id);\n}\n\n/** Returns icon component. */\nexport function getIconComponent(id: string) {\n return getIconRegistryEntry(id)?.Icon;\n}\n\n/** Handles render icon by key. */\nexport function renderIconByKey(id: string, props?: LucideProps) {\n const Icon = getIconComponent(id);\n\n if (!Icon) {\n return null;\n }\n\n return <Icon aria-hidden=\"true\" {...props} />;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { PopoverRoot, PopoverTrigger, PopoverContent } from \"../core/popover\";\nimport { cn } from \"../lib/cn\";\nimport {\n FieldMessages,\n RequiredMark,\n getDescribedBy,\n} from \"../lib/field-messages\";\nimport { useControlledState } from \"../lib/use-controlled-state\";\nimport { useInputId } from \"../lib/use-input-id\";\nimport {\n OPT_BORDER,\n OPT_TEXT_PRIMARY,\n OPT_TEXT_SECONDARY,\n OPT_TEXT_TERTIARY,\n OPT_TEXT_LABEL,\n OPT_INPUT_ERROR,\n OPT_FOCUS_VISIBLE,\n OPT_INPUT,\n} from \"../lib/styles\";\nimport { defaultIconRegistry } from \"../lib/icon-registry\";\n\n/** Defines the icon shape. */\nexport interface IconDef {\n id: string;\n label: string;\n icon: React.ReactNode;\n group?: string;\n}\n\n/** Props for the icon picker component. */\nexport interface IconPickerProps {\n value?: string;\n onChange?: (iconId: string) => void;\n icons?: IconDef[];\n label?: string;\n required?: boolean;\n error?: string;\n hint?: string;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n id?: string;\n \"aria-label\"?: string;\n}\n\nconst DEFAULT_ICONS: IconDef[] = [\n ...defaultIconRegistry.map(({ id, label, Icon, group }) => ({\n id,\n label,\n group,\n icon: <Icon />,\n })),\n];\n\nfunction renderIconPreview(\n icon: React.ReactNode,\n options: {\n elementClassName: string;\n textClassName: string;\n },\n) {\n if (typeof icon === \"string\" || typeof icon === \"number\") {\n return (\n <span className={cn(options.textClassName, \"leading-none\")} aria-hidden>\n {icon}\n </span>\n );\n }\n\n if (\n React.isValidElement<{\n className?: string;\n \"aria-hidden\"?: boolean;\n }>(icon)\n ) {\n return React.cloneElement(icon, {\n \"aria-hidden\": true,\n className: cn(options.elementClassName, icon.props.className),\n });\n }\n\n return (\n <span\n className={cn(\n \"flex items-center justify-center\",\n options.elementClassName,\n )}\n aria-hidden\n >\n {icon}\n </span>\n );\n}\n\n/** Renders the icon picker component. */\nexport function IconPicker({\n value,\n onChange,\n icons = DEFAULT_ICONS,\n label,\n required,\n error,\n hint,\n placeholder = \"Select icon\",\n disabled = false,\n className,\n id,\n \"aria-label\": ariaLabel,\n}: IconPickerProps) {\n const [selected, setSelected] = useControlledState(\"\", value, onChange);\n const fallbackId = React.useId().replace(/:/g, \"\");\n const pickerId =\n useInputId(id, label, \"icon-picker\") ?? `icon-picker-${fallbackId}`;\n const hasError = Boolean(error);\n\n const [search, setSearch] = React.useState(\"\");\n\n const selectedIcon = React.useMemo(\n () => icons.find((i) => i.id === selected),\n [icons, selected],\n );\n\n const filteredIcons = React.useMemo(() => {\n if (!search) return icons;\n const q = search.toLowerCase();\n return icons.filter(\n (i) =>\n i.label.toLowerCase().includes(q) ||\n i.id.toLowerCase().includes(q) ||\n i.group?.toLowerCase().includes(q),\n );\n }, [icons, search]);\n\n const groups = React.useMemo(() => {\n const map = new Map<string, IconDef[]>();\n for (const icon of filteredIcons) {\n const group = icon.group ?? \"Other\";\n if (!map.has(group)) map.set(group, []);\n map.get(group)!.push(icon);\n }\n return map;\n }, [filteredIcons]);\n\n const handleSelect = React.useCallback(\n (iconId: string) => {\n setSelected(iconId);\n },\n [setSelected],\n );\n\n return (\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-opt-id=\"0DRGP\"\n data-opt-slug=\"icon-picker.IconPicker\"\n >\n {label && (\n <span className={OPT_TEXT_LABEL}>\n {label}\n {required && <RequiredMark />}\n </span>\n )}\n <PopoverRoot>\n <PopoverTrigger\n id={pickerId}\n className={cn(\n OPT_INPUT,\n \"cursor-pointer items-center gap-2\",\n !selectedIcon && OPT_TEXT_TERTIARY,\n hasError && OPT_INPUT_ERROR,\n disabled && \"pointer-events-none opacity-50\",\n )}\n disabled={disabled}\n aria-label={ariaLabel ?? label ?? \"Icon picker\"}\n aria-required={required}\n aria-invalid={hasError}\n aria-describedby={getDescribedBy(pickerId, error, hint)}\n >\n {selectedIcon ? (\n <>\n {renderIconPreview(selectedIcon.icon, {\n elementClassName: \"size-5 shrink-0\",\n textClassName: \"text-lg\",\n })}\n <span className={OPT_TEXT_PRIMARY}>{selectedIcon.label}</span>\n </>\n ) : (\n <span>{placeholder}</span>\n )}\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"bg-surface-overlay z-50 w-72 rounded-lg p-3 shadow-lg\",\n OPT_BORDER,\n )}\n >\n {/* Search */}\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search icons...\"\n className={cn(\n \"border-border bg-surface mb-2 w-full rounded-md border px-3 py-1.5 text-sm outline-transparent\",\n OPT_TEXT_PRIMARY,\n \"placeholder:text-text-tertiary\",\n OPT_FOCUS_VISIBLE,\n )}\n aria-label=\"Search icons\"\n />\n\n {/* Icon grid by groups */}\n <div className=\"max-h-56 overflow-y-auto\">\n {filteredIcons.length === 0 ? (\n <div\n className={cn(OPT_TEXT_SECONDARY, \"py-4 text-center text-sm\")}\n >\n No icons found\n </div>\n ) : (\n Array.from(groups.entries()).map(([groupName, groupIcons]) => (\n <div key={groupName} className=\"mb-2\">\n <span\n className={cn(\n OPT_TEXT_TERTIARY,\n \"mb-1 block text-[10px] font-semibold tracking-wider uppercase\",\n )}\n >\n {groupName}\n </span>\n <div className=\"grid grid-cols-6 gap-1\">\n {groupIcons.map((icon) => (\n <button\n key={icon.id}\n type=\"button\"\n onClick={() => handleSelect(icon.id)}\n className={cn(\n \"flex h-9 w-9 items-center justify-center rounded-md text-lg transition-colors\",\n OPT_FOCUS_VISIBLE,\n icon.id === selected\n ? \"bg-accent-subtle ring-ring ring-2\"\n : \"hover:bg-bg-subtle\",\n )}\n title={icon.label}\n aria-label={icon.label}\n aria-selected={icon.id === selected || undefined}\n >\n {renderIconPreview(icon.icon, {\n elementClassName: \"size-4\",\n textClassName: \"text-lg\",\n })}\n </button>\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n </PopoverContent>\n </PopoverRoot>\n <FieldMessages id={pickerId} error={error} hint={hint} />\n </div>\n );\n}\n\nIconPicker.displayName = \"IconPicker\";\n","\"use client\";\n\nimport {\n useState,\n useRef,\n useCallback,\n useEffect,\n useId,\n type KeyboardEvent,\n type ClipboardEvent,\n forwardRef,\n} from \"react\";\nimport { CompositeProvider, Composite, CompositeItem } from \"./composite-zone\";\nimport { cn } from \"../lib/cn\";\nimport {\n FieldMessages,\n RequiredMark,\n getDescribedBy,\n} from \"../lib/field-messages\";\nimport { useControlledState } from \"../lib/use-controlled-state\";\nimport { useInputId } from \"../lib/use-input-id\";\nimport {\n OPT_TEXT_PRIMARY,\n OPT_TEXT_LABEL,\n OPT_BADGE_BLUE,\n OPT_FOCUS_VISIBLE,\n} from \"../lib/styles\";\n\nconst DEFAULT_DELIMITERS: (string | RegExp)[] = [\",\", \";\", \"\\n\"];\n\n/** Props for the tag input component. */\nexport interface TagInputProps {\n value?: string[];\n onChange?: (tags: string[]) => void;\n placeholder?: string;\n label?: string;\n required?: boolean;\n error?: string;\n hint?: string;\n maxTags?: number;\n disabled?: boolean;\n className?: string;\n id?: string;\n \"aria-label\"?: string;\n /** Autocomplete suggestions shown as a dropdown while typing */\n suggestions?: string[];\n /** Delimiters for paste splitting */\n delimiters?: (string | RegExp)[];\n /** Allow duplicate tags */\n allowDuplicates?: boolean;\n}\n\nfunction splitByDelimiters(\n text: string,\n delimiters: (string | RegExp)[],\n): string[] {\n const pattern = delimiters\n .map((d) =>\n d instanceof RegExp ? d.source : d.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"),\n )\n .join(\"|\");\n return text\n .split(new RegExp(pattern))\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\nexport const TagInput = forwardRef<HTMLInputElement, TagInputProps>(\n (\n {\n value,\n onChange,\n placeholder = \"Add tag...\",\n label,\n required,\n error,\n hint,\n maxTags,\n disabled = false,\n className,\n id,\n \"aria-label\": ariaLabel,\n suggestions,\n delimiters = DEFAULT_DELIMITERS,\n allowDuplicates = false,\n },\n ref,\n ) => {\n const [tags, setTags] = useControlledState<string[]>([], value, onChange);\n const fallbackId = useId().replace(/:/g, \"\");\n const tagInputId =\n useInputId(id, label, \"tag-input\") ?? `tag-input-${fallbackId}`;\n const hasError = Boolean(error);\n const describedBy = getDescribedBy(tagInputId, error, hint);\n\n const [inputValue, setInputValue] = useState(\"\");\n const [highlightIndex, setHighlightIndex] = useState(-1);\n const [showSuggestions, setShowSuggestions] = useState(false);\n const innerRef = useRef<HTMLInputElement>(null);\n const inputRef = (ref as React.RefObject<HTMLInputElement>) ?? innerRef;\n const listboxRef = useRef<HTMLUListElement>(null);\n const listboxId = useId();\n\n // Undo/Redo stacks\n const undoStack = useRef<string[][]>([]);\n const redoStack = useRef<string[][]>([]);\n\n // Refs for tag composite items\n const tagRefs = useRef<Map<number, HTMLElement>>(new Map());\n\n function pushUndo(prev: string[]) {\n undoStack.current.push(prev);\n redoStack.current = [];\n }\n\n const undo = useCallback(() => {\n if (undoStack.current.length === 0) return;\n const prev = undoStack.current.pop()!;\n redoStack.current.push([...tags]);\n setTags(prev);\n }, [tags, setTags]);\n\n const redo = useCallback(() => {\n if (redoStack.current.length === 0) return;\n const next = redoStack.current.pop()!;\n undoStack.current.push([...tags]);\n setTags(next);\n }, [tags, setTags]);\n\n const filtered =\n suggestions && inputValue.trim()\n ? suggestions.filter(\n (s) =>\n s.toLowerCase().includes(inputValue.trim().toLowerCase()) &&\n (allowDuplicates || !tags.includes(s)),\n )\n : [];\n\n const isOpen = showSuggestions && filtered.length > 0;\n\n useEffect(() => {\n setHighlightIndex(-1);\n }, [inputValue]);\n\n const addTag = useCallback(\n (tag: string) => {\n const trimmed = tag.trim();\n if (!trimmed) return;\n if (!allowDuplicates && tags.includes(trimmed)) return;\n if (maxTags && tags.length >= maxTags) return;\n pushUndo([...tags]);\n setTags([...tags, trimmed]);\n setInputValue(\"\");\n setShowSuggestions(false);\n },\n [tags, setTags, maxTags, allowDuplicates],\n );\n\n const removeTag = useCallback(\n (index: number) => {\n pushUndo([...tags]);\n setTags(tags.filter((_, i) => i !== index));\n },\n [tags, setTags],\n );\n\n const handleTagKeyDown = useCallback(\n (e: KeyboardEvent<HTMLElement>, index: number) => {\n if (e.key === \"Backspace\" || e.key === \"Delete\") {\n e.preventDefault();\n const nextTags = tags.filter((_, i) => i !== index);\n pushUndo([...tags]);\n setTags(nextTags);\n // Focus restoration after React re-render\n requestAnimationFrame(() => {\n if (nextTags.length === 0) {\n inputRef.current?.focus();\n } else if (index < nextTags.length) {\n tagRefs.current.get(index)?.focus();\n } else {\n tagRefs.current.get(nextTags.length - 1)?.focus();\n }\n });\n return;\n }\n if ((e.ctrlKey || e.metaKey) && e.key === \"z\" && !e.shiftKey) {\n e.preventDefault();\n undo();\n requestAnimationFrame(() => inputRef.current?.focus());\n return;\n }\n if (\n (e.ctrlKey || e.metaKey) &&\n (e.key === \"Z\" || (e.key === \"z\" && e.shiftKey) || e.key === \"y\")\n ) {\n e.preventDefault();\n redo();\n requestAnimationFrame(() => inputRef.current?.focus());\n return;\n }\n // Printable character → move focus to input\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n inputRef.current?.focus();\n }\n },\n [tags, setTags, undo, redo, inputRef],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n // Undo/Redo from input\n if ((e.ctrlKey || e.metaKey) && e.key === \"z\" && !e.shiftKey) {\n e.preventDefault();\n undo();\n return;\n }\n if (\n (e.ctrlKey || e.metaKey) &&\n (e.key === \"Z\" || (e.key === \"z\" && e.shiftKey) || e.key === \"y\")\n ) {\n e.preventDefault();\n redo();\n return;\n }\n\n if (isOpen) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setHighlightIndex((prev) =>\n prev < filtered.length - 1 ? prev + 1 : 0,\n );\n return;\n }\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setHighlightIndex((prev) =>\n prev > 0 ? prev - 1 : filtered.length - 1,\n );\n return;\n }\n if (e.key === \"Enter\" && highlightIndex >= 0) {\n e.preventDefault();\n addTag(filtered[highlightIndex]);\n return;\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n setShowSuggestions(false);\n return;\n }\n }\n\n if (e.key === \"Enter\") {\n e.preventDefault();\n addTag(inputValue);\n } else if (\n e.key === \"Backspace\" &&\n inputValue === \"\" &&\n tags.length > 0\n ) {\n removeTag(tags.length - 1);\n } else if (\n e.key === \"ArrowLeft\" &&\n inputRef.current?.selectionStart === 0 &&\n tags.length > 0\n ) {\n e.preventDefault();\n tagRefs.current.get(tags.length - 1)?.focus();\n }\n },\n [\n inputValue,\n tags,\n addTag,\n removeTag,\n isOpen,\n highlightIndex,\n filtered,\n undo,\n redo,\n inputRef,\n ],\n );\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n const text = e.clipboardData.getData(\"text/plain\");\n const parts = splitByDelimiters(text, delimiters);\n if (parts.length < 2) return; // single value → let default behavior handle it\n\n e.preventDefault();\n const prev = [...tags];\n let next = [...tags];\n const remaining = maxTags ? maxTags - next.length : Infinity;\n\n for (const part of parts.slice(0, remaining)) {\n if (!allowDuplicates && next.includes(part)) continue;\n next = [...next, part];\n }\n\n if (next.length !== prev.length) {\n pushUndo(prev);\n setTags(next);\n setInputValue(\"\");\n }\n },\n [tags, setTags, maxTags, delimiters, allowDuplicates],\n );\n\n useEffect(() => {\n if (highlightIndex >= 0 && listboxRef.current) {\n const el = listboxRef.current.children[highlightIndex] as\n | HTMLElement\n | undefined;\n el?.scrollIntoView?.({ block: \"nearest\" });\n }\n }, [highlightIndex]);\n\n const atLimit = Boolean(maxTags && tags.length >= maxTags);\n\n return (\n <div\n className={cn(\"relative flex flex-col gap-1.5\", className)}\n data-opt-id=\"3TDWF\"\n data-opt-slug=\"tag-input.TagInput\"\n >\n {label && (\n <span className={OPT_TEXT_LABEL}>\n {label}\n {required && <RequiredMark />}\n </span>\n )}\n <div\n className={cn(\n \"border-border bg-surface flex min-h-10 flex-wrap items-center gap-1.5 rounded-lg border px-3 py-1.5\",\n \"focus-within:ring-ring focus-within:ring-offset-ring-offset focus-within:ring-2 focus-within:ring-offset-1\",\n hasError && \"border-danger\",\n disabled && \"pointer-events-none opacity-50\",\n )}\n onMouseDown={() => inputRef.current?.focus()}\n role=\"group\"\n aria-label={ariaLabel ?? label ?? \"Tag input\"}\n aria-required={required}\n aria-invalid={hasError}\n aria-describedby={describedBy}\n >\n {tags.length > 0 && (\n <CompositeProvider focusLoop>\n <Composite aria-label=\"Selected tags\" className=\"contents\">\n {tags.map((tag, i) => (\n <CompositeItem\n key={`${tag}-${i}`}\n render={\n <span\n ref={(el: HTMLElement | null) => {\n if (el) tagRefs.current.set(i, el);\n else tagRefs.current.delete(i);\n }}\n />\n }\n className={cn(\n OPT_BADGE_BLUE,\n \"flex items-center gap-1 py-1\",\n OPT_FOCUS_VISIBLE,\n \"rounded-md\",\n )}\n onKeyDown={(e) =>\n handleTagKeyDown(\n e as unknown as KeyboardEvent<HTMLElement>,\n i,\n )\n }\n >\n {tag}\n {!disabled && (\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n removeTag(i);\n inputRef.current?.focus();\n }}\n className=\"hover:bg-accent-subtle ml-0.5 rounded-full p-0.5\"\n aria-label={`Remove ${tag}`}\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"M2.5 2.5L7.5 7.5M7.5 2.5L2.5 7.5\" />\n </svg>\n </button>\n )}\n </CompositeItem>\n ))}\n </Composite>\n </CompositeProvider>\n )}\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n setShowSuggestions(true);\n }}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n onFocus={() => setShowSuggestions(true)}\n onBlur={() => {\n // delay to allow click on suggestion\n setTimeout(() => setShowSuggestions(false), 150);\n }}\n placeholder={tags.length === 0 ? placeholder : atLimit ? \"\" : \"\"}\n disabled={disabled || atLimit}\n className={cn(\n \"min-w-[60px] flex-1 border-none bg-transparent text-sm outline-transparent\",\n OPT_TEXT_PRIMARY,\n OPT_FOCUS_VISIBLE,\n \"placeholder:text-text-tertiary\",\n )}\n aria-label={ariaLabel ?? label ?? \"Tag input\"}\n role={suggestions ? \"combobox\" : undefined}\n aria-describedby={describedBy}\n aria-expanded={suggestions ? isOpen : undefined}\n aria-controls={suggestions ? listboxId : undefined}\n aria-activedescendant={\n isOpen && highlightIndex >= 0\n ? `${listboxId}-${highlightIndex}`\n : undefined\n }\n aria-autocomplete={suggestions ? \"list\" : undefined}\n />\n </div>\n\n {/* Suggestions dropdown */}\n {isOpen && (\n <ul\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={ariaLabel ?? label ?? \"Tag suggestions\"}\n className=\"border-border bg-surface absolute top-full z-50 mt-1 max-h-48 w-full overflow-auto rounded-lg border shadow-md\"\n >\n {filtered.map((suggestion, i) => (\n <li\n key={suggestion}\n id={`${listboxId}-${i}`}\n role=\"option\"\n aria-selected={i === highlightIndex}\n className={cn(\n \"cursor-pointer px-3 py-1.5 text-sm\",\n OPT_TEXT_PRIMARY,\n i === highlightIndex && \"bg-accent-subtle\",\n )}\n onMouseDown={(e) => {\n e.preventDefault();\n addTag(suggestion);\n }}\n onMouseEnter={() => setHighlightIndex(i)}\n >\n {suggestion}\n </li>\n ))}\n </ul>\n )}\n\n {maxTags && (\n <span className=\"text-text-tertiary text-xs\">\n {tags.length}/{maxTags}\n </span>\n )}\n <FieldMessages id={tagInputId} error={error} hint={hint} />\n </div>\n );\n },\n);\n\nTagInput.displayName = \"TagInput\";\n","\"use client\";\n\nimport { CalendarDays, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport {\n useState,\n useMemo,\n useCallback,\n useEffect,\n useRef,\n useId,\n type KeyboardEvent,\n} from \"react\";\nimport { PopoverRoot, PopoverTrigger, PopoverContent } from \"../core/popover\";\nimport { cn } from \"../lib/cn\";\nimport {\n FieldMessages,\n RequiredMark,\n getDescribedBy,\n} from \"../lib/field-messages\";\nimport { useControlledState } from \"../lib/use-controlled-state\";\nimport { useInputId } from \"../lib/use-input-id\";\nimport {\n OPT_INPUT,\n OPT_INPUT_ERROR,\n OPT_BORDER,\n OPT_TEXT_PRIMARY,\n OPT_TEXT_SECONDARY,\n OPT_TEXT_TERTIARY,\n OPT_FOCUS_VISIBLE,\n} from \"../lib/styles\";\n\n/** Defines the date range shape. */\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/** Defines the date range preset shape. */\nexport interface DateRangePreset {\n label: string;\n range: () => DateRange;\n}\n\n/** Type definition for date granularity. */\nexport type DateGranularity = \"hour\" | \"day\" | \"week\" | \"month\";\n\n/** Type definition for comparison mode. */\nexport type ComparisonMode = \"previous\" | \"year-over-year\";\n\n/** Props for the date range picker component. */\nexport interface DateRangePickerProps {\n value?: DateRange;\n onChange?: (range: DateRange) => void;\n presets?: DateRangePreset[];\n placeholder?: string;\n label?: string;\n required?: boolean;\n error?: string;\n hint?: string;\n className?: string;\n id?: string;\n triggerClassName?: string;\n \"aria-label\"?: string;\n disabled?: boolean;\n format?: (date: Date) => string;\n /** Enable comparison mode toggle */\n comparison?: boolean;\n /** Current comparison mode */\n comparisonMode?: ComparisonMode;\n /** Called when comparison mode changes (null = comparison off) */\n onComparisonChange?: (mode: ComparisonMode | null) => void;\n /** Enable time granularity selector */\n showGranularity?: boolean;\n /** Current granularity */\n granularity?: DateGranularity;\n /** Called when granularity changes */\n onGranularityChange?: (granularity: DateGranularity) => void;\n}\n\nconst DAYS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"] as const;\n\nfunction defaultFormat(date: Date): string {\n return date.toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction 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\nfunction isInRange(date: Date, start: Date | null, end: Date | null): boolean {\n if (!start || !end) return false;\n const t = date.getTime();\n return t >= start.getTime() && t <= end.getTime();\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction startOfDay(date: Date): Date {\n const normalized = new Date(date);\n normalized.setHours(0, 0, 0, 0);\n return normalized;\n}\n\nfunction getDateKey(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(\n 2,\n \"0\",\n )}-${String(date.getDate()).padStart(2, \"0\")}`;\n}\n\nfunction createDateInMonth(year: number, month: number, day: number): Date {\n return startOfDay(\n new Date(year, month, Math.min(day, getDaysInMonth(year, month))),\n );\n}\n\nexport const DEFAULT_PRESETS: DateRangePreset[] = [\n {\n label: \"Today\",\n range: () => {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n return { start: now, end: new Date(now) };\n },\n },\n {\n label: \"Last 7 days\",\n range: () => {\n const end = new Date();\n end.setHours(0, 0, 0, 0);\n const start = new Date(end);\n start.setDate(start.getDate() - 6);\n return { start, end };\n },\n },\n {\n label: \"Last 30 days\",\n range: () => {\n const end = new Date();\n end.setHours(0, 0, 0, 0);\n const start = new Date(end);\n start.setDate(start.getDate() - 29);\n return { start, end };\n },\n },\n {\n label: \"Last 90 days\",\n range: () => {\n const end = new Date();\n end.setHours(0, 0, 0, 0);\n const start = new Date(end);\n start.setDate(start.getDate() - 89);\n return { start, end };\n },\n },\n {\n label: \"This month\",\n range: () => {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n const start = new Date(now.getFullYear(), now.getMonth(), 1);\n return { start, end: now };\n },\n },\n {\n label: \"Last month\",\n range: () => {\n const now = new Date();\n const start = new Date(now.getFullYear(), now.getMonth() - 1, 1);\n const end = new Date(now.getFullYear(), now.getMonth(), 0);\n return { start, end };\n },\n },\n];\n\nconst GRANULARITY_OPTIONS: { value: DateGranularity; label: string }[] = [\n { value: \"hour\", label: \"Hour\" },\n { value: \"day\", label: \"Day\" },\n { value: \"week\", label: \"Week\" },\n { value: \"month\", label: \"Month\" },\n];\n\nconst COMPARISON_OPTIONS: { value: ComparisonMode; label: string }[] = [\n { value: \"previous\", label: \"vs Previous period\" },\n { value: \"year-over-year\", label: \"vs Same period last year\" },\n];\n\n/** Renders the date range picker component. */\nexport function DateRangePicker({\n value,\n onChange,\n presets = DEFAULT_PRESETS,\n placeholder = \"Select date range\",\n label,\n required,\n error,\n hint,\n className,\n id,\n triggerClassName,\n \"aria-label\": ariaLabel,\n disabled = false,\n format = defaultFormat,\n comparison = false,\n comparisonMode,\n onComparisonChange,\n showGranularity = false,\n granularity,\n onGranularityChange,\n}: DateRangePickerProps) {\n const fallbackId = useId().replace(/:/g, \"\");\n const pickerId =\n useInputId(id, label, \"date-range-picker\") ??\n `date-range-picker-${fallbackId}`;\n const hasError = Boolean(error);\n const [range, setRange] = useControlledState<DateRange>(\n { start: null, end: null },\n value,\n onChange,\n );\n\n const [selecting, setSelecting] = useState<\"start\" | \"end\">(\"start\");\n const [viewDate, setViewDate] = useState(() => {\n const d = range.start ?? new Date();\n return { year: d.getFullYear(), month: d.getMonth() };\n });\n const [focusedDate, setFocusedDate] = useState(() =>\n startOfDay(range.start ?? range.end ?? new Date()),\n );\n const dayButtonRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n const granularityButtonRefs = useRef<\n Record<DateGranularity, HTMLButtonElement | null>\n >({\n hour: null,\n day: null,\n week: null,\n month: null,\n });\n const pendingFocusDateRef = useRef<Date | null>(null);\n\n const displayText = useMemo(() => {\n if (range.start && range.end) {\n return `${format(range.start)} — ${format(range.end)}`;\n }\n if (range.start) {\n return `${format(range.start)} — ...`;\n }\n return placeholder;\n }, [range, format, placeholder]);\n\n const handleDayClick = useCallback(\n (day: Date) => {\n setFocusedDate(day);\n if (selecting === \"start\") {\n setRange({ start: day, end: null });\n setSelecting(\"end\");\n } else {\n if (range.start && day.getTime() < range.start.getTime()) {\n setRange({ start: day, end: range.start });\n } else {\n setRange({ start: range.start, end: day });\n }\n setSelecting(\"start\");\n }\n },\n [selecting, range.start, setRange],\n );\n\n const handlePresetClick = useCallback(\n (preset: DateRangePreset) => {\n const newRange = preset.range();\n const nextFocusDate = startOfDay(\n newRange.start ?? newRange.end ?? new Date(),\n );\n setRange(newRange);\n setViewDate({\n year: nextFocusDate.getFullYear(),\n month: nextFocusDate.getMonth(),\n });\n setFocusedDate(nextFocusDate);\n setSelecting(\"start\");\n },\n [setRange],\n );\n\n const moveFocusToDate = useCallback((date: Date) => {\n const nextDate = startOfDay(date);\n pendingFocusDateRef.current = nextDate;\n setViewDate({\n year: nextDate.getFullYear(),\n month: nextDate.getMonth(),\n });\n setFocusedDate(nextDate);\n }, []);\n\n const prevMonth = useCallback(() => {\n setViewDate((v) => {\n const m = v.month - 1;\n const nextViewDate =\n m < 0 ? { year: v.year - 1, month: 11 } : { year: v.year, month: m };\n setFocusedDate((currentFocusedDate) =>\n createDateInMonth(\n nextViewDate.year,\n nextViewDate.month,\n currentFocusedDate.getDate(),\n ),\n );\n return nextViewDate;\n });\n }, []);\n\n const nextMonth = useCallback(() => {\n setViewDate((v) => {\n const m = v.month + 1;\n const nextViewDate =\n m > 11 ? { year: v.year + 1, month: 0 } : { year: v.year, month: m };\n setFocusedDate((currentFocusedDate) =>\n createDateInMonth(\n nextViewDate.year,\n nextViewDate.month,\n currentFocusedDate.getDate(),\n ),\n );\n return nextViewDate;\n });\n }, []);\n\n const { daysInMonth, firstDay, monthLabel } = useMemo(() => {\n const days = getDaysInMonth(viewDate.year, viewDate.month);\n const first = getFirstDayOfMonth(viewDate.year, viewDate.month);\n const label = new Date(viewDate.year, viewDate.month).toLocaleDateString(\n \"en-US\",\n { month: \"long\", year: \"numeric\" },\n );\n return { daysInMonth: days, firstDay: first, monthLabel: label };\n }, [viewDate.year, viewDate.month]);\n\n const today = useMemo(() => {\n const d = new Date();\n d.setHours(0, 0, 0, 0);\n return d;\n }, []);\n\n const calendarWeeks = useMemo(() => {\n const leadingDays = Array.from({ length: firstDay }, () => null);\n const monthDays = Array.from({ length: daysInMonth }, (_, index) =>\n startOfDay(new Date(viewDate.year, viewDate.month, index + 1)),\n );\n const trailingDays = Array.from(\n {\n length: (7 - ((leadingDays.length + monthDays.length) % 7 || 7)) % 7,\n },\n () => null,\n );\n\n const cells = [...leadingDays, ...monthDays, ...trailingDays];\n\n return Array.from({ length: cells.length / 7 }, (_, rowIndex) =>\n cells.slice(rowIndex * 7, rowIndex * 7 + 7),\n );\n }, [daysInMonth, firstDay, viewDate.month, viewDate.year]);\n\n const handleDayKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>, day: Date) => {\n const handlers: Record<string, () => Date> = {\n ArrowLeft: () =>\n startOfDay(\n new Date(day.getFullYear(), day.getMonth(), day.getDate() - 1),\n ),\n ArrowRight: () =>\n startOfDay(\n new Date(day.getFullYear(), day.getMonth(), day.getDate() + 1),\n ),\n ArrowUp: () =>\n startOfDay(\n new Date(day.getFullYear(), day.getMonth(), day.getDate() - 7),\n ),\n ArrowDown: () =>\n startOfDay(\n new Date(day.getFullYear(), day.getMonth(), day.getDate() + 7),\n ),\n Home: () =>\n startOfDay(\n new Date(\n day.getFullYear(),\n day.getMonth(),\n day.getDate() - day.getDay(),\n ),\n ),\n End: () =>\n startOfDay(\n new Date(\n day.getFullYear(),\n day.getMonth(),\n day.getDate() + (6 - day.getDay()),\n ),\n ),\n PageUp: () =>\n createDateInMonth(\n day.getFullYear(),\n day.getMonth() - 1,\n day.getDate(),\n ),\n PageDown: () =>\n createDateInMonth(\n day.getFullYear(),\n day.getMonth() + 1,\n day.getDate(),\n ),\n };\n\n const nextDateFactory = handlers[event.key];\n\n if (!nextDateFactory) {\n return;\n }\n\n event.preventDefault();\n moveFocusToDate(nextDateFactory());\n },\n [moveFocusToDate],\n );\n\n const handleGranularityKeyDown = useCallback(\n (\n event: KeyboardEvent<HTMLButtonElement>,\n currentValue: DateGranularity,\n ) => {\n const currentIndex = GRANULARITY_OPTIONS.findIndex(\n (opt) => opt.value === currentValue,\n );\n\n if (currentIndex < 0) {\n return;\n }\n\n let nextIndex = -1;\n\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n nextIndex = (currentIndex + 1) % GRANULARITY_OPTIONS.length;\n break;\n case \"ArrowLeft\":\n case \"ArrowUp\":\n nextIndex =\n (currentIndex - 1 + GRANULARITY_OPTIONS.length) %\n GRANULARITY_OPTIONS.length;\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = GRANULARITY_OPTIONS.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n const nextValue = GRANULARITY_OPTIONS[nextIndex].value;\n onGranularityChange?.(nextValue);\n requestAnimationFrame(() => {\n granularityButtonRefs.current[nextValue]?.focus();\n });\n },\n [onGranularityChange],\n );\n\n useEffect(() => {\n if (!pendingFocusDateRef.current) {\n return;\n }\n\n const button =\n dayButtonRefs.current[getDateKey(pendingFocusDateRef.current)] ?? null;\n\n if (!button) {\n return;\n }\n\n button.focus();\n pendingFocusDateRef.current = null;\n }, [calendarWeeks, focusedDate, monthLabel]);\n\n return (\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-opt-id=\"0KKZ0\"\n data-opt-slug=\"date-range-picker.DateRangePicker\"\n >\n {label && (\n <span className=\"text-text-primary text-sm font-medium\">\n {label}\n {required && <RequiredMark />}\n </span>\n )}\n <PopoverRoot>\n <PopoverTrigger\n id={pickerId}\n className={cn(\n triggerClassName ?? OPT_INPUT,\n \"cursor-pointer justify-between gap-2 text-left\",\n !range.start && OPT_TEXT_TERTIARY,\n hasError && OPT_INPUT_ERROR,\n disabled && \"pointer-events-none opacity-50\",\n )}\n disabled={disabled}\n aria-label={ariaLabel ?? label ?? \"Date range picker\"}\n aria-required={required}\n aria-invalid={hasError}\n aria-describedby={getDescribedBy(pickerId, error, hint)}\n >\n <span className=\"truncate\">{displayText}</span>\n <CalendarDays\n aria-hidden=\"true\"\n className=\"text-text-tertiary size-4 shrink-0\"\n />\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"bg-surface-overlay z-50 rounded-lg p-4 shadow-lg\",\n OPT_BORDER,\n )}\n >\n <div className=\"flex gap-4\">\n {/* Presets */}\n {presets.length > 0 && (\n <div className=\"border-border-subtle flex flex-col gap-1 border-r pr-4\">\n <span\n className={cn(\n OPT_TEXT_SECONDARY,\n \"mb-1 text-xs font-semibold tracking-wider uppercase\",\n )}\n >\n Presets\n </span>\n {presets.map((preset) => (\n <button\n key={preset.label}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n className={cn(\n \"rounded-md px-3 py-1.5 text-left text-sm\",\n OPT_TEXT_PRIMARY,\n \"hover:bg-accent-subtle\",\n OPT_FOCUS_VISIBLE,\n )}\n >\n {preset.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Calendar */}\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={prevMonth}\n className={cn(\n \"rounded-md p-1\",\n OPT_TEXT_SECONDARY,\n \"hover:bg-bg-subtle\",\n OPT_FOCUS_VISIBLE,\n )}\n aria-label=\"Previous month\"\n >\n <ChevronLeft\n aria-hidden=\"true\"\n className=\"size-4 rtl:-scale-x-100\"\n />\n </button>\n <span className={cn(OPT_TEXT_PRIMARY, \"text-sm font-medium\")}>\n {monthLabel}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className={cn(\n \"rounded-md p-1\",\n OPT_TEXT_SECONDARY,\n \"hover:bg-bg-subtle\",\n OPT_FOCUS_VISIBLE,\n )}\n aria-label=\"Next month\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-4 rtl:-scale-x-100\"\n />\n </button>\n </div>\n\n <div\n className=\"flex flex-col gap-0\"\n role=\"grid\"\n aria-label={monthLabel}\n >\n <div className=\"grid grid-cols-7 gap-0\" role=\"row\">\n {DAYS.map((d) => (\n <div\n key={d}\n className={cn(\n OPT_TEXT_TERTIARY,\n \"flex h-8 w-8 items-center justify-center text-xs font-medium\",\n )}\n role=\"columnheader\"\n >\n {d}\n </div>\n ))}\n </div>\n {calendarWeeks.map((week, weekIndex) => (\n <div\n key={`${monthLabel}-week-${weekIndex + 1}`}\n className=\"grid grid-cols-7 gap-0\"\n role=\"row\"\n >\n {week.map((day, dayIndex) => {\n if (!day) {\n return (\n <div\n key={`${monthLabel}-empty-${weekIndex + 1}-${dayIndex + 1}`}\n className=\"h-8 w-8\"\n role=\"gridcell\"\n aria-hidden=\"true\"\n />\n );\n }\n\n const isToday = isSameDay(day, today);\n const isSelected =\n (range.start && isSameDay(day, range.start)) ||\n (range.end && isSameDay(day, range.end));\n const inRange = isInRange(day, range.start, range.end);\n const isFocused = isSameDay(day, focusedDate);\n const dayLabel = day.toLocaleDateString(\"en-US\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n });\n const dateKey = getDateKey(day);\n\n return (\n <div\n key={dateKey}\n role=\"gridcell\"\n aria-selected={isSelected || undefined}\n className=\"flex h-8 w-8 items-center justify-center\"\n >\n <button\n ref={(node) => {\n dayButtonRefs.current[dateKey] = node;\n }}\n type=\"button\"\n onClick={() => handleDayClick(day)}\n onFocus={() => setFocusedDate(day)}\n onKeyDown={(event) => handleDayKeyDown(event, day)}\n tabIndex={isFocused ? 0 : -1}\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-md text-sm\",\n OPT_FOCUS_VISIBLE,\n isSelected &&\n \"bg-accent text-accent-fg font-medium\",\n !isSelected &&\n inRange &&\n \"bg-accent-subtle text-accent-fg\",\n !isSelected &&\n !inRange &&\n \"text-text-primary hover:bg-bg-subtle\",\n isToday &&\n !isSelected &&\n \"decoration-accent font-semibold underline underline-offset-2\",\n )}\n aria-label={dayLabel}\n aria-current={isToday ? \"date\" : undefined}\n >\n {day.getDate()}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Granularity + Comparison footer */}\n {(showGranularity || comparison) && (\n <div className=\"border-border-subtle mt-3 flex flex-wrap items-center gap-3 border-t pt-3\">\n {showGranularity && (\n <div\n className=\"flex items-center gap-1.5\"\n role=\"radiogroup\"\n aria-label=\"Time granularity\"\n >\n <span\n className={cn(OPT_TEXT_SECONDARY, \"text-xs font-medium\")}\n >\n Granularity\n </span>\n {GRANULARITY_OPTIONS.map((opt) => (\n <button\n key={opt.value}\n ref={(node) => {\n granularityButtonRefs.current[opt.value] = node;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={granularity === opt.value}\n onKeyDown={(event) =>\n handleGranularityKeyDown(event, opt.value)\n }\n onClick={() => onGranularityChange?.(opt.value)}\n className={cn(\n \"rounded-md px-2 py-1 text-xs\",\n OPT_FOCUS_VISIBLE,\n granularity === opt.value\n ? \"bg-accent text-accent-fg font-medium\"\n : cn(OPT_TEXT_PRIMARY, \"hover:bg-bg-subtle\"),\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n {comparison && (\n <div\n className=\"flex items-center gap-1.5\"\n role=\"group\"\n aria-label=\"Comparison mode\"\n >\n <span\n className={cn(OPT_TEXT_SECONDARY, \"text-xs font-medium\")}\n >\n Compare\n </span>\n {COMPARISON_OPTIONS.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n aria-pressed={comparisonMode === opt.value}\n onClick={() =>\n onComparisonChange?.(\n comparisonMode === opt.value ? null : opt.value,\n )\n }\n className={cn(\n \"rounded-md px-2 py-1 text-xs\",\n OPT_FOCUS_VISIBLE,\n comparisonMode === opt.value\n ? \"bg-accent text-accent-fg font-medium\"\n : cn(OPT_TEXT_PRIMARY, \"hover:bg-bg-subtle\"),\n )}\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </PopoverContent>\n </PopoverRoot>\n <FieldMessages id={pickerId} error={error} hint={hint} />\n </div>\n );\n}\n\nDateRangePicker.displayName = \"DateRangePicker\";\n","\"use client\";\n\nimport {\n FormRoot as PrimFormRoot,\n FormProvider as PrimFormProvider,\n FormInput as PrimFormInput,\n FormLabel as PrimFormLabel,\n FormField as PrimFormField,\n FormDescription as PrimFormDescription,\n FormError as PrimFormError,\n FormCheckbox as PrimFormCheckbox,\n FormRadioGroup as PrimFormRadioGroup,\n FormRadio as PrimFormRadio,\n FormSubmit as PrimFormSubmit,\n FormReset as PrimFormReset,\n FormPush as PrimFormPush,\n FormRemove as PrimFormRemove,\n FormGroup as PrimFormGroup,\n FormGroupLabel as PrimFormGroupLabel,\n FormControl as PrimFormControl,\n FormSwitch as PrimFormSwitch,\n useFormStore,\n useFormContext,\n useFieldValue,\n type FormRootProps as PrimFormRootProps,\n type FormInputProps as PrimFormInputProps,\n type FormLabelProps as PrimFormLabelProps,\n type FormFieldProps as PrimFormFieldProps,\n type FormDescriptionProps as PrimFormDescriptionProps,\n type FormErrorProps as PrimFormErrorProps,\n type FormCheckboxProps as PrimFormCheckboxProps,\n type FormRadioGroupProps as PrimFormRadioGroupProps,\n type FormRadioProps as PrimFormRadioProps,\n type FormSubmitProps as PrimFormSubmitProps,\n type FormResetProps as PrimFormResetProps,\n type FormPushProps as PrimFormPushProps,\n type FormRemoveProps as PrimFormRemoveProps,\n type FormGroupProps as PrimFormGroupProps,\n type FormGroupLabelProps as PrimFormGroupLabelProps,\n type FormSwitchProps as PrimFormSwitchProps,\n} from \"@reopt-ai/opt-ui-primitives\";\nimport type { FormStoreInstance } from \"@reopt-ai/opt-ui-primitives\";\nimport { useCallback, type ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n SelectRoot,\n SelectTrigger,\n SelectPopover,\n SelectItem,\n} from \"../core/select\";\nimport {\n OPT_ACTIVE_ITEM,\n OPT_BUTTON_PRIMARY,\n OPT_BUTTON_SECONDARY,\n OPT_FOCUS_VISIBLE,\n OPT_INPUT,\n OPT_ITEM_BASE,\n OPT_SURFACE_POPOVER,\n OPT_TEXT_LABEL,\n OPT_ANIMATE_ENTER_EXIT,\n} from \"../lib/styles\";\nimport { NumberInput, type NumberInputProps } from \"../core/number-input\";\nimport { Slider, type SliderProps } from \"../core/slider\";\nimport { StarRating, type StarRatingProps } from \"../core/star-rating\";\nimport { ColorPicker, type ColorPickerProps } from \"../core/color-picker\";\nimport { IconPicker, type IconPickerProps } from \"../core/icon-picker\";\nimport { TagInput, type TagInputProps } from \"../core/tag-input\";\nimport {\n DateRangePicker,\n type DateRangePickerProps,\n type DateRange,\n} from \"../core/date-range-picker\";\n\nconst inputClass = `${OPT_INPUT} aria-[invalid=true]:border-danger`;\n\nconst labelClass = OPT_TEXT_LABEL;\n\nconst descriptionClass = \"text-xs text-text-tertiary\";\n\nconst errorClass = \"text-xs text-danger-fg\";\n\nconst submitClass = OPT_BUTTON_PRIMARY;\n\nconst checkboxClass = `h-4 w-4 rounded accent-accent ${OPT_FOCUS_VISIBLE}`;\n\nconst radioClass = `h-4 w-4 accent-accent ${OPT_FOCUS_VISIBLE}`;\n\nfunction useRequiredFormContext(componentName: string) {\n const form = useFormContext();\n\n if (!form) {\n throw new Error(\n `${componentName} must be used within FormRoot or FormProvider with a store.`,\n );\n }\n\n return form;\n}\n\n// ── FormRoot ──\n\ntype FormRootProps = PrimFormRootProps & {\n /** FormStore instance. When provided, wraps children with FormProvider automatically. */\n store?: FormStoreInstance;\n};\n\n/** Renders the form root component. */\nexport function FormRoot({ className, store, ...props }: FormRootProps) {\n const form = (\n <PrimFormRoot\n className={cn(\"gap-section flex flex-col\", className)}\n {...props}\n />\n );\n\n if (store) {\n return (\n <PrimFormProvider\n store={store}\n data-opt-id=\"YBT1H\"\n data-opt-slug=\"form.FormRoot\"\n >\n {form}\n </PrimFormProvider>\n );\n }\n\n return form;\n}\n\n// ── FormInput ──\n\ntype FormInputProps = PrimFormInputProps;\n\n/** Renders the form input component. */\nexport function FormInput({ className, ...props }: FormInputProps) {\n return (\n <PrimFormInput\n className={cn(inputClass, className)}\n {...props}\n data-opt-id=\"D7Z8F\"\n data-opt-slug=\"form.FormInput\"\n />\n );\n}\n\n// ── FormTextarea ──\n\n/** Props for the form textarea component. */\nexport type FormTextareaProps = Omit<\n ComponentPropsWithoutRef<\"textarea\">,\n \"name\"\n> & {\n name: string;\n resize?: \"none\" | \"vertical\" | \"horizontal\" | \"both\";\n};\n\nconst resizeStyles: Record<NonNullable<FormTextareaProps[\"resize\"]>, string> = {\n none: \"resize-none\",\n vertical: \"resize-y\",\n horizontal: \"resize-x\",\n both: \"resize\",\n};\n\n/** Renders the form textarea component. */\nexport function FormTextarea({\n className,\n resize = \"vertical\",\n rows = 4,\n name,\n ...props\n}: FormTextareaProps) {\n const form = useRequiredFormContext(\"FormTextarea\");\n const value = (useFieldValue(form, name) as string) ?? \"\";\n const error = form?.getError(name);\n const touched = form?.getFieldTouched(name);\n const hasError = Boolean(error && touched);\n\n return (\n <textarea\n name={name}\n value={value}\n onChange={(e) => form?.setValue(name, e.target.value)}\n className={cn(\n \"border-border bg-surface flex w-full rounded-lg border px-4 py-3\",\n \"text-text-primary placeholder:text-text-tertiary focus-visible:ring-ring focus-visible:ring-offset-ring-offset text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1\",\n OPT_FOCUS_VISIBLE,\n resizeStyles[resize],\n hasError && \"border-danger\",\n className,\n )}\n rows={rows}\n aria-invalid={hasError || undefined}\n {...props}\n data-opt-id=\"Q8G2A\"\n data-opt-slug=\"form.FormTextarea\"\n />\n );\n}\n\n// ── FormSelect ──\n\n/** Props for the form select component. */\nexport type FormSelectProps = {\n name: string;\n children: React.ReactNode;\n className?: string;\n placeholder?: string;\n minWidth?: number | string;\n \"aria-label\"?: string;\n};\n\n/** Renders the form select component. */\nexport function FormSelect({\n name,\n children,\n className,\n placeholder,\n minWidth = 140,\n \"aria-label\": ariaLabel,\n}: FormSelectProps) {\n const form = useRequiredFormContext(\"FormSelect\");\n const value = (useFieldValue(form, name) as string) ?? \"\";\n const error = form?.getError(name);\n const touched = form?.getFieldTouched(name);\n const hasError = Boolean(error && touched);\n\n const handleSetValue = useCallback(\n (v: string | string[]) =>\n form.setValue(name, Array.isArray(v) ? (v[0] ?? \"\") : v),\n [form, name],\n );\n\n return (\n <SelectRoot\n value={value}\n onValueChange={handleSetValue}\n data-opt-id=\"A2XF7\"\n data-opt-slug=\"form.FormSelect\"\n >\n <SelectTrigger\n aria-label={ariaLabel ?? name}\n aria-invalid={hasError || undefined}\n className={cn(\n \"inline-flex cursor-pointer items-center justify-between data-[disabled]:cursor-not-allowed\",\n hasError && \"border-danger\",\n className,\n )}\n style={{\n minWidth: typeof minWidth === \"number\" ? `${minWidth}px` : minWidth,\n }}\n >\n {value || placeholder || \"Select…\"}\n </SelectTrigger>\n {children}\n </SelectRoot>\n );\n}\n\n// ── FormSelectPopover ──\n\ntype FormSelectPopoverProps = ComponentPropsWithoutRef<typeof SelectPopover>;\n\n/** Renders the form select popover component. */\nexport function FormSelectPopover({\n className,\n ...props\n}: FormSelectPopoverProps) {\n return (\n <SelectPopover\n className={cn(\n OPT_SURFACE_POPOVER,\n OPT_ANIMATE_ENTER_EXIT,\n \"z-[120]\",\n className,\n )}\n {...props}\n data-opt-id=\"CQSPJ\"\n data-opt-slug=\"form.FormSelectPopover\"\n />\n );\n}\n\n// ── FormSelectItem ──\n\ntype FormSelectItemProps = ComponentPropsWithoutRef<typeof SelectItem>;\n\n/** Renders the form select item component. */\nexport function FormSelectItem({ className, ...props }: FormSelectItemProps) {\n return (\n <SelectItem\n className={cn(\n \"flex cursor-pointer items-center gap-2 data-[disabled]:cursor-not-allowed\",\n OPT_ITEM_BASE,\n OPT_ACTIVE_ITEM,\n className,\n )}\n {...props}\n data-opt-id=\"J3970\"\n data-opt-slug=\"form.FormSelectItem\"\n />\n );\n}\n\n// ── FormSwitch ──\n\n/** Props for the form switch component. */\nexport type FormSwitchProps = PrimFormSwitchProps & {\n size?: \"sm\" | \"md\" | \"lg\";\n};\n\nconst switchSizeStyles = {\n sm: { track: \"h-5 w-9\", thumb: \"h-4 w-4\" },\n md: { track: \"h-6 w-11\", thumb: \"h-5 w-5\" },\n lg: { track: \"h-7 w-14\", thumb: \"h-6 w-6\" },\n};\n\n/** Renders the form switch component. */\nexport function FormSwitch({\n className,\n size = \"md\",\n name,\n ...props\n}: FormSwitchProps) {\n const styles = switchSizeStyles[size];\n const form = useRequiredFormContext(\"FormSwitch\");\n const checked = Boolean(useFieldValue(form, name));\n\n return (\n <PrimFormSwitch\n name={name}\n className={cn(\n \"group relative inline-flex shrink-0 cursor-pointer rounded-full p-0.5 transition-colors\",\n styles.track,\n \"bg-bg-muted\",\n \"aria-[checked=true]:bg-accent\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n OPT_FOCUS_VISIBLE,\n className,\n )}\n aria-checked={checked}\n {...props}\n data-opt-id=\"48T40\"\n data-opt-slug=\"form.FormSwitch\"\n >\n <span\n className={cn(\n // eslint-disable-next-line opt-ui/no-raw-color -- switch thumb은 라이트/다크 공통 흰색 (디자인 시스템 표준)\n \"pointer-events-none inline-block transform rounded-full bg-white shadow-sm ring-0 transition-transform\",\n styles.thumb,\n \"translate-x-0\",\n size === \"sm\" && \"group-aria-[checked=true]:translate-x-4\",\n size === \"md\" && \"group-aria-[checked=true]:translate-x-5\",\n size === \"lg\" && \"group-aria-[checked=true]:translate-x-7\",\n )}\n />\n </PrimFormSwitch>\n );\n}\n\n// ── FormLabel ──\n\ntype FormLabelProps = PrimFormLabelProps;\n\n/** Renders the form label component. */\nexport function FormLabel({ className, ...props }: FormLabelProps) {\n return (\n <PrimFormLabel\n className={cn(labelClass, className)}\n {...props}\n data-opt-id=\"JHRKM\"\n data-opt-slug=\"form.FormLabel\"\n />\n );\n}\n\n// ── FormError ──\n\ntype FormErrorProps = PrimFormErrorProps;\n\n/** Renders the form error component. */\nexport function FormError({ className, ...props }: FormErrorProps) {\n return (\n <PrimFormError\n className={cn(errorClass, className)}\n {...props}\n data-opt-id=\"E9NM4\"\n data-opt-slug=\"form.FormError\"\n />\n );\n}\n\n// ── FormSubmit ──\n\ntype FormSubmitProps = PrimFormSubmitProps;\n\n/** Renders the form submit component. */\nexport function FormSubmit({\n className,\n disabled,\n children,\n ...props\n}: FormSubmitProps) {\n const form = useFormContext();\n const isSubmitting = form?.isSubmitting() ?? false;\n\n return (\n <PrimFormSubmit\n className={cn(submitClass, className)}\n disabled={disabled ?? isSubmitting}\n {...props}\n data-opt-id=\"K580M\"\n data-opt-slug=\"form.FormSubmit\"\n >\n {children}\n </PrimFormSubmit>\n );\n}\n\n// ── FormProvider ──\n\n/** Renders the form provider component. */\nexport function FormProvider(\n props: ComponentPropsWithoutRef<typeof PrimFormProvider>,\n) {\n return (\n <PrimFormProvider\n {...props}\n data-opt-id=\"G0DQ4\"\n data-opt-slug=\"form.FormProvider\"\n />\n );\n}\n\n// ── FormGroup ──\n\ntype FormGroupProps = PrimFormGroupProps;\n\n/** Renders the form group component. */\nexport function FormGroup({ className, ...props }: FormGroupProps) {\n return (\n <PrimFormGroup\n className={cn(\"gap-group flex flex-col\", className)}\n {...props}\n data-opt-id=\"89E8Q\"\n data-opt-slug=\"form.FormGroup\"\n />\n );\n}\n\n// ── FormGroupLabel ──\n\ntype FormGroupLabelProps = PrimFormGroupLabelProps;\n\n/** Renders the form group label component. */\nexport function FormGroupLabel({ className, ...props }: FormGroupLabelProps) {\n return (\n <PrimFormGroupLabel\n className={cn(labelClass, \"font-semibold\", className)}\n {...props}\n data-opt-id=\"W95BH\"\n data-opt-slug=\"form.FormGroupLabel\"\n />\n );\n}\n\n// ── FormDescription ──\n\ntype FormDescriptionProps = PrimFormDescriptionProps;\n\n/** Renders the form description component. */\nexport function FormDescription({ className, ...props }: FormDescriptionProps) {\n return (\n <PrimFormDescription\n className={cn(descriptionClass, className)}\n {...props}\n data-opt-id=\"RFB40\"\n data-opt-slug=\"form.FormDescription\"\n />\n );\n}\n\n// ── FormField ──\n\ntype FormFieldProps = PrimFormFieldProps;\n\n/** Renders the form field component. */\nexport function FormField({ className, ...props }: FormFieldProps) {\n return (\n <PrimFormField\n className={cn(\"gap-element flex flex-col\", className)}\n {...props}\n data-opt-id=\"C68GP\"\n data-opt-slug=\"form.FormField\"\n />\n );\n}\n\n// ── FormControl ──\n\ntype FormControlProps = PrimFormInputProps;\n\n/** Renders the form control component. */\nexport function FormControl({ className, ...props }: FormControlProps) {\n return (\n <PrimFormControl\n className={cn(inputClass, className)}\n {...props}\n data-opt-id=\"XNF0F\"\n data-opt-slug=\"form.FormControl\"\n />\n );\n}\n\n// ── FormPush ──\n\ntype FormPushProps = PrimFormPushProps;\n\n/** Renders the form push component. */\nexport function FormPush({ className, ...props }: FormPushProps) {\n return (\n <PrimFormPush\n className={cn(OPT_BUTTON_SECONDARY, className)}\n {...props}\n data-opt-id=\"5SV8S\"\n data-opt-slug=\"form.FormPush\"\n />\n );\n}\n\n// ── FormRemove ──\n\ntype FormRemoveProps = PrimFormRemoveProps;\n\n/** Renders the form remove component. */\nexport function FormRemove({ className, ...props }: FormRemoveProps) {\n return (\n <PrimFormRemove\n className={cn(\n \"text-danger-fg hover:text-danger focus-visible:ring-ring focus-visible:ring-offset-ring-offset inline-flex items-center text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1\",\n OPT_FOCUS_VISIBLE,\n className,\n )}\n {...props}\n data-opt-id=\"FEW6V\"\n data-opt-slug=\"form.FormRemove\"\n />\n );\n}\n\n// ── FormReset ──\n\ntype FormResetProps = PrimFormResetProps;\n\n/** Renders the form reset component. */\nexport function FormReset({ className, ...props }: FormResetProps) {\n return (\n <PrimFormReset\n className={cn(OPT_BUTTON_SECONDARY, className)}\n {...props}\n data-opt-id=\"M3FVB\"\n data-opt-slug=\"form.FormReset\"\n />\n );\n}\n\n// ── FormCheckbox ──\n\ntype FormCheckboxProps = PrimFormCheckboxProps;\n\n/** Renders the form checkbox component. */\nexport function FormCheckbox({ className, ...props }: FormCheckboxProps) {\n return (\n <PrimFormCheckbox\n className={cn(checkboxClass, className)}\n {...props}\n data-opt-id=\"3BZS1\"\n data-opt-slug=\"form.FormCheckbox\"\n />\n );\n}\n\n// ── FormRadioGroup ──\n\ntype FormRadioGroupProps = PrimFormRadioGroupProps;\n\n/** Renders the form radio group component. */\nexport function FormRadioGroup({ className, ...props }: FormRadioGroupProps) {\n return (\n <PrimFormRadioGroup\n className={cn(\"gap-group flex flex-col\", className)}\n {...props}\n data-opt-id=\"J8XRP\"\n data-opt-slug=\"form.FormRadioGroup\"\n />\n );\n}\n\n// ── FormRadio ──\n\ntype FormRadioProps = PrimFormRadioProps;\n\n/** Renders the form radio component. */\nexport function FormRadio({ className, ...props }: FormRadioProps) {\n return (\n <PrimFormRadio\n className={cn(radioClass, className)}\n {...props}\n data-opt-id=\"YTN4Q\"\n data-opt-slug=\"form.FormRadio\"\n />\n );\n}\n\n// ── FormNumberInput ──\n\n/** Props for the form number input component. */\nexport type FormNumberInputProps = Omit<\n NumberInputProps,\n \"value\" | \"onChange\"\n> & {\n name: string;\n};\n\n/** Renders the form number input component. */\nexport function FormNumberInput({ name, ...props }: FormNumberInputProps) {\n const form = useRequiredFormContext(\"FormNumberInput\");\n const value = (useFieldValue(form, name) as number) ?? 0;\n const error = form?.getError(name);\n const touched = form?.getFieldTouched(name);\n return (\n <NumberInput\n value={value}\n onChange={(v) => form.setValue(name, v)}\n error={error && touched ? error : undefined}\n {...props}\n data-opt-id=\"FJ2A2\"\n data-opt-slug=\"form.FormNumberInput\"\n />\n );\n}\n\n// ── FormSlider ──\n\n/** Props for the form slider component. */\nexport type FormSliderProps = Omit<SliderProps, \"value\" | \"onChange\"> & {\n name: string;\n};\n\n/** Renders the form slider component. */\nexport function FormSlider({ name, ...props }: FormSliderProps) {\n const form = useRequiredFormContext(\"FormSlider\");\n const value = (useFieldValue(form, name) as number) ?? 0;\n return (\n <Slider\n value={value}\n onChange={(v) => form.setValue(name, v)}\n {...props}\n data-opt-id=\"3XQ3A\"\n data-opt-slug=\"form.FormSlider\"\n />\n );\n}\n\n// ── FormStarRating ──\n\n/** Props for the form star rating component. */\nexport type FormStarRatingProps = Omit<\n StarRatingProps,\n \"value\" | \"onChange\"\n> & {\n name: string;\n};\n\n/** Renders the form star rating component. */\nexport function FormStarRating({ name, ...props }: FormStarRatingProps) {\n const form = useRequiredFormContext(\"FormStarRating\");\n const value = (useFieldValue(form, name) as number) ?? 0;\n return (\n <StarRating\n value={value}\n onChange={(v) => form.setValue(name, v)}\n {...props}\n data-opt-id=\"EKNJJ\"\n data-opt-slug=\"form.FormStarRating\"\n />\n );\n}\n\n// ── FormColorPicker ──\n\n/** Props for the form color picker component. */\nexport type FormColorPickerProps = Omit<\n ColorPickerProps,\n \"value\" | \"onChange\"\n> & {\n name: string;\n};\n\n/** Renders the form color picker component. */\nexport function FormColorPicker({ name, ...props }: FormColorPickerProps) {\n const form = useRequiredFormContext(\"FormColorPicker\");\n const value = (useFieldValue(form, name) as string) ?? \"#000000\";\n const error = form?.getError(name);\n const touched = form?.getFieldTouched(name);\n return (\n <ColorPicker\n value={value}\n onChange={(v) => form.setValue(name, v)}\n error={error && touched ? error : undefined}\n {...props}\n data-opt-id=\"4ATTC\"\n data-opt-slug=\"form.FormColorPicker\"\n />\n );\n}\n\n// ── FormIconPicker ──\n\n/** Props for the form icon picker component. */\nexport type FormIconPickerProps = Omit<\n IconPickerProps,\n \"value\" | \"onChange\"\n> & {\n name: string;\n};\n\n/** Renders the form icon picker component. */\nexport function FormIconPicker({ name, ...props }: FormIconPickerProps) {\n const form = useRequiredFormContext(\"FormIconPicker\");\n const value = (useFieldValue(form, name) as string) ?? \"\";\n const error = form?.getError(name);\n const touched = form?.getFieldTouched(name);\n return (\n <IconPicker\n value={value}\n onChange={(v) => form.setValue(name, v)}\n error={error && touched ? error : undefined}\n {...props}\n data-opt-id=\"7Q41M\"\n data-opt-slug=\"form.FormIconPicker\"\n />\n );\n}\n\n// ── FormTagInput ──\n\n/** Props for the form tag input component. */\nexport type FormTagInputProps = Omit<TagInputProps, \"value\" | \"onChange\"> & {\n name: string;\n};\n\n/** Renders the form tag input component. */\nexport function FormTagInput({ name, ...props }: FormTagInputProps) {\n const form = useRequiredFormContext(\"FormTagInput\");\n const value = (useFieldValue(form, name) as string[]) ?? [];\n const error = form?.getError(name);\n const touched = form?.getFieldTouched(name);\n return (\n <TagInput\n value={value}\n onChange={(v) => form.setValue(name, v)}\n error={error && touched ? error : undefined}\n {...props}\n data-opt-id=\"W05M1\"\n data-opt-slug=\"form.FormTagInput\"\n />\n );\n}\n\n// ── FormDateRangePicker ──\n\n/** Props for the form date range picker component. */\nexport type FormDateRangePickerProps = Omit<\n DateRangePickerProps,\n \"value\" | \"onChange\"\n> & {\n name: string;\n};\n\n/** Renders the form date range picker component. */\nexport function FormDateRangePicker({\n name,\n ...props\n}: FormDateRangePickerProps) {\n const form = useRequiredFormContext(\"FormDateRangePicker\");\n const value = (useFieldValue(form, name) as DateRange) ?? {\n start: null,\n end: null,\n };\n const error = form?.getError(name);\n const touched = form?.getFieldTouched(name);\n return (\n <DateRangePicker\n value={value}\n onChange={(v) => form.setValue(name, v)}\n error={error && touched ? error : undefined}\n {...props}\n data-opt-id=\"4NE9A\"\n data-opt-slug=\"form.FormDateRangePicker\"\n />\n );\n}\n\n// ── Re-exports ──\n\nexport { useFormStore, useFormContext, useFieldValue };\n","\"use client\";\n\nimport {\n forwardRef,\n createContext,\n useContext,\n useState,\n useMemo,\n useCallback,\n useId,\n type ComponentPropsWithoutRef,\n type ForwardedRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n FieldMessages,\n RequiredMark,\n getDescribedBy,\n} from \"../lib/field-messages\";\nimport { useControlledState } from \"../lib/use-controlled-state\";\nimport { useInputId } from \"../lib/use-input-id\";\n\n// CheckboxGroup Context\ninterface CheckboxGroupContextValue {\n value: string[];\n onChange: (value: string[]) => void;\n disabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(\n null,\n);\n\nfunction setForwardedRef<T>(ref: ForwardedRef<T>, value: T | null) {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n\n// Checkbox Props\n/** Props for the checkbox component. */\nexport interface CheckboxProps extends Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"onChange\" | \"type\" | \"size\"\n> {\n label?: string;\n required?: boolean;\n error?: string;\n hint?: string;\n /** @deprecated Use `hint` instead */\n description?: string;\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (checked: boolean) => void;\n size?: \"sm\" | \"md\" | \"lg\";\n /** Value for CheckboxGroup */\n value?: string;\n /** Show indeterminate state */\n indeterminate?: boolean;\n}\n\n// CheckboxGroup Props\n/** Props for the checkbox group component. */\nexport interface CheckboxGroupProps {\n children: ReactNode;\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n disabled?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n error?: string;\n required?: boolean;\n className?: string;\n /** Layout direction */\n orientation?: \"horizontal\" | \"vertical\";\n label?: string;\n}\n\nconst sizeStyles = {\n sm: {\n box: \"h-4 w-4\",\n icon: \"h-3 w-3\",\n text: \"text-sm\",\n },\n md: {\n box: \"h-5 w-5\",\n icon: \"h-3.5 w-3.5\",\n text: \"text-sm\",\n },\n lg: {\n box: \"h-6 w-6\",\n icon: \"h-4 w-4\",\n text: \"text-base\",\n },\n};\n\n// Check Icon\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n className={className}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3.5 8.5L6.5 11.5L12.5 4.5\" />\n </svg>\n );\n}\n\n// Indeterminate Icon (minus)\nfunction IndeterminateIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n className={className}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n >\n <path d=\"M4 8H12\" />\n </svg>\n );\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n label,\n required,\n error,\n hint,\n description,\n checked: checkedProp,\n defaultChecked,\n onChange,\n size: sizeProp = \"md\",\n disabled: disabledProp,\n className,\n id,\n value,\n indeterminate,\n ...props\n },\n ref,\n ) => {\n const groupContext = useContext(CheckboxGroupContext);\n\n // Use group context if available\n const size = groupContext?.size ?? sizeProp;\n const disabled = groupContext?.disabled ?? disabledProp;\n\n // Handle checked state for group\n const isInGroup = groupContext !== null && value !== undefined;\n\n // Internal state for uncontrolled mode\n const [internalChecked, setInternalChecked] = useState(\n defaultChecked ?? false,\n );\n\n // Determine actual checked state\n // checkedProp !== undefined || isInGroup determines controlled mode\n const checked = isInGroup\n ? groupContext.value.includes(value)\n : (checkedProp ?? internalChecked);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newChecked = event.target.checked;\n\n if (isInGroup && value) {\n const newValue = newChecked\n ? [...groupContext.value, value]\n : groupContext.value.filter((v) => v !== value);\n groupContext.onChange(newValue);\n } else if (checkedProp !== undefined) {\n // Controlled mode - call onChange\n onChange?.(newChecked);\n } else {\n // Uncontrolled mode - update internal state\n setInternalChecked(newChecked);\n onChange?.(newChecked);\n }\n };\n\n const fallbackId = useId().replace(/:/g, \"\");\n const checkboxId =\n useInputId(id, label, \"checkbox\") ?? `checkbox-${fallbackId}`;\n const hintText = hint ?? description;\n const hasError = Boolean(error);\n const styles = sizeStyles[size];\n const isIndeterminate = Boolean(indeterminate);\n const inputRef = useCallback(\n (node: HTMLInputElement | null) => {\n if (node) {\n node.indeterminate = isIndeterminate;\n }\n setForwardedRef(ref, node);\n },\n [isIndeterminate, ref],\n );\n\n return (\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-opt-id=\"3P3MA\"\n data-opt-slug=\"checkbox.Checkbox\"\n >\n <div className=\"flex items-start gap-3\">\n <label\n className={cn(\n \"relative inline-flex shrink-0 cursor-pointer items-center justify-center\",\n disabled && \"cursor-not-allowed\",\n )}\n >\n <input\n ref={inputRef}\n type=\"checkbox\"\n id={checkboxId}\n checked={checked}\n onChange={handleChange}\n disabled={disabled}\n aria-invalid={hasError}\n aria-required={required}\n aria-describedby={getDescribedBy(checkboxId, error, hintText)}\n className=\"peer sr-only\"\n {...props}\n />\n <span\n className={cn(\n \"inline-flex items-center justify-center rounded\",\n styles.box,\n \"border-border border-2\",\n \"bg-surface\",\n \"peer-checked:border-accent peer-checked:bg-accent\",\n isIndeterminate && \"border-accent bg-accent\",\n \"peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n \"peer-focus-visible:ring-ring peer-focus-visible:ring-2 peer-focus-visible:ring-offset-1\",\n \"transition-colors\",\n )}\n >\n {isIndeterminate ? (\n <IndeterminateIcon\n className={cn(\n styles.icon,\n \"text-accent-fg opacity-0 transition-opacity\",\n \"opacity-100\",\n )}\n />\n ) : (\n <CheckIcon\n className={cn(\n styles.icon,\n \"text-accent-fg opacity-0 transition-opacity\",\n checked && \"opacity-100\",\n )}\n />\n )}\n </span>\n </label>\n {(label || hintText) && (\n <div className=\"flex flex-col\">\n {label && (\n <label\n htmlFor={checkboxId}\n className={cn(\n \"text-text-primary cursor-pointer font-medium\",\n styles.text,\n disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {label}\n {required && <RequiredMark />}\n </label>\n )}\n {hintText && (\n <p\n id={`${checkboxId}-hint`}\n className={cn(\n \"text-text-tertiary text-sm\",\n disabled && \"opacity-50\",\n )}\n >\n {hintText}\n </p>\n )}\n </div>\n )}\n </div>\n <FieldMessages id={checkboxId} error={error} />\n </div>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nconst EMPTY_STRING_ARRAY: string[] = [];\n\n/** Renders the checkbox group component. */\nexport function CheckboxGroup({\n children,\n value: valueProp,\n defaultValue = EMPTY_STRING_ARRAY,\n onChange,\n disabled,\n size = \"md\",\n error,\n required,\n className,\n orientation = \"vertical\",\n label,\n}: CheckboxGroupProps) {\n const [value, setValue] = useControlledState(\n defaultValue,\n valueProp,\n onChange,\n );\n const hasError = Boolean(error);\n const groupId = label\n ? `checkbox-group-${label.replace(/\\s+/g, \"-\").toLowerCase()}`\n : undefined;\n\n const ctxValue = useMemo(\n () => ({ value, onChange: setValue, disabled, size }),\n [value, setValue, disabled, size],\n );\n\n return (\n <CheckboxGroupContext.Provider value={ctxValue}>\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n data-opt-id=\"V6NSW\"\n data-opt-slug=\"checkbox.CheckboxGroup\"\n >\n <div\n role=\"group\"\n aria-label={label}\n aria-required={required}\n aria-invalid={hasError}\n aria-describedby={\n hasError && groupId ? `${groupId}-error` : undefined\n }\n className={cn(\n \"flex\",\n orientation === \"vertical\" ? \"flex-col gap-3\" : \"flex-row gap-6\",\n )}\n >\n {label && (\n <div className=\"text-text-secondary mb-1 text-sm font-medium\">\n {label}\n {required && <RequiredMark />}\n </div>\n )}\n {children}\n </div>\n <FieldMessages id={groupId} error={error} />\n </div>\n </CheckboxGroupContext.Provider>\n );\n}\n","\"use client\";\n\nimport { useMemo, type ComponentPropsWithoutRef } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { OPT_FOCUS_VISIBLE } from \"../lib/styles\";\n\n/** Visual treatment for the content between previous/next controls. */\nexport type PaginationVariant = \"pages\" | \"count\" | \"compact\" | \"none\";\n\n/** Accessible labels and visible range formatters used by Pagination. */\nexport interface PaginationLabels {\n previous?: string;\n next?: string;\n page?: (page: number) => string;\n currentPage?: (page: number) => string;\n compact?: (page: number, totalPages?: number) => string;\n count?: (start: number, end: number, totalItems: number) => string;\n}\n\nconst DEFAULT_LABELS: Required<PaginationLabels> = {\n previous: \"Previous page\",\n next: \"Next page\",\n page: (page) => `Go to page ${page}`,\n currentPage: (page) => `Page ${page}, current page`,\n compact: (page, totalPages) =>\n totalPages === undefined ? `Page ${page}` : `Page ${page} of ${totalPages}`,\n count: (start, end, totalItems) => `${start}-${end} of ${totalItems}`,\n};\n\n/** Props for the pagination component. */\nexport interface PaginationProps extends Omit<\n ComponentPropsWithoutRef<\"nav\">,\n \"onChange\"\n> {\n totalItems?: number;\n totalPages?: number;\n hasMore?: boolean;\n pageSize?: number;\n currentPage: number;\n onPageChange: (page: number) => void;\n showPageNumbers?: boolean;\n siblingCount?: number;\n variant?: PaginationVariant;\n isDisabled?: boolean;\n label?: string;\n labels?: PaginationLabels;\n}\n\nfunction buildPageRange(\n current: number,\n total: number,\n siblings: number,\n): (number | \"ellipsis\")[] {\n if (total <= 1) return [1];\n const range: (number | \"ellipsis\")[] = [];\n const left = Math.max(2, current - siblings);\n const right = Math.min(total - 1, current + siblings);\n\n range.push(1);\n if (left > 2) range.push(\"ellipsis\");\n for (let i = left; i <= right; i++) range.push(i);\n if (right < total - 1) range.push(\"ellipsis\");\n if (total > 1) range.push(total);\n return range;\n}\n\nfunction positiveInteger(value: number | undefined): number | undefined {\n if (!Number.isFinite(value) || value === undefined || value <= 0) {\n return undefined;\n }\n return Math.max(1, Math.floor(value));\n}\n\nfunction resolveTotalPages({\n totalItems,\n totalPages,\n pageSize,\n currentPage,\n hasMore,\n}: Pick<\n PaginationProps,\n \"totalItems\" | \"totalPages\" | \"pageSize\" | \"currentPage\" | \"hasMore\"\n>): number {\n const explicitTotalPages = positiveInteger(totalPages);\n if (explicitTotalPages !== undefined) return explicitTotalPages;\n\n const safePageSize = positiveInteger(pageSize);\n if (\n safePageSize !== undefined &&\n Number.isFinite(totalItems) &&\n totalItems !== undefined\n ) {\n return Math.max(1, Math.ceil(Math.max(0, totalItems) / safePageSize));\n }\n\n if (hasMore) return Math.max(1, Math.floor(currentPage) + 1);\n return Math.max(1, Math.floor(currentPage));\n}\n\nfunction clampPage(page: number, totalPages: number): number {\n if (!Number.isFinite(page)) return 1;\n return Math.min(Math.max(1, Math.floor(page)), totalPages);\n}\n\nconst btnBase = `inline-flex h-8 min-w-8 items-center justify-center rounded-md px-2 text-sm transition-colors ${OPT_FOCUS_VISIBLE}`;\nconst btnEnabled =\n \"text-text-primary hover:bg-bg-subtle active:bg-bg-muted cursor-pointer\";\nconst btnDisabled = \"text-text-tertiary cursor-not-allowed opacity-50\";\nconst btnActive =\n \"bg-accent text-accent-fg hover:bg-accent-hover cursor-default\";\n\n/** Renders the pagination component. */\nexport function Pagination({\n totalItems,\n totalPages: totalPagesProp,\n hasMore,\n pageSize,\n currentPage,\n onPageChange,\n showPageNumbers = true,\n siblingCount = 1,\n variant,\n isDisabled = false,\n label = \"Pagination\",\n labels,\n className,\n ...props\n}: PaginationProps) {\n const resolvedLabels = { ...DEFAULT_LABELS, ...labels };\n const totalPages = resolveTotalPages({\n totalItems,\n totalPages: totalPagesProp,\n pageSize,\n currentPage,\n hasMore,\n });\n const safeCurrentPage = clampPage(currentPage, totalPages);\n const resolvedVariant: PaginationVariant =\n variant ?? (showPageNumbers ? \"pages\" : \"none\");\n const hasKnownItemCount =\n Number.isFinite(totalItems) &&\n totalItems !== undefined &&\n positiveInteger(pageSize) !== undefined;\n const itemRange = hasKnownItemCount\n ? {\n start: totalItems === 0 ? 0 : (safeCurrentPage - 1) * pageSize! + 1,\n end: Math.min(safeCurrentPage * pageSize!, totalItems),\n }\n : null;\n const pages = useMemo(\n () => buildPageRange(safeCurrentPage, totalPages, siblingCount),\n [safeCurrentPage, totalPages, siblingCount],\n );\n const hasPrev = safeCurrentPage > 1;\n const hasNext = hasMore === true || safeCurrentPage < totalPages;\n const prevDisabled = isDisabled || !hasPrev;\n const nextDisabled = isDisabled || !hasNext;\n\n const handlePageChange = (page: number) => {\n if (isDisabled) return;\n const next = hasMore\n ? Math.max(1, Math.floor(page))\n : clampPage(page, totalPages);\n if (next !== safeCurrentPage) onPageChange(next);\n };\n\n return (\n <nav\n aria-label={label}\n className={cn(\"gap-element flex items-center\", className)}\n {...props}\n data-opt-id=\"QBEE2\"\n data-opt-slug=\"pagination.Pagination\"\n >\n <button\n type=\"button\"\n className={cn(btnBase, prevDisabled ? btnDisabled : btnEnabled)}\n disabled={prevDisabled}\n onClick={() => handlePageChange(safeCurrentPage - 1)}\n aria-label={resolvedLabels.previous}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10 12 6 8l4-4\" />\n </svg>\n </button>\n\n {resolvedVariant === \"pages\" &&\n pages.map((p, i) =>\n p === \"ellipsis\" ? (\n <span\n key={`e${i}`}\n className=\"text-text-tertiary px-1\"\n aria-hidden=\"true\"\n >\n …\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className={cn(\n btnBase,\n p === safeCurrentPage ? btnActive : btnEnabled,\n )}\n aria-current={p === safeCurrentPage ? \"page\" : undefined}\n aria-label={\n p === safeCurrentPage\n ? resolvedLabels.currentPage(p)\n : resolvedLabels.page(p)\n }\n disabled={isDisabled}\n onClick={() => handlePageChange(p)}\n >\n {p}\n </button>\n ),\n )}\n\n {resolvedVariant === \"count\" && itemRange && totalItems !== undefined && (\n <span className=\"text-text-secondary px-2 text-sm\" aria-live=\"polite\">\n {resolvedLabels.count(itemRange.start, itemRange.end, totalItems)}\n </span>\n )}\n\n {resolvedVariant === \"compact\" && (\n <span className=\"text-text-secondary px-2 text-sm\" aria-live=\"polite\">\n {resolvedLabels.compact(\n safeCurrentPage,\n hasMore && totalPages === safeCurrentPage + 1\n ? undefined\n : totalPages,\n )}\n </span>\n )}\n\n <button\n type=\"button\"\n className={cn(btnBase, nextDisabled ? btnDisabled : btnEnabled)}\n disabled={nextDisabled}\n onClick={() => handlePageChange(safeCurrentPage + 1)}\n aria-label={resolvedLabels.next}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M6 4l4 4-4 4\" />\n </svg>\n </button>\n </nav>\n );\n}\n"],"mappings":"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"}
|