@fayz-ai/ui 0.8.3 → 0.8.5

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 (88) hide show
  1. package/dist/ChartWidgetInner-GDE5PBTR.js +46 -0
  2. package/dist/ChartWidgetInner-GDE5PBTR.js.map +1 -0
  3. package/dist/{chunk-BVF2KPTT.js → chunk-G6OKZ7WL.js} +30 -3
  4. package/dist/chunk-G6OKZ7WL.js.map +1 -0
  5. package/dist/{chunk-ID2HQK2Q.js → chunk-KV3MHB6N.js} +116 -213
  6. package/dist/chunk-KV3MHB6N.js.map +1 -0
  7. package/dist/{chunk-A7O7KGNL.js → chunk-OUPJDGKE.js} +27 -43
  8. package/dist/chunk-OUPJDGKE.js.map +1 -0
  9. package/dist/chunk-PVIB724L.js +161 -0
  10. package/dist/chunk-PVIB724L.js.map +1 -0
  11. package/dist/{chunk-O5F4LLSL.js → chunk-VDAYIQX4.js} +208 -8
  12. package/dist/chunk-VDAYIQX4.js.map +1 -0
  13. package/dist/{chunk-2GDQUARM.js → chunk-YLQGUJAQ.js} +24 -42
  14. package/dist/chunk-YLQGUJAQ.js.map +1 -0
  15. package/dist/dashboard/ChartWidget.d.ts.map +1 -1
  16. package/dist/dashboard/ChartWidgetInner.d.ts +11 -0
  17. package/dist/dashboard/ChartWidgetInner.d.ts.map +1 -0
  18. package/dist/dashboard/OnboardingWidget.d.ts.map +1 -1
  19. package/dist/dashboard/index.js +3 -2
  20. package/dist/icons.d.ts +8 -0
  21. package/dist/icons.d.ts.map +1 -0
  22. package/dist/icons.js +3 -0
  23. package/dist/icons.js.map +1 -0
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +6 -6
  27. package/dist/layout/Sidebar.d.ts +5 -2
  28. package/dist/layout/Sidebar.d.ts.map +1 -1
  29. package/dist/layout/index.js +2 -1
  30. package/dist/preset.cjs +201 -11
  31. package/dist/preset.cjs.map +1 -1
  32. package/dist/preset.js +201 -1
  33. package/dist/preset.js.map +1 -1
  34. package/dist/primitives/date-picker.d.ts +7 -1
  35. package/dist/primitives/date-picker.d.ts.map +1 -1
  36. package/dist/primitives/index.js +2 -2
  37. package/dist/primitives/search-select.d.ts +3 -1
  38. package/dist/primitives/search-select.d.ts.map +1 -1
  39. package/dist/tailwind.cjs +199 -2
  40. package/dist/tailwind.cjs.map +1 -1
  41. package/dist/tailwind.js +198 -1
  42. package/dist/tailwind.js.map +1 -1
  43. package/dist/theme/index.d.ts.map +1 -1
  44. package/dist/theme/index.js +1 -2
  45. package/package.json +24 -22
  46. package/src/dashboard/ChartWidget.tsx +8 -65
  47. package/src/dashboard/ChartWidgetInner.tsx +83 -0
  48. package/src/dashboard/OnboardingWidget.tsx +32 -1
  49. package/src/dashboard/icon.ts +2 -2
  50. package/src/icons.ts +66 -0
  51. package/src/index.ts +4 -0
  52. package/src/layout/Sidebar.tsx +70 -136
  53. package/src/primitives/date-picker.tsx +30 -4
  54. package/src/primitives/search-select.tsx +12 -4
  55. package/src/theme/index.ts +9 -6
  56. package/dist/chunk-2GDQUARM.js.map +0 -1
  57. package/dist/chunk-2P7T6QQK.cjs +0 -206
  58. package/dist/chunk-2P7T6QQK.cjs.map +0 -1
  59. package/dist/chunk-A7O7KGNL.js.map +0 -1
  60. package/dist/chunk-BVF2KPTT.js.map +0 -1
  61. package/dist/chunk-H6OULCHF.cjs +0 -81
  62. package/dist/chunk-H6OULCHF.cjs.map +0 -1
  63. package/dist/chunk-ID2HQK2Q.js.map +0 -1
  64. package/dist/chunk-IWBXYV4U.js +0 -203
  65. package/dist/chunk-IWBXYV4U.js.map +0 -1
  66. package/dist/chunk-MI6FOB4O.cjs +0 -351
  67. package/dist/chunk-MI6FOB4O.cjs.map +0 -1
  68. package/dist/chunk-O5F4LLSL.js.map +0 -1
  69. package/dist/chunk-OW73RZOU.cjs +0 -313
  70. package/dist/chunk-OW73RZOU.cjs.map +0 -1
  71. package/dist/chunk-SVVKUMSL.cjs +0 -1733
  72. package/dist/chunk-SVVKUMSL.cjs.map +0 -1
  73. package/dist/chunk-TDGSY5W6.cjs +0 -474
  74. package/dist/chunk-TDGSY5W6.cjs.map +0 -1
  75. package/dist/chunk-WF3STNDX.cjs +0 -682
  76. package/dist/chunk-WF3STNDX.cjs.map +0 -1
  77. package/dist/chunk-XIRJGVDK.cjs +0 -1826
  78. package/dist/chunk-XIRJGVDK.cjs.map +0 -1
  79. package/dist/dashboard/index.cjs +0 -106
  80. package/dist/dashboard/index.cjs.map +0 -1
  81. package/dist/index.cjs +0 -650
  82. package/dist/index.cjs.map +0 -1
  83. package/dist/layout/index.cjs +0 -98
  84. package/dist/layout/index.cjs.map +0 -1
  85. package/dist/primitives/index.cjs +0 -363
  86. package/dist/primitives/index.cjs.map +0 -1
  87. package/dist/theme/index.cjs +0 -41
  88. package/dist/theme/index.cjs.map +0 -1
