@fayz-ai/ui 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/chunk-75EFDLST.js +274 -0
  2. package/dist/chunk-75EFDLST.js.map +1 -0
  3. package/dist/{chunk-YB5ZJKNG.cjs → chunk-7PTRAWHO.cjs} +263 -225
  4. package/dist/chunk-7PTRAWHO.cjs.map +1 -0
  5. package/dist/{chunk-CZ6X6PZT.js → chunk-COC5DDFG.js} +313 -44
  6. package/dist/chunk-COC5DDFG.js.map +1 -0
  7. package/dist/{chunk-MYZT2OG7.js → chunk-FY7OZNKU.js} +24 -68
  8. package/dist/chunk-FY7OZNKU.js.map +1 -0
  9. package/dist/chunk-H6OULCHF.cjs +81 -0
  10. package/dist/chunk-H6OULCHF.cjs.map +1 -0
  11. package/dist/{chunk-GE6XUREM.cjs → chunk-HG5RH3B3.cjs} +339 -68
  12. package/dist/chunk-HG5RH3B3.cjs.map +1 -0
  13. package/dist/{chunk-7TBDPNLY.cjs → chunk-NWPMNPGR.cjs} +76 -47
  14. package/dist/chunk-NWPMNPGR.cjs.map +1 -0
  15. package/dist/{chunk-D6SXPF4F.cjs → chunk-ODY3GZ3Y.cjs} +41 -87
  16. package/dist/chunk-ODY3GZ3Y.cjs.map +1 -0
  17. package/dist/{chunk-22J2RTMN.js → chunk-OTUH4K4B.js} +196 -150
  18. package/dist/chunk-OTUH4K4B.js.map +1 -0
  19. package/dist/chunk-OW73RZOU.cjs +313 -0
  20. package/dist/chunk-OW73RZOU.cjs.map +1 -0
  21. package/dist/{chunk-GFH5HOCO.js → chunk-W5O2X277.js} +42 -14
  22. package/dist/chunk-W5O2X277.js.map +1 -0
  23. package/dist/chunk-YRVE4FOD.js +57 -0
  24. package/dist/chunk-YRVE4FOD.js.map +1 -0
  25. package/dist/dashboard/DashboardCanvas.d.ts +5 -1
  26. package/dist/dashboard/DashboardCanvas.d.ts.map +1 -1
  27. package/dist/dashboard/GoldCard.d.ts +19 -0
  28. package/dist/dashboard/GoldCard.d.ts.map +1 -0
  29. package/dist/dashboard/KpiCard.d.ts.map +1 -1
  30. package/dist/dashboard/index.cjs +30 -26
  31. package/dist/dashboard/index.d.ts +1 -0
  32. package/dist/dashboard/index.d.ts.map +1 -1
  33. package/dist/dashboard/index.js +3 -3
  34. package/dist/index.cjs +198 -174
  35. package/dist/index.d.ts +3 -3
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +7 -7
  38. package/dist/layout/AppShell.d.ts +27 -6
  39. package/dist/layout/AppShell.d.ts.map +1 -1
  40. package/dist/layout/ContentSplit.d.ts +32 -0
  41. package/dist/layout/ContentSplit.d.ts.map +1 -0
  42. package/dist/layout/Sidebar.d.ts.map +1 -1
  43. package/dist/layout/Topbar.d.ts.map +1 -1
  44. package/dist/layout/index.cjs +31 -23
  45. package/dist/layout/index.d.ts +2 -1
  46. package/dist/layout/index.d.ts.map +1 -1
  47. package/dist/layout/index.js +3 -3
  48. package/dist/primitives/index.cjs +126 -114
  49. package/dist/primitives/index.d.ts +2 -0
  50. package/dist/primitives/index.d.ts.map +1 -1
  51. package/dist/primitives/index.js +4 -4
  52. package/dist/primitives/markdown-editor.d.ts +23 -0
  53. package/dist/primitives/markdown-editor.d.ts.map +1 -0
  54. package/dist/primitives/markdown.d.ts +9 -0
  55. package/dist/primitives/markdown.d.ts.map +1 -0
  56. package/package.json +3 -3
  57. package/src/dashboard/DashboardCanvas.tsx +13 -2
  58. package/src/dashboard/GoldCard.tsx +38 -0
  59. package/src/dashboard/KpiCard.tsx +4 -2
  60. package/src/dashboard/index.ts +1 -0
  61. package/src/index.ts +15 -0
  62. package/src/layout/AppShell.tsx +240 -20
  63. package/src/layout/ContentSplit.tsx +153 -0
  64. package/src/layout/ModulePage.tsx +2 -2
  65. package/src/layout/Sidebar.tsx +71 -20
  66. package/src/layout/Topbar.tsx +47 -17
  67. package/src/layout/index.ts +15 -1
  68. package/src/primitives/dropdown.tsx +4 -4
  69. package/src/primitives/index.ts +2 -0
  70. package/src/primitives/markdown-editor.tsx +75 -0
  71. package/src/primitives/markdown.tsx +169 -0
  72. package/src/primitives/select.tsx +1 -1
  73. package/dist/chunk-22J2RTMN.js.map +0 -1
  74. package/dist/chunk-7TBDPNLY.cjs.map +0 -1
  75. package/dist/chunk-CZ6X6PZT.js.map +0 -1
  76. package/dist/chunk-D6SXPF4F.cjs.map +0 -1
  77. package/dist/chunk-DNYVEOAX.js +0 -11
  78. package/dist/chunk-DNYVEOAX.js.map +0 -1
  79. package/dist/chunk-E526FHZ4.js +0 -169
  80. package/dist/chunk-E526FHZ4.js.map +0 -1
  81. package/dist/chunk-GE6XUREM.cjs.map +0 -1
  82. package/dist/chunk-GFH5HOCO.js.map +0 -1
  83. package/dist/chunk-MYZT2OG7.js.map +0 -1
  84. package/dist/chunk-VVVZO2LE.cjs +0 -13
  85. package/dist/chunk-VVVZO2LE.cjs.map +0 -1
  86. package/dist/chunk-W4XXXJRW.cjs +0 -196
  87. package/dist/chunk-W4XXXJRW.cjs.map +0 -1
  88. package/dist/chunk-YB5ZJKNG.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dashboard/DashboardGrid.tsx","../src/dashboard/layout.ts","../src/dashboard/preferences.ts","../src/dashboard/DashboardRange.tsx","../src/dashboard/DashboardCustomizeMenu.tsx","../src/dashboard/DashboardCanvas.tsx","../src/dashboard/GoldCard.tsx","../src/dashboard/icon.ts","../src/dashboard/KpiCard.tsx","../src/dashboard/ChartWidget.tsx","../src/dashboard/TableWidget.tsx","../src/dashboard/OnboardingWidget.tsx","../src/dashboard/define.ts"],"names":["jsx","cn","React","React2","SegmentedControl","useTranslation","Dropdown","DropdownTrigger","jsxs","Button","SlidersHorizontal","DropdownContent","DropdownLabel","DropdownSeparator","DropdownCheckboxItem","DropdownItem","RotateCcw","Fragment","EyeOff","resolvePluginComponent","React3","hashRouterAdapter","usePluginRuntime","getDashboardWidgets","Card","CardHeader","CardTitle","CardDescription","CardContent","React4","LucideIcons","React5","TrendingUp","TrendingDown","React6","ResponsiveContainer","PieChart","Tooltip","Pie","Cell","Legend","BarChart","CartesianGrid","XAxis","YAxis","Bar","AreaChart","Area","LineChart","Line","DataTable","React7","Check","Circle"],"mappings":"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","file":"chunk-NWPMNPGR.cjs","sourcesContent":["import * as React from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface DashboardGridItem {\n id: string\n /** Column span on the 4-col grid (defaults to 1). */\n span?: number\n node: React.ReactNode\n}\n\n/** Literal span → Tailwind classes (kept literal so the JIT compiler picks them up). */\nconst SPAN_CLASS: Record<number, string> = {\n 1: '',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-2 lg:col-span-3',\n 4: 'sm:col-span-2 lg:col-span-4',\n}\n\nexport interface DashboardGridProps {\n items: DashboardGridItem[]\n className?: string\n}\n\n/** Responsive 4-col dashboard grid — the layout every dashboard shares. */\nexport function DashboardGrid({ items, className }: DashboardGridProps) {\n return (\n <div className={cn('grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4', className)}>\n {items.map((item) => (\n <div key={item.id} className={SPAN_CLASS[Math.min(Math.max(item.span ?? 1, 1), 4)] ?? ''}>\n {item.node}\n </div>\n ))}\n </div>\n )\n}\n","import type { DashboardLayoutConfig, DashboardWidgetDef } from '@fayz-ai/core'\n\nexport interface LaidOutWidget {\n def: DashboardWidgetDef\n /** Effective span after applying overrides (1–4). */\n span: number\n order: number\n}\n\n/**\n * Resolve the widgets to render on a surface, in order, applying three layers:\n * 1. registration defaults (defaultVisible / defaultOrder / span)\n * 2. app config (the app curates the home surface)\n * 3. user preferences (show/hide/reorder — read but currently empty)\n *\n * Later layers win. Returns only visible widgets, sorted by effective order.\n * Accepts any DashboardWidgetDef (registry-resolved or shim-built).\n */\nexport function resolveDashboardLayout(\n registered: DashboardWidgetDef[],\n appConfig?: DashboardLayoutConfig,\n userPrefs?: DashboardLayoutConfig,\n /** When true, widgets are visible by default regardless of their\n * `defaultVisible` (used on a plugin-home to show everything; the global\n * home leaves this false so `defaultVisible:false` curates the start set). */\n forceVisibleByDefault = false,\n): LaidOutWidget[] {\n type Override = { visible?: boolean; order?: number; span?: number }\n const overrides = new Map<string, Override>()\n const merge = (cfg?: DashboardLayoutConfig) => {\n for (const w of cfg?.widgets ?? []) {\n overrides.set(w.id, { ...overrides.get(w.id), ...w })\n }\n }\n merge(appConfig)\n merge(userPrefs)\n\n return registered\n .map((def, index) => {\n const o = overrides.get(def.id)\n const baseVisible = forceVisibleByDefault ? true : (def.defaultVisible ?? true)\n const visible = o?.visible ?? baseVisible\n const order = o?.order ?? def.defaultOrder ?? index\n const span = Math.min(Math.max(o?.span ?? def.span ?? 1, 1), 4)\n return { def, visible, order, span }\n })\n .filter((x) => x.visible)\n .sort((a, b) => a.order - b.order)\n .map(({ def, span, order }) => ({ def, span, order }))\n}\n","import * as React from 'react'\nimport type { DashboardLayoutConfig, DashboardSurface } from '@fayz-ai/core'\n\nexport interface DashboardPreferencesState {\n /** User-level layout overrides for this surface (null when none saved). */\n prefs: DashboardLayoutConfig | null\n /** Persist updated overrides. */\n save: (next: DashboardLayoutConfig) => void\n /** Toggle a single widget's visibility and persist. */\n setVisible: (widgetId: string, visible: boolean) => void\n /** Clear all overrides (reset to registration + app defaults). */\n reset: () => void\n}\n\nconst KEY = (surface: DashboardSurface, scope: string) => `fayz.dashboard.prefs.${scope}.${surface}`\n\nfunction read(key: string): DashboardLayoutConfig | null {\n if (typeof window === 'undefined') return null\n try {\n const raw = window.localStorage.getItem(key)\n return raw ? (JSON.parse(raw) as DashboardLayoutConfig) : null\n } catch {\n return null\n }\n}\n\n/**\n * Per-user dashboard preferences, persisted to localStorage.\n *\n * `scope` lets a plugin-home keep its own prefs separate from the global home\n * (pass the domain). A future pass can swap the storage for the tenant/plugin\n * binding store without touching callers — `resolveDashboardLayout` already\n * consumes whatever this returns as the `userPrefs` layer.\n */\nexport function useDashboardPreferences(surface: DashboardSurface, scope = 'home'): DashboardPreferencesState {\n const key = KEY(surface, scope)\n const [prefs, setPrefs] = React.useState<DashboardLayoutConfig | null>(() => read(key))\n\n // Re-read when the target surface/scope changes.\n React.useEffect(() => { setPrefs(read(key)) }, [key])\n\n const save = React.useCallback((next: DashboardLayoutConfig) => {\n setPrefs(next)\n if (typeof window !== 'undefined') {\n try { window.localStorage.setItem(key, JSON.stringify(next)) } catch { /* ignore quota/availability */ }\n }\n }, [key])\n\n const setVisible = React.useCallback((widgetId: string, visible: boolean) => {\n setPrefs((cur) => {\n const widgets = [...(cur?.widgets ?? [])]\n const i = widgets.findIndex((w) => w.id === widgetId)\n if (i >= 0) widgets[i] = { ...widgets[i]!, visible }\n else widgets.push({ id: widgetId, visible })\n const next = { ...cur, widgets }\n if (typeof window !== 'undefined') {\n try { window.localStorage.setItem(key, JSON.stringify(next)) } catch { /* ignore */ }\n }\n return next\n })\n }, [key])\n\n const reset = React.useCallback(() => {\n setPrefs(null)\n if (typeof window !== 'undefined') {\n try { window.localStorage.removeItem(key) } catch { /* ignore */ }\n }\n }, [key])\n\n return { prefs, save, setVisible, reset }\n}\n","import * as React from 'react'\nimport { SegmentedControl } from '../primitives/segmented-control'\n\n// ---------------------------------------------------------------------------\n// Shared dashboard time range. The canvas provides it; widgets read it via\n// useDashboardRange() and refetch/filter their data accordingly.\n// ---------------------------------------------------------------------------\n\nexport type DashboardRange = string\n\nexport const DEFAULT_RANGE_OPTIONS: DashboardRange[] = ['7d', '30d', '90d']\n\ninterface DashboardRangeContextValue {\n range: DashboardRange\n setRange: (range: DashboardRange) => void\n options: DashboardRange[]\n}\n\nconst DashboardRangeContext = React.createContext<DashboardRangeContextValue | null>(null)\n\n/**\n * Read the shared dashboard range. Returns null when no range control is\n * mounted, so widgets can stay range-agnostic.\n */\nexport function useDashboardRange(): DashboardRangeContextValue | null {\n return React.useContext(DashboardRangeContext)\n}\n\nexport interface DashboardRangeProviderProps {\n options?: DashboardRange[]\n defaultRange?: DashboardRange\n onChange?: (range: DashboardRange) => void\n children: React.ReactNode\n}\n\nexport function DashboardRangeProvider({\n options = DEFAULT_RANGE_OPTIONS, defaultRange, onChange, children,\n}: DashboardRangeProviderProps) {\n const [range, setRangeState] = React.useState<DashboardRange>(defaultRange ?? options[1] ?? options[0] ?? '30d')\n const setRange = React.useCallback((r: DashboardRange) => {\n setRangeState(r)\n onChange?.(r)\n }, [onChange])\n const value = React.useMemo(() => ({ range, setRange, options }), [range, setRange, options])\n return <DashboardRangeContext.Provider value={value}>{children}</DashboardRangeContext.Provider>\n}\n\n/** Segmented 7d / 30d / 90d control bound to the shared dashboard range.\n * Thin wrapper over the canonical SegmentedControl primitive. */\nexport function DashboardRangeControl({ className }: { className?: string }) {\n const ctx = useDashboardRange()\n if (!ctx) return null\n return (\n <SegmentedControl\n options={ctx.options}\n value={ctx.range}\n onChange={ctx.setRange}\n className={className}\n aria-label=\"Time range\"\n />\n )\n}\n","import * as React from 'react'\nimport { SlidersHorizontal, RotateCcw } from 'lucide-react'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '../primitives/button'\nimport {\n Dropdown, DropdownTrigger, DropdownContent, DropdownLabel, DropdownSeparator, DropdownCheckboxItem, DropdownItem,\n} from '../primitives/dropdown'\n\nexport interface DashboardCustomizeMenuProps {\n /** Full set of registered widgets for this surface. */\n widgets: DashboardWidgetDef[]\n /** Ids currently visible. */\n visibleIds: Set<string>\n onToggle: (widgetId: string, visible: boolean) => void\n onReset: () => void\n label?: string\n}\n\n/** Gear menu to choose which widgets appear on the dashboard (persisted). */\nexport function DashboardCustomizeMenu({ widgets, visibleIds, onToggle, onReset, label }: DashboardCustomizeMenuProps) {\n const t = useTranslation()\n if (widgets.length === 0) return null\n return (\n <Dropdown>\n <DropdownTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"gap-1.5\">\n <SlidersHorizontal className=\"h-3.5 w-3.5\" />\n {label ?? 'Customize'}\n </Button>\n </DropdownTrigger>\n <DropdownContent align=\"end\" className=\"max-h-[70vh] w-60 overflow-y-auto\">\n <DropdownLabel>{label ?? 'Show widgets'}</DropdownLabel>\n <DropdownSeparator />\n {widgets.map((w) => (\n <DropdownCheckboxItem\n key={w.id}\n checked={visibleIds.has(w.id)}\n onCheckedChange={(checked) => onToggle(w.id, Boolean(checked))}\n onSelect={(e) => e.preventDefault()}\n >\n {t(w.title)}\n </DropdownCheckboxItem>\n ))}\n <DropdownSeparator />\n <DropdownItem onSelect={() => onReset()}>\n <RotateCcw className=\"mr-2 h-3.5 w-3.5\" />\n {'Reset to defaults'}\n </DropdownItem>\n </DropdownContent>\n </Dropdown>\n )\n}\n","import * as React from 'react'\nimport { EyeOff } from 'lucide-react'\nimport {\n usePluginRuntime,\n getDashboardWidgets,\n resolvePluginComponent,\n hashRouterAdapter,\n type DashboardLayoutConfig,\n type DashboardSurface,\n type DashboardWidgetDef,\n} from '@fayz-ai/core'\nimport { Card, CardHeader, CardTitle, CardDescription, CardContent } from '../primitives/card'\nimport { DashboardGrid, type DashboardGridItem } from './DashboardGrid'\nimport { resolveDashboardLayout, type LaidOutWidget } from './layout'\nimport { useDashboardPreferences } from './preferences'\nimport { DashboardRangeProvider, DashboardRangeControl, type DashboardRange } from './DashboardRange'\nimport { DashboardCustomizeMenu } from './DashboardCustomizeMenu'\n\n/** Wrap a widget so a hide button fades in on hover (top-right corner). */\nfunction HoverHide({ id, onHide, children }: { id: string; onHide?: (id: string) => void; children: React.ReactNode }) {\n if (!onHide) return <>{children}</>\n return (\n <div className=\"group relative h-full\">\n {children}\n <button\n type=\"button\"\n onClick={() => onHide(id)}\n title=\"Hide widget\"\n aria-label=\"Hide widget\"\n className=\"absolute right-2 top-2 z-10 inline-flex h-6 w-6 items-center justify-center rounded-md border border-border bg-background/90 text-muted-foreground opacity-0 shadow-sm transition-opacity hover:text-foreground group-hover:opacity-100\"\n >\n <EyeOff className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )\n}\n\nfunction toGridItems(laidOut: LaidOutWidget[], onHide?: (id: string) => void): DashboardGridItem[] {\n return laidOut.map(({ def, span }) => {\n const Component = resolvePluginComponent(def)\n const node = Component ? <Component {...(def.props ?? {})} /> : null\n return { id: def.id, span, node: <HoverHide id={def.id} onHide={onHide}>{node}</HoverHide> }\n })\n}\n\n// ---------------------------------------------------------------------------\n// Navigation — widgets (e.g. onboarding) call useDashboardNavigate() to route.\n// Defaults to the shared hash router so widgets work without explicit wiring.\n// ---------------------------------------------------------------------------\n\nconst DashboardNavigateContext = React.createContext<(path: string) => void>((path) =>\n hashRouterAdapter().navigate(path),\n)\n\nexport const DashboardNavigateProvider = DashboardNavigateContext.Provider\n\nexport function useDashboardNavigate(): (path: string) => void {\n return React.useContext(DashboardNavigateContext)\n}\n\n// ---------------------------------------------------------------------------\n// Shared widget grid — used by DashboardCanvas (registry) and by standalone\n// callers (e.g. the dashboard plugin's legacy DashboardPage shim). Resolves the\n// layout, then renders each widget by span.\n// ---------------------------------------------------------------------------\n\nexport function WidgetGrid({ widgets, appLayout, surface }: {\n widgets: DashboardWidgetDef[]\n appLayout?: DashboardLayoutConfig\n surface: DashboardSurface\n}) {\n const { prefs, setVisible } = useDashboardPreferences(surface)\n const laidOut = resolveDashboardLayout(widgets, appLayout, prefs ?? undefined)\n return <DashboardGrid items={toGridItems(laidOut, (id) => setVisible(id, false))} />\n}\n\n// ---------------------------------------------------------------------------\n// DashboardCanvas — the registry-driven renderer. Serves the global app home\n// (surface=\"home\", all domains) and a plugin's own overview (surface=\"plugin-home\"\n// + domain). Widgets a plugin registers once appear on both.\n// ---------------------------------------------------------------------------\n\nexport interface DashboardCanvasProps {\n surface: DashboardSurface\n /** Restrict to one plugin's widgets (used for plugin-home). */\n domain?: string\n title?: string\n subtitle?: string\n /** Render the in-content title/subtitle. Default: true. */\n showHeader?: boolean\n /** App-level curation of which widgets show, their order and span. */\n appLayout?: DashboardLayoutConfig\n /** App-level widgets injected into this surface's grid without a plugin — e.g.\n * an \"Ask the assistant\" CTA. Merged with the registry widgets, then laid out\n * (respects each widget's span/defaultOrder). Filtered to this surface. */\n extraWidgets?: DashboardWidgetDef[]\n /** Show a shared time-range control (sticky, top-right). Widgets read it via\n * useDashboardRange(). Pass `true` for defaults or an options object. */\n range?: boolean | DashboardRangeOptions\n /** Show the \"Customize\" menu so users can choose which widgets appear\n * (persisted per surface). Default: true. */\n customizable?: boolean\n /** Label for the customize menu trigger. */\n customizeLabel?: string\n /** Initial visibility before user prefs: 'default' honors each widget's\n * `defaultVisible` (used by the global home to curate a starting set); 'all'\n * shows every eligible widget. Defaults to 'all' on a plugin-home, 'default'\n * on the global home. */\n initialVisibility?: 'default' | 'all'\n /** Route handler for widgets that navigate (defaults to the hash router). */\n onNavigate?: (path: string) => void\n className?: string\n}\n\nexport interface DashboardRangeOptions {\n options?: DashboardRange[]\n default?: DashboardRange\n onChange?: (range: DashboardRange) => void\n}\n\nexport function DashboardCanvas({\n surface, domain, title, subtitle, showHeader = true, appLayout, extraWidgets, range,\n customizable = true, customizeLabel, initialVisibility, onNavigate, className,\n}: DashboardCanvasProps) {\n const runtime = usePluginRuntime()\n const registryWidgets = getDashboardWidgets(runtime, { surface, domain })\n const widgets = React.useMemo<DashboardWidgetDef[]>(() => {\n const extra = (extraWidgets ?? []).filter((w) => {\n if (!(w.surfaces ?? ['home', 'plugin-home']).includes(surface)) return false\n return !domain || w.domain === domain\n })\n return extra.length ? [...registryWidgets, ...extra] : registryWidgets\n }, [registryWidgets, extraWidgets, surface, domain])\n const rangeOpts: DashboardRangeOptions | null = range ? (range === true ? {} : range) : null\n\n const forceAll = (initialVisibility ?? (surface === 'plugin-home' ? 'all' : 'default')) === 'all'\n const { prefs, setVisible, reset } = useDashboardPreferences(surface, domain ?? 'home')\n const laidOut = resolveDashboardLayout(widgets, appLayout, prefs ?? undefined, forceAll)\n const visibleIds = React.useMemo(() => new Set(laidOut.map((w) => w.def.id)), [laidOut])\n\n const hasControls = Boolean(rangeOpts) || (customizable && widgets.length > 0)\n const headerBlock = showHeader && (title || subtitle) ? (\n <div>\n {title ? <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1> : null}\n {subtitle ? <p className=\"mt-1 text-sm text-muted-foreground\">{subtitle}</p> : null}\n </div>\n ) : null\n\n // Controls sit inline on the header row (right-aligned) — no separate band, so\n // there's no empty gap above the content.\n const topRow = (headerBlock || hasControls) ? (\n <div className=\"flex items-start justify-between gap-4\">\n {headerBlock ?? <span />}\n {hasControls ? (\n <div className=\"flex shrink-0 items-center gap-2\">\n {customizable && widgets.length > 0 ? (\n <DashboardCustomizeMenu\n widgets={widgets}\n visibleIds={visibleIds}\n onToggle={setVisible}\n onReset={reset}\n label={customizeLabel}\n />\n ) : null}\n {rangeOpts ? <DashboardRangeControl /> : null}\n </div>\n ) : null}\n </div>\n ) : null\n\n const content = (\n <div className={className ?? 'space-y-6 p-6'}>\n {topRow}\n\n {widgets.length === 0 ? (\n <Card>\n <CardHeader>\n <CardTitle>Welcome!</CardTitle>\n <CardDescription>Your dashboard will show key metrics and information here.</CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-muted-foreground\">\n Enable plugins or register dashboard widgets to populate this view.\n </p>\n </CardContent>\n </Card>\n ) : laidOut.length === 0 ? (\n <Card>\n <CardContent className=\"p-6 text-sm text-muted-foreground\">\n All widgets are hidden. Use “Customize” to choose what to show.\n </CardContent>\n </Card>\n ) : (\n <DashboardGrid items={toGridItems(laidOut)} />\n )}\n </div>\n )\n\n const navWrapped = onNavigate\n ? <DashboardNavigateProvider value={onNavigate}>{content}</DashboardNavigateProvider>\n : content\n\n return rangeOpts\n ? (\n <DashboardRangeProvider options={rangeOpts.options} defaultRange={rangeOpts.default} onChange={rangeOpts.onChange}>\n {navWrapped}\n </DashboardRangeProvider>\n )\n : navWrapped\n}\n","import * as React from 'react'\nimport { cn } from '../utils/cn'\n\nexport interface GoldCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Brand-colored hero variant — `bg-primary text-primary-foreground` with a\n * soft branded shadow. Use for the headline card (e.g. a balance hero). When\n * false (default) it's a plain surface card (`bg-card` + border).\n */\n branded?: boolean\n}\n\n/**\n * GoldCard — a generic, reusable rounded card wrapper for dashboard surfaces.\n *\n * The `branded` variant paints the card in the app's primary color so a single\n * hero (balance, headline KPI, CTA) pops against the neutral grid. Both variants\n * are internally full-width so they reflow cleanly inside the responsive\n * DashboardGrid (full-width on mobile, cell-width on desktop).\n */\nexport const GoldCard = React.forwardRef<HTMLDivElement, GoldCardProps>(\n ({ branded = false, className, children, ...rest }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'h-full rounded-3xl p-5',\n branded\n ? 'bg-primary text-primary-foreground shadow-lg shadow-primary/20'\n : 'border border-border bg-card text-card-foreground shadow-sm',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n ),\n)\nGoldCard.displayName = 'GoldCard'\n","import * as React from 'react'\nimport * as LucideIcons from 'lucide-react'\nimport type { IconRef } from './types'\n\n/** Resolve an IconRef (lucide name or component) to a renderable element. */\nexport function renderIcon(icon: IconRef | undefined, className = 'h-4 w-4'): React.ReactNode {\n if (!icon) return null\n if (typeof icon === 'string') {\n const Comp = (LucideIcons as unknown as Record<string, React.ComponentType<{ className?: string }>>)[icon]\n return Comp ? React.createElement(Comp, { className }) : null\n }\n return React.createElement(icon, { className })\n}\n","import * as React from 'react'\nimport { TrendingUp, TrendingDown, Minus } from 'lucide-react'\nimport { cn } from '../utils/cn'\nimport { Card, CardContent } from '../primitives/card'\nimport { renderIcon } from './icon'\nimport type { KpiCurrency, IconRef, KpiFormat, KpiValue, KpiTrend } from './types'\n\nexport function formatKpiValue(value: number, format?: KpiFormat, currency?: KpiCurrency): string {\n const locale = currency?.locale ?? 'pt-BR'\n switch (format) {\n case 'currency':\n return new Intl.NumberFormat(locale, { style: 'currency', currency: currency?.code ?? 'BRL', maximumFractionDigits: 0 }).format(value)\n case 'percent':\n return `${new Intl.NumberFormat(locale, { maximumFractionDigits: 1 }).format(value)}%`\n case 'duration':\n return `${Math.round(value)} min`\n default:\n return new Intl.NumberFormat(locale, { maximumFractionDigits: 1 }).format(value)\n }\n}\n\nfunction deriveTrend(current: number, previous: number | undefined, explicit: KpiTrend | undefined): KpiTrend | undefined {\n if (explicit) return explicit\n if (previous == null) return undefined\n return current > previous ? 'up' : current < previous ? 'down' : 'neutral'\n}\n\nfunction TrendChip({ trend, delta, invert }: { trend: KpiTrend; delta: number | null; invert?: boolean }) {\n if (trend === 'neutral') return null\n const good = invert ? trend === 'down' : trend === 'up'\n const Icon = trend === 'up' ? TrendingUp : TrendingDown\n return (\n <span className={cn(\n 'inline-flex items-center gap-0.5 text-xs font-medium',\n good ? 'text-emerald-600' : 'text-rose-600',\n )}>\n <Icon className=\"h-3 w-3\" />\n {delta != null ? `${delta > 0 ? '+' : ''}${delta}%` : null}\n </span>\n )\n}\n\n/** Trend-aware accent: green when good, red when bad, theme-info when flat. */\nfunction trendColor(trend: KpiTrend | undefined, invert?: boolean): string {\n if (!trend || trend === 'neutral') return 'hsl(var(--info))'\n const good = invert ? trend === 'down' : trend === 'up'\n return good ? '#10b981' : '#f43f5e'\n}\n\n/** Tiny dependency-free SVG sparkline (oldest → newest), with a soft area fill. */\nfunction Sparkline({ data, color }: { data: number[]; color: string }) {\n const gid = React.useId()\n if (!data || data.length < 2) return null\n const W = 96, H = 32, P = 3\n const min = Math.min(...data)\n const max = Math.max(...data)\n const span = max - min || 1\n const step = (W - P * 2) / (data.length - 1)\n const pts = data.map((d, i) => {\n const x = P + i * step\n const y = P + (H - P * 2) * (1 - (d - min) / span)\n return [x, y] as const\n })\n const line = pts.map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${x.toFixed(1)},${y.toFixed(1)}`).join(' ')\n const area = `${line} L${pts[pts.length - 1][0].toFixed(1)},${H} L${pts[0][0].toFixed(1)},${H} Z`\n return (\n <svg viewBox={`0 0 ${W} ${H}`} className=\"h-8 w-24 shrink-0 overflow-visible\" preserveAspectRatio=\"none\" aria-hidden>\n <defs>\n <linearGradient id={gid} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color} stopOpacity=\"0.22\" />\n <stop offset=\"100%\" stopColor={color} stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <path d={area} fill={`url(#${gid})`} />\n <path d={line} fill=\"none\" stroke={color} strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" vectorEffect=\"non-scaling-stroke\" />\n </svg>\n )\n}\n\n/** Semicircular radial gauge showing `value` as a fraction of `goal`. */\nfunction Gauge({ value, goal, color, children }: { value: number; goal: number; color: string; children: React.ReactNode }) {\n const pct = goal > 0 ? Math.min(1, Math.max(0, value / goal)) : 0\n const R = 40, CX = 50, CY = 46, SW = 9\n const len = Math.PI * R\n const d = `M ${CX - R} ${CY} A ${R} ${R} 0 0 1 ${CX + R} ${CY}`\n return (\n <div className=\"relative mx-auto w-full max-w-[160px]\">\n <svg viewBox=\"0 0 100 52\" className=\"w-full\" aria-hidden>\n <path d={d} fill=\"none\" stroke=\"hsl(var(--muted))\" strokeWidth={SW} strokeLinecap=\"round\" />\n <path\n d={d} fill=\"none\" stroke={color} strokeWidth={SW} strokeLinecap=\"round\"\n strokeDasharray={len} strokeDashoffset={len * (1 - pct)}\n />\n </svg>\n <div className=\"absolute inset-x-0 bottom-0 text-center text-2xl font-semibold tracking-tight text-foreground\">\n {children}\n </div>\n </div>\n )\n}\n\nexport interface KpiCardProps {\n label: string\n icon?: IconRef\n /** Pre-formatted/sync value. Provide this OR `compute`. */\n value?: React.ReactNode\n /** Numeric value formatted via `format`. Ignored when `value` is set. */\n amount?: number\n /** Async loader; the card shows a skeleton until it resolves. */\n compute?: () => Promise<KpiValue>\n format?: KpiFormat\n currency?: KpiCurrency\n sub?: React.ReactNode\n /** Trend chip inputs (for sync usage). */\n current?: number\n previous?: number\n trend?: KpiTrend\n /** For cost-style metrics where down is good (e.g. CPA). */\n invertTrend?: boolean\n /** Inline sparkline series (oldest → newest). Async usage: return via KpiValue.spark. */\n spark?: number[]\n /** Render the card as a radial gauge toward this goal value. */\n goal?: number\n /** Accent color for the sparkline/gauge. Defaults to a trend-aware color. */\n accent?: string\n loading?: boolean\n}\n\n/**\n * Canonical KPI card — consolidates the trend-chip card from plugin-marketing\n * and the async MetricCard from plugin-dashboard. Use directly, or via a\n * registered KPI widget (see defineKpiWidget).\n */\nexport function KpiCard(props: KpiCardProps) {\n const { label, icon, sub, format, currency, invertTrend } = props\n const [computed, setComputed] = React.useState<KpiValue | null>(null)\n const [errored, setErrored] = React.useState(false)\n\n React.useEffect(() => {\n if (!props.compute) return\n let cancelled = false\n props.compute()\n .then((v) => { if (!cancelled) setComputed(v) })\n .catch(() => { if (!cancelled) setErrored(true) })\n return () => { cancelled = true }\n }, [props.compute])\n\n const isAsync = Boolean(props.compute)\n const loading = props.loading || (isAsync && computed === null && !errored)\n\n let display: React.ReactNode = props.value\n let current = props.current\n let previous = props.previous\n let trend = props.trend\n let unit: string | undefined\n let spark = props.spark\n\n if (isAsync && computed) {\n display = formatKpiValue(computed.value, format, currency)\n current = computed.value\n previous = computed.previousValue\n trend = computed.trend\n unit = computed.unit\n spark = computed.spark ?? spark\n } else if (display == null && props.amount != null) {\n display = formatKpiValue(props.amount, format, currency)\n current = current ?? props.amount\n }\n\n const resolvedTrend = current != null ? deriveTrend(current, previous, trend) : trend\n const delta = current != null && previous != null && previous !== 0\n ? Math.round(((current - previous) / previous) * 100)\n : null\n const accent = props.accent ?? trendColor(resolvedTrend, invertTrend)\n\n const valueText = (\n <>\n {display}\n {unit ? <span className=\"ml-1 text-sm font-normal text-muted-foreground\">{unit}</span> : null}\n </>\n )\n const trendChip = resolvedTrend ? <TrendChip trend={resolvedTrend} delta={delta} invert={invertTrend} /> : null\n\n // Pick a body layout: gauge (goal set) → sparkline (series set) → plain.\n const isGauge = props.goal != null && current != null\n const hasSpark = Boolean(spark && spark.length >= 2)\n\n let body: React.ReactNode\n if (errored) {\n body = <span className=\"text-sm text-muted-foreground\">—</span>\n } else if (loading) {\n body = isGauge\n ? <div className=\"mx-auto h-16 w-32 animate-pulse rounded bg-muted\" />\n : <div className=\"h-7 w-20 animate-pulse rounded bg-muted\" />\n } else if (isGauge) {\n body = (\n <div>\n <Gauge value={current!} goal={props.goal!} color={accent}>{valueText}</Gauge>\n <div className=\"mt-1 flex items-center justify-center gap-2 text-xs text-muted-foreground\">\n {trendChip}\n <span>{sub ?? `out of ${formatKpiValue(props.goal!, format, currency)}`}</span>\n </div>\n </div>\n )\n } else if (hasSpark) {\n body = (\n <div className=\"flex items-end justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"text-2xl font-semibold tracking-tight text-foreground\">{valueText}</div>\n {trendChip ? <div className=\"mt-0.5\">{trendChip}</div> : null}\n </div>\n <Sparkline data={spark!} color={accent} />\n </div>\n )\n } else {\n body = (\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"text-2xl font-semibold tracking-tight text-foreground\">{valueText}</span>\n {trendChip ? <span className=\"mb-0.5\">{trendChip}</span> : null}\n </div>\n )\n }\n\n return (\n // h-full so cards fill the (stretch) grid cell and every card in a row matches\n // the tallest — labels/subtitles of different lengths no longer misalign them.\n <Card className=\"h-full\">\n <CardContent className=\"flex h-full flex-col p-4\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <span className=\"text-sm text-muted-foreground\">{label}</span>\n <span className=\"text-muted-foreground\">{renderIcon(icon)}</span>\n </div>\n {body}\n {sub && !isGauge ? <p className=\"mt-0.5 text-xs text-muted-foreground\">{sub}</p> : null}\n </CardContent>\n </Card>\n )\n}\n","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 { Card, CardContent, CardHeader, CardTitle } from '../primitives/card'\nimport { renderIcon } from './icon'\nimport type { ChartSeries, ChartType, IconRef } 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 ChartWidgetProps {\n type: ChartType\n /** Rows of data; each key referenced by a series.dataKey. */\n data: Array<Record<string, string | number>>\n series: ChartSeries[]\n /** Key for the category axis (x-axis / pie label). */\n categoryKey?: string\n title?: string\n icon?: IconRef\n /** Right-aligned header content (e.g. a range selector). */\n headerAction?: React.ReactNode\n height?: number\n className?: string\n}\n\n/** recharts-backed chart in a Card. Replaces the hand-rolled CSS bar charts. */\nexport function ChartWidget({\n type, data, series, categoryKey = 'name', title, icon, headerAction, height = 240, className,\n}: ChartWidgetProps) {\n const color = (i: number, explicit?: string) => explicit ?? PALETTE[i % PALETTE.length]\n\n return (\n <Card className={className}>\n {(title || headerAction) && (\n <CardHeader className=\"flex-row items-center justify-between space-y-0\">\n {title ? (\n <CardTitle className=\"flex items-center gap-2\">\n {renderIcon(icon)}\n {title}\n </CardTitle>\n ) : <span />}\n {headerAction}\n </CardHeader>\n )}\n <CardContent className=\"p-4 pt-2\">\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 </CardContent>\n </Card>\n )\n}\n","import * as React from 'react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { Card, CardContent, CardHeader, CardTitle } from '../primitives/card'\nimport { DataTable } from '../primitives/data-table'\nimport { renderIcon } from './icon'\nimport type { IconRef } from './types'\n\nexport interface TableWidgetProps<TData> {\n title?: string\n icon?: IconRef\n columns: ColumnDef<TData, unknown>[]\n data: TData[]\n loading?: boolean\n emptyMessage?: string\n onRowClick?: (row: TData) => void\n /** Right-aligned header content (e.g. a \"view all\" link). */\n headerAction?: React.ReactNode\n className?: string\n}\n\n/** \"Recent N\" table in a Card — wraps the shared DataTable primitive. */\nexport function TableWidget<TData>({\n title, icon, columns, data, loading, emptyMessage, onRowClick, headerAction, className,\n}: TableWidgetProps<TData>) {\n return (\n <Card className={className}>\n {(title || headerAction) && (\n <CardHeader className=\"flex-row items-center justify-between space-y-0\">\n {title ? (\n <CardTitle className=\"flex items-center gap-2\">\n {renderIcon(icon)}\n {title}\n </CardTitle>\n ) : <span />}\n {headerAction}\n </CardHeader>\n )}\n <CardContent className=\"p-0\">\n <DataTable\n columns={columns}\n data={data}\n loading={loading}\n emptyMessage={emptyMessage}\n onRowClick={onRowClick}\n variant=\"flat\"\n compact\n />\n </CardContent>\n </Card>\n )\n}\n","import * as React from 'react'\nimport { Check, Circle } from 'lucide-react'\nimport { cn } from '../utils/cn'\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from '../primitives/card'\nimport { Button } from '../primitives/button'\nimport { renderIcon } from './icon'\nimport type { IconRef } from './types'\n\nexport interface OnboardingStepInput {\n id: string\n title: string\n description?: string\n icon?: IconRef\n /** Async check: resolves true when the step is already complete. */\n check?: () => Promise<boolean>\n /** Pre-resolved completion (takes precedence over `check`). */\n done?: boolean\n /** Route string (uses onNavigate) or a callback. */\n action?: string | (() => void)\n actionLabel?: string\n}\n\nexport interface OnboardingWidgetProps {\n title?: string\n subtitle?: string\n steps: OnboardingStepInput[]\n onNavigate?: (path: string) => void\n /** Hide the whole widget once every step is complete. Default: true. */\n hideWhenComplete?: boolean\n className?: string\n}\n\n/** Getting-started checklist (\"first steps to set up\") with progress. */\nexport function OnboardingWidget({\n title = 'Getting started', subtitle, steps, onNavigate, hideWhenComplete = true, className,\n}: OnboardingWidgetProps) {\n const [completed, setCompleted] = React.useState<Record<string, boolean>>(() =>\n Object.fromEntries(steps.map((s) => [s.id, Boolean(s.done)])),\n )\n\n React.useEffect(() => {\n let cancelled = false\n Promise.all(steps.map(async (s) => {\n if (s.done != null) return [s.id, s.done] as const\n if (!s.check) return [s.id, false] as const\n try { return [s.id, await s.check()] as const } catch { return [s.id, false] as const }\n })).then((entries) => { if (!cancelled) setCompleted(Object.fromEntries(entries)) })\n return () => { cancelled = true }\n }, [steps])\n\n const doneCount = steps.filter((s) => completed[s.id]).length\n const allDone = doneCount === steps.length\n if (allDone && hideWhenComplete) return null\n\n const runAction = (action: OnboardingStepInput['action']) => {\n if (!action) return\n if (typeof action === 'string') onNavigate?.(action)\n else action()\n }\n\n return (\n <Card className={className}>\n <CardHeader>\n <CardTitle>{title}</CardTitle>\n {subtitle ? <CardDescription>{subtitle}</CardDescription> : null}\n <div className=\"mt-2 flex items-center gap-3\">\n <div className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-muted\">\n <div className=\"h-full rounded-full bg-primary transition-all\"\n style={{ width: `${steps.length ? (doneCount / steps.length) * 100 : 0}%` }} />\n </div>\n <span className=\"text-xs font-medium text-muted-foreground\">{doneCount}/{steps.length}</span>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-1 pt-0\">\n {steps.map((step) => {\n const isDone = completed[step.id]\n return (\n <div key={step.id} className=\"flex items-center gap-3 rounded-lg px-2 py-2.5 hover:bg-muted/50\">\n <span className={cn(\n 'flex h-7 w-7 shrink-0 items-center justify-center rounded-full',\n isDone ? 'bg-emerald-100 text-emerald-600' : 'bg-muted text-muted-foreground',\n )}>\n {isDone ? <Check className=\"h-4 w-4\" /> : (renderIcon(step.icon, 'h-4 w-4') ?? <Circle className=\"h-4 w-4\" />)}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className={cn('text-sm font-medium', isDone && 'text-muted-foreground line-through')}>{step.title}</p>\n {step.description ? <p className=\"truncate text-xs text-muted-foreground\">{step.description}</p> : null}\n </div>\n {!isDone && step.action ? (\n <Button size=\"sm\" variant=\"outline\" onClick={() => runAction(step.action)}>\n {step.actionLabel ?? 'Start'}\n </Button>\n ) : null}\n </div>\n )\n })}\n </CardContent>\n </Card>\n )\n}\n","import type { DashboardWidgetDef, DashboardWidgetKind, DashboardSurface } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Widget-definition builders. Each sets the right `kind` + default `span` so a\n// plugin author writes data, not layout. The widget's component renders the\n// presentational primitives (KpiCard, ChartWidget, TableWidget, ...).\n// ---------------------------------------------------------------------------\n\nexport interface DefineWidgetInput {\n id: string\n title: string\n component: React.ComponentType<unknown>\n description?: string\n icon?: string\n domain?: string\n span?: 1 | 2 | 3 | 4\n defaultVisible?: boolean\n defaultOrder?: number\n surfaces?: DashboardSurface[]\n verticalId?: DashboardWidgetDef['verticalId']\n permission?: DashboardWidgetDef['permission']\n props?: Record<string, unknown>\n}\n\nfunction build(kind: DashboardWidgetKind, defaultSpan: 1 | 2 | 3 | 4, input: DefineWidgetInput): DashboardWidgetDef {\n return {\n kind,\n span: input.span ?? defaultSpan,\n defaultVisible: input.defaultVisible ?? true,\n id: input.id,\n title: input.title,\n description: input.description,\n icon: input.icon,\n domain: input.domain,\n defaultOrder: input.defaultOrder,\n surfaces: input.surfaces,\n verticalId: input.verticalId,\n permission: input.permission,\n component: input.component,\n props: input.props,\n }\n}\n\n/** KPI card widget — spans 1 column (forms the 4-up top row). */\nexport const defineKpiWidget = (input: DefineWidgetInput): DashboardWidgetDef => build('kpi', 1, input)\n/** Chart widget — spans 2 columns by default. */\nexport const defineChartWidget = (input: DefineWidgetInput): DashboardWidgetDef => build('chart', 2, input)\n/** Table widget — spans the full row by default. */\nexport const defineTableWidget = (input: DefineWidgetInput): DashboardWidgetDef => build('table', 4, input)\n/** Onboarding checklist widget — spans half the row (2 cols) by default. */\nexport const defineOnboardingWidget = (input: DefineWidgetInput): DashboardWidgetDef => build('onboarding', 2, input)\n/** Custom client-provided widget — spans 2 columns by default. */\nexport const defineCustomWidget = (input: DefineWidgetInput): DashboardWidgetDef => build('custom', 2, input)\n"]}
@@ -1,9 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkVVVZO2LE_cjs = require('./chunk-VVVZO2LE.cjs');
4
- var React3 = require('react');
5
- var reactSlot = require('@radix-ui/react-slot');
6
- var classVarianceAuthority = require('class-variance-authority');
3
+ var chunkH6OULCHF_cjs = require('./chunk-H6OULCHF.cjs');
4
+ var React2 = require('react');
7
5
  var jsxRuntime = require('react/jsx-runtime');
8
6
  var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
9
7
  var lucideReact = require('lucide-react');
@@ -27,56 +25,14 @@ function _interopNamespace(e) {
27
25
  return Object.freeze(n);
28
26
  }
29
27
 
30
- var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
28
+ var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
31
29
  var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
32
30
 
33
- var buttonVariants = classVarianceAuthority.cva(
34
- "inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-button text-sm font-semibold ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
35
- {
36
- variants: {
37
- variant: {
38
- // Polaris primary — near-black brand with the stronger primary bevel
39
- default: "bg-primary text-primary-foreground border border-primary shadow-button-primary hover:bg-primary/90 active:shadow-button-inset",
40
- destructive: "bg-destructive text-destructive-foreground border border-destructive shadow-button-primary hover:bg-destructive/90 active:shadow-button-inset",
41
- // Default/secondary surface — white with hairline + bevel
42
- outline: "border border-border bg-card text-foreground shadow-button hover:bg-muted active:shadow-button-inset",
43
- secondary: "border border-border bg-card text-foreground shadow-button hover:bg-muted active:shadow-button-inset",
44
- ghost: "hover:bg-muted hover:text-foreground",
45
- link: "text-info underline-offset-4 hover:underline"
46
- },
47
- size: {
48
- // Polaris button sizes: md 30px, sm 26px, lg 36px
49
- default: "h-[30px] px-3 py-1",
50
- sm: "h-[26px] rounded-button px-2.5 text-xs",
51
- lg: "h-9 rounded-button px-4 text-sm",
52
- icon: "h-[30px] w-[30px]"
53
- }
54
- },
55
- defaultVariants: {
56
- variant: "default",
57
- size: "default"
58
- }
59
- }
60
- );
61
- var Button = React3__namespace.forwardRef(
62
- ({ className, variant, size, asChild = false, ...props }, ref) => {
63
- const Comp = asChild ? reactSlot.Slot : "button";
64
- return /* @__PURE__ */ jsxRuntime.jsx(
65
- Comp,
66
- {
67
- className: chunkVVVZO2LE_cjs.cn(buttonVariants({ variant, size, className })),
68
- ref,
69
- ...props
70
- }
71
- );
72
- }
73
- );
74
- Button.displayName = "Button";
75
- var Card = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
31
+ var Card = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
76
32
  "div",
77
33
  {
78
34
  ref,
79
- className: chunkVVVZO2LE_cjs.cn(
35
+ className: chunkH6OULCHF_cjs.cn(
80
36
  "fayz-glass-surface rounded-card border bg-card text-card-foreground shadow-sm",
81
37
  className
82
38
  ),
@@ -84,20 +40,20 @@ var Card = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__
84
40
  }
85
41
  ));
