@squadbase/vantage 0.6.1 → 0.6.2-dev1.31accb1

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 (183) hide show
  1. package/dist/add-DY4AXANK.js +6 -0
  2. package/dist/add-DY4AXANK.js.map +1 -0
  3. package/dist/{build-O5TVNH4E.js → build-TVKFIVFQ.js} +8 -8
  4. package/dist/{build-O5TVNH4E.js.map → build-TVKFIVFQ.js.map} +1 -1
  5. package/dist/{check-WFBEDHDR.js → check-3KHZXZMQ.js} +6 -6
  6. package/dist/{check-WFBEDHDR.js.map → check-3KHZXZMQ.js.map} +1 -1
  7. package/dist/{chunk-PLST5Q7T.js → chunk-AG6RZ2RR.js} +1010 -23
  8. package/dist/chunk-AG6RZ2RR.js.map +1 -0
  9. package/dist/{chunk-KLEIVDUV.js → chunk-CEXAQQ5W.js} +150 -11
  10. package/dist/chunk-CEXAQQ5W.js.map +1 -0
  11. package/dist/{chunk-JGRMRXXZ.js → chunk-JKLLFVEU.js} +3 -3
  12. package/dist/{chunk-JGRMRXXZ.js.map → chunk-JKLLFVEU.js.map} +1 -1
  13. package/dist/{chunk-EP6JHXSR.js → chunk-LMUACBMA.js} +3 -3
  14. package/dist/{chunk-EP6JHXSR.js.map → chunk-LMUACBMA.js.map} +1 -1
  15. package/dist/{chunk-MXI3PZFT.js → chunk-OB6UBJXF.js} +156 -200
  16. package/dist/chunk-OB6UBJXF.js.map +1 -0
  17. package/dist/{chunk-BCE22JSM.js → chunk-P7W4LR3Z.js} +32 -13
  18. package/dist/chunk-P7W4LR3Z.js.map +1 -0
  19. package/dist/chunk-PXRX5PEC.js +54 -0
  20. package/dist/chunk-PXRX5PEC.js.map +1 -0
  21. package/dist/{chunk-3G43C6OL.js → chunk-QI3XQKHS.js} +39 -3
  22. package/dist/chunk-QI3XQKHS.js.map +1 -0
  23. package/dist/{chunk-QDZA5JSL.js → chunk-U2M6HGKQ.js} +3 -3
  24. package/dist/{chunk-QDZA5JSL.js.map → chunk-U2M6HGKQ.js.map} +1 -1
  25. package/dist/{chunk-T3FLAGI6.js → chunk-VA776YE5.js} +3 -3
  26. package/dist/{chunk-T3FLAGI6.js.map → chunk-VA776YE5.js.map} +1 -1
  27. package/dist/cli.js +14 -11
  28. package/dist/cli.js.map +1 -1
  29. package/dist/components/index.d.ts +223 -1
  30. package/dist/components/index.js +3 -2
  31. package/dist/{dev-NZRLOQCL.js → dev-GDKATCC7.js} +22 -11
  32. package/dist/dev-GDKATCC7.js.map +1 -0
  33. package/dist/doc/index.d.ts +4 -0
  34. package/dist/doc/index.js +107 -11
  35. package/dist/doc/index.js.map +1 -1
  36. package/dist/{docs-ZGDJUHJI.js → docs-EJJ3BECT.js} +3 -3
  37. package/dist/{docs-ZGDJUHJI.js.map → docs-EJJ3BECT.js.map} +1 -1
  38. package/dist/{doctor-VFKEMR54.js → doctor-WQXPXP6K.js} +7 -7
  39. package/dist/doctor-WQXPXP6K.js.map +1 -0
  40. package/dist/{preview-QDCIVVSR.js → preview-OGMCNQUO.js} +12 -4
  41. package/dist/preview-OGMCNQUO.js.map +1 -0
  42. package/dist/{routes-RHP5FVGD.js → routes-MWBWWOJ2.js} +5 -5
  43. package/dist/{routes-RHP5FVGD.js.map → routes-MWBWWOJ2.js.map} +1 -1
  44. package/dist/{search-RFBELGY7.js → search-6Y422SV6.js} +3 -3
  45. package/dist/{search-RFBELGY7.js.map → search-6Y422SV6.js.map} +1 -1
  46. package/dist/slide/index.js +61 -15
  47. package/dist/slide/index.js.map +1 -1
  48. package/dist/table/index.js +7 -5
  49. package/dist/table/index.js.map +1 -1
  50. package/dist/ui/index.d.ts +140 -10
  51. package/dist/ui/index.js +1406 -63
  52. package/dist/ui/index.js.map +1 -1
  53. package/dist/{upgrade-GF2P67M6.js → upgrade-HCANX4GQ.js} +6 -6
  54. package/dist/{upgrade-GF2P67M6.js.map → upgrade-HCANX4GQ.js.map} +1 -1
  55. package/dist/vite/index.js +3 -3
  56. package/docs/en/changelog.md +24 -0
  57. package/docs/en/cli-reference.md +30 -0
  58. package/docs/en/parts/page-shell.md +1 -1
  59. package/docs/en/routing.md +4 -2
  60. package/docs/index.json +291 -61
  61. package/docs/ja/changelog.md +50 -0
  62. package/docs/ja/cli-reference.md +29 -0
  63. package/docs/ja/components.md +33 -89
  64. package/docs/ja/page-types/csv.md +83 -0
  65. package/docs/ja/page-types/doc.md +83 -0
  66. package/docs/ja/page-types/excel.md +82 -0
  67. package/docs/ja/page-types/slide.md +132 -0
  68. package/docs/ja/page-types.md +47 -0
  69. package/docs/ja/parts/area-chart.md +61 -0
  70. package/docs/ja/parts/bar-chart.md +69 -0
  71. package/docs/ja/parts/bar-list.md +35 -0
  72. package/docs/ja/parts/category-bar.md +36 -0
  73. package/docs/ja/parts/donut-chart.md +47 -0
  74. package/docs/ja/parts/echart.md +3 -0
  75. package/docs/ja/parts/line-chart.md +58 -0
  76. package/docs/ja/parts/page-shell.md +1 -1
  77. package/docs/ja/parts/progress-circle.md +34 -0
  78. package/docs/ja/parts/sparkline.md +1 -1
  79. package/docs/ja/parts/tracker.md +32 -0
  80. package/docs/ja/routing.md +8 -84
  81. package/docs/ja/ui/alert-dialog.md +41 -0
  82. package/docs/ja/ui/avatar.md +31 -0
  83. package/docs/ja/ui/combobox.md +74 -0
  84. package/docs/ja/ui/drawer.md +41 -0
  85. package/docs/ja/ui/field.md +42 -0
  86. package/docs/ja/ui/hover-card.md +21 -0
  87. package/docs/ja/ui/kbd.md +16 -0
  88. package/docs/ja/ui/pagination.md +36 -0
  89. package/docs/ja/ui/radio-group.md +21 -0
  90. package/docs/ja/ui/toast.md +46 -0
  91. package/docs/ja/ui-and-theming.md +14 -7
  92. package/package.json +18 -12
  93. package/registry/ui/accordion.tsx +74 -0
  94. package/registry/ui/alert-dialog.tsx +189 -0
  95. package/registry/ui/alert.tsx +78 -0
  96. package/registry/ui/app-shell.tsx +281 -0
  97. package/registry/ui/area-chart.tsx +1015 -0
  98. package/registry/ui/avatar.tsx +110 -0
  99. package/registry/ui/badge.tsx +54 -0
  100. package/registry/ui/bar-chart.tsx +1013 -0
  101. package/registry/ui/bar-list.tsx +302 -0
  102. package/registry/ui/breadcrumb.tsx +126 -0
  103. package/registry/ui/button.tsx +60 -0
  104. package/registry/ui/calendar.tsx +221 -0
  105. package/registry/ui/card.tsx +105 -0
  106. package/registry/ui/category-bar.tsx +281 -0
  107. package/registry/ui/checkbox.tsx +28 -0
  108. package/registry/ui/collapsible.tsx +21 -0
  109. package/registry/ui/combobox.tsx +310 -0
  110. package/registry/ui/command.tsx +196 -0
  111. package/registry/ui/dashboard-card.tsx +174 -0
  112. package/registry/ui/data-table.tsx +16 -91
  113. package/registry/ui/date-range-picker.tsx +209 -0
  114. package/registry/ui/dialog.tsx +159 -0
  115. package/registry/ui/donut-chart.tsx +1004 -0
  116. package/registry/ui/drawer.tsx +229 -0
  117. package/registry/ui/dropdown-menu.tsx +272 -0
  118. package/registry/ui/echart.tsx +486 -0
  119. package/registry/ui/field.tsx +240 -0
  120. package/registry/ui/filter-bar.tsx +365 -0
  121. package/registry/ui/funnel-steps.tsx +274 -0
  122. package/registry/ui/hover-card.tsx +52 -0
  123. package/registry/ui/input-group.tsx +158 -0
  124. package/registry/ui/input.tsx +22 -0
  125. package/registry/ui/kbd.tsx +28 -0
  126. package/registry/ui/label.tsx +20 -0
  127. package/registry/ui/line-chart.tsx +1007 -0
  128. package/registry/ui/metric-value.tsx +54 -0
  129. package/registry/ui/multi-select.tsx +226 -0
  130. package/registry/ui/page-shell.tsx +227 -0
  131. package/registry/ui/pagination.tsx +138 -0
  132. package/registry/ui/placeholder.tsx +30 -0
  133. package/registry/ui/popover.tsx +90 -0
  134. package/registry/ui/progress-circle.tsx +272 -0
  135. package/registry/ui/progress.tsx +83 -0
  136. package/registry/ui/radio-group.tsx +39 -0
  137. package/registry/ui/scroll-area.tsx +55 -0
  138. package/registry/ui/searchable-select.tsx +209 -0
  139. package/registry/ui/section-header.tsx +41 -0
  140. package/registry/ui/segmented-control.tsx +71 -0
  141. package/registry/ui/select.tsx +253 -0
  142. package/registry/ui/separator.tsx +25 -0
  143. package/registry/ui/sheet.tsx +137 -0
  144. package/registry/ui/sidebar.tsx +723 -0
  145. package/registry/ui/skeleton.tsx +15 -0
  146. package/registry/ui/slider.tsx +54 -0
  147. package/registry/ui/sparkline.tsx +155 -0
  148. package/registry/ui/spinner.tsx +12 -0
  149. package/registry/ui/states.tsx +61 -0
  150. package/registry/ui/status-badge.tsx +79 -0
  151. package/registry/ui/switch.tsx +32 -0
  152. package/registry/ui/table.tsx +116 -0
  153. package/registry/ui/tabs.tsx +82 -0
  154. package/registry/ui/textarea.tsx +20 -0
  155. package/registry/ui/toast.tsx +250 -0
  156. package/registry/ui/toggle-group.tsx +89 -0
  157. package/registry/ui/toggle.tsx +45 -0
  158. package/registry/ui/tooltip.tsx +66 -0
  159. package/registry/ui/tracker.tsx +236 -0
  160. package/registry/ui/trend-indicator.tsx +62 -0
  161. package/skills/vantage-add-feature/SKILL.md +9 -7
  162. package/skills/vantage-design/SKILL.md +3 -1
  163. package/skills/vantage-design/references/format.md +1 -1
  164. package/skills/vantage-pitfalls/SKILL.md +5 -1
  165. package/skills/vantage-slide/SKILL.md +17 -0
  166. package/templates/AGENTS.md +10 -1
  167. package/templates/agents/api.md +29 -0
  168. package/templates/agents/csv.md +2 -1
  169. package/templates/agents/doc.md +6 -3
  170. package/templates/agents/page.md +22 -8
  171. package/templates/agents/slide.md +13 -1
  172. package/templates/agents/xlsx.md +2 -1
  173. package/theme.css +51 -1
  174. package/dist/add-EISGSZAH.js +0 -6
  175. package/dist/add-EISGSZAH.js.map +0 -1
  176. package/dist/chunk-3G43C6OL.js.map +0 -1
  177. package/dist/chunk-BCE22JSM.js.map +0 -1
  178. package/dist/chunk-KLEIVDUV.js.map +0 -1
  179. package/dist/chunk-MXI3PZFT.js.map +0 -1
  180. package/dist/chunk-PLST5Q7T.js.map +0 -1
  181. package/dist/dev-NZRLOQCL.js.map +0 -1
  182. package/dist/doctor-VFKEMR54.js.map +0 -1
  183. package/dist/preview-QDCIVVSR.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/page-shell.tsx","../src/components/app-shell.tsx","../src/components/section-header.tsx","../src/components/dashboard-card.tsx","../src/components/chart-theme.ts","../src/components/echart.tsx","../src/components/chart-utils.ts","../src/components/chart-options.ts","../src/components/area-chart.tsx","../src/components/bar-chart.tsx","../src/components/line-chart.tsx","../src/components/donut-chart.tsx","../src/components/bar-list.tsx","../src/components/category-bar.tsx","../src/components/progress-circle.tsx","../src/components/tracker.tsx","../src/components/funnel-steps.tsx","../src/components/sparkline.tsx","../src/components/data-table.tsx","../src/components/filter-bar.tsx","../src/components/date-range-picker.tsx","../src/components/segmented-control.tsx","../src/components/types.ts","../src/components/option-command.tsx","../src/components/searchable-select.tsx","../src/components/multi-select.tsx","../src/components/metric-value.tsx","../src/components/trend-indicator.tsx","../src/components/status-badge.tsx","../src/components/placeholder.tsx"],"names":["jsx","forwardRef","jsxs","EChart","useState","useEffect","useRef","useMemo","AreaChart","BarChart","LineChart","DonutChart","BarList","CategoryBar","ProgressCircle","Tracker","cva","FunnelSteps","Fragment","Sparkline","useCallback","table","createContext","useContext","DateRangePicker","SegmentedControl","SearchableSelect","MultiSelect","ChevronDownIcon","ArrowUp","ArrowDown","StatusBadge","Placeholder"],"mappings":"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","file":"chunk-AG6RZ2RR.js","sourcesContent":["/**\n * PageShell — the standard page frame: a bordered header band (title,\n * description, meta, actions), an optional summary card row, and the content\n * area. Composed from parts so a page can use only what it needs.\n */\nimport { forwardRef, type HTMLAttributes } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../ui/cn\"\n\nexport interface PageShellProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const PageShell = forwardRef<HTMLDivElement, PageShellProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"page-shell\" className={cn(\"flex flex-col\", className)} {...props} />\n ),\n)\nPageShell.displayName = \"PageShell\"\n\nexport interface PageShellHeaderProps extends HTMLAttributes<HTMLDivElement> {}\n\n/**\n * A wrapping flex row, not a two-column grid: when the heading cannot keep its\n * 20rem basis next to `PageShellHeaderEnd`, the end block drops below it. A\n * `1fr auto` grid would instead hand the heading whatever the end block leaves,\n * and a CJK title — breakable between any two characters — collapses into a\n * one-character column.\n */\nexport const PageShellHeader = forwardRef<HTMLDivElement, PageShellHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-header\"\n className={cn(\"flex flex-wrap items-start gap-x-4 gap-y-6 border-b px-6 py-12\", className)}\n {...props}\n />\n ),\n)\nPageShellHeader.displayName = \"PageShellHeader\"\n\nexport interface PageShellHeadingProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const PageShellHeading = forwardRef<HTMLDivElement, PageShellHeadingProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-heading\"\n className={cn(\"min-w-0 grow basis-80\", className)}\n {...props}\n />\n ),\n)\nPageShellHeading.displayName = \"PageShellHeading\"\n\nexport interface PageShellTitleProps extends HTMLAttributes<HTMLHeadingElement> {}\n\nexport const PageShellTitle = forwardRef<HTMLHeadingElement, PageShellTitleProps>(\n ({ className, ...props }, ref) => (\n <h1\n ref={ref}\n data-slot=\"page-shell-title\"\n className={cn(\"text-2xl font-bold tracking-tight text-foreground\", className)}\n {...props}\n />\n ),\n)\nPageShellTitle.displayName = \"PageShellTitle\"\n\nexport interface PageShellDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {}\n\nexport const PageShellDescription = forwardRef<HTMLParagraphElement, PageShellDescriptionProps>(\n ({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"page-shell-description\"\n className={cn(\"mt-1 text-sm text-muted-foreground\", className)}\n {...props}\n />\n ),\n)\nPageShellDescription.displayName = \"PageShellDescription\"\n\nexport interface PageShellHeaderEndProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const PageShellHeaderEnd = forwardRef<HTMLDivElement, PageShellHeaderEndProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-header-end\"\n className={cn(\"flex max-w-full shrink-0 flex-col flex-wrap items-end gap-2\", className)}\n {...props}\n />\n ),\n)\nPageShellHeaderEnd.displayName = \"PageShellHeaderEnd\"\n\nexport interface PageShellMetaProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const PageShellMeta = forwardRef<HTMLDivElement, PageShellMetaProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-meta\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n ),\n)\nPageShellMeta.displayName = \"PageShellMeta\"\n\nexport interface PageShellActionsProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const PageShellActions = forwardRef<HTMLDivElement, PageShellActionsProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-actions\"\n className={cn(\"flex items-center gap-2\", className)}\n {...props}\n />\n ),\n)\nPageShellActions.displayName = \"PageShellActions\"\n\nexport interface PageShellSummaryProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const PageShellSummary = forwardRef<HTMLDivElement, PageShellSummaryProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-summary\"\n className={cn(\n \"grid basis-full grid-cols-1 gap-3 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\n className,\n )}\n {...props}\n />\n ),\n)\nPageShellSummary.displayName = \"PageShellSummary\"\n\n/**\n * Accent colours are spelled out one utility set per colour rather than built\n * from a template string — Tailwind only emits classes it can see literally in\n * the source.\n */\nexport const pageShellSummaryCardVariants = cva(\n \"relative flex items-start gap-3 rounded-lg border bg-background px-4 py-3 text-sm [&>svg]:mt-0.5 [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n accent: {\n default: \"text-card-foreground\",\n accent:\n \"border-[var(--chart-1)]/30 bg-linear-to-r from-[var(--chart-1)]/5 to-[var(--chart-1)]/5 [&>svg]:text-[var(--chart-1)]\",\n amber:\n \"border-amber-300 bg-amber-50 [&>svg]:text-amber-600 dark:border-amber-800 dark:bg-amber-950/50 dark:[&>svg]:text-amber-400\",\n blue: \"border-blue-300 bg-blue-50 [&>svg]:text-blue-600 dark:border-blue-800 dark:bg-blue-950/50 dark:[&>svg]:text-blue-400\",\n emerald:\n \"border-emerald-300 bg-emerald-50 [&>svg]:text-emerald-600 dark:border-emerald-800 dark:bg-emerald-950/50 dark:[&>svg]:text-emerald-400\",\n red: \"border-red-300 bg-red-50 [&>svg]:text-red-600 dark:border-red-800 dark:bg-red-950/50 dark:[&>svg]:text-red-400\",\n violet:\n \"border-violet-300 bg-violet-50 [&>svg]:text-violet-600 dark:border-violet-800 dark:bg-violet-950/50 dark:[&>svg]:text-violet-400\",\n orange:\n \"border-orange-300 bg-orange-50 [&>svg]:text-orange-600 dark:border-orange-800 dark:bg-orange-950/50 dark:[&>svg]:text-orange-400\",\n cyan: \"border-cyan-300 bg-cyan-50 [&>svg]:text-cyan-600 dark:border-cyan-800 dark:bg-cyan-950/50 dark:[&>svg]:text-cyan-400\",\n slate:\n \"border-slate-300 bg-slate-50 [&>svg]:text-slate-600 dark:border-slate-800 dark:bg-slate-950/50 dark:[&>svg]:text-slate-400\",\n green:\n \"border-green-300 bg-green-50 [&>svg]:text-green-600 dark:border-green-800 dark:bg-green-950/50 dark:[&>svg]:text-green-400\",\n teal: \"border-teal-300 bg-teal-50 [&>svg]:text-teal-600 dark:border-teal-800 dark:bg-teal-950/50 dark:[&>svg]:text-teal-400\",\n sky: \"border-sky-300 bg-sky-50 [&>svg]:text-sky-600 dark:border-sky-800 dark:bg-sky-950/50 dark:[&>svg]:text-sky-400\",\n indigo:\n \"border-indigo-300 bg-indigo-50 [&>svg]:text-indigo-600 dark:border-indigo-800 dark:bg-indigo-950/50 dark:[&>svg]:text-indigo-400\",\n purple:\n \"border-purple-300 bg-purple-50 [&>svg]:text-purple-600 dark:border-purple-800 dark:bg-purple-950/50 dark:[&>svg]:text-purple-400\",\n pink: \"border-pink-300 bg-pink-50 [&>svg]:text-pink-600 dark:border-pink-800 dark:bg-pink-950/50 dark:[&>svg]:text-pink-400\",\n rose: \"border-rose-300 bg-rose-50 [&>svg]:text-rose-600 dark:border-rose-800 dark:bg-rose-950/50 dark:[&>svg]:text-rose-400\",\n yellow:\n \"border-yellow-300 bg-yellow-50 [&>svg]:text-yellow-600 dark:border-yellow-800 dark:bg-yellow-950/50 dark:[&>svg]:text-yellow-400\",\n lime: \"border-lime-300 bg-lime-50 [&>svg]:text-lime-600 dark:border-lime-800 dark:bg-lime-950/50 dark:[&>svg]:text-lime-400\",\n gray: \"border-gray-300 bg-gray-50 [&>svg]:text-gray-600 dark:border-gray-800 dark:bg-gray-950/50 dark:[&>svg]:text-gray-400\",\n zinc: \"border-zinc-300 bg-zinc-50 [&>svg]:text-zinc-600 dark:border-zinc-800 dark:bg-zinc-950/50 dark:[&>svg]:text-zinc-400\",\n neutral:\n \"border-neutral-300 bg-neutral-50 [&>svg]:text-neutral-600 dark:border-neutral-800 dark:bg-neutral-950/50 dark:[&>svg]:text-neutral-400\",\n stone:\n \"border-stone-300 bg-stone-50 [&>svg]:text-stone-600 dark:border-stone-800 dark:bg-stone-950/50 dark:[&>svg]:text-stone-400\",\n fuchsia:\n \"border-fuchsia-300 bg-fuchsia-50 [&>svg]:text-fuchsia-600 dark:border-fuchsia-800 dark:bg-fuchsia-950/50 dark:[&>svg]:text-fuchsia-400\",\n },\n },\n defaultVariants: {\n accent: \"default\",\n },\n },\n)\n\nexport interface PageShellSummaryCardProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof pageShellSummaryCardVariants> {}\n\nexport const PageShellSummaryCard = forwardRef<HTMLDivElement, PageShellSummaryCardProps>(\n ({ className, accent, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-summary-card\"\n className={cn(pageShellSummaryCardVariants({ accent }), className)}\n {...props}\n />\n ),\n)\nPageShellSummaryCard.displayName = \"PageShellSummaryCard\"\n\nexport interface PageShellContentProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const PageShellContent = forwardRef<HTMLDivElement, PageShellContentProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-content\"\n className={cn(\"flex-1 p-6\", className)}\n {...props}\n />\n ),\n)\nPageShellContent.displayName = \"PageShellContent\"\n","/**\n * AppShell — the outermost application frame. `variant=\"sidebar\"` (default)\n * renders a collapsible sidebar with nested nav groups; `variant=\"header\"`\n * collapses the same nav into a single select in a top bar.\n *\n * Navigation is router-agnostic: pass `linkComponent` to render links with your\n * router's Link, or leave it and `onNavigate` handles the header variant.\n */\nimport { forwardRef, type ElementType, type ReactNode } from \"react\"\nimport { ChevronRight } from \"lucide-react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../ui/collapsible\"\nimport { Separator } from \"../ui/separator\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\"\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n} from \"../ui/sidebar\"\nimport type { NavGroup, NavItem } from \"./types\"\n\nexport interface AppShellSidebarProps {\n variant?: \"sidebar\"\n groups: NavGroup[]\n actions?: ReactNode\n header?: ReactNode\n children: ReactNode\n defaultOpen?: boolean\n className?: string\n linkComponent?: ElementType\n onNavigate?: (href: string) => void\n}\n\nexport interface AppShellHeaderProps {\n variant: \"header\"\n groups: NavGroup[]\n actions?: ReactNode\n header?: ReactNode\n children: ReactNode\n className?: string\n linkComponent?: ElementType\n onNavigate?: (href: string) => void\n}\n\nexport type AppShellProps = AppShellSidebarProps | AppShellHeaderProps\n\n/** Nested groups collapse to their leaves — the select is a flat list. */\nfunction flattenItems(item: NavItem): NavItem[] {\n if (item.children && item.children.length > 0) {\n return item.children.flatMap(flattenItems)\n }\n return [item]\n}\n\nfunction NavSelect({\n groups,\n onNavigate,\n}: {\n groups: NavGroup[]\n onNavigate: (href: string) => void\n}) {\n const allItems = groups.flatMap((g) => g.items.flatMap(flattenItems))\n const currentValue = allItems.find((item) => item.isActive)?.href ?? \"\"\n\n return (\n <Select\n value={currentValue}\n onValueChange={(href) => {\n // Base UI reports `null` when the selection is cleared; there is no\n // page to navigate to in that case.\n if (href !== null) onNavigate(href)\n }}\n >\n <SelectTrigger size=\"sm\" className=\"w-48\">\n <SelectValue placeholder=\"ページを選択\" />\n </SelectTrigger>\n {/*\n Page titles are author-written and often longer than the 12rem trigger,\n so the list is allowed to grow past the anchor width (bounded by the\n viewport) instead of clamping every title to the trigger's width.\n */}\n <SelectContent\n align=\"start\"\n className=\"w-auto min-w-(--anchor-width) max-w-[min(24rem,var(--available-width))]\"\n >\n {groups.map((group, index) => (\n <SelectGroup key={group.label ?? index}>\n {group.label && <SelectLabel>{group.label}</SelectLabel>}\n {group.items.flatMap(flattenItems).map((item) => (\n <SelectItem key={item.href} value={item.href} disabled={item.disabled}>\n {item.label}\n </SelectItem>\n ))}\n </SelectGroup>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction NavItemWithChildren({\n item,\n linkComponent: LinkComponent = \"a\",\n}: {\n item: NavItem\n linkComponent?: ElementType\n}) {\n return (\n <Collapsible\n defaultOpen={item.isActive}\n className=\"group/collapsible\"\n render={<SidebarMenuItem />}\n >\n <CollapsibleTrigger\n render={\n <SidebarMenuButton\n tooltip={item.label}\n aria-disabled={item.disabled}\n className={cn(item.disabled && \"pointer-events-none\")}\n />\n }\n >\n {item.icon && <item.icon />}\n <span>{item.label}</span>\n <ChevronRight className=\"ml-auto transition-transform duration-200 group-data-open/collapsible:rotate-90\" />\n </CollapsibleTrigger>\n {item.badge && <SidebarMenuBadge>{item.badge}</SidebarMenuBadge>}\n <CollapsibleContent>\n <SidebarMenuSub>\n {item.children!.map((child) => (\n <SidebarMenuSubItem key={child.href}>\n <SidebarMenuSubButton\n isActive={child.isActive}\n render={\n <LinkComponent\n href={child.href}\n aria-disabled={child.disabled}\n tabIndex={child.disabled ? -1 : undefined}\n className={cn(child.disabled && \"pointer-events-none opacity-50\")}\n />\n }\n >\n {child.icon && <child.icon />}\n <span>{child.label}</span>\n </SidebarMenuSubButton>\n </SidebarMenuSubItem>\n ))}\n </SidebarMenuSub>\n </CollapsibleContent>\n </Collapsible>\n )\n}\n\nfunction NavItemLink({\n item,\n linkComponent: LinkComponent = \"a\",\n}: {\n item: NavItem\n linkComponent?: ElementType\n}) {\n return (\n <SidebarMenuItem>\n <SidebarMenuButton\n tooltip={item.label}\n isActive={item.isActive}\n render={\n <LinkComponent\n href={item.href}\n aria-disabled={item.disabled}\n tabIndex={item.disabled ? -1 : undefined}\n className={cn(item.disabled && \"pointer-events-none\")}\n />\n }\n >\n {item.icon && <item.icon />}\n <span>{item.label}</span>\n </SidebarMenuButton>\n {item.badge && <SidebarMenuBadge>{item.badge}</SidebarMenuBadge>}\n </SidebarMenuItem>\n )\n}\n\nconst defaultNavigate = (href: string) => {\n window.location.assign(href)\n}\n\nexport const AppShell = forwardRef<HTMLDivElement, AppShellProps>((props, ref) => {\n const {\n variant = \"sidebar\",\n groups,\n actions,\n header,\n children,\n className,\n linkComponent,\n onNavigate = defaultNavigate,\n } = props\n\n if (variant === \"header\") {\n return (\n <div ref={ref} data-slot=\"app-shell\" className={cn(\"flex h-full flex-col\", className)}>\n {header !== undefined ? (\n header\n ) : (\n <header className=\"flex h-14 shrink-0 items-center gap-3 border-b px-4\">\n {groups.length > 0 && <NavSelect groups={groups} onNavigate={onNavigate} />}\n {actions && <div className=\"ml-auto flex items-center gap-2\">{actions}</div>}\n </header>\n )}\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </div>\n )\n }\n\n const { defaultOpen = true } = props as AppShellSidebarProps\n\n return (\n <SidebarProvider defaultOpen={defaultOpen}>\n <Sidebar data-slot=\"app-sidebar\" collapsible=\"offcanvas\">\n <SidebarContent>\n {groups.map((group, index) => (\n <SidebarGroup key={group.label ?? index}>\n {group.label && <SidebarGroupLabel>{group.label}</SidebarGroupLabel>}\n <SidebarMenu>\n {group.items.map((item) =>\n item.children && item.children.length > 0 ? (\n <NavItemWithChildren\n key={item.href}\n item={item}\n linkComponent={linkComponent}\n />\n ) : (\n <NavItemLink key={item.href} item={item} linkComponent={linkComponent} />\n ),\n )}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n </SidebarContent>\n {actions && <SidebarFooter>{actions}</SidebarFooter>}\n <SidebarRail />\n </Sidebar>\n <SidebarInset ref={ref} data-slot=\"app-shell\" className={className}>\n {header !== undefined ? (\n header\n ) : (\n <header className=\"flex h-14 shrink-0 items-center gap-2 border-b px-4\">\n <SidebarTrigger />\n <Separator orientation=\"vertical\" className=\"h-4\" />\n </header>\n )}\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </SidebarInset>\n </SidebarProvider>\n )\n})\nAppShell.displayName = \"AppShell\"\n","/**\n * SectionHeader — a titled divider inside a page: heading, optional\n * description, and right-aligned actions that wrap below on narrow screens.\n */\nimport { forwardRef, type ReactNode } from \"react\"\n\nimport { cn } from \"../ui/cn\"\n\nconst headingStyles = {\n h1: \"text-3xl font-bold tracking-tight\",\n h2: \"text-2xl font-semibold tracking-tight\",\n h3: \"text-xl font-semibold\",\n h4: \"text-lg font-semibold\",\n} as const\n\nexport interface SectionHeaderProps {\n title: string\n description?: string\n actions?: ReactNode\n className?: string\n as?: keyof typeof headingStyles\n}\n\nexport const SectionHeader = forwardRef<HTMLDivElement, SectionHeaderProps>(\n ({ title, description, actions, className, as: Comp = \"h2\" }, ref) => (\n <div\n ref={ref}\n data-slot=\"section-header\"\n className={cn(\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\", className)}\n >\n <div>\n <Comp className={headingStyles[Comp]}>{title}</Comp>\n {description && <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>}\n </div>\n {actions && <div className=\"shrink-0\">{actions}</div>}\n </div>\n ),\n)\nSectionHeader.displayName = \"SectionHeader\"\n","/**\n * DashboardCard — the tighter card used for dashboard tiles: smaller padding\n * than the plain `Card`, a title/description/action header, and a matching\n * skeleton for the loading state. `DashboardCardPreset` wires the common\n * arrangement in one prop-driven component.\n */\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Skeleton } from \"../ui/skeleton\"\n\nexport interface DashboardCardProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const DashboardCard = forwardRef<HTMLDivElement, DashboardCardProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"dashboard-card\"\n className={cn(\n \"group rounded-lg border bg-card px-1 py-1 text-card-foreground\",\n className,\n )}\n {...props}\n />\n ),\n)\nDashboardCard.displayName = \"DashboardCard\"\n\nexport interface DashboardCardHeaderProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const DashboardCardHeader = forwardRef<HTMLDivElement, DashboardCardHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"dashboard-card-header\"\n className={cn(\"flex flex-row items-start justify-between gap-4 px-3 py-3\", className)}\n {...props}\n />\n ),\n)\nDashboardCardHeader.displayName = \"DashboardCardHeader\"\n\nexport interface DashboardCardTitleProps extends HTMLAttributes<HTMLHeadingElement> {}\n\nexport const DashboardCardTitle = forwardRef<HTMLHeadingElement, DashboardCardTitleProps>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n data-slot=\"dashboard-card-title\"\n className={cn(\"text-sm leading-none font-semibold tracking-tight\", className)}\n {...props}\n />\n ),\n)\nDashboardCardTitle.displayName = \"DashboardCardTitle\"\n\nexport interface DashboardCardDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {}\n\nexport const DashboardCardDescription = forwardRef<\n HTMLParagraphElement,\n DashboardCardDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"dashboard-card-description\"\n className={cn(\"text-xs text-muted-foreground\", className)}\n {...props}\n />\n))\nDashboardCardDescription.displayName = \"DashboardCardDescription\"\n\nexport interface DashboardCardActionProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const DashboardCardAction = forwardRef<HTMLDivElement, DashboardCardActionProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"dashboard-card-action\"\n className={cn(\"ml-auto shrink-0\", className)}\n {...props}\n />\n ),\n)\nDashboardCardAction.displayName = \"DashboardCardAction\"\n\nexport interface DashboardCardContentProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const DashboardCardContent = forwardRef<HTMLDivElement, DashboardCardContentProps>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"dashboard-card-content\" className={cn(\"p-3\", className)} {...props} />\n ),\n)\nDashboardCardContent.displayName = \"DashboardCardContent\"\n\nexport interface DashboardCardFooterProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const DashboardCardFooter = forwardRef<HTMLDivElement, DashboardCardFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"dashboard-card-footer\"\n className={cn(\"flex items-center px-3 py-1.5\", className)}\n {...props}\n />\n ),\n)\nDashboardCardFooter.displayName = \"DashboardCardFooter\"\n\nexport interface DashboardCardSkeletonProps {\n className?: string\n}\n\nexport function DashboardCardSkeleton({ className }: DashboardCardSkeletonProps) {\n return (\n <div\n data-slot=\"dashboard-card-skeleton\"\n className={cn(\"rounded-lg border bg-card p-6 shadow-sm\", className)}\n >\n <div className=\"flex items-start justify-between gap-4 pb-4\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-8 w-8 rounded-md\" />\n </div>\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"mt-2 h-4 w-3/4\" />\n </div>\n )\n}\n\nexport interface DashboardCardPresetProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: ReactNode\n description?: ReactNode\n actions?: ReactNode\n footer?: ReactNode\n headerClassName?: string\n contentClassName?: string\n footerClassName?: string\n}\n\nexport function DashboardCardPreset({\n title,\n description,\n actions,\n footer,\n children,\n headerClassName,\n contentClassName,\n footerClassName,\n className,\n ...props\n}: DashboardCardPresetProps) {\n const hasHeader = title || description || actions\n return (\n <DashboardCard className={className} {...props}>\n {hasHeader && (\n <DashboardCardHeader className={headerClassName}>\n {(title || description) && (\n <div>\n {title && <DashboardCardTitle>{title}</DashboardCardTitle>}\n {description && <DashboardCardDescription>{description}</DashboardCardDescription>}\n </div>\n )}\n {actions && <DashboardCardAction>{actions}</DashboardCardAction>}\n </DashboardCardHeader>\n )}\n {children && (\n <DashboardCardContent className={contentClassName}>{children}</DashboardCardContent>\n )}\n {footer && <DashboardCardFooter className={footerClassName}>{footer}</DashboardCardFooter>}\n </DashboardCard>\n )\n}\n","/**\n * Chart theming — reads the design tokens off the document and turns them into\n * an ECharts theme object.\n *\n * Canvas can't resolve CSS variables *while painting*, which is why series\n * colours can't just be `var(--chart-1)`. It can resolve them once, up front:\n * `getComputedStyle` returns the substituted value, and that value is handed to\n * `echarts.init` as a theme. Every colour is normalized to `rgb()`/`#rrggbb`\n * first — zrender's own colour parser only understands hex/`rgb()`/`hsl()`.\n * Canvas still paints an `oklch()` series, but every colour zrender derives from\n * it comes out empty: the hover emphasis lifts the fill, can't parse it, and the\n * hovered bar disappears. A `fillStyle` round-trip is not enough on its own —\n * current Chrome serializes `oklch()` back as `oklch()` — so a colour that comes\n * back in any other form is painted onto the canvas and read back as a pixel.\n */\nimport { useEffect, useState } from \"react\"\n\n/** Series palette, in order. Missing tokens are skipped, not defaulted. */\nconst SERIES_TOKENS = [\"--chart-1\", \"--chart-2\", \"--chart-3\", \"--chart-4\", \"--chart-5\"] as const\n\nexport interface ChartTokens {\n /** Resolved `--chart-1..5`, in order. */\n series: string[]\n /** Body text: titles and the default `textStyle`. */\n foreground: string | null\n /** Secondary text: axis labels, legend, subtitles. */\n mutedForeground: string | null\n /** Axis lines, ticks, split lines, tooltip border. */\n border: string | null\n /** Tooltip surface. */\n popover: string | null\n /** Tooltip text. */\n popoverForeground: string | null\n}\n\nlet normalizeContext: CanvasRenderingContext2D | null | undefined\n\n/** The forms `fillStyle` serializes legacy colours to, and zrender can parse. */\nconst ZRENDER_COLOR_RE = /^(?:#[0-9a-f]{6}|rgba?\\()/i\n\n/**\n * Serialize a CSS colour into a canvas-safe form, or `null` if the browser\n * rejects it. Assigning an invalid value to `fillStyle` is a no-op, so the same\n * input is written over two different known colours: agreeing results mean the\n * value parsed, differing ones mean it was dropped.\n */\nfunction toCanvasColor(value: string): string | null {\n const raw = value.trim()\n if (!raw) return null\n if (normalizeContext === undefined) {\n const canvas = document.createElement(\"canvas\")\n canvas.width = 1\n canvas.height = 1\n normalizeContext = canvas.getContext(\"2d\", { willReadFrequently: true })\n }\n const ctx = normalizeContext\n if (!ctx) return raw\n ctx.fillStyle = \"#000000\"\n ctx.fillStyle = raw\n const onBlack = ctx.fillStyle\n ctx.fillStyle = \"#ffffff\"\n ctx.fillStyle = raw\n if (onBlack !== ctx.fillStyle || typeof onBlack !== \"string\") return null\n if (ZRENDER_COLOR_RE.test(onBlack)) return onBlack\n // Still `oklch()` / `lab()` / `color(...)`: paint it and read the pixel back.\n // Wide-gamut colours clip to sRGB, which is all zrender can express anyway.\n ctx.clearRect(0, 0, 1, 1)\n ctx.fillRect(0, 0, 1, 1)\n const [r = 0, g = 0, b = 0, a = 0] = ctx.getImageData(0, 0, 1, 1).data\n return a === 255\n ? `rgb(${r}, ${g}, ${b})`\n : `rgba(${r}, ${g}, ${b}, ${Math.round((a / 255) * 1000) / 1000})`\n}\n\n/**\n * Read the chart tokens off `el` (the document root by default — tokens live on\n * `:root` and inherit). Returns `null` outside the browser so callers fall back\n * to plain ECharts defaults.\n */\nexport function readChartTokens(el?: Element | null): ChartTokens | null {\n if (typeof document === \"undefined\") return null\n const target = el ?? document.documentElement\n if (!target) return null\n const styles = getComputedStyle(target)\n const read = (name: string) => toCanvasColor(styles.getPropertyValue(name))\n const series: string[] = []\n for (const token of SERIES_TOKENS) {\n const color = read(token)\n if (color) series.push(color)\n }\n return {\n series,\n foreground: read(\"--foreground\"),\n mutedForeground: read(\"--muted-foreground\"),\n border: read(\"--border\"),\n popover: read(\"--popover\"),\n popoverForeground: read(\"--popover-foreground\"),\n }\n}\n\n/** Structural equality, so a theme toggle that changes nothing doesn't re-init. */\nexport function sameChartTokens(a: ChartTokens | null, b: ChartTokens | null): boolean {\n if (a === b) return true\n if (!a || !b) return false\n return (\n a.series.length === b.series.length &&\n a.series.every((color, i) => color === b.series[i]) &&\n a.foreground === b.foreground &&\n a.mutedForeground === b.mutedForeground &&\n a.border === b.border &&\n a.popover === b.popover &&\n a.popoverForeground === b.popoverForeground\n )\n}\n\n/**\n * Watch everything that can change the resolved tokens and call `onChange` when\n * something might have. It only ever says \"re-read\" — the caller compares with\n * `sameChartTokens` and decides whether anything actually moved. Returns a\n * disposer.\n *\n * Two sources, not one:\n * - light/dark flips, which land as `class` / `data-theme` (or an inline\n * `style`) on `<html>`/`<body>`, or as an OS preference change\n * - stylesheet changes. In dev, editing `styles.css` rewrites the injected\n * `<style>` in `<head>` and touches nothing else, so watching the theme\n * attributes alone leaves the chart painted in the previous palette until a\n * reload — the tokens in the DOM are new, the canvas is not.\n */\nexport function watchChartTokens(onChange: () => void): () => void {\n if (typeof document === \"undefined\") return () => {}\n // Style edits arrive as bursts of mutations; coalesce them into one read, and\n // take it after the next frame so a swapped stylesheet has been applied.\n let frame = 0\n const schedule = () => {\n if (frame) return\n frame = requestAnimationFrame(() => {\n frame = 0\n onChange()\n })\n }\n\n const themeObserver = new MutationObserver(schedule)\n const attributeFilter = [\"class\", \"style\", \"data-theme\"]\n themeObserver.observe(document.documentElement, { attributes: true, attributeFilter })\n if (document.body) themeObserver.observe(document.body, { attributes: true, attributeFilter })\n\n const styleObserver = new MutationObserver(schedule)\n if (document.head) {\n styleObserver.observe(document.head, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: [\"href\", \"media\", \"disabled\"],\n })\n }\n\n // A swapped `<link>` only applies once the sheet has loaded, after its mutation.\n const onLoad = (event: Event) => {\n if (event.target instanceof HTMLLinkElement) schedule()\n }\n document.addEventListener(\"load\", onLoad, true)\n\n const media = window.matchMedia(\"(prefers-color-scheme: dark)\")\n media.addEventListener(\"change\", schedule)\n\n return () => {\n if (frame) cancelAnimationFrame(frame)\n themeObserver.disconnect()\n styleObserver.disconnect()\n document.removeEventListener(\"load\", onLoad, true)\n media.removeEventListener(\"change\", schedule)\n }\n}\n\n/** Shared shape for the four axis types ECharts themes address separately. */\nfunction axisTheme(tokens: ChartTokens, splitLine: boolean) {\n const line = tokens.border ?? undefined\n return {\n axisLine: { show: true, lineStyle: { color: line } },\n axisTick: { show: true, lineStyle: { color: line } },\n axisLabel: { show: true, color: tokens.mutedForeground ?? undefined },\n splitLine: { show: splitLine, lineStyle: { color: line ? [line] : undefined } },\n splitArea: { show: false },\n }\n}\n\n/**\n * Build the ECharts theme. `option.color` still wins over `theme.color`, so an\n * app that sets its own palette keeps it.\n */\nexport function buildChartTheme(tokens: ChartTokens): Record<string, unknown> {\n const text = tokens.foreground ?? undefined\n const muted = tokens.mutedForeground ?? undefined\n const line = tokens.border ?? undefined\n return {\n // Let the page background show through: charts sit on cards, not on a canvas.\n backgroundColor: \"transparent\",\n ...(tokens.series.length > 0 ? { color: tokens.series } : {}),\n textStyle: { color: text },\n title: { textStyle: { color: text }, subtextStyle: { color: muted } },\n legend: { textStyle: { color: muted } },\n categoryAxis: axisTheme(tokens, false),\n valueAxis: axisTheme(tokens, true),\n logAxis: axisTheme(tokens, true),\n timeAxis: axisTheme(tokens, true),\n tooltip: {\n backgroundColor: tokens.popover ?? undefined,\n borderColor: line,\n borderWidth: 1,\n textStyle: { color: tokens.popoverForeground ?? undefined },\n axisPointer: { lineStyle: { color: line }, crossStyle: { color: line } },\n },\n }\n}\n\n/**\n * The resolved tokens, kept current: re-read whenever `watchChartTokens` says\n * they may have moved, and only replaced when a value actually changed. For\n * components that build an ECharts option from token colours themselves (the\n * typed charts), so their palette follows light/dark like `EChart`'s theme.\n */\nexport function useChartTokens(): ChartTokens | null {\n const [tokens, setTokens] = useState<ChartTokens | null>(() => readChartTokens())\n useEffect(() => {\n const sync = () => {\n setTokens((prev) => {\n const next = readChartTokens()\n return sameChartTokens(prev, next) ? prev : next\n })\n }\n sync()\n return watchChartTokens(sync)\n }, [])\n return tokens\n}\n\nconst SERIES_TOKEN_NAME_RE = /^chart-([1-5])$/\nconst CSS_VAR_RE = /^var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*(.+))?\\)$/\n\n/**\n * Turn chart colours into canvas-safe strings. `\"chart-1\"`〜`\"chart-5\"` come from\n * the resolved series tokens; `var(--token)` is read off the document root; any\n * other CSS colour is normalized like the tokens are. A colour that can't be\n * resolved comes back as `\"\"`, which ECharts treats as \"use the palette\".\n */\nexport function resolveChartColors(colors: readonly string[], tokens: ChartTokens | null): string[] {\n return colors.map((color) => {\n const token = SERIES_TOKEN_NAME_RE.exec(color.trim())\n if (token) return tokens?.series[Number(token[1]) - 1] ?? \"\"\n if (typeof document === \"undefined\") return color\n let value = color.trim()\n const cssVar = CSS_VAR_RE.exec(value)\n if (cssVar) {\n const styles = getComputedStyle(document.documentElement)\n value = styles.getPropertyValue(cssVar[1]!).trim() || (cssVar[2] ?? \"\").trim()\n }\n return toCanvasColor(value) ?? \"\"\n })\n}\n","/**\n * EChart — a thin Apache ECharts wrapper. It owns the canvas lifecycle (init,\n * resize, dispose), forwards `option` and event handlers, drives the loading\n * spinner, and can copy/download the chart as a PNG.\n *\n * Colours follow the design tokens: `--chart-1..5` become the series palette,\n * and the text/border/popover tokens style axes, legend and tooltip. They're\n * resolved once at init (see `chart-theme.ts`) and re-read whenever they can\n * have changed — a light/dark flip, or a stylesheet swap such as editing\n * `styles.css` while the dev server is running. `theme` opts out entirely;\n * `option.color` overrides just the palette and keeps the rest.\n */\nimport { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport * as echarts from \"echarts\"\nimport type { ECharts, EChartsOption } from \"echarts\"\nimport { Check, Copy, Download } from \"lucide-react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Button } from \"../ui/button\"\nimport {\n buildChartTheme,\n readChartTokens,\n sameChartTokens,\n watchChartTokens,\n type ChartTokens,\n} from \"./chart-theme\"\n\nexport interface EChartProps {\n /**\n * ECharts のオプション。\n *\n * 型推論を効かせるため、必ず `EChartsOption` を annotation するか\n * `satisfies EChartsOption` を付けること。付けないと `type: \"category\"` などの\n * literal が `string` に拡張され、ビルドが失敗する。\n *\n * @example\n * import type { EChartsOption } from \"@squadbase/vantage/components\"\n *\n * const option: EChartsOption = {\n * xAxis: { type: \"category\", data: [\"A\", \"B\"] },\n * yAxis: { type: \"value\" },\n * series: [{ type: \"bar\", data: [1, 2] }],\n * }\n * <EChart option={option} />\n */\n option: EChartsOption\n /**\n * チャートの高さ。数値は px、文字列は CSS 値(例: `\"50vh\"`)として扱う。\n *\n * 省略した場合は外側ラッパーに `h-[400px]` がデフォルトで当たるが、`className` に\n * `h-full` や `h-[360px]` などの高さクラスを渡せばそちらが優先される\n * (`h-full` を使う場合は親要素に確定した高さが必要)。\n * `height` と `className` の高さを両方指定した場合は `height`(インライン style)が勝つ。\n */\n height?: string | number\n loading?: boolean\n /**\n * `echarts.init` にそのまま渡すテーマ(名前または登録済みテーマオブジェクト)。\n *\n * 渡すとデザイントークン追従は**完全に無効**になり、明暗の切り替えにも追従しなく\n * なる。系列色だけ変えたいなら `option.color` を使う ― option はテーマより優先\n * されるので、軸・凡例・ツールチップのトークン追従は残る。\n */\n theme?: string | object\n onEvents?: Record<string, (params: unknown) => void>\n ariaLabel?: string\n className?: string\n /** true にするとチャート右上に PNG コピー / ダウンロードボタンを表示する */\n actions?: boolean\n /** ダウンロード時のファイル名(拡張子含む)。省略時は \"chart.png\" */\n fileName?: string\n}\n\ntype EChartsEventHandler = (params: unknown) => void\n\nexport const EChart = forwardRef<HTMLDivElement, EChartProps>(function EChart(\n {\n option,\n height,\n loading = false,\n theme,\n onEvents,\n ariaLabel,\n className,\n actions = false,\n fileName = \"chart.png\",\n },\n ref,\n) {\n const containerRef = useRef<HTMLDivElement | null>(null)\n const [instance, setInstance] = useState<ECharts | null>(null)\n const [copied, setCopied] = useState(false)\n // 初回はレンダー前に読めるので、マウント直後の作り直しが起きない\n const [tokens, setTokens] = useState<ChartTokens | null>(() => readChartTokens())\n\n // 明暗の切り替えとスタイルシートの差し替え(dev で styles.css を書き換えたときなど)を\n // 拾ってトークンを読み直す ― 何を見張るかは `watchChartTokens` 側が持つ。値が変わら\n // ないときは同じオブジェクトを返して再 init を防ぐ。\n useEffect(() => {\n if (theme !== undefined) return\n const sync = () => {\n setTokens((prev) => {\n const next = readChartTokens()\n return sameChartTokens(prev, next) ? prev : next\n })\n }\n sync()\n return watchChartTokens(sync)\n }, [theme])\n\n const autoTheme = useMemo(() => (tokens ? buildChartTheme(tokens) : undefined), [tokens])\n const resolvedTheme = theme ?? autoTheme\n\n // init / re-init: ECharts はテーマの差し替えに対応しないので、テーマが変わったら\n // インスタンスを破棄して作り直す(トークンが実際に変わったときだけここに来る)\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n const inst = echarts.init(container, resolvedTheme, { renderer: \"canvas\" })\n // `data-rendering` stays on until the (animated) paint is done, so anything\n // capturing the page — printing a document — can wait for real pixels.\n container.dataset.rendering = \"\"\n inst.on(\"finished\", () => {\n delete container.dataset.rendering\n })\n setInstance(inst)\n\n const observer = new ResizeObserver(() => inst.resize())\n observer.observe(container)\n\n return () => {\n observer.disconnect()\n inst.dispose()\n }\n }, [resolvedTheme])\n\n useEffect(() => {\n if (!instance) return\n if (containerRef.current) containerRef.current.dataset.rendering = \"\"\n instance.setOption(option, { notMerge: true, lazyUpdate: true })\n }, [instance, option])\n\n useEffect(() => {\n if (!instance) return\n if (loading) instance.showLoading()\n else instance.hideLoading()\n }, [instance, loading])\n\n useEffect(() => {\n if (!instance || !onEvents) return\n const entries = Object.entries(onEvents)\n for (const [event, handler] of entries) {\n instance.on(event, handler as EChartsEventHandler)\n }\n return () => {\n if (instance.isDisposed()) return\n for (const [event, handler] of entries) {\n instance.off(event, handler as EChartsEventHandler)\n }\n }\n }, [instance, onEvents])\n\n const getPngDataUrl = useCallback(() => {\n if (!instance) return null\n // Export over the page background so the PNG isn't transparent. Computed\n // styles resolve to rgb(a), so this stays canvas-safe whatever the token.\n const pageBg = getComputedStyle(document.documentElement).backgroundColor\n return instance.getDataURL({\n type: \"png\",\n pixelRatio: 2,\n backgroundColor: pageBg && pageBg !== \"rgba(0, 0, 0, 0)\" ? pageBg : \"#ffffff\",\n })\n }, [instance])\n\n const handleCopy = useCallback(async () => {\n const dataUrl = getPngDataUrl()\n if (!dataUrl) return\n try {\n const blob = await (await fetch(dataUrl)).blob()\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": blob })])\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // ClipboardItem 未対応ブラウザでは silent fail\n }\n }, [getPngDataUrl])\n\n const handleDownload = useCallback(() => {\n const dataUrl = getPngDataUrl()\n if (!dataUrl) return\n const link = document.createElement(\"a\")\n link.href = dataUrl\n link.download = fileName\n link.click()\n }, [getPngDataUrl, fileName])\n\n // 高さの解決: height prop を渡した場合はインライン style が勝つ。未指定なら\n // h-[400px] をデフォルトで当て、className の高さクラスに後勝ちさせる。\n const styleHeight =\n height == null ? undefined : typeof height === \"number\" ? `${height}px` : height\n\n return (\n <div\n ref={ref}\n data-slot=\"echart\"\n className={cn(\"group relative w-full\", height == null && \"h-[400px]\", className)}\n style={styleHeight != null ? { height: styleHeight } : undefined}\n role=\"img\"\n aria-label={ariaLabel ?? \"チャート\"}\n >\n <div ref={containerRef} data-slot=\"echart-canvas\" className=\"h-full w-full\" />\n {actions && (\n <div\n data-slot=\"echart-actions\"\n className=\"absolute top-2 right-2 z-10 flex gap-1 opacity-0 transition-opacity group-hover:opacity-100 focus-within:opacity-100\"\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleCopy}\n aria-label={copied ? \"コピーしました\" : \"PNG をクリップボードにコピー\"}\n >\n {copied ? <Check className=\"size-4\" /> : <Copy className=\"size-4\" />}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={handleDownload}\n aria-label=\"PNG をダウンロード\"\n >\n <Download className=\"size-4\" />\n </Button>\n </div>\n )}\n </div>\n )\n})\nEChart.displayName = \"EChart\"\n\nexport type { EChartsOption } from \"echarts\"\n","/**\n * Chart helpers shared by the typed charts — colour tokens, number handling and\n * the layout maths of the Tailwind/SVG charts (BarList, CategoryBar,\n * ProgressCircle, Tracker). Pure and DOM-free, so it can be unit-tested; kept\n * internal and inlined into each `vantage add ui` copy.\n */\nimport type { ChartColor, ValueFormatter } from \"./types\"\n\n/** The series tokens, in palette order — the default `colors` of every typed chart. */\nexport const DEFAULT_CHART_COLORS: readonly ChartColor[] = [\n \"chart-1\",\n \"chart-2\",\n \"chart-3\",\n \"chart-4\",\n \"chart-5\",\n]\n\nconst TOKEN_NAME_RE = /^chart-[1-5]$/\n\n/**\n * A chart colour as a CSS value: `\"chart-2\"` → `var(--chart-2)` (so it follows\n * light/dark on its own), anything else passes through unchanged.\n */\nexport function chartColorToCss(color: ChartColor): string {\n const value = color.trim()\n return TOKEN_NAME_RE.test(value) ? `var(--${value})` : value\n}\n\n/** The `i`-th colour, cycling through `colors` (the token palette when empty). */\nexport function chartColorAt(colors: readonly ChartColor[] | undefined, i: number): ChartColor {\n const palette = colors && colors.length > 0 ? colors : DEFAULT_CHART_COLORS\n return palette[i % palette.length]!\n}\n\n/** `colors` extended (by cycling) to exactly `count` entries. */\nexport function chartColorsFor(colors: readonly ChartColor[] | undefined, count: number): ChartColor[] {\n return Array.from({ length: count }, (_, i) => chartColorAt(colors, i))\n}\n\n/** A translucent version of a CSS colour (works for `var(--…)` too). */\nexport function tintCss(cssColor: string, percent: number): string {\n return `color-mix(in oklab, ${cssColor} ${percent}%, transparent)`\n}\n\nconst numberFormat = new Intl.NumberFormat(\"ja-JP\", { maximumFractionDigits: 2 })\n\n/** Default `valueFormatter`: grouped digits, up to two decimals (`1,234.5`). */\nexport const defaultValueFormatter: ValueFormatter = (value) => numberFormat.format(value)\n\n/**\n * A data cell as a number, or `null` for a gap. Numeric strings count — SQL\n * `DECIMAL` / `BIGINT` columns usually arrive as strings.\n */\nexport function toChartNumber(value: unknown): number | null {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : null\n if (typeof value === \"bigint\") return Number(value)\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const n = Number(value)\n return Number.isFinite(n) ? n : null\n }\n return null\n}\n\n/** Clamp `value` into `[min, max]`. */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\n/* ---------------------------------------------------------------- BarList */\n\nexport type BarListSortOrder = \"ascending\" | \"descending\" | \"none\"\n\n/** Sort a copy of the rows by value; `\"none\"` keeps the given order. */\nexport function sortBarListData<T extends { value: number }>(data: readonly T[], sortOrder: BarListSortOrder): T[] {\n const rows = [...data]\n if (sortOrder === \"ascending\") rows.sort((a, b) => a.value - b.value)\n else if (sortOrder === \"descending\") rows.sort((a, b) => b.value - a.value)\n return rows\n}\n\n/** Bar widths in percent of the largest value (at least a sliver for non-zero values). */\nexport function barListWidths(values: readonly number[]): number[] {\n const max = Math.max(0, ...values)\n if (max === 0) return values.map(() => 0)\n return values.map((v) => (v <= 0 ? 0 : Math.max(1, (v / max) * 100)))\n}\n\n/* ------------------------------------------------------------ CategoryBar */\n\nexport interface CategoryBarSegment {\n /** Width in percent of the whole bar. */\n width: number\n /** Where the segment starts, in percent. */\n start: number\n /** The running total at the segment's end — what its right-hand label shows. */\n end: number\n}\n\n/** Lay the values side by side; negative values count as zero. */\nexport function categoryBarSegments(values: readonly number[]): CategoryBarSegment[] {\n const clean = values.map((v) => (Number.isFinite(v) && v > 0 ? v : 0))\n const total = clean.reduce((sum, v) => sum + v, 0)\n let running = 0\n return clean.map((v) => {\n const start = total === 0 ? 0 : (running / total) * 100\n running += v\n return { width: total === 0 ? 0 : (v / total) * 100, start, end: running }\n })\n}\n\nexport interface CategoryBarLabel {\n /** Position in percent of the bar. */\n position: number\n /** The running total printed there. */\n value: number\n}\n\n/**\n * Tick labels under the bar: `0` at the start, then the running total at each\n * segment's end. A label closer than `minGap` percent to the one before is\n * dropped so narrow segments don't print on top of each other — except the\n * last one (the total), which replaces its neighbour instead.\n */\nexport function categoryBarLabels(values: readonly number[], minGap = 8): CategoryBarLabel[] {\n const segments = categoryBarSegments(values).filter((s) => s.width > 0)\n if (segments.length === 0) return []\n const labels: CategoryBarLabel[] = [{ position: 0, value: 0 }]\n segments.forEach((s, i) => {\n const label = { position: s.start + s.width, value: s.end }\n const prev = labels[labels.length - 1]!\n if (label.position - prev.position >= minGap) labels.push(label)\n else if (i === segments.length - 1 && labels.length > 1) labels[labels.length - 1] = label\n })\n return labels\n}\n\n/** Marker position in percent of the bar, clamped to its ends. */\nexport function categoryBarMarkerPosition(value: number, values: readonly number[]): number {\n const total = values.reduce((sum, v) => sum + (Number.isFinite(v) && v > 0 ? v : 0), 0)\n if (total === 0) return 0\n return clamp((value / total) * 100, 0, 100)\n}\n\n/** Index of the segment the marker sits on (the last one for a value past the end). */\nexport function categoryBarMarkerSegment(value: number, values: readonly number[]): number {\n const segments = categoryBarSegments(values)\n const index = segments.findIndex((s) => s.width > 0 && value <= s.end)\n if (index !== -1) return index\n for (let i = segments.length - 1; i >= 0; i--) if (segments[i]!.width > 0) return i\n return 0\n}\n\n/* --------------------------------------------------------- ProgressCircle */\n\nexport interface ProgressCircleGeometry {\n /** SVG width/height. */\n size: number\n /** Radius of the stroke's centre line. */\n normalizedRadius: number\n circumference: number\n /** `stroke-dashoffset` for the value arc. */\n offset: number\n /** The value as a fraction of `max`, clamped to `[0, 1]`. */\n ratio: number\n}\n\nexport function progressCircleGeometry(\n value: number,\n max: number,\n radius: number,\n strokeWidth: number,\n): ProgressCircleGeometry {\n const ratio = max > 0 && Number.isFinite(value) ? clamp(value / max, 0, 1) : 0\n const normalizedRadius = Math.max(0, radius - strokeWidth / 2)\n const circumference = 2 * Math.PI * normalizedRadius\n return { size: radius * 2, normalizedRadius, circumference, offset: circumference * (1 - ratio), ratio }\n}\n","/**\n * ECharts option builders behind the typed charts (AreaChart, BarChart,\n * LineChart, DonutChart). They turn the Tremor-style props — `data` rows, an\n * `index` key and `categories` — into an `EChartsOption` for `EChart`, which\n * keeps owning the canvas and the token theme.\n *\n * Pure functions of their input: colours arrive already resolved to\n * canvas-safe strings (`resolveChartColors` in `chart-theme.ts`), so everything\n * here is unit-testable without a DOM. Internal; inlined into each copy.\n */\nimport { useMemo, useRef, useState } from \"react\"\n\nimport type { EChartsOption } from \"./echart\"\nimport type { ChartColor, ChartEventPayload, ValueFormatter } from \"./types\"\n\nexport type CartesianChartKind = \"area\" | \"bar\" | \"line\"\nexport type CartesianStackType = \"default\" | \"stacked\" | \"percent\"\nexport type CartesianCurveType = \"linear\" | \"smooth\" | \"step\"\nexport type AreaFill = \"gradient\" | \"solid\" | \"none\"\nexport type BarLayout = \"horizontal\" | \"vertical\"\n\n/** Props every cartesian typed chart (Area / Bar / Line) shares. */\nexport interface CartesianChartBaseProps {\n /** 行の配列。1 行 = x 軸の 1 点。数値の列は number か数値文字列(SQL の DECIMAL など)。 */\n data: Record<string, unknown>[]\n /** x 軸(カテゴリ軸)に使う列名。 */\n index: string\n /** 系列として描く列名。並び順が凡例と配色の順になる。 */\n categories: string[]\n /** 系列色。`\"chart-1\"`〜`\"chart-5\"` か CSS カラー。省略時はテーマのトークン順。足りなければ繰り返す。 */\n colors?: ChartColor[]\n /** 軸目盛りとツールチップの数値の書式。 */\n valueFormatter?: ValueFormatter\n /** 凡例を出す。既定 `true`。 */\n showLegend?: boolean\n /** ホバー時のツールチップを出す。既定 `true`。 */\n showTooltip?: boolean\n /** 値軸の目盛り線を出す。既定 `true`。 */\n showGridLines?: boolean\n showXAxis?: boolean\n showYAxis?: boolean\n /** x 軸のラベルを最初と最後だけにする。 */\n startEndOnly?: boolean\n /** y 軸ラベルの幅(px)。並べた複数グラフのプロット領域を揃えたいときに固定する。 */\n yAxisWidth?: number\n minValue?: number\n maxValue?: number\n /** 値軸を 0 からではなくデータの範囲に合わせる。 */\n autoMinValue?: boolean\n /** `false` で値軸の目盛りを整数に限る。 */\n allowDecimals?: boolean\n xAxisLabel?: string\n yAxisLabel?: string\n /**\n * 点(棒)のクリックで呼ばれる。クリックした行に `eventType` / `categoryClicked` を\n * 足して渡し、同じ点をもう一度クリックすると `null`。渡すと選択以外が薄くなる。\n */\n onValueChange?: (value: ChartEventPayload) => void\n /** 高さ。数値は px。省略時は `h-80`(320px)で、`className` の高さクラスが勝つ。 */\n height?: string | number\n loading?: boolean\n ariaLabel?: string\n className?: string\n}\n\n/** The point a user clicked, used to dim everything else. */\nexport interface ChartActivePoint {\n category: string\n index: number\n}\n\nexport interface CartesianChartConfig {\n kind: CartesianChartKind\n data: readonly Record<string, unknown>[]\n index: string\n categories: readonly string[]\n /** Resolved series colours, by category position. `\"\"`/missing → theme palette. */\n palette: readonly string[]\n valueFormatter: (value: number) => string\n type?: CartesianStackType\n /** Bar only. `\"vertical\"` lays the categories down the y axis (horizontal bars). */\n layout?: BarLayout\n curveType?: CartesianCurveType\n fill?: AreaFill\n connectNulls?: boolean\n showLegend?: boolean\n showTooltip?: boolean\n showGridLines?: boolean\n showXAxis?: boolean\n showYAxis?: boolean\n startEndOnly?: boolean\n yAxisWidth?: number\n minValue?: number\n maxValue?: number\n autoMinValue?: boolean\n allowDecimals?: boolean\n xAxisLabel?: string\n yAxisLabel?: string\n barCategoryGap?: string | number\n /** Always draw the line/area points (needed to click them). */\n showDots?: boolean\n active?: ChartActivePoint | null\n}\n\n/** Same coercion as `toChartNumber` in chart-utils (kept local: inlined modules can't import each other). */\nfunction cellNumber(value: unknown): number | null {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : null\n if (typeof value === \"bigint\") return Number(value)\n if (typeof value === \"string\" && value.trim() !== \"\") {\n const n = Number(value)\n return Number.isFinite(n) ? n : null\n }\n return null\n}\n\n/**\n * Series values per category. `\"percent\"` turns each row into shares of that\n * row's total (0–100); a row whose total is 0 stays at 0.\n */\nexport function cartesianSeriesValues(\n data: readonly Record<string, unknown>[],\n categories: readonly string[],\n type: CartesianStackType = \"default\",\n): (number | null)[][] {\n const raw = categories.map((category) => data.map((row) => cellNumber(row[category])))\n if (type !== \"percent\") return raw\n return raw.map((values) =>\n values.map((value, i) => {\n if (value === null) return null\n const total = categories.reduce((sum, _, k) => sum + Math.abs(raw[k]![i] ?? 0), 0)\n return total === 0 ? 0 : (Math.abs(value) / total) * 100\n }),\n )\n}\n\n/** A colour with alpha, for gradient stops. Understands `#rgb`, `#rrggbb`, `rgb()`/`rgba()`. */\nexport function withAlpha(color: string, alpha: number): string {\n const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(color.trim())\n if (hex) {\n const h = hex[1]!\n const full = h.length === 3 ? h.replace(/./g, (c) => c + c) : h\n const n = Number.parseInt(full, 16)\n return `rgba(${(n >> 16) & 255}, ${(n >> 8) & 255}, ${n & 255}, ${alpha})`\n }\n const rgb = /^rgba?\\(\\s*([\\d.]+)[\\s,]+([\\d.]+)[\\s,]+([\\d.]+)/i.exec(color.trim())\n if (rgb) return `rgba(${rgb[1]}, ${rgb[2]}, ${rgb[3]}, ${alpha})`\n return color\n}\n\nconst HTML_ESCAPES: Record<string, string> = { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }\n\nexport function escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (c) => HTML_ESCAPES[c]!)\n}\n\nexport interface TooltipRow {\n name: string\n color: string\n value: number | null\n}\n\n/** The tooltip body: a title, then one `● name value` row per series. */\nexport function tooltipHtml(title: string, rows: readonly TooltipRow[], valueFormatter: (value: number) => string): string {\n const lines = rows.map(\n (row) =>\n `<div style=\"display:flex;align-items:center;gap:8px;line-height:20px\">` +\n `<span style=\"display:inline-block;width:8px;height:8px;border-radius:9999px;background:${escapeHtml(row.color)}\"></span>` +\n `<span style=\"flex:1;opacity:.8\">${escapeHtml(row.name)}</span>` +\n `<span style=\"font-weight:500;font-variant-numeric:tabular-nums;margin-left:12px\">${\n row.value === null ? \"–\" : escapeHtml(valueFormatter(row.value))\n }</span></div>`,\n )\n return `<div style=\"font-weight:500;margin-bottom:4px\">${escapeHtml(title)}</div>${lines.join(\"\")}`\n}\n\ninterface AxisTooltipParam {\n seriesName?: string\n dataIndex?: number\n color?: unknown\n}\n\nconst DIMMED = 0.3\n\nexport function buildCartesianOption(cfg: CartesianChartConfig): EChartsOption {\n const {\n kind,\n data,\n index,\n categories,\n palette,\n valueFormatter,\n type = \"default\",\n layout = \"horizontal\",\n curveType = \"linear\",\n fill = \"gradient\",\n connectNulls = false,\n showLegend = true,\n showTooltip = true,\n showGridLines = true,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n yAxisWidth,\n minValue,\n maxValue,\n autoMinValue = false,\n allowDecimals = true,\n xAxisLabel,\n yAxisLabel,\n barCategoryGap,\n showDots = false,\n active = null,\n } = cfg\n\n const labels = data.map((row) => String(row[index] ?? \"\"))\n const values = cartesianSeriesValues(data, categories, kind === \"line\" ? \"default\" : type)\n const stacked = kind !== \"line\" && type !== \"default\"\n const percent = kind !== \"line\" && type === \"percent\"\n const horizontalBars = kind === \"bar\" && layout === \"vertical\"\n const last = labels.length - 1\n\n const series = categories.map((category, c) => {\n const color = palette[c] || undefined\n const dimSeries = active !== null && active.category !== category\n if (kind === \"bar\") {\n const radius = stacked ? 0 : horizontalBars ? [0, 3, 3, 0] : [3, 3, 0, 0]\n return {\n type: \"bar\" as const,\n name: category,\n stack: stacked ? \"total\" : undefined,\n barCategoryGap,\n itemStyle: { color, borderRadius: radius },\n emphasis: { focus: \"series\" as const },\n data: values[c]!.map((value, i) =>\n active !== null && !(active.category === category && active.index === i)\n ? { value, itemStyle: { opacity: DIMMED } }\n : value,\n ),\n }\n }\n const areaStyle =\n kind !== \"area\" || fill === \"none\"\n ? undefined\n : fill === \"solid\" || !color\n ? { opacity: fill === \"solid\" ? 0.3 : 0.2 }\n : {\n color: {\n type: \"linear\" as const,\n x: 0,\n y: 0,\n x2: 0,\n y2: 1,\n colorStops: [\n { offset: 0, color: withAlpha(color, 0.35) },\n { offset: 1, color: withAlpha(color, 0) },\n ],\n },\n }\n return {\n type: \"line\" as const,\n name: category,\n stack: stacked ? \"total\" : undefined,\n smooth: curveType === \"smooth\",\n step: curveType === \"step\" ? (\"middle\" as const) : undefined,\n connectNulls,\n symbol: \"circle\",\n symbolSize: 6,\n showSymbol: showDots || labels.length === 1,\n lineStyle: { width: 2, color, opacity: dimSeries ? DIMMED : 1 },\n itemStyle: { color, opacity: dimSeries ? DIMMED : 1 },\n areaStyle: areaStyle && dimSeries ? { ...areaStyle, opacity: DIMMED * 0.3 } : areaStyle,\n emphasis: { focus: \"series\" as const },\n data: values[c]!,\n }\n })\n\n const categoryAxis = {\n type: \"category\" as const,\n data: labels,\n show: horizontalBars ? showYAxis : showXAxis,\n boundaryGap: kind === \"bar\",\n inverse: horizontalBars,\n axisTick: { show: false },\n axisLabel: {\n hideOverlap: true,\n interval: startEndOnly ? (i: number) => i === 0 || i === last : (\"auto\" as const),\n ...(horizontalBars && yAxisWidth != null ? { width: yAxisWidth, overflow: \"truncate\" as const } : {}),\n },\n name: horizontalBars ? yAxisLabel : xAxisLabel,\n nameLocation: \"middle\" as const,\n nameGap: horizontalBars ? (yAxisWidth ?? 48) + 8 : 28,\n }\n const valueAxis = {\n type: \"value\" as const,\n show: horizontalBars ? showXAxis : showYAxis,\n min: percent ? 0 : minValue,\n max: percent ? 100 : maxValue,\n scale: autoMinValue && minValue == null,\n minInterval: allowDecimals ? undefined : 1,\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: { show: showGridLines },\n axisLabel: {\n formatter: percent ? (v: number) => `${v}%` : (v: number) => valueFormatter(v),\n ...(!horizontalBars && yAxisWidth != null ? { width: yAxisWidth, overflow: \"truncate\" as const } : {}),\n },\n name: horizontalBars ? xAxisLabel : yAxisLabel,\n nameLocation: \"middle\" as const,\n nameGap: horizontalBars ? 28 : (yAxisWidth ?? 48) + 8,\n }\n\n return {\n animationDuration: 400,\n legend: {\n show: showLegend,\n top: 0,\n right: 0,\n type: \"scroll\",\n icon: \"circle\",\n itemWidth: 8,\n itemHeight: 8,\n itemGap: 16,\n },\n grid: {\n top: showLegend ? 36 : 12,\n // Lines start and end on the outermost ticks, so the last label hangs past the plot.\n right: kind === \"bar\" ? 12 : 24,\n bottom: xAxisLabel ? 24 : 4,\n left: yAxisLabel ? 24 : 4,\n containLabel: true,\n },\n tooltip: {\n show: showTooltip,\n trigger: \"axis\",\n axisPointer: { type: kind === \"bar\" ? \"shadow\" : \"line\" },\n formatter: (params: unknown) => {\n const list = (Array.isArray(params) ? params : [params]) as AxisTooltipParam[]\n const i = list[0]?.dataIndex ?? 0\n const row = data[i] ?? {}\n return tooltipHtml(\n String(row[index] ?? \"\"),\n list.map((p) => ({\n name: p.seriesName ?? \"\",\n color: typeof p.color === \"string\" ? p.color : \"currentColor\",\n value: cellNumber(row[p.seriesName ?? \"\"]),\n })),\n valueFormatter,\n )\n },\n },\n xAxis: horizontalBars ? valueAxis : categoryAxis,\n yAxis: horizontalBars ? categoryAxis : valueAxis,\n series,\n } as EChartsOption\n}\n\n/* ------------------------------------------------------------------ donut */\n\nexport type DonutVariant = \"donut\" | \"pie\"\n\nexport interface DonutChartConfig {\n data: readonly Record<string, unknown>[]\n category: string\n value: string\n /** Resolved slice colours, by row position. `\"\"`/missing → theme palette. */\n palette: readonly string[]\n valueFormatter: (value: number) => string\n variant?: DonutVariant\n showTooltip?: boolean\n active?: string | null\n}\n\n/** Sum of the `value` column, ignoring gaps and negative cells. */\nexport function donutTotal(data: readonly Record<string, unknown>[], value: string): number {\n return data.reduce((sum, row) => {\n const n = cellNumber(row[value])\n return n !== null && n > 0 ? sum + n : sum\n }, 0)\n}\n\ninterface ItemTooltipParam {\n name?: string\n value?: unknown\n percent?: number\n color?: unknown\n}\n\nexport function buildDonutOption(cfg: DonutChartConfig): EChartsOption {\n const { data, category, value, palette, valueFormatter, variant = \"donut\", showTooltip = true, active = null } = cfg\n return {\n animationDuration: 400,\n tooltip: {\n show: showTooltip,\n trigger: \"item\",\n formatter: (params: unknown) => {\n const p = params as ItemTooltipParam\n const n = cellNumber(p.value)\n const share = typeof p.percent === \"number\" ? ` (${p.percent.toFixed(1)}%)` : \"\"\n return tooltipHtml(\n `${p.name ?? \"\"}${share}`,\n [{ name: value, color: typeof p.color === \"string\" ? p.color : \"currentColor\", value: n }],\n valueFormatter,\n )\n },\n },\n series: [\n {\n type: \"pie\",\n radius: variant === \"donut\" ? [\"72%\", \"100%\"] : [0, \"100%\"],\n center: [\"50%\", \"50%\"],\n avoidLabelOverlap: true,\n label: { show: false },\n labelLine: { show: false },\n // A hairline gap between slices instead of a border — no background colour to match.\n padAngle: data.length > 1 ? 1 : 0,\n itemStyle: { borderRadius: variant === \"donut\" ? 2 : 0 },\n emphasis: { scale: true, scaleSize: 4 },\n data: data.map((row, i) => {\n const name = String(row[category] ?? \"\")\n const color = palette[i] || undefined\n const n = cellNumber(row[value])\n return {\n name,\n value: n !== null && n > 0 ? n : 0,\n itemStyle: { color, opacity: active !== null && active !== name ? DIMMED : 1 },\n }\n }),\n },\n ],\n } as EChartsOption\n}\n\n/* -------------------------------------------------------------- selection */\n\n/** Toggle: clicking the active point again clears the selection. */\nexport function nextChartSelection(\n current: ChartActivePoint | null,\n category: string,\n index: number,\n): ChartActivePoint | null {\n return current && current.category === category && current.index === index ? null : { category, index }\n}\n\n/** What `onValueChange` receives: the clicked row plus what was clicked (ours win over row keys). */\nexport function chartSelectionPayload(\n selection: ChartActivePoint | null,\n data: readonly Record<string, unknown>[],\n eventType: NonNullable<ChartEventPayload>[\"eventType\"],\n): ChartEventPayload {\n if (!selection) return null\n return { ...data[selection.index], eventType, categoryClicked: selection.category }\n}\n\ninterface ChartClickParams {\n componentType?: string\n seriesName?: string\n name?: string\n dataIndex?: number\n}\n\n/**\n * Click-to-select for the typed charts: the `onEvents` to hand `EChart`, and\n * the active point to dim the rest with. Inert (no handler, nothing active)\n * without `onValueChange`.\n */\nexport function useChartSelection(\n data: readonly Record<string, unknown>[],\n onValueChange: ((value: ChartEventPayload) => void) | undefined,\n eventType: NonNullable<ChartEventPayload>[\"eventType\"],\n): { active: ChartActivePoint | null; onEvents: Record<string, (params: unknown) => void> | undefined } {\n const [active, setActive] = useState<ChartActivePoint | null>(null)\n // Handlers read the latest props without re-subscribing on every render.\n const latest = useRef({ data, onValueChange, active })\n latest.current = { data, onValueChange, active }\n const interactive = onValueChange !== undefined\n const onEvents = useMemo(() => {\n if (!interactive) return undefined\n return {\n click: (raw: unknown) => {\n const p = raw as ChartClickParams\n if (p.componentType !== \"series\" || typeof p.dataIndex !== \"number\") return\n const category = eventType === \"slice\" ? (p.name ?? \"\") : (p.seriesName ?? \"\")\n const next = nextChartSelection(latest.current.active, category, p.dataIndex)\n latest.current.active = next\n setActive(next)\n latest.current.onValueChange?.(chartSelectionPayload(next, latest.current.data, eventType))\n },\n }\n }, [interactive, eventType])\n return { active: interactive ? active : null, onEvents }\n}\n","/**\n * AreaChart — a typed area chart over `EChart`: pass rows, the x-axis key\n * (`index`) and the series keys (`categories`) instead of an ECharts option.\n * Colours default to the `--chart-1..5` tokens and follow light/dark. Reach\n * for `EChart` itself only when the option needs something this API lacks.\n */\nimport { forwardRef, useMemo } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { EChart } from \"./echart\"\nimport { resolveChartColors, useChartTokens } from \"./chart-theme\"\nimport { chartColorsFor, defaultValueFormatter } from \"./chart-utils\"\nimport {\n buildCartesianOption,\n useChartSelection,\n type AreaFill,\n type CartesianChartBaseProps,\n type CartesianCurveType,\n type CartesianStackType,\n} from \"./chart-options\"\n\nexport interface AreaChartProps extends CartesianChartBaseProps {\n /** `\"stacked\"` は積み上げ、`\"percent\"` は各点の合計を 100% にした積み上げ。既定 `\"default\"`。 */\n type?: CartesianStackType\n /** 線の形。既定 `\"linear\"`。 */\n curveType?: CartesianCurveType\n /** 面の塗り。既定 `\"gradient\"`。 */\n fill?: AreaFill\n /** 値の欠けた点(`null` など)をまたいで線をつなぐ。既定 `false`。 */\n connectNulls?: boolean\n}\n\nexport const AreaChart = forwardRef<HTMLDivElement, AreaChartProps>(function AreaChart(\n {\n data,\n index,\n categories,\n colors,\n valueFormatter = defaultValueFormatter,\n type = \"default\",\n curveType = \"linear\",\n fill = \"gradient\",\n connectNulls = false,\n showLegend = true,\n showTooltip = true,\n showGridLines = true,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n yAxisWidth,\n minValue,\n maxValue,\n autoMinValue = false,\n allowDecimals = true,\n xAxisLabel,\n yAxisLabel,\n onValueChange,\n height,\n loading,\n ariaLabel,\n className,\n },\n ref,\n) {\n const tokens = useChartTokens()\n const palette = useMemo(\n () => resolveChartColors(chartColorsFor(colors, categories.length), tokens),\n [colors, categories.length, tokens],\n )\n const { active, onEvents } = useChartSelection(data, onValueChange, \"dot\")\n const option = useMemo(\n () =>\n buildCartesianOption({\n kind: \"area\",\n data,\n index,\n categories,\n palette,\n valueFormatter,\n type,\n curveType,\n fill,\n connectNulls,\n showLegend,\n showTooltip,\n showGridLines,\n showXAxis,\n showYAxis,\n startEndOnly,\n yAxisWidth,\n minValue,\n maxValue,\n autoMinValue,\n allowDecimals,\n xAxisLabel,\n yAxisLabel,\n showDots: onValueChange !== undefined,\n active,\n }),\n [\n data, index, categories, palette, valueFormatter, type, curveType, fill, connectNulls,\n showLegend, showTooltip, showGridLines, showXAxis, showYAxis, startEndOnly, yAxisWidth,\n minValue, maxValue, autoMinValue, allowDecimals, xAxisLabel, yAxisLabel, onValueChange, active,\n ],\n )\n return (\n <EChart\n ref={ref}\n option={option}\n onEvents={onEvents}\n height={height}\n loading={loading}\n ariaLabel={ariaLabel ?? `${categories.join(\"・\")}の面グラフ`}\n className={cn(\"h-80\", className)}\n />\n )\n})\nAreaChart.displayName = \"AreaChart\"\n","/**\n * BarChart — a typed bar chart over `EChart`: pass rows, the category key\n * (`index`) and the series keys (`categories`) instead of an ECharts option.\n * Grouped, stacked or 100%-stacked; vertical or horizontal bars. Colours default\n * to the `--chart-1..5` tokens and follow light/dark.\n */\nimport { forwardRef, useMemo } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { EChart } from \"./echart\"\nimport { resolveChartColors, useChartTokens } from \"./chart-theme\"\nimport { chartColorsFor, defaultValueFormatter } from \"./chart-utils\"\nimport {\n buildCartesianOption,\n useChartSelection,\n type BarLayout,\n type CartesianChartBaseProps,\n type CartesianStackType,\n} from \"./chart-options\"\n\nexport interface BarChartProps extends CartesianChartBaseProps {\n /** `\"stacked\"` は積み上げ、`\"percent\"` は各カテゴリの合計を 100% にした積み上げ。既定 `\"default\"`(横並び)。 */\n type?: CartesianStackType\n /**\n * 棒の向き。既定 `\"horizontal\"`(カテゴリが横に並ぶ縦棒)。`\"vertical\"` はカテゴリを\n * 縦に並べた横棒で、ラベルの長いランキングに向く(先頭の行が一番上)。\n */\n layout?: BarLayout\n /** カテゴリ間の隙間(`\"20%\"` や px)。省略時は ECharts の既定。 */\n barCategoryGap?: string | number\n}\n\nexport const BarChart = forwardRef<HTMLDivElement, BarChartProps>(function BarChart(\n {\n data,\n index,\n categories,\n colors,\n valueFormatter = defaultValueFormatter,\n type = \"default\",\n layout = \"horizontal\",\n barCategoryGap,\n showLegend = true,\n showTooltip = true,\n showGridLines = true,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n yAxisWidth,\n minValue,\n maxValue,\n autoMinValue = false,\n allowDecimals = true,\n xAxisLabel,\n yAxisLabel,\n onValueChange,\n height,\n loading,\n ariaLabel,\n className,\n },\n ref,\n) {\n const tokens = useChartTokens()\n const palette = useMemo(\n () => resolveChartColors(chartColorsFor(colors, categories.length), tokens),\n [colors, categories.length, tokens],\n )\n const { active, onEvents } = useChartSelection(data, onValueChange, \"bar\")\n const option = useMemo(\n () =>\n buildCartesianOption({\n kind: \"bar\",\n data,\n index,\n categories,\n palette,\n valueFormatter,\n type,\n layout,\n barCategoryGap,\n showLegend,\n showTooltip,\n showGridLines,\n showXAxis,\n showYAxis,\n startEndOnly,\n yAxisWidth,\n minValue,\n maxValue,\n autoMinValue,\n allowDecimals,\n xAxisLabel,\n yAxisLabel,\n active,\n }),\n [\n data, index, categories, palette, valueFormatter, type, layout, barCategoryGap,\n showLegend, showTooltip, showGridLines, showXAxis, showYAxis, startEndOnly, yAxisWidth,\n minValue, maxValue, autoMinValue, allowDecimals, xAxisLabel, yAxisLabel, active,\n ],\n )\n return (\n <EChart\n ref={ref}\n option={option}\n onEvents={onEvents}\n height={height}\n loading={loading}\n ariaLabel={ariaLabel ?? `${categories.join(\"・\")}の棒グラフ`}\n className={cn(\"h-80\", className)}\n />\n )\n})\nBarChart.displayName = \"BarChart\"\n","/**\n * LineChart — a typed line chart over `EChart`: pass rows, the x-axis key\n * (`index`) and the series keys (`categories`) instead of an ECharts option.\n * Colours default to the `--chart-1..5` tokens and follow light/dark. Reach\n * for `EChart` itself only when the option needs something this API lacks.\n */\nimport { forwardRef, useMemo } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { EChart } from \"./echart\"\nimport { resolveChartColors, useChartTokens } from \"./chart-theme\"\nimport { chartColorsFor, defaultValueFormatter } from \"./chart-utils\"\nimport {\n buildCartesianOption,\n useChartSelection,\n type CartesianChartBaseProps,\n type CartesianCurveType,\n} from \"./chart-options\"\n\nexport interface LineChartProps extends CartesianChartBaseProps {\n /** 線の形。既定 `\"linear\"`。 */\n curveType?: CartesianCurveType\n /** 値の欠けた点(`null` など)をまたいで線をつなぐ。既定 `false`。 */\n connectNulls?: boolean\n}\n\nexport const LineChart = forwardRef<HTMLDivElement, LineChartProps>(function LineChart(\n {\n data,\n index,\n categories,\n colors,\n valueFormatter = defaultValueFormatter,\n curveType = \"linear\",\n connectNulls = false,\n showLegend = true,\n showTooltip = true,\n showGridLines = true,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n yAxisWidth,\n minValue,\n maxValue,\n autoMinValue = false,\n allowDecimals = true,\n xAxisLabel,\n yAxisLabel,\n onValueChange,\n height,\n loading,\n ariaLabel,\n className,\n },\n ref,\n) {\n const tokens = useChartTokens()\n const palette = useMemo(\n () => resolveChartColors(chartColorsFor(colors, categories.length), tokens),\n [colors, categories.length, tokens],\n )\n const { active, onEvents } = useChartSelection(data, onValueChange, \"dot\")\n const option = useMemo(\n () =>\n buildCartesianOption({\n kind: \"line\",\n data,\n index,\n categories,\n palette,\n valueFormatter,\n curveType,\n connectNulls,\n showLegend,\n showTooltip,\n showGridLines,\n showXAxis,\n showYAxis,\n startEndOnly,\n yAxisWidth,\n minValue,\n maxValue,\n autoMinValue,\n allowDecimals,\n xAxisLabel,\n yAxisLabel,\n showDots: onValueChange !== undefined,\n active,\n }),\n [\n data, index, categories, palette, valueFormatter, curveType, connectNulls,\n showLegend, showTooltip, showGridLines, showXAxis, showYAxis, startEndOnly, yAxisWidth,\n minValue, maxValue, autoMinValue, allowDecimals, xAxisLabel, yAxisLabel, onValueChange, active,\n ],\n )\n return (\n <EChart\n ref={ref}\n option={option}\n onEvents={onEvents}\n height={height}\n loading={loading}\n ariaLabel={ariaLabel ?? `${categories.join(\"・\")}の折れ線グラフ`}\n className={cn(\"h-80\", className)}\n />\n )\n})\nLineChart.displayName = \"LineChart\"\n","/**\n * DonutChart — a typed donut / pie chart over `EChart`: pass rows plus the\n * name column (`category`) and the value column (`value`). The donut prints a\n * label in its hole — the formatted total unless `label` says otherwise —\n * as plain HTML over the canvas, so it takes the page's type and colours.\n */\nimport { forwardRef, useMemo, type ReactNode } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { EChart } from \"./echart\"\nimport { resolveChartColors, useChartTokens } from \"./chart-theme\"\nimport { chartColorsFor, defaultValueFormatter } from \"./chart-utils\"\nimport { buildDonutOption, donutTotal, useChartSelection, type DonutVariant } from \"./chart-options\"\nimport type { ChartColor, ChartEventPayload, ValueFormatter } from \"./types\"\n\nexport interface DonutChartProps {\n /** 行の配列。1 行 = 1 切片。 */\n data: Record<string, unknown>[]\n /** 切片の名前に使う列名。 */\n category: string\n /** 切片の大きさに使う列名(number か数値文字列)。0 以下と欠損は 0 扱い。 */\n value: string\n /** 切片の色(行の順)。`\"chart-1\"`〜`\"chart-5\"` か CSS カラー。省略時はトークン順で、足りなければ繰り返す。 */\n colors?: ChartColor[]\n /** `\"donut\"`(中央に穴とラベル)か `\"pie\"`。既定 `\"donut\"`。 */\n variant?: DonutVariant\n /** ツールチップと中央ラベルの数値の書式。 */\n valueFormatter?: ValueFormatter\n /** 中央ラベル。省略時は合計を `valueFormatter` で書いたもの。donut のみ。 */\n label?: ReactNode\n /** 中央ラベルを出す。既定 `true`(donut のみ)。 */\n showLabel?: boolean\n showTooltip?: boolean\n /** 切片のクリックで呼ばれる。同じ切片をもう一度クリックすると `null`。渡すと選択以外が薄くなる。 */\n onValueChange?: (value: ChartEventPayload) => void\n loading?: boolean\n ariaLabel?: string\n /** 外枠のクラス。既定の大きさは `size-40`(160px 四方)。 */\n className?: string\n}\n\nexport const DonutChart = forwardRef<HTMLDivElement, DonutChartProps>(function DonutChart(\n {\n data,\n category,\n value,\n colors,\n variant = \"donut\",\n valueFormatter = defaultValueFormatter,\n label,\n showLabel = true,\n showTooltip = true,\n onValueChange,\n loading,\n ariaLabel,\n className,\n },\n ref,\n) {\n const tokens = useChartTokens()\n const palette = useMemo(\n () => resolveChartColors(chartColorsFor(colors, data.length), tokens),\n [colors, data.length, tokens],\n )\n const { active, onEvents } = useChartSelection(data, onValueChange, \"slice\")\n const option = useMemo(\n () =>\n buildDonutOption({\n data,\n category,\n value,\n palette,\n valueFormatter,\n variant,\n showTooltip,\n active: active?.category ?? null,\n }),\n [data, category, value, palette, valueFormatter, variant, showTooltip, active],\n )\n const centerLabel = label ?? valueFormatter(donutTotal(data, value))\n\n return (\n <div ref={ref} data-slot=\"donut-chart\" className={cn(\"relative size-40\", className)}>\n <EChart\n option={option}\n onEvents={onEvents}\n loading={loading}\n ariaLabel={ariaLabel ?? `${category}別の${value}`}\n className=\"h-full\"\n />\n {variant === \"donut\" && showLabel && (\n <div\n data-slot=\"donut-chart-label\"\n className=\"pointer-events-none absolute inset-0 flex items-center justify-center px-[18%] text-center text-lg font-semibold text-foreground tabular-nums\"\n >\n {centerLabel}\n </div>\n )}\n </div>\n )\n})\nDonutChart.displayName = \"DonutChart\"\n","/**\n * BarList — a ranked list of horizontal bars with the value at the end of each\n * row: top pages, sales by store, error counts by type. Plain HTML/CSS (no\n * ECharts), so it stays cheap inside cards and follows the theme natively.\n */\nimport { forwardRef, useEffect, useState, type ComponentProps } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { barListWidths, chartColorToCss, defaultValueFormatter, sortBarListData, tintCss, type BarListSortOrder } from \"./chart-utils\"\nimport type { ChartColor, ValueFormatter } from \"./types\"\n\nexport interface BarListItem {\n /** React の key。省略時は `name`。 */\n key?: string\n /** 行のラベル(バーの上に出る)。 */\n name: string\n value: number\n /** 渡すとラベルがリンクになる。 */\n href?: string\n /** この行だけ色を変える。省略時は `color`。 */\n color?: ChartColor\n}\n\nexport interface BarListProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n data: BarListItem[]\n /** 右端の数値の書式。 */\n valueFormatter?: ValueFormatter\n /** 並べ順。既定 `\"descending\"`(大きい順)。`\"none\"` は渡した順。 */\n sortOrder?: BarListSortOrder\n /** バーの色。`\"chart-1\"`〜`\"chart-5\"` か CSS カラー。既定 `\"chart-1\"`(淡く塗る)。 */\n color?: ChartColor\n /** マウント時にバーを伸ばす。 */\n showAnimation?: boolean\n /** 渡すと行がボタンになり、クリックした行を受け取る。 */\n onValueChange?: (item: BarListItem) => void\n}\n\nexport const BarList = forwardRef<HTMLDivElement, BarListProps>(function BarList(\n {\n data,\n valueFormatter = defaultValueFormatter,\n sortOrder = \"descending\",\n color = \"chart-1\",\n showAnimation = false,\n onValueChange,\n className,\n ...props\n },\n ref,\n) {\n const [mounted, setMounted] = useState(!showAnimation)\n useEffect(() => {\n if (!showAnimation) return\n const frame = requestAnimationFrame(() => setMounted(true))\n return () => cancelAnimationFrame(frame)\n }, [showAnimation])\n\n const rows = sortBarListData(data, sortOrder)\n const widths = barListWidths(rows.map((row) => row.value))\n\n return (\n <div ref={ref} data-slot=\"bar-list\" className={cn(\"flex justify-between gap-6 text-sm\", className)} {...props}>\n <div className=\"relative min-w-0 flex-1 space-y-1.5\">\n {rows.map((row, i) => {\n const css = chartColorToCss(row.color ?? color)\n const label = row.href ? (\n <a\n href={row.href}\n target={/^https?:\\/\\//.test(row.href) ? \"_blank\" : undefined}\n rel={/^https?:\\/\\//.test(row.href) ? \"noreferrer\" : undefined}\n onClick={(event) => event.stopPropagation()}\n className=\"truncate hover:underline\"\n >\n {row.name}\n </a>\n ) : (\n <span className=\"truncate\">{row.name}</span>\n )\n const content = (\n <>\n <span\n aria-hidden=\"true\"\n data-slot=\"bar-list-bar\"\n className={cn(\n \"absolute inset-y-0 left-0 rounded-sm\",\n showAnimation && \"transition-[width] duration-700 ease-out\",\n )}\n style={{ width: `${mounted ? widths[i] : 0}%`, background: tintCss(css, 28) }}\n />\n <span className=\"relative flex min-w-0 items-center px-2 text-foreground\">{label}</span>\n </>\n )\n const rowClass = \"relative flex h-8 w-full items-center rounded-sm\"\n return onValueChange ? (\n <button\n key={row.key ?? row.name}\n type=\"button\"\n data-slot=\"bar-list-row\"\n onClick={() => onValueChange(row)}\n className={cn(\n rowClass,\n \"text-left outline-none hover:bg-muted/60 focus-visible:ring-2 focus-visible:ring-ring\",\n )}\n >\n {content}\n </button>\n ) : (\n <div key={row.key ?? row.name} data-slot=\"bar-list-row\" className={rowClass}>\n {content}\n </div>\n )\n })}\n </div>\n <div className=\"shrink-0 space-y-1.5 text-right\">\n {rows.map((row) => (\n <div\n key={row.key ?? row.name}\n className=\"flex h-8 items-center justify-end font-medium text-foreground tabular-nums\"\n >\n {valueFormatter(row.value)}\n </div>\n ))}\n </div>\n </div>\n )\n})\nBarList.displayName = \"BarList\"\n","/**\n * CategoryBar — one bar split into coloured segments by `values`, with the\n * running totals underneath and an optional marker: a score against bands\n * (要改善 / 標準 / 良好), budget consumption, a share breakdown. Plain HTML/CSS.\n */\nimport { forwardRef, type ComponentProps } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\"\nimport {\n categoryBarLabels,\n categoryBarMarkerPosition,\n categoryBarMarkerSegment,\n categoryBarSegments,\n chartColorAt,\n chartColorToCss,\n defaultValueFormatter,\n} from \"./chart-utils\"\nimport type { ChartColor, ValueFormatter } from \"./types\"\n\nexport interface CategoryBarMarker {\n /** マーカーの位置(`values` の合計と同じ尺度)。 */\n value: number\n /** ホバーで出す説明。 */\n tooltip?: string\n /** 位置の変化をアニメーションする。 */\n showAnimation?: boolean\n}\n\nexport interface CategoryBarProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n /** 各区間の幅(相対値)。合計が 100 である必要はない。負の値は 0 扱い。 */\n values: number[]\n /** 区間の色(順に対応)。`\"chart-1\"`〜`\"chart-5\"` か CSS カラー。省略時はトークン順。 */\n colors?: ChartColor[]\n marker?: CategoryBarMarker\n /** バーの上に区切りの累計値を出す。既定 `true`。 */\n showLabels?: boolean\n /** 区切りの数値の書式。 */\n valueFormatter?: ValueFormatter\n}\n\nexport const CategoryBar = forwardRef<HTMLDivElement, CategoryBarProps>(function CategoryBar(\n { values, colors, marker, showLabels = true, valueFormatter = defaultValueFormatter, className, ...props },\n ref,\n) {\n const segments = categoryBarSegments(values)\n const labels = showLabels ? categoryBarLabels(values) : []\n const markerPosition = marker ? categoryBarMarkerPosition(marker.value, values) : 0\n const markerColor = marker ? chartColorToCss(chartColorAt(colors, categoryBarMarkerSegment(marker.value, values))) : \"\"\n\n const markerDot = (\n <span\n className=\"block h-4 w-1 rounded-full ring-2 ring-background\"\n style={{ background: markerColor }}\n />\n )\n\n return (\n <div ref={ref} data-slot=\"category-bar\" className={cn(\"w-full\", className)} {...props}>\n {showLabels && labels.length > 0 && (\n <div data-slot=\"category-bar-labels\" className=\"relative mb-2 h-4 text-xs text-muted-foreground tabular-nums\">\n {labels.map((label, i) => (\n <span\n key={i}\n className={cn(\n \"absolute top-0\",\n label.position <= 0 ? \"left-0\" : label.position >= 100 ? \"right-0\" : \"-translate-x-1/2\",\n )}\n style={label.position > 0 && label.position < 100 ? { left: `${label.position}%` } : undefined}\n >\n {valueFormatter(label.value)}\n </span>\n ))}\n </div>\n )}\n <div className=\"relative flex h-2 w-full items-center\">\n <div className=\"flex h-full w-full gap-0.5 overflow-hidden rounded-full\">\n {segments.map((segment, i) =>\n segment.width > 0 ? (\n <span\n key={i}\n data-slot=\"category-bar-segment\"\n className=\"h-full\"\n style={{ flex: `${segment.width} 1 0%`, background: chartColorToCss(chartColorAt(colors, i)) }}\n />\n ) : null,\n )}\n </div>\n {marker && (\n <div\n data-slot=\"category-bar-marker\"\n className={cn(\n \"absolute -translate-x-1/2\",\n marker.showAnimation && \"transition-[left] duration-700 ease-out\",\n )}\n style={{ left: `${markerPosition}%` }}\n >\n {marker.tooltip ? (\n <Tooltip>\n <TooltipTrigger render={<span aria-label={marker.tooltip} className=\"block py-1\" />}>\n {markerDot}\n </TooltipTrigger>\n <TooltipContent>{marker.tooltip}</TooltipContent>\n </Tooltip>\n ) : (\n markerDot\n )}\n </div>\n )}\n </div>\n </div>\n )\n})\nCategoryBar.displayName = \"CategoryBar\"\n","/**\n * ProgressCircle — a ring that fills to `value / max`, with anything you pass\n * as children in the middle (usually the percentage). Plain SVG, coloured by\n * a chart token, so a row of them in KPI tiles stays light.\n */\nimport { forwardRef, useEffect, useState, type ComponentProps } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { chartColorToCss, progressCircleGeometry, tintCss } from \"./chart-utils\"\nimport type { ChartColor } from \"./types\"\n\nexport interface ProgressCircleProps extends ComponentProps<\"div\"> {\n /** 現在値。`0`〜`max` に丸める。 */\n value?: number\n /** 満タンの値。既定 `100`。 */\n max?: number\n /** 外側の半径(px)。既定 `32`(64px 四方)。 */\n radius?: number\n /** 線の太さ(px)。既定 `6`。 */\n strokeWidth?: number\n /** 色。`\"chart-1\"`〜`\"chart-5\"` か CSS カラー。既定 `\"chart-1\"`。地のリングは同じ色を淡くしたもの。 */\n color?: ChartColor\n /** マウント時と値の変化をアニメーションする。既定 `true`。 */\n showAnimation?: boolean\n}\n\nexport const ProgressCircle = forwardRef<HTMLDivElement, ProgressCircleProps>(function ProgressCircle(\n {\n value = 0,\n max = 100,\n radius = 32,\n strokeWidth = 6,\n color = \"chart-1\",\n showAnimation = true,\n className,\n children,\n ...props\n },\n ref,\n) {\n const [mounted, setMounted] = useState(!showAnimation)\n useEffect(() => {\n if (!showAnimation) return\n const frame = requestAnimationFrame(() => setMounted(true))\n return () => cancelAnimationFrame(frame)\n }, [showAnimation])\n\n const { size, normalizedRadius, circumference, offset, ratio } = progressCircleGeometry(value, max, radius, strokeWidth)\n const css = chartColorToCss(color)\n\n return (\n <div\n ref={ref}\n data-slot=\"progress-circle\"\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={value}\n className={cn(\"relative inline-flex shrink-0 items-center justify-center\", className)}\n style={{ width: size, height: size }}\n {...props}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} className=\"-rotate-90\" aria-hidden=\"true\">\n <circle\n cx={radius}\n cy={radius}\n r={normalizedRadius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n style={{ stroke: tintCss(css, 20) }}\n />\n {ratio > 0 && (\n <circle\n data-slot=\"progress-circle-value\"\n cx={radius}\n cy={radius}\n r={normalizedRadius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={`${circumference} ${circumference}`}\n strokeDashoffset={mounted ? offset : circumference}\n className={cn(showAnimation && \"transition-[stroke-dashoffset] duration-700 ease-out\")}\n style={{ stroke: css }}\n />\n )}\n </svg>\n {children != null && (\n <div className=\"absolute inset-0 flex items-center justify-center text-sm font-medium text-foreground tabular-nums\">\n {children}\n </div>\n )}\n </div>\n )\n})\nProgressCircle.displayName = \"ProgressCircle\"\n","/**\n * Tracker — a row of small blocks, one per period, each coloured by status:\n * uptime per day, batch-job results, daily target hit/miss. Hover a block to\n * see its tooltip. Plain HTML/CSS.\n */\nimport { forwardRef, type ComponentProps } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\"\nimport { chartColorToCss } from \"./chart-utils\"\nimport type { ChartColor } from \"./types\"\n\nexport interface TrackerBlock {\n /** React の key。省略時は位置。 */\n key?: string | number\n /** ブロックの色。`\"chart-1\"`〜`\"chart-5\"` か CSS カラー(`\"var(--destructive)\"` など)。省略時は `defaultColor`。 */\n color?: ChartColor\n /** ホバーで出す説明(例: `\"10/12 稼働率 99.2%\"`)。 */\n tooltip?: string\n}\n\nexport interface TrackerProps extends Omit<ComponentProps<\"div\">, \"children\"> {\n data: TrackerBlock[]\n /** `color` の無いブロックの色。既定は muted-foreground を淡くした灰色。 */\n defaultColor?: ChartColor\n /** ホバー中のブロックを薄くする。既定 `true`。 */\n hoverEffect?: boolean\n}\n\nconst DEFAULT_BLOCK_COLOR = \"color-mix(in oklab, var(--muted-foreground) 35%, transparent)\"\n\nexport const Tracker = forwardRef<HTMLDivElement, TrackerProps>(function Tracker(\n { data, defaultColor, hoverEffect = true, className, ...props },\n ref,\n) {\n const fallback = defaultColor ? chartColorToCss(defaultColor) : DEFAULT_BLOCK_COLOR\n return (\n <div ref={ref} data-slot=\"tracker\" className={cn(\"flex h-8 w-full gap-px\", className)} {...props}>\n {data.map((block, i) => {\n const blockClass = cn(\n \"h-full min-w-0 flex-1 rounded-[1px] first:rounded-l-[4px] last:rounded-r-[4px]\",\n hoverEffect && \"transition-opacity hover:opacity-60\",\n )\n const style = { background: block.color ? chartColorToCss(block.color) : fallback }\n return block.tooltip ? (\n <Tooltip key={block.key ?? i}>\n <TooltipTrigger\n delay={0}\n render={<div data-slot=\"tracker-block\" aria-label={block.tooltip} className={blockClass} style={style} />}\n />\n <TooltipContent>{block.tooltip}</TooltipContent>\n </Tooltip>\n ) : (\n <div key={block.key ?? i} data-slot=\"tracker-block\" className={blockClass} style={style} />\n )\n })}\n </div>\n )\n})\nTracker.displayName = \"Tracker\"\n","/**\n * FunnelSteps — proportional bars for a conversion funnel. Bars are sized\n * against the first step, so pass the steps in descending order. Set\n * `showConversion` to print the step-to-step rate between them.\n */\nimport { forwardRef, Fragment, useEffect, useState, type ComponentProps, type KeyboardEvent } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../ui/cn\"\n\nexport interface FunnelStep {\n /** ステップのラベル(例: \"ページビュー\") */\n label: string\n /** このステップの数値 */\n value: number\n /** Tailwind bg カラークラス(例: \"bg-chart-1\")。未指定時は自動割り当て */\n color?: string\n /** クリック時のハンドラ */\n onClick?: () => void\n}\n\nconst DEFAULT_COLORS = [\n \"bg-chart-1\",\n \"bg-chart-2\",\n \"bg-chart-3\",\n \"bg-chart-4\",\n \"bg-chart-5\",\n] as const\n\nexport const funnelStepsVariants = cva(\"flex w-full\", {\n variants: {\n size: {\n sm: \"\",\n md: \"\",\n lg: \"\",\n },\n direction: {\n vertical: \"flex-col\",\n horizontal: \"flex-row\",\n },\n },\n compoundVariants: [\n { direction: \"vertical\", size: \"sm\", className: \"gap-1\" },\n { direction: \"vertical\", size: \"md\", className: \"gap-1.5\" },\n { direction: \"vertical\", size: \"lg\", className: \"gap-2\" },\n { direction: \"horizontal\", size: \"sm\", className: \"gap-2\" },\n { direction: \"horizontal\", size: \"md\", className: \"gap-3\" },\n { direction: \"horizontal\", size: \"lg\", className: \"gap-4\" },\n ],\n defaultVariants: {\n size: \"md\",\n direction: \"vertical\",\n },\n})\n\nconst funnelBarVariants = cva(\"rounded-sm transition-[width] ease-out\", {\n variants: {\n size: {\n sm: \"h-6\",\n md: \"h-8\",\n lg: \"h-10\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n})\n\nconst funnelBarContainerHorizontalVariants = cva(\n \"relative flex w-full items-end overflow-hidden rounded-sm bg-muted\",\n {\n variants: {\n size: {\n sm: \"h-20\",\n md: \"h-28\",\n lg: \"h-36\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n)\n\nconst funnelLabelVariants = cva(\"flex w-full items-center justify-between text-muted-foreground\", {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-sm\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n})\n\nconst funnelConversionVariants = cva(\"flex items-center text-muted-foreground\", {\n variants: {\n size: {\n sm: \"text-[10px]\",\n md: \"text-xs\",\n lg: \"text-xs\",\n },\n direction: {\n vertical: \"justify-end\",\n horizontal: \"shrink-0 justify-center self-center\",\n },\n },\n compoundVariants: [\n { direction: \"vertical\", size: \"sm\", className: \"py-0\" },\n { direction: \"vertical\", size: \"md\", className: \"py-0.5\" },\n { direction: \"vertical\", size: \"lg\", className: \"py-0.5\" },\n ],\n defaultVariants: {\n size: \"md\",\n direction: \"vertical\",\n },\n})\n\nexport interface FunnelStepsProps\n extends ComponentProps<\"div\">,\n VariantProps<typeof funnelStepsVariants> {\n /** ファネルステップの配列(先頭が最大幅) */\n data: FunnelStep[]\n /** ステップ間のコンバージョン率を表示する */\n showConversion?: boolean\n /** 値の表示フォーマット関数 */\n formatValue?: (value: number) => string\n /** マウント時のエントリアニメーションを有効にする */\n animate?: boolean\n}\n\nfunction defaultFormatValue(value: number): string {\n return value.toLocaleString()\n}\n\nfunction computeConversionRate(current: number, previous: number): string {\n if (previous === 0) return \"--\"\n return `${((current / previous) * 100).toFixed(1)}%`\n}\n\nexport const FunnelSteps = forwardRef<HTMLDivElement, FunnelStepsProps>(function FunnelSteps(\n {\n data,\n showConversion = false,\n formatValue = defaultFormatValue,\n animate = false,\n size = \"md\",\n direction = \"vertical\",\n className,\n ...props\n },\n ref,\n) {\n const [mounted, setMounted] = useState(false)\n const isHorizontal = direction === \"horizontal\"\n\n useEffect(() => {\n if (animate) setMounted(true)\n }, [animate])\n\n const maxValue = data.length > 0 ? data[0]!.value : 0\n\n return (\n <div\n ref={ref}\n data-slot=\"funnel-steps\"\n role=\"list\"\n aria-label=\"ファネル\"\n className={cn(funnelStepsVariants({ size, direction }), className)}\n {...props}\n >\n {data.map((step, index) => {\n const percentage = maxValue > 0 ? (step.value / maxValue) * 100 : 0\n // Keep a sliver visible for non-zero steps that would round to nothing.\n const barSize = step.value > 0 && percentage < 2 ? 2 : percentage\n const color = step.color ?? DEFAULT_COLORS[index % DEFAULT_COLORS.length]\n const isClickable = !!step.onClick\n\n const barInteractionProps = isClickable\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n onClick: step.onClick,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n step.onClick?.()\n }\n },\n }\n : {}\n\n const barInteractionClasses = isClickable\n ? \"cursor-pointer hover:brightness-110 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-none\"\n : undefined\n\n return (\n <Fragment key={index}>\n {isHorizontal ? (\n <div\n role=\"listitem\"\n className=\"flex min-w-0 flex-1 flex-col items-center gap-1\"\n aria-label={`${step.label}: ${formatValue(step.value)}`}\n >\n <span\n data-slot=\"funnel-value\"\n className={cn(\n \"text-muted-foreground tabular-nums\",\n size === \"sm\" ? \"text-xs\" : \"text-sm\",\n )}\n >\n {formatValue(step.value)}\n </span>\n <div className={funnelBarContainerHorizontalVariants({ size })}>\n <div\n {...barInteractionProps}\n className={cn(\n \"w-full rounded-sm transition-[height] ease-out\",\n color,\n barInteractionClasses,\n )}\n style={{\n height: animate ? (mounted ? `${barSize}%` : \"0%\") : `${barSize}%`,\n transitionDuration: \"0.5s\",\n transitionDelay: animate ? `${index * 0.08}s` : undefined,\n }}\n />\n </div>\n <span\n className={cn(\n \"w-full truncate text-center text-muted-foreground\",\n size === \"sm\" ? \"text-[10px]\" : \"text-xs\",\n )}\n >\n {step.label}\n </span>\n </div>\n ) : (\n <div role=\"listitem\" aria-label={`${step.label}: ${formatValue(step.value)}`}>\n <div className={funnelLabelVariants({ size })}>\n <span className=\"truncate\">{step.label}</span>\n <span data-slot=\"funnel-value\" className=\"tabular-nums\">\n {formatValue(step.value)}\n </span>\n </div>\n <div className=\"relative w-full overflow-hidden rounded-sm bg-muted\">\n <div\n {...barInteractionProps}\n className={cn(funnelBarVariants({ size }), color, barInteractionClasses)}\n style={{\n width: animate ? (mounted ? `${barSize}%` : \"0%\") : `${barSize}%`,\n transitionDuration: \"0.5s\",\n transitionDelay: animate ? `${index * 0.08}s` : undefined,\n }}\n />\n </div>\n </div>\n )}\n {showConversion && index < data.length - 1 && (\n <div className={funnelConversionVariants({ size, direction })} aria-hidden=\"true\">\n <span>→ {computeConversionRate(data[index + 1]!.value, step.value)}</span>\n </div>\n )}\n </Fragment>\n )\n })}\n </div>\n )\n})\nFunnelSteps.displayName = \"FunnelSteps\"\n","/**\n * Sparkline — an inline trend micro-chart. Deliberately *not* an `EChart`: a\n * sparkline sits inside table cells and KPI tiles by the dozen, where one\n * ECharts instance per cell would be wasteful. This renders a single stateless\n * `<svg>` instead, so hundreds of them stay cheap.\n */\nimport { forwardRef, useEffect, useState, type SVGAttributes } from \"react\"\n\nimport { cn } from \"../ui/cn\"\n\nexport type SparklineVariant = \"line\" | \"bar\"\n\nexport interface SparklineDataPoint {\n value: number\n label?: string\n}\n\nexport interface SparklineProps extends SVGAttributes<SVGSVGElement> {\n data: SparklineDataPoint[]\n variant?: SparklineVariant\n height?: number\n /** Tailwind text-colour class; drives both stroke and fill via `currentColor`. */\n color?: string\n area?: boolean\n animate?: boolean\n className?: string\n}\n\nconst VB_WIDTH = 100\n\n/** Map raw values onto SVG y-coordinates (inverted, padded). */\nfunction normalizeData(values: number[], height: number, vPad = 2): number[] {\n const min = Math.min(...values)\n const max = Math.max(...values)\n const range = max - min\n const drawHeight = height - vPad * 2\n if (range === 0) return values.map(() => vPad + drawHeight / 2)\n return values.map((v) => height - vPad - ((v - min) / range) * drawHeight)\n}\n\nfunction buildLinePath(ys: number[]): string {\n if (ys.length === 0) return \"\"\n const step = ys.length > 1 ? VB_WIDTH / (ys.length - 1) : 0\n return ys\n .map((y, i) => `${i === 0 ? \"M\" : \"L\"}${(i * step).toFixed(2)},${y.toFixed(2)}`)\n .join(\" \")\n}\n\nfunction buildAreaPath(ys: number[], height: number): string {\n if (ys.length === 0) return \"\"\n const step = ys.length > 1 ? VB_WIDTH / (ys.length - 1) : 0\n const lastX = ((ys.length - 1) * step).toFixed(2)\n return `${buildLinePath(ys)} L${lastX},${height} L0,${height} Z`\n}\n\ninterface BarRect {\n x: number\n y: number\n w: number\n h: number\n}\n\nfunction buildBarRects(ys: number[], height: number, gap = 1): BarRect[] {\n const barW = Math.max(1, VB_WIDTH / ys.length - gap)\n return ys.map((y, i) => ({ x: i * (barW + gap), y, w: barW, h: height - y }))\n}\n\nexport const Sparkline = forwardRef<SVGSVGElement, SparklineProps>(function Sparkline(\n {\n data,\n variant = \"line\",\n height = 40,\n color = \"text-chart-1\",\n area = false,\n animate = false,\n className,\n ...props\n },\n ref,\n) {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n if (animate) setMounted(true)\n }, [animate])\n\n if (data.length === 0) return null\n\n const ys = normalizeData(\n data.map((d) => d.value),\n height,\n )\n\n return (\n <svg\n ref={ref}\n data-slot=\"sparkline\"\n viewBox={`0 0 ${VB_WIDTH} ${height}`}\n preserveAspectRatio=\"none\"\n width=\"100%\"\n height={height}\n aria-hidden=\"true\"\n className={cn(\"overflow-visible\", className)}\n {...props}\n >\n {variant === \"line\" && (\n <>\n {area && (\n <path\n d={buildAreaPath(ys, height)}\n strokeWidth={0}\n className={cn(\"fill-current opacity-15\", color)}\n />\n )}\n <path\n d={buildLinePath(ys)}\n fill=\"none\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n pathLength={animate ? 1 : undefined}\n strokeDasharray={animate ? 1 : undefined}\n strokeDashoffset={animate ? (mounted ? 0 : 1) : undefined}\n className={cn(\"stroke-current\", color)}\n style={animate ? { transition: \"stroke-dashoffset 0.6s ease-in-out\" } : undefined}\n />\n </>\n )}\n\n {variant === \"bar\" &&\n buildBarRects(ys, height).map((rect, i) => (\n <rect\n key={i}\n x={rect.x}\n y={animate ? (mounted ? rect.y : height) : rect.y}\n width={rect.w}\n height={animate ? (mounted ? rect.h : 0) : rect.h}\n rx={0.5}\n className={cn(\"fill-current\", color)}\n style={\n animate\n ? {\n transition: `height 0.4s ease-out ${i * 0.02}s, y 0.4s ease-out ${i * 0.02}s`,\n }\n : undefined\n }\n />\n ))}\n </svg>\n )\n})\nSparkline.displayName = \"Sparkline\"\n","/**\n * DataTable — a compound table over TanStack Table. `<DataTable>` owns the\n * table instance and publishes it on context; the toolbar, body, pagination and\n * column-visibility parts read from that context, so a page composes only the\n * pieces it wants. `DataTablePreset` assembles the usual arrangement.\n *\n * Every piece of state (sorting, filters, pagination, selection, visibility) is\n * optionally controlled: pass the value plus its `on…Change` to drive it from\n * outside, or omit both and the table keeps it internally.\n */\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type SetStateAction,\n} from \"react\"\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type ColumnFiltersState,\n type OnChangeFn,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n type Table as TanstackTable,\n type TableMeta,\n type VisibilityState,\n} from \"@tanstack/react-table\"\nimport { ArrowDown, ArrowUp, ArrowUpDown, Columns3, Search } from \"lucide-react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Button } from \"../ui/button\"\nimport { Checkbox } from \"../ui/checkbox\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\"\nimport { Input } from \"../ui/input\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select\"\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"../ui/table\"\n\n/* ------------------------------------------------------------------- types */\n\ninterface DataTableContextValue<TData> {\n table: TanstackTable<TData>\n selectedRows: TData[]\n hasSelection: boolean\n globalFilter: string\n setGlobalFilter: OnChangeFn<string>\n enableFiltering: boolean\n enablePagination: boolean\n enableRowSelection: boolean\n visibleColumnCount: number\n}\n\n/**\n * @template TData 行データ型\n * @template TValue セル値の型 (省略時は任意)\n */\nexport interface DataTableProps<TData, TValue> {\n /**\n * TanStack Table の列定義配列。\n *\n * `ColumnDef<TData, TValue>[]` を annotation するか配列リテラルに\n * `satisfies ColumnDef<TData>[]` を付けないと、`accessorKey` などの\n * literal が `string` に拡張され型エラーになる。\n *\n * @example\n * import type { ColumnDef } from \"@squadbase/vantage/components\"\n *\n * const columns: ColumnDef<User>[] = [\n * { accessorKey: \"id\", header: \"ID\" },\n * { accessorKey: \"name\", header: \"名前\" },\n * ]\n * <DataTable columns={columns} data={users}>...</DataTable>\n */\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n\n // Sorting\n enableSorting?: boolean\n sorting?: SortingState\n onSortingChange?: OnChangeFn<SortingState>\n\n // Filtering\n enableFiltering?: boolean\n columnFilters?: ColumnFiltersState\n onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>\n globalFilter?: string\n onGlobalFilterChange?: OnChangeFn<string>\n\n // Pagination\n enablePagination?: boolean\n pagination?: PaginationState\n onPaginationChange?: OnChangeFn<PaginationState>\n pageCount?: number\n\n // Row selection\n enableRowSelection?: boolean\n rowSelection?: RowSelectionState\n onRowSelectionChange?: OnChangeFn<RowSelectionState>\n\n // Column visibility\n columnVisibility?: VisibilityState\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n\n meta?: TableMeta<TData>\n className?: string\n\n /** Required — the parts to render (toolbar, content, pagination). */\n children: ReactNode\n}\n\nexport interface DataTableToolbarProps extends HTMLAttributes<HTMLDivElement> {\n showSearch?: boolean\n toolbar?: ReactNode\n bulkActions?: (selectedRows: unknown[]) => ReactNode\n}\n\nexport interface DataTableContentProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport interface DataTablePaginationProps extends HTMLAttributes<HTMLDivElement> {\n pageSizeOptions?: number[]\n}\n\nexport interface DataTableColumnVisibilityProps {\n /** 列 ID をキーとしたラベルマップ。ヘッダーが文字列でない列のラベルを指定する */\n columnLabels?: Record<string, string>\n className?: string\n}\n\n/** The preset takes every `DataTable` prop except `children`, plus a few slots. */\nexport type DataTablePresetProps<TData, TValue> = Omit<\n DataTableProps<TData, TValue>,\n \"children\"\n> & {\n enableColumnVisibility?: boolean\n columnLabels?: Record<string, string>\n\n /** Extension slots */\n toolbar?: ReactNode\n bulkActions?: (selectedRows: TData[]) => ReactNode\n}\n\n/* ------------------------------------------------------------------ helper */\n\n/** Use the controlled value when one is given, else keep it in local state. */\nfunction useControlledState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: OnChangeFn<T>,\n): [T, OnChangeFn<T>] {\n const [internalValue, setInternalValue] = useState<T>(defaultValue)\n\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n\n const setValue: OnChangeFn<T> = useCallback(\n (updaterOrValue) => {\n onChange?.(updaterOrValue)\n if (!isControlled) {\n setInternalValue(updaterOrValue as SetStateAction<T>)\n }\n },\n [onChange, isControlled],\n )\n\n return [value, setValue]\n}\n\n/* ----------------------------------------------------------------- context */\n\nconst DataTableContext = createContext<DataTableContextValue<unknown> | null>(null)\n\nexport function useDataTable<TData>(): DataTableContextValue<TData> {\n const ctx = useContext(DataTableContext)\n if (!ctx) throw new Error(\"useDataTable must be used inside <DataTable>\")\n return ctx as DataTableContextValue<TData>\n}\n\n/* -------------------------------------------------------------------- root */\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n enableSorting = true,\n sorting: sortingProp,\n onSortingChange,\n enableFiltering = false,\n columnFilters: columnFiltersProp,\n onColumnFiltersChange,\n globalFilter: globalFilterProp,\n onGlobalFilterChange,\n enablePagination = false,\n pagination: paginationProp,\n onPaginationChange,\n pageCount,\n enableRowSelection = false,\n rowSelection: rowSelectionProp,\n onRowSelectionChange,\n columnVisibility: columnVisibilityProp,\n onColumnVisibilityChange,\n meta,\n className,\n children,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = useControlledState<SortingState>(sortingProp, [], onSortingChange)\n\n const [columnFilters, setColumnFilters] = useControlledState<ColumnFiltersState>(\n columnFiltersProp,\n [],\n onColumnFiltersChange,\n )\n\n const [globalFilter, setGlobalFilter] = useControlledState<string>(\n globalFilterProp,\n \"\",\n onGlobalFilterChange,\n )\n\n const [rowSelection, setRowSelection] = useControlledState<RowSelectionState>(\n rowSelectionProp,\n {},\n onRowSelectionChange,\n )\n\n const [columnVisibility, setColumnVisibility] = useControlledState<VisibilityState>(\n columnVisibilityProp,\n {},\n onColumnVisibilityChange,\n )\n\n const [pagination, setPagination] = useControlledState<PaginationState>(\n paginationProp,\n { pageIndex: 0, pageSize: 10 },\n onPaginationChange,\n )\n\n // Row selection prepends a checkbox column that the caller never declares.\n const allColumns = useMemo<ColumnDef<TData, TValue>[]>(() => {\n if (!enableRowSelection) return columns\n\n const selectionColumn: ColumnDef<TData, TValue> = {\n id: \"_select\",\n header: ({ table }) => (\n <Checkbox\n checked={table.getIsAllPageRowsSelected()}\n indeterminate={table.getIsSomePageRowsSelected()}\n onCheckedChange={(checked) => table.toggleAllPageRowsSelected(checked)}\n aria-label=\"全て選択\"\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(checked) => row.toggleSelected(checked)}\n aria-label=\"行を選択\"\n />\n ),\n enableSorting: false,\n enableHiding: false,\n }\n\n return [selectionColumn, ...columns]\n }, [columns, enableRowSelection])\n\n const table = useReactTable({\n data,\n columns: allColumns,\n state: {\n sorting,\n columnFilters,\n globalFilter,\n rowSelection,\n columnVisibility,\n ...(enablePagination ? { pagination } : {}),\n },\n enableSorting,\n enableRowSelection,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onGlobalFilterChange: setGlobalFilter,\n onRowSelectionChange: setRowSelection,\n onColumnVisibilityChange: setColumnVisibility,\n ...(enablePagination ? { onPaginationChange: setPagination } : {}),\n ...(pageCount !== undefined ? { pageCount, manualPagination: true } : {}),\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n ...(enablePagination ? { getPaginationRowModel: getPaginationRowModel() } : {}),\n meta,\n })\n\n const selectedRows = useMemo(\n () => table.getFilteredSelectedRowModel().rows.map((row) => row.original),\n // `table` is a stable reference, so the selection state is the real input.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [rowSelection, data],\n )\n\n const hasSelection = selectedRows.length > 0\n\n const contextValue = useMemo<DataTableContextValue<TData>>(\n () => ({\n table,\n selectedRows,\n hasSelection,\n globalFilter,\n setGlobalFilter,\n enableFiltering,\n enablePagination,\n enableRowSelection,\n visibleColumnCount: allColumns.length,\n }),\n // `useReactTable` returns the same object every render, so each piece of\n // table state has to be tracked explicitly to re-render the consumers.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n table,\n selectedRows,\n hasSelection,\n globalFilter,\n setGlobalFilter,\n enableFiltering,\n enablePagination,\n enableRowSelection,\n allColumns.length,\n sorting,\n columnFilters,\n columnVisibility,\n pagination,\n rowSelection,\n ],\n )\n\n return (\n <DataTableContext.Provider value={contextValue as DataTableContextValue<unknown>}>\n <div data-slot=\"data-table\" className={cn(\"space-y-4\", className)}>\n {children}\n </div>\n </DataTableContext.Provider>\n )\n}\nDataTable.displayName = \"DataTable\"\n\n/* ----------------------------------------------------------------- toolbar */\n\nexport const DataTableToolbar = forwardRef<HTMLDivElement, DataTableToolbarProps>(\n ({ showSearch, toolbar, bulkActions, className, ...props }, ref) => {\n const { globalFilter, setGlobalFilter, hasSelection, selectedRows, enableFiltering } =\n useDataTable()\n\n const showSearchEffective = showSearch ?? enableFiltering\n\n const hasContent = showSearchEffective || toolbar != null || (hasSelection && bulkActions != null)\n\n if (!hasContent) return null\n\n return (\n <div\n ref={ref}\n data-slot=\"data-table-toolbar\"\n className={cn(\"flex flex-wrap items-center gap-2\", className)}\n {...props}\n >\n {showSearchEffective && (\n <div className=\"relative\">\n <Search className=\"absolute top-2.5 left-2.5 size-4 text-muted-foreground\" />\n <Input\n value={globalFilter}\n onChange={(e) => setGlobalFilter(e.target.value)}\n className=\"max-w-sm pl-8\"\n />\n </div>\n )}\n {toolbar}\n {hasSelection && bulkActions && (\n <div className=\"ml-auto flex items-center gap-2\">{bulkActions(selectedRows)}</div>\n )}\n </div>\n )\n },\n)\nDataTableToolbar.displayName = \"DataTableToolbar\"\n\n/* ----------------------------------------------------------------- content */\n\nexport const DataTableContent = forwardRef<HTMLDivElement, DataTableContentProps>(\n ({ className, ...props }, ref) => {\n const { table, visibleColumnCount } = useDataTable()\n\n return (\n <div\n ref={ref}\n data-slot=\"data-table-content\"\n className={cn(\"overflow-x-auto\", className)}\n {...props}\n >\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-none\"\n onClick={header.column.getToggleSortingHandler()}\n aria-sort={\n header.column.getIsSorted() === \"asc\"\n ? \"ascending\"\n : header.column.getIsSorted() === \"desc\"\n ? \"descending\"\n : \"none\"\n }\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getIsSorted() === \"asc\" ? (\n <ArrowUp className=\"size-4\" />\n ) : header.column.getIsSorted() === \"desc\" ? (\n <ArrowDown className=\"size-4\" />\n ) : (\n <ArrowUpDown className=\"size-4 text-muted-foreground\" />\n )}\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n\n <TableBody>\n {table.getRowModel().rows.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() ? \"selected\" : undefined}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={visibleColumnCount}\n className=\"h-24 text-center text-muted-foreground\"\n >\n データがありません\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n )\n },\n)\nDataTableContent.displayName = \"DataTableContent\"\n\n/* -------------------------------------------------------------- pagination */\n\nexport const DataTablePagination = forwardRef<HTMLDivElement, DataTablePaginationProps>(\n ({ pageSizeOptions = [10, 20, 50], className, ...props }, ref) => {\n const { table } = useDataTable()\n\n const totalRows = table.getFilteredRowModel().rows.length\n const currentPageSize = table.getState().pagination.pageSize\n const currentPageIndex = table.getState().pagination.pageIndex\n const rangeStart = currentPageIndex * currentPageSize + 1\n const rangeEnd = Math.min((currentPageIndex + 1) * currentPageSize, totalRows)\n\n return (\n <div\n ref={ref}\n data-slot=\"data-table-pagination\"\n className={cn(\"flex flex-wrap items-center justify-between gap-4\", className)}\n {...props}\n >\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <span>\n {totalRows}件中 {rangeStart} - {rangeEnd} を表示\n </span>\n <Select\n value={String(currentPageSize)}\n onValueChange={(value) => table.setPageSize(Number(value))}\n >\n <SelectTrigger size=\"sm\" className=\"w-[80px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((size) => (\n <SelectItem key={size} value={String(size)}>\n {size}件\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.firstPage()}\n disabled={!table.getCanPreviousPage()}\n >\n 最初\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n 前へ\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n 次へ\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.lastPage()}\n disabled={!table.getCanNextPage()}\n >\n 最後\n </Button>\n </div>\n </div>\n )\n },\n)\nDataTablePagination.displayName = \"DataTablePagination\"\n\n/* ------------------------------------------------------- column visibility */\n\nexport const DataTableColumnVisibility = forwardRef<\n HTMLButtonElement,\n DataTableColumnVisibilityProps\n>(({ columnLabels, className }, ref) => {\n const { table } = useDataTable()\n\n const hideableColumns = table.getAllColumns().filter((column) => column.getCanHide())\n\n if (hideableColumns.length === 0) return null\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n ref={ref}\n render={<Button variant=\"outline\" size=\"sm\" className={cn(className)} />}\n data-slot=\"data-table-column-visibility\"\n >\n <Columns3 className=\"size-4\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"min-w-[10rem]\">\n {hideableColumns.map((column) => {\n const label =\n columnLabels?.[column.id] ??\n (typeof column.columnDef.header === \"string\" ? column.columnDef.header : column.id)\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(checked) => column.toggleVisibility(checked)}\n >\n {label}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n})\nDataTableColumnVisibility.displayName = \"DataTableColumnVisibility\"\n\n/* ------------------------------------------------------------------ preset */\n\n/** The usual arrangement — toolbar, body and pagination — in one component. */\nexport function DataTablePreset<TData, TValue>({\n enableColumnVisibility = false,\n columnLabels,\n toolbar,\n bulkActions,\n ...tableProps\n}: DataTablePresetProps<TData, TValue>) {\n const toolbarSlot =\n toolbar || enableColumnVisibility ? (\n <>\n {toolbar}\n {enableColumnVisibility && <DataTableColumnVisibility columnLabels={columnLabels} />}\n </>\n ) : undefined\n\n return (\n <DataTable<TData, TValue> {...tableProps}>\n <DataTableToolbar\n showSearch={tableProps.enableFiltering}\n toolbar={toolbarSlot}\n bulkActions={bulkActions as ((selectedRows: unknown[]) => ReactNode) | undefined}\n />\n <DataTableContent />\n {tableProps.enablePagination && <DataTablePagination />}\n </DataTable>\n )\n}\nDataTablePreset.displayName = \"DataTablePreset\"\n\nexport type {\n ColumnDef,\n ColumnFiltersState,\n PaginationState,\n RowSelectionState,\n SortingState,\n VisibilityState,\n} from \"@tanstack/react-table\"\n","/**\n * FilterBar — a compound filter row. `<FilterBar>` holds the (always\n * controlled) filter values on context; the select, multi-select, active-chip\n * and clear parts read and update them. `FilterBarPreset` builds the whole row\n * from a `FilterConfig[]`.\n */\nimport {\n createContext,\n forwardRef,\n useContext,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\"\nimport { ChevronDown, X } from \"lucide-react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Badge } from \"../ui/badge\"\nimport { Button } from \"../ui/button\"\nimport { Checkbox } from \"../ui/checkbox\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select\"\nimport type { FilterConfig, FilterOption, FilterValues } from \"./types\"\n\n/* --------------------------------------------------------------- context */\n\ninterface FilterBarContextValue {\n /** Current filter values (controlled from outside) */\n value: FilterValues\n /** Notify the parent of a value change */\n onChange: (next: FilterValues) => void\n /** Optional clear callback — undefined means no clear button */\n onClear?: () => void\n}\n\nconst FilterBarContext = createContext<FilterBarContextValue | null>(null)\n\nfunction useFilterBar(): FilterBarContextValue {\n const ctx = useContext(FilterBarContext)\n if (!ctx) throw new Error(\"useFilterBar must be used within <FilterBar>\")\n return ctx\n}\n\n/* ------------------------------------------------------------------ root */\n\nexport interface FilterBarProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n value: FilterValues\n onChange: (values: FilterValues) => void\n onClear?: () => void\n className?: string\n children?: ReactNode\n}\n\nexport const FilterBar = forwardRef<HTMLDivElement, FilterBarProps>(\n ({ value, onChange, onClear, className, children, ...props }, ref) => (\n <FilterBarContext.Provider value={{ value, onChange, onClear }}>\n <div\n ref={ref}\n role=\"search\"\n aria-label=\"フィルター\"\n data-slot=\"filter-bar\"\n className={cn(\"flex flex-wrap items-center gap-2\", className)}\n {...props}\n >\n {children}\n </div>\n </FilterBarContext.Provider>\n ),\n)\nFilterBar.displayName = \"FilterBar\"\n\n/* ---------------------------------------------------------------- select */\n\nexport interface FilterBarSelectProps {\n filterKey: string\n label: string\n options: FilterOption[]\n placeholder?: string\n className?: string\n}\n\nexport function FilterBarSelect({\n filterKey,\n label,\n options,\n placeholder,\n className,\n}: FilterBarSelectProps) {\n const { value, onChange } = useFilterBar()\n\n // Base UI reports `null` when the selection is cleared — drop the key so\n // \"no filter\" reads as absent rather than as an empty string.\n const handleChange = (selected: string | null) =>\n onChange({ ...value, [filterKey]: selected ?? undefined })\n\n return (\n <Select value={(value[filterKey] as string) ?? \"\"} onValueChange={handleChange}>\n <SelectTrigger size=\"sm\" aria-label={label} data-slot=\"filter-bar-select\" className={className}>\n <SelectValue placeholder={placeholder ?? label} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\nFilterBarSelect.displayName = \"FilterBarSelect\"\n\n/* ---------------------------------------------------------- multi-select */\n\nexport interface FilterBarMultiSelectProps {\n filterKey: string\n label: string\n options: FilterOption[]\n placeholder?: string\n className?: string\n}\n\nexport function FilterBarMultiSelect({\n filterKey,\n label,\n options,\n placeholder,\n className,\n}: FilterBarMultiSelectProps) {\n const { value, onChange } = useFilterBar()\n const selected = (value[filterKey] as string[] | undefined) ?? []\n\n const handleToggle = (option: string) => {\n const next = selected.includes(option)\n ? selected.filter((v) => v !== option)\n : [...selected, option]\n // Drop the key entirely when nothing is left, so \"no filter\" reads as absent.\n onChange({ ...value, [filterKey]: next.length > 0 ? next : undefined })\n }\n\n return (\n <Popover>\n <PopoverTrigger\n render={<Button variant=\"outline\" size=\"sm\" className={cn(\"h-8 gap-1\", className)} />}\n aria-label={`${placeholder ?? label}${selected.length > 0 ? ` (${selected.length}件選択中)` : \"\"}`}\n data-slot=\"filter-bar-multi-select\"\n >\n {placeholder ?? label}\n {selected.length > 0 && (\n <Badge variant=\"secondary\" className=\"ml-1 px-1.5 py-0 text-xs\">\n {selected.length}\n </Badge>\n )}\n <ChevronDown className=\"size-3.5 opacity-50\" aria-hidden=\"true\" />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-56 p-2\">\n <div className=\"flex flex-col gap-1\" role=\"group\" aria-label={label}>\n {options.map((option) => (\n <label\n key={option.value}\n className=\"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent\"\n >\n <Checkbox\n checked={selected.includes(option.value)}\n disabled={option.disabled}\n onCheckedChange={() => handleToggle(option.value)}\n />\n {option.label}\n </label>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\nFilterBarMultiSelect.displayName = \"FilterBarMultiSelect\"\n\n/* ---------------------------------------------------------- active chips */\n\nexport interface FilterBarActiveChipsProps {\n /** Filter configs used to resolve option labels. Without them, raw values show. */\n filters?: FilterConfig[]\n className?: string\n}\n\ninterface ActiveChip {\n key: string\n filterLabel: string\n optionLabel: string\n optionValue?: string\n isMulti: boolean\n}\n\nexport function FilterBarActiveChips({ filters, className }: FilterBarActiveChipsProps) {\n const { value, onChange } = useFilterBar()\n\n const getActiveChips = (): ActiveChip[] => {\n const chips: ActiveChip[] = []\n\n const pushRaw = (key: string, v: string | string[]) => {\n if (typeof v === \"string\") {\n chips.push({ key, filterLabel: key, optionLabel: v, isMulti: false })\n } else {\n for (const val of v) {\n chips.push({ key, filterLabel: key, optionLabel: val, optionValue: val, isMulti: true })\n }\n }\n }\n\n for (const [key, v] of Object.entries(value)) {\n if (v === undefined || v === \"\") continue\n\n const filter = filters?.find((f) => f.key === key)\n if (!filter) {\n pushRaw(key, v)\n continue\n }\n\n if (filter.type === \"select\" && typeof v === \"string\") {\n const option = filter.options?.find((o) => o.value === v)\n chips.push({\n key,\n filterLabel: filter.label,\n optionLabel: option?.label ?? v,\n isMulti: false,\n })\n } else if (filter.type === \"multi-select\" && Array.isArray(v)) {\n for (const val of v) {\n const option = filter.options?.find((o) => o.value === val)\n chips.push({\n key,\n filterLabel: filter.label,\n optionLabel: option?.label ?? val,\n optionValue: val,\n isMulti: true,\n })\n }\n }\n }\n\n return chips\n }\n\n const handleRemoveFilter = (key: string, optionValue?: string) => {\n if (optionValue !== undefined) {\n const current = (value[key] as string[] | undefined) ?? []\n const next = current.filter((v) => v !== optionValue)\n onChange({ ...value, [key]: next.length > 0 ? next : undefined })\n } else {\n onChange({ ...value, [key]: undefined })\n }\n }\n\n const activeChips = getActiveChips()\n\n if (activeChips.length === 0) return null\n\n return (\n <>\n {activeChips.map((chip) => (\n <Badge\n key={`${chip.key}-${chip.optionValue ?? \"single\"}`}\n variant=\"secondary\"\n className={cn(\"gap-1 pr-1\", className)}\n data-slot=\"filter-bar-chip\"\n >\n <span className=\"text-xs text-muted-foreground\">{chip.filterLabel}:</span>\n {chip.optionLabel}\n <button\n type=\"button\"\n className=\"ml-0.5 rounded-full p-0.5 hover:bg-muted-foreground/20\"\n onClick={() => handleRemoveFilter(chip.key, chip.optionValue)}\n aria-label={`${chip.filterLabel}: ${chip.optionLabel} を削除`}\n >\n <X className=\"size-3\" aria-hidden=\"true\" />\n </button>\n </Badge>\n ))}\n </>\n )\n}\nFilterBarActiveChips.displayName = \"FilterBarActiveChips\"\n\n/* ----------------------------------------------------------- clear button */\n\nexport interface FilterBarClearButtonProps {\n /** Override the button label. Defaults to \"クリア\". */\n label?: string\n className?: string\n}\n\nexport function FilterBarClearButton({ label = \"クリア\", className }: FilterBarClearButtonProps) {\n const { value, onClear } = useFilterBar()\n const hasActiveFilters = Object.values(value).some((v) =>\n Array.isArray(v) ? v.length > 0 : v !== undefined && v !== \"\",\n )\n if (!hasActiveFilters || !onClear) return null\n\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\"h-7 px-2 text-xs\", className)}\n onClick={onClear}\n aria-label=\"すべてのフィルターをクリア\"\n data-slot=\"filter-bar-clear-button\"\n >\n {label}\n </Button>\n )\n}\nFilterBarClearButton.displayName = \"FilterBarClearButton\"\n\n/* ------------------------------------------------------------------ preset */\n\nexport interface FilterBarPresetProps {\n filters: FilterConfig[]\n value: FilterValues\n onChange: (values: FilterValues) => void\n onClear?: () => void\n className?: string\n}\n\n/** The whole row built from a `FilterConfig[]`. */\nexport function FilterBarPreset({\n filters,\n value,\n onChange,\n onClear,\n className,\n}: FilterBarPresetProps) {\n return (\n <FilterBar value={value} onChange={onChange} onClear={onClear} className={className}>\n {filters.map((filter) => {\n if (filter.type === \"select\") {\n return (\n <FilterBarSelect\n key={filter.key}\n filterKey={filter.key}\n label={filter.label}\n placeholder={filter.placeholder}\n options={filter.options ?? []}\n />\n )\n }\n if (filter.type === \"multi-select\") {\n return (\n <FilterBarMultiSelect\n key={filter.key}\n filterKey={filter.key}\n label={filter.label}\n placeholder={filter.placeholder}\n options={filter.options ?? []}\n />\n )\n }\n return null\n })}\n <FilterBarActiveChips filters={filters} />\n {onClear && <FilterBarClearButton />}\n </FilterBar>\n )\n}\nFilterBarPreset.displayName = \"FilterBarPreset\"\n","/**\n * DateRangePicker — a range calendar in a popover with quick presets down the\n * side. On mobile the presets stack above a single month; on desktop they sit\n * beside a two-month view.\n */\nimport { forwardRef, useCallback, useState } from \"react\"\nimport { CalendarIcon } from \"lucide-react\"\nimport { endOfDay, endOfMonth, format, startOfDay, startOfMonth, subDays, subMonths } from \"date-fns\"\nimport { ja } from \"date-fns/locale\"\nimport type { DateRange as RdpDateRange } from \"react-day-picker\"\n\nimport { cn } from \"../ui/cn\"\nimport { useIsMobile } from \"../ui/use-mobile\"\nimport { Button } from \"../ui/button\"\nimport { Calendar } from \"../ui/calendar\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\"\nimport type { DateRange, PresetItem } from \"./types\"\n\nexport const defaultPresets: PresetItem[] = [\n {\n label: \"Today\",\n getValue: () => {\n const today = new Date()\n return { from: startOfDay(today), to: endOfDay(today) }\n },\n },\n {\n label: \"Yesterday\",\n getValue: () => {\n const yesterday = subDays(new Date(), 1)\n return { from: startOfDay(yesterday), to: endOfDay(yesterday) }\n },\n },\n {\n label: \"Last 7 days\",\n getValue: () => {\n const today = new Date()\n return { from: startOfDay(subDays(today, 6)), to: endOfDay(today) }\n },\n },\n {\n label: \"Last 14 days\",\n getValue: () => {\n const today = new Date()\n return { from: startOfDay(subDays(today, 13)), to: endOfDay(today) }\n },\n },\n {\n label: \"Last 30 days\",\n getValue: () => {\n const today = new Date()\n return { from: startOfDay(subDays(today, 29)), to: endOfDay(today) }\n },\n },\n {\n label: \"Last 90 days\",\n getValue: () => {\n const today = new Date()\n return { from: startOfDay(subDays(today, 89)), to: endOfDay(today) }\n },\n },\n {\n label: \"This month\",\n getValue: () => {\n const today = new Date()\n return { from: startOfMonth(today), to: endOfDay(today) }\n },\n },\n {\n label: \"Last month\",\n getValue: () => {\n const lastMonth = subMonths(new Date(), 1)\n return { from: startOfMonth(lastMonth), to: endOfMonth(lastMonth) }\n },\n },\n]\n\nexport interface DateRangePickerProps {\n /**\n * 選択中の日付範囲。型は Vantage 独自の `DateRange`。\n * react-day-picker の `DateRange` とは別物なので注意 — そちらが必要なら\n * このファイルの末尾で re-export している `RdpDateRange` を使う。\n *\n * @example\n * import type { DateRange } from \"@squadbase/vantage/components\"\n *\n * const [range, setRange] = useState<DateRange | undefined>()\n * <DateRangePicker value={range} onChange={setRange} />\n */\n value?: DateRange\n onChange?: (range: DateRange) => void\n presets?: PresetItem[]\n showPresets?: boolean\n maxDate?: Date\n minDate?: Date\n placeholder?: string\n disabled?: boolean\n className?: string\n align?: \"start\" | \"center\" | \"end\"\n}\n\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(\n function DateRangePicker(\n {\n value,\n onChange,\n presets = defaultPresets,\n showPresets = true,\n maxDate,\n minDate,\n placeholder = \"Select date range\",\n disabled = false,\n className,\n align = \"start\",\n },\n ref,\n ) {\n const [open, setOpen] = useState(false)\n const isMobile = useIsMobile()\n\n const handleCalendarSelect = useCallback(\n (range: RdpDateRange | undefined) => {\n onChange?.({ from: range?.from, to: range?.to })\n },\n [onChange],\n )\n\n const handlePresetClick = useCallback(\n (preset: PresetItem) => {\n onChange?.(preset.getValue())\n setOpen(false)\n },\n [onChange],\n )\n\n const formatDateRange = () => {\n if (!value?.from) return placeholder\n if (!value.to) return format(value.from, \"yyyy/MM/dd\", { locale: ja })\n return `${format(value.from, \"yyyy/MM/dd\", { locale: ja })} - ${format(value.to, \"yyyy/MM/dd\", { locale: ja })}`\n }\n\n const calendarSelected: RdpDateRange | undefined = value?.from\n ? { from: value.from, to: value.to ?? undefined }\n : undefined\n\n return (\n <div ref={ref} data-slot=\"date-range-picker\">\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n render={\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"w-auto justify-start text-left font-normal\",\n !value?.from && \"text-muted-foreground\",\n className,\n )}\n />\n }\n aria-label={formatDateRange()}\n aria-expanded={open}\n >\n <CalendarIcon className=\"size-4\" aria-hidden=\"true\" />\n <span>{formatDateRange()}</span>\n </PopoverTrigger>\n <PopoverContent\n align={align}\n className={cn(\"w-auto p-0\", isMobile ? \"flex flex-col\" : \"flex\")}\n >\n {showPresets && (\n <div className={cn(\"flex flex-col gap-1 p-3\", isMobile ? \"border-b\" : \"border-r\")}>\n {presets.map((preset) => (\n <Button\n key={preset.label}\n variant=\"ghost\"\n size=\"sm\"\n className=\"justify-start text-xs\"\n onClick={() => handlePresetClick(preset)}\n >\n {preset.label}\n </Button>\n ))}\n </div>\n )}\n <div className=\"p-3\">\n <Calendar\n mode=\"range\"\n numberOfMonths={isMobile ? 1 : 2}\n selected={calendarSelected}\n onSelect={handleCalendarSelect}\n disabled={(date) => {\n if (maxDate && date > maxDate) return true\n if (minDate && date < minDate) return true\n return false\n }}\n />\n </div>\n </PopoverContent>\n </Popover>\n </div>\n )\n },\n)\nDateRangePicker.displayName = \"DateRangePicker\"\n\nexport type { DateRange as RdpDateRange } from \"react-day-picker\"\n","/**\n * SegmentedControl — a single-select row of buttons over `ToggleGroup`. Base\n * UI's toggle group is multi-value by default, so this wrapper narrows it to\n * one value and refuses to deselect the active segment.\n */\nimport { forwardRef } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { ToggleGroup, ToggleGroupItem } from \"../ui/toggle-group\"\nimport type { SegmentOption } from \"./types\"\n\nconst iconSizes = {\n sm: \"size-3.5\",\n default: \"size-4\",\n lg: \"size-5\",\n} as const\n\nexport interface SegmentedControlProps {\n options: SegmentOption[]\n value: string\n onChange: (value: string) => void\n size?: keyof typeof iconSizes\n fullWidth?: boolean\n ariaLabel?: string\n className?: string\n}\n\nexport const SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n function SegmentedControl(\n { options, value, onChange, size = \"default\", fullWidth = false, ariaLabel, className },\n ref,\n ) {\n return (\n <ToggleGroup\n ref={ref}\n data-slot=\"segmented-control\"\n value={[value]}\n onValueChange={(next) => {\n // Base UI reports the full pressed set; keep the newly added segment\n // and ignore the empty set so the control never loses its selection.\n const picked = next.find((item) => item !== value) ?? next[0]\n if (typeof picked === \"string\") onChange(picked)\n }}\n variant=\"outline\"\n size={size}\n spacing={0}\n aria-label={ariaLabel}\n className={cn(fullWidth && \"w-full\", className)}\n >\n {options.map((option) => {\n const Icon = option.icon\n return (\n <ToggleGroupItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n aria-label={option.label}\n className={cn(fullWidth && \"flex-1\")}\n >\n {Icon && <Icon className={iconSizes[size]} aria-hidden=\"true\" />}\n {option.label}\n </ToggleGroupItem>\n )\n })}\n </ToggleGroup>\n )\n },\n)\nSegmentedControl.displayName = \"SegmentedControl\"\n","/**\n * Shared data shapes for the composite dashboard components. Kept in one place\n * so filters, metrics and date pickers agree on the same vocabulary.\n */\nimport type { ComponentType, ReactNode } from \"react\"\n\n/* ---------------------------------------------------------------- filters */\n\nexport interface FilterOption {\n label: string\n value: string\n count?: number\n disabled?: boolean\n}\n\nexport type FilterType = \"select\" | \"multi-select\" | \"date-range\" | \"search\"\n\nexport interface FilterConfig {\n /** Unique key for this filter */\n key: string\n /** Display label */\n label: string\n /** Filter input type */\n type: FilterType\n /** Available options (for select/multi-select) */\n options?: FilterOption[]\n /** Placeholder text */\n placeholder?: string\n /** Default value */\n defaultValue?: string | string[]\n}\n\nexport type FilterValues = Record<string, string | string[] | undefined>\n\nexport interface SegmentOption {\n label: string\n value: string\n icon?: ComponentType<{ className?: string }>\n disabled?: boolean\n}\n\n/* ------------------------------------------------------------------ dates */\n\nexport interface DateRange {\n from: Date | undefined\n to: Date | undefined\n}\n\nexport interface PresetItem {\n label: string\n getValue: () => DateRange\n}\n\n/* ---------------------------------------------------------------- metrics */\n\nexport type TrendDirection = \"up\" | \"down\" | \"neutral\"\n\nexport type MetricVariant = \"default\" | \"primary\" | \"accent\" | \"muted\"\n\nexport interface MetricItem {\n /** Unique identifier for the metric */\n id: string\n /** Display label for the metric */\n label: string\n /** Current value (formatted string or number) */\n value: string | number\n /** Optional unit suffix (e.g. \"円\", \"%\", \"件\") */\n unit?: string\n /** Trend direction */\n trend?: TrendDirection\n /** Trend change value */\n trendValue?: number\n /** Optional description or subtitle */\n description?: string\n /** Whether higher values are positive (default: true) */\n positiveIsGood?: boolean\n /** Visual emphasis variant */\n variant?: MetricVariant\n}\n\n/* ------------------------------------------------------------- navigation */\n\nexport interface NavItem {\n /** Display label */\n label: string\n /** Route path or URL */\n href: string\n /** Icon component (e.g. a `lucide-react` icon) */\n icon?: ComponentType<{ className?: string }>\n /** Whether this item is currently active */\n isActive?: boolean\n /** Whether this item is disabled */\n disabled?: boolean\n /** Optional badge text (e.g. notification count) */\n badge?: string\n /** Nested child items */\n children?: NavItem[]\n}\n\nexport interface NavGroup {\n /** Group label */\n label?: string\n /** Items in this group */\n items: NavItem[]\n}\n\n/* ----------------------------------------------------------------- select */\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n icon?: ComponentType<{ className?: string }>\n description?: ReactNode\n}\n\nexport interface SelectOptionGroup {\n label: string\n options: SelectOption[]\n}\n\nexport type SelectOptions = SelectOption[] | SelectOptionGroup[]\n\nexport function isGroupedOptions(options: SelectOptions): options is SelectOptionGroup[] {\n return options.length > 0 && \"options\" in options[0]!\n}\n\nexport function flattenOptions(options: SelectOptions): SelectOption[] {\n if (isGroupedOptions(options)) {\n return options.flatMap((group) => group.options)\n }\n return options\n}\n\n/* ----------------------------------------------------------------- charts */\n\n/**\n * A chart colour: one of the theme's series tokens (`\"chart-1\"`〜`\"chart-5\"`,\n * which follow light/dark) or any CSS colour (`\"#16a34a\"`, `\"var(--destructive)\"`).\n * Not a Tailwind class — the ECharts-based charts paint on a canvas.\n */\nexport type ChartColor = \"chart-1\" | \"chart-2\" | \"chart-3\" | \"chart-4\" | \"chart-5\" | (string & {})\n\n/** Formats a value for tooltips, axes and labels (e.g. `(v) => \\`¥${v.toLocaleString()}\\``). */\nexport type ValueFormatter = (value: number) => string\n\n/** What a typed chart reports through `onValueChange`; `null` when the selection is cleared. */\nexport type ChartEventPayload = {\n /** What was clicked: a bar, a line/area point, or a donut slice. */\n eventType: \"bar\" | \"dot\" | \"slice\"\n /** The series (`categories` entry) or slice name that was clicked. */\n categoryClicked: string\n /** The clicked row of `data`, spread in. */\n [key: string]: unknown\n} | null\n","/**\n * Internal building blocks shared by SearchableSelect and MultiSelect — the two\n * combobox variants differ only in their trigger and in single- vs multi-value\n * selection, so the Command list and the removable ×-affordance live here.\n * Not part of the public surface; both consumers import it with `.js`.\n */\nimport type { KeyboardEvent, MouseEvent } from \"react\"\nimport { CheckIcon, LoaderIcon, XIcon } from \"lucide-react\"\n\nimport { cn } from \"../ui/cn\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command\"\nimport { isGroupedOptions, type SelectOption, type SelectOptions } from \"./types\"\n\nexport interface OptionCommandListProps {\n options: SelectOptions\n /** Whether the given option value is currently selected (drives the check). */\n isSelected: (value: string) => boolean\n onSelect: (value: string) => void\n /** Take filtering over yourself (server-side search); turns off built-in filter. */\n onSearch?: (query: string) => void\n isLoading: boolean\n searchPlaceholder: string\n emptyText: string\n}\n\n/** The searchable list body — flat or grouped, with loading and empty states. */\nexport function OptionCommandList({\n options,\n isSelected,\n onSelect,\n onSearch,\n isLoading,\n searchPlaceholder,\n emptyText,\n}: OptionCommandListProps) {\n const renderOptions = (items: SelectOption[]) =>\n items.map((option) => (\n <CommandItem\n key={option.value}\n value={option.value}\n keywords={[option.label]}\n disabled={option.disabled}\n onSelect={onSelect}\n >\n {option.icon && <option.icon className=\"size-4 shrink-0\" />}\n <span className=\"flex-1 truncate\">\n {option.label}\n {option.description && (\n <span className=\"ml-2 text-xs text-muted-foreground\">{option.description}</span>\n )}\n </span>\n <CheckIcon\n className={cn(\"size-4 shrink-0\", isSelected(option.value) ? \"opacity-100\" : \"opacity-0\")}\n />\n </CommandItem>\n ))\n\n return (\n <Command shouldFilter={!onSearch}>\n <CommandInput placeholder={searchPlaceholder} onValueChange={onSearch} />\n <CommandList>\n {isLoading ? (\n <div className=\"flex items-center justify-center py-6\">\n <LoaderIcon className=\"size-4 animate-spin text-muted-foreground\" />\n </div>\n ) : (\n <>\n <CommandEmpty>{emptyText}</CommandEmpty>\n {isGroupedOptions(options)\n ? options.map((group) => (\n <CommandGroup key={group.label} heading={group.label}>\n {renderOptions(group.options)}\n </CommandGroup>\n ))\n : renderOptions(options)}\n </>\n )}\n </CommandList>\n </Command>\n )\n}\n\nexport interface RemoveButtonProps {\n label: string\n /** Runs on click and on Enter/Space; propagation is stopped for you. */\n onRemove: () => void\n /** Override the X icon size (default `size-3.5`). */\n iconClassName?: string\n}\n\n/** The keyboard-accessible ×-affordance inside a badge or trigger. */\nexport function RemoveButton({ label, onRemove, iconClassName }: RemoveButtonProps) {\n const handle = (e: MouseEvent | KeyboardEvent) => {\n e.stopPropagation()\n onRemove()\n }\n return (\n <span\n role=\"button\"\n tabIndex={0}\n aria-label={label}\n className=\"rounded-sm opacity-50 hover:opacity-100 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none\"\n onClick={handle}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") handle(e)\n }}\n >\n <XIcon className={cn(\"size-3.5\", iconClassName)} />\n </span>\n )\n}\n","/**\n * SearchableSelect — a single-select combobox with a filter box. Filtering runs\n * client-side over the given options; pass `onSearch` to take it over yourself\n * (server-side search), which turns the built-in filter off.\n */\nimport { forwardRef, useMemo, useState } from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Button } from \"../ui/button\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\"\nimport { OptionCommandList, RemoveButton } from \"./option-command\"\nimport { flattenOptions, type SelectOptions } from \"./types\"\n\nexport interface SearchableSelectProps {\n options: SelectOptions\n value?: string\n onChange?: (value: string | undefined) => void\n onSearch?: (query: string) => void\n placeholder?: string\n searchPlaceholder?: string\n emptyText?: string\n isLoading?: boolean\n disabled?: boolean\n clearable?: boolean\n className?: string\n}\n\nexport const SearchableSelect = forwardRef<HTMLDivElement, SearchableSelectProps>(\n function SearchableSelect(\n {\n options,\n value,\n onChange,\n onSearch,\n placeholder = \"選択してください\",\n searchPlaceholder = \"検索...\",\n emptyText = \"見つかりませんでした\",\n isLoading = false,\n disabled = false,\n clearable = true,\n className,\n },\n ref,\n ) {\n const [open, setOpen] = useState(false)\n\n const allOptions = useMemo(() => flattenOptions(options), [options])\n const selectedOption = useMemo(\n () => allOptions.find((opt) => opt.value === value),\n [allOptions, value],\n )\n\n function handleSelect(selectedValue: string) {\n onChange?.(selectedValue === value ? undefined : selectedValue)\n setOpen(false)\n }\n\n return (\n <div ref={ref} data-slot=\"searchable-select\">\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n render={\n <Button\n variant=\"outline\"\n disabled={disabled}\n className={cn(\n \"w-full justify-between font-normal\",\n !selectedOption && \"text-muted-foreground\",\n className,\n )}\n />\n }\n role=\"combobox\"\n aria-expanded={open}\n >\n <span className=\"truncate\">{selectedOption ? selectedOption.label : placeholder}</span>\n <span className=\"flex shrink-0 items-center gap-1\">\n {clearable && value && (\n <RemoveButton label=\"クリア\" onRemove={() => onChange?.(undefined)} />\n )}\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </span>\n </PopoverTrigger>\n <PopoverContent className=\"w-(--anchor-width) p-0\" align=\"start\">\n <OptionCommandList\n options={options}\n isSelected={(v) => value === v}\n onSelect={handleSelect}\n onSearch={onSearch}\n isLoading={isLoading}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n />\n </PopoverContent>\n </Popover>\n </div>\n )\n },\n)\nSearchableSelect.displayName = \"SearchableSelect\"\n","/**\n * MultiSelect — a multi-value combobox that shows the selection as removable\n * badges. Past `maxCount` badges the rest collapse into a \"+N件\" counter.\n * Pass `onSearch` to take filtering over yourself (server-side search).\n */\nimport { forwardRef, useId, useMemo, useState } from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Badge } from \"../ui/badge\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover\"\nimport { OptionCommandList, RemoveButton } from \"./option-command\"\nimport { flattenOptions, type SelectOptions } from \"./types\"\n\nexport interface MultiSelectProps {\n options: SelectOptions\n value: string[]\n onChange?: (value: string[]) => void\n onSearch?: (query: string) => void\n maxCount?: number\n placeholder?: string\n searchPlaceholder?: string\n emptyText?: string\n isLoading?: boolean\n disabled?: boolean\n className?: string\n}\n\nexport const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(function MultiSelect(\n {\n options,\n value,\n onChange,\n onSearch,\n maxCount = 3,\n placeholder = \"選択してください\",\n searchPlaceholder = \"検索...\",\n emptyText = \"見つかりませんでした\",\n isLoading = false,\n disabled = false,\n className,\n },\n ref,\n) {\n const [open, setOpen] = useState(false)\n const listId = useId()\n\n const allOptions = useMemo(() => flattenOptions(options), [options])\n const selectedOptions = useMemo(\n () => allOptions.filter((opt) => value.includes(opt.value)),\n [allOptions, value],\n )\n\n function handleSelect(selectedValue: string) {\n if (value.includes(selectedValue)) {\n onChange?.(value.filter((v) => v !== selectedValue))\n } else {\n onChange?.([...value, selectedValue])\n }\n }\n\n const visibleBadges = selectedOptions.slice(0, maxCount)\n const overflowCount = selectedOptions.length - maxCount\n\n return (\n <div ref={ref} data-slot=\"multi-select\">\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listId}\n disabled={disabled}\n className={cn(\n \"inline-flex min-h-9 w-full items-center justify-between gap-2 rounded-md border bg-background px-3 py-1.5 text-sm shadow-xs transition-all outline-none hover:bg-accent hover:text-accent-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n className,\n )}\n >\n <span className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\n {selectedOptions.length === 0 ? (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n ) : (\n <>\n {visibleBadges.map((option) => (\n <Badge key={option.value} variant=\"secondary\" className=\"shrink-0 gap-1 pr-1\">\n <span className=\"max-w-[120px] truncate\">{option.label}</span>\n <RemoveButton\n label={`${option.label}を削除`}\n onRemove={() => onChange?.(value.filter((v) => v !== option.value))}\n iconClassName=\"size-3\"\n />\n </Badge>\n ))}\n {overflowCount > 0 && (\n <Badge variant=\"secondary\" className=\"shrink-0\">\n +{overflowCount}件\n </Badge>\n )}\n </>\n )}\n </span>\n <ChevronDownIcon className=\"size-4 shrink-0 opacity-50\" />\n </PopoverTrigger>\n <PopoverContent id={listId} className=\"w-(--anchor-width) p-0\" align=\"start\">\n <OptionCommandList\n options={options}\n isSelected={(v) => value.includes(v)}\n onSelect={handleSelect}\n onSearch={onSearch}\n isLoading={isLoading}\n searchPlaceholder={searchPlaceholder}\n emptyText={emptyText}\n />\n </PopoverContent>\n </Popover>\n </div>\n )\n})\nMultiSelect.displayName = \"MultiSelect\"\n","/**\n * MetricValue / MetricUnit — the large number in a dashboard tile and its\n * trailing unit, sized as a pair so the unit stays subordinate at every size.\n */\nimport { forwardRef, type HTMLAttributes } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../ui/cn\"\n\nexport const metricValueVariants = cva(\"font-medium tracking-tight\", {\n variants: {\n size: {\n sm: \"text-base\",\n md: \"text-2xl\",\n lg: \"text-3xl\",\n xl: \"text-4xl\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n})\n\nexport interface MetricValueProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof metricValueVariants> {}\n\nexport const MetricValue = forwardRef<HTMLDivElement, MetricValueProps>(\n ({ className, size, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"metric-value\"\n className={cn(\"my-4\", metricValueVariants({ size }), className)}\n {...props}\n />\n ),\n)\nMetricValue.displayName = \"MetricValue\"\n\nexport interface MetricUnitProps extends HTMLAttributes<HTMLSpanElement> {}\n\nexport const MetricUnit = forwardRef<HTMLSpanElement, MetricUnitProps>(\n ({ className, ...props }, ref) => (\n <span\n ref={ref}\n data-slot=\"metric-unit\"\n className={cn(\"text-sm font-normal text-muted-foreground\", className)}\n {...props}\n />\n ),\n)\nMetricUnit.displayName = \"MetricUnit\"\n","/**\n * TrendIndicator — an arrow plus percentage change. Colour tracks *sentiment*,\n * not direction: set `positiveIsGood={false}` for metrics where going up is bad\n * (churn, error rate) and a rise renders as negative.\n */\nimport { forwardRef } from \"react\"\nimport { ArrowDown, ArrowUp, Minus } from \"lucide-react\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"../ui/cn\"\nimport type { TrendDirection } from \"./types\"\n\nconst trendIndicatorVariants = cva(\"inline-flex items-center gap-0.5 text-sm font-medium\", {\n variants: {\n sentiment: {\n positive: \"text-chart-1\",\n negative: \"text-primary\",\n neutral: \"text-muted-foreground\",\n },\n },\n defaultVariants: {\n sentiment: \"neutral\",\n },\n})\n\nexport interface TrendIndicatorProps {\n value: number\n direction: TrendDirection\n positiveIsGood?: boolean\n className?: string\n}\n\nexport const TrendIndicator = forwardRef<HTMLSpanElement, TrendIndicatorProps>(\n ({ value, direction, positiveIsGood = true, className }, ref) => {\n const isGood = direction === \"neutral\" ? null : (direction === \"up\") === positiveIsGood\n const sentiment = isGood === null ? \"neutral\" : isGood ? \"positive\" : \"negative\"\n\n const Icon = direction === \"up\" ? ArrowUp : direction === \"down\" ? ArrowDown : Minus\n\n const ariaLabel =\n direction === \"neutral\"\n ? `変化なし ${value}%`\n : direction === \"up\"\n ? `${value}% 増加`\n : `${value}% 減少`\n\n return (\n <span\n ref={ref}\n data-slot=\"trend-indicator\"\n className={cn(trendIndicatorVariants({ sentiment }), className)}\n aria-label={ariaLabel}\n >\n <Icon className=\"size-3.5\" aria-hidden=\"true\" />\n <span>{value}%</span>\n </span>\n )\n },\n)\nTrendIndicator.displayName = \"TrendIndicator\"\n","/**\n * StatusBadge — a dot-plus-label badge for row/record status. Statuses map to\n * colours through `defaultColorMap`; pass `colorMap` to extend or override it.\n */\nimport { forwardRef } from \"react\"\n\nimport { cn } from \"../ui/cn\"\nimport { Badge } from \"../ui/badge\"\n\nconst defaultColorMap: Record<string, string> = {\n active: \"green\",\n inactive: \"gray\",\n warning: \"yellow\",\n error: \"red\",\n pending: \"blue\",\n}\n\nconst colorStyles: Record<string, { dot: string; bg: string; text: string }> = {\n green: {\n dot: \"bg-green-500\",\n bg: \"bg-green-50 dark:bg-green-950\",\n text: \"text-green-700 dark:text-green-300\",\n },\n gray: {\n dot: \"bg-gray-500\",\n bg: \"bg-gray-50 dark:bg-gray-950\",\n text: \"text-gray-700 dark:text-gray-300\",\n },\n yellow: {\n dot: \"bg-yellow-500\",\n bg: \"bg-yellow-50 dark:bg-yellow-950\",\n text: \"text-yellow-700 dark:text-yellow-300\",\n },\n red: {\n dot: \"bg-red-500\",\n bg: \"bg-red-50 dark:bg-red-950\",\n text: \"text-red-700 dark:text-red-300\",\n },\n blue: {\n dot: \"bg-blue-500\",\n bg: \"bg-blue-50 dark:bg-blue-950\",\n text: \"text-blue-700 dark:text-blue-300\",\n },\n}\n\nconst fallbackStyle = colorStyles.gray!\n\nexport interface StatusBadgeProps {\n status: string\n label?: string\n colorMap?: Partial<Record<string, string>>\n className?: string\n}\n\nexport const StatusBadge = forwardRef<HTMLSpanElement, StatusBadgeProps>(function StatusBadge(\n { status, label, colorMap, className },\n ref,\n) {\n const mergedColorMap = { ...defaultColorMap, ...colorMap }\n const color = mergedColorMap[status] ?? \"gray\"\n const style = colorStyles[color] ?? fallbackStyle\n const displayLabel = label ?? status\n\n return (\n <Badge\n ref={ref}\n data-slot=\"status-badge\"\n variant=\"outline\"\n className={cn(\"gap-1.5 border-transparent\", style.bg, style.text, className)}\n aria-label={displayLabel}\n >\n <span className={cn(\"inline-block size-2 rounded-full\", style.dot)} aria-hidden=\"true\" />\n {displayLabel}\n </Badge>\n )\n})\nStatusBadge.displayName = \"StatusBadge\"\n","/**\n * Placeholder — marks sample (not-yet-real) data on a template screen.\n *\n * Renders an inline `<span>`, so it is safe inside headings and descriptions\n * (unlike `Skeleton`, which is a block `<div>`). The `animate-pulse` + muted\n * styling signals \"this is placeholder data — swap in your real values\".\n * Override size/weight through `className` (e.g. `text-2xl font-bold`).\n */\nimport { forwardRef, type HTMLAttributes } from \"react\"\n\nimport { cn } from \"../ui/cn\"\n\nexport interface PlaceholderProps extends HTMLAttributes<HTMLSpanElement> {}\n\nexport const Placeholder = forwardRef<HTMLSpanElement, PlaceholderProps>(function Placeholder(\n { className, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n data-slot=\"placeholder\"\n className={cn(\"inline-block animate-pulse text-muted-foreground\", className)}\n {...props}\n />\n )\n})\nPlaceholder.displayName = \"Placeholder\"\n"]}