@@ -0,0 +1,46 @@
1
+ import { ResponsiveContainer, PieChart, Tooltip, Pie, Cell, Legend, BarChart, CartesianGrid, XAxis, YAxis, Bar, AreaChart, Area, LineChart, Line } from 'recharts';
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+
4
+ // src/dashboard/ChartWidgetInner.tsx
5
+ var PALETTE = [
6
+ "hsl(var(--info))",
7
+ "hsl(var(--magic))",
8
+ "hsl(var(--success))",
9
+ "hsl(var(--warning))",
10
+ "hsl(var(--destructive))"
11
+ ];
12
+ var AXIS = "hsl(var(--muted-foreground))";
13
+ var GRID = "hsl(var(--border))";
14
+ function ChartWidgetInner({ type, data, series, categoryKey, height }) {
15
+ const color = (i, explicit) => explicit ?? PALETTE[i % PALETTE.length];
16
+ return /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height, children: type === "pie" ? /* @__PURE__ */ jsxs(PieChart, { children: [
17
+ /* @__PURE__ */ jsx(Tooltip, {}),
18
+ /* @__PURE__ */ jsx(Pie, { data, dataKey: series[0]?.dataKey ?? "value", nameKey: categoryKey, innerRadius: 50, outerRadius: 80, paddingAngle: 2, children: data.map((_, i) => /* @__PURE__ */ jsx(Cell, { fill: color(i, series[0]?.color) }, i)) }),
19
+ /* @__PURE__ */ jsx(Legend, {})
20
+ ] }) : type === "bar" ? /* @__PURE__ */ jsxs(BarChart, { data, children: [
21
+ /* @__PURE__ */ jsx(CartesianGrid, { strokeDasharray: "3 3", stroke: GRID, vertical: false }),
22
+ /* @__PURE__ */ jsx(XAxis, { dataKey: categoryKey, stroke: AXIS, fontSize: 12, tickLine: false, axisLine: false }),
23
+ /* @__PURE__ */ jsx(YAxis, { stroke: AXIS, fontSize: 12, tickLine: false, axisLine: false, width: 36 }),
24
+ /* @__PURE__ */ jsx(Tooltip, { cursor: { fill: GRID, opacity: 0.3 } }),
25
+ series.length > 1 && /* @__PURE__ */ jsx(Legend, {}),
26
+ series.map((s, i) => /* @__PURE__ */ jsx(Bar, { dataKey: s.dataKey, name: s.label ?? s.dataKey, fill: color(i, s.color), radius: [4, 4, 0, 0] }, s.dataKey))
27
+ ] }) : type === "area" ? /* @__PURE__ */ jsxs(AreaChart, { data, children: [
28
+ /* @__PURE__ */ jsx(CartesianGrid, { strokeDasharray: "3 3", stroke: GRID, vertical: false }),
29
+ /* @__PURE__ */ jsx(XAxis, { dataKey: categoryKey, stroke: AXIS, fontSize: 12, tickLine: false, axisLine: false }),
30
+ /* @__PURE__ */ jsx(YAxis, { stroke: AXIS, fontSize: 12, tickLine: false, axisLine: false, width: 36 }),
31
+ /* @__PURE__ */ jsx(Tooltip, {}),
32
+ series.length > 1 && /* @__PURE__ */ jsx(Legend, {}),
33
+ series.map((s, i) => /* @__PURE__ */ jsx(Area, { dataKey: s.dataKey, name: s.label ?? s.dataKey, stroke: color(i, s.color), fill: color(i, s.color), fillOpacity: 0.15 }, s.dataKey))
34
+ ] }) : /* @__PURE__ */ jsxs(LineChart, { data, children: [
35
+ /* @__PURE__ */ jsx(CartesianGrid, { strokeDasharray: "3 3", stroke: GRID, vertical: false }),
36
+ /* @__PURE__ */ jsx(XAxis, { dataKey: categoryKey, stroke: AXIS, fontSize: 12, tickLine: false, axisLine: false }),
37
+ /* @__PURE__ */ jsx(YAxis, { stroke: AXIS, fontSize: 12, tickLine: false, axisLine: false, width: 36 }),
38
+ /* @__PURE__ */ jsx(Tooltip, {}),
39
+ series.length > 1 && /* @__PURE__ */ jsx(Legend, {}),
40
+ series.map((s, i) => /* @__PURE__ */ jsx(Line, { dataKey: s.dataKey, name: s.label ?? s.dataKey, stroke: color(i, s.color), strokeWidth: 2, dot: false }, s.dataKey))
41
+ ] }) });
42
+ }
43
+
44
+ export { ChartWidgetInner as default };
45
+ //# sourceMappingURL=ChartWidgetInner-GDE5PBTR.js.map
46
+ //# sourceMappingURL=ChartWidgetInner-GDE5PBTR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dashboard/ChartWidgetInner.tsx"],"names":[],"mappings":"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","file":"ChartWidgetInner-GDE5PBTR.js","sourcesContent":["import * as React from 'react'\nimport {\n ResponsiveContainer,\n LineChart, Line,\n BarChart, Bar,\n AreaChart, Area,\n PieChart, Pie, Cell,\n XAxis, YAxis, CartesianGrid, Tooltip, Legend,\n} from 'recharts'\nimport type { ChartSeries, ChartType } from './types'\n\n/** Theme-driven palette (HSL triplet CSS vars defined in styles.css). */\nconst PALETTE = [\n 'hsl(var(--info))',\n 'hsl(var(--magic))',\n 'hsl(var(--success))',\n 'hsl(var(--warning))',\n 'hsl(var(--destructive))',\n]\nconst AXIS = 'hsl(var(--muted-foreground))'\nconst GRID = 'hsl(var(--border))'\n\nexport interface ChartWidgetInnerProps {\n type: ChartType\n data: Array<Record<string, string | number>>\n series: ChartSeries[]\n categoryKey: string\n height: number\n}\n\n// recharts-backed chart body. Default export + own module so ChartWidget can\n// React.lazy it — recharts (~400 KB min) then lives in an async chunk instead\n// of every consumer's entry bundle.\nexport default function ChartWidgetInner({ type, data, series, categoryKey, height }: ChartWidgetInnerProps) {\n const color = (i: number, explicit?: string) => explicit ?? PALETTE[i % PALETTE.length]\n\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n {type === 'pie' ? (\n <PieChart>\n <Tooltip />\n <Pie data={data} dataKey={series[0]?.dataKey ?? 'value'} nameKey={categoryKey} innerRadius={50} outerRadius={80} paddingAngle={2}>\n {data.map((_, i) => <Cell key={i} fill={color(i, series[0]?.color)} />)}\n </Pie>\n <Legend />\n </PieChart>\n ) : type === 'bar' ? (\n <BarChart data={data}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={GRID} vertical={false} />\n <XAxis dataKey={categoryKey} stroke={AXIS} fontSize={12} tickLine={false} axisLine={false} />\n <YAxis stroke={AXIS} fontSize={12} tickLine={false} axisLine={false} width={36} />\n <Tooltip cursor={{ fill: GRID, opacity: 0.3 }} />\n {series.length > 1 && <Legend />}\n {series.map((s, i) => (\n <Bar key={s.dataKey} dataKey={s.dataKey} name={s.label ?? s.dataKey} fill={color(i, s.color)} radius={[4, 4, 0, 0]} />\n ))}\n </BarChart>\n ) : type === 'area' ? (\n <AreaChart data={data}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={GRID} vertical={false} />\n <XAxis dataKey={categoryKey} stroke={AXIS} fontSize={12} tickLine={false} axisLine={false} />\n <YAxis stroke={AXIS} fontSize={12} tickLine={false} axisLine={false} width={36} />\n <Tooltip />\n {series.length > 1 && <Legend />}\n {series.map((s, i) => (\n <Area key={s.dataKey} dataKey={s.dataKey} name={s.label ?? s.dataKey} stroke={color(i, s.color)} fill={color(i, s.color)} fillOpacity={0.15} />\n ))}\n </AreaChart>\n ) : (\n <LineChart data={data}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke={GRID} vertical={false} />\n <XAxis dataKey={categoryKey} stroke={AXIS} fontSize={12} tickLine={false} axisLine={false} />\n <YAxis stroke={AXIS} fontSize={12} tickLine={false} axisLine={false} width={36} />\n <Tooltip />\n {series.length > 1 && <Legend />}\n {series.map((s, i) => (\n <Line key={s.dataKey} dataKey={s.dataKey} name={s.label ?? s.dataKey} stroke={color(i, s.color)} strokeWidth={2} dot={false} />\n ))}\n </LineChart>\n )}\n </ResponsiveContainer>\n )\n}\n"]}
@@ -255,6 +255,33 @@ function DataTable({
255
255
  )) : /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: columns.length, className: "h-24 text-center text-muted-foreground", children: emptyMessage }) }) })