86
42
  Card.displayName = "Card";
87
- var CardHeader = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
43
+ var CardHeader = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
88
44
  "div",
89
45
  {
90
46
  ref,
91
- className: chunkVVVZO2LE_cjs.cn("flex flex-col space-y-1 p-4", className),
47
+ className: chunkH6OULCHF_cjs.cn("flex flex-col space-y-1 p-4", className),
92
48
  ...props
93
49
  }
94
50
  ));
95
51
  CardHeader.displayName = "CardHeader";
96
- var CardTitle = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
52
+ var CardTitle = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
97
53
  "h3",
98
54
  {
99
55
  ref,
100
- className: chunkVVVZO2LE_cjs.cn(
56
+ className: chunkH6OULCHF_cjs.cn(
101
57
  "text-sm font-semibold leading-tight tracking-tight",
102
58
  className
103
59
  ),
@@ -105,22 +61,22 @@ var CardTitle = React3__namespace.forwardRef(({ className, ...props }, ref) => /
105
61
  }
106
62
  ));
107
63
  CardTitle.displayName = "CardTitle";
108
- var CardDescription = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
64
+ var CardDescription = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
109
65
  "p",
110
66
  {
111
67
  ref,
112
- className: chunkVVVZO2LE_cjs.cn("text-xs text-muted-foreground", className),
68
+ className: chunkH6OULCHF_cjs.cn("text-xs text-muted-foreground", className),
113
69
  ...props
114
70
  }
