@squadbase/vantage 0.0.1 → 0.1.1

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 (187) hide show
  1. package/README.md +24 -4
  2. package/dist/{chunk-ZGDU5YLH.js → chunk-5L2MH2NG.js} +16 -7
  3. package/dist/chunk-5L2MH2NG.js.map +1 -0
  4. package/dist/chunk-7IPAXPPY.js +51 -0
  5. package/dist/chunk-7IPAXPPY.js.map +1 -0
  6. package/dist/chunk-A2UUGASH.js +12 -0
  7. package/dist/chunk-A2UUGASH.js.map +1 -0
  8. package/dist/chunk-DTDVSFRY.js +29 -0
  9. package/dist/chunk-DTDVSFRY.js.map +1 -0
  10. package/dist/chunk-WQZYXXQW.js +2249 -0
  11. package/dist/chunk-WQZYXXQW.js.map +1 -0
  12. package/dist/{chunk-73J5ZD4C.js → chunk-YLAB6UQS.js} +17 -3
  13. package/dist/chunk-YLAB6UQS.js.map +1 -0
  14. package/dist/cli.js +607 -36
  15. package/dist/cli.js.map +1 -1
  16. package/dist/client/index.d.ts +2 -1
  17. package/dist/client/index.js +3 -1
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/components/index.d.ts +575 -0
  20. package/dist/components/index.js +2097 -0
  21. package/dist/components/index.js.map +1 -0
  22. package/dist/{define-page-B6y9TOfZ.d.ts → define-page-BfhrK99G.d.ts} +5 -0
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/markdown/index.d.ts +9 -0
  27. package/dist/markdown/index.js +26 -0
  28. package/dist/markdown/index.js.map +1 -0
  29. package/dist/query/index.d.ts +95 -2
  30. package/dist/query/index.js +102 -1
  31. package/dist/query/index.js.map +1 -1
  32. package/dist/router/index.d.ts +86 -1
  33. package/dist/router/index.js +71 -7
  34. package/dist/router/index.js.map +1 -1
  35. package/dist/server/node.js +6 -1
  36. package/dist/server/node.js.map +1 -1
  37. package/dist/ui/index.d.ts +316 -200
  38. package/dist/ui/index.js +566 -511
  39. package/dist/ui/index.js.map +1 -1
  40. package/dist/vite/index.js +2 -2
  41. package/docs/en/agent-skills.md +89 -0
  42. package/docs/en/api-and-server.md +84 -0
  43. package/docs/en/build-and-deploy.md +280 -0
  44. package/docs/en/cli-reference.md +311 -0
  45. package/docs/en/components.md +235 -0
  46. package/docs/en/data-fetching.md +142 -0
  47. package/docs/en/environment-variables.md +69 -0
  48. package/docs/en/getting-started.md +95 -0
  49. package/docs/en/index.md +65 -0
  50. package/docs/en/markdown/markdown-renderer.md +44 -0
  51. package/docs/en/pages-and-metadata.md +59 -0
  52. package/docs/en/parts/app-shell.md +54 -0
  53. package/docs/en/parts/dashboard-card.md +64 -0
  54. package/docs/en/parts/data-table.md +86 -0
  55. package/docs/en/parts/date-range-picker.md +41 -0
  56. package/docs/en/parts/echart.md +53 -0
  57. package/docs/en/parts/filter-bar.md +66 -0
  58. package/docs/en/parts/funnel-steps.md +33 -0
  59. package/docs/en/parts/metric-value.md +23 -0
  60. package/docs/en/parts/multi-select.md +27 -0
  61. package/docs/en/parts/page-shell.md +45 -0
  62. package/docs/en/parts/placeholder.md +38 -0
  63. package/docs/en/parts/searchable-select.md +47 -0
  64. package/docs/en/parts/section-header.md +20 -0
  65. package/docs/en/parts/segmented-control.md +25 -0
  66. package/docs/en/parts/sparkline.md +47 -0
  67. package/docs/en/parts/status-badge.md +44 -0
  68. package/docs/en/parts/trend-indicator.md +26 -0
  69. package/docs/en/routing.md +177 -0
  70. package/docs/en/ui/accordion.md +36 -0
  71. package/docs/en/ui/alert.md +31 -0
  72. package/docs/en/ui/badge.md +23 -0
  73. package/docs/en/ui/breadcrumb.md +38 -0
  74. package/docs/en/ui/button.md +39 -0
  75. package/docs/en/ui/calendar.md +28 -0
  76. package/docs/en/ui/card.md +35 -0
  77. package/docs/en/ui/checkbox.md +34 -0
  78. package/docs/en/ui/cn.md +34 -0
  79. package/docs/en/ui/collapsible.md +21 -0
  80. package/docs/en/ui/command.md +37 -0
  81. package/docs/en/ui/dialog.md +52 -0
  82. package/docs/en/ui/dropdown-menu.md +50 -0
  83. package/docs/en/ui/empty.md +22 -0
  84. package/docs/en/ui/error-state.md +50 -0
  85. package/docs/en/ui/input-group.md +30 -0
  86. package/docs/en/ui/input.md +28 -0
  87. package/docs/en/ui/label.md +19 -0
  88. package/docs/en/ui/loading.md +19 -0
  89. package/docs/en/ui/popover.md +34 -0
  90. package/docs/en/ui/progress.md +28 -0
  91. package/docs/en/ui/scroll-area.md +23 -0
  92. package/docs/en/ui/select.md +63 -0
  93. package/docs/en/ui/separator.md +15 -0
  94. package/docs/en/ui/sheet.md +28 -0
  95. package/docs/en/ui/sidebar.md +92 -0
  96. package/docs/en/ui/skeleton.md +16 -0
  97. package/docs/en/ui/slider.md +21 -0
  98. package/docs/en/ui/spinner.md +14 -0
  99. package/docs/en/ui/switch.md +19 -0
  100. package/docs/en/ui/table.md +24 -0
  101. package/docs/en/ui/tabs.md +23 -0
  102. package/docs/en/ui/textarea.md +15 -0
  103. package/docs/en/ui/toggle-group.md +26 -0
  104. package/docs/en/ui/toggle.md +19 -0
  105. package/docs/en/ui/tooltip.md +22 -0
  106. package/docs/en/ui/use-is-mobile.md +18 -0
  107. package/docs/en/ui-and-theming.md +95 -0
  108. package/docs/index.json +1346 -0
  109. package/docs/ja/agent-skills.md +87 -0
  110. package/docs/ja/api-and-server.md +84 -0
  111. package/docs/ja/build-and-deploy.md +279 -0
  112. package/docs/ja/cli-reference.md +305 -0
  113. package/docs/ja/components.md +231 -0
  114. package/docs/ja/data-fetching.md +142 -0
  115. package/docs/ja/environment-variables.md +68 -0
  116. package/docs/ja/getting-started.md +95 -0
  117. package/docs/ja/index.md +65 -0
  118. package/docs/ja/markdown/markdown-renderer.md +43 -0
  119. package/docs/ja/pages-and-metadata.md +59 -0
  120. package/docs/ja/parts/app-shell.md +54 -0
  121. package/docs/ja/parts/dashboard-card.md +64 -0
  122. package/docs/ja/parts/data-table.md +85 -0
  123. package/docs/ja/parts/date-range-picker.md +41 -0
  124. package/docs/ja/parts/echart.md +52 -0
  125. package/docs/ja/parts/filter-bar.md +64 -0
  126. package/docs/ja/parts/funnel-steps.md +33 -0
  127. package/docs/ja/parts/metric-value.md +25 -0
  128. package/docs/ja/parts/multi-select.md +27 -0
  129. package/docs/ja/parts/page-shell.md +45 -0
  130. package/docs/ja/parts/placeholder.md +37 -0
  131. package/docs/ja/parts/searchable-select.md +47 -0
  132. package/docs/ja/parts/section-header.md +20 -0
  133. package/docs/ja/parts/segmented-control.md +26 -0
  134. package/docs/ja/parts/sparkline.md +47 -0
  135. package/docs/ja/parts/status-badge.md +44 -0
  136. package/docs/ja/parts/trend-indicator.md +26 -0
  137. package/docs/ja/routing.md +175 -0
  138. package/docs/ja/ui/accordion.md +37 -0
  139. package/docs/ja/ui/alert.md +31 -0
  140. package/docs/ja/ui/badge.md +23 -0
  141. package/docs/ja/ui/breadcrumb.md +38 -0
  142. package/docs/ja/ui/button.md +39 -0
  143. package/docs/ja/ui/calendar.md +28 -0
  144. package/docs/ja/ui/card.md +35 -0
  145. package/docs/ja/ui/checkbox.md +34 -0
  146. package/docs/ja/ui/cn.md +34 -0
  147. package/docs/ja/ui/collapsible.md +21 -0
  148. package/docs/ja/ui/command.md +36 -0
  149. package/docs/ja/ui/dialog.md +51 -0
  150. package/docs/ja/ui/dropdown-menu.md +50 -0
  151. package/docs/ja/ui/empty.md +22 -0
  152. package/docs/ja/ui/error-state.md +50 -0
  153. package/docs/ja/ui/input-group.md +30 -0
  154. package/docs/ja/ui/input.md +28 -0
  155. package/docs/ja/ui/label.md +19 -0
  156. package/docs/ja/ui/loading.md +19 -0
  157. package/docs/ja/ui/popover.md +34 -0
  158. package/docs/ja/ui/progress.md +28 -0
  159. package/docs/ja/ui/scroll-area.md +24 -0
  160. package/docs/ja/ui/select.md +64 -0
  161. package/docs/ja/ui/separator.md +15 -0
  162. package/docs/ja/ui/sheet.md +28 -0
  163. package/docs/ja/ui/sidebar.md +92 -0
  164. package/docs/ja/ui/skeleton.md +16 -0
  165. package/docs/ja/ui/slider.md +21 -0
  166. package/docs/ja/ui/spinner.md +14 -0
  167. package/docs/ja/ui/switch.md +19 -0
  168. package/docs/ja/ui/table.md +24 -0
  169. package/docs/ja/ui/tabs.md +24 -0
  170. package/docs/ja/ui/textarea.md +15 -0
  171. package/docs/ja/ui/toggle-group.md +27 -0
  172. package/docs/ja/ui/toggle.md +19 -0
  173. package/docs/ja/ui/tooltip.md +22 -0
  174. package/docs/ja/ui/use-is-mobile.md +18 -0
  175. package/docs/ja/ui-and-theming.md +95 -0
  176. package/package.json +29 -4
  177. package/registry/blocks/sales-overview.tsx +43 -19
  178. package/registry/ui/data-table.tsx +702 -102
  179. package/skills/vantage-add-feature/SKILL.md +153 -0
  180. package/skills/vantage-app/SKILL.md +291 -0
  181. package/skills/vantage-pitfalls/SKILL.md +139 -0
  182. package/templates/AGENTS.md +313 -0
  183. package/theme.css +178 -40
  184. package/dist/chunk-73J5ZD4C.js.map +0 -1
  185. package/dist/chunk-ATYZ45XL.js +0 -19
  186. package/dist/chunk-ATYZ45XL.js.map +0 -1
  187. package/dist/chunk-ZGDU5YLH.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/echart.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","cva","FunnelSteps","useState","useEffect","Sparkline","Fragment","useCallback","table","createContext","useContext","useMemo","DateRangePicker","SegmentedControl","SearchableSelect","MultiSelect","ChevronDownIcon","ArrowUp","ArrowDown","StatusBadge","Placeholder"],"mappings":"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","file":"index.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.js\"\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\nexport const PageShellHeader = forwardRef<HTMLDivElement, PageShellHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-shell-header\"\n className={cn(\n \"grid grid-cols-[1fr_auto] items-start gap-x-4 gap-y-6 border-b px-6 py-12\",\n className,\n )}\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 ref={ref} data-slot=\"page-shell-heading\" className={cn(\"min-w-0\", className)} {...props} />\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 shrink-0 flex-col 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 \"col-span-full grid 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.js\"\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../ui/collapsible.js\"\nimport { Separator } from \"../ui/separator.js\"\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select.js\"\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.js\"\nimport type { NavGroup, NavItem } from \"./types.js\"\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 // Base UI's `Select.Value` renders the value, not the item's children —\n // without this map the trigger would read \"/sales\" instead of \"売上\".\n items={Object.fromEntries(allItems.map((item) => [item.href, item.label]))}\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 <SelectContent>\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.js\"\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.js\"\nimport { Skeleton } from \"../ui/skeleton.js\"\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 * 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. Styling is entirely yours:\n * pass a `theme` to `echarts.init` or set colours in `option`. Charts do not\n * auto-follow the design tokens.\n */\nimport { forwardRef, useCallback, useEffect, 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.js\"\nimport { Button } from \"../ui/button.js\"\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 /** `echarts.init` にそのまま渡すテーマ(名前または登録済みテーマオブジェクト)。 */\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 // init / re-init: theme 変更時はインスタンスを破棄して作り直す\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n const inst = echarts.init(container, theme, { renderer: \"canvas\" })\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 }, [theme])\n\n useEffect(() => {\n if (!instance) return\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 * 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.js\"\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.js\"\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.js\"\nimport { Button } from \"../ui/button.js\"\nimport { Checkbox } from \"../ui/checkbox.js\"\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu.js\"\nimport { Input } from \"../ui/input.js\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\"\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"../ui/table.js\"\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 items={Object.fromEntries(pageSizeOptions.map((size) => [String(size), `${size}件`]))}\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 useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\"\nimport { ChevronDown, X } from \"lucide-react\"\n\nimport { cn } from \"../ui/cn.js\"\nimport { Badge } from \"../ui/badge.js\"\nimport { Button } from \"../ui/button.js\"\nimport { Checkbox } from \"../ui/checkbox.js\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover.js\"\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select.js\"\nimport type { FilterConfig, FilterOption, FilterValues } from \"./types.js\"\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 // Base UI's `Select.Value` renders the selected *value*, not the matching\n // item's children, so without this map the trigger shows \"kanto\" where the\n // list shows \"関東\". `items` is what teaches it the labels.\n const items = useMemo(\n () => Object.fromEntries(options.map((option) => [option.value, option.label])),\n [options],\n )\n\n return (\n <Select\n items={items}\n value={(value[filterKey] as string) ?? \"\"}\n onValueChange={handleChange}\n >\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.js\"\nimport { useIsMobile } from \"../ui/use-mobile.js\"\nimport { Button } from \"../ui/button.js\"\nimport { Calendar } from \"../ui/calendar.js\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover.js\"\nimport type { DateRange, PresetItem } from \"./types.js\"\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.js\"\nimport { ToggleGroup, ToggleGroupItem } from \"../ui/toggle-group.js\"\nimport type { SegmentOption } from \"./types.js\"\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 * 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.js\"\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from \"../ui/command.js\"\nimport { isGroupedOptions, type SelectOption, type SelectOptions } from \"./types.js\"\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.js\"\nimport { Button } from \"../ui/button.js\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover.js\"\nimport { OptionCommandList, RemoveButton } from \"./option-command.js\"\nimport { flattenOptions, type SelectOptions } from \"./types.js\"\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.js\"\nimport { Badge } from \"../ui/badge.js\"\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/popover.js\"\nimport { OptionCommandList, RemoveButton } from \"./option-command.js\"\nimport { flattenOptions, type SelectOptions } from \"./types.js\"\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.js\"\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.js\"\nimport type { TrendDirection } from \"./types.js\"\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.js\"\nimport { Badge } from \"../ui/badge.js\"\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.js\"\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"]}