256
256
  ] }) }) });
257
257
  }
258
+ function Skeleton({
259
+ className,
260
+ ...props
261
+ }) {
262
+ return /* @__PURE__ */ jsx(
263
+ "div",
264
+ {
265
+ className: cn("animate-pulse rounded-md bg-muted", className),
266
+ ...props
267
+ }
268
+ );
269
+ }
270
+ function TableSkeleton({ columns = 4, rows = 2 }) {
271
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-lg border overflow-hidden", children: [
272
+ /* @__PURE__ */ jsx("div", { className: "border-b bg-muted/30 flex gap-4 px-4 py-2.5", children: Array.from({ length: columns }).map((_, i) => /* @__PURE__ */ jsx(Skeleton, { className: "h-3 flex-1 rounded bg-muted-foreground/10" }, i)) }),
273
+ /* @__PURE__ */ jsx("div", { className: "divide-y", children: Array.from({ length: rows }).map((_, r) => /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4 px-4 py-3.5", children: Array.from({ length: columns }).map((_2, c) => /* @__PURE__ */ jsx(
274
+ Skeleton,
275
+ {
276
+ className: cn(
277
+ "h-3 rounded",
278
+ c === 0 ? "flex-[2]" : "flex-1"
279
+ )
280
+ },
281
+ c
282
+ )) }, r)) })
283
+ ] });
284
+ }
258
285
  var SIZE = {
259
286
  sm: { container: "h-[26px]", segment: "px-2.5 text-xs" },
260
287
  md: { container: "h-[30px]", segment: "px-3 text-sm" }
@@ -301,6 +328,6 @@ function SegmentedControl({
301
328
  );
302
329
  }
303
330
 
304
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, DataTable, Dropdown, DropdownCheckboxItem, DropdownContent, DropdownGroup, DropdownItem, DropdownLabel, DropdownPortal, DropdownRadioGroup, DropdownRadioItem, DropdownSeparator, DropdownShortcut, DropdownSub, DropdownSubContent, DropdownSubTrigger, DropdownTrigger, SegmentedControl };
305
- //# sourceMappingURL=chunk-BVF2KPTT.js.map
306
- //# sourceMappingURL=chunk-BVF2KPTT.js.map
331
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, DataTable, Dropdown, DropdownCheckboxItem, DropdownContent, DropdownGroup, DropdownItem, DropdownLabel, DropdownPortal, DropdownRadioGroup, DropdownRadioItem, DropdownSeparator, DropdownShortcut, DropdownSub, DropdownSubContent, DropdownSubTrigger, DropdownTrigger, SegmentedControl, Skeleton, TableSkeleton };
332
+ //# sourceMappingURL=chunk-G6OKZ7WL.js.map
333
+ //# sourceMappingURL=chunk-G6OKZ7WL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/primitives/card.tsx","../src/primitives/dropdown.tsx","../src/primitives/data-table.tsx","../src/primitives/skeleton.tsx","../src/primitives/segmented-control.tsx"],"names":["React","jsx","React3","jsxs","_"],"mappings":"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","file":"chunk-G6OKZ7WL.js","sourcesContent":["import * as React from 'react'\n\nimport { cn } from '../utils/cn'\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'fayz-glass-surface rounded-card border bg-card text-card-foreground shadow-sm',\n className\n )}\n {...props}\n />\n))\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1 p-4', className)}\n {...props}\n />\n))\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n 'text-sm font-semibold leading-tight tracking-tight',\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn('text-xs text-muted-foreground', className)}\n {...props}\n />\n))\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-4 pt-0', className)} {...props} />\n))\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center p-4 pt-0', className)}\n {...props}\n />\n))\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight, Circle } from 'lucide-react'\n\nimport { cn } from '../utils/cn'\n\nconst Dropdown = DropdownMenuPrimitive.Root\n\nconst DropdownTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownGroup = DropdownMenuPrimitive.Group\n\nconst DropdownPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownSub = DropdownMenuPrimitive.Sub\n\nconst DropdownRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center rounded-button px-2 py-1.5 text-sm outline-none focus:bg-muted data-[state=open]:bg-muted',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'fayz-glass-surface z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n))\nDropdownSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'fayz-glass-surface z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-button px-2 py-1.5 text-sm outline-none transition-colors focus:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-button py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-button py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-sm font-semibold',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest opacity-60', className)}\n {...props}\n />\n )\n}\nDropdownShortcut.displayName = 'DropdownShortcut'\n\nexport {\n Dropdown,\n DropdownTrigger,\n DropdownContent,\n DropdownItem,\n DropdownCheckboxItem,\n DropdownRadioItem,\n DropdownLabel,\n DropdownSeparator,\n DropdownShortcut,\n DropdownGroup,\n DropdownPortal,\n DropdownSub,\n DropdownSubContent,\n DropdownSubTrigger,\n DropdownRadioGroup,\n}\n","import * as React from 'react'\nimport {\n type ColumnDef,\n type SortingState,\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { ArrowUpDown, ArrowUp, ArrowDown } from 'lucide-react'\n\nimport { cn } from '../utils/cn'\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n loading?: boolean\n skeletonRows?: number\n emptyMessage?: string\n onRowClick?: (row: TData) => void\n /** Visual variant: 'card' (white bg, card wrapper — default) or 'flat' (transparent bg) */\n variant?: 'card' | 'flat'\n /** Compact mode: smaller padding and font size */\n compact?: boolean\n}\n\nfunction DataTable<TData, TValue>({\n columns,\n data,\n loading = false,\n skeletonRows = 3,\n emptyMessage = 'No results.',\n onRowClick,\n variant = 'card',\n compact = false,\n}: DataTableProps<TData, TValue>) {\n const isCard = variant === 'card'\n // Rounded box and scroll container must be SEPARATE elements: a scroll\n // container paints its content over its own border-radius, which squared\n // the corners the moment a row background met them.\n const wrapperCls = isCard\n ? 'overflow-hidden rounded-lg border bg-card shadow-sm'\n : 'overflow-hidden rounded-lg border'\n const headerCls = isCard ? 'border-b bg-muted/50' : 'border-b bg-muted/30'\n const thCls = compact ? 'px-3 py-1.5 text-left text-[11px] font-medium text-muted-foreground' : 'px-4 py-2.5 text-left font-medium text-muted-foreground'\n const tdCls = compact ? 'px-3 py-1.5 align-middle text-xs' : 'px-4 py-3 align-middle'\n const tableCls = compact ? 'w-full text-xs min-w-max' : 'w-full text-sm min-w-max'\n const rowHoverCls = isCard ? 'hover:bg-muted/30' : 'hover:bg-muted/20'\n const [sorting, setSorting] = React.useState<SortingState>([])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n onSortingChange: setSorting,\n state: { sorting },\n })\n\n if (loading) {\n return (\n <div className={wrapperCls}>\n <div className=\"overflow-x-auto\">\n <table className={tableCls}>\n <thead>\n <tr className={headerCls}>\n {columns.map((_, i) => (\n <th key={i} className={thCls}>\n <div className=\"h-3.5 w-20 animate-pulse rounded bg-muted\" />\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: skeletonRows }).map((_, i) => (\n <tr key={i} className=\"border-b last:border-0\">\n {columns.map((_, j) => (\n <td key={j} className={tdCls}>\n <div className=\"h-3.5 w-full animate-pulse rounded bg-muted\" />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )\n }\n\n return (\n <div className={wrapperCls}>\n <div className=\"overflow-x-auto\">\n <table className={tableCls}>\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} className={headerCls}>\n {headerGroup.headers.map((header) => {\n const sorted = header.column.getIsSorted()\n return (\n <th\n key={header.id}\n className={thCls}\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <button\n className=\"flex items-center gap-1 hover:text-foreground transition-colors\"\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {sorted === 'asc' ? (\n <ArrowUp className=\"h-3 w-3\" />\n ) : sorted === 'desc' ? (\n <ArrowDown className=\"h-3 w-3\" />\n ) : (\n <ArrowUpDown className=\"h-3 w-3 opacity-40\" />\n )}\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <tr\n key={row.id}\n className={cn(\n `border-b last:border-0 transition-colors ${rowHoverCls}`,\n onRowClick && 'cursor-pointer'\n )}\n onClick={() => onRowClick?.(row.original)}\n >\n {row.getVisibleCells().map((cell) => (\n <td key={cell.id} className={tdCls}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={columns.length} className=\"h-24 text-center text-muted-foreground\">\n {emptyMessage}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n )\n}\n\nexport { DataTable, type DataTableProps }\n","import { cn } from '../utils/cn'\n\nfunction Skeleton({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('animate-pulse rounded-md bg-muted', className)}\n {...props}\n />\n )\n}\n\n/**\n * Skeleton loader that mimics a table with rows and columns.\n * Drop-in replacement for \"Loading...\" text in list views.\n */\nfunction TableSkeleton({ columns = 4, rows = 2 }: { columns?: number; rows?: number }) {\n return (\n <div className=\"rounded-lg border overflow-hidden\">\n <div className=\"border-b bg-muted/30 flex gap-4 px-4 py-2.5\">\n {Array.from({ length: columns }).map((_, i) => (\n <Skeleton key={i} className=\"h-3 flex-1 rounded bg-muted-foreground/10\" />\n ))}\n </div>\n <div className=\"divide-y\">\n {Array.from({ length: rows }).map((_, r) => (\n <div key={r} className=\"flex items-center gap-4 px-4 py-3.5\">\n {Array.from({ length: columns }).map((_, c) => (\n <Skeleton\n key={c}\n className={cn(\n 'h-3 rounded',\n c === 0 ? 'flex-[2]' : 'flex-1',\n )}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport { Skeleton, TableSkeleton }\n","import * as React from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface SegmentedOption<T extends string = string> {\n value: T\n label: React.ReactNode\n}\n\nexport interface SegmentedControlProps<T extends string = string> {\n /** Options as plain values (label = value) or `{ value, label }` objects. */\n options: ReadonlyArray<T | SegmentedOption<T>>\n value: T\n onChange: (value: T) => void\n /** Matches the equivalent Button heights: sm = 26px, md = 30px. */\n size?: 'sm' | 'md'\n className?: string\n 'aria-label'?: string\n}\n\nconst SIZE: Record<'sm' | 'md', { container: string; segment: string }> = {\n sm: { container: 'h-[26px]', segment: 'px-2.5 text-xs' },\n md: { container: 'h-[30px]', segment: 'px-3 text-sm' },\n}\n\n/**\n * Canonical segmented (pill) control — same chrome as Button (rounded-button\n * radius, hairline border + shadow-button bevel on a card surface). Use this for\n * any 7d/30d/90d-style toggle so every surface stays visually consistent instead\n * of hand-rolling a styled toggle group.\n */\nexport function SegmentedControl<T extends string = string>({\n options, value, onChange, size = 'sm', className, ...rest\n}: SegmentedControlProps<T>) {\n const items = options.map((o) => (typeof o === 'string' ? { value: o, label: o } : o)) as SegmentedOption<T>[]\n return (\n <div\n role=\"tablist\"\n aria-label={rest['aria-label']}\n className={cn(\n 'inline-flex items-center rounded-button border border-border bg-card p-0.5 shadow-button',\n SIZE[size].container,\n className,\n )}\n >\n {items.map((item) => {\n const active = item.value === value\n return (\n <button\n key={item.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onChange(item.value)}\n className={cn(\n 'flex h-full items-center rounded-button font-semibold transition-colors',\n SIZE[size].segment,\n active ? 'bg-foreground text-background' : 'text-muted-foreground hover:bg-muted/60',\n )}\n >\n {item.label}\n </button>\n )\n })}\n </div>\n )\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { useCrossModuleBack, useBackHandler, Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetBody, SaveBarProvider, SaveBar } from './chunk-75EFDLST.js';
2
2
  import { cn, Button } from './chunk-YRVE4FOD.js';
