@godxjp/ui 2.1.0 → 5.0.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.
Files changed (46) hide show
  1. package/BRAND.md +39 -29
  2. package/CHANGELOG.md +554 -10
  3. package/README.md +143 -168
  4. package/config/eslint.js +54 -0
  5. package/config/prettier.cjs +20 -0
  6. package/config/tsconfig.base.json +22 -0
  7. package/config/vitest.base.ts +26 -0
  8. package/dist/MiniMonth-YAmPGEpC.d.ts +143 -0
  9. package/dist/Table.types-BbsxoIYE.d.ts +352 -0
  10. package/dist/color-DO0qqUAb.d.ts +38 -0
  11. package/dist/components/composites.d.ts +963 -0
  12. package/dist/components/composites.js +7340 -0
  13. package/dist/components/composites.js.map +1 -0
  14. package/dist/components/primitives.d.ts +2633 -163
  15. package/dist/components/primitives.js +7264 -165
  16. package/dist/components/primitives.js.map +1 -1
  17. package/dist/components/shell.d.ts +82 -12
  18. package/dist/components/shell.js +168 -162
  19. package/dist/components/shell.js.map +1 -1
  20. package/dist/hooks.d.ts +83 -8
  21. package/dist/hooks.js +497 -83
  22. package/dist/hooks.js.map +1 -1
  23. package/dist/i18n.d.ts +55 -3
  24. package/dist/i18n.js +456 -5
  25. package/dist/i18n.js.map +1 -1
  26. package/dist/index.d.ts +24 -5
  27. package/dist/index.js +12522 -267
  28. package/dist/index.js.map +1 -1
  29. package/dist/padding-DY0JV5Ja.d.ts +16 -0
  30. package/dist/preferences.d.ts +132 -0
  31. package/dist/preferences.js +262 -0
  32. package/dist/preferences.js.map +1 -0
  33. package/dist/props.d.ts +86 -0
  34. package/dist/props.js +16 -0
  35. package/dist/props.js.map +1 -0
  36. package/dist/size-CQwNvOWd.d.ts +19 -0
  37. package/dist/{data.d.ts → types-LTj-2bl-.d.ts} +7 -12
  38. package/dist/useTableViews-D5NIAJ7h.d.ts +154 -0
  39. package/package.json +92 -34
  40. package/src/tokens/tailwind.css +158 -0
  41. package/dist/components/screens.d.ts +0 -51
  42. package/dist/components/screens.js +0 -806
  43. package/dist/components/screens.js.map +0 -1
  44. package/dist/data.js +0 -93
  45. package/dist/data.js.map +0 -1
  46. package/src/tokens/tokens.css +0 -765
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/cn.ts","../../src/components/general/Button.tsx","../../src/components/layout/Flex.tsx","../../src/components/layout/Space.tsx","../../src/components/composites/upload/shared/types.ts","../../src/components/composites/upload/shared/validate.ts","../../src/components/composites/upload/shared/useUpload.ts","../../src/components/composites/upload/Upload.tsx","../../src/components/composites/upload/ImageUpload.tsx","../../src/components/composites/upload/AvatarUploader.tsx","../../src/components/composites/upload/media-client.ts","../../src/components/composites/upload/MediaUpload.tsx","../../src/components/composites/locale-input/LocaleInput.tsx","../../src/components/data-display/calendar/IconRow.tsx","../../src/components/data-display/calendar/AvatarStack.tsx","../../src/components/data-display/calendar/ColorSwatchCheckbox.tsx","../../src/components/data-display/calendar/CalendarOption.tsx","../../src/components/data-display/calendar/AttendeeChip.tsx","../../src/components/data-display/calendar/AttendeeListItem.tsx","../../src/components/data-display/calendar/AllDayChip.tsx","../../src/components/data-display/calendar/DayHeaderPill.tsx","../../src/components/data-display/calendar/time.ts","../../src/components/data-display/calendar/TimeGrid.tsx","../../src/components/data-display/calendar/EventBlock.tsx","../../src/components/data-display/calendar/MonthCell.tsx","../../src/components/data-display/calendar/EventPill.tsx","../../src/components/data-display/calendar/MiniMonth.tsx","../../src/components/data-display/calendar/AvailabilityRow.tsx","../../src/components/data-display/calendar/SuggestedSlotCard.tsx","../../src/components/composites/calendar/CalendarSidebar.tsx","../../src/components/data-display/SegmentedControl.tsx","../../src/components/composites/calendar/CalendarTopbar.tsx","../../src/components/composites/calendar/WeekView.tsx","../../src/components/composites/calendar/MonthView.tsx","../../src/components/composites/calendar/DayHeaderHero.tsx","../../src/components/composites/calendar/DayView.tsx","../../src/components/composites/calendar/AgendaView.tsx","../../src/components/data-display/Badge.tsx","../../src/components/composites/calendar/EventDetailPanel.tsx","../../src/components/navigation/Tabs.tsx","../../src/components/composites/calendar/CreateEventDialog.tsx","../../src/components/composites/calendar/FindATimePanel.tsx","../../src/components/feedback/Dialog.tsx","../../src/components/data-entry/Radio.tsx","../../src/components/data-entry/Checkbox.tsx","../../src/components/composites/table-import-export/index.tsx","../../src/hooks/useBreakpoint.ts","../../src/components/data-display/Empty.tsx","../../src/components/data-display/Table.tsx","../../src/components/data-display/Tag.tsx","../../src/components/data-entry/Input.tsx","../../src/components/data-entry/InputSearch.tsx","../../src/components/data-display/Popover.tsx","../../src/components/data-entry/Select.tsx","../../src/components/composites/data-table/DataTableChrome.tsx","../../src/components/feedback/Sheet.tsx","../../src/components/composites/data-table/ColumnManagerSheet.tsx","../../src/components/navigation/Pagination.tsx","../../src/components/composites/data-table/DataTablePaginationBand.tsx","../../src/components/feedback/Alert.tsx","../../src/components/composites/data-table/SaveViewDialog.tsx","../../src/components/composites/data-table/DataTable.tsx","../../src/components/composites/data-table/persistence.ts","../../src/components/composites/data-table/useDataTable.ts"],"names":["Button","jsx","ALIGN_CLASS","jsxs","FileIcon","ImageIcon","useRef","useState","useCallback","UploadIcon","useEffect","Fragment","Cropper","X","RotateCw","useMemo","useId","forwardRef","LocaleInput","LocaleRowInput","Check","ChevronLeft","ChevronRight","Search","DOW_DEFAULTS","defaultResolveVariant","ALL_DAY_DEFAULTS","VARIANT_CLASS","Trash2","Plus","Bell","Tabs","RefreshCw","Globe","Users","FileText","RadioGroup","Radio","Checkbox","footer","SIZE_CLASS","Input","Textarea","InputSearch","Root","Trigger","Popover","Content","Label","Item","Separator","ChevronDown","ScrollUp","ScrollDown","getColumnKey","Sheet","DialogPrimitive2","useTranslation","Pagination","isValidElement","Alert","value","resolveUpdater","resolveStickySide","deriveColumnPinning","resolveRowKey","useReactTable","getCoreRowModel"],"mappings":"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","file":"composites.js","sourcesContent":["// cn — class-name merger. Standard shadcn utility: clsx merges values\n// and tailwind-merge resolves Tailwind class conflicts (e.g. last\n// `bg-*` wins). Every primitive in this package and every consumer\n// service imports cn from this single location to keep the dedupe\n// rules consistent.\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Button — canonical action primitive.\n *\n * 100% mapped to the dxs-kintai design canon\n * (`design-handoff/ui-system/dxs-kintai-design-system/project/preview/\n * comp-buttons.html`):\n *\n * Variants: primary · secondary · outline · ghost · destructive · link\n * Sizes: x-small · small · default · large\n *\n * Cardinal rules honoured:\n * §14 — shadcn / Radix recipe (Slot for asChild)\n * §21 — every axis (theme/accent/density/font-size)\n * §22 — every literal token-pinned (height = --density-element-*)\n * §23 — vocabulary (`size` + `variant` per docs/specs/04 §B)\n * §24 — mobile touch target handled without changing visual size\n *\n * Slot props (§N):\n * startContent — ReactNode rendered before children (left icon)\n * endContent — ReactNode rendered after children (right icon)\n *\n * When `asChild` is true, Radix Slot merges Button's classes onto\n * the caller's single child element. The slot props\n * (`startContent` / `endContent` / `loading` spinner) are then\n * INERT — the caller's element owns its content. Compose icons\n * inline inside the slotted element:\n *\n * <Button asChild>\n * <a href=\"/x\"><Icon /> Label</a> ← icon wired inline\n * </Button>\n *\n * <Button asChild startContent={<Icon />}>← `startContent` IGNORED\n * <a href=\"/x\">Label</a>\n * </Button>\n */\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"destructive\"\n | \"link\";\n\nexport type ButtonSize = \"x-small\" | \"small\" | \"default\" | \"large\";\n\nexport interface ButtonProps extends Omit<ComponentProps<\"button\">, \"size\"> {\n /** Visual treatment per design canon `.btn-<variant>`. */\n variant?: ButtonVariant;\n /** Dimensional scale per `--density-element-<size>` chain. */\n size?: ButtonSize;\n /** Stretch to fill parent's width (mobile form submit pattern). */\n block?: boolean;\n /** Show a spinner + disable interaction. */\n loading?: boolean;\n /** Icon slot rendered before the label. */\n startContent?: ReactNode;\n /** Icon slot rendered after the label. */\n endContent?: ReactNode;\n /** Radix Slot pattern — wrap a link / RouterLink without nesting. */\n asChild?: boolean;\n children?: ReactNode;\n}\n\nconst VARIANT_CLASS: Record<ButtonVariant, string> = {\n primary: \"btn-primary\",\n secondary: \"btn-secondary\",\n outline: \"btn-outline\",\n ghost: \"btn-ghost\",\n destructive: \"btn-destructive\",\n link: \"btn-link\",\n};\n\nconst SIZE_CLASS: Record<ButtonSize, string> = {\n \"x-small\": \"btn-xs\",\n small: \"btn-sm\",\n default: \"\",\n large: \"btn-lg\",\n};\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"primary\",\n size = \"default\",\n block,\n loading,\n startContent,\n endContent,\n disabled,\n asChild = false,\n className,\n type = \"button\",\n children,\n ...rest\n },\n ref,\n) {\n const Component = asChild ? Slot : \"button\";\n const isDisabled = disabled || loading;\n\n // Radix Slot requires exactly ONE React element child (it merges\n // props into that child). When `asChild` is true the caller's\n // slotted element OWNS the content — slots like `startContent` /\n // `endContent` / `loading spinner` are inert and must be wired\n // inline inside the caller's element. When `asChild` is false we\n // wrap the slot content + children with the standard composition.\n const content = asChild ? (\n children\n ) : (\n <>\n {loading ? <span className=\"btn-spinner\" aria-hidden /> : startContent}\n {children}\n {endContent}\n </>\n );\n\n return (\n <Component\n ref={ref as never}\n type={asChild ? undefined : type}\n data-loading={loading || undefined}\n disabled={asChild ? undefined : isDisabled}\n aria-disabled={isDisabled || undefined}\n aria-busy={loading || undefined}\n className={cn(\n \"btn\",\n VARIANT_CLASS[variant],\n SIZE_CLASS[size],\n block && \"btn-block\",\n loading && \"btn-loading\",\n className,\n )}\n {...rest}\n >\n {content}\n </Component>\n );\n});\n","// <Flex> — flex container with prop-driven config (Ant Design model).\n//\n// <Flex gap=\"default\" vertical justify=\"space-between\" align=\"center\" wrap>\n//\n// Replaces `<div className=\"flex items-center gap-2 …\">` patterns.\n// Prop names mirror Ant Design exactly so the API is familiar to\n// anyone who knows AntD; values map onto CSS flex.\n\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\nimport type { SizeProp } from \"../../props\";\n\n/** Flex gap scale. Accepts the shared `SizeProp` vocabulary plus a raw\n * pixel number for one-off gaps. Renamed from Ant's `\"middle\"` →\n * `\"default\"` to match the framework-wide size axis. */\nexport type FlexGap = number | SizeProp;\nexport type FlexJustify =\n | \"start\"\n | \"end\"\n | \"center\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\";\nexport type FlexAlign = \"start\" | \"end\" | \"center\" | \"stretch\" | \"baseline\";\n\nconst GAP_TOKEN: Record<Exclude<FlexGap, number>, string> = {\n small: \"var(--spacing-2)\",\n default: \"var(--spacing-3)\",\n large: \"var(--spacing-4)\",\n};\n\nconst JUSTIFY_CLASS: Record<FlexJustify, string> = {\n start: \"justify-start\",\n end: \"justify-end\",\n center: \"justify-center\",\n \"space-between\": \"justify-between\",\n \"space-around\": \"justify-around\",\n \"space-evenly\": \"justify-evenly\",\n};\n\nconst ALIGN_CLASS: Record<FlexAlign, string> = {\n start: \"items-start\",\n end: \"items-end\",\n center: \"items-center\",\n stretch: \"items-stretch\",\n baseline: \"items-baseline\",\n};\n\nexport interface FlexProps extends ComponentProps<\"div\"> {\n /** Direction — false / undefined = horizontal, true = vertical. */\n vertical?: boolean;\n /** Wrap mode. */\n wrap?: boolean | \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n /** Gap between children. Token name or pixel number. */\n gap?: FlexGap;\n justify?: FlexJustify;\n align?: FlexAlign;\n /** flex value for the container itself (rare — usually parent sets it). */\n flex?: string | number;\n children?: ReactNode;\n}\n\nexport function Flex({\n vertical = false,\n wrap,\n gap,\n justify,\n align,\n flex,\n className,\n style,\n children,\n ...rest\n}: FlexProps) {\n const wrapClass =\n wrap === undefined || wrap === false || wrap === \"nowrap\"\n ? \"flex-nowrap\"\n : wrap === \"wrap-reverse\"\n ? \"flex-wrap-reverse\"\n : \"flex-wrap\";\n\n const gapPx =\n typeof gap === \"number\"\n ? `${gap}px`\n : gap !== undefined\n ? GAP_TOKEN[gap]\n : undefined;\n\n return (\n <div\n className={cn(\n \"flex\",\n vertical ? \"flex-col\" : \"flex-row\",\n wrapClass,\n justify && JUSTIFY_CLASS[justify],\n align && ALIGN_CLASS[align],\n className,\n )}\n style={{\n gap: gapPx,\n flex: typeof flex === \"number\" ? `${flex} ${flex} auto` : flex,\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n );\n}\n","// <Space> — inline spacing between children (Ant Design model).\n//\n// <Space size=\"default\">\n// <Button>One</Button>\n// <Button>Two</Button>\n// </Space>\n//\n// Distinct from Flex in intent: Space implies a tight inline group\n// (action bar, breadcrumb, tag row). Flex implies a layout container.\n// Both use the same underlying flex CSS — Space adds a `<Compact>`\n// variant later for borderless adjacency.\n\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\nimport type { SizeProp } from \"../../props\";\n\n/** Inline-spacing scale. Accepts the shared `SizeProp` vocabulary plus\n * a raw pixel number for one-off gaps. Renamed from Ant's `\"middle\"`\n * → `\"default\"` to match the framework-wide size axis. */\nexport type SpaceSize = number | SizeProp;\n\nconst SIZE_TOKEN: Record<Exclude<SpaceSize, number>, string> = {\n small: \"var(--spacing-1)\",\n default: \"var(--spacing-2)\",\n large: \"var(--spacing-3)\",\n};\n\nexport interface SpaceProps extends ComponentProps<\"div\"> {\n /** Gap between adjacent children. */\n size?: SpaceSize | [SpaceSize, SpaceSize];\n /** Vertical stack instead of horizontal row. */\n direction?: \"horizontal\" | \"vertical\";\n /** Allow wrapping when row overflows. */\n wrap?: boolean;\n /** Cross-axis alignment. */\n align?: \"start\" | \"end\" | \"center\" | \"baseline\";\n /** Separator rendered between siblings (e.g. a divider). */\n split?: ReactNode;\n children?: ReactNode;\n}\n\nfunction resolveSize(s: SpaceSize): string {\n return typeof s === \"number\" ? `${s}px` : SIZE_TOKEN[s];\n}\n\nconst ALIGN_CLASS: Record<NonNullable<SpaceProps[\"align\"]>, string> = {\n start: \"items-start\",\n end: \"items-end\",\n center: \"items-center\",\n baseline: \"items-baseline\",\n};\n\nexport function Space({\n size = \"small\",\n direction = \"horizontal\",\n wrap = false,\n align,\n split,\n className,\n style,\n children,\n ...rest\n}: SpaceProps) {\n const [colGap, rowGap] = Array.isArray(size) ? size : [size, size];\n\n // Render children with optional separators.\n const items: ReactNode[] = [];\n let i = 0;\n // We don't introspect children to filter out null; mirror Ant's behavior\n // of letting falsy children naturally render nothing.\n const arr = Array.isArray(children) ? children : [children];\n for (const child of arr) {\n if (i > 0 && split) {\n items.push(\n <span key={`sep-${i}`} aria-hidden=\"true\" className=\"text-muted-foreground\">\n {split}\n </span>,\n );\n }\n items.push(<span key={`item-${i}`}>{child}</span>);\n i++;\n }\n\n return (\n <div\n className={cn(\n \"inline-flex\",\n direction === \"vertical\" ? \"flex-col\" : \"flex-row\",\n wrap ? \"flex-wrap\" : \"flex-nowrap\",\n align && ALIGN_CLASS[align],\n className,\n )}\n style={{\n columnGap: resolveSize(colGap),\n rowGap: resolveSize(rowGap),\n ...style,\n }}\n {...rest}\n >\n {items}\n </div>\n );\n}\n","// Upload primitive types — shared across <Upload>, <ImageUpload>,\n// and <AvatarUploader>. Surface follows Ant Design's <Upload>\n// (uid + name + status + percent + originFile) so a consumer\n// switching from antd has a one-to-one mental model.\n\nimport type { ReactNode } from \"react\";\n\nexport type UploadStatus =\n | \"pending\"\n | \"uploading\"\n | \"success\"\n | \"error\"\n | \"removed\";\n\nexport type UploadListType = \"text\" | \"picture\" | \"picture-card\";\n\nexport interface UploadFile {\n /** Stable client-side identifier (used as React key). */\n uid: string;\n /** File name shown in the list. */\n name: string;\n /** Size in bytes. */\n size: number;\n /** MIME type. */\n type: string;\n /** Lifecycle phase. */\n status: UploadStatus;\n /** 0..100. */\n percent: number;\n /** Human-readable error from the upload transport. */\n error?: string;\n /** Final URL (or pre-existing URL for controlled mode). */\n url?: string;\n /** Local object URL used for thumbnails before upload completes. */\n thumbUrl?: string;\n /** The original `File` — only present until the upload resolves. */\n originFile?: File;\n}\n\nexport interface UploadRequestParams {\n file: File;\n /** Push 0..100 progress to the list item. */\n onProgress: (percent: number) => void;\n /** Aborts when the user removes the item mid-upload. */\n signal: AbortSignal;\n}\n\n/**\n * Service supplies the transport. Resolve with `{ url }` to stamp\n * the final URL on the list item; resolve with `void` to keep the\n * client-side thumbUrl. Throw to surface an error.\n */\nexport type UploadCustomRequest = (\n params: UploadRequestParams,\n) => Promise<{ url?: string } | void>;\n\nexport interface UploadLabels {\n /** Default trigger CTA. */\n dropHint: string;\n /** Second-line hint under the dashed trigger. */\n dropSubHint: string;\n /** Picture-card \"+ Upload\". */\n pictureCardHint: string;\n /** Per-item remove button aria-label. */\n remove: string;\n /** Per-item retry button aria-label. */\n retry: string;\n /** Per-item preview button aria-label. */\n preview: string;\n /** Error: file type rejected. */\n rejectedType: string;\n /** Error: file too large (supports `{{mb}}` interpolation). */\n rejectedTooLarge: string;\n /** Error: too many files (supports `{{count}}` interpolation). */\n rejectedTooMany: string;\n}\n\nexport const DEFAULT_UPLOAD_LABELS: UploadLabels = {\n dropHint: \"Click or drag file to upload\",\n dropSubHint: \"Single or multiple files supported\",\n pictureCardHint: \"Upload\",\n remove: \"Remove\",\n retry: \"Retry\",\n preview: \"Preview\",\n rejectedType: \"File type not allowed\",\n rejectedTooLarge: \"File must be smaller than {{mb}} MB\",\n rejectedTooMany: \"At most {{count}} file(s) allowed\",\n};\n\nexport interface UploadProps {\n /** Allow selecting multiple files at once. */\n multiple?: boolean;\n /** MIME pattern passed to `<input accept=>`, e.g. `image/*`, `.pdf,.docx`. */\n accept?: string;\n /** Max bytes per file. Files larger are rejected before upload. */\n maxSize?: number;\n /** Max items in the list (ignored when `multiple=false`). */\n maxCount?: number;\n /** Hide the trigger + disable all actions. */\n disabled?: boolean;\n /** Visual variant of the file list. */\n listType?: UploadListType;\n /** Controlled mode — when supplied the composite never owns state. */\n fileList?: UploadFile[];\n /** Uncontrolled initial state. */\n defaultFileList?: UploadFile[];\n /** Synchronous or async gate run before queueing. Return false → skip. */\n beforeUpload?: (file: File) => boolean | Promise<boolean>;\n /** Service-supplied transport. */\n customRequest: UploadCustomRequest;\n /** Fires whenever the list mutates (controlled + uncontrolled). */\n onChange?: (files: UploadFile[]) => void;\n /** Fires before remove. Return false / reject to keep the item. */\n onRemove?: (file: UploadFile) => boolean | Promise<boolean>;\n /** Fires when the user taps the preview button. */\n onPreview?: (file: UploadFile) => void;\n /** Override label strings. */\n labels?: Partial<UploadLabels>;\n /** Map a thrown error to user copy. */\n errorMapper?: (err: unknown) => string;\n /** Replace the default dashed trigger area. */\n trigger?: ReactNode;\n /** Alias for `trigger` (composability with shadcn-style). */\n children?: ReactNode;\n /** Extra className on the outer wrapper. */\n className?: string;\n}\n","// Upload validation helpers — MIME + size + count gates run before\n// queueing a file into the list. Pure functions; no React, no state.\n\nimport type { UploadLabels } from \"./types\";\n\nexport interface ValidationContext {\n accept?: string;\n maxSize?: number;\n labels: UploadLabels;\n}\n\n/**\n * Match a file against the `accept` pattern. Supports the same forms\n * as `<input accept>`:\n *\n * - extension list: `.pdf,.docx`\n * - MIME exact: `image/png,application/pdf`\n * - MIME wildcard: `image/*`\n * - mixed: `image/*,.pdf`\n * - empty / undefined: accept everything\n */\nexport function matchesAccept(file: File, accept?: string): boolean {\n if (!accept || accept.trim() === \"\") return true;\n const tokens = accept\n .split(\",\")\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean);\n if (tokens.length === 0) return true;\n\n const fileType = file.type.toLowerCase();\n const fileName = file.name.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith(\".\")) {\n return fileName.endsWith(token);\n }\n if (token.endsWith(\"/*\")) {\n const prefix = token.slice(0, -1); // keep trailing slash\n return fileType.startsWith(prefix);\n }\n return fileType === token;\n });\n}\n\nexport interface ValidationResult {\n ok: boolean;\n error?: string;\n}\n\nexport function validateFile(\n file: File,\n ctx: ValidationContext,\n): ValidationResult {\n if (!matchesAccept(file, ctx.accept)) {\n return { ok: false, error: ctx.labels.rejectedType };\n }\n if (ctx.maxSize !== undefined && file.size > ctx.maxSize) {\n const mb = Math.max(1, Math.round(ctx.maxSize / 1024 / 1024));\n return {\n ok: false,\n error: ctx.labels.rejectedTooLarge.replace(\"{{mb}}\", String(mb)),\n };\n }\n return { ok: true };\n}\n\nexport function validateCount(\n currentCount: number,\n incoming: number,\n maxCount: number | undefined,\n labels: UploadLabels,\n): ValidationResult {\n if (maxCount === undefined) return { ok: true };\n if (currentCount + incoming > maxCount) {\n return {\n ok: false,\n error: labels.rejectedTooMany.replace(\"{{count}}\", String(maxCount)),\n };\n }\n return { ok: true };\n}\n","// useUpload — owns the controlled-or-uncontrolled fileList state +\n// per-item AbortController + the orchestration for enqueue / remove\n// / retry. Components render; this hook drives.\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n UploadCustomRequest,\n UploadFile,\n UploadLabels,\n UploadProps,\n} from \"./types\";\nimport { DEFAULT_UPLOAD_LABELS } from \"./types\";\nimport { validateCount, validateFile } from \"./validate\";\n\nlet uidCounter = 0;\nfunction nextUid(): string {\n uidCounter += 1;\n return `upload-${Date.now().toString(36)}-${uidCounter.toString(36)}`;\n}\n\ninterface UseUploadArgs\n extends Pick<\n UploadProps,\n | \"multiple\"\n | \"accept\"\n | \"maxSize\"\n | \"maxCount\"\n | \"fileList\"\n | \"defaultFileList\"\n | \"beforeUpload\"\n | \"customRequest\"\n | \"onChange\"\n | \"onRemove\"\n | \"errorMapper\"\n > {\n labels: UploadLabels;\n /**\n * Hook fired after a file successfully resolves through customRequest.\n * Avatar/Image variants can inspect the resulting UploadFile here.\n */\n onItemSuccess?: (file: UploadFile) => void;\n}\n\nexport interface UseUploadReturn {\n files: UploadFile[];\n /** True when at least one item is uploading. */\n isUploading: boolean;\n /** Aggregate validation error from the last enqueue (cleared on next try). */\n rejectionError: string | null;\n /** Push a FileList / File[] through validation + queue. */\n enqueue: (incoming: FileList | File[]) => Promise<void>;\n /** Remove an item (cancels in-flight upload). */\n remove: (uid: string) => Promise<void>;\n /** Retry an errored item with the same originFile. */\n retry: (uid: string) => Promise<void>;\n /** Clear the rejection banner. */\n clearRejection: () => void;\n}\n\nexport function useUpload(args: UseUploadArgs): UseUploadReturn {\n const {\n multiple = false,\n accept,\n maxSize,\n maxCount,\n fileList,\n defaultFileList,\n beforeUpload,\n customRequest,\n onChange,\n onRemove,\n errorMapper,\n labels,\n onItemSuccess,\n } = args;\n\n const controlled = fileList !== undefined;\n const [internal, setInternal] = useState<UploadFile[]>(\n () => defaultFileList ?? [],\n );\n const files = controlled ? (fileList as UploadFile[]) : internal;\n const filesRef = useRef(files);\n filesRef.current = files;\n\n const [rejectionError, setRejectionError] = useState<string | null>(null);\n const aborters = useRef<Map<string, AbortController>>(new Map());\n\n // Cleanup any object URLs we created when the hook unmounts.\n useEffect(() => {\n const map = aborters.current;\n return () => {\n map.forEach((c) => c.abort());\n map.clear();\n };\n }, []);\n\n const commit = useCallback(\n (next: UploadFile[]) => {\n if (!controlled) setInternal(next);\n onChange?.(next);\n filesRef.current = next;\n },\n [controlled, onChange],\n );\n\n const patchItem = useCallback(\n (uid: string, patch: Partial<UploadFile>) => {\n const next = filesRef.current.map((f) =>\n f.uid === uid ? { ...f, ...patch } : f,\n );\n commit(next);\n },\n [commit],\n );\n\n const runRequest = useCallback(\n async (item: UploadFile, originFile: File) => {\n const controller = new AbortController();\n aborters.current.set(item.uid, controller);\n patchItem(item.uid, { status: \"uploading\", percent: 0, error: undefined });\n try {\n const result = await (customRequest as UploadCustomRequest)({\n file: originFile,\n onProgress: (p: number) =>\n patchItem(item.uid, { percent: Math.max(0, Math.min(100, p)) }),\n signal: controller.signal,\n });\n if (controller.signal.aborted) return;\n patchItem(item.uid, {\n status: \"success\",\n percent: 100,\n url: result?.url ?? item.url,\n });\n const after = filesRef.current.find((f) => f.uid === item.uid);\n if (after) onItemSuccess?.(after);\n } catch (err) {\n if (controller.signal.aborted) return;\n const msg = errorMapper\n ? errorMapper(err)\n : err instanceof Error\n ? err.message\n : \"Upload failed\";\n patchItem(item.uid, { status: \"error\", error: msg });\n } finally {\n aborters.current.delete(item.uid);\n }\n },\n [customRequest, errorMapper, onItemSuccess, patchItem],\n );\n\n const enqueue = useCallback(\n async (incoming: FileList | File[]) => {\n setRejectionError(null);\n const arr = Array.from(incoming);\n if (arr.length === 0) return;\n\n const restrict = multiple ? arr : arr.slice(0, 1);\n const validationCtx = { accept, maxSize, labels };\n\n const accepted: File[] = [];\n for (const f of restrict) {\n const v = validateFile(f, validationCtx);\n if (!v.ok) {\n setRejectionError(v.error ?? \"Invalid file\");\n continue;\n }\n if (beforeUpload) {\n const ok = await beforeUpload(f);\n if (!ok) continue;\n }\n accepted.push(f);\n }\n if (accepted.length === 0) return;\n\n const baseCount = multiple ? filesRef.current.length : 0;\n const countCheck = validateCount(\n baseCount,\n accepted.length,\n maxCount,\n labels,\n );\n if (!countCheck.ok) {\n setRejectionError(countCheck.error ?? \"Too many files\");\n return;\n }\n\n const newItems: UploadFile[] = accepted.map((file) => ({\n uid: nextUid(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: \"pending\",\n percent: 0,\n thumbUrl: file.type.startsWith(\"image/\")\n ? URL.createObjectURL(file)\n : undefined,\n originFile: file,\n }));\n\n const base = multiple ? filesRef.current : [];\n const next = [...base, ...newItems];\n commit(next);\n\n for (const item of newItems) {\n if (!item.originFile) continue;\n // Fire-and-forget; runRequest patches state per-item.\n void runRequest(item, item.originFile);\n }\n },\n [accept, beforeUpload, commit, labels, maxCount, maxSize, multiple, runRequest],\n );\n\n const remove = useCallback(\n async (uid: string) => {\n const item = filesRef.current.find((f) => f.uid === uid);\n if (!item) return;\n if (onRemove) {\n const allowed = await onRemove(item);\n if (allowed === false) return;\n }\n aborters.current.get(uid)?.abort();\n aborters.current.delete(uid);\n if (item.thumbUrl?.startsWith(\"blob:\")) {\n URL.revokeObjectURL(item.thumbUrl);\n }\n const next = filesRef.current.filter((f) => f.uid !== uid);\n commit(next);\n },\n [commit, onRemove],\n );\n\n const retry = useCallback(\n async (uid: string) => {\n const item = filesRef.current.find((f) => f.uid === uid);\n if (!item || !item.originFile) return;\n await runRequest(item, item.originFile);\n },\n [runRequest],\n );\n\n const clearRejection = useCallback(() => setRejectionError(null), []);\n\n const isUploading = useMemo(\n () => files.some((f) => f.status === \"uploading\"),\n [files],\n );\n\n return { files, isUploading, rejectionError, enqueue, remove, retry, clearRejection };\n}\n\nexport { DEFAULT_UPLOAD_LABELS };\n","// <Upload> — generic file uploader composite. Mirrors Ant Design's\n// <Upload> API (multiple, accept, maxCount, listType, fileList,\n// beforeUpload, customRequest, onChange, onRemove, onPreview).\n//\n// Service code supplies `customRequest` to perform the actual HTTP\n// transport. The composite owns the file picker, drag-and-drop,\n// validation, queue state, the progress bar, abort handling, the\n// remove + retry flow, and three list layouts.\n//\n// Sibling primitives:\n// - <ImageUpload> adds picture thumbnails + optional crop\n// - <AvatarUploader> pre-configured single + round crop\n\nimport { useCallback, useId, useRef, useState, type DragEvent } from \"react\";\nimport { File as FileIcon, Image as ImageIcon, RotateCw, Trash2, Upload as UploadIcon } from \"lucide-react\";\nimport { Button } from \"../../general/Button\";\nimport { Flex } from \"../../layout\";\nimport { cn } from \"../../cn\";\nimport type { UploadFile, UploadProps } from \"./shared/types\";\nimport { DEFAULT_UPLOAD_LABELS } from \"./shared/types\";\nimport { useUpload } from \"./shared/useUpload\";\n\nconst KB = 1024;\nconst MB = 1024 * 1024;\n\nfunction formatSize(bytes: number): string {\n if (bytes >= MB) return `${(bytes / MB).toFixed(1)} MB`;\n if (bytes >= KB) return `${Math.round(bytes / KB)} KB`;\n return `${bytes} B`;\n}\n\ninterface ListItemProps {\n file: UploadFile;\n listType: \"text\" | \"picture\" | \"picture-card\";\n disabled: boolean;\n labels: {\n remove: string;\n retry: string;\n preview: string;\n };\n thumbSize?: number;\n onRemove: (uid: string) => void;\n onRetry: (uid: string) => void;\n onPreview?: (file: UploadFile) => void;\n}\n\nfunction UploadListItem({\n file,\n listType,\n disabled,\n labels,\n thumbSize = 96,\n onRemove,\n onRetry,\n onPreview,\n}: ListItemProps) {\n const isImage = file.type.startsWith(\"image/\") || !!file.thumbUrl;\n\n if (listType === \"picture-card\") {\n return (\n <div\n className=\"upload-picture-card\"\n data-status={file.status}\n style={{ width: thumbSize, height: thumbSize }}\n >\n {file.thumbUrl || file.url ? (\n <img src={file.thumbUrl ?? file.url} alt={file.name} />\n ) : (\n <Flex align=\"center\" justify=\"center\" style={{ height: \"100%\" }}>\n <FileIcon size={20} />\n </Flex>\n )}\n {file.status === \"uploading\" && (\n <div className=\"upload-progress\">\n <div\n className=\"upload-progress-fill\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n )}\n <div className=\"upload-picture-card-actions\">\n {onPreview && file.status === \"success\" && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.preview}\n onClick={() => onPreview(file)}\n >\n <ImageIcon size={14} />\n </Button>\n )}\n {file.status === \"error\" && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.retry}\n onClick={() => onRetry(file.uid)}\n disabled={disabled}\n >\n <RotateCw size={14} />\n </Button>\n )}\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.remove}\n onClick={() => onRemove(file.uid)}\n disabled={disabled}\n >\n <Trash2 size={14} />\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div\n className=\"upload-list-item\"\n data-status={file.status}\n style={{ position: \"relative\" }}\n >\n {listType === \"picture\" && isImage && (file.thumbUrl || file.url) ? (\n <img\n src={file.thumbUrl ?? file.url}\n alt={file.name}\n style={{\n width: 40,\n height: 40,\n borderRadius: \"var(--radius-md)\",\n objectFit: \"cover\",\n flex: \"0 0 auto\",\n }}\n />\n ) : (\n <FileIcon size={18} style={{ flex: \"0 0 auto\" }} />\n )}\n <Flex vertical gap={2} style={{ flex: 1, minWidth: 0 }}>\n <span\n style={{\n fontSize: \"var(--text-sm)\",\n color: \"var(--foreground)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={file.name}\n >\n {file.name}\n </span>\n <span\n style={{\n fontSize: \"var(--text-xs)\",\n color:\n file.status === \"error\"\n ? \"var(--destructive)\"\n : \"var(--muted-foreground)\",\n fontVariantNumeric: \"tabular-nums\",\n }}\n >\n {file.status === \"error\"\n ? (file.error ?? \"Upload failed\")\n : file.status === \"uploading\"\n ? `${file.percent}%`\n : formatSize(file.size)}\n </span>\n </Flex>\n {file.status === \"success\" && onPreview && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.preview}\n onClick={() => onPreview(file)}\n disabled={disabled}\n >\n <ImageIcon size={14} />\n </Button>\n )}\n {file.status === \"error\" && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.retry}\n onClick={() => onRetry(file.uid)}\n disabled={disabled}\n >\n <RotateCw size={14} />\n </Button>\n )}\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label={labels.remove}\n onClick={() => onRemove(file.uid)}\n disabled={disabled}\n >\n <Trash2 size={14} />\n </Button>\n {file.status === \"uploading\" && (\n <div className=\"upload-progress\">\n <div\n className=\"upload-progress-fill\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n )}\n </div>\n );\n}\n\nexport function Upload({\n multiple = false,\n accept,\n maxSize,\n maxCount,\n disabled = false,\n listType = \"text\",\n fileList,\n defaultFileList,\n beforeUpload,\n customRequest,\n onChange,\n onRemove,\n onPreview,\n labels: labelOverrides,\n errorMapper,\n trigger,\n children,\n className,\n}: UploadProps) {\n const labels = { ...DEFAULT_UPLOAD_LABELS, ...(labelOverrides ?? {}) };\n const inputId = useId();\n const inputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n\n const {\n files,\n rejectionError,\n enqueue,\n remove,\n retry,\n } = useUpload({\n multiple,\n accept,\n maxSize,\n maxCount,\n fileList,\n defaultFileList,\n beforeUpload,\n customRequest,\n onChange,\n onRemove,\n errorMapper,\n labels,\n });\n\n const openPicker = useCallback(() => {\n if (disabled) return;\n inputRef.current?.click();\n }, [disabled]);\n\n const handleSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const list = e.target.files;\n if (!list || list.length === 0) return;\n void enqueue(list);\n e.target.value = \"\";\n },\n [enqueue],\n );\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n if (disabled) return;\n const dropped = e.dataTransfer?.files;\n if (dropped && dropped.length > 0) void enqueue(dropped);\n },\n [disabled, enqueue],\n );\n\n const handleDragOver = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n setDragOver(true);\n },\n [disabled],\n );\n\n const handleDragLeave = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setDragOver(false);\n },\n [],\n );\n\n const triggerNode = trigger ?? children;\n const showPictureCardTrigger =\n listType === \"picture-card\" &&\n (multiple || files.length === 0) &&\n (maxCount === undefined || files.length < maxCount);\n\n const listClass = cn(\n listType === \"picture-card\" ? \"upload-list-picture-card\" : \"upload-list\",\n );\n\n return (\n <div className={cn(\"upload-root\", className)}>\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleSelect}\n style={{ display: \"none\" }}\n aria-hidden=\"true\"\n />\n\n {listType !== \"picture-card\" && (\n triggerNode ? (\n <span\n onClick={openPicker}\n style={{ display: \"inline-flex\", cursor: disabled ? \"not-allowed\" : \"pointer\" }}\n >\n {triggerNode}\n </span>\n ) : (\n <div\n className=\"upload-trigger\"\n data-dragover={dragOver}\n data-disabled={disabled}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={openPicker}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPicker();\n }\n }}\n aria-disabled={disabled}\n >\n <Flex vertical align=\"center\" gap=\"small\">\n <UploadIcon size={20} />\n <span style={{ fontSize: \"var(--text-sm)\", color: \"var(--foreground)\" }}>\n {labels.dropHint}\n </span>\n <span style={{ fontSize: \"var(--text-xs)\", color: \"var(--muted-foreground)\" }}>\n {labels.dropSubHint}\n </span>\n </Flex>\n </div>\n )\n )}\n\n {(files.length > 0 || listType === \"picture-card\") && (\n <div className={listClass}>\n {files.map((f) => (\n <UploadListItem\n key={f.uid}\n file={f}\n listType={listType}\n disabled={disabled}\n labels={{ remove: labels.remove, retry: labels.retry, preview: labels.preview }}\n onRemove={remove}\n onRetry={retry}\n onPreview={onPreview}\n />\n ))}\n {showPictureCardTrigger && (\n <div\n className=\"upload-picture-card upload-picture-card-trigger\"\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n data-dragover={dragOver}\n data-disabled={disabled}\n onClick={openPicker}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPicker();\n }\n }}\n aria-disabled={disabled}\n aria-label={labels.pictureCardHint}\n >\n <Flex vertical align=\"center\" justify=\"center\" gap={4} style={{ height: \"100%\" }}>\n <UploadIcon size={18} />\n <span style={{ fontSize: \"var(--text-xs)\", color: \"var(--muted-foreground)\" }}>\n {labels.pictureCardHint}\n </span>\n </Flex>\n </div>\n )}\n </div>\n )}\n\n {rejectionError && (\n <div\n role=\"alert\"\n style={{\n marginTop: \"var(--spacing-2)\",\n fontSize: \"var(--text-sm)\",\n color: \"var(--destructive)\",\n }}\n >\n {rejectionError}\n </div>\n )}\n </div>\n );\n}\n","// <ImageUpload> — image-only gallery. Wraps <Upload> with sensible\n// defaults: image MIME filter, `picture-card` listType, thumbnail\n// previews, and an optional crop step (round or rect) per Ant's\n// imgCrop pattern.\n//\n// For SINGLE image with required crop (e.g. avatar), prefer\n// <AvatarUploader> which is the pre-configured variant.\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport Cropper, { type Area } from \"react-easy-crop\";\nimport { Check, X } from \"lucide-react\";\nimport { Button } from \"../../general/Button\";\nimport { Flex, Space } from \"../../layout\";\nimport { Upload } from \"./Upload\";\nimport type {\n UploadCustomRequest,\n UploadFile,\n UploadProps,\n} from \"./shared/types\";\n\nexport interface ImageUploadProps\n extends Omit<UploadProps, \"listType\" | \"accept\" | \"customRequest\"> {\n /** MIME allowlist for images (default JPEG/PNG/WebP). */\n allowedTypes?: string[];\n /** Optional crop aspect — when set, every selected image runs through the cropper. */\n aspect?: number;\n /** Crop shape — `round` for avatars, `rect` for banners. Default `rect`. */\n cropShape?: \"round\" | \"rect\";\n /** Picture-card edge in px (default 96 — Ant's picture-card). */\n thumbSize?: number;\n /** Service transport — same shape as <Upload>'s customRequest. */\n customRequest: UploadCustomRequest;\n /** Localised cropper labels. */\n cropLabels?: {\n confirm: string;\n cancel: string;\n zoom: string;\n };\n}\n\nconst DEFAULT_ALLOWED = [\"image/jpeg\", \"image/png\", \"image/webp\"];\n\nconst DEFAULT_CROP_LABELS = {\n confirm: \"Apply\",\n cancel: \"Cancel\",\n zoom: \"Zoom\",\n};\n\nasync function cropImageToBlob(\n imageSrc: string,\n area: Area,\n mime: string,\n): Promise<Blob> {\n const image = new Image();\n image.crossOrigin = \"anonymous\";\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = reject;\n image.src = imageSrc;\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = area.width;\n canvas.height = area.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Canvas 2D context unavailable\");\n ctx.drawImage(\n image,\n area.x,\n area.y,\n area.width,\n area.height,\n 0,\n 0,\n area.width,\n area.height,\n );\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => (blob ? resolve(blob) : reject(new Error(\"Canvas export failed\"))),\n mime,\n 0.95,\n );\n });\n}\n\nexport function ImageUpload({\n allowedTypes = DEFAULT_ALLOWED,\n aspect,\n cropShape = \"rect\",\n thumbSize: _thumbSize = 96,\n customRequest,\n cropLabels: cropLabelOverrides,\n beforeUpload,\n ...rest\n}: ImageUploadProps) {\n const cropLabels = { ...DEFAULT_CROP_LABELS, ...(cropLabelOverrides ?? {}) };\n const accept = allowedTypes.join(\",\");\n\n // Crop modal state — only used when `aspect` is set.\n const [pendingFile, setPendingFile] = useState<File | null>(null);\n const [pendingSrc, setPendingSrc] = useState<string | null>(null);\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState(1);\n const [croppedArea, setCroppedArea] = useState<Area | null>(null);\n\n // Gate to make the original <Upload> accept the cropped File via beforeUpload.\n const cropResolver = useRef<((ok: boolean) => void) | null>(null);\n const replaceWith = useRef<File | null>(null);\n\n useEffect(() => {\n return () => {\n if (pendingSrc?.startsWith(\"blob:\")) URL.revokeObjectURL(pendingSrc);\n };\n }, [pendingSrc]);\n\n const handleBeforeUpload = useCallback(\n async (file: File): Promise<boolean> => {\n // Run consumer's beforeUpload first; if they reject, drop here.\n if (beforeUpload) {\n const ok = await beforeUpload(file);\n if (!ok) return false;\n }\n // No crop requested → straight through.\n if (aspect === undefined) return true;\n\n // Spin up the crop modal and wait for confirm / cancel.\n const src = URL.createObjectURL(file);\n setPendingFile(file);\n setPendingSrc(src);\n setCrop({ x: 0, y: 0 });\n setZoom(1);\n setCroppedArea(null);\n replaceWith.current = null;\n\n return new Promise<boolean>((resolve) => {\n cropResolver.current = resolve;\n });\n },\n [aspect, beforeUpload],\n );\n\n // Wrap customRequest so it receives the cropped File when crop produced one.\n const wrappedRequest: UploadCustomRequest = useCallback(\n async (params) => {\n const swap = replaceWith.current;\n replaceWith.current = null;\n const finalParams = swap ? { ...params, file: swap } : params;\n return customRequest(finalParams);\n },\n [customRequest],\n );\n\n const finishCropConfirm = useCallback(async () => {\n if (!pendingFile || !pendingSrc || !croppedArea) {\n cropResolver.current?.(false);\n cropResolver.current = null;\n return;\n }\n try {\n const blob = await cropImageToBlob(pendingSrc, croppedArea, pendingFile.type);\n const cropped = new File([blob], pendingFile.name, {\n type: pendingFile.type,\n });\n replaceWith.current = cropped;\n cropResolver.current?.(true);\n } catch {\n cropResolver.current?.(false);\n } finally {\n cropResolver.current = null;\n if (pendingSrc?.startsWith(\"blob:\")) URL.revokeObjectURL(pendingSrc);\n setPendingFile(null);\n setPendingSrc(null);\n }\n }, [croppedArea, pendingFile, pendingSrc]);\n\n const finishCropCancel = useCallback(() => {\n cropResolver.current?.(false);\n cropResolver.current = null;\n if (pendingSrc?.startsWith(\"blob:\")) URL.revokeObjectURL(pendingSrc);\n setPendingFile(null);\n setPendingSrc(null);\n }, [pendingSrc]);\n\n const onCropComplete = useCallback((_: Area, pixels: Area) => {\n setCroppedArea(pixels);\n }, []);\n\n return (\n <>\n <Upload\n {...rest}\n accept={accept}\n listType=\"picture-card\"\n beforeUpload={handleBeforeUpload}\n customRequest={wrappedRequest}\n />\n\n {pendingSrc && (\n <div\n className=\"upload-cropper-backdrop\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Crop image\"\n >\n <div className=\"upload-cropper\">\n <div className=\"upload-cropper-canvas\">\n <Cropper\n image={pendingSrc}\n crop={crop}\n zoom={zoom}\n aspect={aspect ?? 1}\n cropShape={cropShape}\n showGrid={false}\n onCropChange={setCrop}\n onZoomChange={setZoom}\n onCropComplete={onCropComplete}\n />\n </div>\n <Flex vertical gap=\"default\" style={{ padding: \"var(--spacing-3)\" }}>\n <Flex align=\"center\" gap=\"small\">\n <span\n style={{\n fontSize: \"var(--text-xs)\",\n color: \"var(--muted-foreground)\",\n minWidth: 48,\n }}\n >\n {cropLabels.zoom}\n </span>\n <input\n type=\"range\"\n min={1}\n max={3}\n step={0.1}\n value={zoom}\n onChange={(e) => setZoom(Number(e.target.value))}\n aria-label={cropLabels.zoom}\n style={{ flex: 1 }}\n />\n </Flex>\n <Space size=\"small\">\n <Button type=\"button\" onClick={finishCropConfirm}>\n <Check size={14} />\n {cropLabels.confirm}\n </Button>\n <Button type=\"button\" variant=\"secondary\" onClick={finishCropCancel}>\n <X size={14} />\n {cropLabels.cancel}\n </Button>\n </Space>\n </Flex>\n </div>\n </div>\n )}\n </>\n );\n}\n\nexport type { UploadFile };\n","// <AvatarUploader> — single image + required round crop, the\n// pre-configured avatar variant of the Upload family. Stages:\n// idle → cropping → uploading → success / error.\n//\n// Surface preserved (callsites depend on it):\n// onUpload({ blob, file, onProgress, signal }) — service transport\n// validate(file) — pre-check hook\n// allowedTypes / maxSize / aspect / cropShape — gating + crop\n// labels — i18n\n// errorMapper(err) — friendly copy\n// onSuccess() / onCancel() — lifecycle\n// trigger — slot\n//\n// Internally shares MIME + size validation and the crop helper with\n// the rest of the Upload family.\n\nimport { useCallback, useRef, useState, type ReactNode } from \"react\";\nimport Cropper, { type Area } from \"react-easy-crop\";\nimport { Camera, RotateCw, Upload as UploadIcon, X } from \"lucide-react\";\nimport { Button } from \"../../general/Button\";\nimport { Flex, Space } from \"../../layout\";\nimport { validateFile } from \"./shared/validate\";\nimport { DEFAULT_UPLOAD_LABELS } from \"./shared/types\";\n\nexport interface AvatarUploaderLabels {\n chooseImage: string;\n upload: string;\n cancel: string;\n cancelUpload: string;\n tryAgain: string;\n uploadSuccess: string;\n change: string;\n rejectedType: string;\n rejectedTooLarge: string;\n}\n\nconst DEFAULT_LABELS: AvatarUploaderLabels = {\n chooseImage: \"Choose image\",\n upload: \"Upload\",\n cancel: \"Cancel\",\n cancelUpload: \"Cancel upload\",\n tryAgain: \"Try again\",\n uploadSuccess: \"Avatar updated successfully.\",\n change: \"Change\",\n rejectedType: \"File must be JPEG, PNG, or WebP\",\n rejectedTooLarge: \"File must be smaller than {{mb}} MB\",\n};\n\nconst DEFAULT_ALLOWED_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"];\nconst DEFAULT_MAX_SIZE = 5 * 1024 * 1024; // 5 MiB\n\nexport interface AvatarUploadCallbackParams {\n /** Selected source file (pre-crop). */\n file: File;\n /** Cropped image blob ready to ship. */\n blob: Blob;\n /** 0..100 progress callback. */\n onProgress?: (pct: number) => void;\n /** AbortController signal — fires when user cancels. */\n signal: AbortSignal;\n}\n\nexport interface AvatarUploaderProps {\n /** Required — service provides the actual upload + persistence. */\n onUpload: (params: AvatarUploadCallbackParams) => Promise<void>;\n /** Override file validation. Return `null` for OK, string for error message. */\n validate?: (file: File) => string | null;\n /** Allowed MIME types (default JPEG/PNG/WebP). */\n allowedTypes?: string[];\n /** Max file size in bytes (default 5 MiB). */\n maxSize?: number;\n /** Crop aspect ratio (default 1, square). */\n aspect?: number;\n /** Crop shape — \"round\" (default, fits avatar) or \"rect\". */\n cropShape?: \"round\" | \"rect\";\n /** Localised button + error strings. */\n labels?: Partial<AvatarUploaderLabels>;\n /** Map a thrown error to a user-friendly message. */\n errorMapper?: (err: unknown) => string;\n /** Hook fired on success after `onUpload` resolves. */\n onSuccess?: () => void;\n /** Hook fired when user picks cancel. */\n onCancel?: () => void;\n /** Render a custom \"choose image\" trigger instead of the default Button. */\n trigger?: ReactNode;\n}\n\ntype Phase = \"idle\" | \"cropping\" | \"uploading\" | \"success\" | \"error\";\n\nasync function cropImage(imageSrc: string, area: Area): Promise<Blob> {\n const image = new Image();\n image.crossOrigin = \"anonymous\";\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = reject;\n image.src = imageSrc;\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = area.width;\n canvas.height = area.height;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Canvas 2D context unavailable\");\n ctx.drawImage(image, area.x, area.y, area.width, area.height, 0, 0, area.width, area.height);\n\n return new Promise<Blob>((resolve, reject) => {\n canvas.toBlob(\n (blob) => (blob ? resolve(blob) : reject(new Error(\"Canvas export failed\"))),\n \"image/png\",\n 0.95,\n );\n });\n}\n\nexport function AvatarUploader({\n onUpload,\n validate,\n allowedTypes = DEFAULT_ALLOWED_TYPES,\n maxSize = DEFAULT_MAX_SIZE,\n aspect = 1,\n cropShape = \"round\",\n labels: labelOverrides,\n errorMapper,\n onSuccess,\n onCancel,\n trigger,\n}: AvatarUploaderProps) {\n const labels = { ...DEFAULT_LABELS, ...(labelOverrides ?? {}) };\n const [phase, setPhase] = useState<Phase>(\"idle\");\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [imageSrc, setImageSrc] = useState<string | null>(null);\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState(1);\n const [croppedArea, setCroppedArea] = useState<Area | null>(null);\n const [progress, setProgress] = useState(0);\n const [errorMsg, setErrorMsg] = useState(\"\");\n const abortRef = useRef<AbortController | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const reset = useCallback(() => {\n setPhase(\"idle\");\n setSelectedFile(null);\n setImageSrc(null);\n setCrop({ x: 0, y: 0 });\n setZoom(1);\n setCroppedArea(null);\n setProgress(0);\n setErrorMsg(\"\");\n abortRef.current?.abort();\n abortRef.current = null;\n }, []);\n\n const handleCancel = useCallback(() => {\n abortRef.current?.abort();\n onCancel?.();\n reset();\n }, [onCancel, reset]);\n\n const runDefaultValidation = useCallback(\n (file: File): string | null => {\n const result = validateFile(file, {\n accept: allowedTypes.join(\",\"),\n maxSize,\n labels: {\n ...DEFAULT_UPLOAD_LABELS,\n rejectedType: labels.rejectedType,\n rejectedTooLarge: labels.rejectedTooLarge,\n },\n });\n return result.ok ? null : (result.error ?? null);\n },\n [allowedTypes, maxSize, labels.rejectedType, labels.rejectedTooLarge],\n );\n\n const handleFileSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n e.target.value = \"\";\n\n const validationError = validate ? validate(file) : runDefaultValidation(file);\n if (validationError) {\n setErrorMsg(validationError);\n setPhase(\"error\");\n return;\n }\n\n setSelectedFile(file);\n const reader = new FileReader();\n reader.onload = () => {\n setImageSrc(reader.result as string);\n setPhase(\"cropping\");\n };\n reader.readAsDataURL(file);\n },\n [validate, runDefaultValidation],\n );\n\n const onCropComplete = useCallback((_: Area, pixels: Area) => {\n setCroppedArea(pixels);\n }, []);\n\n const handleUpload = useCallback(async () => {\n if (!selectedFile || !imageSrc || !croppedArea) return;\n setPhase(\"uploading\");\n setProgress(0);\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const blob = await cropImage(imageSrc, croppedArea);\n await onUpload({\n file: selectedFile,\n blob,\n onProgress: setProgress,\n signal: controller.signal,\n });\n setPhase(\"success\");\n onSuccess?.();\n } catch (err) {\n if (controller.signal.aborted) return;\n const msg = errorMapper\n ? errorMapper(err)\n : err instanceof Error\n ? err.message\n : \"Upload failed.\";\n setErrorMsg(msg);\n setPhase(\"error\");\n }\n }, [selectedFile, imageSrc, croppedArea, onUpload, onSuccess, errorMapper]);\n\n return (\n <Flex vertical gap=\"default\">\n <input\n ref={inputRef}\n type=\"file\"\n accept={allowedTypes.join(\",\")}\n style={{ display: \"none\" }}\n onChange={handleFileSelect}\n aria-label={labels.chooseImage}\n />\n\n {phase === \"idle\" &&\n (trigger ? (\n <span onClick={() => inputRef.current?.click()}>{trigger}</span>\n ) : (\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => inputRef.current?.click()}\n >\n <Camera size={16} />\n {labels.chooseImage}\n </Button>\n ))}\n\n {phase === \"cropping\" && imageSrc && (\n <Flex vertical gap=\"default\">\n <div style={{ position: \"relative\", width: \"100%\", aspectRatio: \"1 / 1\" }}>\n <Cropper\n image={imageSrc}\n crop={crop}\n zoom={zoom}\n aspect={aspect}\n cropShape={cropShape}\n showGrid={false}\n onCropChange={setCrop}\n onZoomChange={setZoom}\n onCropComplete={onCropComplete}\n />\n </div>\n <input\n type=\"range\"\n min={1}\n max={3}\n step={0.1}\n value={zoom}\n onChange={(e) => setZoom(Number(e.target.value))}\n aria-label=\"Zoom\"\n />\n <Space size=\"small\">\n <Button type=\"button\" onClick={handleUpload}>\n <UploadIcon size={16} />\n {labels.upload}\n </Button>\n <Button type=\"button\" variant=\"secondary\" onClick={handleCancel}>\n <X size={16} />\n {labels.cancel}\n </Button>\n </Space>\n </Flex>\n )}\n\n {phase === \"uploading\" && (\n <Flex vertical gap=\"small\">\n <Flex align=\"center\" gap=\"default\">\n <div\n style={{\n height: \"8px\",\n flex: 1,\n borderRadius: \"var(--radius-full)\",\n background: \"var(--muted)\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n height: \"100%\",\n width: `${progress}%`,\n background: \"var(--primary)\",\n borderRadius: \"var(--radius-full)\",\n transition: \"width 0.3s\",\n }}\n />\n </div>\n <span style={{ fontSize: \"var(--text-sm)\", color: \"var(--muted-foreground)\", fontVariantNumeric: \"tabular-nums\" }}>\n {progress}%\n </span>\n </Flex>\n <Button type=\"button\" variant=\"secondary\" size=\"small\" onClick={handleCancel}>\n <X size={16} />\n {labels.cancelUpload}\n </Button>\n </Flex>\n )}\n\n {phase === \"success\" && (\n <Flex align=\"center\" gap=\"default\">\n <span style={{ fontSize: \"var(--text-sm)\", color: \"var(--success)\" }}>\n {labels.uploadSuccess}\n </span>\n <Button type=\"button\" variant=\"ghost\" size=\"small\" onClick={reset}>\n <RotateCw size={16} />\n {labels.change}\n </Button>\n </Flex>\n )}\n\n {phase === \"error\" && (\n <Flex vertical gap=\"small\">\n <span style={{ fontSize: \"var(--text-sm)\", color: \"var(--destructive)\" }} role=\"alert\">\n {errorMsg}\n </span>\n <Space size=\"small\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"small\"\n onClick={() => inputRef.current?.click()}\n >\n <RotateCw size={16} />\n {labels.tryAgain}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"small\" onClick={reset}>\n {labels.cancel}\n </Button>\n </Space>\n </Flex>\n )}\n </Flex>\n );\n}\n","// @godxjp/ui — media-service client.\n//\n// Transport-layer wrapper around the platform's media-service public\n// API (see services/media-service/api/openapi.yaml). Generic; no\n// service-specific copy. Exposed as a sub-path entry so consumers\n// who only want the transport (e.g. server-rendered callers) can\n// import it without pulling React.\n//\n// Endpoint contract (gateway-routed per cardinal rule 14):\n//\n// POST /upload-sessions -> { upload_url, media_id }\n// POST /upload-sessions/{id}/complete -> ack\n// POST /objects/{id}/promote -> media metadata\n// GET /objects/{id} -> media metadata\n// GET /objects/{id}/download -> { url } (signed view URL)\n//\n// Auth flows through whatever the consumer attached at the global\n// fetch / cookie layer; the framework does not embed credentials.\n//\n// Base URL precedence:\n// 1. setMediaBaseURL(url) override at runtime;\n// 2. import.meta.env.VITE_MEDIA_API_BASE_URL;\n// 3. fallback to \"/api/media/v1\" (matches gateway carve-out).\n//\n// All read/upload helpers return Promise<MediaItem> after normalising\n// whatever shape the server returned, so callers always see the same\n// canonical shape regardless of which endpoint was hit.\n\nexport interface MediaItem {\n id: string;\n filename: string;\n contentType: string;\n /** Signed view URL — fetchable directly as an <img src>. */\n url: string;\n thumbnailUrl?: string;\n width?: number;\n height?: number;\n /** Size in bytes. */\n size?: number;\n}\n\nexport interface MediaInitResponse {\n /** Presigned PUT URL — upload bytes directly here. */\n uploadUrl: string;\n /** Server-assigned media UUID (use for promote + later fetch). */\n mediaId: string;\n}\n\n// ─── Base URL plumbing ────────────────────────────────────────────\n\nconst DEFAULT_BASE_URL = \"/api/media/v1\";\n\nfunction readEnvBaseURL(): string | null {\n // import.meta.env is statically replaced at Vite build time; in\n // Storybook + tsup builds we never see VITE_* — the lookup is\n // defensive. typeof guards keep us SSR-safe.\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const meta = (import.meta as any);\n const raw = meta?.env?.VITE_MEDIA_API_BASE_URL;\n return typeof raw === \"string\" && raw.length > 0 ? raw : null;\n } catch {\n return null;\n }\n}\n\nlet runtimeBaseURL: string | null = null;\n\n/**\n * Override the media-service base URL at runtime (consumer apps can\n * call this once during bootstrap if their deployment differs from\n * `VITE_MEDIA_API_BASE_URL`).\n */\nexport function setMediaBaseURL(url: string): void {\n runtimeBaseURL = url || null;\n}\n\nexport function getMediaBaseURL(): string {\n return runtimeBaseURL ?? readEnvBaseURL() ?? DEFAULT_BASE_URL;\n}\n\nfunction buildURL(path: string): string {\n const base = getMediaBaseURL().replace(/\\/+$/, \"\");\n const rel = path.startsWith(\"/\") ? path : `/${path}`;\n return `${base}${rel}`;\n}\n\n// ─── Error shape ──────────────────────────────────────────────────\n\nexport class MediaClientError extends Error {\n status: number;\n detail?: string;\n constructor(message: string, status: number, detail?: string) {\n super(message);\n this.name = \"MediaClientError\";\n this.status = status;\n this.detail = detail;\n }\n}\n\nasync function parseProblem(res: Response): Promise<MediaClientError> {\n let detail: string | undefined;\n let title = res.statusText || `HTTP ${res.status}`;\n try {\n const ct = res.headers.get(\"content-type\") ?? \"\";\n if (ct.includes(\"problem+json\") || ct.includes(\"json\")) {\n const body = (await res.json()) as { title?: string; detail?: string };\n if (body.title) title = body.title;\n if (body.detail) detail = body.detail;\n }\n } catch {\n /* ignore — server returned non-JSON */\n }\n return new MediaClientError(title, res.status, detail);\n}\n\n// ─── Normalisation ────────────────────────────────────────────────\n\n// The server's object payload is loosely typed in the OpenAPI spec\n// today; the SPA only consumes a small slice. Map the common field\n// aliases (id / object_id, content_type / mime_type, signed_url /\n// download_url) so future server evolution does not break callers.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normaliseMediaItem(raw: any, fallbackId?: string): MediaItem {\n const id: string =\n raw?.id ?? raw?.object_id ?? raw?.media_id ?? fallbackId ?? \"\";\n const filename: string =\n raw?.filename ?? raw?.name ?? raw?.object_name ?? \"unknown\";\n const contentType: string =\n raw?.contentType ?? raw?.content_type ?? raw?.mime_type ?? \"application/octet-stream\";\n const url: string =\n raw?.url ?? raw?.signed_url ?? raw?.download_url ?? raw?.view_url ?? \"\";\n const thumbnailUrl: string | undefined =\n raw?.thumbnailUrl ?? raw?.thumbnail_url ?? undefined;\n const width: number | undefined = raw?.width ?? raw?.metadata?.width;\n const height: number | undefined = raw?.height ?? raw?.metadata?.height;\n const size: number | undefined = raw?.size ?? raw?.size_bytes ?? raw?.bytes;\n return { id, filename, contentType, url, thumbnailUrl, width, height, size };\n}\n\n// ─── Public API ───────────────────────────────────────────────────\n\n/**\n * Step 1 of the 3-step upload contract: ask the server for a\n * presigned PUT URL + a media UUID.\n */\nexport async function initUpload(file: File): Promise<MediaInitResponse> {\n const res = await fetch(buildURL(\"/upload-sessions\"), {\n method: \"POST\",\n credentials: \"include\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n size: file.size,\n }),\n });\n if (!res.ok) throw await parseProblem(res);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body = (await res.json()) as any;\n const uploadUrl: string = body?.upload_url ?? body?.uploadUrl;\n const mediaId: string = body?.media_id ?? body?.id ?? body?.object_id;\n if (!uploadUrl || !mediaId) {\n throw new MediaClientError(\n \"media-service init response missing upload_url or media_id\",\n 502,\n );\n }\n return { uploadUrl, mediaId };\n}\n\n/**\n * Step 2: PUT raw bytes to the presigned URL. Progress reported\n * via XMLHttpRequest (fetch doesn't expose upload-progress events).\n */\nexport function putToPresigned(\n url: string,\n file: File | Blob,\n onProgress?: (percent: number) => void,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"PUT\", url, true);\n const type =\n (file as File).type || (file instanceof Blob ? file.type : \"\");\n if (type) xhr.setRequestHeader(\"content-type\", type);\n if (onProgress) {\n xhr.upload.addEventListener(\"progress\", (e) => {\n if (e.lengthComputable) {\n onProgress(Math.round((e.loaded / e.total) * 100));\n }\n });\n }\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve();\n } else {\n reject(\n new MediaClientError(\n `presigned PUT failed (${xhr.status})`,\n xhr.status,\n ),\n );\n }\n };\n xhr.onerror = () =>\n reject(new MediaClientError(\"presigned PUT network error\", 0));\n xhr.send(file);\n });\n}\n\n/**\n * Step 3: tell the server the bytes are on the bucket — server\n * promotes the temp object to permanent + returns final metadata.\n */\nexport async function promoteUpload(mediaId: string): Promise<MediaItem> {\n const res = await fetch(buildURL(`/objects/${mediaId}/promote`), {\n method: \"POST\",\n credentials: \"include\",\n });\n if (!res.ok) throw await parseProblem(res);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body = (await res.json()) as any;\n return normaliseMediaItem(body, mediaId);\n}\n\n/** Fetch full metadata + signed view URL for one media UUID. */\nexport async function fetchMedia(id: string): Promise<MediaItem> {\n const res = await fetch(buildURL(`/objects/${id}`), {\n method: \"GET\",\n credentials: \"include\",\n });\n if (!res.ok) throw await parseProblem(res);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body = (await res.json()) as any;\n const item = normaliseMediaItem(body, id);\n // If the server didn't inline a signed URL, hit the download\n // endpoint to materialise one. Server contract leaves this\n // server-side decision flexible.\n if (!item.url) {\n item.url = await fetchSignedURL(id);\n }\n return item;\n}\n\n/**\n * Batch fetch. The server doesn't expose a true batch endpoint, so\n * we fan out concurrent GETs and let the gateway dedupe. Falls back\n * gracefully on per-item errors — items that fail to resolve come\n * back with `url=\"\"` so the UI can render a fallback tile.\n */\nexport async function fetchMediaBatch(ids: string[]): Promise<MediaItem[]> {\n if (ids.length === 0) return [];\n const settled = await Promise.allSettled(ids.map((id) => fetchMedia(id)));\n return settled.map((r, i) =>\n r.status === \"fulfilled\"\n ? r.value\n : {\n id: ids[i],\n filename: \"unknown\",\n contentType: \"application/octet-stream\",\n url: \"\",\n },\n );\n}\n\nasync function fetchSignedURL(id: string): Promise<string> {\n const res = await fetch(buildURL(`/objects/${id}/download`), {\n method: \"GET\",\n credentials: \"include\",\n });\n if (!res.ok) throw await parseProblem(res);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const body = (await res.json()) as any;\n return body?.url ?? body?.signed_url ?? body?.download_url ?? \"\";\n}\n\n/**\n * End-to-end upload helper — runs init → PUT → promote, returning\n * the final MediaItem. Consumers that need progress can pass a\n * callback; the value is forwarded to `putToPresigned`.\n */\nexport async function uploadFile(\n file: File,\n onProgress?: (percent: number) => void,\n): Promise<MediaItem> {\n const { uploadUrl, mediaId } = await initUpload(file);\n await putToPresigned(uploadUrl, file, onProgress);\n return promoteUpload(mediaId);\n}\n","// MediaUpload — high-level wrapper that integrates with the\n// platform's media-service. Two value shapes are supported:\n// • MediaItem (full metadata + signed URL) — render immediately\n// • UUID string — component fetches metadata via `fetchMedia(id)`\n// (or `fetchMediaBatch` for arrays) and renders once resolved.\n// Upload flow always goes through media-service's 3-step\n// presigned-URL contract: init → PUT bytes → promote. The result\n// is a MediaItem that gets passed back via `onValueChange`.\n//\n// Consumers ONLY need to persist UUIDs in their domain models;\n// rendering happens automatically.\n\nimport {\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type DragEvent,\n} from \"react\";\nimport { ImagePlus, RotateCw, X } from \"lucide-react\";\nimport { Button } from \"../../general/Button\";\nimport { Flex } from \"../../layout\";\nimport { cn } from \"../../cn\";\nimport {\n fetchMedia,\n fetchMediaBatch,\n uploadFile,\n type MediaItem,\n} from \"./media-client\";\nimport { AvatarUploader } from \"./AvatarUploader\";\n\n// ─── Shared types ─────────────────────────────────────────────────\n\nexport type MediaUploadSize = \"small\" | \"default\" | \"large\";\nexport type MediaUploadShape = \"square\" | \"circle\" | \"card\";\n\ntype MediaValueSingle = string | MediaItem | null | undefined;\ntype MediaValueMultiple = Array<string | MediaItem>;\n\n// ─── Resolver helpers ─────────────────────────────────────────────\n\n/**\n * Resolve a value that may be `null | string (UUID) | MediaItem` into\n * a MediaItem. UUID branch calls `fetchMedia`; failures resolve to\n * `null` and surface via the `error` state, so the UI can render a\n * fallback \"media not available\" tile without throwing.\n */\nfunction useResolvedMediaItem(value: MediaValueSingle): {\n item: MediaItem | null;\n loading: boolean;\n error: string | null;\n requestedId: string | null;\n} {\n const [item, setItem] = useState<MediaItem | null>(\n typeof value === \"object\" && value !== null ? value : null,\n );\n const [loading, setLoading] = useState(typeof value === \"string\");\n const [error, setError] = useState<string | null>(null);\n const requestedId = typeof value === \"string\" ? value : null;\n\n useEffect(() => {\n let cancelled = false;\n if (value == null) {\n setItem(null);\n setLoading(false);\n setError(null);\n return;\n }\n if (typeof value === \"object\") {\n setItem(value);\n setLoading(false);\n setError(null);\n return;\n }\n // value is a UUID string — fetch it\n setLoading(true);\n setError(null);\n fetchMedia(value)\n .then((it) => {\n if (cancelled) return;\n setItem(it);\n setLoading(false);\n })\n .catch((err: unknown) => {\n if (cancelled) return;\n setItem(null);\n setLoading(false);\n setError(err instanceof Error ? err.message : \"Media not available\");\n });\n return () => {\n cancelled = true;\n };\n }, [value]);\n\n return { item, loading, error, requestedId };\n}\n\nfunction useResolvedMediaList(value: MediaValueMultiple): {\n items: MediaItem[];\n loading: boolean;\n errorIds: string[];\n} {\n const ids = useMemo(\n () => value.filter((v): v is string => typeof v === \"string\"),\n [value],\n );\n const inline = useMemo(\n () =>\n value\n .map((v, i) => (typeof v === \"object\" ? { v, i } : null))\n .filter((x): x is { v: MediaItem; i: number } => x !== null),\n [value],\n );\n\n const [items, setItems] = useState<MediaItem[]>(() => value.map((v) =>\n typeof v === \"object\"\n ? v\n : {\n id: v,\n filename: \"loading\",\n contentType: \"application/octet-stream\",\n url: \"\",\n },\n ));\n const [loading, setLoading] = useState(ids.length > 0);\n const [errorIds, setErrorIds] = useState<string[]>([]);\n\n useEffect(() => {\n let cancelled = false;\n if (ids.length === 0) {\n // Only inline items — emit immediately.\n setItems(inline.map((x) => x.v));\n setLoading(false);\n setErrorIds([]);\n return;\n }\n setLoading(true);\n fetchMediaBatch(ids)\n .then((fetched) => {\n if (cancelled) return;\n // Merge inline + fetched preserving original order\n const merged: MediaItem[] = [];\n const fetchedById = new Map(fetched.map((f) => [f.id, f]));\n const inlineByIdx = new Map(inline.map((x) => [x.i, x.v]));\n const failed: string[] = [];\n value.forEach((v, idx) => {\n if (typeof v === \"object\") {\n merged.push(inlineByIdx.get(idx) as MediaItem);\n } else {\n const got = fetchedById.get(v);\n if (got && got.url) merged.push(got);\n else {\n failed.push(v);\n merged.push(\n got ?? {\n id: v,\n filename: \"unknown\",\n contentType: \"application/octet-stream\",\n url: \"\",\n },\n );\n }\n }\n });\n setItems(merged);\n setErrorIds(failed);\n setLoading(false);\n })\n .catch(() => {\n if (cancelled) return;\n setErrorIds(ids);\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [ids, inline, value]);\n\n return { items, loading, errorIds };\n}\n\n// ─── MediaUpload.Single ───────────────────────────────────────────\n\nexport interface MediaUploadSingleProps {\n /** Controlled — UUID OR full MediaItem; component fetches metadata if only id given. */\n value?: string | MediaItem | null;\n defaultValue?: string | MediaItem | null;\n onValueChange?: (value: MediaItem | null) => void;\n accept?: string;\n /** Max file size in bytes. */\n maxSize?: number;\n disabled?: boolean;\n /** Preview shape — square / circle / card. */\n shape?: MediaUploadShape;\n size?: MediaUploadSize;\n className?: string;\n}\n\nexport function MediaUploadSingle({\n value,\n defaultValue = null,\n onValueChange,\n accept = \"image/*\",\n maxSize,\n disabled = false,\n shape = \"square\",\n size = \"default\",\n className,\n}: MediaUploadSingleProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<MediaValueSingle>(defaultValue);\n const effective = isControlled ? value : internal;\n const { item, loading, error, requestedId } = useResolvedMediaItem(effective);\n\n const [uploading, setUploading] = useState(false);\n const [progress, setProgress] = useState(0);\n const [uploadError, setUploadError] = useState<string | null>(null);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = useId();\n\n const emit = useCallback(\n (next: MediaItem | null) => {\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n const handleFile = useCallback(\n async (file: File) => {\n if (maxSize && file.size > maxSize) {\n setUploadError(\n `File must be smaller than ${(maxSize / (1024 * 1024)).toFixed(0)} MB`,\n );\n return;\n }\n setUploading(true);\n setUploadError(null);\n setProgress(0);\n try {\n const result = await uploadFile(file, setProgress);\n emit(result);\n } catch (err) {\n setUploadError(err instanceof Error ? err.message : \"Upload failed\");\n } finally {\n setUploading(false);\n }\n },\n [emit, maxSize],\n );\n\n const handleSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const f = e.target.files?.[0];\n e.target.value = \"\";\n if (f) void handleFile(f);\n },\n [handleFile],\n );\n\n const [dragOver, setDragOver] = useState(false);\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n setDragOver(false);\n if (disabled) return;\n const f = e.dataTransfer?.files?.[0];\n if (f) void handleFile(f);\n },\n [disabled, handleFile],\n );\n\n const openPicker = useCallback(() => {\n if (disabled || uploading) return;\n inputRef.current?.click();\n }, [disabled, uploading]);\n\n const handleRemove = useCallback(() => {\n emit(null);\n setUploadError(null);\n }, [emit]);\n\n const hasImage = !!item && !!item.url;\n\n return (\n <div\n className={cn(\n \"media-upload media-upload-single\",\n `media-upload-size-${size}`,\n `media-upload-shape-${shape}`,\n className,\n )}\n data-disabled={disabled}\n data-media-uuid={requestedId ?? undefined}\n >\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n disabled={disabled}\n onChange={handleSelect}\n style={{ display: \"none\" }}\n aria-hidden=\"true\"\n />\n <div\n className=\"media-upload-frame\"\n data-dragover={dragOver}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={openPicker}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPicker();\n }\n }}\n onDrop={handleDrop}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n aria-disabled={disabled}\n aria-label={hasImage ? \"Replace image\" : \"Upload image\"}\n >\n {hasImage ? (\n <img src={item.url} alt={item.filename} />\n ) : loading ? (\n <span className=\"media-upload-status\">Loading…</span>\n ) : error ? (\n <Flex vertical align=\"center\" gap={4} className=\"media-upload-status\">\n <span className=\"media-upload-status-title\">Media not available</span>\n {requestedId && (\n <span className=\"media-upload-status-id\">{requestedId}</span>\n )}\n </Flex>\n ) : (\n <Flex vertical align=\"center\" gap={4} className=\"media-upload-status\">\n <ImagePlus size={20} />\n <span>Click or drag</span>\n </Flex>\n )}\n {uploading && (\n <div className=\"upload-progress\">\n <div\n className=\"upload-progress-fill\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n </div>\n {hasImage && !disabled && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n aria-label=\"Remove image\"\n onClick={handleRemove}\n className=\"media-upload-remove\"\n >\n <X size={14} />\n </Button>\n )}\n {uploadError && (\n <span role=\"alert\" className=\"media-upload-error\">\n {uploadError}\n </span>\n )}\n </div>\n );\n}\n\n// ─── MediaUpload.Multiple ─────────────────────────────────────────\n\nexport interface MediaUploadMultipleProps {\n value?: Array<string | MediaItem>;\n defaultValue?: Array<string | MediaItem>;\n onValueChange?: (value: MediaItem[]) => void;\n accept?: string;\n maxSize?: number;\n maxCount?: number;\n disabled?: boolean;\n size?: MediaUploadSize;\n className?: string;\n}\n\nexport function MediaUploadMultiple({\n value,\n defaultValue = [],\n onValueChange,\n accept = \"image/*\",\n maxSize,\n maxCount,\n disabled = false,\n size = \"default\",\n className,\n}: MediaUploadMultipleProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<MediaValueMultiple>(defaultValue);\n const effective = isControlled ? value : internal;\n const { items, loading, errorIds } = useResolvedMediaList(effective);\n\n const [uploading, setUploading] = useState(false);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const emit = useCallback(\n (next: MediaItem[]) => {\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n const handleFiles = useCallback(\n async (files: FileList) => {\n setUploading(true);\n setUploadError(null);\n const slots =\n maxCount === undefined\n ? files.length\n : Math.max(0, maxCount - items.length);\n const toUpload = Array.from(files).slice(0, slots);\n try {\n const uploaded = await Promise.all(\n toUpload.map((f) => {\n if (maxSize && f.size > maxSize) {\n throw new Error(\n `File must be smaller than ${(maxSize / (1024 * 1024)).toFixed(0)} MB`,\n );\n }\n return uploadFile(f);\n }),\n );\n emit([...items, ...uploaded]);\n } catch (err) {\n setUploadError(err instanceof Error ? err.message : \"Upload failed\");\n } finally {\n setUploading(false);\n }\n },\n [emit, items, maxCount, maxSize],\n );\n\n const handleSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const list = e.target.files;\n e.target.value = \"\";\n if (list && list.length > 0) void handleFiles(list);\n },\n [handleFiles],\n );\n\n const openPicker = useCallback(() => {\n if (disabled || uploading) return;\n inputRef.current?.click();\n }, [disabled, uploading]);\n\n const removeAt = useCallback(\n (idx: number) => {\n const next = items.filter((_, i) => i !== idx);\n emit(next);\n },\n [emit, items],\n );\n\n const showAddTile =\n !disabled && (maxCount === undefined || items.length < maxCount);\n\n return (\n <div\n className={cn(\n \"media-upload media-upload-multiple\",\n `media-upload-size-${size}`,\n className,\n )}\n data-disabled={disabled}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple\n disabled={disabled}\n onChange={handleSelect}\n style={{ display: \"none\" }}\n aria-hidden=\"true\"\n />\n <div className=\"media-upload-grid\">\n {items.map((it, idx) => {\n const failed = !it.url && errorIds.includes(it.id);\n return (\n <div\n key={it.id || idx}\n className=\"media-upload-tile\"\n data-media-uuid={it.id || undefined}\n data-status={failed ? \"error\" : \"ok\"}\n >\n {it.url ? (\n <img src={it.url} alt={it.filename} />\n ) : (\n <Flex\n vertical\n align=\"center\"\n justify=\"center\"\n className=\"media-upload-status\"\n >\n <span className=\"media-upload-status-title\">\n {failed ? \"Unavailable\" : \"Loading…\"}\n </span>\n {it.id && (\n <span className=\"media-upload-status-id\">{it.id}</span>\n )}\n </Flex>\n )}\n {!disabled && (\n <Button\n type=\"button\"\n size=\"small\"\n variant=\"ghost\"\n className=\"media-upload-tile-remove\"\n aria-label=\"Remove image\"\n onClick={() => removeAt(idx)}\n >\n <X size={14} />\n </Button>\n )}\n </div>\n );\n })}\n {showAddTile && (\n <button\n type=\"button\"\n className=\"media-upload-tile media-upload-tile-add\"\n onClick={openPicker}\n disabled={uploading}\n aria-label=\"Add images\"\n >\n <Flex vertical align=\"center\" gap={4}>\n {uploading ? (\n <RotateCw size={18} className=\"media-upload-spin\" />\n ) : (\n <ImagePlus size={18} />\n )}\n <span>{uploading ? \"Uploading…\" : \"Add\"}</span>\n </Flex>\n </button>\n )}\n </div>\n {loading && items.some((it) => !it.url && !errorIds.includes(it.id)) && (\n <span className=\"media-upload-status-line\">Loading media…</span>\n )}\n {uploadError && (\n <span role=\"alert\" className=\"media-upload-error\">\n {uploadError}\n </span>\n )}\n </div>\n );\n}\n\n// ─── MediaUpload.Avatar ───────────────────────────────────────────\n\nexport interface MediaUploadAvatarProps {\n value?: string | MediaItem | null;\n defaultValue?: string | MediaItem | null;\n onValueChange?: (value: MediaItem | null) => void;\n /** Crop aspect ratio (default 1 = square). */\n aspect?: number;\n size?: MediaUploadSize;\n disabled?: boolean;\n className?: string;\n}\n\nconst AVATAR_PX: Record<MediaUploadSize, number> = {\n small: 64,\n default: 96,\n large: 128,\n};\n\nexport function MediaUploadAvatar({\n value,\n defaultValue = null,\n onValueChange,\n aspect = 1,\n size = \"default\",\n disabled = false,\n className,\n}: MediaUploadAvatarProps) {\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<MediaValueSingle>(defaultValue);\n const effective = isControlled ? value : internal;\n const { item, loading, error, requestedId } = useResolvedMediaItem(effective);\n\n const emit = useCallback(\n (next: MediaItem | null) => {\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n // Hand the blob from AvatarUploader through the media-service\n // 3-step contract. AvatarUploader doesn't know about MediaItems —\n // we adapt here.\n const handleUpload = useCallback(\n async ({\n blob,\n file,\n onProgress,\n }: {\n blob: Blob;\n file: File;\n onProgress?: (n: number) => void;\n signal: AbortSignal;\n }) => {\n // Wrap the blob in a File so the media-service init payload\n // carries a real filename + content-type.\n const wrapped = new File([blob], file.name, { type: blob.type || file.type });\n const result = await uploadFile(wrapped, onProgress);\n emit(result);\n },\n [emit],\n );\n\n const px = AVATAR_PX[size];\n const hasImage = !!item && !!item.url;\n\n return (\n <div\n className={cn(\n \"media-upload media-upload-avatar\",\n `media-upload-size-${size}`,\n className,\n )}\n data-disabled={disabled}\n data-media-uuid={requestedId ?? undefined}\n >\n <div\n className=\"media-upload-avatar-preview\"\n style={{ width: px, height: px }}\n >\n {hasImage ? (\n <img src={item.url} alt={item.filename} />\n ) : loading ? (\n <span className=\"media-upload-status\">…</span>\n ) : error ? (\n <span className=\"media-upload-status-title\">N/A</span>\n ) : (\n <ImagePlus size={20} />\n )}\n </div>\n {!disabled && (\n <AvatarUploader onUpload={handleUpload} aspect={aspect} cropShape=\"round\" />\n )}\n </div>\n );\n}\n\n// ─── Namespace export ─────────────────────────────────────────────\n\nexport const MediaUpload = {\n Single: MediaUploadSingle,\n Multiple: MediaUploadMultiple,\n Avatar: MediaUploadAvatar,\n};\n\nexport type { MediaItem } from \"./media-client\";\n","import {\n forwardRef,\n useCallback,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * LocaleInput — multilingual text field with a tab strip switcher.\n *\n * One field stores a value per locale. The base locale (first in the\n * `locales` list, or `defaultLocale` if provided) is the fallback —\n * when a translation is missing the base value is used at render time.\n * Translation status is surfaced per-tab via a coloured dot:\n *\n * - `filled` → success (green)\n * - `draft` → warning (amber, e.g. stale relative to base)\n * - `empty` → destructive (red, no translation yet)\n *\n * `statusByLocale` lets callers pass the dot state explicitly. If\n * omitted, status is derived: empty string → `empty`, otherwise\n * `filled`.\n *\n * @example\n * <LocaleInput\n * locales={[\"ja\", \"en\", \"vi\"]}\n * baseLocale=\"ja\"\n * values={{ ja: \"特選 まぐろ握り 6貫盛り合わせ\", en: \"Tuna nigiri assortment (6 pcs)\", vi: \"\" }}\n * onChange={(locale, value) => set(locale, value)}\n * placeholder=\"商品名\"\n * />\n *\n * The visual contract maps to the canonical `.loc-tabs` + `.loc-panel`\n * classes from the dxs-kintai design system (no service-specific\n * locale lists baked into the source).\n */\n\nexport type LocaleStatus = \"filled\" | \"draft\" | \"empty\";\n\nexport interface LocaleInputProps {\n /** Ordered locale codes (BCP-47 or arbitrary string). First is base unless `baseLocale` is set. */\n locales: string[];\n /** Locale rendered initially. Defaults to the first locale. */\n defaultLocale?: string;\n /** Controlled active locale. Pair with `onLocaleChange`. */\n activeLocale?: string;\n /** Controlled active-locale change handler. */\n onLocaleChange?: (locale: string) => void;\n /** Fallback locale — labelled \"(base)\" in the tab. Defaults to `locales[0]`. */\n baseLocale?: string;\n /** Current values keyed by locale. */\n values: Record<string, string>;\n /** Fired when the user edits the value for the active locale. */\n onChange?: (locale: string, value: string) => void;\n /** Optional explicit status per locale dot. Derived from `values` when omitted. */\n statusByLocale?: Record<string, LocaleStatus>;\n /** Placeholder rendered in the input/textarea. */\n placeholder?: string;\n /** Render a `<textarea>` instead of `<input>`. */\n multiline?: boolean;\n /** Rows for the textarea (only when `multiline`). */\n rows?: number;\n /** Validation status applied to the visible input. */\n status?: \"default\" | \"error\" | \"warning\";\n /** Show a translation-progress meta string (e.g. \"3 / 4 translated\") in the tab strip. */\n meta?: ReactNode;\n /** Trailing tab-strip slot (e.g. an \"+ Add locale\" button). */\n tabsExtra?: ReactNode;\n /** Resolve a human label from a locale code; defaults to `locale.toUpperCase()`. */\n resolveLocaleLabel?: (locale: string) => ReactNode;\n /** Label shown next to the base locale tab. Defaults to \"(base)\". */\n baseLabel?: ReactNode;\n /** Max length for the input — surfaces a `.count` row when set. */\n maxLength?: number;\n /** Optional help text rendered under the active panel. */\n help?: ReactNode;\n /** Visual class for the help line (`info` | `warn` | `err` | `ok`). */\n helpStatus?: \"info\" | \"warn\" | \"err\" | \"ok\";\n /** Outer wrapper className. */\n className?: string;\n /** Outer wrapper style. */\n style?: CSSProperties;\n /** Input ID — useful when paired with a `<label htmlFor>`. */\n id?: string;\n}\n\nfunction deriveStatus(value: string | undefined): LocaleStatus {\n if (!value || value.trim() === \"\") return \"empty\";\n return \"filled\";\n}\n\nexport const LocaleInput = forwardRef<HTMLDivElement, LocaleInputProps>(\n function LocaleInput(\n {\n locales,\n defaultLocale,\n activeLocale: controlledLocale,\n onLocaleChange,\n baseLocale,\n values,\n onChange,\n statusByLocale,\n placeholder,\n multiline = false,\n rows = 3,\n status = \"default\",\n meta,\n tabsExtra,\n resolveLocaleLabel,\n baseLabel = \"(base)\",\n maxLength,\n help,\n helpStatus,\n className,\n style,\n id,\n },\n ref,\n ) {\n const resolvedBase = baseLocale ?? locales[0];\n const [internalLocale, setInternalLocale] = useState<string>(\n defaultLocale ?? resolvedBase ?? \"\",\n );\n const active = controlledLocale ?? internalLocale;\n\n const selectLocale = useCallback(\n (next: string) => {\n if (onLocaleChange) onLocaleChange(next);\n if (controlledLocale === undefined) setInternalLocale(next);\n },\n [controlledLocale, onLocaleChange],\n );\n\n const value = values[active] ?? \"\";\n const labelFor = useCallback(\n (locale: string): ReactNode =>\n resolveLocaleLabel ? resolveLocaleLabel(locale) : locale.toUpperCase(),\n [resolveLocaleLabel],\n );\n\n const statusMap = useMemo(() => {\n if (statusByLocale) return statusByLocale;\n const derived: Record<string, LocaleStatus> = {};\n for (const loc of locales) derived[loc] = deriveStatus(values[loc]);\n return derived;\n }, [locales, statusByLocale, values]);\n\n const inputStatusClass =\n status === \"error\"\n ? \"input-status-error\"\n : status === \"warning\"\n ? \"input-status-warning\"\n : \"\";\n\n const current = typeof value === \"string\" ? value.length : 0;\n const over = typeof maxLength === \"number\" && current > maxLength;\n const near =\n typeof maxLength === \"number\" && !over && current >= Math.floor(maxLength * 0.9);\n\n return (\n <div ref={ref} className={cn(\"loc-input\", className)} style={style}>\n <div className=\"loc-tabs\" role=\"tablist\">\n {locales.map((locale) => {\n const dotStatus = statusMap[locale] ?? \"empty\";\n const isActive = locale === active;\n const isBase = locale === resolvedBase;\n return (\n <button\n key={locale}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n className={cn(isActive && \"on\")}\n onClick={() => selectLocale(locale)}\n >\n <span\n className={cn(\n \"dot\",\n dotStatus === \"empty\" && \"empty\",\n dotStatus === \"draft\" && \"draft\",\n )}\n />\n {labelFor(locale)}\n {isBase ? (\n <span\n style={{\n fontSize: 10,\n color: \"var(--muted-foreground)\",\n marginLeft: 2,\n }}\n >\n {baseLabel}\n </span>\n ) : null}\n </button>\n );\n })}\n <span className=\"spacer\" />\n {meta !== undefined && <span className=\"meta\">{meta}</span>}\n {tabsExtra !== undefined && tabsExtra}\n </div>\n\n <div className=\"loc-panel\">\n {multiline ? (\n <textarea\n id={id}\n className={cn(\"input\", inputStatusClass)}\n rows={rows}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(active, e.target.value)}\n style={{\n resize: \"vertical\",\n height: \"auto\",\n padding: \"6px 10px\",\n }}\n maxLength={maxLength}\n />\n ) : (\n <input\n id={id}\n className={cn(\"input\", inputStatusClass)}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(active, e.target.value)}\n maxLength={maxLength}\n />\n )}\n\n {(help !== undefined || maxLength !== undefined) && (\n <div className=\"row-help\">\n {help !== undefined ? (\n <div className={cn(\"help\", helpStatus)}>{help}</div>\n ) : (\n <span />\n )}\n {maxLength !== undefined && (\n <div className={cn(\"count\", near && \"warn\", over && \"over\")}>\n {current} / {maxLength}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\n/**\n * LocaleRowInput — per-row locale form (canonical pattern ②).\n *\n * Renders every locale stacked vertically, each row showing the locale\n * code + a translation-status dot on the left and the input on the\n * right. Useful when reviewers want to see every translation at once.\n */\n\nexport interface LocaleRowInputProps\n extends Omit<LocaleInputProps, \"activeLocale\" | \"onLocaleChange\" | \"defaultLocale\" | \"tabsExtra\" | \"meta\"> {\n /** Per-locale row className. */\n rowClassName?: string;\n}\n\nexport const LocaleRowInput = forwardRef<HTMLDivElement, LocaleRowInputProps>(\n function LocaleRowInput(\n {\n locales,\n values,\n onChange,\n statusByLocale,\n placeholder,\n multiline = false,\n rows = 2,\n status = \"default\",\n resolveLocaleLabel,\n baseLocale,\n className,\n style,\n rowClassName,\n maxLength,\n help,\n helpStatus,\n },\n ref,\n ) {\n const labelFor = useCallback(\n (locale: string): ReactNode =>\n resolveLocaleLabel ? resolveLocaleLabel(locale) : locale.toUpperCase(),\n [resolveLocaleLabel],\n );\n\n const statusMap = useMemo(() => {\n if (statusByLocale) return statusByLocale;\n const derived: Record<string, LocaleStatus> = {};\n for (const loc of locales) derived[loc] = deriveStatus(values[loc]);\n return derived;\n }, [locales, statusByLocale, values]);\n\n const inputStatusClass =\n status === \"error\"\n ? \"input-status-error\"\n : status === \"warning\"\n ? \"input-status-warning\"\n : \"\";\n\n return (\n <div\n ref={ref}\n className={cn(\"loc-rows\", className)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"var(--spacing-2)\",\n ...style,\n }}\n >\n {locales.map((locale) => {\n const dotStatus = statusMap[locale] ?? \"empty\";\n const isBase = baseLocale ? locale === baseLocale : false;\n return (\n <div key={locale} className={cn(\"loc-row\", rowClassName)}>\n <span className=\"flag\">\n <span className=\"code\">{labelFor(locale)}</span>\n <span\n className={cn(\n \"dot\",\n dotStatus === \"empty\" && \"empty\",\n dotStatus === \"draft\" && \"draft\",\n )}\n />\n {isBase && (\n <span style={{ fontSize: 10, color: \"var(--muted-foreground)\" }}>\n base\n </span>\n )}\n </span>\n {multiline ? (\n <textarea\n className={cn(\"input\", inputStatusClass)}\n rows={rows}\n placeholder={placeholder}\n value={values[locale] ?? \"\"}\n onChange={(e) => onChange?.(locale, e.target.value)}\n style={{ resize: \"vertical\", height: \"auto\", padding: \"6px 10px\" }}\n maxLength={maxLength}\n />\n ) : (\n <input\n className={cn(\"input\", inputStatusClass)}\n placeholder={placeholder}\n value={values[locale] ?? \"\"}\n onChange={(e) => onChange?.(locale, e.target.value)}\n maxLength={maxLength}\n />\n )}\n </div>\n );\n })}\n {help !== undefined && (\n <div className={cn(\"help\", helpStatus)}>{help}</div>\n )}\n </div>\n );\n },\n);\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * IconRow — `20px icon | content` two-column row used by detail panels\n * and create-event dialogs. Keeps icon glyphs aligned in a tight column\n * regardless of body height.\n *\n * @example\n * <IconRow icon={<Clock />}>\n * <div>10:00 – 11:00</div>\n * <div className=\"muted\">GMT+09</div>\n * </IconRow>\n */\nexport type IconRowAlign = \"top\" | \"center\";\n\nexport interface IconRowProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n icon: ReactNode;\n align?: IconRowAlign;\n children?: ReactNode;\n}\n\nexport function IconRow({\n icon,\n align = \"top\",\n className,\n children,\n ...rest\n}: IconRowProps) {\n return (\n <div className={cn(\"icon-row\", className)} data-align={align} {...rest}>\n <span className=\"icon-row-icon\">{icon}</span>\n <div className=\"icon-row-body\">{children}</div>\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AvatarStack — overlapping circular initials avatars with a `+N`\n * overflow chip. Border = `--background` to knock the avatars out of\n * the surface they sit on.\n *\n * @example\n * <AvatarStack\n * items={[{ id: \"y\", short: \"YT\", color: \"#1e50a2\", name: \"Yuki\" }]}\n * max={3}\n * />\n */\nexport interface AvatarStackItem {\n id: string;\n short: string;\n color: string;\n name?: string;\n}\n\nexport interface AvatarStackProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n items: AvatarStackItem[];\n /** Maximum number of avatars before overflow chip. Default 3. */\n max?: number;\n /** Pixel size of each avatar. Default 22. */\n size?: number;\n}\n\nexport function AvatarStack({\n items,\n max = 3,\n size = 22,\n className,\n style,\n ...rest\n}: AvatarStackProps) {\n const visible = items.slice(0, max);\n const overflow = Math.max(0, items.length - visible.length);\n const fontPx = Math.max(8, Math.round(size * 0.43));\n return (\n <div className={cn(\"avatar-stack\", className)} style={style} {...rest}>\n {visible.map((item) => (\n <span\n key={item.id}\n className=\"avatar-stack-item\"\n title={item.name ?? item.short}\n style={{ background: item.color, width: size, height: size, fontSize: fontPx }}\n >\n {item.short}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className=\"avatar-stack-item avatar-stack-overflow\"\n style={{ width: size, height: size, fontSize: fontPx }}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../cn\";\n\n/**\n * ColorSwatchCheckbox — Google-Calendar-style \"color square = on/off\"\n * checkbox. Border paints in `color`; fill paints `color` when checked.\n * Hidden native `<input>` keeps it a real form control + a11y target.\n *\n * @example\n * <ColorSwatchCheckbox\n * color=\"#4c6cb3\"\n * label=\"godx-admin · Product\"\n * checked={shown}\n * onChange={(next) => setShown(next)}\n * />\n */\nexport interface ColorSwatchCheckboxProps\n extends Omit<ComponentProps<\"label\">, \"onChange\"> {\n color: string;\n label: string;\n checked: boolean;\n onChange?: (next: boolean) => void;\n /** Marks the row as read-only (renders an \"R\" hint instead of a swatch). */\n readonly?: boolean;\n disabled?: boolean;\n}\n\nexport function ColorSwatchCheckbox({\n color,\n label,\n checked,\n onChange,\n readonly = false,\n disabled = false,\n className,\n ...rest\n}: ColorSwatchCheckboxProps) {\n return (\n <label className={cn(\"swatch-check\", className)} {...rest}>\n <span\n className=\"swatch-check-box\"\n style={{\n color,\n background: checked ? color : \"transparent\",\n }}\n >\n {checked && (\n <Check size={10} strokeWidth={3} color=\"white\" aria-hidden=\"true\" />\n )}\n </span>\n <span className=\"swatch-check-name\">{label}</span>\n {readonly && (\n <span className=\"swatch-check-readonly\" title=\"read-only\">\n R\n </span>\n )}\n <input\n type=\"checkbox\"\n className=\"swatch-check-native\"\n checked={checked}\n disabled={disabled}\n onChange={(e) => onChange?.(e.target.checked)}\n />\n </label>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * CalendarOption — color-swatch + name label used inside calendar\n * pickers (e.g. \"Save to which calendar\" select). Stays presentational;\n * the consuming select / dropdown handles state.\n */\nexport interface CalendarOptionProps extends ComponentProps<\"span\"> {\n color: string;\n name: string;\n /** Suffix label (e.g. \"(read-only)\"). */\n meta?: string;\n}\n\nexport function CalendarOption({\n color,\n name,\n meta,\n className,\n ...rest\n}: CalendarOptionProps) {\n return (\n <span className={cn(\"cal-opt\", className)} {...rest}>\n <span className=\"cal-opt-swatch\" style={{ background: color }} />\n <span className=\"cal-opt-name\">{name}</span>\n {meta && <span className=\"cal-opt-meta\">· {meta}</span>}\n </span>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AttendeeChip — pill with leading initials avatar + name + optional\n * remove (✕). Used in event composer attendee fields and similar\n * \"selected items\" chip arrays.\n */\nexport interface AttendeeChipProps extends ComponentProps<\"span\"> {\n name: string;\n short: string;\n color: string;\n onRemove?: () => void;\n}\n\nexport function AttendeeChip({\n name,\n short,\n color,\n onRemove,\n className,\n ...rest\n}: AttendeeChipProps) {\n return (\n <span className={cn(\"attendee-chip\", className)} {...rest}>\n <span className=\"attendee-chip-avatar\" style={{ background: color }}>\n {short}\n </span>\n <span className=\"attendee-chip-name\">{name}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"attendee-chip-close\"\n onClick={onRemove}\n aria-label={`Remove ${name}`}\n >\n <X size={11} aria-hidden=\"true\" />\n </button>\n )}\n </span>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AttendeeListItem — row used in event-detail attendee lists. Avatar,\n * name, optional \"(you)\" marker, optional org line, optional trailing\n * status badge slot.\n */\nexport interface AttendeeListItemProps extends ComponentProps<\"div\"> {\n name: string;\n short: string;\n color: string;\n /** Display \"(you)\" suffix. */\n isSelf?: boolean;\n /** Show \"Organizer · \" prefix in the org line. */\n isOrganizer?: boolean;\n org?: string;\n /** Trailing slot — typically a small Badge. */\n status?: ReactNode;\n /** i18n override for \"(you)\" — defaults to en. */\n selfLabel?: string;\n organizerLabel?: string;\n}\n\nexport function AttendeeListItem({\n name,\n short,\n color,\n isSelf = false,\n isOrganizer = false,\n org,\n status,\n selfLabel = \"(you)\",\n organizerLabel = \"Organizer\",\n className,\n ...rest\n}: AttendeeListItemProps) {\n return (\n <div className={cn(\"attendee-row\", className)} {...rest}>\n <span className=\"attendee-row-avatar\" style={{ background: color }}>\n {short}\n </span>\n <div className=\"attendee-row-body\">\n <div className=\"attendee-row-name\">\n {name}\n {isSelf && <span className=\"attendee-row-me\">{selfLabel}</span>}\n </div>\n {(org || isOrganizer) && (\n <div className=\"attendee-row-org\">\n {isOrganizer ? `${organizerLabel} · ` : \"\"}\n {org}\n </div>\n )}\n </div>\n {status}\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AllDayChip — solid-color rounded chip used for all-day events across\n * week-band, day-header strip, and month-cell rows.\n *\n * Sizes:\n * - `compact` — week-band / detail rows\n * - `month` — month-cell rows (slightly smaller radius + font)\n * - `pill` — day-view header (full pill radius, larger font)\n */\nexport type AllDayChipSize = \"compact\" | \"month\" | \"pill\";\n\nexport interface AllDayChipProps extends ComponentProps<\"button\"> {\n color: string;\n size?: AllDayChipSize;\n children: ComponentProps<\"button\">[\"children\"];\n}\n\nexport function AllDayChip({\n color,\n size = \"compact\",\n className,\n style,\n children,\n ...rest\n}: AllDayChipProps) {\n return (\n <button\n type=\"button\"\n className={cn(\"allday-chip\", className)}\n data-size={size}\n style={{ background: color, ...style }}\n {...rest}\n >\n {children}\n </button>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * DayHeaderPill — small day-of-week label + 32px circular day-of-month\n * pill rendered above each Week-view column.\n *\n * default — neutral\n * today — filled accent + white number\n * selected — soft accent tint + accent number\n */\nexport type DayHeaderPillState = \"default\" | \"today\" | \"selected\";\n\nexport interface DayHeaderPillProps extends ComponentProps<\"div\"> {\n dow: string;\n day: number;\n state?: DayHeaderPillState;\n}\n\nexport function DayHeaderPill({\n dow,\n day,\n state = \"default\",\n className,\n ...rest\n}: DayHeaderPillProps) {\n return (\n <div className={cn(\"day-pill\", className)} data-state={state} {...rest}>\n <span className=\"day-pill-dow\">{dow}</span>\n <span className=\"day-pill-num\">{day}</span>\n </div>\n );\n}\n","// Time helpers shared by the calendar / scheduling primitives. These\n// stay generic (no event-shape assumptions) so other surfaces — a\n// rota planner, a focus-time visualiser — can reuse the same math.\n\n/**\n * Locale used by `fmtHour`. Adds the JA suffix style (`9時`) for `ja`\n * and keeps `HH:00` for everything else.\n */\nexport type TimeLocale = \"vi\" | \"ja\" | \"en\";\n\n/** Parse \"HH:MM\" into { h, m }. Tolerates missing minutes. */\nexport function parseHM(value: string): { h: number; m: number } {\n const [hStr, mStr] = value.split(\":\");\n const h = Number(hStr);\n const m = Number(mStr ?? \"0\");\n return { h: Number.isFinite(h) ? h : 0, m: Number.isFinite(m) ? m : 0 };\n}\n\n/** Pixel offset for a given clock time within a day-grid column. */\nexport function minToY(\n h: number,\n m: number,\n options: { dayStartH: number; pxPerMin: number },\n): number {\n return (h - options.dayStartH) * 60 * options.pxPerMin + m * options.pxPerMin;\n}\n\n/** Format an hour cell label per locale. */\nexport function fmtHour(h: number, locale: TimeLocale): string {\n if (locale === \"ja\") return `${h}時`;\n return `${String(h).padStart(2, \"0\")}:00`;\n}\n\n/** Default day-grid sizing the WeekView / DayView screens use. */\nexport const DEFAULT_GRID = {\n dayStartH: 6,\n dayEndH: 22,\n pxPerMin: 0.9, // 1 hour = 54 px\n} as const;\n\n/**\n * Build a 6×7 Mon-first month grid for (year, monthIdx1to12). Lead-in\n * cells from the previous month and tail cells from the next month are\n * flagged `dim: true`. Shared by MiniMonth + MonthView.\n */\nexport interface MonthCellRef {\n y: number;\n m: number;\n d: number;\n dim: boolean;\n}\nexport function buildMonthGrid(year: number, month: number): MonthCellRef[] {\n const first = new Date(year, month - 1, 1);\n const dow0 = (first.getDay() + 6) % 7;\n const daysInMonth = new Date(year, month, 0).getDate();\n const prevDays = new Date(year, month - 1, 0).getDate();\n const cells: MonthCellRef[] = [];\n for (let i = dow0 - 1; i >= 0; i--) {\n cells.push({ y: year, m: month - 1, d: prevDays - i, dim: true });\n }\n for (let d = 1; d <= daysInMonth; d++) {\n cells.push({ y: year, m: month, d, dim: false });\n }\n let tail = 1;\n while (cells.length < 42) {\n cells.push({ y: year, m: month + 1, d: tail++, dim: true });\n }\n return cells;\n}\n\n/** YYYY-MM-DD key for a {y,m,d} triple. */\nexport function ymd(y: number, m: number, d: number): string {\n return `${y}-${String(m).padStart(2, \"0\")}-${String(d).padStart(2, \"0\")}`;\n}\n","import { useEffect, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\nimport { DEFAULT_GRID, fmtHour, minToY, type TimeLocale } from \"./time\";\n\n/**\n * TimeGrid primitives — `GridColumn` (a day-of-events column with\n * hour-line dividers), `TimeGutter` (the labelled hour rail next to\n * it), and `NowLine` (auto-refreshing horizontal indicator at the\n * current time). All consume `--accent-color`, `--surface-*`, `--border`\n * via the `.tg-*` classes in shell.css; no service-specific tokens.\n *\n * @example\n * <div style={{ display: \"grid\", gridTemplateColumns: \"60px 1fr\" }}>\n * <TimeGutter dayStartH={6} dayEndH={22} pxPerMin={0.9} locale=\"vi\" />\n * <GridColumn dayStartH={6} dayEndH={22} pxPerMin={0.9} isToday>\n * <NowLine dayStartH={6} pxPerMin={0.9} />\n * <EventBlock ... />\n * </GridColumn>\n * </div>\n */\n\nexport interface GridColumnProps {\n /** Day-start hour (inclusive). Default 6. */\n dayStartH?: number;\n /** Day-end hour (exclusive). Default 22. */\n dayEndH?: number;\n /** Vertical pixels per minute. Default 0.9 (1h = 54px). */\n pxPerMin?: number;\n /** Tints column subtly when true. */\n isToday?: boolean;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n}\n\nexport function GridColumn({\n dayStartH = DEFAULT_GRID.dayStartH,\n dayEndH = DEFAULT_GRID.dayEndH,\n pxPerMin = DEFAULT_GRID.pxPerMin,\n isToday = false,\n className,\n style,\n children,\n}: GridColumnProps) {\n const rows: ReactNode[] = [];\n const rowHeight = 60 * pxPerMin;\n for (let h = dayStartH; h < dayEndH; h++) {\n rows.push(<div key={h} className=\"tg-hour-row\" style={{ height: rowHeight }} />);\n }\n return (\n <div\n className={cn(\"tg-col\", className)}\n data-today={isToday || undefined}\n style={style}\n >\n {rows}\n {children}\n </div>\n );\n}\n\nexport interface TimeGutterProps {\n dayStartH?: number;\n dayEndH?: number;\n pxPerMin?: number;\n locale?: TimeLocale;\n className?: string;\n}\n\nexport function TimeGutter({\n dayStartH = DEFAULT_GRID.dayStartH,\n dayEndH = DEFAULT_GRID.dayEndH,\n pxPerMin = DEFAULT_GRID.pxPerMin,\n locale = \"en\",\n className,\n}: TimeGutterProps) {\n const rows: ReactNode[] = [];\n const rowHeight = 60 * pxPerMin;\n for (let i = 0; i < dayEndH - dayStartH; i++) {\n rows.push(\n <div key={i} className=\"tg-hour-cell\" style={{ height: rowHeight }}>\n <span className=\"tg-hour-label\">\n {i === 0 ? \"\" : fmtHour(dayStartH + i, locale)}\n </span>\n </div>,\n );\n }\n return <div className={cn(\"tg-gutter\", className)}>{rows}</div>;\n}\n\nexport interface NowLineProps {\n /** Optional override; defaults to the live current time. */\n nowDate?: Date;\n dayStartH?: number;\n pxPerMin?: number;\n /** Auto-refresh interval in ms. Default 60_000 (1 minute). */\n refreshMs?: number;\n}\n\nexport function NowLine({\n nowDate,\n dayStartH = DEFAULT_GRID.dayStartH,\n pxPerMin = DEFAULT_GRID.pxPerMin,\n refreshMs = 60_000,\n}: NowLineProps) {\n const [tick, setTick] = useState(0);\n useEffect(() => {\n if (nowDate || refreshMs <= 0) return;\n const handle = window.setInterval(() => setTick((t) => t + 1), refreshMs);\n return () => window.clearInterval(handle);\n }, [nowDate, refreshMs]);\n\n const d = nowDate ?? new Date();\n void tick;\n const y = minToY(d.getHours(), d.getMinutes(), { dayStartH, pxPerMin });\n if (y < 0) return null;\n\n return (\n <>\n <div className=\"tg-now-dot\" style={{ top: y - 5 }} />\n <div className=\"tg-now-line\" style={{ top: y }} />\n </>\n );\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\nimport { DEFAULT_GRID, minToY, parseHM } from \"./time\";\nimport type { CalendarEvent, EventBlockVariant } from \"./types\";\n\n/**\n * EventBlock — absolutely-positioned timed-event chip inside a\n * `GridColumn`. Supports four visual treatments:\n *\n * - `solid` — saturated brand color (customer / external meets)\n * - `tint` — soft-mixed background (organizer / accepted)\n * - `tentative` — diagonal hatch over a soft tint\n * - `focus` — repeating subtle stripes (deep-work blocks)\n *\n * Multi-event overlap is handled by `lane` / `lanes` props (horizontal\n * slicing of the column). The selected state paints a 2px accent ring\n * via `--accent-color`.\n *\n * Service-agnostic: pass any `CalendarEvent`-shaped object + a `color`.\n */\nexport interface EventBlockProps {\n event: CalendarEvent;\n /** Event color (typically from the event's calendar). */\n color: string;\n variant?: EventBlockVariant;\n /** Whether the chip renders as the selected event (accent ring). */\n selected?: boolean;\n /** Horizontal lane index (0-based) for overlap layout. */\n lane?: number;\n /** Total lane count in the day. */\n lanes?: number;\n /** Day-grid configuration — must match the parent GridColumn. */\n dayStartH?: number;\n pxPerMin?: number;\n onClick?: (event: CalendarEvent) => void;\n /** Optional render-prop slot for trailing line (e.g. \"cá nhân\"). */\n footer?: ReactNode;\n className?: string;\n}\n\nexport function EventBlock({\n event,\n color,\n variant = \"tint\",\n selected = false,\n lane = 0,\n lanes = 1,\n dayStartH = DEFAULT_GRID.dayStartH,\n pxPerMin = DEFAULT_GRID.pxPerMin,\n onClick,\n footer,\n className,\n}: EventBlockProps) {\n const startVal = event.start ?? \"00:00\";\n const endVal = event.end ?? \"23:59\";\n const { h: sh, m: sm } = parseHM(startVal);\n const { h: eh, m: em } = parseHM(endVal);\n const top = minToY(sh, sm, { dayStartH, pxPerMin });\n const height = Math.max(20, minToY(eh, em, { dayStartH, pxPerMin }) - top - 1);\n const durationMin = eh * 60 + em - (sh * 60 + sm);\n const isShort = durationMin < 45;\n\n const bg =\n variant === \"focus\"\n ? `repeating-linear-gradient(135deg, ${color}24 0 6px, ${color}10 6px 12px)`\n : variant === \"tentative\"\n ? `repeating-linear-gradient(135deg, ${color}38 0 5px, transparent 5px 10px), color-mix(in oklch, ${color} 16%, var(--background))`\n : variant === \"solid\"\n ? color\n : `color-mix(in oklch, ${color} 18%, var(--background))`;\n\n const textColor = variant === \"solid\" ? \"white\" : color;\n\n const widthPct = `calc(${100 / Math.max(1, lanes)}% - 4px)`;\n const leftPct = `calc(${(100 * lane) / Math.max(1, lanes)}% + 2px)`;\n\n const style: CSSProperties = {\n top,\n height,\n left: leftPct,\n width: widthPct,\n background: bg,\n color: textColor,\n };\n\n return (\n <button\n type=\"button\"\n className={cn(\"event-block\", className)}\n data-short={isShort || undefined}\n data-selected={selected || undefined}\n data-variant={variant}\n style={style}\n onClick={() => onClick?.(event)}\n >\n <div style={{ display: \"flex\", gap: 4, alignItems: \"baseline\", minWidth: 0 }}>\n <span className=\"event-block-title\">{event.title}</span>\n </div>\n {!isShort && (\n <div className=\"event-block-meta\">\n {event.start}–{event.end}\n {event.location && (\n <span style={{ marginLeft: 6, opacity: 0.75 }}>· {event.location}</span>\n )}\n </div>\n )}\n {!isShort && footer && <div className=\"event-block-foot\">{footer}</div>}\n </button>\n );\n}\n\n/**\n * Naïve lane allocator for overlapping timed events on a single day.\n * Mutates / annotates input objects with `_lane` and `_lanes`; returns\n * the sorted array. Reused by Week + Day screens.\n */\nexport interface LanedEvent extends CalendarEvent {\n _lane: number;\n _lanes: number;\n}\n\nexport function layoutEvents(dayEvents: CalendarEvent[]): LanedEvent[] {\n const evs = [...dayEvents]\n .filter((e): e is CalendarEvent & { start: string; end: string } =>\n typeof e.start === \"string\" && typeof e.end === \"string\",\n )\n .sort((a, b) => a.start.localeCompare(b.start));\n const lanes: (CalendarEvent & { end: string })[][] = [];\n const annotated: LanedEvent[] = [];\n for (const e of evs) {\n let placed = false;\n for (let i = 0; i < lanes.length; i++) {\n const last = lanes[i][lanes[i].length - 1];\n if (last.end <= e.start) {\n lanes[i].push(e);\n annotated.push({ ...e, _lane: i, _lanes: 0 });\n placed = true;\n break;\n }\n }\n if (!placed) {\n lanes.push([e]);\n annotated.push({ ...e, _lane: lanes.length - 1, _lanes: 0 });\n }\n }\n const laneCount = Math.max(1, lanes.length);\n for (const a of annotated) a._lanes = laneCount;\n return annotated;\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * MonthCell — one day cell of a 6×7 month grid. Render-prop friendly:\n * the `events` slot is anything the caller wants (`EventPill` /\n * `AllDayChip` / their own render). Includes a \"+N more\" overflow row\n * helper.\n */\nexport interface MonthCellProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n day: number;\n /** Is this the today cell? Paints the day-number with accent. */\n today?: boolean;\n /** Is this cell from a different month? Dimmed. */\n dim?: boolean;\n /** Sat/Sun cell — slight tint. */\n weekend?: boolean;\n /** Optional small header chip next to the number (e.g. \"Th. 5\" when day === 1). */\n monthLabel?: ReactNode;\n /** Events to render — typically EventPill / AllDayChip components. */\n events?: ReactNode;\n /** Number of additional events beyond what's rendered. */\n overflow?: number;\n /** Localised \"+N more\" label builder. */\n formatOverflow?: (n: number) => ReactNode;\n}\n\nexport function MonthCell({\n day,\n today = false,\n dim = false,\n weekend = false,\n monthLabel,\n events,\n overflow = 0,\n formatOverflow,\n className,\n ...rest\n}: MonthCellProps) {\n return (\n <div\n className={cn(\"month-cell\", className)}\n data-dim={dim || undefined}\n data-weekend={weekend || undefined}\n {...rest}\n >\n <div className=\"month-cell-head\">\n <span className=\"month-cell-num\" data-state={today ? \"today\" : undefined}>\n {day}\n </span>\n {monthLabel && <span className=\"month-cell-month-label\">{monthLabel}</span>}\n </div>\n <div className=\"month-cell-events\">\n {events}\n {overflow > 0 && (\n <span className=\"month-cell-more\">\n {formatOverflow ? formatOverflow(overflow) : `+ ${overflow} more`}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * EventPill — single-line clickable row for month-cell event lists.\n * Layout: `dot · HH:MM · title`. For all-day variants, callers should\n * use `AllDayChip` instead (different visual).\n */\nexport interface EventPillProps extends ComponentProps<\"button\"> {\n color: string;\n time?: string;\n title: string;\n dim?: boolean;\n}\n\nexport function EventPill({\n color,\n time,\n title,\n dim = false,\n className,\n ...rest\n}: EventPillProps) {\n return (\n <button\n type=\"button\"\n className={cn(\"event-pill\", className)}\n data-dim={dim || undefined}\n {...rest}\n >\n <span className=\"event-pill-dot\" style={{ background: color }} />\n {time && <span className=\"event-pill-time\">{time}</span>}\n <span className=\"event-pill-title\">{title}</span>\n </button>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"../../cn\";\nimport { buildMonthGrid, ymd } from \"./time\";\n\n/**\n * MiniMonth — compact 6×7 month grid for sidebars and date pickers.\n * Mon-first, 22px-cell. Renders an event dot when `eventDots[ymd]` is\n * truthy and `--accent-color` for today/selected states.\n */\nexport interface MiniMonthYMD {\n y: number;\n m: number;\n d: number;\n}\n\nexport interface MiniMonthProps extends Omit<ComponentProps<\"div\">, \"onSelect\"> {\n /** Year of the grid. */\n year: number;\n /** Month (1–12) of the grid. */\n month: number;\n today: MiniMonthYMD;\n selected?: MiniMonthYMD;\n /** Map of YYYY-MM-DD → has-event boolean. */\n eventDots?: Record<string, boolean>;\n onSelect?: (ymd: MiniMonthYMD) => void;\n /** Day-of-week labels — Mon-first. Default JA single chars. */\n dowLabels?: readonly [string, string, string, string, string, string, string];\n}\n\nconst DEFAULT_DOWS = [\"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"] as const;\n\nexport function MiniMonth({\n year,\n month,\n today,\n selected,\n eventDots,\n onSelect,\n dowLabels = DEFAULT_DOWS,\n className,\n ...rest\n}: MiniMonthProps) {\n const cells = buildMonthGrid(year, month);\n return (\n <div className={cn(\"mini-month\", className)} {...rest}>\n {dowLabels.map((w, i) => (\n <div key={i} className=\"mini-month-dow\">\n {w}\n </div>\n ))}\n {cells.map((c, i) => {\n const isWeekend = i % 7 >= 5;\n const isToday = !c.dim && today.y === c.y && today.m === c.m && today.d === c.d;\n const isSel =\n !c.dim &&\n selected &&\n selected.y === c.y &&\n selected.m === c.m &&\n selected.d === c.d;\n const state = isToday ? \"today\" : isSel ? \"selected\" : undefined;\n const hasDot = !c.dim && eventDots ? Boolean(eventDots[ymd(c.y, c.m, c.d)]) : false;\n return (\n <button\n key={i}\n type=\"button\"\n className=\"mini-month-cell\"\n data-state={state}\n data-dim={c.dim || undefined}\n data-weekend={isWeekend || undefined}\n onClick={() => !c.dim && onSelect?.({ y: c.y, m: c.m, d: c.d })}\n disabled={c.dim}\n >\n <span>{c.d}</span>\n {hasDot && !isToday && <span className=\"mini-month-dot\" />}\n </button>\n );\n })}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * AvailabilityRow — one person × N time-slot row used in scheduling /\n * find-a-time grids. Generic over the slot dimension: `slots[i] = 0`\n * (free), `1` (tentative — hatched), `2` (busy — solid tint). An\n * optional `selectedRange` paints the picked-time overlay in accent.\n *\n * Two-cell grid: `personSlot | cellsSlot`, sized externally.\n */\nexport interface AvailabilityRowProps {\n /** Person slot — typically `<AttendeeListItem>` or a name + avatar. */\n person: ReactNode;\n /** 0 = free, 1 = tentative, 2 = busy — one per slot index. */\n slots: ReadonlyArray<0 | 1 | 2>;\n /** [startSlotInclusive, endSlotExclusive] — paints the accent overlay. */\n selectedRange?: [number, number] | null;\n className?: string;\n}\n\nexport function AvailabilityRow({\n person,\n slots,\n selectedRange,\n className,\n}: AvailabilityRowProps) {\n const slotCount = slots.length || 1;\n return (\n <div className={cn(\"avail-row\", className)}>\n <div className=\"avail-row-person\">{person}</div>\n <div\n className=\"avail-row-cells\"\n style={{ gridTemplateColumns: `repeat(${slotCount}, 1fr)` }}\n >\n {slots.map((v, i) => (\n <div key={i} className=\"avail-cell\" data-state={v} />\n ))}\n {selectedRange && (\n <div\n className=\"avail-row-overlay\"\n style={{\n left: `${(selectedRange[0] / slotCount) * 100}%`,\n width: `${((selectedRange[1] - selectedRange[0]) / slotCount) * 100}%`,\n }}\n />\n )}\n </div>\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\n\n/**\n * SuggestedSlotCard — small button-shaped card surfacing a scheduling\n * recommendation. Two visual treatments: `default` (neutral border) and\n * `best` (accent border + accent text, e.g. \"all attendees free\").\n */\nexport interface SuggestedSlotCardProps extends ComponentProps<\"button\"> {\n label: ReactNode;\n meta?: ReactNode;\n /** Highlight as the best/recommended option. */\n best?: boolean;\n}\n\nexport function SuggestedSlotCard({\n label,\n meta,\n best = false,\n className,\n ...rest\n}: SuggestedSlotCardProps) {\n return (\n <button\n type=\"button\"\n className={cn(\"slot-card\", className)}\n data-best={best || undefined}\n {...rest}\n >\n <span className=\"slot-card-label\">{label}</span>\n {meta && <span className=\"slot-card-meta\">{meta}</span>}\n </button>\n );\n}\n","import { ChevronDown, ChevronLeft, ChevronRight, Plus, Search } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Button } from \"../../general/Button\";\nimport {\n ColorSwatchCheckbox,\n MiniMonth,\n type CalendarRef,\n type MiniMonthYMD,\n} from \"../../data-display/calendar/index\";\n\n/**\n * CalendarSidebar — left rail for the calendar screen:\n * 1. \"Create event\" pill CTA\n * 2. Mini-month with prev/next nav\n * 3. People search field\n * 4. Three grouped calendar lists (mine / org / shared)\n *\n * Generic: takes a flat list of `CalendarRef` and groups by `c.group`.\n * Labels are caller-supplied so the sidebar is locale-agnostic.\n */\nexport interface CalendarSidebarLabels {\n createEvent: string;\n searchPeople: string;\n /** Section labels keyed by `CalendarRef.group`. */\n sections: Record<string, string>;\n /** Mini-month title (e.g. \"5月 2026\"). */\n monthLabel: string;\n /** Footer CTA label (e.g. \"Add another calendar\"). */\n addCalendar?: string;\n}\n\nexport interface CalendarSidebarProps {\n today: MiniMonthYMD;\n selected: MiniMonthYMD;\n /** Year + month for the mini-month grid. */\n miniMonthYear: number;\n miniMonthMonth: number;\n calendars: CalendarRef[];\n eventDots?: Record<string, boolean>;\n labels: CalendarSidebarLabels;\n /** Order of group keys to render. */\n groupOrder?: string[];\n onSelectDate?: (ymd: MiniMonthYMD) => void;\n onToggleCalendar?: (id: string) => void;\n onCreate?: () => void;\n onPrevMonth?: () => void;\n onNextMonth?: () => void;\n onAddCalendar?: () => void;\n /** Optional dow labels passed straight through to MiniMonth. */\n miniMonthDows?: MiniMonthYMD extends infer _ ? readonly [string, string, string, string, string, string, string] : never;\n}\n\nexport function CalendarSidebar({\n today,\n selected,\n miniMonthYear,\n miniMonthMonth,\n calendars,\n eventDots,\n labels,\n groupOrder,\n onSelectDate,\n onToggleCalendar,\n onCreate,\n onPrevMonth,\n onNextMonth,\n onAddCalendar,\n miniMonthDows,\n}: CalendarSidebarProps) {\n const groups = groupOrder ?? Array.from(new Set(calendars.map((c) => c.group ?? \"default\")));\n return (\n <aside className=\"cal-sidebar\">\n <div style={{ padding: 14 }}>\n <button type=\"button\" className=\"cal-sidebar-create\" onClick={onCreate}>\n <span className=\"cal-sidebar-create-icon\">\n <Plus size={15} />\n </span>\n <span>{labels.createEvent}</span>\n </button>\n </div>\n\n <div style={{ padding: \"0 12px 12px\" }}>\n <div\n className=\"row gap-1\"\n style={{ marginBottom: 6, padding: \"0 4px\" }}\n >\n <span style={{ fontSize: 12, fontWeight: 500, color: \"var(--foreground)\" }}>\n {labels.monthLabel}\n </span>\n <span className=\"ml-auto\" style={{ display: \"flex\", gap: 2 }}>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 22, height: 22, padding: 0 }}\n onClick={onPrevMonth}\n aria-label=\"Previous month\"\n >\n <ChevronLeft size={13} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 22, height: 22, padding: 0 }}\n onClick={onNextMonth}\n aria-label=\"Next month\"\n >\n <ChevronRight size={13} />\n </Button>\n </span>\n </div>\n <MiniMonth\n year={miniMonthYear}\n month={miniMonthMonth}\n today={today}\n selected={selected}\n eventDots={eventDots}\n onSelect={onSelectDate}\n dowLabels={miniMonthDows}\n />\n </div>\n\n <div style={{ padding: \"4px 14px 8px\" }}>\n <div className=\"cal-sidebar-search\">\n <Search size={13} color=\"var(--muted-foreground)\" />\n <input placeholder={labels.searchPeople} />\n </div>\n </div>\n\n {groups.map((group) => {\n const inGroup = calendars.filter((c) => (c.group ?? \"default\") === group);\n if (inGroup.length === 0) return null;\n return (\n <SidebarSection key={group} label={labels.sections[group] ?? group}>\n <div className=\"col\" style={{ gap: 1 }}>\n {inGroup.map((cal) => (\n <ColorSwatchCheckbox\n key={cal.id}\n color={cal.color}\n label={cal.name}\n checked={cal.shown ?? false}\n onChange={() => onToggleCalendar?.(cal.id)}\n readonly={cal.readonly}\n />\n ))}\n </div>\n </SidebarSection>\n );\n })}\n\n {onAddCalendar && labels.addCalendar && (\n <div style={{ padding: \"4px 14px 16px\" }}>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onAddCalendar}\n style={{\n padding: \"0 6px\",\n color: \"var(--muted-foreground)\",\n fontSize: 11,\n }}\n >\n <Plus size={12} /> {labels.addCalendar}\n </Button>\n </div>\n )}\n </aside>\n );\n}\n\nfunction SidebarSection({ label, children }: { label: string; children: ReactNode }) {\n return (\n <div className=\"cal-sidebar-section\">\n <div className=\"cal-sidebar-section-label\">\n {label}\n <span className=\"ml-auto\">\n <ChevronDown size={12} />\n </span>\n </div>\n {children}\n </div>\n );\n}\n","import {\n forwardRef,\n useCallback,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * SegmentedControl — single-choice toggle group with no tab-panel.\n *\n * Mirrors the canonical `.seg` strip from\n * `K:comp-pageheader.html:21-24` (day / week / month-style switch).\n * Tabs already covers the case where a switch drives panel content;\n * SegmentedControl is the bare button-row variant for toolbars, view\n * pickers, density toggles, and other \"just pick one\" UIs without\n * panel composition.\n *\n * Two visual variants:\n *\n * - `bar` → connected button row with hairline dividers between\n * items (matches `.seg`; `.seg button + button` border).\n * Default; matches the page-header reference.\n * - `pill` → rounded background, active item lifts onto `--background`\n * with a soft shadow. Matches `.tabs-pills` from Tabs.\n *\n * Controlled or uncontrolled. Pass `items` as an array of\n * `{ value, label, icon?, disabled? }` or compose `<SegmentedControl>`\n * with `<SegmentedItem>` children directly.\n *\n * @example\n * <SegmentedControl\n * items={[\n * { value: \"day\", label: \"日\" },\n * { value: \"week\", label: \"週\" },\n * { value: \"month\", label: \"月\" },\n * ]}\n * defaultValue=\"month\"\n * />\n *\n * @example with icons + controlled state\n * <SegmentedControl\n * value={view}\n * onChange={setView}\n * variant=\"pill\"\n * items={[\n * { value: \"grid\", label: \"Grid\", icon: <LayoutGrid size={13} /> },\n * { value: \"list\", label: \"List\", icon: <List size={13} /> },\n * ]}\n * />\n */\n\nimport type { SizeProp } from \"../../props\";\n\nexport type SegmentedControlVariant = \"bar\" | \"pill\";\n/** Subset of the shared `SizeProp` — SegmentedControl only ships the\n * two compact-side rungs in practice (no `\"large\"` design canon yet). */\nexport type SegmentedControlSize = Exclude<SizeProp, \"large\">;\nexport type SegmentedControlOrientation = \"horizontal\" | \"vertical\";\n\nexport interface SegmentedControlItem<V extends string = string> {\n value: V;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlProps<V extends string = string>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n items: SegmentedControlItem<V>[];\n value?: V;\n defaultValue?: V;\n onChange?: (next: V) => void;\n variant?: SegmentedControlVariant;\n size?: SegmentedControlSize;\n /** Axis of the radiogroup — controls Arrow-key direction for the\n * roving-tabindex pattern (per WAI-ARIA APG radiogroup). */\n orientation?: SegmentedControlOrientation;\n /** Accessible name for the group — falls back to a generic role label. */\n \"aria-label\"?: string;\n}\n\nexport function SegmentedControl<V extends string = string>({\n items,\n value: controlled,\n defaultValue,\n onChange,\n variant = \"bar\",\n size = \"default\",\n orientation = \"horizontal\",\n className,\n ...rest\n}: SegmentedControlProps<V>) {\n const [internal, setInternal] = useState<V | undefined>(\n defaultValue ?? items[0]?.value,\n );\n const active = controlled ?? internal;\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const select = useCallback(\n (next: V) => {\n if (controlled === undefined) setInternal(next);\n onChange?.(next);\n },\n [controlled, onChange],\n );\n\n // WAI-ARIA APG roving-tabindex: only the checked item is in the\n // page Tab order; Arrow keys roam between items in the group.\n // If the active value is disabled / missing, fall back to the\n // first enabled item so the group is always reachable via Tab.\n const enabledIndices = items.reduce<number[]>((acc, item, i) => {\n if (!item.disabled) acc.push(i);\n return acc;\n }, []);\n const activeIndex = items.findIndex((it) => it.value === active);\n const tabStopIndex =\n activeIndex >= 0 && !items[activeIndex]?.disabled\n ? activeIndex\n : (enabledIndices[0] ?? -1);\n\n const moveFocus = useCallback(\n (currentIndex: number, direction: 1 | -1) => {\n const enabled = enabledIndices;\n if (enabled.length === 0) return;\n const currentSlot = enabled.indexOf(currentIndex);\n const nextSlot =\n currentSlot === -1\n ? 0\n : (currentSlot + direction + enabled.length) % enabled.length;\n const nextIndex = enabled[nextSlot]!;\n const nextItem = items[nextIndex]!;\n itemRefs.current[nextIndex]?.focus();\n select(nextItem.value);\n },\n [enabledIndices, items, select],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLButtonElement>, index: number) => {\n const forwardKey = orientation === \"vertical\" ? \"ArrowDown\" : \"ArrowRight\";\n const backwardKey = orientation === \"vertical\" ? \"ArrowUp\" : \"ArrowLeft\";\n if (event.key === forwardKey) {\n event.preventDefault();\n moveFocus(index, 1);\n } else if (event.key === backwardKey) {\n event.preventDefault();\n moveFocus(index, -1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n const first = enabledIndices[0];\n if (first !== undefined) {\n itemRefs.current[first]?.focus();\n select(items[first]!.value);\n }\n } else if (event.key === \"End\") {\n event.preventDefault();\n const last = enabledIndices[enabledIndices.length - 1];\n if (last !== undefined) {\n itemRefs.current[last]?.focus();\n select(items[last]!.value);\n }\n } else if (event.key === \" \" || event.key === \"Enter\") {\n event.preventDefault();\n const current = items[index];\n if (current && !current.disabled) select(current.value);\n }\n },\n [enabledIndices, items, moveFocus, orientation, select],\n );\n\n const rootClass =\n variant === \"pill\" ? \"tabs-pills\" : \"segmented\";\n\n return (\n <div\n role=\"radiogroup\"\n aria-orientation={orientation}\n className={cn(\n rootClass,\n size === \"small\" && \"segmented-small\",\n className,\n )}\n {...rest}\n >\n {items.map((item, index) => {\n const isActive = item.value === active;\n const itemClass =\n variant === \"pill\" ? \"tabs-pill\" : \"segmented-item\";\n const isTabStop = index === tabStopIndex;\n return (\n <button\n key={item.value}\n ref={(node) => {\n itemRefs.current[index] = node;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n data-state={isActive ? \"active\" : \"inactive\"}\n disabled={item.disabled}\n tabIndex={isTabStop ? 0 : -1}\n className={itemClass}\n onClick={() => !item.disabled && select(item.value)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {item.icon}\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import {\n Bell,\n ChevronLeft,\n ChevronRight,\n Search,\n Settings,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Button } from \"../../general/Button\";\nimport {\n SegmentedControl,\n type SegmentedControlItem,\n} from \"../../data-display/SegmentedControl\";\n\n/**\n * CalendarTopbar — top rail for the calendar screen:\n * - product sticker + product name + tenant tag\n * - Today button + prev/next nav\n * - main title (date range / month / etc.)\n * - search field (cmd-K)\n * - bell + settings icon buttons\n * - view-switcher segmented control\n * - viewer avatar\n *\n * Generic — service identity strings are caller-supplied so the topbar\n * stays product-agnostic.\n */\nexport interface CalendarTopbarProps<V extends string = string> {\n /** Sticker glyph (single character or short label). */\n sticker: ReactNode;\n productName: ReactNode;\n /** Optional tenant chip (e.g. \"Famgia\"). */\n tenant?: ReactNode;\n titleMain: ReactNode;\n titleSub?: ReactNode;\n /** View-switcher options. */\n views: SegmentedControlItem<V>[];\n view: V;\n onChangeView: (next: V) => void;\n onToday?: () => void;\n onPrev?: () => void;\n onNext?: () => void;\n todayLabel: string;\n searchPlaceholder: string;\n searchKbd?: string;\n /** Viewer avatar — typically `<Avatar size={32}>` with initials. */\n avatar?: ReactNode;\n onSearchOpen?: () => void;\n onNotificationsOpen?: () => void;\n onSettingsOpen?: () => void;\n}\n\nexport function CalendarTopbar<V extends string = string>({\n sticker,\n productName,\n tenant,\n titleMain,\n titleSub,\n views,\n view,\n onChangeView,\n onToday,\n onPrev,\n onNext,\n todayLabel,\n searchPlaceholder,\n searchKbd,\n avatar,\n onSearchOpen,\n onNotificationsOpen,\n onSettingsOpen,\n}: CalendarTopbarProps<V>) {\n return (\n <header className=\"cal-topbar\">\n <div className=\"row gap-2\" style={{ marginRight: 4 }}>\n <span className=\"cal-topbar-sticker\">{sticker}</span>\n <span className=\"cal-topbar-product\">{productName}</span>\n {tenant && <span className=\"cal-topbar-tenant\">{tenant}</span>}\n </div>\n\n <Button variant=\"secondary\" size=\"small\" onClick={onToday}>\n {todayLabel}\n </Button>\n <div className=\"row\" style={{ marginLeft: 2 }}>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onPrev}\n style={{ width: 28, padding: 0 }}\n aria-label=\"Previous\"\n >\n <ChevronLeft size={15} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onNext}\n style={{ width: 28, padding: 0 }}\n aria-label=\"Next\"\n >\n <ChevronRight size={15} />\n </Button>\n </div>\n\n <h1 className=\"cal-topbar-title\">\n {titleMain}\n {titleSub && <span className=\"cal-topbar-title-sub\">{titleSub}</span>}\n </h1>\n\n <div style={{ marginLeft: \"auto\" }} className=\"row gap-2\">\n <button\n type=\"button\"\n className=\"cal-topbar-search\"\n onClick={onSearchOpen}\n >\n <Search size={13} />\n <span>{searchPlaceholder}</span>\n {searchKbd && <span className=\"cal-topbar-search-kbd\">{searchKbd}</span>}\n </button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 30, padding: 0 }}\n onClick={onNotificationsOpen}\n aria-label=\"Notifications\"\n >\n <Bell size={15} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 30, padding: 0 }}\n onClick={onSettingsOpen}\n aria-label=\"Settings\"\n >\n <Settings size={15} />\n </Button>\n\n <SegmentedControl<V>\n items={views}\n value={view}\n onChange={onChangeView}\n variant=\"pill\"\n aria-label=\"View\"\n />\n\n <div className=\"cal-topbar-divider\" />\n {avatar ?? <span className=\"cal-topbar-avatar\">·</span>}\n </div>\n </header>\n );\n}\n","import {\n AllDayChip,\n DayHeaderPill,\n DEFAULT_GRID,\n EventBlock,\n GridColumn,\n NowLine,\n TimeGutter,\n layoutEvents,\n ymd,\n type CalendarEvent,\n type CalendarRef,\n type EventBlockVariant,\n type TimeLocale,\n} from \"../../data-display/calendar/index\";\n\n/**\n * WeekView — 7-column scrolling time grid with all-day band on top.\n * Computes the Mon-Sun window around `selected` automatically; takes a\n * flat list of `CalendarEvent` and filters them by visibility (`shown`)\n * of their owning calendar.\n *\n * Service-agnostic: the consumer maps `event.type` + `event.status` to\n * the EventBlock visual variant via `resolveVariant`.\n */\nexport interface WeekViewYMD {\n y: number;\n m: number;\n d: number;\n}\nexport interface WeekViewProps {\n today: WeekViewYMD;\n selected: WeekViewYMD;\n events: CalendarEvent[];\n calendars: CalendarRef[];\n locale?: TimeLocale;\n /** Currently selected event id (paints the accent ring). */\n selectedEventId?: string | null;\n onPickEvent?: (event: CalendarEvent) => void;\n /** Override day-of-week labels. Defaults per locale. */\n dowLabels?: readonly [string, string, string, string, string, string, string];\n /** Map an event → EventBlock variant. Defaults: customer→solid, focus→focus, tentative→tentative, else tint. */\n resolveVariant?: (event: CalendarEvent) => EventBlockVariant;\n /** All-day label (defaults: locale-specific). */\n allDayLabel?: string;\n /** Timezone label (top-left corner). */\n tzLabel?: string;\n /** Now-line override (mostly for storybook determinism). */\n nowOverride?: Date;\n}\n\nconst DOW_DEFAULTS: Record<TimeLocale, readonly [string, string, string, string, string, string, string]> = {\n ja: [\"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n vi: [\"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\", \"CN\"],\n en: [\"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\", \"SUN\"],\n};\nconst ALL_DAY_DEFAULTS: Record<TimeLocale, string> = {\n ja: \"終日\",\n vi: \"Cả ngày\",\n en: \"All day\",\n};\n\nfunction defaultResolveVariant(ev: CalendarEvent): EventBlockVariant {\n if (ev.status === \"tentative\") return \"tentative\";\n if (ev.type === \"focus\") return \"focus\";\n if (ev.type === \"customer\") return \"solid\";\n return \"tint\";\n}\n\nexport function WeekView({\n today,\n selected,\n events,\n calendars,\n locale = \"en\",\n selectedEventId,\n onPickEvent,\n dowLabels,\n resolveVariant = defaultResolveVariant,\n allDayLabel,\n tzLabel,\n nowOverride,\n}: WeekViewProps) {\n const dowLabel = dowLabels ?? DOW_DEFAULTS[locale];\n const sel = new Date(selected.y, selected.m - 1, selected.d);\n const dow0 = (sel.getDay() + 6) % 7;\n const monday = new Date(sel);\n monday.setDate(sel.getDate() - dow0);\n\n const days = Array.from({ length: 7 }, (_, i) => {\n const d = new Date(monday);\n d.setDate(monday.getDate() + i);\n return { y: d.getFullYear(), m: d.getMonth() + 1, d: d.getDate() };\n });\n\n const visible = events.filter((e) =>\n calendars.find((c) => c.id === e.calId && c.shown),\n );\n const colorOf = (e: CalendarEvent) =>\n calendars.find((c) => c.id === e.calId)?.color ?? \"#4c6cb3\";\n const allDayByDay = days.map((d) =>\n visible.filter((e) => e.allDay && e.date === ymd(d.y, d.m, d.d)),\n );\n const timedByDay = days.map((d) =>\n layoutEvents(visible.filter((e) => !e.allDay && e.date === ymd(d.y, d.m, d.d))),\n );\n\n return (\n <div className=\"cal-weekview\">\n <div className=\"cal-weekview-head\">\n <div className=\"cal-weekview-tz\">{tzLabel ?? \"GMT+09\"}</div>\n {days.map((d, i) => {\n const isToday =\n today.y === d.y && today.m === d.m && today.d === d.d;\n const isSelected =\n selected.y === d.y && selected.m === d.m && selected.d === d.d;\n return (\n <DayHeaderPill\n key={i}\n dow={dowLabel[i]}\n day={d.d}\n state={isToday ? \"today\" : isSelected ? \"selected\" : \"default\"}\n />\n );\n })}\n </div>\n\n <div className=\"cal-weekview-allday\">\n <div className=\"cal-weekview-allday-label\">\n {allDayLabel ?? ALL_DAY_DEFAULTS[locale]}\n </div>\n {days.map((d, i) => (\n <div key={i} className=\"cal-weekview-allday-cell\">\n {allDayByDay[i].map((ev) => (\n <AllDayChip\n key={ev.id}\n color={colorOf(ev)}\n size=\"compact\"\n onClick={() => onPickEvent?.(ev)}\n >\n {ev.title}\n </AllDayChip>\n ))}\n </div>\n ))}\n </div>\n\n <div className=\"cal-weekview-scroll\">\n <div className=\"cal-weekview-grid\">\n <TimeGutter\n dayStartH={DEFAULT_GRID.dayStartH}\n dayEndH={DEFAULT_GRID.dayEndH}\n pxPerMin={DEFAULT_GRID.pxPerMin}\n locale={locale}\n />\n {days.map((d, i) => {\n const isToday =\n today.y === d.y && today.m === d.m && today.d === d.d;\n return (\n <GridColumn key={i} isToday={isToday}>\n {timedByDay[i].map((ev) => (\n <EventBlock\n key={ev.id}\n event={ev}\n color={colorOf(ev)}\n variant={resolveVariant(ev)}\n selected={selectedEventId === ev.id}\n lane={ev._lane}\n lanes={ev._lanes}\n onClick={onPickEvent}\n />\n ))}\n {isToday && <NowLine nowDate={nowOverride} />}\n </GridColumn>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n","import {\n AllDayChip,\n EventPill,\n MonthCell,\n buildMonthGrid,\n ymd,\n type CalendarEvent,\n type CalendarRef,\n type TimeLocale,\n} from \"../../data-display/calendar/index\";\n\n/**\n * MonthView — 6×7 month grid (Mon-first). Each cell shows up to 4\n * events (overflow indicator below). All-day events render as solid\n * color bars (`AllDayChip` size=month); timed events render as one-line\n * `EventPill`s.\n */\nexport interface MonthViewYMD {\n y: number;\n m: number;\n d: number;\n}\nexport interface MonthViewProps {\n today: MonthViewYMD;\n selected: MonthViewYMD;\n events: CalendarEvent[];\n calendars: CalendarRef[];\n locale?: TimeLocale;\n onPickEvent?: (event: CalendarEvent) => void;\n /** Max events shown per cell before overflow row. Default 4. */\n maxEventsPerCell?: number;\n /** Override day-of-week labels. */\n dowLabels?: readonly [string, string, string, string, string, string, string];\n /** Localise the \"+N more\" suffix. */\n formatOverflow?: (n: number) => string;\n}\n\nconst DOW_DEFAULTS: Record<TimeLocale, readonly [string, string, string, string, string, string, string]> = {\n ja: [\"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n vi: [\"THỨ HAI\", \"THỨ BA\", \"THỨ TƯ\", \"THỨ NĂM\", \"THỨ SÁU\", \"THỨ BẢY\", \"CHỦ NHẬT\"],\n en: [\"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\", \"SUN\"],\n};\n\nfunction defaultOverflow(locale: TimeLocale, n: number): string {\n if (locale === \"ja\") return `+ ${n} 件`;\n if (locale === \"vi\") return `+ ${n} khác`;\n return `+ ${n} more`;\n}\n\nexport function MonthView({\n today,\n selected,\n events,\n calendars,\n locale = \"en\",\n onPickEvent,\n maxEventsPerCell = 4,\n dowLabels,\n formatOverflow,\n}: MonthViewProps) {\n const cells = buildMonthGrid(selected.y, selected.m);\n const dowLabel = dowLabels ?? DOW_DEFAULTS[locale];\n const overflowFmt = formatOverflow ?? ((n: number) => defaultOverflow(locale, n));\n\n const visible = events.filter((e) =>\n calendars.find((c) => c.id === e.calId && c.shown),\n );\n const colorOf = (e: CalendarEvent) =>\n calendars.find((c) => c.id === e.calId)?.color ?? \"#4c6cb3\";\n const byDay = (key: string) => visible.filter((e) => e.date === key);\n\n return (\n <div className=\"cal-monthview\">\n <div className=\"cal-monthview-dows\">\n {dowLabel.map((w, i) => (\n <div key={i} className=\"cal-monthview-dow\">\n {w}\n </div>\n ))}\n </div>\n <div className=\"cal-monthview-grid\">\n {cells.map((c, i) => {\n const key = ymd(c.y, c.m, c.d);\n const dayEvents = byDay(key);\n const slice = dayEvents.slice(0, maxEventsPerCell);\n const more = dayEvents.length - slice.length;\n const isToday =\n !c.dim && today.y === c.y && today.m === c.m && today.d === c.d;\n const isWeekend = i % 7 >= 5;\n return (\n <MonthCell\n key={i}\n day={c.d}\n today={isToday}\n dim={c.dim}\n weekend={isWeekend}\n monthLabel={\n c.d === 1 && !c.dim\n ? locale === \"ja\"\n ? `${c.m}月`\n : locale === \"vi\"\n ? `Th. ${c.m}`\n : String(c.m)\n : undefined\n }\n overflow={more}\n formatOverflow={() => overflowFmt(more)}\n events={slice.map((ev) =>\n ev.allDay ? (\n <AllDayChip\n key={ev.id}\n color={colorOf(ev)}\n size=\"month\"\n onClick={() => onPickEvent?.(ev)}\n >\n {ev.title}\n </AllDayChip>\n ) : (\n <EventPill\n key={ev.id}\n color={colorOf(ev)}\n time={ev.start}\n title={ev.title}\n dim={c.dim}\n onClick={() => onPickEvent?.(ev)}\n />\n ),\n )}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","import { cn } from \"../../cn\";\n\n/**\n * DayHeaderHero — page-header strip rendered above `DayView`: large\n * day number + day-of-week + month/year + optional Today badge + event\n * count summary. Visually distinct from the `DayHeaderPill` atom (which\n * sits inside a week's column header).\n */\nexport interface DayHeaderHeroProps {\n day: number;\n dow: string;\n monthLabel: string;\n isToday?: boolean;\n todayLabel?: string;\n eventCount?: number;\n formatEventCount?: (n: number) => string;\n className?: string;\n}\n\nexport function DayHeaderHero({\n day,\n dow,\n monthLabel,\n isToday = false,\n todayLabel = \"Today\",\n eventCount,\n formatEventCount,\n className,\n}: DayHeaderHeroProps) {\n const countLabel =\n eventCount === undefined\n ? null\n : formatEventCount\n ? formatEventCount(eventCount)\n : `${eventCount} events`;\n return (\n <div className={cn(\"day-hero\", className)} data-today={isToday || undefined}>\n <span className=\"day-hero-num\">{day}</span>\n <div className=\"col\" style={{ gap: 0 }}>\n <span className=\"day-hero-dow\">{dow}</span>\n <span className=\"day-hero-month\">{monthLabel}</span>\n </div>\n {isToday && <span className=\"day-hero-today-badge\">{todayLabel}</span>}\n {countLabel && (\n <span className=\"ml-auto day-hero-count\">{countLabel}</span>\n )}\n </div>\n );\n}\n","import {\n AllDayChip,\n DEFAULT_GRID,\n EventBlock,\n GridColumn,\n NowLine,\n TimeGutter,\n layoutEvents,\n ymd,\n type CalendarEvent,\n type CalendarRef,\n type EventBlockVariant,\n type TimeLocale,\n} from \"../../data-display/calendar/index\";\nimport { DayHeaderHero } from \"./DayHeaderHero\";\n\n/**\n * DayView — single-column time grid with a hero header showing the\n * date number + day-of-week + Today badge + event count. All-day\n * events render as pill chips across a strip beneath the hero.\n */\nexport interface DayViewYMD {\n y: number;\n m: number;\n d: number;\n}\nexport interface DayViewProps {\n today: DayViewYMD;\n selected: DayViewYMD;\n events: CalendarEvent[];\n calendars: CalendarRef[];\n locale?: TimeLocale;\n selectedEventId?: string | null;\n onPickEvent?: (event: CalendarEvent) => void;\n resolveVariant?: (event: CalendarEvent) => EventBlockVariant;\n /** Override dow labels. */\n dowLabels?: readonly [string, string, string, string, string, string, string];\n /** \"Today\" badge text. */\n todayLabel?: string;\n /** Localise \"(count) events\" — receives count. */\n formatEventCount?: (count: number) => string;\n nowOverride?: Date;\n}\n\nconst DOW_DEFAULTS: Record<TimeLocale, readonly [string, string, string, string, string, string, string]> = {\n ja: [\"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\", \"日曜日\"],\n vi: [\"Thứ hai\", \"Thứ ba\", \"Thứ tư\", \"Thứ năm\", \"Thứ sáu\", \"Thứ bảy\", \"Chủ nhật\"],\n en: [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\n};\n\nfunction defaultResolveVariant(ev: CalendarEvent): EventBlockVariant {\n if (ev.status === \"tentative\") return \"tentative\";\n if (ev.type === \"focus\") return \"focus\";\n if (ev.type === \"customer\") return \"solid\";\n return \"tint\";\n}\n\nexport function DayView({\n today,\n selected,\n events,\n calendars,\n locale = \"en\",\n selectedEventId,\n onPickEvent,\n resolveVariant = defaultResolveVariant,\n dowLabels,\n todayLabel,\n formatEventCount,\n nowOverride,\n}: DayViewProps) {\n const dowLabel = dowLabels ?? DOW_DEFAULTS[locale];\n const key = ymd(selected.y, selected.m, selected.d);\n const visible = events.filter((e) =>\n calendars.find((c) => c.id === e.calId && c.shown),\n );\n const dayEvs = visible.filter((e) => e.date === key);\n const allDay = dayEvs.filter((e) => e.allDay);\n const timed = layoutEvents(dayEvs.filter((e) => !e.allDay));\n const isToday =\n today.y === selected.y && today.m === selected.m && today.d === selected.d;\n const dow = (new Date(selected.y, selected.m - 1, selected.d).getDay() + 6) % 7;\n const colorOf = (e: CalendarEvent) =>\n calendars.find((c) => c.id === e.calId)?.color ?? \"#4c6cb3\";\n\n return (\n <div className=\"cal-dayview\">\n <div className=\"cal-dayview-col\">\n <DayHeaderHero\n day={selected.d}\n dow={dowLabel[dow]}\n monthLabel={\n locale === \"ja\"\n ? `${selected.y}年${selected.m}月`\n : `${selected.m}/${selected.y}`\n }\n isToday={isToday}\n todayLabel={todayLabel}\n eventCount={timed.length + allDay.length}\n formatEventCount={formatEventCount}\n />\n\n {allDay.length > 0 && (\n <div className=\"cal-dayview-allday-strip\">\n {allDay.map((ev) => (\n <AllDayChip\n key={ev.id}\n color={colorOf(ev)}\n size=\"pill\"\n onClick={() => onPickEvent?.(ev)}\n >\n {ev.title}\n </AllDayChip>\n ))}\n </div>\n )}\n\n <div className=\"cal-dayview-scroll\">\n <div className=\"cal-dayview-grid\">\n <TimeGutter\n dayStartH={DEFAULT_GRID.dayStartH}\n dayEndH={DEFAULT_GRID.dayEndH}\n pxPerMin={DEFAULT_GRID.pxPerMin}\n locale={locale}\n />\n <GridColumn isToday={isToday}>\n {timed.map((ev) => (\n <EventBlock\n key={ev.id}\n event={ev}\n color={colorOf(ev)}\n variant={resolveVariant(ev)}\n selected={selectedEventId === ev.id}\n lane={ev._lane}\n lanes={ev._lanes}\n onClick={onPickEvent}\n />\n ))}\n {isToday && <NowLine nowDate={nowOverride} />}\n </GridColumn>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import {\n AvatarStack,\n ymd,\n type CalendarEvent,\n type CalendarRef,\n type PersonRef,\n type TimeLocale,\n} from \"../../data-display/calendar/index\";\n\n/**\n * AgendaView — date-grouped list of events for the next N days. Each\n * group renders a 92px date gutter (dow + day number + month + NOW\n * pill) | rail of event rows (time, title, location, avatar stack).\n */\nexport interface AgendaViewYMD {\n y: number;\n m: number;\n d: number;\n}\nexport interface AgendaViewProps {\n today: AgendaViewYMD;\n selected: AgendaViewYMD;\n events: CalendarEvent[];\n calendars: CalendarRef[];\n /** People directory used to resolve attendee IDs to AvatarStack items. */\n people: PersonRef[];\n locale?: TimeLocale;\n /** Number of days to render starting from the week's Monday. Default 14. */\n days?: number;\n onPickEvent?: (event: CalendarEvent) => void;\n /** Localised \"All day\" label override. */\n allDayLabel?: string;\n todayBadge?: string;\n dowLabels?: readonly [string, string, string, string, string, string, string];\n}\n\nconst DOW_DEFAULTS: Record<TimeLocale, readonly [string, string, string, string, string, string, string]> = {\n ja: [\"月\", \"火\", \"水\", \"木\", \"金\", \"土\", \"日\"],\n vi: [\"T2\", \"T3\", \"T4\", \"T5\", \"T6\", \"T7\", \"CN\"],\n en: [\"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\", \"SUN\"],\n};\n\nconst ALL_DAY_DEFAULTS: Record<TimeLocale, string> = {\n ja: \"終日\",\n vi: \"Cả ngày\",\n en: \"All day\",\n};\n\nexport function AgendaView({\n today,\n selected,\n events,\n calendars,\n people,\n locale = \"en\",\n days = 14,\n onPickEvent,\n allDayLabel,\n todayBadge = \"NOW\",\n dowLabels,\n}: AgendaViewProps) {\n const dowLabel = dowLabels ?? DOW_DEFAULTS[locale];\n const allDayText = allDayLabel ?? ALL_DAY_DEFAULTS[locale];\n const sel = new Date(selected.y, selected.m - 1, selected.d);\n const dow0 = (sel.getDay() + 6) % 7;\n const monday = new Date(sel);\n monday.setDate(sel.getDate() - dow0);\n\n const visible = events.filter((e) =>\n calendars.find((c) => c.id === e.calId && c.shown),\n );\n const colorOf = (e: CalendarEvent) =>\n calendars.find((c) => c.id === e.calId)?.color ?? \"#4c6cb3\";\n const personOf = (id: string) => people.find((p) => p.id === id);\n\n const day = (i: number) => {\n const d = new Date(monday);\n d.setDate(monday.getDate() + i);\n return d;\n };\n\n return (\n <div className=\"cal-agendaview\">\n <div className=\"cal-agendaview-inner\">\n {Array.from({ length: days }, (_, i) => day(i)).map((d) => {\n const y = d.getFullYear();\n const m = d.getMonth() + 1;\n const dd = d.getDate();\n const key = ymd(y, m, dd);\n const dayEvs = visible\n .filter((e) => e.date === key)\n .sort((a, b) =>\n (a.allDay ? \"00:00\" : (a.start ?? \"\")).localeCompare(\n b.allDay ? \"00:00\" : (b.start ?? \"\"),\n ),\n );\n if (dayEvs.length === 0) return null;\n const isToday = today.y === y && today.m === m && today.d === dd;\n const dow = (d.getDay() + 6) % 7;\n const monthShort =\n locale === \"ja\" ? `${m}月` : locale === \"vi\" ? `Th. ${m}` : String(m);\n return (\n <div key={key} className=\"cal-agenda-day\">\n <div className=\"cal-agenda-gutter\" data-today={isToday || undefined}>\n <span className=\"cal-agenda-gutter-dow\">{dowLabel[dow]}</span>\n <span className=\"cal-agenda-gutter-num\">{dd}</span>\n <span className=\"cal-agenda-gutter-month\">{monthShort}</span>\n {isToday && <span className=\"cal-agenda-gutter-now\">{todayBadge}</span>}\n </div>\n <div className=\"col\" style={{ gap: 6 }}>\n {dayEvs.map((ev) => {\n const color = colorOf(ev);\n const attendees = ev.attendees\n .map(personOf)\n .filter((p): p is PersonRef => Boolean(p))\n .map((p) => ({\n id: p.id,\n short: p.short,\n color: p.color,\n name: p.name,\n }));\n return (\n <button\n key={ev.id}\n type=\"button\"\n className=\"cal-agenda-event\"\n style={{ color }}\n onClick={() => onPickEvent?.(ev)}\n >\n <span className=\"cal-agenda-event-time\">\n {ev.allDay ? allDayText : `${ev.start} – ${ev.end}`}\n </span>\n <span className=\"cal-agenda-event-title\">\n {ev.title}\n {ev.location && (\n <span className=\"cal-agenda-event-location\">· {ev.location}</span>\n )}\n </span>\n <AvatarStack items={attendees} max={3} size={22} />\n </button>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\"\nimport { cn } from \"../cn\"\n\n/**\n * Badge — status pill / chip.\n *\n * Renders the canonical `.chip` class family from the dxs-kintai\n * design system (comp-badges.html). Two appearance modes per\n * SKILL.md:\n *\n * • `appearance=\"soft\"` (default) — translucent role tint. Use for\n * transient state — 申請中 (in review), draft, pending.\n * • `appearance=\"solid\"` — full role color. Use for terminal\n * state — 承認済 (approved), 却下 (rejected).\n * • `appearance=\"outline\"` — hairline border only.\n *\n * Variants map to semantic roles:\n *\n * - `success` — 若竹 task completed, healthy\n * - `warning` — 山吹 needs attention, not yet broken\n * - `info` — 群青 neutral state callout\n * - `error` — 茜 failed / blocked (emits `chip-destructive`)\n * - `attention`— 朱 pending, awaiting input (prefer over `error`\n * for non-destructive alerts per SKILL.md)\n * - `primary` — brand action\n * - `neutral` — grey default chrome (omitted variant suffix; base\n * `.chip` styling)\n * - `outline` — empty hairline only (rare; same as\n * `appearance=\"outline\"` with no role)\n *\n * @example\n * <Badge variant=\"success\" dot>Healthy</Badge> // soft (default)\n * <Badge variant=\"success\" appearance=\"solid\">承認済</Badge>\n * <Badge variant=\"destructive\" appearance=\"solid\">却下</Badge>\n * <Badge variant=\"attention\" dot>遅刻</Badge>\n */\nexport type BadgeVariant =\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"info\"\n | \"destructive\"\n | \"attention\"\n | \"neutral\"\n | \"outline\"\n\nexport type BadgeAppearance = \"soft\" | \"solid\" | \"outline\"\n\nexport interface BadgeProps extends ComponentProps<\"span\"> {\n variant?: BadgeVariant\n appearance?: BadgeAppearance\n /** When true renders a colored dot before the label. */\n dot?: boolean\n children?: ReactNode\n}\n\n// `<Badge variant>` → canonical chip-role class.\nconst VARIANT_CLASS: Record<BadgeVariant, string | null> = {\n primary: \"chip-primary\",\n success: \"chip-success\",\n warning: \"chip-warning\",\n info: \"chip-info\",\n destructive: \"chip-destructive\",\n attention: \"chip-attention\",\n // Neutral = base `.chip` (no role suffix).\n neutral: null,\n outline: \"chip-outline\",\n}\n\nexport function Badge({\n variant = \"neutral\",\n appearance = \"soft\",\n dot = true,\n className,\n children,\n ...rest\n}: BadgeProps) {\n const variantClass = VARIANT_CLASS[variant]\n const isOutline = variant === \"outline\" || appearance === \"outline\"\n\n return (\n <span\n className={cn(\n \"chip\",\n variantClass,\n appearance === \"soft\" && !isOutline && \"chip-soft\",\n className,\n )}\n {...rest}\n >\n {dot && <span className=\"dot\" aria-hidden />}\n {children}\n </span>\n )\n}\n","import {\n Bell,\n Check,\n FileText,\n Globe,\n Pencil,\n Plus,\n RefreshCw,\n Trash2,\n Users,\n X,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Badge } from \"../../data-display/Badge\";\nimport { Button } from \"../../general/Button\";\nimport {\n AttendeeListItem,\n IconRow,\n type CalendarEvent,\n type CalendarRef,\n type PersonRef,\n} from \"../../data-display/calendar/index\";\n\n/**\n * EventDetailPanel — 360px right-rail panel for an opened event.\n * Header — color-dot + title + cal name + status + edit/delete/close\n * Body — when / where / attendees / description / notifications rows\n * Footer — RSVP 3-button row (Yes / Maybe / No)\n *\n * Generic: status labels + RSVP labels + \"(you)\" + section labels all\n * caller-supplied so the panel stays locale-agnostic.\n */\nexport interface EventDetailLabels {\n joinMeeting?: string;\n attendeesSummary: (count: number, accepted: number) => string;\n addPerson: string;\n rsvpQuestion: string;\n rsvpYes: string;\n rsvpMaybe: string;\n rsvpNo: string;\n selfLabel: string;\n organizerLabel: string;\n /** Date/time line for the When row, e.g. \"Wed, May 20 · GMT+09\". */\n whenSubtitle: ReactNode;\n /** \"All day\" / \"Cả ngày\" / \"終日\". */\n allDay: string;\n /** Status label per `event.status`. */\n statusLabels: Record<string, string>;\n}\n\nexport interface EventDetailPanelProps {\n event: CalendarEvent;\n calendar?: CalendarRef;\n people: PersonRef[];\n labels: EventDetailLabels;\n /** Description body content — JSX so callers can use markdown / lists. */\n description?: ReactNode;\n /** Notifications list. */\n notifications?: ReactNode;\n onClose?: () => void;\n onEdit?: () => void;\n onDelete?: () => void;\n onRSVP?: (rsvp: \"yes\" | \"maybe\" | \"no\") => void;\n}\n\nexport function EventDetailPanel({\n event,\n calendar,\n people,\n labels,\n description,\n notifications,\n onClose,\n onEdit,\n onDelete,\n onRSVP,\n}: EventDetailPanelProps) {\n const color = calendar?.color ?? \"#4c6cb3\";\n const organizerId = event.attendees[0];\n const statusLabel = event.status ? labels.statusLabels[event.status] ?? event.status : \"\";\n\n return (\n <aside className=\"cal-detail-aside\">\n <div className=\"cal-detail-head\">\n <span className=\"cal-detail-dot\" style={{ background: color }} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <h2 className=\"cal-detail-title\">{event.title}</h2>\n <div className=\"cal-detail-sub\">\n {calendar?.name ?? \"—\"}\n {statusLabel && <> · {statusLabel}</>}\n </div>\n </div>\n <div className=\"row gap-1\">\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onEdit}\n style={{ width: 26, padding: 0 }}\n aria-label=\"Edit\"\n >\n <Pencil size={13} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onDelete}\n style={{ width: 26, padding: 0 }}\n aria-label=\"Delete\"\n >\n <Trash2 size={13} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={onClose}\n style={{ width: 26, padding: 0 }}\n aria-label=\"Close\"\n >\n <X size={13} />\n </Button>\n </div>\n </div>\n\n <div className=\"cal-detail-body\">\n <IconRow icon={<RefreshCw size={15} />}>\n <div style={{ fontSize: 13, fontWeight: 500 }}>\n {event.allDay\n ? labels.allDay\n : `${event.start ?? \"\"} – ${event.end ?? \"\"}`}\n </div>\n <div style={{ fontSize: 11.5, color: \"var(--muted-foreground)\" }}>\n {labels.whenSubtitle}\n </div>\n </IconRow>\n\n {event.location && (\n <IconRow icon={<Globe size={15} />}>\n <div style={{ fontSize: 13, fontWeight: 500 }}>{event.location}</div>\n {labels.joinMeeting && (\n <a\n style={{\n fontSize: 11.5,\n color: \"var(--accent-color)\",\n textDecoration: \"none\",\n }}\n >\n {labels.joinMeeting}\n </a>\n )}\n </IconRow>\n )}\n\n <IconRow icon={<Users size={15} />}>\n <div\n style={{\n fontSize: 12,\n color: \"var(--muted-foreground)\",\n marginBottom: 6,\n }}\n >\n {labels.attendeesSummary(event.attendees.length, event.attendees.length)}\n </div>\n <div className=\"col\" style={{ gap: 4 }}>\n {event.attendees.map((pid) => {\n const p = people.find((x) => x.id === pid);\n if (!p) return null;\n return (\n <AttendeeListItem\n key={pid}\n name={p.name}\n short={p.short}\n color={p.color}\n isSelf={p.self}\n isOrganizer={organizerId === pid}\n org={p.org}\n selfLabel={labels.selfLabel}\n organizerLabel={labels.organizerLabel}\n status={\n <Badge variant=\"success\" style={{ fontSize: 10 }}>\n <span className=\"dot\" />\n OK\n </Badge>\n }\n />\n );\n })}\n </div>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{\n marginTop: 6,\n padding: \"0 6px\",\n color: \"var(--muted-foreground)\",\n fontSize: 11,\n }}\n >\n <Plus size={12} /> {labels.addPerson}\n </Button>\n </IconRow>\n\n {description && (\n <IconRow icon={<FileText size={15} />}>{description}</IconRow>\n )}\n\n {notifications && (\n <IconRow icon={<Bell size={15} />}>{notifications}</IconRow>\n )}\n </div>\n\n <div className=\"cal-detail-foot\">\n <div className=\"cal-detail-rsvp-label\">{labels.rsvpQuestion}</div>\n <div className=\"row\" style={{ gap: 6 }}>\n <Button\n variant=\"primary\"\n\n size=\"small\"\n style={{ flex: 1 }}\n onClick={() => onRSVP?.(\"yes\")}\n >\n <Check size={13} /> {labels.rsvpYes}\n </Button>\n <Button\n variant=\"secondary\"\n size=\"small\"\n style={{ flex: 1 }}\n onClick={() => onRSVP?.(\"maybe\")}\n >\n {labels.rsvpMaybe}\n </Button>\n <Button\n variant=\"secondary\"\n size=\"small\"\n style={{ flex: 1 }}\n onClick={() => onRSVP?.(\"no\")}\n >\n {labels.rsvpNo}\n </Button>\n </div>\n </div>\n </aside>\n );\n}\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\"\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\nexport type TabsVariant = \"line\" | \"pills\"\nexport type TabsOrientation = \"horizontal\" | \"vertical\"\nexport type TabsPlacement = \"top\" | \"right\" | \"bottom\" | \"left\"\n\nexport interface TabsItem {\n value: string\n label: ReactNode\n content?: ReactNode\n disabled?: boolean\n}\n\nexport interface TabsProps\n extends Omit<ComponentPropsWithoutRef<typeof TabsPrimitive.Root>, \"children\"> {\n items: TabsItem[]\n variant?: TabsVariant\n placement?: TabsPlacement\n listClassName?: string\n contentClassName?: string\n children?: ReactNode\n}\n\nexport const Tabs = forwardRef<\n ElementRef<typeof TabsPrimitive.Root>,\n TabsProps\n>(function Tabs(\n {\n items,\n variant = \"line\",\n placement = \"top\",\n className,\n listClassName,\n contentClassName,\n orientation,\n children,\n ...rest\n },\n ref,\n) {\n const radixOrientation: TabsOrientation =\n orientation ?? (placement === \"left\" || placement === \"right\" ? \"vertical\" : \"horizontal\")\n const listClass = variant === \"pills\" ? \"tabs-pills\" : \"tabs\"\n const triggerClass = variant === \"pills\" ? \"tabs-pill\" : \"tab\"\n\n return (\n <TabsPrimitive.Root\n ref={ref}\n orientation={radixOrientation}\n data-placement={placement}\n className={cn(\"tabs-root\", className)}\n {...rest}\n >\n <TabsPrimitive.List className={cn(listClass, listClassName)}>\n {items.map((item) => (\n <TabsPrimitive.Trigger\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n className={triggerClass}\n >\n {item.label}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n {items.map((item) =>\n item.content === undefined ? null : (\n <TabsPrimitive.Content\n key={item.value}\n value={item.value}\n className={contentClassName}\n >\n {item.content}\n </TabsPrimitive.Content>\n ),\n )}\n {children}\n </TabsPrimitive.Root>\n )\n})\n","import { FileText, Globe, RefreshCw, Repeat, Users, Zap, Plus } from \"lucide-react\";\nimport { useState, type ReactNode } from \"react\";\nimport { Button } from \"../../general/Button\";\nimport { Tabs } from \"../../navigation/Tabs\";\nimport {\n AttendeeChip,\n CalendarOption,\n IconRow,\n type CalendarRef,\n type PersonRef,\n} from \"../../data-display/calendar/index\";\n\n/**\n * CreateEventDialog — 880×640 modal-shaped create form. Two-column\n * layout: form on the left, options rail on the right (calendar\n * picker, free/busy, notifications, guest permissions, helper card).\n *\n * Does NOT manage open/close — the consumer wraps the JSX in a Radix\n * `Dialog` (or any portal). The visual shell + the form scaffolding is\n * what this component owns.\n */\nexport interface CreateEventTab {\n id: string;\n label: ReactNode;\n}\n\nexport interface CreateEventLabels {\n /** Repeat-rule option list — caller-supplied so locale stays out of the SDK. */\n repeatOptions: { value: string; label: string }[];\n whenFromLabel: string;\n whenToLabel: string;\n allDay: string;\n locationPlaceholder: string;\n createMeet: string;\n attendeesPlaceholder: string;\n findATime: string;\n attendeesSummary: ReactNode;\n detailsButton: string;\n cancel: string;\n save: string;\n /** Right-rail section labels. */\n rail: {\n saveTo: string;\n showAs: string;\n showAsBusy: string;\n showAsFree: string;\n notifications: string;\n addNotification: string;\n guestPermissions: string;\n permissionEdit: string;\n permissionInvite: string;\n permissionGuestList: string;\n helpTitle: string;\n helpBody: (calendarName: string) => ReactNode;\n };\n}\n\nexport interface CreateEventDialogProps {\n /** Default form values. */\n initialTitle?: string;\n initialCalendarId: string;\n /** Tab ids (e.g. event / task / focus / ooo). */\n tabs: CreateEventTab[];\n initialTab?: string;\n /** Visible calendars to choose from (read-only ones filtered out). */\n calendars: CalendarRef[];\n /** Selected attendee list (chip array). */\n attendees: PersonRef[];\n /** When summary line (e.g. \"Wed, May 20\"). */\n whenDate: ReactNode;\n /** Start / end time strings. */\n whenStart: string;\n whenEnd: string;\n labels: CreateEventLabels;\n /** Notifications list — caller renders pills. */\n notificationsList?: ReactNode;\n /** Description default value. */\n descriptionDefault?: string;\n onRemoveAttendee?: (id: string) => void;\n onChangeCalendar?: (id: string) => void;\n onChangeTitle?: (next: string) => void;\n onCancel?: () => void;\n onSave?: () => void;\n}\n\nexport function CreateEventDialog({\n initialTitle = \"\",\n initialCalendarId,\n tabs,\n initialTab,\n calendars,\n attendees,\n whenDate,\n whenStart,\n whenEnd,\n labels,\n notificationsList,\n descriptionDefault,\n onRemoveAttendee,\n onChangeCalendar,\n onChangeTitle,\n onCancel,\n onSave,\n}: CreateEventDialogProps) {\n const [tab, setTab] = useState(initialTab ?? tabs[0]?.id ?? \"event\");\n const [title, setTitle] = useState(initialTitle);\n const [calId, setCalId] = useState(initialCalendarId);\n const [allDay, setAllDay] = useState(false);\n const [showAs, setShowAs] = useState<\"busy\" | \"free\">(\"busy\");\n const cal = calendars.find((c) => c.id === calId);\n const editableCalendars = calendars.filter((c) => !c.readonly);\n\n return (\n <div className=\"cal-create-dialog\">\n <div className=\"cal-create-main\">\n <div className=\"cal-create-head\">\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: 3,\n background: cal?.color ?? \"#1e50a2\",\n flexShrink: 0,\n }}\n />\n <input\n className=\"cal-create-title-input\"\n value={title}\n onChange={(e) => {\n setTitle(e.target.value);\n onChangeTitle?.(e.target.value);\n }}\n />\n </div>\n\n <Tabs\n value={tab}\n onValueChange={setTab}\n listClassName=\"cal-create-tabs\"\n items={tabs.map((t) => ({ value: t.id, label: t.label }))}\n />\n\n <div className=\"cal-create-body\">\n <IconRow icon={<RefreshCw size={15} />} align=\"center\">\n <div className=\"row gap-2\" style={{ flexWrap: \"wrap\" }}>\n <div className=\"input\" style={{ width: 152, display: \"inline-flex\", alignItems: \"center\" }}>\n {whenDate}\n </div>\n <span style={{ fontSize: 12, color: \"var(--muted-foreground)\" }}>\n {labels.whenFromLabel}\n </span>\n <div className=\"input\" style={{ width: 92, display: \"inline-flex\", alignItems: \"center\" }}>\n {whenStart}\n </div>\n <span style={{ fontSize: 12, color: \"var(--muted-foreground)\" }}>\n {labels.whenToLabel}\n </span>\n <div className=\"input\" style={{ width: 92, display: \"inline-flex\", alignItems: \"center\" }}>\n {whenEnd}\n </div>\n <label\n className=\"row gap-1\"\n style={{\n fontSize: 12,\n marginLeft: 6,\n color: \"var(--muted-foreground)\",\n cursor: \"pointer\",\n }}\n >\n <input\n type=\"checkbox\"\n checked={allDay}\n onChange={(e) => setAllDay(e.target.checked)}\n />\n {labels.allDay}\n </label>\n </div>\n </IconRow>\n\n <IconRow icon={<Repeat size={14} />} align=\"center\">\n <select className=\"input\" style={{ width: 260 }} defaultValue={labels.repeatOptions[0]?.value}>\n {labels.repeatOptions.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </IconRow>\n\n <IconRow icon={<Globe size={15} />} align=\"center\">\n <div className=\"row gap-2\" style={{ width: \"100%\" }}>\n <input className=\"input\" placeholder={labels.locationPlaceholder} style={{ flex: 1 }} />\n <Button variant=\"secondary\" size=\"small\">\n <Zap size={13} /> {labels.createMeet}\n </Button>\n </div>\n </IconRow>\n\n <IconRow icon={<Users size={15} />}>\n <div className=\"row gap-1\" style={{ flexWrap: \"wrap\" }}>\n {attendees.map((p) => (\n <AttendeeChip\n key={p.id}\n name={p.name}\n short={p.short}\n color={p.color}\n onRemove={() => onRemoveAttendee?.(p.id)}\n />\n ))}\n <input\n className=\"input\"\n style={{ flex: 1, minWidth: 200, border: 0, background: \"transparent\" }}\n placeholder={labels.attendeesPlaceholder}\n />\n </div>\n <div\n className=\"row gap-2\"\n style={{ marginTop: 6, fontSize: 11.5, color: \"var(--muted-foreground)\" }}\n >\n <Button\n variant=\"ghost\"\n size=\"small\"\n\n style={{ padding: 0, height: \"auto\" }}\n >\n {labels.findATime}\n </Button>\n <span>·</span>\n <span>{labels.attendeesSummary}</span>\n </div>\n </IconRow>\n\n <IconRow icon={<FileText size={15} />}>\n <textarea\n className=\"input\"\n defaultValue={descriptionDefault}\n style={{\n height: 92,\n padding: 10,\n resize: \"none\",\n fontFamily: \"var(--font-sans-jp)\",\n }}\n />\n </IconRow>\n </div>\n\n <div className=\"cal-create-foot\">\n <Button variant=\"ghost\" size=\"small\">\n {labels.detailsButton}\n </Button>\n <div className=\"ml-auto row gap-2\">\n <Button variant=\"secondary\" size=\"small\" onClick={onCancel}>\n {labels.cancel}\n </Button>\n <Button variant=\"primary\" size=\"small\" onClick={onSave}>\n {labels.save}\n </Button>\n </div>\n </div>\n </div>\n\n <div className=\"cal-create-rail\">\n <div>\n <div className=\"cal-create-rail-section-label\">{labels.rail.saveTo}</div>\n <select\n className=\"input\"\n style={{ width: \"100%\" }}\n value={calId}\n onChange={(e) => {\n setCalId(e.target.value);\n onChangeCalendar?.(e.target.value);\n }}\n >\n {editableCalendars.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name}\n </option>\n ))}\n </select>\n </div>\n\n <div>\n <div className=\"cal-create-rail-section-label\">{labels.rail.showAs}</div>\n <div className=\"row gap-1\">\n <button\n type=\"button\"\n className=\"btn btn-secondary btn-sm\"\n data-active={showAs === \"busy\"}\n style={{\n flex: 1,\n background:\n showAs === \"busy\"\n ? \"color-mix(in oklch, var(--accent-color) 14%, transparent)\"\n : \"var(--surface-3)\",\n borderColor: showAs === \"busy\" ? \"var(--accent-color)\" : \"var(--border)\",\n color: showAs === \"busy\" ? \"var(--accent-color)\" : \"var(--foreground)\",\n }}\n onClick={() => setShowAs(\"busy\")}\n >\n {labels.rail.showAsBusy}\n </button>\n <button\n type=\"button\"\n className=\"btn btn-secondary btn-sm\"\n data-active={showAs === \"free\"}\n style={{\n flex: 1,\n background: showAs === \"free\" ? \"var(--surface-3)\" : \"transparent\",\n }}\n onClick={() => setShowAs(\"free\")}\n >\n {labels.rail.showAsFree}\n </button>\n </div>\n </div>\n\n <div>\n <div className=\"cal-create-rail-section-label\">{labels.rail.notifications}</div>\n <div className=\"col\" style={{ gap: 4, fontSize: 12 }}>\n {notificationsList}\n <Button\n variant=\"ghost\"\n size=\"small\"\n\n style={{ padding: 0, height: 22, fontSize: 11, justifyContent: \"flex-start\" }}\n >\n <Plus size={11} /> {labels.rail.addNotification}\n </Button>\n </div>\n </div>\n\n <div>\n <div className=\"cal-create-rail-section-label\">{labels.rail.guestPermissions}</div>\n <div className=\"col\" style={{ gap: 6, fontSize: 12 }}>\n <label className=\"row gap-2\">\n <input type=\"checkbox\" defaultChecked /> {labels.rail.permissionEdit}\n </label>\n <label className=\"row gap-2\">\n <input type=\"checkbox\" defaultChecked /> {labels.rail.permissionInvite}\n </label>\n <label className=\"row gap-2\">\n <input type=\"checkbox\" defaultChecked /> {labels.rail.permissionGuestList}\n </label>\n </div>\n </div>\n\n <div className=\"cal-create-rail-info\">\n <div className=\"row gap-2\" style={{ marginBottom: 4 }}>\n <CalendarOption color={cal?.color ?? \"#1e50a2\"} name={cal?.name ?? \"—\"} />\n </div>\n <p\n style={{\n margin: 0,\n fontSize: 10.5,\n color: \"var(--muted-foreground)\",\n lineHeight: 1.5,\n }}\n >\n {labels.rail.helpBody(cal?.name ?? \"\")}\n </p>\n </div>\n </div>\n </div>\n );\n}\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Badge } from \"../../data-display/Badge\";\nimport { Button } from \"../../general/Button\";\nimport {\n AvailabilityRow,\n SuggestedSlotCard,\n type PersonRef,\n} from \"../../data-display/calendar/index\";\n\n/**\n * FindATimePanel — 1100×720 scheduling assistant. People rows on the\n * left, time grid on the right with busy / tentative / free shading;\n * \"chosen-time\" overlay tracks `selectedRange`. Footer: suggested-slot\n * cards. Legend at the bottom.\n *\n * Generic: caller supplies the people directory + their per-slot\n * availability arrays. Labels are caller-supplied for locale fit.\n */\nexport interface FindATimeLabels {\n title: string;\n subtitle: ReactNode;\n peopleCol: string;\n peopleCount: (n: number) => string;\n durationLabel: string;\n expandHours: string;\n apply: string;\n /** \"Suggestions — slots all attendees free\". */\n suggestionsLabel: string;\n /** Legend texts. */\n legendBusy: string;\n legendTentative: string;\n legendFree: string;\n workingHours: string;\n}\n\nexport interface FindATimeSlotSuggestion {\n id: string;\n label: ReactNode;\n meta: ReactNode;\n best?: boolean;\n /** Optional click → set selectedRange to this slot. */\n range?: [number, number];\n}\n\nexport interface FindATimePanelProps {\n people: PersonRef[];\n /** Per-person availability: 0 = free, 1 = tentative, 2 = busy. */\n availability: Record<string, ReadonlyArray<0 | 1 | 2>>;\n /** Working-hour range (e.g. 9..18) — header label only; slot count comes from availability arrays. */\n hours: number[];\n selectedRange: [number, number] | null;\n onChangeRange?: (range: [number, number] | null) => void;\n suggestions: FindATimeSlotSuggestion[];\n labels: FindATimeLabels;\n onPrev?: () => void;\n onNext?: () => void;\n selfLabel?: string;\n}\n\nexport function FindATimePanel({\n people,\n availability,\n hours,\n selectedRange,\n onChangeRange,\n suggestions,\n labels,\n onPrev,\n onNext,\n selfLabel = \"(you)\",\n}: FindATimePanelProps) {\n const firstAvail = Object.values(availability)[0];\n const slotCount = firstAvail?.length ?? hours.length * 2;\n\n return (\n <div className=\"cal-find\">\n <header className=\"cal-find-head\">\n <div>\n <h2 className=\"cal-find-title\">{labels.title}</h2>\n <div className=\"cal-find-sub\">{labels.subtitle}</div>\n </div>\n <div className=\"row gap-1\" style={{ marginLeft: 6 }}>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 26, padding: 0 }}\n onClick={onPrev}\n aria-label=\"Previous\"\n >\n <ChevronLeft size={14} />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"small\"\n style={{ width: 26, padding: 0 }}\n onClick={onNext}\n aria-label=\"Next\"\n >\n <ChevronRight size={14} />\n </Button>\n </div>\n <Badge variant=\"info\" style={{ marginLeft: 4 }}>\n <span className=\"dot\" />\n {labels.peopleCount(people.length)}\n </Badge>\n <Badge variant=\"neutral\">\n <span className=\"dot\" />\n {labels.durationLabel}\n </Badge>\n <div className=\"ml-auto row gap-2\">\n <Button variant=\"secondary\" size=\"small\">\n {labels.expandHours}\n </Button>\n <Button variant=\"primary\" size=\"small\">\n {labels.apply}\n </Button>\n </div>\n </header>\n\n <div className=\"cal-find-body\">\n <div className=\"cal-find-grid\">\n <div className=\"cal-find-people-head\">{labels.peopleCol}</div>\n <div\n className=\"cal-find-hours\"\n style={{ gridTemplateColumns: `repeat(${slotCount}, 1fr)` }}\n >\n {hours.map((h, i) => (\n <div\n key={h}\n className=\"cal-find-hour\"\n style={{\n gridColumn: \"span 2\",\n borderRight: i === hours.length - 1 ? \"none\" : undefined,\n }}\n >\n {String(h).padStart(2, \"0\")}:00\n </div>\n ))}\n </div>\n\n {people.map((p) => {\n const slots = availability[p.id] ?? Array.from({ length: slotCount }, () => 0 as const);\n return (\n <AvailabilityRow\n key={p.id}\n slots={slots}\n selectedRange={selectedRange ?? null}\n person={\n <>\n <span\n style={{\n width: 26,\n height: 26,\n borderRadius: 999,\n background: p.color,\n color: \"white\",\n display: \"grid\",\n placeItems: \"center\",\n fontSize: 10,\n fontWeight: 600,\n }}\n >\n {p.short}\n </span>\n <div style={{ minWidth: 0 }}>\n <div\n style={{\n fontSize: 12.5,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {p.name}\n {p.self && (\n <span\n style={{\n marginLeft: 4,\n color: \"var(--muted-foreground)\",\n fontSize: 10,\n }}\n >\n {selfLabel}\n </span>\n )}\n </div>\n <div style={{ fontSize: 10, color: \"var(--muted-foreground)\" }}>\n {p.org}\n {p.role && <> · {p.role}</>}\n </div>\n </div>\n </>\n }\n />\n );\n })}\n </div>\n\n <div className=\"cal-find-suggestions\">\n <div className=\"cal-find-suggestions-label\">{labels.suggestionsLabel}</div>\n <div style={{ display: \"flex\", gap: 8, flexWrap: \"wrap\" }}>\n {suggestions.map((s) => (\n <SuggestedSlotCard\n key={s.id}\n label={s.label}\n meta={s.meta}\n best={s.best}\n onClick={() => s.range && onChangeRange?.(s.range)}\n />\n ))}\n </div>\n </div>\n </div>\n\n <footer className=\"cal-find-legend\">\n <div className=\"row gap-2\">\n <span className=\"cal-find-legend-swatch\" data-state=\"2\" /> {labels.legendBusy}\n </div>\n <div className=\"row gap-2\">\n <span className=\"cal-find-legend-swatch\" data-state=\"1\" /> {labels.legendTentative}\n </div>\n <div className=\"row gap-2\">\n <span className=\"cal-find-legend-swatch\" data-state=\"0\" /> {labels.legendFree}\n </div>\n <span className=\"ml-auto\">{labels.workingHours}</span>\n </footer>\n </div>\n );\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport {\n type ComponentPropsWithoutRef,\n type FormHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../cn\";\n\nexport interface DialogProps extends ComponentPropsWithoutRef<\n typeof DialogPrimitive.Root\n> {\n trigger?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n className?: string;\n contentProps?: Omit<\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n \"children\" | \"className\"\n >;\n form?: FormHTMLAttributes<HTMLFormElement>;\n}\n\nexport function Dialog({\n trigger,\n title,\n description,\n footer,\n children,\n className,\n contentProps,\n form,\n ...rootProps\n}: DialogProps) {\n const content = (\n <>\n <div className=\"dialog-header\">\n <DialogPrimitive.Title className=\"dialog-title\">\n {title}\n </DialogPrimitive.Title>\n {description !== undefined && (\n <DialogPrimitive.Description className=\"dialog-description\">\n {description}\n </DialogPrimitive.Description>\n )}\n </div>\n {children}\n {footer !== undefined && <div className=\"dialog-footer\">{footer}</div>}\n </>\n );\n const descriptionProps =\n description === undefined\n ? ({ \"aria-describedby\": undefined } as const)\n : {};\n\n return (\n <DialogPrimitive.Root {...rootProps}>\n {trigger !== undefined && (\n <DialogPrimitive.Trigger asChild>{trigger}</DialogPrimitive.Trigger>\n )}\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"dialog-overlay\" />\n <DialogPrimitive.Content\n {...contentProps}\n {...descriptionProps}\n className={cn(\"dialog-content\", className)}\n >\n {form !== undefined ? <form {...form}>{content}</form> : content}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n","import * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport {\n createContext,\n forwardRef,\n useContext,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\n/**\n * Radio + RadioGroup — Radix-backed single-select group. Compositional\n * (`<Radio value=\"…\" />` children) OR data-driven (`options`) per\n * cardinal rule 23 §A.\n *\n * Vocabulary (cardinal rule 23 §B):\n * - `value` / `defaultValue` / `onValueChange` — Radix-canonical\n * selection (the GROUP exposes the value; individual items\n * internally use Radix's `checked` data-state).\n * - `orientation` — \"horizontal\" (default) | \"vertical\".\n * - `size` — \"small\" | \"default\" | \"large\".\n * - `disabled` — applies to the whole group OR per-item.\n * - `name` — native form name.\n *\n * Visual contract: `.radio-group` + `.radio-root` + `.radio-indicator`\n * in shell.css. State flows via Radix `data-state=\"checked\"`.\n */\n\nexport type RadioGroupSize = \"small\" | \"default\" | \"large\"\nexport type RadioGroupOrientation = \"horizontal\" | \"vertical\"\n\nexport interface RadioOption {\n value: string\n label: ReactNode\n disabled?: boolean\n}\n\nexport interface RadioGroupProps\n extends Omit<\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>,\n \"orientation\"\n > {\n /** Data-driven items. */\n options?: RadioOption[]\n /** Compositional children when `options` is omitted. */\n children?: ReactNode\n orientation?: RadioGroupOrientation\n size?: RadioGroupSize\n}\n\ninterface RadioGroupCtx {\n size: RadioGroupSize\n}\n\nconst RadioGroupContext = createContext<RadioGroupCtx>({ size: \"default\" })\n\nexport const RadioGroup = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(function RadioGroup(\n {\n options,\n children,\n orientation = \"horizontal\",\n size = \"default\",\n className,\n ...rest\n },\n ref,\n) {\n return (\n <RadioGroupContext.Provider value={{ size }}>\n <RadioGroupPrimitive.Root\n ref={ref}\n orientation={orientation}\n data-orientation={orientation}\n data-size={size}\n className={cn(\"radio-group\", className)}\n {...rest}\n >\n {options\n ? options.map((opt) => (\n <Radio key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </Radio>\n ))\n : children}\n </RadioGroupPrimitive.Root>\n </RadioGroupContext.Provider>\n )\n})\n\nexport interface RadioProps {\n value: string\n disabled?: boolean\n children?: ReactNode\n className?: string\n id?: string\n}\n\nexport const Radio = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioProps\n>(function Radio({ value, disabled, children, className, id }, ref) {\n const { size } = useContext(RadioGroupContext)\n return (\n <label\n className=\"radio-group-item\"\n data-disabled={disabled || undefined}\n data-size={size}\n >\n <RadioGroupPrimitive.Item\n ref={ref}\n value={value}\n disabled={disabled}\n id={id}\n className={cn(\"radio-root\", className)}\n >\n <RadioGroupPrimitive.Indicator className=\"radio-indicator\" />\n </RadioGroupPrimitive.Item>\n {children !== undefined ? (\n <span className=\"radio-group-item-label\">{children}</span>\n ) : null}\n </label>\n )\n})\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check, Minus } from \"lucide-react\"\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\n// Glyph at 0.75rem (12px @ base) — 3/4 of the box's 1rem footprint,\n// matches the shadcn / Ant canonical ratio. Rem-based so the icon\n// rescales with the font-size axis alongside the box (rule 21).\nconst iconSize = { width: \"0.75rem\", height: \"0.75rem\" } as const\n\n// strokeWidth=3 (vs lucide's default 2) + absoluteStrokeWidth keeps\n// the check / minus glyphs legible after the SVG is scaled from its\n// 24-unit native viewBox down to 12px — at default 2 the stroke\n// thins to roughly 1px visual and reads as a hairline.\nconst strokeWidth = 3\n\n/**\n * Checkbox — tri-state capable (checked / unchecked / indeterminate).\n *\n * Two consumption modes (per cardinal rule 23 + rule 31 — no parallel\n * convenience wrappers):\n *\n * 1. With label (preferred, Ant canonical) — pass children as the\n * label text:\n *\n * <Checkbox defaultChecked>利用規約に同意する</Checkbox>\n *\n * The primitive wraps the box + label in a single `<label>` so\n * clicking the text toggles the checkbox, ARIA labelling is\n * automatic, and the consumer never writes\n * `<label><Checkbox /><span>…</span></label>` ceremony.\n *\n * 2. Box-only (advanced) — no children. Use when the label lives\n * elsewhere (table cell header, custom layout) and you wire\n * `aria-labelledby` / `aria-label` yourself:\n *\n * <th><Checkbox aria-label=\"Select all\" /></th>\n *\n * Uses `.checkbox-*` classes from tokens.css. The box is 1rem (16px\n * @ base) per industry canon (shadcn / Ant / Tailwind).\n */\n\nexport interface CheckboxProps\n extends ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\n /** Label text rendered to the right of the box. When provided, the\n * primitive wraps both in a single `<label>` so clicking the text\n * toggles the checkbox. */\n children?: ReactNode\n /** Class merged onto the OUTER `<label>` when `children` is set,\n * or onto the box `<button>` otherwise. */\n className?: string\n /** Class merged onto the inner box (when `children` is set). */\n boxClassName?: string\n}\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(function Checkbox({ className, boxClassName, children, ...rest }, ref) {\n const box = (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\"checkbox-root\", children === undefined ? className : boxClassName)}\n {...rest}\n >\n <CheckboxPrimitive.Indicator className=\"checkbox-indicator\">\n <Check\n className=\"checkbox-glyph-check\"\n aria-hidden\n strokeWidth={strokeWidth}\n absoluteStrokeWidth\n style={iconSize}\n />\n <Minus\n className=\"checkbox-glyph-indeterminate\"\n aria-hidden\n strokeWidth={strokeWidth}\n absoluteStrokeWidth\n style={iconSize}\n />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n\n if (children === undefined) return box\n\n return (\n <label className={cn(\"checkbox-label\", className)}>\n {box}\n <span className=\"checkbox-label-text\">{children}</span>\n </label>\n )\n})\n","/**\n * Table Import / Export composite (canon ⑪).\n *\n * Two surfaces — both consumed alongside any `<Table>` primitive,\n * never as a Table prop (per cardinal rule 32 — not a redundant\n * prop on Table, but a separate composite). They share the\n * `.ie-card` atom set in `src/styles/shell/40-table.css`.\n *\n * - `TableImportFlow` — 4-step stepper (file → mapping → validate →\n * apply), file card with progress, per-row error preview.\n * - `TableExportDialog` — modal with format + range + columns\n * options + cancel / export footer.\n */\nimport { type ReactNode } from \"react\";\nimport { cn } from \"../../cn\";\nimport { Dialog } from \"../../feedback/Dialog\";\nimport { Button } from \"../../general/Button\";\nimport { Radio, RadioGroup } from \"../../data-entry/Radio\";\nimport { Checkbox } from \"../../data-entry/Checkbox\";\n\n// ── Import flow ─────────────────────────────────────────────────────\n\nexport type TableImportStep =\n | \"file\"\n | \"mapping\"\n | \"validate\"\n | \"apply\";\n\nconst STEP_ORDER: TableImportStep[] = [\n \"file\",\n \"mapping\",\n \"validate\",\n \"apply\",\n];\n\nexport interface TableImportStepperLabels {\n file?: ReactNode;\n mapping?: ReactNode;\n validate?: ReactNode;\n apply?: ReactNode;\n}\n\nconst DEFAULT_STEP_LABELS: Required<TableImportStepperLabels> = {\n file: \"ファイル選択\",\n mapping: \"列マッピング\",\n validate: \"検証 / プレビュー\",\n apply: \"反映\",\n};\n\nexport interface TableImportFileInfo {\n /** Detected file name (display only). */\n name: string;\n /** Row count summary, e.g. `1,284 行`. */\n rowSummary?: ReactNode;\n /** Byte size summary, e.g. `132 KB`. */\n sizeSummary?: ReactNode;\n /** Detected encoding label (canon shows `SHIFT-JIS 検出`). */\n encodingLabel?: ReactNode;\n /** 0–1 progress fraction during validation. */\n progress?: number;\n /** Free-form left / right meta beneath the progress bar. */\n progressLeftLabel?: ReactNode;\n progressRightLabel?: ReactNode;\n /** Whether to show the success file icon (vs the error one). */\n status?: \"ok\" | \"error\";\n}\n\nexport interface TableImportErrorRow {\n line: ReactNode;\n message: ReactNode;\n value: ReactNode;\n severity?: \"error\" | \"warning\";\n}\n\nexport interface TableImportFlowProps {\n title?: ReactNode;\n /** Currently active step (one of the 4). */\n currentStep: TableImportStep;\n stepLabels?: TableImportStepperLabels;\n file?: TableImportFileInfo;\n errors?: TableImportErrorRow[];\n /** Renders the actions row at the bottom of the card. */\n actions?: ReactNode;\n className?: string;\n}\n\nexport function TableImportFlow({\n title,\n currentStep,\n stepLabels,\n file,\n errors,\n actions,\n className,\n}: TableImportFlowProps) {\n const labels = { ...DEFAULT_STEP_LABELS, ...stepLabels };\n const currentIndex = STEP_ORDER.indexOf(currentStep);\n return (\n <section className={cn(\"ie-card\", className)}>\n {title !== undefined && <h4>{title}</h4>}\n <ol className=\"ie-stepper\" aria-label=\"import-steps\">\n {STEP_ORDER.map((step, index) => {\n const state =\n index < currentIndex\n ? \"done\"\n : index === currentIndex\n ? \"on\"\n : undefined;\n return (\n <li\n key={step}\n className={cn(\"ie-step\", state)}\n aria-current={state === \"on\" ? \"step\" : undefined}\n >\n <span className=\"n\">\n {state === \"done\" ? \"✓\" : String(index + 1)}\n </span>\n <span>{labels[step]}</span>\n </li>\n );\n })}\n </ol>\n {file !== undefined && (\n <div className=\"ie-file-card\">\n <div className=\"ie-file-card-row\">\n <FileIcon status={file.status ?? \"ok\"} />\n <span className=\"name\">{file.name}</span>\n {(file.rowSummary !== undefined ||\n file.sizeSummary !== undefined) && (\n <span className=\"meta\">\n {file.rowSummary !== undefined && <>· {file.rowSummary} </>}\n {file.sizeSummary !== undefined && <>· {file.sizeSummary}</>}\n </span>\n )}\n {file.encodingLabel !== undefined && (\n <span className=\"tag\">{file.encodingLabel}</span>\n )}\n </div>\n {file.progress !== undefined && (\n <>\n <div className=\"ie-progress\">\n <i\n style={{\n width: `${Math.round(\n Math.min(Math.max(file.progress, 0), 1) * 100,\n )}%`,\n }}\n />\n </div>\n {(file.progressLeftLabel !== undefined ||\n file.progressRightLabel !== undefined) && (\n <div className=\"ie-progress-meta\">\n <span>{file.progressLeftLabel}</span>\n <span>{file.progressRightLabel}</span>\n </div>\n )}\n </>\n )}\n </div>\n )}\n {errors !== undefined && errors.length > 0 && (\n <table className=\"table ie-error-table\">\n <thead>\n <tr>\n <th style={{ height: 26 }}>行</th>\n <th style={{ height: 26 }}>エラー</th>\n <th style={{ height: 26 }}>値</th>\n </tr>\n </thead>\n <tbody>\n {errors.map((row, index) => (\n <tr\n key={index}\n className={\n row.severity === \"warning\" ? \"is-warning\" : \"is-error\"\n }\n >\n <td>\n <span className=\"c-mono\">{row.line}</span>\n </td>\n <td>{row.message}</td>\n <td>\n <span className=\"c-mono\">{row.value}</span>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n {actions !== undefined && <div className=\"actions-row\">{actions}</div>}\n </section>\n );\n}\n\nfunction FileIcon({ status }: { status: \"ok\" | \"error\" }) {\n const stroke = status === \"ok\" ? \"var(--success)\" : \"var(--destructive)\";\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={stroke}\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n );\n}\n\n// ── Export dialog ───────────────────────────────────────────────────\n\nexport type TableExportFormat = \"csv-utf8\" | \"csv-shift-jis\" | \"xlsx\" | \"pdf\";\nexport type TableExportRange =\n | \"current-filter\"\n | \"selected\"\n | \"all\";\n\nexport interface TableExportDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: ReactNode;\n /** Selected output format. */\n format: TableExportFormat;\n onFormatChange: (format: TableExportFormat) => void;\n /** Selected scope. */\n range: TableExportRange;\n onRangeChange: (range: TableExportRange) => void;\n /** Whether to include hidden columns. */\n includeHiddenColumns: boolean;\n onIncludeHiddenColumnsChange: (next: boolean) => void;\n /** Counts shown next to the range options. */\n rangeCounts?: {\n currentFilter?: number;\n selected?: number;\n all?: number;\n };\n /** Counts shown next to the columns options. */\n columnCounts?: {\n visible?: number;\n total?: number;\n };\n /** Save callback. */\n onExport: () => void;\n /** Cancel callback. */\n onCancel?: () => void;\n exportLabel?: ReactNode;\n cancelLabel?: ReactNode;\n /** Optional copy overrides. */\n labels?: {\n format?: ReactNode;\n range?: ReactNode;\n columns?: ReactNode;\n csvUtf8?: ReactNode;\n csvShiftJis?: ReactNode;\n xlsx?: ReactNode;\n pdf?: ReactNode;\n currentFilter?: (count?: number) => ReactNode;\n selected?: (count?: number) => ReactNode;\n all?: (count?: number) => ReactNode;\n visibleOnly?: (count?: number) => ReactNode;\n includeHidden?: (count?: number) => ReactNode;\n };\n}\n\nconst DEFAULT_EXPORT_LABELS = {\n format: \"形式\",\n range: \"範囲\",\n columns: \"列\",\n csvUtf8: \"CSV (UTF-8 with BOM)\",\n csvShiftJis: \"CSV (SHIFT-JIS · Excel 互換)\",\n xlsx: \"Excel (.xlsx) · スタイル付き\",\n pdf: \"PDF レポート · 月次サマリー\",\n};\n\nexport function TableExportDialog({\n open,\n onOpenChange,\n title = \"エクスポート\",\n format,\n onFormatChange,\n range,\n onRangeChange,\n includeHiddenColumns,\n onIncludeHiddenColumnsChange,\n rangeCounts,\n columnCounts,\n onExport,\n onCancel,\n exportLabel = \"エクスポート\",\n cancelLabel = \"キャンセル\",\n labels,\n}: TableExportDialogProps) {\n const text = { ...DEFAULT_EXPORT_LABELS, ...labels };\n const currentFilterLabel =\n labels?.currentFilter?.(rangeCounts?.currentFilter) ??\n `現在の絞り込み (${(rangeCounts?.currentFilter ?? 0).toLocaleString()} 件)`;\n const selectedLabel =\n labels?.selected?.(rangeCounts?.selected) ??\n `選択中の ${(rangeCounts?.selected ?? 0).toLocaleString()} 件のみ`;\n const allLabel =\n labels?.all?.(rangeCounts?.all) ??\n `全件 (${(rangeCounts?.all ?? 0).toLocaleString()} 件)`;\n const visibleOnlyLabel =\n labels?.visibleOnly?.(columnCounts?.visible) ??\n `表示中の列のみ (${columnCounts?.visible ?? 0} 列)`;\n const includeHiddenLabel =\n labels?.includeHidden?.(columnCounts?.total) ??\n `隠している列も含む (全 ${columnCounts?.total ?? 0} 列)`;\n return (\n <Dialog\n open={open}\n onOpenChange={onOpenChange}\n title={title}\n footer={\n <>\n <Button\n variant=\"ghost\"\n size=\"small\"\n onClick={() => {\n onCancel?.();\n onOpenChange(false);\n }}\n >\n {cancelLabel}\n </Button>\n <Button size=\"small\" onClick={onExport}>\n {exportLabel}\n </Button>\n </>\n }\n >\n <div className=\"ie-card\" style={{ border: 0, padding: 0, gap: 12 }}>\n <div>\n <div className=\"section-title\">{text.format}</div>\n <RadioGroup\n orientation=\"vertical\"\n value={format}\n onValueChange={(next) => onFormatChange(next as TableExportFormat)}\n >\n <Radio value=\"csv-utf8\">{text.csvUtf8}</Radio>\n <Radio value=\"csv-shift-jis\">{text.csvShiftJis}</Radio>\n <Radio value=\"xlsx\">{text.xlsx}</Radio>\n <Radio value=\"pdf\">{text.pdf}</Radio>\n </RadioGroup>\n </div>\n <div className=\"section\">\n <div className=\"section-title\">{text.range}</div>\n <RadioGroup\n orientation=\"vertical\"\n value={range}\n onValueChange={(next) => onRangeChange(next as TableExportRange)}\n >\n <Radio value=\"current-filter\">{currentFilterLabel}</Radio>\n <Radio value=\"selected\">{selectedLabel}</Radio>\n <Radio value=\"all\">{allLabel}</Radio>\n </RadioGroup>\n </div>\n <div className=\"section\">\n <div className=\"section-title\">{text.columns}</div>\n <label>\n <Checkbox\n checked={!includeHiddenColumns}\n onCheckedChange={(checked) =>\n onIncludeHiddenColumnsChange(checked !== true)\n }\n >\n {visibleOnlyLabel}\n </Checkbox>\n </label>\n <label data-muted={includeHiddenColumns ? \"false\" : \"true\"}>\n <Checkbox\n checked={includeHiddenColumns}\n onCheckedChange={(checked) =>\n onIncludeHiddenColumnsChange(checked === true)\n }\n >\n {includeHiddenLabel}\n </Checkbox>\n </label>\n </div>\n </div>\n </Dialog>\n );\n}\n","import { useEffect, useState } from \"react\";\nimport type { Breakpoint } from \"../components/layout/Row\";\n\n/**\n * useBreakpoint — reads the framework's responsive breakpoint\n * tokens (`--breakpoint-{xs,sm,md,lg,xl,xxl}`) from the CSS\n * token system and returns the WIDEST currently-matching\n * breakpoint name.\n *\n * Per cardinal rule 22 the breakpoint values are token-pinned —\n * no hardcoded literals here; the hook reads `:root` via\n * `getComputedStyle`. Falls back to Tailwind v4 defaults if the\n * tokens aren't set yet (e.g. SSR / hydration / Storybook iframe\n * before theme.css loads).\n *\n * Per cardinal rule 23 §B the breakpoint name vocabulary is locked\n * across the framework — the `Breakpoint` type lives in\n * `components/layout/Row.ts` and is imported here so\n * consumers see exactly one definition.\n *\n * @example\n * const bp = useBreakpoint()\n * if (bp === \"xs\" || bp === \"sm\") return <MobileShell />\n * return <DesktopShell />\n *\n * @example\n * // Render only on >= md\n * const bp = useBreakpoint()\n * return matchBreakpoint(bp, \"md\") ? <Aside /> : null\n */\nexport type { Breakpoint };\n\nconst BP_ORDER: Breakpoint[] = [\"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"];\nconst BP_ORDER_ASC: Breakpoint[] = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"];\n\nconst FALLBACK_WIDTH: Record<Breakpoint, string> = {\n xs: \"0px\",\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n xxl: \"1536px\",\n};\n\nfunction widthOf(bp: Breakpoint): string {\n if (typeof window === \"undefined\") return FALLBACK_WIDTH[bp];\n const v = getComputedStyle(document.documentElement)\n .getPropertyValue(`--breakpoint-${bp}`)\n .trim();\n return v || FALLBACK_WIDTH[bp];\n}\n\nfunction currentBreakpoint(): Breakpoint {\n if (typeof window === \"undefined\") return \"xs\";\n for (const bp of BP_ORDER) {\n if (window.matchMedia(`(min-width: ${widthOf(bp)})`).matches) {\n return bp;\n }\n }\n return \"xs\";\n}\n\nexport function useBreakpoint(): Breakpoint {\n const [bp, setBp] = useState<Breakpoint>(() => currentBreakpoint());\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const mqls = BP_ORDER.map((b) =>\n window.matchMedia(`(min-width: ${widthOf(b)})`),\n );\n const update = () => setBp(currentBreakpoint());\n mqls.forEach((mql) => mql.addEventListener(\"change\", update));\n update();\n return () => {\n mqls.forEach((mql) => mql.removeEventListener(\"change\", update));\n };\n }, []);\n\n return bp;\n}\n\n/**\n * matchBreakpoint — true if `current` is at-or-above the target\n * breakpoint in the mobile-first order.\n *\n * matchBreakpoint(\"lg\", \"md\") → true (lg ≥ md)\n * matchBreakpoint(\"sm\", \"lg\") → false (sm < lg)\n */\nexport function matchBreakpoint(current: Breakpoint, target: Breakpoint): boolean {\n return BP_ORDER_ASC.indexOf(current) >= BP_ORDER_ASC.indexOf(target);\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Empty — Ant-Design empty-state placeholder.\n *\n * <Empty description=\"No data\" />\n * <Empty image={<CustomIllustration />} description=\"Nothing here yet\">\n * <Button>Create one</Button>\n * </Empty>\n */\n\nexport interface EmptyProps extends ComponentProps<\"div\"> {\n /** Image / illustration / icon at the top. */\n image?: ReactNode;\n /** Text below the image (default `null` — no text). */\n description?: ReactNode;\n /** Action area below description (typically a button). */\n children?: ReactNode;\n}\n\nconst DEFAULT_IMAGE = (\n <svg\n width=\"64\"\n height=\"48\"\n viewBox=\"0 0 64 48\"\n fill=\"none\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <ellipse\n cx=\"32\"\n cy=\"42\"\n rx=\"28\"\n ry=\"3\"\n fill=\"currentColor\"\n opacity=\"0.1\"\n />\n <path\n d=\"M14 18l8-12h20l8 12M14 18v18h36V18M14 18h36\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.45\"\n />\n <path\n d=\"M22 18l4 6h12l4-6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.45\"\n />\n </svg>\n);\n\nexport function Empty({\n image,\n description,\n children,\n className,\n ...rest\n}: EmptyProps) {\n return (\n <div className={cn(\"empty\", className)} {...rest}>\n <div className=\"empty-image\">{image ?? DEFAULT_IMAGE}</div>\n {description !== undefined && (\n <p className=\"empty-description\">{description}</p>\n )}\n {children && <div className=\"empty-footer\">{children}</div>}\n </div>\n );\n}\n","/**\n * @godxjp/ui Table — slim primitive.\n *\n * Renders columns × rows. Sort indicators, resize handles, checkbox\n * column (driven by `selection`), expand toggles, tree twirls, group\n * banners, inline editing, sticky columns. The chrome — view tabs,\n * toolbar, filter chips, batch action band, pagination, column\n * manager Sheet, save-view Dialog — lives on the `<DataTable>`\n * composite (`src/components/composites/data-table/`).\n *\n * v5.0.0 (Stage 4b, Plan §3). The legacy chrome props (`toolbar`,\n * `views`, `batchActions`, `filters`, `onFiltersChange`, `filterBar`,\n * `onResetFilters`, `pagination`, `tableKey`) were removed in this\n * release. See `docs/how-to/migrate-to-data-table.md`.\n */\nimport {\n flexRender,\n getCoreRowModel,\n useReactTable,\n type Column,\n type ColumnPinningState,\n type Row,\n type Table as ReactTable,\n type Updater,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport { matchBreakpoint, useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport type { Breakpoint } from \"../layout/Row\";\nimport {\n Fragment,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../cn\";\nimport { Checkbox } from \"../data-entry/Checkbox\";\nimport { Button } from \"../general/Button\";\nimport { Empty } from \"./Empty\";\nimport type {\n TableColumn,\n TableColumnVisibility,\n TableGroupDescriptor,\n TableProps,\n TableRowKey,\n TableSort,\n TableSortState,\n TableStickyConfig,\n TableStickySide,\n} from \"./Table.types\";\n// Re-export the type surface so existing `from \"./data-display/Table\"`\n// imports continue to resolve identically to before the Stage 4 split.\nexport type {\n TableColumn,\n TableColumnPinningChange,\n TableColumnVisibility,\n TableDensity,\n TableEditingConfig,\n TableExpandableConfig,\n TableGroupBy,\n TableGroupDescriptor,\n TableProps,\n TableRowKey,\n TableSelectionConfig,\n TableSort,\n TableSortState,\n TableStickyConfig,\n TableStickySide,\n TableTreeConfig,\n} from \"./Table.types\";\n// Chrome-shaped types remain importable from this module for the\n// composite consumers that still reference them (PR 4/4 of stage 4b\n// will move them into `composites/data-table/DataTable.types.ts`).\nexport type {\n TableBatchActions,\n TableBatchActionsConfig,\n TableBatchActionsContext,\n TableFilter,\n TableFilterBar,\n TableFilterItem,\n TableFilterOperator,\n TableFilterOption,\n TablePagination,\n TablePaginationConfig,\n TablePaginationCursorConfig,\n TablePaginationLoadMoreConfig,\n TablePaginationNumberedConfig,\n TablePaginationVariantConfig,\n TableToolbar,\n TableToolbarButtonConfig,\n TableToolbarColumnConfig,\n TableToolbarConfig,\n TableToolbarFilterConfig,\n TableToolbarSearchConfig,\n TableViewItem,\n TableViewSnapshot,\n TableViews,\n TableViewsConfig,\n} from \"./Table.types\";\n\nfunction resolveUpdater<T>(updater: Updater<T>, previous: T): T {\n return typeof updater === \"function\"\n ? (updater as (old: T) => T)(previous)\n : updater;\n}\n\nfunction resolveRowKey<TData>(\n row: TData,\n index: number,\n rowKey: TableRowKey<TData>,\n warnMissingRowKey: (rowKey: string) => void,\n) {\n if (typeof rowKey === \"function\") {\n const value = rowKey(row, index);\n return String(value);\n }\n if (\n typeof row === \"object\" &&\n row !== null &&\n Object.prototype.hasOwnProperty.call(row, rowKey)\n ) {\n const value = (row as Record<string, unknown>)[rowKey];\n if (value !== undefined && value !== null) return String(value);\n }\n warnMissingRowKey(rowKey);\n return String(index);\n}\n\nfunction resolveCellClass<TData>(\n value: string | ((row: Row<TData>) => string | undefined) | undefined,\n row: Row<TData>,\n) {\n return typeof value === \"function\" ? value(row) : value;\n}\n\nfunction resolveCellStyle<TData>(\n value:\n | CSSProperties\n | ((row: Row<TData>) => CSSProperties | undefined)\n | undefined,\n row: Row<TData>,\n) {\n return typeof value === \"function\" ? value(row) : value;\n}\n\nfunction getColumnKey<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nfunction asSortArray(sort: TableSortState | undefined): TableSort[] {\n if (sort === undefined || sort === null) return [];\n return Array.isArray(sort) ? sort : [sort];\n}\n\nfunction findSortEntry(sort: TableSortState | undefined, key: string) {\n const list = asSortArray(sort);\n const index = list.findIndex((item) => item.key === key);\n return index === -1 ? undefined : { entry: list[index], index, list };\n}\n\n/** Single-click cycle: asc → desc → off. Replaces the head of the list. */\nfunction nextSingleSort(\n current: TableSortState | null | undefined,\n key: string,\n): TableSortState {\n const entry = findSortEntry(current, key);\n if (entry === undefined) return { key, direction: \"asc\" };\n if (entry.entry.direction === \"asc\") return { key, direction: \"desc\" };\n return null;\n}\n\n/** Shift-click: extend the list. Same key → cycle that entry's direction or drop it. */\nfunction nextMultiSort(\n current: TableSortState | null | undefined,\n key: string,\n): TableSortState {\n const list = asSortArray(current);\n const index = list.findIndex((item) => item.key === key);\n if (index === -1) {\n return [...list, { key, direction: \"asc\" }];\n }\n const existing = list[index];\n const next = [...list];\n if (existing.direction === \"asc\") {\n next[index] = { key, direction: \"desc\" };\n } else {\n next.splice(index, 1);\n }\n if (next.length === 0) return null;\n if (next.length === 1) return next[0];\n return next;\n}\n\nfunction resolveStickySide(\n config: TableStickyConfig | undefined,\n bp: Breakpoint,\n): TableStickySide | undefined {\n if (config === undefined || config === false) return undefined;\n if (typeof config === \"string\") return config;\n if (config.from !== undefined && !matchBreakpoint(bp, config.from))\n return undefined;\n return config.side;\n}\n\nfunction deriveColumnPinning<TData>(\n columns: TableColumn<TData, unknown>[],\n bp: Breakpoint,\n): ColumnPinningState {\n return columns.reduce<ColumnPinningState>(\n (state, column) => {\n const key = getColumnKey(column);\n if (key === undefined) return state;\n const side = resolveStickySide(column.meta?.sticky, bp);\n if (side === undefined) return state;\n return { ...state, [side]: [...(state[side] ?? []), key] };\n },\n { left: [], right: [] },\n );\n}\n\nfunction getColumnStyle<TData>(\n column: Column<TData, unknown>,\n extra?: CSSProperties,\n): CSSProperties {\n const pinned = column.getIsPinned();\n const size = column.columnDef.size;\n return {\n width: size !== undefined ? `${column.getSize()}px` : undefined,\n minWidth:\n column.columnDef.minSize !== undefined\n ? `${column.columnDef.minSize}px`\n : undefined,\n maxWidth:\n column.columnDef.maxSize !== undefined\n ? `${column.columnDef.maxSize}px`\n : undefined,\n position: pinned ? \"sticky\" : undefined,\n left: pinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n right: pinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n zIndex: pinned ? 2 : undefined,\n ...extra,\n };\n}\n\nexport function Table<TData>({\n columns,\n data,\n density,\n containerClassName,\n stickyHeader,\n rowKey = \"id\" as TableRowKey<TData>,\n getRowId,\n caption,\n defaultColumnVisibility,\n columnVisibility,\n onColumnVisibilityChange,\n sort,\n onSortChange,\n resizable,\n expandable,\n editing,\n groupBy,\n tree,\n onColumnPinningChange,\n selection,\n footer,\n empty,\n rowClassName,\n className,\n instance,\n ...rest\n}: TableProps<TData>) {\n const { t } = useTranslation();\n const warnedRowKeys = useRef(new Set<string>());\n const [internalColumnVisibility, setInternalColumnVisibility] =\n useState<TableColumnVisibility>(\n () => columnVisibility ?? defaultColumnVisibility ?? {},\n );\n const effectiveColumnVisibility =\n columnVisibility ?? internalColumnVisibility;\n // Auto-pinning is derived from `meta.sticky` against the current\n // breakpoint, so `{ side: \"right\", from: \"md\" }` only sticks on md+.\n // User-toggled pins live in the `<DataTable>` composite.\n const bp = useBreakpoint();\n const autoColumnPinning = useMemo(\n () => deriveColumnPinning(columns, bp),\n [columns, bp],\n );\n const [userColumnPinning, setUserColumnPinning] =\n useState<ColumnPinningState>({ left: [], right: [] });\n const columnPinning = useMemo<ColumnPinningState>(() => {\n const dedupe = (list: string[]) => Array.from(new Set(list));\n return {\n left: dedupe([\n ...(autoColumnPinning.left ?? []),\n ...(userColumnPinning.left ?? []),\n ]),\n right: dedupe([\n ...(autoColumnPinning.right ?? []),\n ...(userColumnPinning.right ?? []),\n ]),\n };\n }, [autoColumnPinning, userColumnPinning]);\n const handleColumnPinningChange = (updater: Updater<ColumnPinningState>) => {\n const next = resolveUpdater(updater, columnPinning);\n const autoLeft = new Set(autoColumnPinning.left ?? []);\n const autoRight = new Set(autoColumnPinning.right ?? []);\n setUserColumnPinning({\n left: (next.left ?? []).filter((key) => !autoLeft.has(key)),\n right: (next.right ?? []).filter((key) => !autoRight.has(key)),\n });\n onColumnPinningChange?.(next);\n };\n // Expand-row + tree-row + editing internal state.\n const [internalExpandedRowKeys, setInternalExpandedRowKeys] = useState<\n string[]\n >(() => expandable?.defaultExpandedRowKeys ?? []);\n const expandedRowKeys =\n expandable?.expandedRowKeys ?? internalExpandedRowKeys;\n const expandedRowKeySet = new Set(expandedRowKeys);\n function toggleExpandedRow(rowId: string) {\n if (expandable === undefined) return;\n const allowMultiple = expandable.allowMultiple === true;\n const nextSet = new Set(expandedRowKeys);\n if (nextSet.has(rowId)) {\n nextSet.delete(rowId);\n } else {\n if (!allowMultiple) nextSet.clear();\n nextSet.add(rowId);\n }\n const next = Array.from(nextSet);\n if (expandable.expandedRowKeys === undefined)\n setInternalExpandedRowKeys(next);\n expandable.onExpandedRowsChange?.(next);\n }\n const [internalTreeExpandedNodes, setInternalTreeExpandedNodes] = useState<\n string[]\n >(() => tree?.defaultExpandedNodes ?? []);\n const treeExpandedNodes =\n tree?.expandedNodes ?? internalTreeExpandedNodes;\n const treeExpandedSet = new Set(treeExpandedNodes);\n function toggleTreeNode(nodeKey: string) {\n if (tree === undefined) return;\n const nextSet = new Set(treeExpandedNodes);\n if (nextSet.has(nodeKey)) nextSet.delete(nodeKey);\n else nextSet.add(nodeKey);\n const next = Array.from(nextSet);\n if (tree.expandedNodes === undefined) setInternalTreeExpandedNodes(next);\n tree.onExpandedNodesChange?.(next);\n }\n const dirtyRowSet = new Set(editing?.dirtyRowIds ?? []);\n const dirtyCellSet = new Set(editing?.dirtyCellIds ?? []);\n const resolveGetRowId =\n getRowId ??\n ((row: TData, index: number) =>\n resolveRowKey(row, index, rowKey, (missingRowKey) => {\n if (warnedRowKeys.current.has(missingRowKey)) return;\n warnedRowKeys.current.add(missingRowKey);\n console.warn(\n `[godx-ui/Table] rowKey \"${missingRowKey}\" was not found on a row. Pass rowKey or getRowId to provide a stable row id.`,\n );\n }));\n const handleColumnVisibilityChange = (updater: Updater<VisibilityState>) => {\n const next = resolveUpdater(updater, effectiveColumnVisibility);\n if (columnVisibility === undefined) setInternalColumnVisibility(next);\n onColumnVisibilityChange?.(next);\n };\n const tableState = useMemo(\n () => ({ columnPinning, columnVisibility: effectiveColumnVisibility }),\n [columnPinning, effectiveColumnVisibility],\n );\n // Always-call-the-hook pattern: the local `useReactTable` runs\n // unconditionally so the rules-of-hooks invariant holds. When an\n // external `instance` is supplied (typically by `<DataTable>` via\n // `useDataTable`) we defer to it for state + row model.\n const localTable = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getRowId: resolveGetRowId,\n enableColumnPinning: true,\n enableColumnResizing: resizable === true,\n columnResizeMode: \"onChange\",\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnPinningChange: handleColumnPinningChange,\n state: tableState,\n });\n const table: ReactTable<TData> = instance ?? localTable;\n const leafColumns = table.getVisibleLeafColumns();\n const hasFooter = leafColumns.some(\n (column) => column.columnDef.footer !== undefined,\n );\n\n // ── Selection wiring (checkbox column only) ──────────────────────\n const selectedRowKeySet = new Set(selection?.selectedRowKeys ?? []);\n const selectableRows = table\n .getRowModel()\n .rows.filter((row) => selection?.getCheckboxDisabled?.(row) !== true);\n const allVisibleSelected =\n selection !== undefined &&\n selectableRows.length > 0 &&\n selectableRows.every((row) => selectedRowKeySet.has(row.id));\n const selectAllVisible = () => {\n if (selection === undefined) return;\n const next = new Set(selection.selectedRowKeys);\n if (allVisibleSelected) selectableRows.forEach((row) => next.delete(row.id));\n else selectableRows.forEach((row) => next.add(row.id));\n selection.onSelectedRowKeysChange(Array.from(next));\n };\n\n const colSpan = Math.max(\n leafColumns.length +\n (selection === undefined ? 0 : 1) +\n (expandable === undefined ? 0 : 1),\n 1,\n );\n const emptyContent = empty ?? <Empty description={t(\"table.emptyDescription\")} />;\n\n function renderDataRow(row: Row<TData>): ReactNode {\n const isEditingRow = editing?.rowId === row.id;\n const isReadOnly = editing?.isRowReadOnly?.(row) === true;\n const isDirtyRow = dirtyRowSet.has(row.id);\n const customClass = resolveCellClass(rowClassName, row);\n const stateClass = cn(\n customClass,\n isEditingRow && \"is-editing\",\n isDirtyRow && !isEditingRow && \"is-dirty\",\n );\n const isExpanded = expandedRowKeySet.has(row.id);\n const canExpand =\n expandable !== undefined &&\n (expandable.rowExpandable === undefined ||\n expandable.rowExpandable(row));\n const rowNodes: ReactNode[] = [];\n rowNodes.push(\n <tr\n key={row.id}\n className={cn(stateClass, isExpanded && \"expanded\")}\n onDoubleClick={\n editing !== undefined && !isReadOnly && !isEditingRow\n ? () => editing.onStart?.(row.id)\n : undefined\n }\n data-row-id={row.id}\n >\n {selection !== undefined && (\n <td className=\"check\">\n <Checkbox\n aria-label={t(\"table.selectRow\", { row: row.id })}\n checked={selectedRowKeySet.has(row.id)}\n disabled={selection.getCheckboxDisabled?.(row)}\n onCheckedChange={(checked) => {\n const next = new Set(selection.selectedRowKeys);\n if (checked === true) next.add(row.id);\n else next.delete(row.id);\n selection.onSelectedRowKeysChange(Array.from(next));\n }}\n />\n </td>\n )}\n {expandable !== undefined && (\n <td className=\"expand-cell\" style={{ width: 32 }}>\n {canExpand && (\n <button\n type=\"button\"\n className={cn(\"expand-toggle\", isExpanded && \"open\")}\n aria-label={\n isExpanded ? t(\"table.collapseRow\") : t(\"table.expandRow\")\n }\n aria-expanded={isExpanded}\n onClick={() => toggleExpandedRow(row.id)}\n >\n ▶\n </button>\n )}\n </td>\n )}\n {row.getVisibleCells().map((cell) => {\n const meta = cell.column.columnDef.meta;\n const cellId = `${row.id}:${cell.column.id}`;\n const isDirtyCell = dirtyCellSet.has(cellId);\n const cellContent =\n isEditingRow && !isReadOnly && editing?.renderEditCell\n ? (editing.renderEditCell(cell.column.columnDef, row) ??\n flexRender(cell.column.columnDef.cell, cell.getContext()))\n : flexRender(cell.column.columnDef.cell, cell.getContext());\n return (\n <td\n key={cell.id}\n className={cn(\n meta?.className,\n cell.column.getIsPinned() &&\n `table-pinned-${cell.column.getIsPinned()}`,\n resolveCellClass(meta?.cellClassName, row),\n isDirtyCell && \"cell-dirty\",\n )}\n style={getColumnStyle(cell.column, {\n ...meta?.style,\n ...resolveCellStyle(meta?.cellStyle, row),\n })}\n >\n {cellContent}\n </td>\n );\n })}\n </tr>,\n );\n if (expandable !== undefined && isExpanded) {\n rowNodes.push(\n <tr key={`${row.id}:expand`} className=\"expand-panel\">\n <td colSpan={colSpan}>{expandable.renderExpandedRow(row)}</td>\n </tr>,\n );\n }\n return <Fragment key={`${row.id}:wrap`}>{rowNodes}</Fragment>;\n }\n\n function renderTreeRow(\n item: TData,\n depth: number,\n nodes: ReactNode[],\n ): void {\n const id = String(resolveGetRowId(item, nodes.length));\n const children = tree?.children(item);\n const hasChildren = (children?.length ?? 0) > 0;\n const isOpen = treeExpandedSet.has(id);\n const visibleColumns = table.getVisibleLeafColumns();\n nodes.push(\n <tr key={id} className={resolveCellClass(rowClassName, {\n id,\n original: item,\n getVisibleCells: () => [],\n } as unknown as Row<TData>)}>\n {visibleColumns.map((column, columnIndex) => {\n const meta = column.columnDef.meta;\n const isFirst = columnIndex === 0;\n const indents = isFirst && depth > 0\n ? Array.from({ length: depth }, (_, i) => (\n <span key={i} className=\"indent\" aria-hidden />\n ))\n : null;\n const twirl = isFirst && hasChildren ? (\n <button\n type=\"button\"\n className={cn(\"twirl-btn\", isOpen && \"open\")}\n aria-label={isOpen ? t(\"table.collapseRow\") : t(\"table.expandRow\")}\n aria-expanded={isOpen}\n onClick={() => toggleTreeNode(id)}\n >\n ▶\n </button>\n ) : isFirst ? (\n <span className=\"indent\" aria-hidden />\n ) : null;\n const accessor = (column.columnDef as { accessorKey?: string })\n .accessorKey;\n let content: ReactNode = null;\n if (typeof column.columnDef.cell === \"function\") {\n content = column.columnDef.cell({\n row: { original: item, id } as Row<TData>,\n column,\n table,\n getValue: () =>\n accessor !== undefined\n ? (item as Record<string, unknown>)[accessor]\n : undefined,\n renderValue: () =>\n accessor !== undefined\n ? (item as Record<string, unknown>)[accessor]\n : undefined,\n cell: {} as never,\n } as never);\n } else if (accessor !== undefined) {\n const raw = (item as Record<string, unknown>)[accessor];\n content = raw === undefined || raw === null ? \"\" : String(raw);\n }\n return (\n <td\n key={column.id}\n className={cn(\n meta?.className,\n column.getIsPinned() && `table-pinned-${column.getIsPinned()}`,\n )}\n style={getColumnStyle(column, { ...meta?.style })}\n >\n {indents}\n {twirl}\n {twirl !== null ? \" \" : null}\n {content}\n </td>\n );\n })}\n </tr>,\n );\n if (hasChildren && isOpen && tree !== undefined) {\n const maxDepth = tree.maxDepth ?? 8;\n if (depth + 1 <= maxDepth) {\n for (const child of children ?? []) {\n renderTreeRow(child, depth + 1, nodes);\n }\n }\n }\n }\n\n function renderBodyRows(): ReactNode {\n const rows = table.getRowModel().rows;\n if (rows.length === 0) {\n return (\n <tr>\n <td colSpan={colSpan} className=\"muted\">\n {emptyContent}\n </td>\n </tr>\n );\n }\n if (tree !== undefined) {\n const nodes: ReactNode[] = [];\n for (const item of data) renderTreeRow(item, 0, nodes);\n return nodes;\n }\n if (groupBy !== undefined) {\n const buckets = new Map<\n string,\n { descriptor: TableGroupDescriptor; rows: Row<TData>[] }\n >();\n const order: string[] = [];\n for (const row of rows) {\n const raw = groupBy(row.original);\n if (raw === undefined) continue;\n const descriptor: TableGroupDescriptor =\n typeof raw === \"string\" ? { key: raw, label: raw } : raw;\n const bucket = buckets.get(descriptor.key);\n if (bucket === undefined) {\n buckets.set(descriptor.key, { descriptor, rows: [row] });\n order.push(descriptor.key);\n } else {\n bucket.rows.push(row);\n }\n }\n const nodes: ReactNode[] = [];\n for (const key of order) {\n const bucket = buckets.get(key);\n if (bucket === undefined) continue;\n const isCollapsed = treeExpandedSet.has(`group:collapse:${key}`);\n nodes.push(\n <tr key={`group:${key}`} className=\"group-row\">\n <td colSpan={colSpan}>\n <button\n type=\"button\"\n className=\"twirl\"\n aria-label={\n isCollapsed\n ? t(\"table.expandRow\")\n : t(\"table.collapseRow\")\n }\n aria-expanded={!isCollapsed}\n onClick={() => toggleTreeNode(`group:collapse:${key}`)}\n style={{\n background: \"transparent\",\n border: 0,\n padding: 0,\n cursor: \"pointer\",\n font: \"inherit\",\n color: \"inherit\",\n }}\n >\n {isCollapsed ? \"▶\" : \"▼\"}\n </button>{\" \"}\n {bucket.descriptor.label}\n {bucket.descriptor.count !== undefined && (\n <span className=\"gcount\">{bucket.descriptor.count}</span>\n )}\n {bucket.descriptor.total !== undefined && (\n <span className=\"gtotal\">{bucket.descriptor.total}</span>\n )}\n </td>\n </tr>,\n );\n if (!isCollapsed) {\n for (const row of bucket.rows) {\n nodes.push(renderDataRow(row));\n }\n }\n }\n return nodes;\n }\n return rows.map((row) => renderDataRow(row));\n }\n\n return (\n <div\n className={cn(\"table-stack\", containerClassName)}\n data-density={density}\n >\n <div className=\"table-scroll\">\n <table\n data-density={density}\n data-sticky-header={stickyHeader ? \"true\" : undefined}\n className={cn(\"table\", className)}\n {...rest}\n >\n {caption !== undefined && <caption>{caption}</caption>}\n <thead data-sticky={stickyHeader ? \"true\" : undefined}>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {selection !== undefined && (\n <th className=\"check\">\n <Checkbox\n aria-label={t(\"table.selectAllRows\")}\n checked={allVisibleSelected}\n onCheckedChange={selectAllVisible}\n />\n </th>\n )}\n {expandable !== undefined && (\n <th className=\"expand-col\" style={{ width: 32 }} />\n )}\n {headerGroup.headers.map((header) => {\n const meta = header.column.columnDef.meta;\n const columnKey = getColumnKey(header.column.columnDef);\n const isSortable =\n meta?.sortable === true &&\n columnKey !== undefined &&\n onSortChange !== undefined;\n const sortEntry =\n columnKey !== undefined\n ? findSortEntry(sort, columnKey)\n : undefined;\n const sortedDirection = sortEntry?.entry.direction;\n const multiSortIndex =\n sortEntry !== undefined && sortEntry.list.length > 1\n ? sortEntry.index + 1\n : undefined;\n const headerContent = header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n );\n const canResize =\n resizable === true && header.column.getCanResize();\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n className={cn(\n meta?.className,\n meta?.headerClassName,\n header.column.getIsPinned() &&\n `table-pinned-${header.column.getIsPinned()}`,\n isSortable && \"sortable\",\n canResize && \"has-resize\",\n )}\n style={getColumnStyle(header.column, {\n ...meta?.style,\n ...meta?.headerStyle,\n })}\n aria-sort={\n sortedDirection === \"asc\"\n ? \"ascending\"\n : sortedDirection === \"desc\"\n ? \"descending\"\n : undefined\n }\n >\n {isSortable && columnKey !== undefined ? (\n <button\n type=\"button\"\n className=\"table-sort-button\"\n onClick={(event) => {\n const next = event.shiftKey\n ? nextMultiSort(sort, columnKey)\n : nextSingleSort(sort, columnKey);\n onSortChange(next);\n }}\n >\n {headerContent}\n <span className=\"sort\" aria-hidden>\n <span\n className={\n sortedDirection === \"asc\" ? \"a on\" : \"a\"\n }\n >\n ▲\n </span>\n <span\n className={\n sortedDirection === \"desc\" ? \"d on\" : \"d\"\n }\n >\n ▼\n </span>\n </span>\n {multiSortIndex !== undefined && (\n <span className=\"multi\" aria-hidden>\n {multiSortIndex}\n </span>\n )}\n </button>\n ) : (\n headerContent\n )}\n {canResize && (\n <button\n type=\"button\"\n aria-label={t(\"table.resizeColumn\") || \"Resize column\"}\n className=\"resize\"\n data-resizing={\n header.column.getIsResizing() ? \"true\" : undefined\n }\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n onDoubleClick={() => header.column.resetSize()}\n />\n )}\n </th>\n );\n })}\n </tr>\n ))}\n </thead>\n <tbody>{renderBodyRows()}</tbody>\n {hasFooter && (\n <tfoot>\n {table.getFooterGroups().map((footerGroup) => (\n <tr key={footerGroup.id}>\n {footerGroup.headers.map((footer) => {\n const meta = footer.column.columnDef.meta;\n return (\n <td\n key={footer.id}\n colSpan={footer.colSpan}\n className={cn(meta?.className)}\n style={{ ...meta?.style }}\n >\n {footer.isPlaceholder\n ? null\n : flexRender(\n footer.column.columnDef.footer,\n footer.getContext(),\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tfoot>\n )}\n </table>\n </div>\n {footer !== undefined && <div className=\"tbl-footer\">{footer}</div>}\n {editing !== undefined && dirtyRowSet.size > 0 && (\n <div className=\"tbl-footer\" data-state=\"dirty\">\n <span className=\"tbl-footer-icon\" aria-hidden>\n <svg\n width={13}\n height={13}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx={12} cy={12} r={10} />\n <line x1={12} y1={8} x2={12} y2={12} />\n <line x1={12} y1={16} x2={12.01} y2={16} />\n </svg>\n </span>\n <span>\n {editing.unsavedLabel?.(dirtyRowSet.size) ??\n t(\"table.unsavedChanges\", { count: dirtyRowSet.size })}\n </span>\n <span className=\"spacer\" />\n {editing.onCancelAll !== undefined && (\n <Button\n size=\"x-small\"\n variant=\"ghost\"\n onClick={editing.onCancelAll}\n >\n {editing.cancelAllLabel ?? t(\"table.cancelAll\")}\n </Button>\n )}\n {editing.onSaveAll !== undefined && (\n <Button size=\"x-small\" onClick={editing.onSaveAll}>\n {editing.saveAllLabel ?? t(\"table.saveAll\")}\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { ComponentProps, CSSProperties, MouseEvent, ReactNode } from \"react\";\nimport { cn } from \"../cn\";\nimport type { ColorProp } from \"../../props\";\n\n/**\n * Tag — Ant-Design label chip.\n *\n * <Tag>basic</Tag>\n * <Tag color=\"success\">done</Tag>\n * <Tag color=\"oklch(56% 0.15 240)\">custom hue</Tag>\n * <Tag closable onClose={() => …}>removable</Tag>\n * <Tag bordered={false}>borderless</Tag>\n *\n * Distinct from <Badge>: Badge is for status pills (a numeric or\n * single short word), Tag is for labels (potentially many in a row,\n * potentially closable).\n */\n\n/**\n * Tag accepts the framework's full semantic palette except `\"secondary\"`\n * (that one is reserved for Typography text-dimming). Aliased from the\n * shared `ColorProp` so the vocabulary stays in lockstep with Alert,\n * Result, Timeline, etc.\n */\nexport type TagPresetColor = Exclude<ColorProp, \"secondary\">;\n\nexport interface TagProps extends Omit<ComponentProps<\"span\">, \"color\"> {\n /** Preset hue or a custom CSS color. */\n color?: TagPresetColor | string;\n /** Show outline (default `true`). Borderless = solid-tinted background only. */\n bordered?: boolean;\n /** Show an × button. Calls `onClose`. */\n closable?: boolean;\n onClose?: (e: MouseEvent<HTMLButtonElement>) => void;\n /** Leading icon. */\n icon?: ReactNode;\n}\n\nconst PRESET_VAR: Record<TagPresetColor, string> = {\n default: \"var(--muted-foreground)\",\n success: \"var(--success)\",\n warning: \"var(--warning)\",\n destructive: \"var(--destructive)\",\n info: \"var(--info)\",\n attention: \"var(--attention)\",\n primary: \"var(--primary)\",\n};\n\nfunction resolveHue(color: TagPresetColor | string | undefined): string {\n if (!color) return PRESET_VAR.default;\n if (color in PRESET_VAR) return PRESET_VAR[color as TagPresetColor];\n return color;\n}\n\nexport function Tag({\n color,\n bordered = true,\n closable,\n onClose,\n icon,\n className,\n style,\n children,\n ...rest\n}: TagProps) {\n const hue = resolveHue(color);\n\n const inline: CSSProperties = {\n color: hue,\n background: `color-mix(in oklch, ${hue} 14%, transparent)`,\n borderColor: bordered ? `color-mix(in oklch, ${hue} 35%, transparent)` : \"transparent\",\n ...style,\n };\n\n return (\n <span\n className={cn(\"tag\", !bordered && \"tag-borderless\", className)}\n style={inline}\n {...rest}\n >\n {icon !== undefined && <span className=\"tag-icon\">{icon}</span>}\n <span className=\"tag-label\">{children}</span>\n {closable && (\n <button\n type=\"button\"\n className=\"tag-close\"\n onClick={onClose}\n aria-label=\"Remove tag\"\n >\n ×\n </button>\n )}\n </span>\n );\n}\n","import {\n forwardRef,\n type ComponentProps,\n type CSSProperties,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { cn } from \"../cn\";\n\n/**\n * Input — text input with affix slots that match the canonical\n * dxs-kintai `.input-wrap` shell.\n *\n * <Input prefix={<SearchIcon />} suffix={<EyeIcon />} />\n * <Input addonBefore=\"https://\" addonAfter=\".com\" />\n * <Input size=\"large\" status=\"error\" />\n *\n * When `prefix` / `suffix` is provided the input is wrapped in a\n * `.input-wrap` shell that owns the focus ring while the icon sits\n * inside the field. When `addonBefore` / `addonAfter` is provided the\n * input + addons form a connected group; the addons render inside the\n * same `.input-wrap` as canonical `.affix.pre` / `.affix.suf`.\n */\n\nexport type InputSize = \"small\" | \"default\" | \"large\";\n/**\n * Form-field validation state per cardinal rule 23 §B vocabulary\n * (`\"default\" | \"success\" | \"warning\" | \"error\"`). Drives the border\n * + ring + helper-text color via the semantic chain.\n */\nexport type InputStatus = \"default\" | \"success\" | \"warning\" | \"error\";\n\nexport interface InputProps\n extends Omit<ComponentProps<\"input\">, \"prefix\" | \"size\"> {\n prefix?: ReactNode;\n suffix?: ReactNode;\n addonBefore?: ReactNode;\n addonAfter?: ReactNode;\n size?: InputSize;\n status?: InputStatus;\n /** Padding for the inner input — usually auto-derived from prefix/suffix. */\n inputStyle?: CSSProperties;\n}\n\nconst SIZE_CLASS: Record<InputSize, string> = {\n small: \"input-size-small\",\n default: \"\",\n large: \"input-size-large\",\n};\n\nconst STATUS_CLASS: Record<InputStatus, string> = {\n default: \"\",\n success: \"input-status-success\",\n warning: \"input-status-warning\",\n error: \"input-status-error\",\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n prefix,\n suffix,\n addonBefore,\n addonAfter,\n size = \"default\",\n status = \"default\",\n className,\n inputStyle,\n type = \"text\",\n readOnly,\n ...rest\n },\n ref,\n) {\n const sizeClass = SIZE_CLASS[size];\n const statusClass = STATUS_CLASS[status];\n\n // Bare input — no decoration.\n if (!prefix && !suffix && !addonBefore && !addonAfter) {\n return (\n <input\n ref={ref}\n type={type}\n readOnly={readOnly}\n className={cn(\n \"input\",\n sizeClass,\n statusClass,\n readOnly && \"input-readonly\",\n className,\n )}\n style={inputStyle}\n {...rest}\n />\n );\n }\n\n // Affix + addon shell — single canonical `.input-wrap` with\n // `.affix.pre` / `.affix.suf` per dxs-kintai design system.\n return (\n <div\n className={cn(\n \"input-wrap\",\n sizeClass,\n statusClass,\n prefix !== undefined && \"input-has-prefix\",\n suffix !== undefined && \"input-has-suffix\",\n readOnly && \"input-readonly\",\n className,\n )}\n >\n {addonBefore !== undefined && (\n <span className=\"affix addon pre\">{addonBefore}</span>\n )}\n {prefix !== undefined && <span className=\"affix prefix pre\">{prefix}</span>}\n <input\n ref={ref}\n type={type}\n readOnly={readOnly}\n style={inputStyle}\n {...rest}\n />\n {suffix !== undefined && <span className=\"affix suffix suf\">{suffix}</span>}\n {addonAfter !== undefined && (\n <span className=\"affix addon suf\">{addonAfter}</span>\n )}\n </div>\n );\n});\n\n/**\n * Textarea — `rows`, `autoSize`, `showCount`, `maxLength`, `resize`,\n * `status`, `size`. Visual contract maps to `.input` from the canonical\n * dxs-kintai design system.\n *\n * <Textarea rows={5} resize=\"vertical\" />\n * <Textarea autoSize={{ minRows: 3, maxRows: 8 }} showCount maxLength={500} />\n */\n\nexport type TextareaResize = \"none\" | \"vertical\" | \"horizontal\" | \"both\";\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\"> {\n size?: InputSize;\n status?: InputStatus;\n /** \"none\" by default — matches the canonical chrome. */\n resize?: TextareaResize;\n /** Auto-grow on content. `true` = grow indefinitely. */\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n /** Show character count in the bottom-right. */\n showCount?: boolean;\n}\n\nconst RESIZE_STYLE: Record<TextareaResize, CSSProperties[\"resize\"]> = {\n none: \"none\",\n vertical: \"vertical\",\n horizontal: \"horizontal\",\n both: \"both\",\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n size = \"default\",\n status = \"default\",\n resize = \"none\",\n autoSize,\n showCount,\n maxLength,\n className,\n style,\n value,\n defaultValue,\n readOnly,\n ...rest\n },\n ref,\n ) {\n const rows = typeof autoSize === \"object\" ? autoSize.minRows : rest.rows;\n const maxRows = typeof autoSize === \"object\" ? autoSize.maxRows : undefined;\n\n const mergedStyle: CSSProperties = {\n resize: RESIZE_STYLE[resize],\n ...style,\n };\n if (maxRows) {\n mergedStyle.maxHeight = `${maxRows * 1.5}em`;\n mergedStyle.overflowY = \"auto\";\n }\n\n // Pick controlled OR uncontrolled — passing both `value` and\n // `defaultValue` (even when one is undefined) trips React's\n // \"controlled ↔ uncontrolled transition\" warning.\n const valueProp =\n value !== undefined ? { value } : { defaultValue };\n\n const textareaEl = (\n <textarea\n ref={ref}\n rows={rows}\n maxLength={maxLength}\n {...valueProp}\n readOnly={readOnly}\n className={cn(\n \"input\",\n SIZE_CLASS[size],\n STATUS_CLASS[status],\n readOnly && \"input-readonly\",\n !showCount && className,\n )}\n style={mergedStyle}\n {...rest}\n />\n );\n\n if (!showCount) return textareaEl;\n\n const current =\n typeof value === \"string\"\n ? value.length\n : typeof defaultValue === \"string\"\n ? defaultValue.length\n : 0;\n const over = typeof maxLength === \"number\" && current > maxLength;\n const near =\n typeof maxLength === \"number\" && !over && current >= Math.floor(maxLength * 0.9);\n\n return (\n <div className={cn(\"textarea-with-count\", className)}>\n {textareaEl}\n <span className={cn(\"count\", near && \"warn\", over && \"over\")}>\n {maxLength ? `${current} / ${maxLength}` : current}\n </span>\n </div>\n );\n },\n);\n","import { Search, X } from \"lucide-react\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport type { ChangeEvent, KeyboardEvent } from \"react\";\nimport { Input, type InputProps } from \"./Input\";\n\n/**\n * InputSearch — Input subtype with leading magnifier + optional clear-X.\n *\n * Mirrors the canonical search pattern used in `K:comp-pageheader.html`\n * and `K:comp-topbar.html`. Wraps `<Input>` so every base prop\n * pass-through works (`size`, `status`, etc.).\n *\n * Behaviour:\n * - Renders a leading `<Search>` icon as the `prefix` slot.\n * - Default `searchMode=\"submit\"` fires `onSearch` only from the\n * search button or Enter key. Use `searchMode=\"change\"` for local\n * in-memory filtering only.\n * - When `value` is non-empty and `allowClear` is true (default),\n * hides the custom suffix and renders a trailing `<X>` clear button that fires\n * `onChange({ target: { value: \"\" } })` and `onClear()`.\n *\n * Controlled-or-uncontrolled. Sets `type=\"search\"` for native semantics\n * (mobile keyboards, `<form>` reset behaviour).\n *\n * @example\n * <InputSearch placeholder=\"従業員を検索\" />\n *\n * @example controlled\n * <InputSearch\n * value={query}\n * onChange={(e) => setQuery(e.target.value)}\n * onClear={() => setQuery(\"\")}\n * />\n */\n\nexport interface InputSearchProps extends Omit<InputProps, \"type\" | \"prefix\"> {\n /** Show the trailing X clear button when value is non-empty. Default `true`. */\n allowClear?: boolean;\n /** Fired when the user clicks the clear button. */\n onClear?: () => void;\n /** Search execution mode. Default `submit` avoids request-per-keypress. */\n searchMode?: \"submit\" | \"change\";\n /** Fired when search should execute. */\n onSearch?: (value: string) => void;\n /** Custom leading icon — defaults to lucide `Search`. */\n searchIcon?: React.ReactNode;\n}\n\nexport const InputSearch = forwardRef<HTMLInputElement, InputSearchProps>(\n function InputSearch(\n {\n allowClear = true,\n onClear,\n onChange,\n onKeyDown,\n onSearch,\n searchMode = \"submit\",\n value: controlledValue,\n defaultValue,\n searchIcon,\n suffix,\n ...rest\n },\n ref,\n ) {\n const [internal, setInternal] = useState<string>(\n typeof defaultValue === \"string\" ? defaultValue : \"\",\n );\n const value =\n controlledValue !== undefined ? String(controlledValue) : internal;\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (controlledValue === undefined) setInternal(e.target.value);\n onChange?.(e);\n if (searchMode === \"change\") onSearch?.(e.target.value);\n },\n [controlledValue, onChange, onSearch, searchMode],\n );\n\n const submitSearch = useCallback(() => {\n onSearch?.(value);\n }, [onSearch, value]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || e.key !== \"Enter\" || e.nativeEvent.isComposing) return;\n submitSearch();\n },\n [onKeyDown, submitSearch],\n );\n\n const handleClear = useCallback(() => {\n if (controlledValue === undefined) setInternal(\"\");\n onClear?.();\n onSearch?.(\"\");\n // Synthesize a change event so consumer state stays in sync even\n // when `onChange` was passed but `onClear` was not.\n if (!onClear && onChange) {\n const synthetic = {\n target: { value: \"\" } as unknown as HTMLInputElement,\n currentTarget: { value: \"\" } as unknown as HTMLInputElement,\n } as unknown as ChangeEvent<HTMLInputElement>;\n onChange(synthetic);\n }\n }, [controlledValue, onChange, onClear, onSearch]);\n\n const searchButton = (\n <button\n type=\"button\"\n className=\"input-search-button\"\n onClick={submitSearch}\n aria-label=\"Search\"\n tabIndex={-1}\n >\n {searchIcon ?? <Search size={14} />}\n </button>\n );\n\n const clearButton =\n allowClear && value.length > 0 ? (\n <button\n type=\"button\"\n className=\"input-pass-toggle\"\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <X size={14} />\n </button>\n ) : undefined;\n const hintSuffix = value.length > 0 ? undefined : suffix;\n const suffixContent =\n clearButton !== undefined || hintSuffix !== undefined ? (\n <>\n {clearButton}\n {hintSuffix}\n </>\n ) : undefined;\n\n // Pick controlled OR uncontrolled — passing both `value` and\n // `defaultValue` to the inner <input> (even when one is undefined)\n // trips React's \"controlled ↔ uncontrolled\" warning.\n const valueProp =\n controlledValue !== undefined\n ? { value: controlledValue }\n : { defaultValue }\n return (\n <Input\n ref={ref}\n type=\"search\"\n {...valueProp}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n prefix={searchButton}\n suffix={suffixContent}\n {...rest}\n />\n );\n },\n);\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\"\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type ReactNode } from \"react\"\nimport { cn } from \"../cn\"\n\nconst Root = PopoverPrimitive.Root\nconst Trigger = PopoverPrimitive.Trigger\n\nexport interface PopoverProps\n extends Omit<ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>, \"children\"> {\n trigger?: ReactNode\n children?: ReactNode\n align?: ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>[\"align\"]\n side?: ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>[\"side\"]\n sideOffset?: number\n className?: string\n contentProps?: Omit<ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>, \"children\">\n}\n\nexport const Popover = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n PopoverProps\n>(function Popover(\n {\n trigger,\n children,\n align = \"center\",\n side,\n sideOffset = 6,\n className,\n contentProps,\n ...rootProps\n },\n ref,\n) {\n if (trigger === undefined) {\n return <Root {...rootProps}>{children}</Root>\n }\n\n return (\n <Root {...rootProps}>\n <Trigger asChild>{trigger}</Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n side={side}\n sideOffset={sideOffset}\n {...contentProps}\n className={cn(\"popover-content\", className, contentProps?.className)}\n >\n {children}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </Root>\n )\n})\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Command } from \"cmdk\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport {\n forwardRef,\n Fragment,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from \"react\";\nimport { Popover } from \"../data-display/Popover\";\nimport { cn } from \"../cn\";\n\n/**\n * Select — single-select picker.\n *\n * <Select options={[…]} value={…} onValueChange={…} placeholder=\"…\" />\n *\n * Pass `searchable` for a filterable variant backed by cmdk + Popover\n * (replaces the former standalone Combobox primitive):\n *\n * <Select options={…} value={…} onValueChange={…} searchable\n * searchPlaceholder=\"Find…\" emptyLabel=\"No matches\" />\n */\n\nexport interface SelectOption {\n value: string;\n /** Display content — usually a string, but ReactNode is fine for\n * icon + label compositions. When `searchable`, string labels are\n * used as filter keywords automatically. */\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n label: ReactNode;\n options: SelectOption[];\n}\n\nexport type SelectOptions = ReadonlyArray<SelectOption | SelectOptionGroup>;\n\nexport interface SelectProps\n extends Omit<\n ComponentPropsWithoutRef<typeof SelectPrimitive.Root>,\n \"children\"\n > {\n options: SelectOptions;\n placeholder?: ReactNode;\n triggerClassName?: string;\n contentClassName?: string;\n /** Render a searchable variant (cmdk + Popover) instead of Radix Select. */\n searchable?: boolean;\n /** Search input placeholder (searchable mode only). */\n searchPlaceholder?: string;\n /** Shown when the filter matches nothing (searchable mode only). */\n emptyLabel?: ReactNode;\n /** Render a disabled loading row instead of options (searchable mode only). */\n loading?: boolean;\n /** Loading row text (searchable mode only). */\n loadingLabel?: ReactNode;\n}\n\nfunction isOptionGroup(\n opt: SelectOption | SelectOptionGroup,\n): opt is SelectOptionGroup {\n return Array.isArray((opt as SelectOptionGroup).options);\n}\n\nfunction flattenOptions(options: SelectOptions): SelectOption[] {\n const out: SelectOption[] = [];\n for (const opt of options) {\n if (isOptionGroup(opt)) out.push(...opt.options);\n else out.push(opt);\n }\n return out;\n}\n\nexport function Select({\n options,\n placeholder,\n triggerClassName,\n contentClassName,\n searchable,\n searchPlaceholder,\n emptyLabel,\n loading,\n loadingLabel = \"Loading…\",\n ...rest\n}: SelectProps) {\n if (searchable) {\n return (\n <SearchableSelect\n options={options}\n placeholder={placeholder}\n triggerClassName={triggerClassName}\n contentClassName={contentClassName}\n searchPlaceholder={searchPlaceholder}\n emptyLabel={emptyLabel}\n loading={loading}\n loadingLabel={loadingLabel}\n {...rest}\n />\n );\n }\n return (\n <SelectPrimitive.Root {...rest}>\n <Trigger className={triggerClassName}>\n <SelectPrimitive.Value placeholder={placeholder} />\n </Trigger>\n <Content className={contentClassName}>\n {options.map((opt, i) =>\n isOptionGroup(opt) ? (\n <Fragment key={`group-${i}`}>\n <SelectPrimitive.Group>\n <Label>{opt.label}</Label>\n {opt.options.map((leaf) => (\n <Item\n key={leaf.value}\n value={leaf.value}\n disabled={leaf.disabled}\n >\n {leaf.label}\n </Item>\n ))}\n </SelectPrimitive.Group>\n {i < options.length - 1 && <Separator />}\n </Fragment>\n ) : (\n <Item key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </Item>\n ),\n )}\n </Content>\n </SelectPrimitive.Root>\n );\n}\n\ninterface SearchableSelectProps\n extends Omit<SelectProps, \"searchable\"> {}\n\nfunction SearchableSelect({\n options,\n placeholder,\n triggerClassName,\n contentClassName,\n searchPlaceholder,\n emptyLabel,\n loading,\n loadingLabel,\n value,\n defaultValue,\n onValueChange,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disabled,\n name: _name,\n required: _required,\n dir: _dir,\n autoComplete: _autoComplete,\n ...rest\n}: SearchableSelectProps) {\n const isValueControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string | undefined>(\n defaultValue,\n );\n const currentValue = isValueControlled ? value : internalValue;\n\n const isOpenControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const open = isOpenControlled ? openProp : internalOpen;\n const setOpen = (next: boolean) => {\n if (!isOpenControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n const selected = flattenOptions(options).find(\n (option) => option.value === currentValue,\n );\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n align=\"start\"\n sideOffset={4}\n className={cn(\"select-content\", contentClassName)}\n trigger={\n <button\n type=\"button\"\n className={cn(\"input\", \"select-trigger\", triggerClassName)}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n title={\n selected && typeof selected.label === \"string\"\n ? selected.label\n : undefined\n }\n >\n <span className={cn(\"select-trigger-text\", !selected && \"muted\")}>\n {selected ? selected.label : placeholder}\n </span>\n <ChevronDown\n className=\"muted\"\n aria-hidden\n style={{\n width: \"var(--spacing-4)\",\n height: \"var(--spacing-4)\",\n flexShrink: 0,\n }}\n />\n </button>\n }\n {...rest}\n >\n <Command className=\"combobox-command\">\n <Command.Input\n className=\"combobox-input\"\n placeholder={searchPlaceholder}\n />\n <Command.List className=\"combobox-list\">\n {loading ? (\n <Command.Item value=\"__loading\" disabled className=\"combobox-item\">\n {loadingLabel}\n </Command.Item>\n ) : (\n <>\n {emptyLabel !== undefined && (\n <Command.Empty className=\"combobox-empty\">\n {emptyLabel}\n </Command.Empty>\n )}\n {options.map((opt, i) =>\n isOptionGroup(opt) ? (\n <Command.Group\n key={`group-${i}`}\n heading={\n typeof opt.label === \"string\" ? opt.label : undefined\n }\n >\n {opt.options.map((leaf) => (\n <SearchableItem\n key={leaf.value}\n option={leaf}\n onSelect={(picked) => {\n if (!isValueControlled) setInternalValue(picked);\n onValueChange?.(picked);\n setOpen(false);\n }}\n />\n ))}\n </Command.Group>\n ) : (\n <SearchableItem\n key={opt.value}\n option={opt}\n onSelect={(picked) => {\n if (!isValueControlled) setInternalValue(picked);\n onValueChange?.(picked);\n setOpen(false);\n }}\n />\n ),\n )}\n </>\n )}\n </Command.List>\n </Command>\n </Popover>\n );\n}\n\nfunction SearchableItem({\n option,\n onSelect,\n}: {\n option: SelectOption;\n onSelect: (value: string) => void;\n}) {\n const keywords =\n typeof option.label === \"string\" ? [option.label] : undefined;\n return (\n <Command.Item\n value={option.value}\n keywords={keywords}\n disabled={option.disabled}\n className=\"combobox-item\"\n onSelect={onSelect}\n >\n {option.label}\n </Command.Item>\n );\n}\n\nconst Trigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(function Trigger({ className, children, ...rest }, ref) {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\"input\", \"select-trigger\", className)}\n {...rest}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown\n className=\"muted\"\n aria-hidden\n style={{\n width: \"var(--spacing-4)\",\n height: \"var(--spacing-4)\",\n flexShrink: 0,\n }}\n />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\n\nconst Content = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function Content(\n { className, children, position = \"popper\", sideOffset = 4, ...rest },\n ref,\n) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\"select-content\", className)}\n position={position}\n sideOffset={sideOffset}\n {...rest}\n >\n <ScrollUp>\n <ChevronUp\n aria-hidden\n style={{ width: \"var(--spacing-4)\", height: \"var(--spacing-4)\" }}\n />\n </ScrollUp>\n <SelectPrimitive.Viewport className=\"select-viewport\">\n {children}\n </SelectPrimitive.Viewport>\n <ScrollDown>\n <ChevronDown\n aria-hidden\n style={{ width: \"var(--spacing-4)\", height: \"var(--spacing-4)\" }}\n />\n </ScrollDown>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\n\nconst Label = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(function Label({ className, ...rest }, ref) {\n return (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"select-label\", className)}\n {...rest}\n />\n );\n});\n\nconst Item = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(function Item({ className, children, ...rest }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\"select-item\", className)}\n {...rest}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n});\n\nconst Separator = forwardRef<\n ElementRef<typeof SelectPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(function Separator({ className, ...rest }, ref) {\n return (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"select-separator\", className)}\n {...rest}\n />\n );\n});\n\nconst ScrollUp = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(function ScrollUp({ className, ...rest }, ref) {\n return (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\"select-scroll-btn\", className)}\n {...rest}\n />\n );\n});\n\nconst ScrollDown = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(function ScrollDown({ className, ...rest }, ref) {\n return (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\"select-scroll-btn\", className)}\n {...rest}\n />\n );\n});\n","/**\n * @godxjp/ui DataTable — chrome renderers.\n *\n * Stage 4b of the Table refactor (Plan §3). The view-tabs, toolbar,\n * batch-action band, and filter chip bar are all rendered here on\n * behalf of `<DataTable>`. The slim `<Table>` primitive renders\n * only the body of the table.\n *\n * These functions also remain importable by the primitive's\n * deprecated chrome rendering path so the back-compat surface stays\n * pixel-identical until v5.0.0 strips it.\n */\nimport { isValidElement, type ReactNode } from \"react\";\nimport { Search } from \"lucide-react\";\nimport type { Row } from \"@tanstack/react-table\";\nimport { Badge } from \"../../data-display/Badge\";\nimport { Tag } from \"../../data-display/Tag\";\nimport type {\n TableBatchActions,\n TableBatchActionsConfig,\n TableBatchActionsContext,\n TableColumn,\n TableFilter,\n TableFilterBar,\n TableFilterItem,\n TableFilterOperator,\n TableFilterOption,\n TableToolbar,\n TableToolbarButtonConfig,\n TableToolbarConfig,\n TableViewItem,\n TableViews,\n TableViewsConfig,\n} from \"../../data-display/Table.types\";\nimport { Button } from \"../../general/Button\";\nimport { InputSearch } from \"../../data-entry/InputSearch\";\nimport { Select } from \"../../data-entry/Select\";\n\n// ── Type-guard helpers ──────────────────────────────────────────────\n\nexport function isTableToolbarConfig(\n value: TableToolbar | undefined,\n): value is TableToolbarConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n (\"search\" in value ||\n \"filter\" in value ||\n \"columns\" in value ||\n \"primaryAction\" in value ||\n \"actions\" in value)\n );\n}\n\nexport function isTableViewsConfig(\n value: TableViews | undefined,\n): value is TableViewsConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n \"items\" in value\n );\n}\n\nexport function isTableBatchActionsConfig<TData>(\n value: TableBatchActions<TData> | undefined,\n): value is TableBatchActionsConfig<TData> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n \"selectedRowKeys\" in value &&\n \"onSelectedRowKeysChange\" in value &&\n \"actions\" in value\n );\n}\n\nexport function isToolbarButtonConfig(\n value: ReactNode | TableToolbarButtonConfig,\n): value is TableToolbarButtonConfig {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n (\"label\" in value || \"onClick\" in value || \"disabled\" in value)\n );\n}\n\nexport function isFilterItems(\n filterBar: TableFilterBar | undefined,\n): filterBar is TableFilterItem[] {\n return Array.isArray(filterBar);\n}\n\n// ── Rendering helpers ───────────────────────────────────────────────\n\nexport function renderTableViews(\n views: TableViewsConfig,\n items: TableViewItem[],\n applyView: (view: TableViewItem) => void,\n deleteView: (view: TableViewItem) => void,\n saveView: () => void,\n defaultSaveLabel: string,\n defaultDeleteLabel: string,\n) {\n return (\n <>\n {items.map((view) => (\n <span\n key={view.key}\n className={view.key === views.activeKey ? \"tab-wrap on\" : \"tab-wrap\"}\n >\n <button\n type=\"button\"\n className=\"tab\"\n disabled={view.disabled}\n onClick={() => applyView(view)}\n >\n {view.dotColor !== undefined && (\n <span\n className=\"dot\"\n style={{ background: view.dotColor }}\n aria-hidden\n />\n )}\n {view.label}\n {view.count !== undefined && (\n <span className=\"count\">{view.count}</span>\n )}\n </button>\n {view.deletable === true && (\n <button\n type=\"button\"\n className=\"tab-delete\"\n aria-label={`${views.deleteLabel ?? defaultDeleteLabel}: ${String(view.label)}`}\n disabled={view.disabled}\n onClick={(event) => {\n event.stopPropagation();\n deleteView(view);\n }}\n >\n ×\n </button>\n )}\n </span>\n ))}\n <span className=\"spacer\" />\n {views.saveable !== false && (\n <button type=\"button\" className=\"tab add\" onClick={saveView}>\n {views.saveLabel ?? defaultSaveLabel}\n </button>\n )}\n </>\n );\n}\n\nexport function renderToolbarPrimaryAction(\n primaryAction: TableToolbarConfig[\"primaryAction\"],\n defaultLabel: string,\n) {\n if (primaryAction === undefined || primaryAction === false) return null;\n if (!isToolbarButtonConfig(primaryAction)) return primaryAction;\n return (\n <Button\n className=\"tbl-primary-action\"\n size=\"small\"\n onClick={primaryAction.onClick}\n disabled={primaryAction.disabled}\n >\n {primaryAction.label ?? defaultLabel}\n </Button>\n );\n}\n\nexport function renderTableToolbar(\n toolbar: TableToolbar | undefined,\n t: (key: string, options?: Record<string, unknown>) => string,\n onColumnSettingsClick: () => void,\n) {\n if (toolbar === undefined || toolbar === false) return null;\n if (!isTableToolbarConfig(toolbar)) return toolbar;\n\n return (\n <>\n {toolbar.search !== undefined && toolbar.search !== false && (\n <InputSearch\n ref={toolbar.search.inputRef}\n aria-label={toolbar.search.ariaLabel ?? t(\"common.search\")}\n className=\"tbl-search-input\"\n size=\"small\"\n placeholder={\n toolbar.search.placeholder ?? t(\"table.searchPlaceholder\")\n }\n value={toolbar.search.value}\n disabled={toolbar.search.disabled}\n onChange={(event) =>\n toolbar.search !== false &&\n toolbar.search?.onValueChange(event.target.value)\n }\n onSearch={toolbar.search.onSearch}\n onClear={() => {\n if (toolbar.search === false) return;\n toolbar.search?.onValueChange(\"\");\n toolbar.search?.onSearch?.(\"\");\n toolbar.search?.onClear?.();\n }}\n suffix={toolbar.search.suffix}\n />\n )}\n {toolbar.search !== undefined && toolbar.search !== false && (\n <Button\n className=\"tbl-search-action\"\n size=\"small\"\n variant=\"primary\"\n aria-label={t(\"common.search\")}\n disabled={toolbar.search.disabled}\n startContent={<Search aria-hidden=\"true\" focusable=\"false\" />}\n onClick={() =>\n toolbar.search !== false &&\n toolbar.search?.onSearch?.(toolbar.search.value)\n }\n >\n <span className=\"tbl-search-action-label\">{t(\"common.search\")}</span>\n </Button>\n )}\n {toolbar.filter !== undefined && toolbar.filter !== false && (\n <Button\n className=\"tbl-filter-action\"\n size=\"small\"\n variant=\"outline\"\n disabled={toolbar.filter.disabled}\n onClick={toolbar.filter.onClick}\n >\n {toolbar.filter.label ?? t(\"table.detailFilter\")}\n {toolbar.filter.count !== undefined && toolbar.filter.count > 0 && (\n <>\n {\" \"}\n <Badge variant=\"primary\" dot={false}>\n {toolbar.filter.count}\n </Badge>\n </>\n )}\n </Button>\n )}\n <span className=\"spacer\" />\n <span className=\"tbl-extra-actions\">\n {toolbar.columns !== undefined && toolbar.columns !== false && (\n <Button\n className=\"tbl-column-action\"\n size=\"small\"\n variant=\"outline\"\n disabled={toolbar.columns.disabled}\n onClick={toolbar.columns.onClick ?? onColumnSettingsClick}\n >\n {toolbar.columns.label ?? t(\"table.columnSettings\")}\n </Button>\n )}\n {renderToolbarPrimaryAction(\n toolbar.primaryAction,\n t(\"table.newRecord\"),\n )}\n {toolbar.actions}\n </span>\n </>\n );\n}\n\n// ── Filter helpers ──────────────────────────────────────────────────\n\nexport function operatorSymbol(operator: TableFilterOperator | undefined): string {\n switch (operator) {\n case \"neq\": return \"≠\";\n case \"contains\": return \"∋\";\n case \"startsWith\": return \"≻\";\n case \"endsWith\": return \"≺\";\n case \"gt\": return \">\";\n case \"gte\": return \"≥\";\n case \"lt\": return \"<\";\n case \"lte\": return \"≤\";\n case \"between\": return \"..\";\n case \"in\": return \"∈\";\n case \"eq\":\n case undefined:\n default:\n return \"=\";\n }\n}\n\nexport function renderFilterBar(filterBar: TableFilterBar, label: string) {\n if (!isFilterItems(filterBar)) return filterBar;\n return (\n <>\n <span className=\"lbl\">{label}:</span>\n {filterBar.map((item) => {\n if (item.options !== undefined) {\n return (\n <span key={item.key} className=\"table-filter-select-wrap\">\n <Select\n value={item.value ?? \"\"}\n onValueChange={item.onValueChange}\n options={item.options.map((option) => ({\n ...option,\n label: `${item.label}: ${option.label}`,\n }))}\n triggerClassName=\"table-filter-select\"\n />\n {item.onClose !== undefined && (\n <button\n type=\"button\"\n className=\"table-filter-clear\"\n onClick={item.onClose}\n aria-label={`${item.label} clear`}\n >\n ×\n </button>\n )}\n </span>\n );\n }\n return (\n <Tag\n key={item.key}\n color={item.color ?? \"primary\"}\n closable={item.closable ?? item.onClose !== undefined}\n onClose={item.onClose}\n >\n {item.label} {operatorSymbol(item.operator)}{\" \"}\n {item.valueLabel ?? item.value}\n </Tag>\n );\n })}\n </>\n );\n}\n\nfunction getColumnKey<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nexport function labelForColumn<TData>(\n column: TableColumn<TData, unknown>,\n key: string,\n): ReactNode {\n if (column.meta?.filterLabel !== undefined) return column.meta.filterLabel;\n if (typeof column.header === \"string\") return column.header;\n return key;\n}\n\nexport function valueLabelFor(\n optionList: TableFilterOption[] | undefined,\n value: TableFilter[\"value\"],\n) {\n const option = optionList?.find((item) => item.value === String(value));\n return option?.label ?? value;\n}\n\nexport function deriveFilterBar<TData>(\n columns: TableColumn<TData, unknown>[],\n filters: TableFilter[] | undefined,\n onFiltersChange: ((filters: TableFilter[]) => void) | undefined,\n): TableFilterItem[] {\n if (filters === undefined || filters.length === 0) return [];\n return filters.flatMap((filter) => {\n const column = columns.find((item) => getColumnKey(item) === filter.key);\n if (column !== undefined && column.meta?.filterable !== true) return [];\n const options = column?.meta?.filterOptions;\n return [\n {\n key: filter.key,\n label: column ? labelForColumn(column, filter.key) : filter.key,\n value: filter.value == null ? undefined : String(filter.value),\n valueLabel: filter.valueLabel ?? valueLabelFor(options, filter.value),\n operator: filter.operator,\n options,\n onValueChange:\n options !== undefined && onFiltersChange !== undefined\n ? (value: string) =>\n onFiltersChange(\n filters.map((item) =>\n item.key === filter.key\n ? {\n ...item,\n value,\n valueLabel: valueLabelFor(options, value),\n }\n : item,\n ),\n )\n : undefined,\n closable: onFiltersChange !== undefined,\n onClose:\n onFiltersChange !== undefined\n ? () =>\n onFiltersChange(\n filters.filter((item) => item.key !== filter.key),\n )\n : undefined,\n },\n ];\n });\n}\n\n// ── Chrome sub-components ───────────────────────────────────────────\n\ninterface ViewTabsProps {\n config: TableViewsConfig;\n items: TableViewItem[];\n applyView: (view: TableViewItem) => void;\n deleteView: (view: TableViewItem) => void;\n saveView: () => void;\n defaultSaveLabel: string;\n defaultDeleteLabel: string;\n}\n\nexport function ViewTabs(props: ViewTabsProps) {\n return (\n <div className=\"tbl-views\">\n {renderTableViews(\n props.config,\n props.items,\n props.applyView,\n props.deleteView,\n props.saveView,\n props.defaultSaveLabel,\n props.defaultDeleteLabel,\n )}\n </div>\n );\n}\n\ninterface ToolbarBarProps {\n toolbar: TableToolbar;\n t: (key: string, options?: Record<string, unknown>) => string;\n onOpenColumns: () => void;\n}\n\nexport function ToolbarBar(props: ToolbarBarProps) {\n const content = renderTableToolbar(props.toolbar, props.t, props.onOpenColumns);\n if (content === null) return null;\n return <div className=\"table-toolbar\">{content}</div>;\n}\n\ninterface BatchActionBandProps<TData> {\n batchConfig: TableBatchActionsConfig<TData>;\n selectableRows: Row<TData>[];\n selectedRows: Row<TData>[];\n allVisibleSelected: boolean;\n selectAllVisible: () => void;\n clearSelection: () => void;\n t: (key: string, options?: Record<string, unknown>) => string;\n}\n\nexport function BatchActionBand<TData>(props: BatchActionBandProps<TData>) {\n const {\n batchConfig,\n selectableRows,\n selectedRows,\n allVisibleSelected,\n selectAllVisible,\n clearSelection,\n t,\n } = props;\n if (batchConfig.selectedRowKeys.length === 0) return null;\n const context: TableBatchActionsContext<TData> = {\n selectedRowKeys: batchConfig.selectedRowKeys,\n selectedRows,\n totalSelectableCount: selectableRows.length,\n selectAllVisible,\n clearSelection,\n };\n const actions =\n typeof batchConfig.actions === \"function\"\n ? batchConfig.actions(context)\n : batchConfig.actions;\n return (\n <div className=\"tbl-batch-bar\">\n <span className=\"count\">\n {batchConfig.selectedLabel?.(batchConfig.selectedRowKeys.length) ??\n t(\"table.selectedRows\", {\n count: batchConfig.selectedRowKeys.length,\n })}\n </span>\n {!allVisibleSelected && selectableRows.length > 0 && (\n <Button size=\"small\" variant=\"ghost\" onClick={selectAllVisible}>\n {batchConfig.selectAllLabel?.(selectableRows.length) ??\n t(\"table.selectAllVisible\", { count: selectableRows.length })}\n </Button>\n )}\n {actions}\n <span className=\"spacer\" />\n <Button size=\"small\" variant=\"ghost\" onClick={clearSelection}>\n {batchConfig.clearLabel ?? t(\"table.clearSelection\")}\n </Button>\n </div>\n );\n}\n\ninterface FilterChipBarProps {\n items: TableFilterBar;\n label: string;\n onResetFilters?: () => void;\n resetLabel: string;\n}\n\nexport function FilterChipBar(props: FilterChipBarProps) {\n const { items, label, onResetFilters, resetLabel } = props;\n if (items === undefined) return null;\n if (isFilterItems(items) && items.length === 0) return null;\n return (\n <div className=\"tbl-filter-bar\">\n {renderFilterBar(items, label)}\n {onResetFilters !== undefined && (\n <Button size=\"x-small\" variant=\"ghost\" onClick={onResetFilters}>\n {resetLabel}\n </Button>\n )}\n </div>\n );\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type FormHTMLAttributes,\n type ReactNode,\n} from \"react\"\nimport { cn } from \"../cn\"\n\nexport type SheetSide = \"top\" | \"right\" | \"bottom\" | \"left\"\n\nexport interface SheetProps\n extends Omit<ComponentPropsWithoutRef<typeof DialogPrimitive.Root>, \"children\"> {\n trigger?: ReactNode\n title?: ReactNode\n description?: ReactNode\n footer?: ReactNode\n children?: ReactNode\n side?: SheetSide\n className?: string\n contentProps?: Omit<ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, \"children\">\n form?: FormHTMLAttributes<HTMLFormElement>\n}\n\nexport const Sheet = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n SheetProps\n>(function Sheet(\n {\n trigger,\n title,\n description,\n footer,\n children,\n side = \"right\",\n className,\n contentProps,\n form,\n ...rootProps\n },\n ref,\n) {\n const body = (\n <>\n {(title || description) && (\n <div className=\"dialog-header\">\n {title && <DialogPrimitive.Title className=\"dialog-title\">{title}</DialogPrimitive.Title>}\n {description && (\n <DialogPrimitive.Description className=\"dialog-description\">\n {description}\n </DialogPrimitive.Description>\n )}\n </div>\n )}\n {children}\n {footer && <div className=\"dialog-footer\">{footer}</div>}\n </>\n )\n\n return (\n <DialogPrimitive.Root {...rootProps}>\n {trigger && <DialogPrimitive.Trigger asChild>{trigger}</DialogPrimitive.Trigger>}\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"sheet-overlay\" />\n <DialogPrimitive.Content\n ref={ref}\n data-side={side}\n {...contentProps}\n className={cn(\"sheet-content\", className, contentProps?.className)}\n >\n {form ? <form {...form}>{body}</form> : body}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n})\n","/**\n * @godxjp/ui DataTable — column manager Sheet.\n *\n * Stage 4b of the Table refactor (Plan §3). Lives on the composite\n * side. Reads + writes column visibility + pinning through the\n * provided TanStack `table` instance.\n */\nimport { Lock, LockOpen } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport type {\n Column,\n ColumnPinningState,\n Table as ReactTable,\n} from \"@tanstack/react-table\";\nimport { Button } from \"../../general/Button\";\nimport { Checkbox } from \"../../data-entry/Checkbox\";\nimport { Sheet } from \"../../feedback/Sheet\";\nimport type { TableColumn } from \"../../data-display/Table.types\";\n\nfunction getColumnKeyFromDef<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nfunction getColumnSettingsLabel<TData>(column: Column<TData, unknown>) {\n const meta = column.columnDef.meta;\n if (meta?.filterLabel !== undefined) return meta.filterLabel;\n if (typeof column.columnDef.header === \"string\") return column.columnDef.header;\n return column.id;\n}\n\ninterface ColumnManagerSheetProps<TData> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n table: ReactTable<TData>;\n autoColumnPinning: ColumnPinningState;\n columnPinning: ColumnPinningState;\n onColumnPinningChange: (pinning: ColumnPinningState) => void;\n}\n\nexport function ColumnManagerSheet<TData>(props: ColumnManagerSheetProps<TData>) {\n const { open, onOpenChange, table, autoColumnPinning, columnPinning, onColumnPinningChange } = props;\n const { t } = useTranslation();\n const columnSettingsColumns = table\n .getAllLeafColumns()\n .filter(\n (column) =>\n getColumnKeyFromDef(column.columnDef) !== undefined &&\n column.columnDef.meta?.hideable !== false &&\n column.getCanHide(),\n );\n\n return (\n <Sheet\n open={open}\n onOpenChange={onOpenChange}\n className=\"table-filter-sheet\"\n side=\"right\"\n title={t(\"table.columnSettings\")}\n description={t(\"table.columnSettingsDescription\")}\n footer={\n <>\n <Button\n size=\"small\"\n variant=\"ghost\"\n onClick={() => table.setColumnVisibility({})}\n >\n {t(\"table.showAllColumns\")}\n </Button>\n <Button size=\"small\" onClick={() => onOpenChange(false)}>\n {t(\"table.closeColumnSettings\")}\n </Button>\n </>\n }\n >\n <div className=\"table-filter-field-list\">\n {columnSettingsColumns.map((column) => {\n const pinned = column.getIsPinned();\n const isAutoPinned =\n (autoColumnPinning.left ?? []).includes(column.id) ||\n (autoColumnPinning.right ?? []).includes(column.id);\n return (\n <section key={column.id} className=\"table-column-field\">\n <Checkbox\n checked={column.getIsVisible()}\n disabled={pinned !== false}\n onCheckedChange={(checked) =>\n column.toggleVisibility(checked === true)\n }\n >\n {getColumnSettingsLabel(column)}\n </Checkbox>\n <button\n type=\"button\"\n className=\"col-lock\"\n aria-label={\n pinned === false\n ? t(\"table.lockColumn\")\n : t(\"table.unlockColumn\")\n }\n aria-pressed={pinned !== false}\n data-locked={pinned !== false ? \"true\" : \"false\"}\n disabled={isAutoPinned}\n onClick={() => {\n const next: ColumnPinningState = {\n left: [...(columnPinning.left ?? [])],\n right: [...(columnPinning.right ?? [])],\n };\n next.left = (next.left ?? []).filter(\n (id) => id !== column.id,\n );\n next.right = (next.right ?? []).filter(\n (id) => id !== column.id,\n );\n if (pinned === false) {\n next.left = [...(next.left ?? []), column.id];\n if (!column.getIsVisible()) column.toggleVisibility(true);\n }\n onColumnPinningChange(next);\n }}\n >\n {pinned === false ? (\n <LockOpen aria-hidden=\"true\" focusable=\"false\" />\n ) : (\n <Lock aria-hidden=\"true\" focusable=\"false\" />\n )}\n </button>\n </section>\n );\n })}\n </div>\n </Sheet>\n );\n}\n","import {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from \"lucide-react\";\nimport {\n forwardRef,\n useMemo,\n useState,\n type ComponentProps,\n type ReactNode,\n} from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../cn\";\n\n/**\n * Pagination — page jumper.\n *\n * <Pagination total={120} pageSize={10} defaultValue={1} onValueChange={…} />\n *\n * Three variants:\n * - `default` (pill bar) — freestanding pagination chips\n * - `simple` — only ‹ N/M ›\n * - `embedded` — table-footer layout (`info` + page-size changer +\n * numeric pager). Use when embedding inside a `<Table>` footer.\n *\n * Vocabulary (§23.B):\n * - `value` / `defaultValue` / `onValueChange` — current page (1-based)\n * - `pageSize` / `defaultPageSize` / `onPageSizeChange` — rows per page\n * - `size` — \"small\" | \"default\" — dimensional scale (default + simple)\n * - `variant` — visual treatment (above)\n * - `justify` — \"start\" | \"center\" | \"end\" | \"space-between\" (matches FlexJustify)\n * - `disabled` — interaction state\n * - `showTotal`, `showSizeChanger`, `showFirstLast`, `hideOnSinglePage`\n * — adjective-boolean toggles\n */\n\nexport type PaginationSize = \"small\" | \"default\";\nexport type PaginationVariant = \"default\" | \"simple\" | \"embedded\";\n/** Justify values match FlexJustify spelling (`\"space-between\"`) so the\n * vocabulary stays uniform across layout primitives. Pagination ships\n * 4 of FlexJustify's 6 values (no `space-around` / `space-evenly`). */\nexport type PaginationJustify =\n | \"start\"\n | \"center\"\n | \"end\"\n | \"space-between\";\n\nexport interface PaginationProps\n extends Omit<\n ComponentProps<\"nav\">,\n \"onChange\" | \"defaultValue\" | \"value\"\n > {\n /** Total row count. */\n total: number;\n /** Rows per page. Controlled or uncontrolled via `defaultPageSize`. */\n pageSize?: number;\n defaultPageSize?: number;\n onPageSizeChange?: (pageSize: number) => void;\n /** Current page (1-based). Controlled or uncontrolled via `defaultValue`. */\n value?: number;\n defaultValue?: number;\n onValueChange?: (page: number) => void;\n size?: PaginationSize;\n variant?: PaginationVariant;\n justify?: PaginationJustify;\n disabled?: boolean;\n /** Selectable page sizes when `showSizeChanger` is true. */\n pageSizeOptions?: number[];\n /** Render the page-size `<select>` (embedded variant only). */\n showSizeChanger?: boolean;\n /** Render first/last page chevron buttons (embedded variant). */\n showFirstLast?: boolean;\n /** Suppress render when total fits in a single page. */\n hideOnSinglePage?: boolean;\n /** Show total-row label. Accepts a render function for full control. */\n showTotal?: boolean | ((total: number, range: [number, number]) => ReactNode);\n /** Sibling pages either side of current (default 1). */\n siblings?: number;\n /** Pages anchored at each end before the ellipsis (default 1). */\n boundary?: number;\n /** Override page-size dropdown label (defaults to i18n `table.pageSize`). */\n pageSizeLabel?: ReactNode;\n /** Override first-page button aria-label. */\n firstPageLabel?: string;\n /** Override previous-page button aria-label. */\n previousPageLabel?: string;\n /** Override next-page button aria-label. */\n nextPageLabel?: string;\n /** Override last-page button aria-label. */\n lastPageLabel?: string;\n}\n\n/**\n * Laravel-style page range — first + last anchor pages, a window of\n * `sibling` pages around the current page, and `\"gap\"` markers\n * (rendered as `…`) where pages are elided. Exported for consumers\n * building custom paginators.\n *\n * computePageRange(1, 52) → [1, 2, 3, \"gap\", 52]\n * computePageRange(25, 52) → [1, \"gap\", 24, 25, 26, \"gap\", 52]\n * computePageRange(3, 6) → [1, 2, 3, 4, 5, 6]\n */\nexport function computePageRange(\n current: number,\n total: number,\n sibling = 1,\n boundary = 1,\n): Array<number | \"gap\"> {\n if (total <= 1) return [1];\n const windowSize = 2 * sibling + 1 + 2 * boundary + 2;\n if (total <= windowSize) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n const startPages = Array.from({ length: boundary }, (_, i) => i + 1);\n const endPages = Array.from(\n { length: boundary },\n (_, i) => total - boundary + 1 + i,\n );\n const siblingStart = Math.max(\n Math.min(current - sibling, total - boundary - 2 * sibling - 1),\n boundary + 2,\n );\n const siblingEnd = Math.min(\n Math.max(current + sibling, boundary + 2 * sibling + 2),\n endPages[0] - 2,\n );\n const items: Array<number | \"gap\"> = [];\n items.push(...startPages);\n if (siblingStart > boundary + 2) items.push(\"gap\");\n else if (boundary + 1 < endPages[0]) items.push(boundary + 1);\n for (let p = siblingStart; p <= siblingEnd; p++) items.push(p);\n if (siblingEnd < endPages[0] - 2) items.push(\"gap\");\n else if (endPages[0] - 1 > boundary) items.push(endPages[0] - 1);\n items.push(...endPages);\n return items;\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n function Pagination(\n {\n total,\n pageSize,\n defaultPageSize = 10,\n onPageSizeChange,\n value,\n defaultValue = 1,\n onValueChange,\n size = \"default\",\n variant = \"default\",\n justify = \"start\",\n disabled,\n pageSizeOptions = [10, 20, 50, 100],\n showSizeChanger = true,\n showFirstLast = false,\n hideOnSinglePage = false,\n showTotal,\n siblings = 1,\n boundary = 1,\n pageSizeLabel,\n firstPageLabel,\n previousPageLabel,\n nextPageLabel,\n lastPageLabel,\n className,\n ...rest\n },\n ref,\n ) {\n const { t } = useTranslation();\n const [internalPage, setInternalPage] = useState(defaultValue);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const effectivePageSize = pageSize ?? internalPageSize;\n const safePageSize = Math.max(effectivePageSize, 1);\n const safeTotal = Math.max(total, 0);\n const totalPages = Math.max(1, Math.ceil(safeTotal / safePageSize));\n const current = value ?? internalPage;\n const safeCurrent = Math.min(Math.max(1, current), totalPages);\n\n const range = useMemo(\n () => computePageRange(safeCurrent, totalPages, siblings, boundary),\n [safeCurrent, totalPages, siblings, boundary],\n );\n\n function goToPage(nextPage: number) {\n if (disabled) return;\n const clamped = Math.min(Math.max(1, nextPage), totalPages);\n if (clamped === safeCurrent) return;\n if (value === undefined) setInternalPage(clamped);\n onValueChange?.(clamped);\n }\n\n function changePageSize(nextPageSize: number) {\n if (disabled) return;\n if (pageSize === undefined) setInternalPageSize(nextPageSize);\n onPageSizeChange?.(nextPageSize);\n if (value === undefined) setInternalPage(1);\n onValueChange?.(1);\n }\n\n const start = safeTotal === 0 ? 0 : (safeCurrent - 1) * safePageSize + 1;\n const end = Math.min(safeCurrent * safePageSize, safeTotal);\n\n if (hideOnSinglePage && safeTotal <= safePageSize) return null;\n\n if (variant === \"embedded\") {\n const resolvedPageSizeOptions = Array.from(\n new Set([...pageSizeOptions, safePageSize]),\n ).sort((left, right) => left - right);\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"Pagination\"\n className={cn(\"pagination\", className)}\n data-variant=\"embedded\"\n data-size={size === \"small\" ? \"small\" : undefined}\n {...rest}\n >\n <div className=\"info\">\n {typeof showTotal === \"function\"\n ? showTotal(safeTotal, [start, end])\n : t(\"table.paginationTotal\", {\n start,\n end,\n total: safeTotal,\n })}\n </div>\n {showSizeChanger && (\n <div className=\"ps\">\n <span>{pageSizeLabel ?? t(\"table.pageSize\")}</span>\n <select\n aria-label={\n typeof pageSizeLabel === \"string\"\n ? pageSizeLabel\n : t(\"table.pageSize\")\n }\n value={safePageSize}\n disabled={disabled}\n onChange={(event) =>\n changePageSize(Number(event.target.value))\n }\n >\n {resolvedPageSizeOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n )}\n <div className=\"spacer\" />\n <div className=\"pgn\">\n {showFirstLast && (\n <button\n type=\"button\"\n className={safeCurrent === 1 ? \"disabled\" : \"\"}\n disabled={disabled || safeCurrent === 1}\n onClick={() => goToPage(1)}\n aria-label={firstPageLabel ?? t(\"table.firstPage\")}\n >\n <ChevronsLeft aria-hidden focusable=\"false\" />\n </button>\n )}\n <button\n type=\"button\"\n className={safeCurrent === 1 ? \"disabled\" : \"\"}\n disabled={disabled || safeCurrent === 1}\n onClick={() => goToPage(safeCurrent - 1)}\n aria-label={previousPageLabel ?? t(\"table.previousPage\")}\n >\n <ChevronLeft aria-hidden focusable=\"false\" />\n </button>\n {range.map((item, index) =>\n item === \"gap\" ? (\n <span key={`gap-${index}`} className=\"gap\" aria-hidden>\n …\n </span>\n ) : (\n <button\n type=\"button\"\n key={item}\n className={item === safeCurrent ? \"on\" : \"\"}\n disabled={disabled}\n onClick={() => goToPage(item)}\n aria-current={item === safeCurrent ? \"page\" : undefined}\n >\n {item}\n </button>\n ),\n )}\n <button\n type=\"button\"\n className={safeCurrent === totalPages ? \"disabled\" : \"\"}\n disabled={disabled || safeCurrent === totalPages}\n onClick={() => goToPage(safeCurrent + 1)}\n aria-label={nextPageLabel ?? t(\"table.nextPage\")}\n >\n <ChevronRight aria-hidden focusable=\"false\" />\n </button>\n {showFirstLast && (\n <button\n type=\"button\"\n className={safeCurrent === totalPages ? \"disabled\" : \"\"}\n disabled={disabled || safeCurrent === totalPages}\n onClick={() => goToPage(totalPages)}\n aria-label={lastPageLabel ?? t(\"table.lastPage\")}\n >\n <ChevronsRight aria-hidden focusable=\"false\" />\n </button>\n )}\n </div>\n </nav>\n );\n }\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"Pagination\"\n className={cn(\"pagination\", className)}\n data-size={size === \"small\" ? \"small\" : undefined}\n data-justify={justify === \"start\" ? undefined : justify}\n {...rest}\n >\n {showTotal && (\n <span className=\"pagination-total\">\n {typeof showTotal === \"function\"\n ? showTotal(safeTotal, [start, end])\n : `${start}–${end} / ${safeTotal}`}\n </span>\n )}\n <button\n type=\"button\"\n className=\"pagination-item\"\n aria-label={previousPageLabel ?? \"Previous page\"}\n onClick={() => goToPage(safeCurrent - 1)}\n disabled={disabled || safeCurrent === 1}\n >\n <ChevronLeft aria-hidden focusable=\"false\" />\n </button>\n {variant === \"simple\" ? (\n <span className=\"pagination-item\" aria-current=\"page\">\n {safeCurrent} / {totalPages}\n </span>\n ) : (\n range.map((p, idx) =>\n p === \"gap\" ? (\n <span key={`e${idx}`} className=\"pagination-ellipsis\" aria-hidden>\n …\n </span>\n ) : (\n <button\n key={p}\n type=\"button\"\n className=\"pagination-item\"\n data-state={p === safeCurrent ? \"selected\" : undefined}\n aria-current={p === safeCurrent ? \"page\" : undefined}\n onClick={() => goToPage(p)}\n disabled={disabled}\n >\n {p}\n </button>\n ),\n )\n )}\n <button\n type=\"button\"\n className=\"pagination-item\"\n aria-label={nextPageLabel ?? \"Next page\"}\n onClick={() => goToPage(safeCurrent + 1)}\n disabled={disabled || safeCurrent === totalPages}\n >\n <ChevronRight aria-hidden focusable=\"false\" />\n </button>\n </nav>\n );\n },\n);\n","/**\n * @godxjp/ui DataTable — pagination band.\n *\n * Stage 4b of the Table refactor (Plan §3). Owns the numbered /\n * load-more / cursor pagination rendering for the composite. The\n * slim `<Table>` primitive no longer renders pagination.\n */\nimport { isValidElement, type ReactNode } from \"react\";\nimport { Pagination } from \"../../navigation/Pagination\";\nimport { Button } from \"../../general/Button\";\nimport type {\n TablePagination,\n TablePaginationCursorConfig,\n TablePaginationLoadMoreConfig,\n TablePaginationNumberedConfig,\n TablePaginationVariantConfig,\n} from \"../../data-display/Table.types\";\n\nexport function isTablePaginationVariantConfig(\n value: TablePagination | undefined,\n): value is TablePaginationVariantConfig {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n isValidElement(value)\n )\n return false;\n const candidate = value as { type?: string };\n if (candidate.type === \"load-more\" || candidate.type === \"cursor\")\n return true;\n return \"total\" in value && \"current\" in value && \"pageSize\" in value;\n}\n\nexport function isNumberedPaginationConfig(\n value: TablePaginationVariantConfig,\n): value is TablePaginationNumberedConfig {\n return value.type === undefined || value.type === \"numbered\";\n}\n\ninterface PaginationRendered {\n variant: TablePaginationVariantConfig[\"type\"];\n node: ReactNode;\n}\n\nexport function renderTablePagination(\n pagination: TablePagination | undefined,\n t: (key: string, options?: Record<string, unknown>) => string,\n): PaginationRendered | null {\n if (pagination === undefined || pagination === false) return null;\n if (!isTablePaginationVariantConfig(pagination))\n return { variant: undefined, node: pagination as ReactNode };\n if (pagination.type === \"load-more\")\n return { variant: \"load-more\", node: renderLoadMore(pagination, t) };\n if (pagination.type === \"cursor\")\n return { variant: \"cursor\", node: renderCursor(pagination, t) };\n const config = pagination;\n return {\n variant: \"numbered\",\n node: (\n <Pagination\n variant=\"embedded\"\n showFirstLast\n total={config.total}\n pageSize={config.pageSize}\n value={config.current}\n onValueChange={(page) => config.onChange?.(page, config.pageSize)}\n onPageSizeChange={(size) => config.onChange?.(1, size)}\n pageSizeOptions={config.pageSizeOptions}\n showSizeChanger={config.showSizeChanger}\n showTotal={\n config.showTotal !== undefined ? config.showTotal : true\n }\n hideOnSinglePage={config.hideOnSinglePage}\n disabled={config.disabled}\n />\n ),\n };\n}\n\nexport function renderLoadMore(\n config: TablePaginationLoadMoreConfig,\n t: (key: string, options?: Record<string, unknown>) => string,\n): ReactNode {\n const remaining = Math.max(config.total - config.currentCount, 0);\n const batch =\n config.batchSize !== undefined\n ? Math.min(config.batchSize, remaining)\n : remaining;\n const defaultLabel = t(\"table.loadMore\", { count: batch });\n return (\n <div className=\"tbl-load-more\">\n <Button\n size=\"small\"\n variant=\"outline\"\n disabled={!config.hasMore || config.loadingMore === true}\n onClick={config.onLoadMore}\n >\n {config.loadMoreLabel ?? defaultLabel}\n </Button>\n <div className=\"tbl-load-more-progress\">\n {config.progressLabel?.(config.currentCount, config.total) ??\n t(\"table.loadMoreProgress\", {\n current: config.currentCount,\n total: config.total,\n })}\n </div>\n </div>\n );\n}\n\nexport function renderCursor(\n config: TablePaginationCursorConfig,\n t: (key: string, options?: Record<string, unknown>) => string,\n): ReactNode {\n const inputType = config.inputType ?? \"month\";\n return (\n <>\n <Button\n size=\"x-small\"\n variant=\"ghost\"\n disabled={config.disabled}\n onClick={config.onJumpToLatest}\n >\n {config.jumpToLatestLabel ?? t(\"table.jumpToLatest\")}\n </Button>\n <Button\n size=\"x-small\"\n variant=\"outline\"\n disabled={config.disabled}\n onClick={config.onPrev}\n >\n {config.prevLabel ?? t(\"table.previousPeriod\")}\n </Button>\n <span className=\"spacer\" />\n <div className=\"label\">{config.label}</div>\n <span className=\"spacer\" />\n <input\n type={inputType}\n value={config.value}\n disabled={config.disabled}\n aria-label={t(\"table.jumpToPeriod\")}\n onChange={(event) => config.onChange(event.target.value)}\n />\n <Button\n size=\"x-small\"\n variant=\"outline\"\n disabled={config.disabled}\n onClick={config.onNext}\n >\n {config.nextLabel ?? t(\"table.nextPeriod\")}\n </Button>\n </>\n );\n}\n\ninterface DataTablePaginationBandProps {\n config: TablePagination;\n t: (key: string, options?: Record<string, unknown>) => string;\n}\n\nexport function DataTablePaginationBand(props: DataTablePaginationBandProps) {\n const rendered = renderTablePagination(props.config, props.t);\n if (rendered === null) return null;\n if (rendered.variant === \"numbered\") {\n // <Pagination variant=\"embedded\"> owns its <nav> wrapper.\n return <>{rendered.node}</>;\n }\n return (\n <div\n className={rendered.variant === \"load-more\" ? undefined : \"tbl-pagination\"}\n data-variant={rendered.variant}\n >\n {rendered.node}\n </div>\n );\n}\n","import { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { Info, CheckCircle2, AlertTriangle, AlertOctagon } from \"lucide-react\";\nimport { cn } from \"../cn\";\nimport type { FeedbackColorProp } from \"../../props\";\n\n/**\n * Alert — Ant-Design banner-style notice.\n *\n * <Alert color=\"info\" title=\"5月度の締めは 5/31 (土) 23:59 です\" />\n * <Alert\n * color=\"warning\"\n * title=\"3 件の打刻漏れがあります\"\n * description=\"本日中に確認してください。\"\n * actions={<Button size=\"small\">確認する</Button>}\n * closable\n * onClose={() => …}\n * />\n * <Alert variant=\"banner\" color=\"info\" title=\"メンテナンス予定 …\" />\n *\n * Concept mapping (Ant → @godxjp/ui vocabulary per cardinal rule 23 §B):\n * - Ant `type` → `color` (semantic role)\n * - Ant `banner` → `variant=\"banner\"` (full-width borderless)\n * - Ant `message` → `title` (ReactNode slot)\n * - Ant `description` → `description` (ReactNode slot)\n * - Ant `action` → `actions` (plural — matches Card)\n * - Ant `showIcon` → boolean (omit `icon` + set false → no icon)\n * - Ant `closeIcon` → not exposed; default × ships\n * - Ant `closable` → already vocab (Tag uses it)\n * - Ant `onClose` → onClose callback\n */\n\n/** Alias of the shared `FeedbackColorProp` — same shape as\n * ResultColor / ProgressColor; kept as a named export for back-compat. */\nexport type AlertColor = FeedbackColorProp;\n\nexport type AlertVariant = \"outlined\" | \"banner\";\n\nexport interface AlertProps\n extends Omit<ComponentProps<\"div\">, \"color\" | \"title\"> {\n /** Semantic role. Defaults to `default`. */\n color?: AlertColor;\n /** Outlined card (default) or full-width banner. */\n variant?: AlertVariant;\n /** Primary message. */\n title?: ReactNode;\n /** Optional secondary body text. */\n description?: ReactNode;\n /** Leading icon. Omit to auto-pick a semantic icon for the color. */\n icon?: ReactNode;\n /** Render an × close button. */\n closable?: boolean;\n /** Called when the × close button is clicked. */\n onClose?: () => void;\n /** Footer action slot (typically a Button group). */\n actions?: ReactNode;\n}\n\nconst DEFAULT_ICON: Record<AlertColor, ReactNode> = {\n default: <Info aria-hidden=\"true\" width={16} height={16} />,\n info: <Info aria-hidden=\"true\" width={16} height={16} />,\n success: <CheckCircle2 aria-hidden=\"true\" width={16} height={16} />,\n warning: <AlertTriangle aria-hidden=\"true\" width={16} height={16} />,\n destructive: <AlertOctagon aria-hidden=\"true\" width={16} height={16} />,\n};\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n color = \"default\",\n variant = \"outlined\",\n title,\n description,\n icon,\n closable,\n onClose,\n actions,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const resolvedIcon = icon === undefined ? DEFAULT_ICON[color] : icon;\n const showIcon = resolvedIcon !== null && resolvedIcon !== false;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n \"alert\",\n `alert-color-${color}`,\n `alert-variant-${variant}`,\n className,\n )}\n {...rest}\n >\n {showIcon && <span className=\"alert-icon\">{resolvedIcon}</span>}\n <div className=\"alert-body\">\n {title !== undefined && <div className=\"alert-title\">{title}</div>}\n {description !== undefined && (\n <div className=\"alert-desc\">{description}</div>\n )}\n {children}\n {actions !== undefined && (\n <div className=\"alert-actions\">{actions}</div>\n )}\n </div>\n {closable && (\n <button\n type=\"button\"\n className=\"alert-close\"\n aria-label=\"Close\"\n onClick={onClose}\n >\n ×\n </button>\n )}\n </div>\n );\n});\n","/**\n * @godxjp/ui DataTable — save view Dialog.\n *\n * Stage 4b of the Table refactor (Plan §3). Lives on the composite\n * side. Surfaces a duplicate-warning Alert when the snapshot matches\n * an existing view.\n */\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Alert } from \"../../feedback/Alert\";\nimport { Button } from \"../../general/Button\";\nimport { Dialog } from \"../../feedback/Dialog\";\nimport { Input } from \"../../data-entry/Input\";\nimport type { TableViewItem } from \"../../data-display/Table.types\";\n\ninterface SaveViewDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n defaultName: string;\n duplicateView: TableViewItem | undefined;\n onConfirm: (label: string) => void;\n}\n\nexport function SaveViewDialog(props: SaveViewDialogProps) {\n const { open, onOpenChange, defaultName, duplicateView, onConfirm } = props;\n const { t } = useTranslation();\n const [viewName, setViewName] = useState(defaultName);\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) setViewName(defaultName);\n onOpenChange(next);\n }}\n title={t(\"table.saveViewTitle\")}\n description={t(\"table.saveViewDescription\")}\n form={{\n onSubmit: (event) => {\n event.preventDefault();\n const label = viewName.trim();\n if (label === \"\") return;\n onConfirm(label);\n },\n }}\n footer={\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"small\"\n onClick={() => onOpenChange(false)}\n >\n {t(\"common.cancel\")}\n </Button>\n <Button type=\"submit\" size=\"small\" disabled={viewName.trim() === \"\"}>\n {duplicateView === undefined\n ? t(\"common.save\")\n : t(\"table.continueSaveView\")}\n </Button>\n </>\n }\n >\n <div style={{ display: \"grid\", gap: \"var(--spacing-3)\" }}>\n <Input\n autoFocus\n aria-label={t(\"table.viewName\")}\n value={viewName}\n onChange={(event) => setViewName(event.target.value)}\n placeholder={t(\"table.viewNamePlaceholder\")}\n />\n {duplicateView !== undefined && (\n <Alert\n color=\"warning\"\n title={t(\"table.duplicateViewTitle\", {\n name: String(duplicateView.label),\n })}\n description={t(\"table.duplicateViewDescription\")}\n />\n )}\n </div>\n </Dialog>\n );\n}\n","/**\n * @godxjp/ui DataTable — packaged-table composite.\n *\n * Stage 4b of the Table refactor (Plan §3). Renders the chrome\n * (views, toolbar, filter chips, batch action band, pagination,\n * column manager Sheet, save-view Dialog) around the slim\n * `<Table>` primitive. The TanStack instance is built by\n * `useDataTable` and passed in via the `instance` prop so primitive\n * and composite share state.\n */\nimport { useMemo, useState, type ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"../../cn\";\nimport {\n Table,\n type TableToolbarConfig,\n type TableViewItem,\n} from \"../../data-display/Table\";\nimport { Button } from \"../../general/Button\";\nimport { Empty } from \"../../data-display/Empty\";\nimport {\n BatchActionBand,\n FilterChipBar,\n ToolbarBar,\n ViewTabs,\n deriveFilterBar,\n isFilterItems,\n isTableBatchActionsConfig,\n isTableViewsConfig,\n} from \"./DataTableChrome\";\nimport { ColumnManagerSheet } from \"./ColumnManagerSheet\";\nimport { DataTablePaginationBand } from \"./DataTablePaginationBand\";\nimport { SaveViewDialog } from \"./SaveViewDialog\";\nimport type {\n DataTableProps,\n DataTableSlots,\n} from \"./DataTable.types\";\nimport type { DataTableInstance } from \"./useDataTable\";\n\nexport type { DataTableProps, DataTableSlots } from \"./DataTable.types\";\n\nfunction applySlots<TData>(\n instance: DataTableInstance<TData>,\n slots: DataTableSlots | undefined,\n): DataTableInstance<TData>[\"chromeProps\"][\"toolbar\"] {\n const toolbar = instance.chromeProps.toolbar;\n if (slots?.toolbar !== undefined) return slots.toolbar;\n if (\n toolbar === undefined ||\n toolbar === false ||\n typeof toolbar !== \"object\" ||\n toolbar === null ||\n Array.isArray(toolbar) ||\n \"props\" in (toolbar as object)\n )\n return toolbar;\n if (slots?.primaryAction === undefined && slots?.toolbarActions === undefined)\n return toolbar;\n // After the guards above, toolbar is a TableToolbarConfig object.\n const config = toolbar as TableToolbarConfig;\n return {\n ...config,\n primaryAction: slots?.primaryAction ?? config.primaryAction,\n actions: slots?.toolbarActions ?? config.actions,\n };\n}\n\nexport function DataTable<TData>({\n table,\n slots,\n className,\n containerClassName,\n}: DataTableProps<TData>) {\n const { t } = useTranslation();\n const [columnSettingsOpen, setColumnSettingsOpen] = useState(false);\n const [saveViewOpen, setSaveViewOpen] = useState(false);\n\n const tableProps = table.tableProps;\n const chrome = table.chromeProps;\n const instance = table.instance;\n const views = table.views;\n\n const toolbar = applySlots(table, slots);\n const viewsConfig = isTableViewsConfig(chrome.views) ? chrome.views : undefined;\n const viewsContent = chrome.views;\n const viewItems = useMemo<TableViewItem[]>(\n () =>\n viewsConfig === undefined\n ? []\n : [...viewsConfig.items],\n [viewsConfig],\n );\n\n // ── Batch action band wiring (composite-owned) ──────────────────\n const batchConfig = isTableBatchActionsConfig<TData>(chrome.batchActions)\n ? chrome.batchActions\n : undefined;\n const selectedRowKeySet = new Set(batchConfig?.selectedRowKeys ?? []);\n const rows = instance.getRowModel().rows;\n const selectableRows = rows.filter(\n (row) => batchConfig?.getCheckboxDisabled?.(row) !== true,\n );\n const selectedRows = rows.filter((row) => selectedRowKeySet.has(row.id));\n const allVisibleSelected =\n selectableRows.length > 0 &&\n selectableRows.every((row) => selectedRowKeySet.has(row.id));\n const selectAllVisible = () => {\n if (batchConfig === undefined) return;\n const next = new Set(batchConfig.selectedRowKeys);\n if (allVisibleSelected)\n selectableRows.forEach((row) => next.delete(row.id));\n else selectableRows.forEach((row) => next.add(row.id));\n batchConfig.onSelectedRowKeysChange(Array.from(next));\n };\n const clearSelection = () => batchConfig?.onSelectedRowKeysChange([]);\n\n // ── Filter chip bar (auto-derived or custom) ────────────────────\n const activeFilterBar =\n chrome.filterBar ??\n deriveFilterBar(tableProps.columns, chrome.filters, chrome.onFiltersChange);\n const hasFilterBar =\n activeFilterBar !== undefined &&\n (!isFilterItems(activeFilterBar) || activeFilterBar.length > 0);\n\n // ── Save-view callbacks ─────────────────────────────────────────\n const applyView = (view: TableViewItem) => {\n viewsConfig?.onActiveKeyChange?.(view.key);\n viewsConfig?.onViewApply?.(view);\n };\n const deleteView = (view: TableViewItem) => {\n if (chrome.savedViews.some((item) => item.key === view.key)) {\n chrome.setSavedViews(\n chrome.savedViews.filter((item) => item.key !== view.key),\n );\n if (\n viewsConfig?.activeKey === view.key &&\n viewsConfig.items[0] !== undefined\n )\n applyView(viewsConfig.items[0]);\n return;\n }\n viewsConfig?.onDeleteView?.(view);\n };\n const openSaveView = () => {\n if (viewsConfig?.onSaveCurrent !== undefined) {\n viewsConfig.onSaveCurrent();\n return;\n }\n setSaveViewOpen(true);\n };\n const confirmSaveView = (label: string) => {\n const nextView: TableViewItem = {\n key: `saved-${Date.now()}`,\n label,\n deletable: true,\n ...chrome.currentViewSnapshot,\n };\n chrome.setSavedViews([...chrome.savedViews, nextView]);\n viewsConfig?.onActiveKeyChange?.(nextView.key);\n setSaveViewOpen(false);\n };\n\n // ── Toolbar config: detect columns button to open Sheet ─────────\n const hasColumnsButton =\n typeof toolbar === \"object\" &&\n toolbar !== null &&\n !Array.isArray(toolbar) &&\n \"columns\" in toolbar &&\n toolbar.columns !== undefined &&\n toolbar.columns !== false &&\n toolbar.columns.onClick === undefined;\n\n // ── Empty state with reset-filters action ───────────────────────\n const emptyContent: ReactNode =\n slots?.emptyState ??\n tableProps.empty ??\n (\n <Empty description={t(\"table.emptyDescription\")}>\n {hasFilterBar && chrome.onResetFilters !== undefined && (\n <Button size=\"small\" variant=\"outline\" onClick={chrome.onResetFilters}>\n {t(\"table.resetFilters\")}\n </Button>\n )}\n </Empty>\n );\n\n // ── Build selection prop to forward to <Table> (for checkbox column) ──\n // The primitive needs the selection state to render the checkbox\n // column; the chrome batch-action band is rendered here separately.\n const selectionForPrimitive =\n batchConfig !== undefined\n ? {\n selectedRowKeys: batchConfig.selectedRowKeys,\n onSelectedRowKeysChange: batchConfig.onSelectedRowKeysChange,\n getCheckboxDisabled: batchConfig.getCheckboxDisabled,\n }\n : undefined;\n\n // touch the unused-locally-derived `views` so lint stays calm.\n void views;\n void viewItems;\n\n return (\n <div\n className={cn(\"table-stack\", containerClassName, tableProps.containerClassName)}\n data-density={tableProps.density}\n >\n {viewsConfig !== undefined && (\n <ViewTabs\n config={viewsConfig}\n items={[...viewsConfig.items, ...chrome.savedViews]}\n applyView={applyView}\n deleteView={deleteView}\n saveView={openSaveView}\n defaultSaveLabel={t(\"table.saveView\")}\n defaultDeleteLabel={t(\"table.deleteView\")}\n />\n )}\n {viewsContent !== undefined && viewsConfig === undefined && viewsContent !== false && (\n <div className=\"tbl-views\">{viewsContent as ReactNode}</div>\n )}\n {toolbar !== undefined && toolbar !== false && (\n <ToolbarBar\n toolbar={toolbar}\n t={t}\n onOpenColumns={() => setColumnSettingsOpen(true)}\n />\n )}\n {batchConfig !== undefined && (\n <BatchActionBand\n batchConfig={batchConfig}\n selectableRows={selectableRows}\n selectedRows={selectedRows}\n allVisibleSelected={allVisibleSelected}\n selectAllVisible={selectAllVisible}\n clearSelection={clearSelection}\n t={t}\n />\n )}\n {hasFilterBar && (\n <FilterChipBar\n items={activeFilterBar}\n label={t(\"table.conditions\")}\n onResetFilters={chrome.onResetFilters}\n resetLabel={t(\"table.resetFilters\")}\n />\n )}\n <Table\n {...tableProps}\n instance={instance}\n selection={selectionForPrimitive}\n className={cn(tableProps.className, className)}\n empty={emptyContent}\n footer={slots?.footer ?? tableProps.footer}\n />\n {chrome.pagination !== undefined && (\n <DataTablePaginationBand config={chrome.pagination} t={t} />\n )}\n {hasColumnsButton && columnSettingsOpen && (\n <ColumnManagerSheet\n open={columnSettingsOpen}\n onOpenChange={setColumnSettingsOpen}\n table={instance}\n autoColumnPinning={chrome.autoColumnPinning}\n columnPinning={chrome.columnPinning}\n onColumnPinningChange={chrome.setColumnPinning}\n />\n )}\n {viewsConfig !== undefined &&\n viewsConfig.onSaveCurrent === undefined &&\n saveViewOpen && (\n <SaveViewDialog\n open={saveViewOpen}\n onOpenChange={setSaveViewOpen}\n defaultName={chrome.saveViewDefaultName(1)}\n duplicateView={chrome.duplicateView}\n onConfirm={confirmSaveView}\n />\n )}\n </div>\n );\n}\n","/**\n * @godxjp/ui DataTable — localStorage persistence helpers.\n *\n * Moved out of `data-display/Table.persistence.ts` in Stage 4b\n * (Plan §3). The `<DataTable>` composite owns persistence; the slim\n * `<Table>` primitive no longer reads or writes localStorage.\n *\n * Industry standard. Modern table libraries (TanStack, Material\n * React Table, Mantine React Table) recommend persistence as\n * consumer code via `useState` + `on[StateName]Change` callbacks\n * rather than a built-in primitive feature. The same pattern is\n * available via the `useTableState` hook (see\n * `docs/reference/hooks/useTableState.md`) — that's the preferred\n * surface for new consumers.\n */\nimport type { ColumnPinningState } from \"@tanstack/react-table\";\nimport type {\n TableColumn,\n TableColumnVisibility,\n TableFilter,\n TableSort,\n TableViewItem,\n} from \"../../data-display/Table.types\";\n\nexport const MAX_PERSISTED_TABLE_VIEWS = 20;\n\nexport function getTableColumnVisibilityStorageKey(tableKey: string): string {\n return `godxui:table:${tableKey}:columnVisibility`;\n}\n\nexport function getTableColumnPinningStorageKey(tableKey: string): string {\n return `godxui:table:${tableKey}:columnPinning`;\n}\n\nexport function getTableViewsStorageKey(tableKey: string): string {\n return `godxui:table:${tableKey}:views`;\n}\n\ninterface PersistedColumnVisibility {\n version: 1;\n columnKeys: string[];\n visibility: TableColumnVisibility;\n}\n\ninterface PersistedColumnPinning {\n version: 2;\n columnKeys: string[];\n pinning: { left: string[]; right: string[] };\n}\n\ninterface PersistedTableView {\n key: string;\n label: string;\n filters?: TableFilter[];\n sort?: TableSort | null;\n columnVisibility?: TableColumnVisibility;\n}\n\ninterface PersistedTableViews {\n version: 1;\n columnKeys: string[];\n views: PersistedTableView[];\n}\n\nfunction isColumnVisibility(\n value: unknown,\n): value is TableColumnVisibility {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.values(value).every((item) => typeof item === \"boolean\")\n );\n}\n\nfunction localGetColumnKey<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nfunction getColumnKeys<TData>(\n columns: TableColumn<TData, unknown>[],\n): string[] {\n return columns\n .map((column) => localGetColumnKey(column))\n .filter((key): key is string => key !== undefined)\n .sort();\n}\n\nfunction hasSameColumnKeys(left: string[], right: string[]): boolean {\n return (\n left.length === right.length &&\n left.every((key, index) => key === right[index])\n );\n}\n\nfunction isPersistedColumnVisibility(\n value: unknown,\n): value is PersistedColumnVisibility {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return false;\n const candidate = value as {\n version?: unknown;\n columnKeys?: unknown;\n visibility?: unknown;\n };\n return (\n candidate.version === 1 &&\n Array.isArray(candidate.columnKeys) &&\n candidate.columnKeys.every((item) => typeof item === \"string\") &&\n isColumnVisibility(candidate.visibility)\n );\n}\n\nexport function readPersistedColumnVisibility<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n): TableColumnVisibility | undefined {\n if (tableKey === undefined || typeof window === \"undefined\") return undefined;\n try {\n const stored = window.localStorage.getItem(\n getTableColumnVisibilityStorageKey(tableKey),\n );\n if (stored === null) return undefined;\n const parsed = JSON.parse(stored) as unknown;\n if (!isPersistedColumnVisibility(parsed)) return undefined;\n if (!hasSameColumnKeys(parsed.columnKeys, getColumnKeys(columns)))\n return undefined;\n return parsed.visibility;\n } catch {\n return undefined;\n }\n}\n\nexport function writePersistedColumnVisibility<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n columnVisibility: TableColumnVisibility,\n): void {\n if (tableKey === undefined || typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(\n getTableColumnVisibilityStorageKey(tableKey),\n JSON.stringify({\n version: 1,\n columnKeys: getColumnKeys(columns),\n visibility: columnVisibility,\n } satisfies PersistedColumnVisibility),\n );\n } catch {\n // localStorage can be unavailable in private browsing or sandboxed iframes.\n }\n}\n\nfunction isPersistedColumnPinning(\n value: unknown,\n): value is PersistedColumnPinning {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return false;\n const candidate = value as {\n version?: unknown;\n columnKeys?: unknown;\n pinning?: unknown;\n };\n if (\n candidate.version !== 2 ||\n !Array.isArray(candidate.columnKeys) ||\n !candidate.columnKeys.every((item) => typeof item === \"string\") ||\n typeof candidate.pinning !== \"object\" ||\n candidate.pinning === null\n )\n return false;\n const pinning = candidate.pinning as { left?: unknown; right?: unknown };\n const isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every((item) => typeof item === \"string\");\n return isStringArray(pinning.left) && isStringArray(pinning.right);\n}\n\nexport function readPersistedColumnPinning<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n): ColumnPinningState | undefined {\n if (tableKey === undefined || typeof window === \"undefined\") return undefined;\n try {\n const stored = window.localStorage.getItem(\n getTableColumnPinningStorageKey(tableKey),\n );\n if (stored === null) return undefined;\n const parsed = JSON.parse(stored) as unknown;\n if (!isPersistedColumnPinning(parsed)) return undefined;\n if (!hasSameColumnKeys(parsed.columnKeys, getColumnKeys(columns)))\n return undefined;\n return { left: parsed.pinning.left, right: parsed.pinning.right };\n } catch {\n return undefined;\n }\n}\n\nexport function writePersistedColumnPinning<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n columnPinning: ColumnPinningState,\n): void {\n if (tableKey === undefined || typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(\n getTableColumnPinningStorageKey(tableKey),\n JSON.stringify({\n version: 2,\n columnKeys: getColumnKeys(columns),\n pinning: {\n left: columnPinning.left ?? [],\n right: columnPinning.right ?? [],\n },\n } satisfies PersistedColumnPinning),\n );\n } catch {\n // localStorage can be unavailable in private browsing or sandboxed iframes.\n }\n}\n\nfunction isPersistedTableView(value: unknown): value is PersistedTableView {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return false;\n const candidate = value as Partial<PersistedTableView>;\n return (\n typeof candidate.key === \"string\" &&\n typeof candidate.label === \"string\" &&\n (candidate.filters === undefined || Array.isArray(candidate.filters)) &&\n (candidate.columnVisibility === undefined ||\n isColumnVisibility(candidate.columnVisibility))\n );\n}\n\nexport function readPersistedTableViews<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n): TableViewItem[] {\n if (tableKey === undefined || typeof window === \"undefined\") return [];\n try {\n const stored = window.localStorage.getItem(getTableViewsStorageKey(tableKey));\n if (stored === null) return [];\n const parsed = JSON.parse(stored) as unknown;\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed))\n return [];\n const candidate = parsed as Partial<PersistedTableViews>;\n if (\n candidate.version !== 1 ||\n !Array.isArray(candidate.columnKeys) ||\n !hasSameColumnKeys(candidate.columnKeys, getColumnKeys(columns)) ||\n !Array.isArray(candidate.views)\n )\n return [];\n return candidate.views\n .filter(isPersistedTableView)\n .slice(-MAX_PERSISTED_TABLE_VIEWS)\n .map((view) => ({\n ...view,\n deletable: true,\n }));\n } catch {\n return [];\n }\n}\n\nexport function writePersistedTableViews<TData>(\n tableKey: string | undefined,\n columns: TableColumn<TData, unknown>[],\n views: TableViewItem[],\n): void {\n if (tableKey === undefined || typeof window === \"undefined\") return;\n try {\n const persistedViews = views\n .flatMap((view): PersistedTableView[] =>\n typeof view.label === \"string\"\n ? [\n {\n key: view.key,\n label: view.label,\n filters: view.filters,\n sort: view.sort,\n columnVisibility: view.columnVisibility,\n },\n ]\n : [],\n )\n .slice(-MAX_PERSISTED_TABLE_VIEWS);\n window.localStorage.setItem(\n getTableViewsStorageKey(tableKey),\n JSON.stringify({\n version: 1,\n columnKeys: getColumnKeys(columns),\n views: persistedViews,\n } satisfies PersistedTableViews),\n );\n } catch {\n // localStorage can be unavailable in private browsing or sandboxed iframes.\n }\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport {\n getCoreRowModel,\n useReactTable,\n type ColumnPinningState,\n type Table as ReactTable,\n type Updater,\n type VisibilityState,\n} from \"@tanstack/react-table\";\nimport { matchBreakpoint, useBreakpoint } from \"../../../hooks/useBreakpoint\";\nimport type { Breakpoint } from \"../../layout/Row\";\nimport {\n MAX_PERSISTED_TABLE_VIEWS,\n readPersistedColumnPinning,\n readPersistedColumnVisibility,\n readPersistedTableViews,\n writePersistedColumnPinning,\n writePersistedColumnVisibility,\n writePersistedTableViews,\n} from \"./persistence\";\nimport type {\n TableBatchActionsConfig,\n TableColumn,\n TableColumnPinningChange,\n TableColumnVisibility,\n TableDensity,\n TableEditingConfig,\n TableExpandableConfig,\n TableFilter,\n TableFilterBar,\n TableGroupBy,\n TablePagination,\n TableRowKey,\n TableSortState,\n TableStickyConfig,\n TableStickySide,\n TableToolbar,\n TableTreeConfig,\n TableViewItem,\n TableViews,\n TableViewSnapshot,\n} from \"../../data-display/Table.types\";\nimport type { UseTablePaginationResult } from \"../../../hooks/useTablePagination\";\nimport type { UseTableSelectionResult } from \"../../../hooks/useTableSelection\";\nimport type { UseTableViewsResult } from \"../../../hooks/useTableViews\";\n\nexport interface UseDataTableOptions<TData> {\n data: TData[];\n columns: TableColumn<TData, unknown>[];\n rowKey?: TableRowKey<TData>;\n getRowId?: (row: TData, index: number) => string;\n\n selection?: UseTableSelectionResult;\n batchActions?:\n | ReactNode\n | TableBatchActionsConfig<TData>\n | {\n actions: TableBatchActionsConfig<TData>[\"actions\"];\n getCheckboxDisabled?: TableBatchActionsConfig<\n TData\n >[\"getCheckboxDisabled\"];\n selectedLabel?: TableBatchActionsConfig<TData>[\"selectedLabel\"];\n selectAllLabel?: TableBatchActionsConfig<TData>[\"selectAllLabel\"];\n clearLabel?: TableBatchActionsConfig<TData>[\"clearLabel\"];\n };\n\n pagination?: UseTablePaginationResult;\n total?: number;\n pageSizeOptions?: number[];\n showSizeChanger?: boolean;\n showTotal?: (total: number, range: [number, number]) => ReactNode;\n /** Direct pagination config — bypasses the `UseTablePaginationResult` slice. */\n paginationConfig?: TablePagination;\n\n views?: UseTableViewsResult;\n onViewApply?: (view: TableViewItem) => void;\n\n filters?: TableFilter[];\n onFiltersChange?: (filters: TableFilter[]) => void;\n filterBar?: TableFilterBar;\n onResetFilters?: () => void;\n\n sort?: TableSortState;\n onSortChange?: (sort: TableSortState) => void;\n resizable?: boolean;\n\n columnVisibility?: TableColumnVisibility;\n defaultColumnVisibility?: TableColumnVisibility;\n onColumnVisibilityChange?: (columnVisibility: TableColumnVisibility) => void;\n onColumnPinningChange?: TableColumnPinningChange;\n\n toolbar?: TableToolbar;\n\n expandable?: TableExpandableConfig<TData>;\n tree?: TableTreeConfig<TData>;\n editing?: TableEditingConfig<TData>;\n groupBy?: TableGroupBy<TData>;\n\n density?: TableDensity;\n stickyHeader?: boolean;\n rowClassName?: string | ((row: { original: TData }) => string | undefined);\n caption?: ReactNode;\n footer?: ReactNode;\n empty?: ReactNode;\n tableKey?: string;\n containerClassName?: string;\n className?: string;\n}\n\n// ── Helpers (private; mirror primitive internals while Stage 4b lands) ──\n\nfunction resolveUpdater<T>(updater: Updater<T>, previous: T): T {\n return typeof updater === \"function\"\n ? (updater as (old: T) => T)(previous)\n : updater;\n}\n\nfunction getColumnKey<TData>(\n column: TableColumn<TData, unknown>,\n): string | undefined {\n const maybeAccessor = column as { accessorKey?: unknown; id?: string };\n if (typeof maybeAccessor.id === \"string\") return maybeAccessor.id;\n if (typeof maybeAccessor.accessorKey === \"string\")\n return maybeAccessor.accessorKey;\n return undefined;\n}\n\nfunction resolveStickySide(\n config: TableStickyConfig | undefined,\n bp: Breakpoint,\n): TableStickySide | undefined {\n if (config === undefined || config === false) return undefined;\n if (typeof config === \"string\") return config;\n if (config.from !== undefined && !matchBreakpoint(bp, config.from))\n return undefined;\n return config.side;\n}\n\nfunction deriveColumnPinning<TData>(\n columns: TableColumn<TData, unknown>[],\n bp: Breakpoint,\n): ColumnPinningState {\n return columns.reduce<ColumnPinningState>(\n (state, column) => {\n const key = getColumnKey(column);\n if (key === undefined) return state;\n const side = resolveStickySide(column.meta?.sticky, bp);\n if (side === undefined) return state;\n return { ...state, [side]: [...(state[side] ?? []), key] };\n },\n { left: [], right: [] },\n );\n}\n\nfunction resolveRowKey<TData>(\n row: TData,\n index: number,\n rowKey: TableRowKey<TData>,\n warnMissingRowKey: (rowKey: string) => void,\n) {\n if (typeof rowKey === \"function\") {\n const value = rowKey(row, index);\n return String(value);\n }\n if (\n typeof row === \"object\" &&\n row !== null &&\n Object.prototype.hasOwnProperty.call(row, rowKey)\n ) {\n const value = (row as Record<string, unknown>)[rowKey];\n if (value !== undefined && value !== null) return String(value);\n }\n warnMissingRowKey(rowKey);\n return String(index);\n}\n\nfunction normalizeFilters(filters: TableFilter[] | undefined) {\n return (filters ?? [])\n .map((filter) => ({\n key: filter.key,\n operator: filter.operator ?? \"eq\",\n value: filter.value ?? null,\n }))\n .sort((left, right) => left.key.localeCompare(right.key));\n}\n\nfunction normalizeVisibility(columnVisibility: TableColumnVisibility | undefined) {\n return Object.fromEntries(\n Object.entries(columnVisibility ?? {}).sort(([left], [right]) =>\n left.localeCompare(right),\n ),\n );\n}\n\nfunction sameViewSnapshot(\n view: TableViewItem,\n snapshot: TableViewSnapshot,\n) {\n return (\n JSON.stringify(normalizeFilters(view.filters)) ===\n JSON.stringify(normalizeFilters(snapshot.filters)) &&\n JSON.stringify(view.sort ?? null) === JSON.stringify(snapshot.sort ?? null) &&\n JSON.stringify(normalizeVisibility(view.columnVisibility)) ===\n JSON.stringify(normalizeVisibility(snapshot.columnVisibility))\n );\n}\n\nfunction buildBatchActions<TData>(\n selection: UseTableSelectionResult | undefined,\n batchActions: UseDataTableOptions<TData>[\"batchActions\"],\n): ReactNode | TableBatchActionsConfig<TData> | undefined {\n if (batchActions === undefined) return undefined;\n if (\n batchActions !== null &&\n typeof batchActions === \"object\" &&\n !Array.isArray(batchActions) &&\n \"selectedRowKeys\" in batchActions\n ) {\n return batchActions as TableBatchActionsConfig<TData>;\n }\n if (selection === undefined) return batchActions as ReactNode;\n if (\n batchActions !== null &&\n typeof batchActions === \"object\" &&\n !Array.isArray(batchActions) &&\n \"actions\" in batchActions\n ) {\n const partial = batchActions as Extract<\n UseDataTableOptions<TData>[\"batchActions\"],\n { actions: unknown }\n >;\n return {\n selectedRowKeys: selection.selectedRowKeys,\n onSelectedRowKeysChange: selection.setSelectedRowKeys,\n actions: partial.actions,\n getCheckboxDisabled: partial.getCheckboxDisabled,\n selectedLabel: partial.selectedLabel,\n selectAllLabel: partial.selectAllLabel,\n clearLabel: partial.clearLabel,\n };\n }\n return {\n selectedRowKeys: selection.selectedRowKeys,\n onSelectedRowKeysChange: selection.setSelectedRowKeys,\n actions: batchActions as ReactNode,\n };\n}\n\nfunction buildViewsConfig(\n views: UseTableViewsResult | undefined,\n onViewApply: UseDataTableOptions<unknown>[\"onViewApply\"],\n): import(\"../../data-display/Table.types\").TableViewsConfig | undefined {\n if (views === undefined) return undefined;\n return {\n items: views.items,\n activeKey: views.activeKey,\n onActiveKeyChange: views.setActiveKey,\n onViewApply: (view) => {\n views.applyView(view);\n onViewApply?.(view);\n },\n onDeleteView: (view) => views.deleteView(view.key),\n };\n}\n\n// ── Public surface ────────────────────────────────────────────────\n\nexport interface DataTableInstance<TData> {\n /** Resolved props ready to spread on `<Table>` — already strips chrome. */\n tableProps: {\n columns: TableColumn<TData, unknown>[];\n data: TData[];\n rowKey?: TableRowKey<TData>;\n getRowId?: (row: TData, index: number) => string;\n density?: TableDensity;\n stickyHeader?: boolean;\n resizable?: boolean;\n caption?: ReactNode;\n footer?: ReactNode;\n empty?: ReactNode;\n containerClassName?: string;\n className?: string;\n rowClassName?:\n | string\n | ((row: { original: TData }) => string | undefined);\n sort?: TableSortState;\n onSortChange?: (sort: TableSortState) => void;\n expandable?: TableExpandableConfig<TData>;\n tree?: TableTreeConfig<TData>;\n editing?: TableEditingConfig<TData>;\n groupBy?: TableGroupBy<TData>;\n };\n /** TanStack instance built by the hook (Stage 4b — hoisted from the primitive). */\n instance: ReactTable<TData>;\n /** Chrome config — consumed by `<DataTable>`'s renderers, not by the primitive. */\n chromeProps: {\n views: TableViews | undefined;\n toolbar: TableToolbar | undefined;\n batchActions: ReactNode | TableBatchActionsConfig<TData> | undefined;\n filterBar: TableFilterBar | undefined;\n filters: TableFilter[] | undefined;\n onFiltersChange: ((filters: TableFilter[]) => void) | undefined;\n onResetFilters: (() => void) | undefined;\n pagination: TablePagination | undefined;\n columnVisibility: TableColumnVisibility;\n columnPinning: ColumnPinningState;\n autoColumnPinning: ColumnPinningState;\n setColumnPinning: (pinning: ColumnPinningState) => void;\n setColumnVisibility: (visibility: TableColumnVisibility) => void;\n currentViewSnapshot: TableViewSnapshot;\n duplicateView: TableViewItem | undefined;\n savedViews: TableViewItem[];\n setSavedViews: (views: TableViewItem[]) => void;\n saveViewDefaultName: (count: number) => string;\n };\n /** Slice references (so consumer hooks remain visible). */\n selection: UseTableSelectionResult | undefined;\n pagination: UseTablePaginationResult | undefined;\n views: UseTableViewsResult | undefined;\n}\n\n/**\n * useDataTable — composite-level state + TanStack instance builder.\n *\n * Stage 4b of the Table refactor (Plan §3). The TanStack instance and\n * the chrome-related state (column visibility, column pinning, saved\n * views) live here on the composite side; `<DataTable>` renders the\n * chrome around the slim `<Table>` primitive.\n */\nexport function useDataTable<TData>(\n options: UseDataTableOptions<TData>,\n): DataTableInstance<TData> {\n const {\n selection,\n pagination,\n total,\n pageSizeOptions,\n showSizeChanger,\n showTotal,\n paginationConfig,\n views,\n onViewApply,\n batchActions,\n columns,\n data,\n rowKey = \"id\" as TableRowKey<TData>,\n getRowId,\n columnVisibility: controlledColumnVisibility,\n defaultColumnVisibility,\n onColumnVisibilityChange,\n onColumnPinningChange,\n sort,\n onSortChange,\n resizable,\n expandable,\n editing,\n groupBy,\n tree,\n filterBar,\n filters,\n onFiltersChange,\n onResetFilters,\n toolbar,\n footer,\n empty,\n rowClassName,\n density,\n stickyHeader,\n caption,\n tableKey,\n containerClassName,\n className,\n } = options;\n\n // ── Column visibility ────────────────────────────────────────────\n const [internalColumnVisibility, setInternalColumnVisibility] =\n useState<TableColumnVisibility>(\n () =>\n controlledColumnVisibility ??\n readPersistedColumnVisibility(tableKey, columns) ??\n defaultColumnVisibility ??\n {},\n );\n const effectiveColumnVisibility =\n controlledColumnVisibility ?? internalColumnVisibility;\n\n // ── Column pinning (auto + user) ─────────────────────────────────\n const bp = useBreakpoint();\n const autoColumnPinning = useMemo(\n () => deriveColumnPinning(columns, bp),\n [columns, bp],\n );\n const [userColumnPinning, setUserColumnPinning] =\n useState<ColumnPinningState>(\n () =>\n readPersistedColumnPinning(tableKey, columns) ?? {\n left: [],\n right: [],\n },\n );\n const columnPinning = useMemo<ColumnPinningState>(() => {\n const dedupe = (list: string[]) => Array.from(new Set(list));\n return {\n left: dedupe([\n ...(autoColumnPinning.left ?? []),\n ...(userColumnPinning.left ?? []),\n ]),\n right: dedupe([\n ...(autoColumnPinning.right ?? []),\n ...(userColumnPinning.right ?? []),\n ]),\n };\n }, [autoColumnPinning, userColumnPinning]);\n\n // ── Saved views (persisted) ─────────────────────────────────────\n const [internalSavedViews, setInternalSavedViews] = useState<TableViewItem[]>(\n () => readPersistedTableViews(tableKey, columns),\n );\n\n // Persistence effects\n useEffect(() => {\n writePersistedColumnVisibility(tableKey, columns, effectiveColumnVisibility);\n }, [columns, effectiveColumnVisibility, tableKey]);\n useEffect(() => {\n writePersistedColumnPinning(tableKey, columns, userColumnPinning);\n }, [columns, userColumnPinning, tableKey]);\n useEffect(() => {\n writePersistedTableViews(tableKey, columns, internalSavedViews);\n }, [columns, internalSavedViews, tableKey]);\n\n // ── TanStack instance (hoisted from the primitive) ──────────────\n const warnedRowKeys = useRef(new Set<string>());\n const resolveGetRowId =\n getRowId ??\n ((row: TData, index: number) =>\n resolveRowKey(row, index, rowKey, (missingRowKey) => {\n if (warnedRowKeys.current.has(missingRowKey)) return;\n warnedRowKeys.current.add(missingRowKey);\n console.warn(\n `[godx-ui/Table] rowKey \"${missingRowKey}\" was not found on a row. Pass rowKey or getRowId to provide a stable row id.`,\n );\n }));\n\n const handleColumnVisibilityChange = (updater: Updater<VisibilityState>) => {\n const next = resolveUpdater(updater, effectiveColumnVisibility);\n if (controlledColumnVisibility === undefined) setInternalColumnVisibility(next);\n onColumnVisibilityChange?.(next);\n };\n const handleColumnPinningChange = (updater: Updater<ColumnPinningState>) => {\n const next = resolveUpdater(updater, columnPinning);\n const autoLeft = new Set(autoColumnPinning.left ?? []);\n const autoRight = new Set(autoColumnPinning.right ?? []);\n setUserColumnPinning({\n left: (next.left ?? []).filter((key) => !autoLeft.has(key)),\n right: (next.right ?? []).filter((key) => !autoRight.has(key)),\n });\n onColumnPinningChange?.(next);\n };\n\n const tableState = useMemo(\n () => ({ columnPinning, columnVisibility: effectiveColumnVisibility }),\n [columnPinning, effectiveColumnVisibility],\n );\n const instance = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getRowId: resolveGetRowId,\n enableColumnPinning: true,\n enableColumnResizing: resizable === true,\n columnResizeMode: \"onChange\",\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnPinningChange: handleColumnPinningChange,\n state: tableState,\n });\n\n // ── Pagination ──────────────────────────────────────────────────\n const paginationProp: TablePagination | undefined = paginationConfig\n ? paginationConfig\n : pagination\n ? {\n current: pagination.page,\n pageSize: pagination.pageSize,\n total: total ?? data.length,\n pageSizeOptions,\n showSizeChanger,\n showTotal,\n onChange: pagination.onChange,\n }\n : undefined;\n\n // ── Views snapshot + duplicate detection ────────────────────────\n const currentViewSnapshot: TableViewSnapshot = {\n filters: filters ?? [],\n sort: Array.isArray(sort) ? (sort[0] ?? null) : (sort ?? null),\n columnVisibility: effectiveColumnVisibility,\n };\n const builtInViewsConfig = buildViewsConfig(views, onViewApply);\n const viewItems = builtInViewsConfig\n ? [...(views?.items ?? []), ...internalSavedViews]\n : [];\n const duplicateView = viewItems.find((view) =>\n sameViewSnapshot(view, currentViewSnapshot),\n );\n\n const setSavedViews = (next: TableViewItem[]) => {\n const trimmed = next.slice(-MAX_PERSISTED_TABLE_VIEWS);\n setInternalSavedViews(trimmed);\n builtInViewsConfig?.onItemsChange?.([...(views?.items ?? []), ...trimmed]);\n };\n\n return {\n tableProps: {\n columns,\n data,\n rowKey,\n getRowId,\n density,\n stickyHeader,\n resizable,\n caption,\n footer,\n empty,\n containerClassName,\n className,\n rowClassName,\n sort,\n onSortChange,\n expandable,\n tree,\n editing,\n groupBy,\n },\n instance,\n chromeProps: {\n views: builtInViewsConfig,\n toolbar,\n batchActions: buildBatchActions(selection, batchActions),\n filterBar,\n filters,\n onFiltersChange,\n onResetFilters,\n pagination: paginationProp,\n columnVisibility: effectiveColumnVisibility,\n columnPinning,\n autoColumnPinning,\n setColumnPinning: handleColumnPinningChange,\n setColumnVisibility: handleColumnVisibilityChange,\n currentViewSnapshot,\n duplicateView,\n savedViews: internalSavedViews,\n setSavedViews,\n saveViewDefaultName: (count: number) =>\n `View ${internalSavedViews.length + count}`,\n },\n selection,\n pagination,\n views,\n };\n}\n"]}