@@ -9,6 +9,11 @@ interface PageConfig {
9
9
  title?: string;
10
10
  /** Description metadata for the page. */
11
11
  description?: string;
12
+ /**
13
+ * Short label for navigation built from `useRoutes()`. Defaults to `title`,
14
+ * which is often too long for a nav ("Overview · Acme Analytics").
15
+ */
16
+ navLabel?: string;
12
17
  /**
13
18
  * Component rendered while the route is loading.
14
19
  * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { P as PageComponent, a as PageConfig, d as definePage } from './define-page-B6y9TOfZ.js';
1
+ export { P as PageComponent, a as PageConfig, d as definePage } from './define-page-BfhrK99G.js';
2
2
  import 'react';
3
3
 
4
4
  /**
@@ -10,6 +10,6 @@ import 'react';
10
10
  */
11
11
 
12
12
  /** Framework version, kept in sync with package.json at build time. */
13
- declare const VERSION = "0.1.0";
13
+ declare const VERSION = "0.1.1";
14
14
 
15
15
  export { VERSION };
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ function definePage(config) {
6
6
  }
7
7
 
8
8
  // src/index.ts
9
- var VERSION = "0.1.0";
9
+ var VERSION = "0.1.1";
10
10
 
11
11
  export { VERSION, definePage };
12
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/define-page.ts","../src/index.ts"],"names":[],"mappings":";;;AAoCO,SAAS,WAAW,MAAA,EAAgC;AACzD,EAAA,OAAO,MAAA;AACT;;;AC3BO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["import type { ComponentType, ReactNode } from \"react\"\n\n/**\n * Optional per-page configuration. The only required part of a page module is\n * its default-exported component; `definePage` covers everything else.\n */\nexport interface PageConfig {\n /** Document title applied when this route is active. */\n title?: string\n /** Description metadata for the page. */\n description?: string\n /**\n * Component rendered while the route is loading.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n pendingComponent?: ComponentType\n /**\n * Component rendered when the route throws.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n errorComponent?: ComponentType<{ error: unknown }>\n /**\n * Validate/transform the URL search params for this route.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n validateSearch?: (search: Record<string, unknown>) => Record<string, unknown>\n}\n\n/**\n * Declare optional page configuration.\n *\n * ```tsx\n * export const page = definePage({ title: \"Monthly Analysis\" })\n * export default function MonthlyAnalysis() { return <div/> }\n * ```\n */\nexport function definePage(config: PageConfig): PageConfig {\n return config\n}\n\n/** Convenience type for a Vantage page component. */\nexport type PageComponent = ComponentType & { (): ReactNode }\n","/**\n * `@squadbase/vantage` — public runtime surface.\n *\n * The only import most pages need. Server state lives in\n * `@squadbase/vantage/query`, navigation in `@squadbase/vantage/router`,\n * UI in `@squadbase/vantage/ui`, and API types in `@squadbase/vantage/server`.\n */\nexport { definePage } from \"./runtime/define-page.js\"\nexport type { PageConfig, PageComponent } from \"./runtime/define-page.js\"\n\n/** Framework version, kept in sync with package.json at build time. */\nexport const VERSION = \"0.1.0\"\n"]}
1
+ {"version":3,"sources":["../src/runtime/define-page.ts","../src/index.ts"],"names":[],"mappings":";;;AAyCO,SAAS,WAAW,MAAA,EAAgC;AACzD,EAAA,OAAO,MAAA;AACT;;;AChCO,IAAM,OAAA,GAAU","file":"index.js","sourcesContent":["import type { ComponentType, ReactNode } from \"react\"\n\n/**\n * Optional per-page configuration. The only required part of a page module is\n * its default-exported component; `definePage` covers everything else.\n */\nexport interface PageConfig {\n /** Document title applied when this route is active. */\n title?: string\n /** Description metadata for the page. */\n description?: string\n /**\n * Short label for navigation built from `useRoutes()`. Defaults to `title`,\n * which is often too long for a nav (\"Overview · Acme Analytics\").\n */\n navLabel?: string\n /**\n * Component rendered while the route is loading.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n pendingComponent?: ComponentType\n /**\n * Component rendered when the route throws.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n errorComponent?: ComponentType<{ error: unknown }>\n /**\n * Validate/transform the URL search params for this route.\n * (Reserved — not yet applied to Vantage's code-split routes in the prototype.)\n */\n validateSearch?: (search: Record<string, unknown>) => Record<string, unknown>\n}\n\n/**\n * Declare optional page configuration.\n *\n * ```tsx\n * export const page = definePage({ title: \"Monthly Analysis\" })\n * export default function MonthlyAnalysis() { return <div/> }\n * ```\n */\nexport function definePage(config: PageConfig): PageConfig {\n return config\n}\n\n/** Convenience type for a Vantage page component. */\nexport type PageComponent = ComponentType & { (): ReactNode }\n","/**\n * `@squadbase/vantage` — public runtime surface.\n *\n * The only import most pages need. Server state lives in\n * `@squadbase/vantage/query`, navigation in `@squadbase/vantage/router`,\n * UI in `@squadbase/vantage/ui`, and API types in `@squadbase/vantage/server`.\n */\nexport { definePage } from \"./runtime/define-page.js\"\nexport type { PageConfig, PageComponent } from \"./runtime/define-page.js\"\n\n/** Framework version, kept in sync with package.json at build time. */\nexport const VERSION = \"0.1.1\"\n"]}
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+
3
+ interface MarkdownRendererProps {
4
+ content: string;
5
+ className?: string;
6
+ }
7
+ declare const MarkdownRenderer: React.ForwardRefExoticComponent<MarkdownRendererProps & React.RefAttributes<HTMLDivElement>>;
8
+
9
+ export { MarkdownRenderer, type MarkdownRendererProps };
@@ -0,0 +1,26 @@
1
+ import { cn } from '../chunk-A2UUGASH.js';
2
+ import { forwardRef } from 'react';
3
+ import { Streamdown } from 'streamdown';
4
+ import { code } from '@streamdown/code';
5
+ import 'streamdown/styles.css';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ // @squadbase/vantage — generated build. Do not edit.
9
+ var MarkdownRenderer = forwardRef(
10
+ function MarkdownRenderer2({ content, className }, ref) {
11
+ return /* @__PURE__ */ jsx(
12
+ "div",
13
+ {
14
+ ref,
15
+ "data-slot": "markdown-renderer",
16
+ className: cn("text-sm leading-relaxed", className),
17
+ children: /* @__PURE__ */ jsx(Streamdown, { plugins: { code }, children: content })
18
+ }
19
+ );
20
+ }
21
+ );
22
+ MarkdownRenderer.displayName = "MarkdownRenderer";
23
+
24
+ export { MarkdownRenderer };
25
+ //# sourceMappingURL=index.js.map
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/markdown/index.tsx"],"names":["MarkdownRenderer"],"mappings":";;;;;;;;AAyBO,IAAM,gBAAA,GAAmB,UAAA;AAAA,EAC9B,SAASA,iBAAAA,CAAiB,EAAE,OAAA,EAAS,SAAA,IAAa,GAAA,EAAK;AACrD,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,mBAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,QAElD,8BAAC,UAAA,EAAA,EAAW,OAAA,EAAS,EAAE,IAAA,IAAS,QAAA,EAAA,OAAA,EAAQ;AAAA;AAAA,KAC1C;AAAA,EAEJ;AACF;AACA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"index.js","sourcesContent":["/**\n * `@squadbase/vantage/markdown` — markdown rendering, on its own subpath.\n *\n * This lives apart from `@squadbase/vantage/components` on purpose. Streamdown\n * bundles Shiki with every language grammar it supports — several hundred\n * chunks and roughly 11 MB of build output. Re-exporting it from the shared\n * `components` barrel would create an import edge that bundlers cannot drop,\n * so every app would emit that payload whether or not it renders markdown.\n * Behind its own entry, only apps that import this pay for it.\n */\nimport { forwardRef } from \"react\"\nimport { Streamdown } from \"streamdown\"\nimport { code } from \"@streamdown/code\"\n\nimport { cn } from \"../ui/cn.js\"\n\n// Streamdown's own stylesheet. Vite resolves this in the app build; it is\n// scoped to this optional entry, so apps that never import it stay unaffected.\nimport \"streamdown/styles.css\"\n\nexport interface MarkdownRendererProps {\n content: string\n className?: string\n}\n\nexport const MarkdownRenderer = forwardRef<HTMLDivElement, MarkdownRendererProps>(\n function MarkdownRenderer({ content, className }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"markdown-renderer\"\n className={cn(\"text-sm leading-relaxed\", className)}\n >\n <Streamdown plugins={{ code }}>{content}</Streamdown>\n </div>\n )\n },\n)\nMarkdownRenderer.displayName = \"MarkdownRenderer\"\n"]}