3
+ import { ICON_MAP } from './chunk-PVIB724L.js';
3
4
  import * as React3 from 'react';
4
- import { Puzzle, SlidersHorizontal, ShieldCheck, Palette, User, Repeat, GraduationCap, FileCheck2, Clock3, Boxes, Workflow, UserX, UserPlus, UserCheck, TrendingUp, Star, Inbox, MessageSquare, LayoutDashboard, Award, Zap, Mic, UsersRound, Disc3, ListMusic, Eye, Music, Layers, CircleDollarSign, Landmark, Banknote, BadgeDollarSign, CalendarX, CalendarCheck2, CalendarDays, Radio, PartyPopper, Wheat, Egg, Apple, LeafyGreen, LayoutTemplate, FolderOpen, Heart, PawPrint, Cat, Dog, Clock, Ban, Shield, Search, ListPlus, List, Plus, Filter, Building2, Contact, Handshake, Map, MapPin, UtensilsCrossed, Camera, Tags, Tag, Percent, Globe, MessageCircle, BookOpenCheck, BookOpen, UserCog, Briefcase, ListChecks, ClipboardList, ShoppingBag, Receipt, Wrench, Target, ShoppingCart, Megaphone, DollarSign, Mail, FileText, BarChart3, Activity, Package, CalendarClock, Calendar, Bell, CreditCard, Settings, Users, Home, PanelLeftClose, PanelLeft, Menu, Crown, ChevronRight, ChevronLeft, PanelRightOpen, PanelRightClose, PanelRight, Newspaper, Clapperboard, Box, TreePalm, ArrowDownRight, ArrowUpRight, Ruler, Warehouse, Wallet, Sparkles, AlertTriangle, TableProperties, Plug, ArrowLeftRight, ArrowUpCircle, ArrowDownCircle, ChevronDown, ClipboardCheck, PiggyBank, LogOut } from 'lucide-react';
5
+ import { PanelLeftClose, PanelLeft, Search, Bell, Menu, Crown, ChevronRight, ChevronLeft, PanelRightOpen, PanelRightClose, PanelRight, Repeat, GraduationCap, Newspaper, Clapperboard, Zap, Star, UserCheck, Inbox, Clock3, Ban, Map, ListPlus, CalendarX, CalendarCheck2, Mic, UsersRound, Disc3, ListMusic, Eye, Music, Layers, Banknote, BadgeDollarSign, CalendarDays, Radio, PartyPopper, FileCheck2, Box, Boxes, TreePalm, UserX, UserPlus, ArrowDownRight, ArrowUpRight, Ruler, Warehouse, Wallet, Sparkles, AlertTriangle, Clock, CircleDollarSign, TrendingUp, Receipt, Landmark, TableProperties, SlidersHorizontal, Plug, ArrowLeftRight, ArrowUpCircle, ArrowDownCircle, Wheat, Egg, Apple, LeafyGreen, LayoutTemplate, Heart, PawPrint, Cat, Dog, FolderOpen, ListChecks, List, Shield, Plus, Filter, ChevronDown, Building2, Contact, Handshake, MapPin, UtensilsCrossed, Camera, Tags, Tag, Percent, BookOpenCheck, Globe, MessageCircle, BookOpen, UserCog, Briefcase, ClipboardCheck, ClipboardList, Wrench, Target, ShoppingBag, ShoppingCart, Megaphone, DollarSign, Mail, FileText, BarChart3, Activity, Package, CalendarClock, Calendar, CreditCard, Settings, Users, Home, ExternalLink, PiggyBank, LogOut } from 'lucide-react';
5
6
  import * as Tooltip from '@radix-ui/react-tooltip';