115
71
  ));
116
72
  CardDescription.displayName = "CardDescription";
117
- var CardContent = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: chunkVVVZO2LE_cjs.cn("p-4 pt-0", className), ...props }));
73
+ var CardContent = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: chunkH6OULCHF_cjs.cn("p-4 pt-0", className), ...props }));
118
74
  CardContent.displayName = "CardContent";
119
- var CardFooter = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
75
+ var CardFooter = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
120
76
  "div",
121
77
  {
122
78
  ref,
123
- className: chunkVVVZO2LE_cjs.cn("flex items-center p-4 pt-0", className),
79
+ className: chunkH6OULCHF_cjs.cn("flex items-center p-4 pt-0", className),
124
80
  ...props
125
81
  }
126
82
  ));
@@ -131,12 +87,12 @@ var DropdownGroup = DropdownMenuPrimitive__namespace.Group;
131
87
  var DropdownPortal = DropdownMenuPrimitive__namespace.Portal;
132
88
  var DropdownSub = DropdownMenuPrimitive__namespace.Sub;
133
89
  var DropdownRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
134
- var DropdownSubTrigger = React3__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
90
+ var DropdownSubTrigger = React2__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
135
91
  DropdownMenuPrimitive__namespace.SubTrigger,
136
92
  {
137
93
  ref,
138
- className: chunkVVVZO2LE_cjs.cn(
139
- "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-muted data-[state=open]:bg-muted",
94
+ className: chunkH6OULCHF_cjs.cn(
95
+ "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",
140
96
  inset && "pl-8",
141
97
  className
142
98
  ),
@@ -148,11 +104,11 @@ var DropdownSubTrigger = React3__namespace.forwardRef(({ className, inset, child
148
104
  }
149
105
  ));
150
106
  DropdownSubTrigger.displayName = DropdownMenuPrimitive__namespace.SubTrigger.displayName;
151
- var DropdownSubContent = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
107
+ var DropdownSubContent = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
152
108
  DropdownMenuPrimitive__namespace.SubContent,
153
109
  {
154
110
  ref,
155
- className: chunkVVVZO2LE_cjs.cn(
111
+ className: chunkH6OULCHF_cjs.cn(
156
112
  "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",
157
113
  className
158
114
  ),
@@ -160,12 +116,12 @@ var DropdownSubContent = React3__namespace.forwardRef(({ className, ...props },
160
116
  }
161
117
  ));
162
118
  DropdownSubContent.displayName = DropdownMenuPrimitive__namespace.SubContent.displayName;
163
- var DropdownContent = React3__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
119
+ var DropdownContent = React2__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
164
120
  DropdownMenuPrimitive__namespace.Content,
165
121
  {
166
122
  ref,
167
123
  sideOffset,
168
- className: chunkVVVZO2LE_cjs.cn(
124
+ className: chunkH6OULCHF_cjs.cn(
169
125
  "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",
170
126
  className
171
127
  ),
@@ -173,12 +129,12 @@ var DropdownContent = React3__namespace.forwardRef(({ className, sideOffset = 4,
173
129
  }
174
130
  ) }));
175
131
  DropdownContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
176
- var DropdownItem = React3__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
132
+ var DropdownItem = React2__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
177
133
  DropdownMenuPrimitive__namespace.Item,
178
134
  {
179
135
  ref,
180
- className: chunkVVVZO2LE_cjs.cn(
181
- "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
136
+ className: chunkH6OULCHF_cjs.cn(
137
+ "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",
182
138
  inset && "pl-8",
183
139
  className
184
140
  ),
@@ -186,12 +142,12 @@ var DropdownItem = React3__namespace.forwardRef(({ className, inset, ...props },
186
142
  }
187
143
  ));
188
144
  DropdownItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
189
- var DropdownCheckboxItem = React3__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
145
+ var DropdownCheckboxItem = React2__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
190
146
  DropdownMenuPrimitive__namespace.CheckboxItem,
191
147
  {
192
148
  ref,
193
- className: chunkVVVZO2LE_cjs.cn(
194
- "relative flex cursor-default select-none items-center rounded-sm 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",
149
+ className: chunkH6OULCHF_cjs.cn(
150
+ "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",
195
151
  className
196
152
  ),
197
153
  checked,
@@ -203,12 +159,12 @@ var DropdownCheckboxItem = React3__namespace.forwardRef(({ className, children,
203
159
  }
204
160
  ));
205
161
  DropdownCheckboxItem.displayName = DropdownMenuPrimitive__namespace.CheckboxItem.displayName;
206
- var DropdownRadioItem = React3__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
162
+ var DropdownRadioItem = React2__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
207
163
  DropdownMenuPrimitive__namespace.RadioItem,
208
164
  {
209
165
  ref,
210
- className: chunkVVVZO2LE_cjs.cn(
211
- "relative flex cursor-default select-none items-center rounded-sm 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",
166
+ className: chunkH6OULCHF_cjs.cn(
167
+ "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",
212
168
  className
213
169
  ),
214
170
  ...props,
@@ -219,11 +175,11 @@ var DropdownRadioItem = React3__namespace.forwardRef(({ className, children, ...
219
175
  }
220
176
  ));
221
177
  DropdownRadioItem.displayName = DropdownMenuPrimitive__namespace.RadioItem.displayName;
222
- var DropdownLabel = React3__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
178
+ var DropdownLabel = React2__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
223
179
  DropdownMenuPrimitive__namespace.Label,
224
180
  {
225
181
  ref,
226
- className: chunkVVVZO2LE_cjs.cn(
182
+ className: chunkH6OULCHF_cjs.cn(
227
183
  "px-2 py-1.5 text-sm font-semibold",
228
184
  inset && "pl-8",
229
185
  className
@@ -232,11 +188,11 @@ var DropdownLabel = React3__namespace.forwardRef(({ className, inset, ...props }
232
188
  }
233
189
  ));
234
190
  DropdownLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
235
- var DropdownSeparator = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
191
+ var DropdownSeparator = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
236
192
  DropdownMenuPrimitive__namespace.Separator,
237
193
  {
238
194
  ref,
239
- className: chunkVVVZO2LE_cjs.cn("-mx-1 my-1 h-px bg-muted", className),
195
+ className: chunkH6OULCHF_cjs.cn("-mx-1 my-1 h-px bg-muted", className),
240
196
  ...props
241
197
  }
242
198
  ));
@@ -248,7 +204,7 @@ var DropdownShortcut = ({
248
204
  return /* @__PURE__ */ jsxRuntime.jsx(
249
205
  "span",
250
206
  {
251
- className: chunkVVVZO2LE_cjs.cn("ml-auto text-xs tracking-widest opacity-60", className),
207
+ className: chunkH6OULCHF_cjs.cn("ml-auto text-xs tracking-widest opacity-60", className),
252
208
  ...props
253
209
  }
254
210
  );
@@ -271,7 +227,7 @@ function DataTable({
271
227
  const tdCls = compact ? "px-3 py-1.5 align-middle text-xs" : "px-4 py-3 align-middle";
272
228
  const tableCls = compact ? "w-full text-xs min-w-max" : "w-full text-sm min-w-max";
273
229
  const rowHoverCls = isCard ? "hover:bg-muted/30" : "hover:bg-muted/20";
274
- const [sorting, setSorting] = React3__namespace.useState([]);
230
+ const [sorting, setSorting] = React2__namespace.useState([]);
275
231
  const table = reactTable.useReactTable({
276
232
  data,
277
233
  columns,
@@ -311,7 +267,7 @@ function DataTable({
311
267
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: table.getRowModel().rows?.length ? table.getRowModel().rows.map((row) => /* @__PURE__ */ jsxRuntime.jsx(
312
268
  "tr",
313
269
  {
314
- className: chunkVVVZO2LE_cjs.cn(
270
+ className: chunkH6OULCHF_cjs.cn(
315
271
  `border-b last:border-0 transition-colors ${rowHoverCls}`,
316
272
  onRowClick && "cursor-pointer"
317
273
  ),
@@ -340,7 +296,7 @@ function SegmentedControl({
340
296
  {
341
297
  role: "tablist",
342
298
  "aria-label": rest["aria-label"],
343
- className: chunkVVVZO2LE_cjs.cn(
299
+ className: chunkH6OULCHF_cjs.cn(
344
300
  "inline-flex items-center rounded-button border border-border bg-card p-0.5 shadow-button",
345
301
  SIZE[size].container,
346
302
  className
@@ -354,7 +310,7 @@ function SegmentedControl({
354
310
  role: "tab",
355
311
  "aria-selected": active,
356
312
  onClick: () => onChange(item.value),
357
- className: chunkVVVZO2LE_cjs.cn(
313
+ className: chunkH6OULCHF_cjs.cn(
358
314
  "flex h-full items-center rounded-button font-semibold transition-colors",
359
315
  SIZE[size].segment,
360
316
  active ? "bg-foreground text-background" : "text-muted-foreground hover:bg-muted/60"
@@ -368,7 +324,6 @@ function SegmentedControl({
368
324
  );
369
325
  }
370
326
 
371
- exports.Button = Button;
372
327
  exports.Card = Card;
373
328
  exports.CardContent = CardContent;
374
329
  exports.CardDescription = CardDescription;
@@ -392,6 +347,5 @@ exports.DropdownSubContent = DropdownSubContent;
392
347
  exports.DropdownSubTrigger = DropdownSubTrigger;
393
348
  exports.DropdownTrigger = DropdownTrigger;
394
349
  exports.SegmentedControl = SegmentedControl;
395
- exports.buttonVariants = buttonVariants;
396
- //# sourceMappingURL=chunk-D6SXPF4F.cjs.map
397
- //# sourceMappingURL=chunk-D6SXPF4F.cjs.map
350
+ //# sourceMappingURL=chunk-ODY3GZ3Y.cjs.map
351
+ //# sourceMappingURL=chunk-ODY3GZ3Y.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/primitives/card.tsx","../src/primitives/dropdown.tsx","../src/primitives/data-table.tsx","../src/primitives/segmented-control.tsx"],"names":["React","jsx","cn","DropdownMenuPrimitive","React2","jsxs","ChevronRight","Check","Circle","React3","useReactTable","getCoreRowModel","getSortedRowModel","_","flexRender","ArrowUp","ArrowDown","ArrowUpDown"],"mappings":"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","file":"chunk-ODY3GZ3Y.cjs","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 const wrapperCls = isCard ? 'rounded-lg border bg-card shadow-sm overflow-x-auto' : 'rounded-lg border overflow-x-auto'\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 <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 )\n }\n\n return (\n <div className={wrapperCls}>\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 )\n}\n\nexport { DataTable, type DataTableProps }\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"]}