6
7
  import { create } from 'zustand';
7
8
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -19,100 +20,6 @@ var useLayoutStore = create((set) => ({
19
20
  toggleMobileDrawer: () => set((state) => ({ mobileDrawerOpen: !state.mobileDrawerOpen })),
20
21
  setCommandPaletteOpen: (open) => set({ commandPaletteOpen: open })
21
22
  }));
22
- var ICON_MAP = {
23
- Home,
24
- Users,
25
- Settings,
26
- CreditCard,
27
- Bell,
28
- Calendar,
29
- CalendarClock,
30
- Package,
31
- Activity,
32
- BarChart3,
33
- FileText,
34
- Mail,
35
- DollarSign,
36
- Megaphone,
37
- ShoppingCart,
38
- Target,
39
- Wrench,
40
- Receipt,
41
- ShoppingBag,
42
- ClipboardList,
43
- ListChecks,
44
- Briefcase,
45
- UserCog,
46
- BookOpen,
47
- BookOpenCheck,
48
- MessageCircle,
49
- Globe,
50
- Percent,
51
- Tag,
52
- Tags,
53
- Camera,
54
- UtensilsCrossed,
55
- MapPin,
56
- Map,
57
- Handshake,
58
- Contact,
59
- Building2,
60
- Filter,
61
- Plus,
62
- List,
63
- ListPlus,
64
- Search,
65
- Shield,
66
- Ban,
67
- Clock,
68
- Dog,
69
- Cat,
70
- PawPrint,
71
- Heart,
72
- FolderOpen,
73
- LayoutTemplate,
74
- LeafyGreen,
75
- Apple,
76
- Egg,
77
- Wheat,
78
- PartyPopper,
79
- Radio,
80
- CalendarDays,
81
- CalendarCheck2,
82
- CalendarX,
83
- BadgeDollarSign,
84
- Banknote,
85
- Landmark,
86
- CircleDollarSign,
87
- Layers,
88
- Music,
89
- Eye,
90
- ListMusic,
91
- Disc3,
92
- UsersRound,
93
- Mic,
94
- Zap,
95
- Award,
96
- LayoutDashboard,
97
- MessageSquare,
98
- Inbox,
99
- Star,
100
- TrendingUp,
101
- UserCheck,
102
- UserPlus,
103
- UserX,
104
- Workflow,
105
- Boxes,
106
- Clock3,
107
- FileCheck2,
108
- GraduationCap,
109
- Repeat,
110
- User,
111
- Palette,
112
- ShieldCheck,
113
- SlidersHorizontal,
114
- Puzzle
115
- };
116
23
  var RAIL_PUSH_MS = 260;
117
24
  var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React3.useLayoutEffect : React3.useEffect;
118
25
  function getIcon(name) {
@@ -125,26 +32,23 @@ function NavItem({
125
32
  onNavigate
126
33
  }) {
127
34
  const Icon = getIcon(item.icon);
128
- const content = /* @__PURE__ */ jsxs(
129
- "button",
130
- {
131
- onClick: () => onNavigate(item.route),
132
- className: cn(
133
- "flex w-full items-center gap-3 rounded-md px-2.5 py-1.5 text-[13px] font-medium transition-colors",
134
- "hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground",
135
- isActive ? "bg-sidebar-accent font-semibold text-sidebar-accent-foreground shadow-sm" : "text-sidebar-foreground/80",
136
- collapsed && "justify-center px-2"
137
- ),
138
- children: [
139
- /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4 shrink-0" }),
140
- !collapsed && /* @__PURE__ */ jsxs(Fragment, { children: [
141
- /* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-left", children: item.label }),
142
- item.premium && /* @__PURE__ */ jsx(Crown, { className: "ml-auto h-3.5 w-3.5 shrink-0 text-amber-500", "aria-hidden": true }),
143
- item.badge !== void 0 && /* @__PURE__ */ jsx("span", { className: "ml-auto rounded-full bg-primary px-2 py-0.5 text-xs font-semibold text-primary-foreground", children: item.badge })
144
- ] })
145
- ]
146
- }
35
+ const isExternal = !!item.href;
36
+ const className = cn(
37
+ "flex w-full items-center gap-3 rounded-md px-2.5 py-1.5 text-[13px] font-medium transition-colors",
38
+ "hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground",
39
+ isActive ? "bg-sidebar-accent font-semibold text-sidebar-accent-foreground shadow-sm" : "text-sidebar-foreground/80",
40
+ collapsed && "justify-center px-2"
147
41
  );
42
+ const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
43
+ /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4 shrink-0" }),
44
+ !collapsed && /* @__PURE__ */ jsxs(Fragment, { children: [
45
+ /* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-left", children: item.label }),
46
+ isExternal && /* @__PURE__ */ jsx(ExternalLink, { className: "ml-auto h-3.5 w-3.5 shrink-0 opacity-50", "aria-hidden": true }),
47
+ item.premium && /* @__PURE__ */ jsx(Crown, { className: cn("h-3.5 w-3.5 shrink-0 text-amber-500", !isExternal && "ml-auto"), "aria-hidden": true }),
48
+ item.badge !== void 0 && /* @__PURE__ */ jsx("span", { className: cn("rounded-full bg-primary px-2 py-0.5 text-xs font-semibold text-primary-foreground", !isExternal && !item.premium && "ml-auto"), children: item.badge })
49
+ ] })
50
+ ] });
51
+ const content = isExternal ? /* @__PURE__ */ jsx("a", { href: item.href, target: "_blank", rel: "noopener noreferrer", className, children: inner }) : /* @__PURE__ */ jsx("button", { onClick: () => onNavigate(item.route), className, children: inner });
148
52
  if (collapsed) {
149
53
  return /* @__PURE__ */ jsxs(Tooltip.Root, { delayDuration: 0, children: [
150
54
  /* @__PURE__ */ jsx(Tooltip.Trigger, { asChild: true, children: content }),
@@ -237,21 +141,18 @@ function NavGroup({
237
141
  open && /* @__PURE__ */ jsx("div", { className: "ml-4 mt-0.5 space-y-0.5 border-l border-sidebar-border/50 pl-3", children: item.children?.map((child) => {
238
142
  const ChildIcon = getIcon(child.icon);
239
143
  const isActive = child.route === activeRoute;
240
- return /* @__PURE__ */ jsxs(
241
- "button",
242
- {
243
- onClick: () => onNavigate(child.route),
244
- className: cn(
245
- "flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-sm transition-colors",
246
- isActive ? "font-medium text-sidebar-accent-foreground" : "text-sidebar-muted hover:text-sidebar-accent-foreground"
247
- ),
248
- children: [
249
- /* @__PURE__ */ jsx(ChildIcon, { className: "h-3.5 w-3.5 shrink-0" }),
250
- /* @__PURE__ */ jsx("span", { className: "truncate", children: child.label })
251
- ]
252
- },
253
- child.id
144
+ const childExternal = !!child.href;
145
+ const childClass = cn(
146
+ "flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-sm transition-colors",
147
+ isActive ? "font-medium text-sidebar-accent-foreground" : "text-sidebar-muted hover:text-sidebar-accent-foreground"
254
148
  );
149
+ const childInner = /* @__PURE__ */ jsxs(Fragment, { children: [
150
+ /* @__PURE__ */ jsx(ChildIcon, { className: "h-3.5 w-3.5 shrink-0" }),
151
+ /* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-left", children: child.label }),
152
+ childExternal && /* @__PURE__ */ jsx(ExternalLink, { className: "h-3 w-3 shrink-0 opacity-50", "aria-hidden": true }),
153
+ child.premium && /* @__PURE__ */ jsx(Crown, { className: "h-3 w-3 shrink-0 text-amber-500", "aria-hidden": true })
154
+ ] });
155
+ return childExternal ? /* @__PURE__ */ jsx("a", { href: child.href, target: "_blank", rel: "noopener noreferrer", className: childClass, children: childInner }, child.id) : /* @__PURE__ */ jsx("button", { onClick: () => onNavigate(child.route), className: childClass, children: childInner }, child.id);
255
156
  }) })
256
157
  ] });
257
158
  }
@@ -295,7 +196,7 @@ function Sidebar({
295
196
  item.id
296
197
  );
297
198
  const navBody = /* @__PURE__ */ jsxs(Fragment, { children: [
298
- topContent && /* @__PURE__ */ jsx("div", { className: "mb-4 space-y-2", children: topContent }),
199
+ topContent && /* @__PURE__ */ jsx("div", { className: "mb-4 space-y-2", children: React3.isValidElement(topContent) ? React3.cloneElement(topContent, { collapsed }) : topContent }),
299
200
  mainItems.length > 0 && /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
300
201
  sectionHeading(sectionLabels?.main),
301
202
  mainItems.map(renderItem)
@@ -372,7 +273,9 @@ function Sidebar({
372
273
  {
373
274
  className: cn(
374
275
  "relative flex-1 p-2",
375
- outgoing ? "overflow-hidden" : "overflow-y-auto"
276
+ // scrollbar-none: the rail still scrolls, but without the native
277
+ // scrollbar gutter eating into the nav items.
278
+ outgoing ? "overflow-hidden" : "overflow-y-auto scrollbar-none"
376
279
  ),
377
280
  children: [
378
281
  outgoing && /* @__PURE__ */ jsx(
@@ -535,68 +438,68 @@ function TopbarUserMenu({
535
438
  }
536
439
  var ICON_MAP2 = {
537
440
  Home: Home,
538
- Users: Users,
441
+ Users,
539
442
  Settings: Settings,
540
- CreditCard: CreditCard,
443
+ CreditCard,
541
444
  Bell: Bell,
542
- Calendar: Calendar,
543
- CalendarClock: CalendarClock,
544
- Package: Package,
545
- Activity: Activity,
546
- BarChart3: BarChart3,
547
- FileText: FileText,
548
- Mail: Mail,
549
- DollarSign: DollarSign,
550
- Megaphone: Megaphone,
551
- ShoppingCart: ShoppingCart,
552
- ShoppingBag: ShoppingBag,
553
- Target: Target,
554
- Wrench: Wrench,
555
- ClipboardList: ClipboardList,
445
+ Calendar,
446
+ CalendarClock,
447
+ Package,
448
+ Activity,
449
+ BarChart3,
450
+ FileText,
451
+ Mail,
452
+ DollarSign,
453
+ Megaphone,
454
+ ShoppingCart,
455
+ ShoppingBag,
456
+ Target,
457
+ Wrench,
458
+ ClipboardList,
556
459
  ClipboardCheck,
557
- Briefcase: Briefcase,
558
- UserCog: UserCog,
559
- BookOpen: BookOpen,
560
- MessageCircle: MessageCircle,
561
- Globe: Globe,
562
- BookOpenCheck: BookOpenCheck,
563
- Percent: Percent,
564
- Tag: Tag,
565
- Tags: Tags,
566
- Camera: Camera,
567
- UtensilsCrossed: UtensilsCrossed,
460
+ Briefcase,
461
+ UserCog,
462
+ BookOpen,
463
+ MessageCircle,
464
+ Globe,
465
+ BookOpenCheck,
466
+ Percent,
467
+ Tag,
468
+ Tags,
469
+ Camera,
470
+ UtensilsCrossed,
568
471
  Search: Search,
569
- MapPin: MapPin,
570
- Handshake: Handshake,
571
- Contact: Contact,
572
- Building2: Building2,
472
+ MapPin,
473
+ Handshake,
474
+ Contact,
475
+ Building2,
573
476
  ChevronDown: ChevronDown,
574
- Filter: Filter,
575
- Plus: Plus,
576
- Shield: Shield,
577
- List: List,
578
- ListChecks: ListChecks,
579
- FolderOpen: FolderOpen,
580
- Dog: Dog,
581
- Cat: Cat,
582
- PawPrint: PawPrint,
583
- Heart: Heart,
584
- LayoutTemplate: LayoutTemplate,
585
- LeafyGreen: LeafyGreen,
586
- Apple: Apple,
587
- Egg: Egg,
588
- Wheat: Wheat,
477
+ Filter,
478
+ Plus,
479
+ Shield,
480
+ List,
481
+ ListChecks,
482
+ FolderOpen,
483
+ Dog,
484
+ Cat,
485
+ PawPrint,
486
+ Heart,
487
+ LayoutTemplate,
488
+ LeafyGreen,
489
+ Apple,
490
+ Egg,
491
+ Wheat,
589
492
  ArrowDownCircle,
590
493
  ArrowUpCircle,
591
494
  ArrowLeftRight,
592
495
  Plug,
593
- SlidersHorizontal: SlidersHorizontal,
496
+ SlidersHorizontal,
594
497
  TableProperties,
595
- Landmark: Landmark,
596
- Receipt: Receipt,
597
- TrendingUp: TrendingUp,
598
- CircleDollarSign: CircleDollarSign,
599
- Clock: Clock,
498
+ Landmark,
499
+ Receipt,
500
+ TrendingUp,
501
+ CircleDollarSign,
502
+ Clock,
600
503
  AlertTriangle,
601
504
  Sparkles,
602
505
  Wallet,
@@ -604,38 +507,38 @@ var ICON_MAP2 = {
604
507
  Ruler,
605
508
  ArrowUpRight,
606
509
  ArrowDownRight,
607
- UserPlus: UserPlus,
608
- UserX: UserX,
510
+ UserPlus,
511
+ UserX,
609
512
  TreePalm,
610
- Boxes: Boxes,
513
+ Boxes,
611
514
  Box,
612
- FileCheck2: FileCheck2,
613
- PartyPopper: PartyPopper,
614
- Radio: Radio,
615
- CalendarDays: CalendarDays,
616
- BadgeDollarSign: BadgeDollarSign,
617
- Banknote: Banknote,
618
- Layers: Layers,
619
- Music: Music,
620
- Eye: Eye,
621
- ListMusic: ListMusic,
622
- Disc3: Disc3,
623
- UsersRound: UsersRound,
624
- Mic: Mic,
625
- CalendarCheck2: CalendarCheck2,
626
- CalendarX: CalendarX,
627
- ListPlus: ListPlus,
628
- Map: Map,
629
- Ban: Ban,
630
- Clock3: Clock3,
631
- Inbox: Inbox,
632
- UserCheck: UserCheck,
633
- Star: Star,
634
- Zap: Zap,
515
+ FileCheck2,
516
+ PartyPopper,
517
+ Radio,
518
+ CalendarDays,
519
+ BadgeDollarSign,
520
+ Banknote,
521
+ Layers,
522
+ Music,
523
+ Eye,
524
+ ListMusic,
525
+ Disc3,
526
+ UsersRound,
527
+ Mic,
528
+ CalendarCheck2,
529
+ CalendarX,
530
+ ListPlus,
531
+ Map,
532
+ Ban,
533
+ Clock3,
534
+ Inbox,
535
+ UserCheck,
536
+ Star,
537
+ Zap,
635
538
  Clapperboard,
636
539
  Newspaper,
637
- GraduationCap: GraduationCap,
638
- Repeat: Repeat
540
+ GraduationCap,
541
+ Repeat
639
542
  };
640
543
  function getIcon2(name) {
641
544
  return ICON_MAP2[name] ?? Home;
@@ -1779,6 +1682,6 @@ function ContentSplitTrigger({ label, iconOnly, className }) {
1779
1682
  );
1780
1683
  }
1781
1684
 
1782
- export { AppShell, BackStyleProvider, ContentSplit, ContentSplitTrigger, ICON_MAP, ModuleLayoutProvider, ModulePage, NavTransitionProvider, PageHeaderActions, PageTransition, Sidebar, SubpageHeader, Topbar, useBackStyle, useLayoutStore, useModuleHeaderActionsSlot, useModuleHeaderSlot, useModuleLayout, useNavTransition };
1783
- //# sourceMappingURL=chunk-ID2HQK2Q.js.map
1784
- //# sourceMappingURL=chunk-ID2HQK2Q.js.map
1685
+ export { AppShell, BackStyleProvider, ContentSplit, ContentSplitTrigger, ModuleLayoutProvider, ModulePage, NavTransitionProvider, PageHeaderActions, PageTransition, Sidebar, SubpageHeader, Topbar, useBackStyle, useLayoutStore, useModuleHeaderActionsSlot, useModuleHeaderSlot, useModuleLayout, useNavTransition };
1686
+ //# sourceMappingURL=chunk-KV3MHB6N.js.map
1687
+ //# sourceMappingURL=chunk-KV3MHB6N.js.map