@fayz-ai/ui 0.9.0 → 0.10.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.
- package/README.md +2 -2
- package/dist/analytics/AnalyticsCard.d.ts +10 -0
- package/dist/analytics/AnalyticsCard.d.ts.map +1 -0
- package/dist/analytics/AnalyticsControls.d.ts +18 -0
- package/dist/analytics/AnalyticsControls.d.ts.map +1 -0
- package/dist/analytics/AnalyticsGrid.d.ts +16 -0
- package/dist/analytics/AnalyticsGrid.d.ts.map +1 -0
- package/dist/analytics/context.d.ts +58 -0
- package/dist/analytics/context.d.ts.map +1 -0
- package/dist/analytics/derive.d.ts +81 -0
- package/dist/analytics/derive.d.ts.map +1 -0
- package/dist/analytics/index.d.ts +13 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/range.d.ts +22 -0
- package/dist/analytics/range.d.ts.map +1 -0
- package/dist/{chunk-PVIB724L.js → chunk-22EVFMS3.js} +5 -3
- package/dist/chunk-22EVFMS3.js.map +1 -0
- package/dist/{chunk-G6OKZ7WL.js → chunk-6V5MGYXH.js} +13 -9
- package/dist/chunk-6V5MGYXH.js.map +1 -0
- package/dist/{chunk-KV3MHB6N.js → chunk-H63TOSQ7.js} +196 -53
- package/dist/chunk-H63TOSQ7.js.map +1 -0
- package/dist/{chunk-OUPJDGKE.js → chunk-I6CPKAOD.js} +134 -37
- package/dist/chunk-I6CPKAOD.js.map +1 -0
- package/dist/{chunk-YRVE4FOD.js → chunk-OKZ6WQB3.js} +3 -3
- package/dist/chunk-OKZ6WQB3.js.map +1 -0
- package/dist/{chunk-S5KNM4D2.js → chunk-SEIY2F5F.js} +235 -107
- package/dist/chunk-SEIY2F5F.js.map +1 -0
- package/dist/{chunk-75EFDLST.js → chunk-VAKWUUVC.js} +157 -6
- package/dist/chunk-VAKWUUVC.js.map +1 -0
- package/dist/dashboard/OnboardingWidget.d.ts +2 -14
- package/dist/dashboard/OnboardingWidget.d.ts.map +1 -1
- package/dist/dashboard/SidebarOnboarding.d.ts +28 -0
- package/dist/dashboard/SidebarOnboarding.d.ts.map +1 -0
- package/dist/dashboard/index.d.ts +2 -0
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +4 -4
- package/dist/dashboard/types.d.ts +18 -0
- package/dist/dashboard/types.d.ts.map +1 -1
- package/dist/dashboard/useOnboardingProgress.d.ts +28 -0
- package/dist/dashboard/useOnboardingProgress.d.ts.map +1 -0
- package/dist/icons.js +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +960 -14
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.d.ts +14 -1
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/ModulePage.d.ts +11 -2
- package/dist/layout/ModulePage.d.ts.map +1 -1
- package/dist/layout/Sidebar.d.ts +8 -1
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/index.js +4 -4
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/preset.d.ts +3 -0
- package/dist/preset.d.ts.map +1 -0
- package/dist/primitives/data-table.d.ts +19 -4
- package/dist/primitives/data-table.d.ts.map +1 -1
- package/dist/primitives/date-picker.d.ts +4 -2
- package/dist/primitives/date-picker.d.ts.map +1 -1
- package/dist/primitives/filter-chip.d.ts +26 -0
- package/dist/primitives/filter-chip.d.ts.map +1 -0
- package/dist/primitives/header-tabs.d.ts +32 -0
- package/dist/primitives/header-tabs.d.ts.map +1 -0
- package/dist/primitives/hint.d.ts +25 -0
- package/dist/primitives/hint.d.ts.map +1 -0
- package/dist/primitives/index.d.ts +7 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +4 -4
- package/dist/primitives/list-view.d.ts +14 -1
- package/dist/primitives/list-view.d.ts.map +1 -1
- package/dist/primitives/page-header.d.ts +23 -0
- package/dist/primitives/page-header.d.ts.map +1 -0
- package/dist/primitives/stat-tiles.d.ts +30 -0
- package/dist/primitives/stat-tiles.d.ts.map +1 -0
- package/dist/primitives/switch.d.ts +11 -0
- package/dist/primitives/switch.d.ts.map +1 -0
- package/dist/stores/index.d.ts +1 -0
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/page-header.store.d.ts +69 -0
- package/dist/stores/page-header.store.d.ts.map +1 -0
- package/package.json +4 -13
- package/dist/chunk-75EFDLST.js.map +0 -1
- package/dist/chunk-G6OKZ7WL.js.map +0 -1
- package/dist/chunk-KV3MHB6N.js.map +0 -1
- package/dist/chunk-OUPJDGKE.js.map +0 -1
- package/dist/chunk-PVIB724L.js.map +0 -1
- package/dist/chunk-S5KNM4D2.js.map +0 -1
- package/dist/chunk-YRVE4FOD.js.map +0 -1
- package/dist/utils/cn.d.ts.map +0 -1
- package/src/dashboard/ChartWidget.tsx +0 -50
- package/src/dashboard/ChartWidgetInner.tsx +0 -83
- package/src/dashboard/DashboardCanvas.tsx +0 -210
- package/src/dashboard/DashboardCustomizeMenu.tsx +0 -53
- package/src/dashboard/DashboardGrid.tsx +0 -35
- package/src/dashboard/DashboardRange.tsx +0 -62
- package/src/dashboard/GoldCard.tsx +0 -38
- package/src/dashboard/KpiCard.tsx +0 -238
- package/src/dashboard/OnboardingWidget.tsx +0 -140
- package/src/dashboard/TableWidget.tsx +0 -51
- package/src/dashboard/define.ts +0 -53
- package/src/dashboard/icon.ts +0 -13
- package/src/dashboard/index.ts +0 -38
- package/src/dashboard/layout.ts +0 -50
- package/src/dashboard/preferences.ts +0 -71
- package/src/dashboard/types.ts +0 -41
- package/src/icons.ts +0 -66
- package/src/index.ts +0 -238
- package/src/layout/AppShell.tsx +0 -987
- package/src/layout/ContentSplit.tsx +0 -153
- package/src/layout/ModulePage.tsx +0 -466
- package/src/layout/PageTransition.tsx +0 -57
- package/src/layout/SaveBar.tsx +0 -247
- package/src/layout/Sidebar.tsx +0 -535
- package/src/layout/Topbar.tsx +0 -462
- package/src/layout/index.ts +0 -39
- package/src/layout/useCrossModuleBack.ts +0 -30
- package/src/primitives/Avatar.tsx +0 -48
- package/src/primitives/SearchCombobox.tsx +0 -216
- package/src/primitives/badge.tsx +0 -68
- package/src/primitives/breadcrumb.tsx +0 -43
- package/src/primitives/button.tsx +0 -60
- package/src/primitives/card.tsx +0 -79
- package/src/primitives/checkbox.tsx +0 -53
- package/src/primitives/confirm-dialog.tsx +0 -125
- package/src/primitives/currency-input.tsx +0 -121
- package/src/primitives/data-table.tsx +0 -160
- package/src/primitives/date-picker.tsx +0 -225
- package/src/primitives/dropdown.tsx +0 -196
- package/src/primitives/index.ts +0 -87
- package/src/primitives/input.tsx +0 -50
- package/src/primitives/list-view.tsx +0 -252
- package/src/primitives/markdown-editor.tsx +0 -75
- package/src/primitives/markdown.tsx +0 -169
- package/src/primitives/modal.tsx +0 -156
- package/src/primitives/phone-link.tsx +0 -138
- package/src/primitives/popover.tsx +0 -30
- package/src/primitives/search-select.tsx +0 -314
- package/src/primitives/segmented-control.tsx +0 -66
- package/src/primitives/select.tsx +0 -157
- package/src/primitives/separator.tsx +0 -29
- package/src/primitives/sheet.tsx +0 -181
- package/src/primitives/skeleton.tsx +0 -46
- package/src/primitives/tabs.tsx +0 -53
- package/src/primitives/time-picker.tsx +0 -148
- package/src/primitives/toast.tsx +0 -46
- package/src/primitives/tooltip.tsx +0 -28
- package/src/stores/index.ts +0 -10
- package/src/stores/layout.store.ts +0 -31
- package/src/stores/theme.store.ts +0 -457
- package/src/styles.css +0 -461
- package/src/tailwind.ts +0 -43
- package/src/theme/index.ts +0 -94
- package/src/theme/preset.ts +0 -209
- package/src/theme/presets.ts +0 -106
- package/src/utils/cn.ts +0 -6
- /package/dist/{utils → lib}/cn.d.ts +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/Avatar.tsx"],"names":[],"mappings":";;;;;;;;;;;;;AAKA,IAAM,MAAA,GAAe,iBAGnB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,IAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,+DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,MAAA,CAAO,cAA8B,eAAA,CAAA,IAAA,CAAK,WAAA;AAE1C,IAAM,WAAA,GAAoB,iBAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,KAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,IACrD,GAAG;AAAA;AACN,CACD;AACD,WAAA,CAAY,cAA8B,eAAA,CAAA,KAAA,CAAM,WAAA;AAEhD,IAAM,cAAA,GAAuB,iBAG3B,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,QAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,sEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,cAAA,CAAe,cAA8B,eAAA,CAAA,QAAA,CAAS,WAAA","file":"index.js","sourcesContent":["import * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '../utils/cn'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n 'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',\n className\n )}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-muted',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/primitives/Avatar.tsx","../src/analytics/range.ts","../src/analytics/derive.ts","../src/analytics/context.tsx","../src/analytics/AnalyticsCard.tsx","../src/analytics/AnalyticsGrid.tsx","../src/analytics/AnalyticsControls.tsx"],"names":["React","value","jsx","React3","React4","React5","ControlButton","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '../lib/cn'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n 'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',\n className\n )}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-muted',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import type { AnalyticsDateRange, AnalyticsCompare } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Date ranges and their comparison windows.\n//\n// All arithmetic is done on LOCAL calendar days and serialized as YYYY-MM-DD.\n// Using toISOString() here would silently shift every range by the UTC offset —\n// in America/Sao_Paulo \"today\" would start at 21:00 yesterday, which is exactly\n// how a dashboard ends up disagreeing with the orders list by one day.\n// ---------------------------------------------------------------------------\n\nexport type AnalyticsRangePreset =\n | 'today' | 'yesterday' | 'last_7_days' | 'last_30_days' | 'last_90_days'\n | 'this_month' | 'last_month' | 'this_quarter' | 'this_year' | 'custom'\n\nexport function toDayString(d: Date): string {\n const y = d.getFullYear()\n const m = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nexport function parseDay(s: string): Date {\n // Noon avoids the DST edge where midnight does not exist on a spring-forward day.\n const [y, m, d] = s.split('-').map(Number)\n return new Date(y ?? 1970, (m ?? 1) - 1, d ?? 1, 12, 0, 0, 0)\n}\n\nfunction shiftDays(d: Date, days: number): Date {\n const next = new Date(d)\n next.setDate(next.getDate() + days)\n return next\n}\n\n/** Inclusive whole-day count, so a single-day range compares against one day. */\nexport function rangeLengthDays(range: AnalyticsDateRange): number {\n const from = parseDay(range.from)\n const to = parseDay(range.to)\n return Math.max(1, Math.round((to.getTime() - from.getTime()) / 86_400_000) + 1)\n}\n\nexport function resolveRangePreset(preset: AnalyticsRangePreset, today = new Date()): AnalyticsDateRange {\n const base = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 12)\n switch (preset) {\n case 'today':\n return { from: toDayString(base), to: toDayString(base) }\n case 'yesterday': {\n const y = shiftDays(base, -1)\n return { from: toDayString(y), to: toDayString(y) }\n }\n // \"Last 7 days\" includes today, so it spans today minus six — not minus\n // seven, which would be eight days of data under a seven-day label.\n case 'last_7_days':\n return { from: toDayString(shiftDays(base, -6)), to: toDayString(base) }\n case 'last_30_days':\n return { from: toDayString(shiftDays(base, -29)), to: toDayString(base) }\n case 'last_90_days':\n return { from: toDayString(shiftDays(base, -89)), to: toDayString(base) }\n case 'this_month':\n return {\n from: toDayString(new Date(base.getFullYear(), base.getMonth(), 1, 12)),\n to: toDayString(base),\n }\n case 'last_month': {\n const first = new Date(base.getFullYear(), base.getMonth() - 1, 1, 12)\n const last = new Date(base.getFullYear(), base.getMonth(), 0, 12)\n return { from: toDayString(first), to: toDayString(last) }\n }\n case 'this_quarter': {\n const q = Math.floor(base.getMonth() / 3)\n return {\n from: toDayString(new Date(base.getFullYear(), q * 3, 1, 12)),\n to: toDayString(base),\n }\n }\n case 'this_year':\n return { from: toDayString(new Date(base.getFullYear(), 0, 1, 12)), to: toDayString(base) }\n default:\n return { from: toDayString(shiftDays(base, -29)), to: toDayString(base) }\n }\n}\n\n/**\n * The window a range is compared against.\n *\n * 'previous_period' is the same NUMBER OF DAYS ending the day before `from`, so\n * a 7-day range compares against the 7 days before it — never an overlapping\n * window, which would double-count the boundary day in both halves.\n */\nexport function comparisonRange(\n range: AnalyticsDateRange,\n compare: AnalyticsCompare | undefined,\n): AnalyticsDateRange | null {\n if (!compare || compare === 'none') return null\n\n if (compare === 'previous_year') {\n const from = parseDay(range.from)\n const to = parseDay(range.to)\n from.setFullYear(from.getFullYear() - 1)\n to.setFullYear(to.getFullYear() - 1)\n return { from: toDayString(from), to: toDayString(to) }\n }\n\n const days = rangeLengthDays(range)\n const prevTo = shiftDays(parseDay(range.from), -1)\n const prevFrom = shiftDays(prevTo, -(days - 1))\n return { from: toDayString(prevFrom), to: toDayString(prevTo) }\n}\n\n/**\n * Bucket size that keeps a chart readable across the chosen range: hours for a\n * single day, days for a quarter, months for a year. A fixed 'day' grain turns\n * a 12-month range into 365 unreadable ticks.\n */\nexport function autoGrain(range: AnalyticsDateRange): 'hour' | 'day' | 'week' | 'month' {\n const days = rangeLengthDays(range)\n if (days <= 2) return 'hour'\n if (days <= 62) return 'day'\n if (days <= 180) return 'week'\n return 'month'\n}\n","import type {\n AnalyticsCardDef, AnalyticsMeasure, AnalyticsResult, AnalyticsRow,\n AnalyticsSummary, AnalyticsFormat, AnalyticsGrain,\n} from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Pure derivations shared by every analytics surface.\n//\n// These live apart from the components on purpose: the overview tile, the\n// report viewer and the CSV export must agree to the last decimal, and the only\n// way to guarantee that is for all three to call the same function rather than\n// each formatting \"close enough\" in its own JSX.\n// ---------------------------------------------------------------------------\n\n/**\n * A readable message out of anything a data layer throws.\n *\n * Supabase/PostgREST reject with a PLAIN OBJECT ({message, details, hint,\n * code}), not an Error — so the usual `err instanceof Error ? err.message :\n * String(err)` renders the literal text \"[object Object]\" and hides the one\n * piece of information the user needed.\n */\nexport function errorMessage(err: unknown): string {\n if (err instanceof Error) return err.message\n if (typeof err === 'string') return err\n if (err && typeof err === 'object') {\n const e = err as Record<string, unknown>\n const parts = [e.message, e.details, e.hint]\n .filter((p): p is string => typeof p === 'string' && p.trim().length > 0)\n if (parts.length > 0) return [...new Set(parts)].join(' — ')\n try { return JSON.stringify(err) } catch { return 'Unknown error' }\n }\n return String(err)\n}\n\n/**\n * True when the failure is \"the analytics engine was never installed\" rather\n * than \"this query is wrong\" — a missing function, view or schema-cache entry.\n * Worth separating: one is a migration a developer has to run, the other is a\n * bug in a card, and telling a user \"unknown error\" for the first wastes an\n * afternoon.\n */\nexport function isEngineMissing(err: unknown): boolean {\n if (!err || typeof err !== 'object') return false\n const e = err as Record<string, unknown>\n const code = typeof e.code === 'string' ? e.code : ''\n // 42883 undefined_function · 42P01 undefined_table · PGRST202 no such\n // function in the schema cache.\n if (['42883', '42P01', 'PGRST202'].includes(code)) return true\n const message = typeof e.message === 'string' ? e.message.toLowerCase() : ''\n return message.includes('analytics_run') || message.includes('plg_shop_rep_')\n}\n\nexport function num(value: unknown): number {\n if (value == null) return 0\n const n = typeof value === 'number' ? value : Number(value)\n return Number.isFinite(n) ? n : 0\n}\n\n/**\n * Resolve 'ratio' measures from the two measures they reference.\n *\n * Deliberately done HERE and not in SQL: a ratio aggregated per group and then\n * averaged is not the ratio of the totals. Average order value over a week is\n * sum(total)/count(orders) — not the mean of each day's average, which weights\n * a 1-order Sunday the same as a 400-order Friday.\n */\nexport function resolveRatios(\n summary: AnalyticsSummary | undefined,\n measures: AnalyticsMeasure[] = [],\n): AnalyticsSummary {\n const out: AnalyticsSummary = { ...(summary ?? {}) }\n for (const m of measures) {\n if (m.agg !== 'ratio' || !m.ratioOf) continue\n const [numeratorKey, denominatorKey] = m.ratioOf\n const denominator = num(out[denominatorKey])\n out[m.key] = denominator === 0 ? 0 : (num(out[numeratorKey]) / denominator) * (m.scale ?? 1)\n }\n return out\n}\n\n/** Apply ratio measures to every row of a grouped result, not just the rollup. */\nexport function resolveRowRatios(rows: AnalyticsRow[], measures: AnalyticsMeasure[] = []): AnalyticsRow[] {\n const ratios = measures.filter((m) => m.agg === 'ratio' && m.ratioOf)\n if (ratios.length === 0) return rows\n return rows.map((row) => ({ ...row, ...resolveRatios(row as AnalyticsSummary, ratios) }))\n}\n\n/**\n * Percentage change, or null when there is no honest answer.\n *\n * Growth from zero is not \"+100%\" and not \"+∞\" — it is undefined, and printing\n * a number there is how a dashboard claims a trend it cannot know. The card\n * shows a dash instead.\n */\nexport function deltaPercent(current: number, previous: number | undefined | null): number | null {\n if (previous == null || previous === 0) return null\n return ((current - previous) / Math.abs(previous)) * 100\n}\n\nexport function trendOf(current: number, previous: number | undefined | null): 'up' | 'down' | 'neutral' | undefined {\n if (previous == null) return undefined\n if (current > previous) return 'up'\n if (current < previous) return 'down'\n return 'neutral'\n}\n\n// ---------------------------------------------------------------------------\n// Formatting\n// ---------------------------------------------------------------------------\n\nexport interface AnalyticsCurrency {\n code?: string\n locale?: string\n symbol?: string\n}\n\n/** Compact form for card headlines: 1.2K, 3.4M. */\nexport function formatCompact(value: number, locale = 'pt-BR'): string {\n return new Intl.NumberFormat(locale, { notation: 'compact', maximumFractionDigits: 1 }).format(value)\n}\n\nexport function formatAnalyticsValue(\n value: unknown,\n format: AnalyticsFormat | undefined,\n currency?: AnalyticsCurrency,\n opts?: { compact?: boolean },\n): string {\n const locale = currency?.locale ?? 'pt-BR'\n\n if (format === 'date') {\n if (!value) return '—'\n const d = new Date(String(value))\n return Number.isNaN(d.getTime()) ? String(value) : d.toLocaleDateString(locale)\n }\n if (format === 'text' || typeof value === 'string' && format == null) {\n return value == null || value === '' ? '—' : String(value)\n }\n\n const n = num(value)\n switch (format) {\n case 'currency':\n return opts?.compact && Math.abs(n) >= 10_000\n ? `${currency?.symbol ?? 'R$'}${formatCompact(n, locale)}`\n : new Intl.NumberFormat(locale, {\n style: 'currency', currency: currency?.code ?? 'BRL', maximumFractionDigits: 2,\n }).format(n)\n case 'percent':\n return `${new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(n)}%`\n case 'duration':\n return formatDuration(n)\n default:\n return opts?.compact && Math.abs(n) >= 10_000\n ? formatCompact(n, locale)\n : new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(n)\n }\n}\n\n/** Durations are stored in HOURS (the read models emit hours_to_fulfillment). */\nexport function formatDuration(hours: number): string {\n if (!Number.isFinite(hours) || hours <= 0) return '0s'\n const totalMinutes = Math.round(hours * 60)\n if (totalMinutes < 1) return `${Math.round(hours * 3600)}s`\n if (totalMinutes < 60) return `${totalMinutes}min`\n const h = Math.floor(totalMinutes / 60)\n const m = totalMinutes % 60\n if (h < 24) return m ? `${h}h ${m}min` : `${h}h`\n const d = Math.floor(h / 24)\n return `${d}d ${h % 24}h`\n}\n\n/** Axis tick for a bucketed timestamp — short, locale-aware, grain-aware. */\nexport function formatBucket(value: unknown, grain: AnalyticsGrain | undefined, locale = 'pt-BR'): string {\n if (value == null) return '—'\n const d = new Date(String(value))\n if (Number.isNaN(d.getTime())) return String(value)\n switch (grain) {\n case 'hour': return d.toLocaleTimeString(locale, { hour: '2-digit', minute: '2-digit' })\n case 'month': return d.toLocaleDateString(locale, { month: 'short', year: '2-digit' })\n case 'quarter': return `Q${Math.floor(d.getMonth() / 3) + 1} ${d.getFullYear()}`\n case 'year': return String(d.getFullYear())\n default: return d.toLocaleDateString(locale, { day: '2-digit', month: 'short' })\n }\n}\n\n// ---------------------------------------------------------------------------\n// Shaping — result rows into what each viz wants\n// ---------------------------------------------------------------------------\n\nexport interface BreakdownRow {\n label: string\n value: number\n /** Share of the largest row (0–1), for the inline bar width. */\n share: number\n formatted: string\n}\n\n/**\n * Rows for the \"sessions by device type\" style list. Bars are scaled to the\n * LARGEST row, not to the total: with one dominant category every other bar\n * collapses to an invisible sliver and the list stops communicating rank.\n */\nexport function toBreakdown(\n rows: AnalyticsRow[],\n categoryKey: string,\n measureKey: string,\n format: AnalyticsFormat | undefined,\n currency?: AnalyticsCurrency,\n limit?: number,\n): BreakdownRow[] {\n const mapped = rows.map((row) => ({\n label: row[categoryKey] == null || row[categoryKey] === '' ? '—' : String(row[categoryKey]),\n value: num(row[measureKey]),\n }))\n const max = mapped.reduce((m, r) => Math.max(m, Math.abs(r.value)), 0)\n const sliced = limit ? mapped.slice(0, limit) : mapped\n return sliced.map((r) => ({\n ...r,\n share: max === 0 ? 0 : Math.abs(r.value) / max,\n formatted: formatAnalyticsValue(r.value, format, currency),\n }))\n}\n\n/** The measures a card actually renders, in the order the viz asked for. */\nexport function vizMeasures(card: AnalyticsCardDef): AnalyticsMeasure[] {\n const all = card.query.measures ?? []\n const wanted = card.viz.measures\n if (!wanted?.length) return all\n return wanted\n .map((key) => all.find((m) => m.key === key))\n .filter((m): m is AnalyticsMeasure => Boolean(m))\n}\n\n/** The dimension a chart/breakdown puts on its category axis. */\nexport function vizCategory(card: AnalyticsCardDef) {\n const dims = card.query.dimensions ?? []\n if (card.viz.categoryKey) return dims.find((d) => d.key === card.viz.categoryKey) ?? dims[0]\n return dims[0]\n}\n\n/**\n * Chart rows with the category axis pre-formatted.\n *\n * recharts renders whatever string it is handed, so bucketed timestamps must be\n * humanised BEFORE they reach it — otherwise the x-axis reads\n * \"2026-08-01T00:00:00+00:00\".\n */\nexport function toChartData(\n rows: AnalyticsRow[],\n categoryKey: string,\n grain: AnalyticsGrain | undefined,\n locale = 'pt-BR',\n): Array<Record<string, string | number>> {\n return rows.map((row) => {\n const out: Record<string, string | number> = {}\n for (const [k, v] of Object.entries(row)) {\n if (k === categoryKey) continue\n out[k] = typeof v === 'number' ? v : num(v)\n }\n out[categoryKey] = grain\n ? formatBucket(row[categoryKey], grain, locale)\n : (row[categoryKey] == null || row[categoryKey] === '' ? '—' : String(row[categoryKey]))\n return out\n })\n}\n\n/** Sparkline series for a KPI: the headline measure across the time buckets. */\nexport function toSpark(result: AnalyticsResult | null, measureKey: string): number[] | undefined {\n if (!result?.rows?.length || result.rows.length < 2) return undefined\n return result.rows.map((row) => num(row[measureKey]))\n}\n","import * as React from 'react'\nimport type {\n AnalyticsCardDef, AnalyticsProvider, AnalyticsQueryState, AnalyticsResult,\n AnalyticsCompare, AnalyticsDateRange, AnalyticsGrain,\n} from '@fayz-ai/core'\nimport { comparisonRange, resolveRangePreset, autoGrain, type AnalyticsRangePreset } from './range'\nimport { resolveRatios, resolveRowRatios, errorMessage, isEngineMissing, type AnalyticsCurrency } from './derive'\n\n// ---------------------------------------------------------------------------\n// One page-level state for every card on the surface.\n//\n// The range, the comparison and the filters belong to the PAGE, not to each\n// tile: the control bar at the top of the overview must move all fourteen cards\n// at once, and a report opened from a card has to inherit what the user was\n// looking at. Card-local state would mean fourteen date pickers disagreeing.\n// ---------------------------------------------------------------------------\n\nexport interface AnalyticsContextValue {\n provider: AnalyticsProvider\n currency: AnalyticsCurrency\n state: AnalyticsQueryState\n preset: AnalyticsRangePreset\n setPreset: (preset: AnalyticsRangePreset) => void\n setDateRange: (range: AnalyticsDateRange) => void\n setCompare: (compare: AnalyticsCompare) => void\n setFilter: (key: string, value: unknown) => void\n setFilters: (filters: Record<string, unknown>) => void\n clearFilters: () => void\n setPage: (page: number) => void\n setPageSize: (pageSize: number) => void\n setSort: (sortBy: string, sortDir: 'asc' | 'desc') => void\n setSearch: (search: string) => void\n /** Bumped to force every mounted card to refetch (the ↻ button). */\n refreshToken: number\n refresh: () => void\n /** Open a card as a full-page report. Absent ⇒ cards render no open affordance. */\n onOpenCard?: (card: AnalyticsCardDef) => void\n /** \"Created by\" shown on cards a pack did not attribute individually. */\n createdBy?: string\n}\n\nconst AnalyticsContext = React.createContext<AnalyticsContextValue | null>(null)\n\nexport function useAnalyticsContext(): AnalyticsContextValue {\n const ctx = React.useContext(AnalyticsContext)\n if (!ctx) throw new Error('useAnalyticsContext must be used inside <AnalyticsContextProvider>')\n return ctx\n}\n\n/** Non-throwing variant for primitives that may render outside a surface. */\nexport function useAnalyticsContextOptional(): AnalyticsContextValue | null {\n return React.useContext(AnalyticsContext)\n}\n\nexport interface AnalyticsContextProviderProps {\n provider: AnalyticsProvider\n currency?: AnalyticsCurrency\n defaultPreset?: AnalyticsRangePreset\n defaultCompare?: AnalyticsCompare\n defaultPageSize?: number\n onOpenCard?: (card: AnalyticsCardDef) => void\n createdBy?: string\n children: React.ReactNode\n}\n\nexport function AnalyticsContextProvider({\n provider, currency, defaultPreset = 'last_30_days', defaultCompare = 'previous_period',\n defaultPageSize = 50, onOpenCard, createdBy, children,\n}: AnalyticsContextProviderProps) {\n const [preset, setPresetState] = React.useState<AnalyticsRangePreset>(defaultPreset)\n const [refreshToken, setRefreshToken] = React.useState(0)\n const [state, setState] = React.useState<AnalyticsQueryState>(() => ({\n dateRange: resolveRangePreset(defaultPreset),\n compare: defaultCompare,\n filters: {},\n page: 1,\n pageSize: defaultPageSize,\n }))\n\n const setPreset = React.useCallback((next: AnalyticsRangePreset) => {\n setPresetState(next)\n if (next !== 'custom') {\n setState((s) => ({ ...s, dateRange: resolveRangePreset(next), page: 1 }))\n }\n }, [])\n\n const setDateRange = React.useCallback((dateRange: AnalyticsDateRange) => {\n setPresetState('custom')\n setState((s) => ({ ...s, dateRange, page: 1 }))\n }, [])\n\n const setCompare = React.useCallback((compare: AnalyticsCompare) => {\n setState((s) => ({ ...s, compare }))\n }, [])\n\n const setFilter = React.useCallback((key: string, value: unknown) => {\n setState((s) => {\n const filters = { ...s.filters }\n // An empty value REMOVES the filter rather than sending \"\" downstream,\n // which a provider would otherwise translate into `col = ''`.\n if (value == null || value === '' || (Array.isArray(value) && value.length === 0)) delete filters[key]\n else filters[key] = value\n return { ...s, filters, page: 1 }\n })\n }, [])\n\n const setFilters = React.useCallback((filters: Record<string, unknown>) => {\n setState((s) => ({ ...s, filters, page: 1 }))\n }, [])\n\n const clearFilters = React.useCallback(() => {\n setState((s) => ({ ...s, filters: {}, page: 1 }))\n }, [])\n\n const setPage = React.useCallback((page: number) => {\n setState((s) => ({ ...s, page: Math.max(1, page) }))\n }, [])\n\n const setPageSize = React.useCallback((pageSize: number) => {\n // Changing page size while on page 7 lands you somewhere arbitrary, so the\n // pager resets — the user asked for \"show more\", not \"jump elsewhere\".\n setState((s) => ({ ...s, pageSize, page: 1 }))\n }, [])\n\n const setSort = React.useCallback((sortBy: string, sortDir: 'asc' | 'desc') => {\n setState((s) => ({ ...s, sortBy, sortDir, page: 1 }))\n }, [])\n\n const setSearch = React.useCallback((search: string) => {\n setState((s) => ({ ...s, search, page: 1 }))\n }, [])\n\n const refresh = React.useCallback(() => setRefreshToken((t) => t + 1), [])\n\n // Identical queries issued in the same tick share one round trip. The report\n // viewer renders the chart and the table from the SAME card, and the overview\n // can hold two cards over one query — without this each of those is a\n // separate hit on the database for a byte-identical answer.\n const deduped = React.useMemo<AnalyticsProvider>(() => {\n const inflight = new Map<string, Promise<AnalyticsResult>>()\n return {\n run(card, queryState) {\n const key = JSON.stringify([card.id, queryState, refreshToken])\n const existing = inflight.get(key)\n if (existing) return existing\n const promise = provider.run(card, queryState).finally(() => {\n // Held only for the duration of the request: this is de-duplication,\n // not caching. Keeping results would mean a stale dashboard after a\n // write, which is a worse bug than an extra fetch.\n inflight.delete(key)\n })\n inflight.set(key, promise)\n return promise\n },\n }\n }, [provider, refreshToken])\n\n const value = React.useMemo<AnalyticsContextValue>(() => ({\n provider: deduped,\n currency: currency ?? { code: 'BRL', locale: 'pt-BR', symbol: 'R$' },\n state, preset, setPreset, setDateRange, setCompare, setFilter, setFilters, clearFilters,\n setPage, setPageSize, setSort, setSearch,\n refreshToken, refresh, onOpenCard, createdBy,\n }), [deduped, currency, state, preset, setPreset, setDateRange, setCompare, setFilter,\n setFilters, clearFilters, setPage, setPageSize, setSort, setSearch,\n refreshToken, refresh, onOpenCard, createdBy])\n\n return <AnalyticsContext.Provider value={value}>{children}</AnalyticsContext.Provider>\n}\n\n// ---------------------------------------------------------------------------\n// Per-card fetching\n// ---------------------------------------------------------------------------\n\nexport interface UseAnalyticsCardResult {\n result: AnalyticsResult | null\n /** Rollup with ratio measures resolved. Empty object until loaded. */\n summary: Record<string, number>\n /** Same for the comparison window, or null when not comparing. */\n previousSummary: Record<string, number> | null\n loading: boolean\n error: string | null\n /** The failure is a missing migration, not a bad card. */\n engineMissing: boolean\n refetch: () => void\n}\n\n/** Resolve 'auto' grains against the active range before the query is built. */\nfunction withResolvedGrain(card: AnalyticsCardDef, range: AnalyticsDateRange): AnalyticsCardDef {\n const dims = card.query.dimensions\n if (!dims?.some((d) => d.grain === 'auto')) return card\n const grain: AnalyticsGrain = autoGrain(range)\n return {\n ...card,\n query: {\n ...card.query,\n dimensions: dims.map((d) => (d.grain === 'auto' ? { ...d, grain } : d)),\n },\n }\n}\n\nexport function useAnalyticsCard(\n card: AnalyticsCardDef,\n options?: { stateOverride?: Partial<AnalyticsQueryState>; enabled?: boolean },\n): UseAnalyticsCardResult {\n const { provider, state, refreshToken } = useAnalyticsContext()\n const [result, setResult] = React.useState<AnalyticsResult | null>(null)\n const [loading, setLoading] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n const [engineMissing, setEngineMissing] = React.useState(false)\n\n const enabled = (options?.enabled ?? true) && card.available !== false\n const merged = React.useMemo<AnalyticsQueryState>(\n () => ({ ...state, ...options?.stateOverride }),\n [state, options?.stateOverride],\n )\n const resolved = React.useMemo(() => withResolvedGrain(card, merged.dateRange), [card, merged.dateRange])\n\n // Serialized query identity — the effect must rerun when the QUERY changes,\n // not when React hands us a new object with identical contents.\n const key = React.useMemo(\n () => JSON.stringify([resolved.id, merged, refreshToken]),\n [resolved.id, merged, refreshToken],\n )\n\n React.useEffect(() => {\n if (!enabled) { setResult(null); return }\n let cancelled = false\n setLoading(true)\n setError(null)\n setEngineMissing(false)\n\n const comparison = resolved.compare ? comparisonRange(merged.dateRange, merged.compare) : null\n\n Promise.all([\n provider.run(resolved, merged),\n comparison\n ? provider.run(resolved, { ...merged, dateRange: comparison }).catch(() => null)\n : Promise.resolve(null),\n ])\n .then(([current, previous]) => {\n if (cancelled) return\n setResult({\n ...current,\n rows: resolveRowRatios(current.rows, resolved.query.measures),\n previous: previous\n ? { rows: previous.rows, summary: previous.summary }\n : undefined,\n })\n })\n .catch((err: unknown) => {\n if (cancelled) return\n setResult(null)\n setError(errorMessage(err))\n setEngineMissing(isEngineMissing(err))\n })\n .finally(() => { if (!cancelled) setLoading(false) })\n\n // The comparison fetch is allowed to fail on its own (.catch above): a\n // missing previous window costs a trend chip, it must not blank the card.\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [key, enabled, provider])\n\n const refetch = React.useCallback(() => {\n setResult(null)\n setLoading(true)\n }, [])\n\n const summary = React.useMemo(\n () => resolveRatios(result?.summary, resolved.query.measures),\n [result?.summary, resolved.query.measures],\n )\n const previousSummary = React.useMemo(\n () => (result?.previous ? resolveRatios(result.previous.summary, resolved.query.measures) : null),\n [result?.previous, resolved.query.measures],\n )\n\n return { result, summary, previousSummary, loading, error, engineMissing, refetch }\n}\n","import * as React from 'react'\nimport { ArrowUpRight, Info, TrendingUp, TrendingDown, Construction, DatabaseZap, AlertCircle } from 'lucide-react'\nimport type { AnalyticsCardDef, AnalyticsMeasure, AnalyticsRow } from '@fayz-ai/core'\nimport { cn } from '../lib/cn'\nimport { Card, CardContent } from '../primitives/card'\nimport { Hint } from '../primitives/hint'\nimport { Skeleton } from '../primitives/skeleton'\nimport { ChartWidget } from '../dashboard/ChartWidget'\nimport type { ChartSeries, ChartType } from '../dashboard/types'\nimport { useAnalyticsContext, useAnalyticsCard } from './context'\nimport {\n formatAnalyticsValue, deltaPercent, trendOf, toBreakdown, toChartData,\n toSpark, vizMeasures, vizCategory, num, type AnalyticsCurrency,\n} from './derive'\n\n// ---------------------------------------------------------------------------\n// The card — one AnalyticsCardDef, rendered at tile size.\n//\n// Every viz shares the same chrome (title, the ⓘ that explains what the number\n// means, the ↗ that opens the same definition as a full report) because they\n// are the same object. The arrow is not navigation between two features; it is\n// a zoom level.\n// ---------------------------------------------------------------------------\n\nconst CHART_TYPES: Record<string, ChartType> = { line: 'line', bar: 'bar', area: 'area', donut: 'pie' }\n\nexport interface AnalyticsCardProps {\n card: AnalyticsCardDef\n className?: string\n /** Hide the ↗ affordance (the viewer renders the same card full-size). */\n hideOpen?: boolean\n}\n\nfunction CardChrome({\n card, hideOpen, children, dense,\n}: { card: AnalyticsCardDef; hideOpen?: boolean; children: React.ReactNode; dense?: boolean }) {\n const { onOpenCard } = useAnalyticsContext()\n const canOpen = Boolean(onOpenCard) && !hideOpen\n\n return (\n <Card className=\"group flex h-full flex-col\">\n <div className={cn('flex items-start justify-between gap-2', dense ? 'px-4 pt-3' : 'px-5 pt-4')}>\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"truncate text-sm font-medium text-muted-foreground\">{card.name}</span>\n {card.description ? (\n <Hint label={card.description} side=\"top\">\n <span\n tabIndex={0}\n role=\"note\"\n aria-label={card.description}\n className=\"shrink-0 text-muted-foreground/60 hover:text-muted-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm\"\n >\n <Info className=\"h-3.5 w-3.5\" />\n </span>\n </Hint>\n ) : null}\n </div>\n {canOpen ? (\n <Hint label=\"Open as report\" side=\"top\">\n <button\n type=\"button\"\n onClick={() => onOpenCard?.(card)}\n aria-label={`Open ${card.name} as a report`}\n className=\"shrink-0 rounded-md p-0.5 text-muted-foreground opacity-0 transition-opacity hover:bg-muted hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover:opacity-100\"\n >\n <ArrowUpRight className=\"h-4 w-4\" />\n </button>\n </Hint>\n ) : null}\n </div>\n <CardContent className={cn('flex-1', dense ? 'p-4 pt-2' : 'p-5 pt-2')}>{children}</CardContent>\n </Card>\n )\n}\n\n/** Tiny inline sparkline. Mirrors the dashboard KpiCard's so tiles read alike. */\nfunction Spark({ data, color }: { data: number[]; color: string }) {\n const gid = React.useId()\n if (data.length < 2) return null\n const W = 120, H = 28, P = 2\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) => [P + i * step, P + (H - P * 2) * (1 - (d - min) / span)] as const)\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-7 w-full\" 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\" vectorEffect=\"non-scaling-stroke\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction TrendChip({ current, previous }: { current: number; previous: number | null | undefined }) {\n const delta = deltaPercent(current, previous)\n const trend = trendOf(current, previous)\n // No previous window, or a previous of zero: there is no honest percentage to\n // print, so the card shows a dash rather than inventing \"+100%\".\n if (!trend || trend === 'neutral' || delta == null) {\n return <span className=\"text-xs text-muted-foreground\">—</span>\n }\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 trend === 'up' ? 'text-emerald-600' : 'text-rose-600',\n )}>\n <Icon className=\"h-3 w-3\" />\n {`${delta > 0 ? '+' : ''}${delta.toFixed(1)}%`}\n </span>\n )\n}\n\nfunction BreakdownList({\n rows, categoryKey, measure, currency, limit,\n}: {\n rows: AnalyticsRow[]; categoryKey: string; measure: AnalyticsMeasure\n currency: AnalyticsCurrency; limit?: number\n}) {\n const items = toBreakdown(rows, categoryKey, measure.key, measure.format, currency, limit)\n if (items.length === 0) return <EmptyState />\n return (\n <ul className=\"space-y-2.5\">\n {items.map((item, i) => (\n <li key={`${item.label}-${i}`} className=\"flex items-center gap-3 text-sm\">\n <span className=\"w-2/5 truncate text-muted-foreground\" title={item.label}>{item.label}</span>\n <span className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-muted\" role=\"presentation\">\n <span\n className=\"block h-full rounded-full bg-[hsl(var(--info))]\"\n style={{ width: `${Math.max(item.share * 100, item.value === 0 ? 0 : 2)}%` }}\n />\n </span>\n <span className=\"shrink-0 tabular-nums font-medium\">{item.formatted}</span>\n </li>\n ))}\n </ul>\n )\n}\n\nfunction MiniTable({\n rows, card, currency, limit,\n}: { rows: AnalyticsRow[]; card: AnalyticsCardDef; currency: AnalyticsCurrency; limit?: number }) {\n const dims = card.query.dimensions ?? []\n const measures = vizMeasures(card)\n const cols = [\n ...dims.map((d) => ({ key: d.key, label: d.label, format: d.format, align: 'left' as const })),\n ...measures.map((m) => ({ key: m.key, label: m.label, format: m.format, align: 'right' as const })),\n ]\n const shown = limit ? rows.slice(0, limit) : rows\n if (shown.length === 0) return <EmptyState />\n\n return (\n <div className=\"-mx-1 overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b text-xs text-muted-foreground\">\n {cols.map((c) => (\n <th key={c.key} className={cn('px-1 pb-2 font-medium', c.align === 'right' ? 'text-right' : 'text-left')}>\n {c.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {shown.map((row, i) => (\n <tr key={i} className=\"border-b border-border/50 last:border-0\">\n {cols.map((c) => (\n <td key={c.key} className={cn('px-1 py-2', c.align === 'right' ? 'text-right tabular-nums' : 'truncate')}>\n {formatAnalyticsValue(row[c.key], c.format, currency)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction EmptyState({ label = 'No data for this date range' }: { label?: string }) {\n return (\n <div className=\"flex h-full min-h-[80px] items-center justify-center text-center text-sm text-muted-foreground\">\n {label}\n </div>\n )\n}\n\nexport function AnalyticsCard({ card, className, hideOpen }: AnalyticsCardProps) {\n const { currency } = useAnalyticsContext()\n const { result, summary, previousSummary, loading, error, engineMissing } = useAnalyticsCard(card)\n const measures = vizMeasures(card)\n const category = vizCategory(card)\n const rows = result?.rows ?? []\n\n const body = (() => {\n if (card.available === false) {\n return (\n <div className=\"flex h-full min-h-[80px] flex-col items-center justify-center gap-2 text-center\">\n <Construction className=\"h-5 w-5 text-muted-foreground\" />\n <p className=\"text-xs text-muted-foreground\">Not connected yet</p>\n </div>\n )\n }\n if (loading && !result) {\n return (\n <div className=\"space-y-2\">\n <Skeleton className=\"h-7 w-24\" />\n <Skeleton className=\"h-4 w-16\" />\n </div>\n )\n }\n if (engineMissing) {\n // A missing migration is not a broken card, and saying \"error\" here sends\n // someone hunting through a card definition that is perfectly fine.\n return (\n <div className=\"flex h-full min-h-[80px] flex-col items-center justify-center gap-1.5 text-center\">\n <DatabaseZap className=\"h-5 w-5 text-muted-foreground\" />\n <p className=\"text-xs font-medium\">Analytics engine not installed</p>\n <p className=\"text-[11px] text-muted-foreground\">Run migration 0039 on this project.</p>\n </div>\n )\n }\n if (error) {\n return (\n <div className=\"flex h-full min-h-[60px] items-start gap-1.5 text-xs text-destructive\">\n <AlertCircle className=\"mt-0.5 h-3.5 w-3.5 shrink-0\" />\n <span className=\"break-words\">{error}</span>\n </div>\n )\n }\n\n switch (card.viz.type) {\n case 'kpi': {\n const measure = measures[0]\n if (!measure) return <EmptyState />\n const value = num(summary[measure.key])\n const previous = previousSummary ? num(previousSummary[measure.key]) : null\n const spark = card.viz.spark ? toSpark(result, measure.key) : undefined\n return (\n <div className=\"flex h-full flex-col justify-between gap-2\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"text-2xl font-semibold tracking-tight tabular-nums\">\n {formatAnalyticsValue(value, measure.format, currency, { compact: true })}\n </span>\n <TrendChip current={value} previous={previous} />\n </div>\n {spark ? <Spark data={spark} color=\"hsl(var(--info))\" /> : null}\n </div>\n )\n }\n\n case 'breakdown': {\n const measure = measures[0]\n if (!measure || !category) return <EmptyState />\n return (\n <BreakdownList\n rows={rows} categoryKey={category.key} measure={measure}\n currency={currency} limit={card.viz.limit}\n />\n )\n }\n\n case 'table':\n return <MiniTable rows={rows} card={card} currency={currency} limit={card.viz.limit ?? 5} />\n\n case 'funnel': {\n // A funnel is a breakdown whose bars are shares of the FIRST step, so\n // each stage reads as \"of everyone who started, this many got here\".\n const measure = measures[0]\n if (!measure || !category) return <EmptyState />\n const first = num(rows[0]?.[measure.key]) || 1\n return (\n <ul className=\"space-y-2.5\">\n {rows.map((row, i) => {\n const value = num(row[measure.key])\n return (\n <li key={i} className=\"text-sm\">\n <div className=\"mb-1 flex items-baseline justify-between gap-2\">\n <span className=\"truncate text-muted-foreground\">{String(row[category.key] ?? '—')}</span>\n <span className=\"shrink-0 tabular-nums font-medium\">\n {formatAnalyticsValue(value, measure.format, currency)}\n <span className=\"ml-1.5 text-xs text-muted-foreground\">\n {((value / first) * 100).toFixed(0)}%\n </span>\n </span>\n </div>\n <span className=\"block h-1.5 overflow-hidden rounded-full bg-muted\">\n <span className=\"block h-full rounded-full bg-[hsl(var(--info))]\" style={{ width: `${(value / first) * 100}%` }} />\n </span>\n </li>\n )\n })}\n </ul>\n )\n }\n\n default: {\n if (rows.length === 0) return <EmptyState />\n if (!category) return <EmptyState />\n const chartType = CHART_TYPES[card.viz.type] ?? 'line'\n const data = toChartData(rows, category.key, category.grain, currency.locale)\n const series: ChartSeries[] = measures.map((m) => ({ dataKey: m.key, label: m.label }))\n return (\n <ChartWidget\n type={chartType}\n data={data}\n series={series}\n categoryKey={category.key}\n height={card.viz.height ?? 200}\n className=\"border-0 bg-transparent shadow-none [&>div]:p-0\"\n />\n )\n }\n }\n })()\n\n const dense = card.viz.type === 'kpi'\n return (\n <div className={className}>\n <CardChrome card={card} hideOpen={hideOpen} dense={dense}>{body}</CardChrome>\n </div>\n )\n}\n","import * as React from 'react'\nimport type { AnalyticsCardDef, AnalyticsFilterDef } from '@fayz-ai/core'\nimport { DashboardGrid } from '../dashboard/DashboardGrid'\nimport { AnalyticsCard } from './AnalyticsCard'\n\n// ---------------------------------------------------------------------------\n// The overview grid. Reuses DashboardGrid rather than growing a second\n// four-column layout that would drift out of alignment with the app home.\n// ---------------------------------------------------------------------------\n\n/** Default span by viz: a KPI is a quarter, a chart a half, a table a full row. */\nfunction defaultSpan(card: AnalyticsCardDef): 1 | 2 | 3 | 4 {\n if (card.dashboard?.span) return card.dashboard.span\n switch (card.viz.type) {\n case 'kpi': return 1\n case 'table': return 4\n default: return 2\n }\n}\n\nexport interface AnalyticsGridProps {\n cards: AnalyticsCardDef[]\n className?: string\n}\n\nexport function AnalyticsGrid({ cards, className }: AnalyticsGridProps) {\n const items = React.useMemo(\n () => cards.map((card) => ({\n id: card.id,\n span: defaultSpan(card),\n node: <AnalyticsCard card={card} />,\n })),\n [cards],\n )\n return <DashboardGrid items={items} className={className} />\n}\n\n/**\n * Every filter offered by the cards on screen, de-duplicated by key.\n *\n * The control bar shows the union rather than the intersection: a filter that\n * only narrows three of fourteen cards is still worth offering, and hiding it\n * until every card supports it would leave the picker permanently empty.\n */\nexport function collectFilters(cards: AnalyticsCardDef[]): AnalyticsFilterDef[] {\n const byKey = new Map<string, AnalyticsFilterDef>()\n for (const card of cards) {\n for (const filter of card.query.filters ?? []) {\n if (!byKey.has(filter.key)) byKey.set(filter.key, filter)\n }\n }\n return [...byKey.values()]\n}\n","import * as React from 'react'\nimport { Calendar, GitCompareArrows, RefreshCw, SlidersHorizontal, Search, ChevronRight, X } from 'lucide-react'\nimport type { AnalyticsFilterDef, AnalyticsFilterOption } from '@fayz-ai/core'\nimport { cn } from '../lib/cn'\nimport { Button } from '../primitives/button'\nimport { Input } from '../primitives/input'\nimport { Popover, PopoverTrigger, PopoverContent } from '../primitives/popover'\nimport { Dropdown, DropdownTrigger, DropdownContent, DropdownItem } from '../primitives/dropdown'\nimport { useAnalyticsContext } from './context'\nimport type { AnalyticsRangePreset } from './range'\n\n// ---------------------------------------------------------------------------\n// The one control bar every analytics surface shares.\n//\n// Range, comparison and filters sit here rather than on each card because they\n// describe the QUESTION, not the chart: changing \"last 7 days\" has to move\n// everything on screen at once, or two tiles end up answering about different\n// weeks and the page silently lies.\n// ---------------------------------------------------------------------------\n\nconst PRESETS: Array<{ value: AnalyticsRangePreset; label: string }> = [\n { value: 'today', label: 'Today' },\n { value: 'yesterday', label: 'Yesterday' },\n { value: 'last_7_days', label: 'Last 7 days' },\n { value: 'last_30_days', label: 'Last 30 days' },\n { value: 'last_90_days', label: 'Last 90 days' },\n { value: 'this_month', label: 'This month' },\n { value: 'last_month', label: 'Last month' },\n { value: 'this_quarter', label: 'This quarter' },\n { value: 'this_year', label: 'This year' },\n]\n\nconst COMPARE_OPTIONS = [\n { value: 'previous_period', label: 'Previous period' },\n { value: 'previous_year', label: 'Previous year' },\n { value: 'none', label: 'No comparison' },\n] as const\n\nconst UNGROUPED = 'General'\n\n// forwardRef porque estes botões são gatilho de Hint/Dropdown, que passam ref\n// pelo `asChild`. Sem repassar, o React avisa e o gatilho perde a referência.\nconst ControlButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button> & { icon?: React.ElementType }\n>(function ControlButton({ icon: Icon, children, ...props }, ref) {\n return (\n <Button ref={ref} variant=\"outline\" size=\"sm\" className=\"h-8 gap-1.5 text-xs font-normal\" {...props}>\n {Icon ? <Icon className=\"h-3.5 w-3.5\" /> : null}\n {children}\n </Button>\n )\n})\n\n// ---------------------------------------------------------------------------\n// Filter picker — categorized, searchable, staged behind Apply.\n// ---------------------------------------------------------------------------\n\nfunction useFilterOptions(filter: AnalyticsFilterDef): AnalyticsFilterOption[] {\n const [options, setOptions] = React.useState<AnalyticsFilterOption[]>(\n Array.isArray(filter.options) ? filter.options : [],\n )\n React.useEffect(() => {\n if (typeof filter.options !== 'function') {\n setOptions(Array.isArray(filter.options) ? filter.options : [])\n return\n }\n let cancelled = false\n void filter.options().then((next) => { if (!cancelled) setOptions(next) }).catch(() => {})\n return () => { cancelled = true }\n }, [filter.options])\n return options\n}\n\nfunction FilterValues({\n filter, draft, onChange,\n}: { filter: AnalyticsFilterDef; draft: Record<string, unknown>; onChange: (key: string, value: unknown) => void }) {\n const options = useFilterOptions(filter)\n const current = draft[filter.key]\n\n if (filter.type === 'text' || filter.type === 'number') {\n return (\n <Input\n type={filter.type === 'number' ? 'number' : 'text'}\n value={current == null ? '' : String(current)}\n placeholder={filter.placeholder}\n onChange={(e) => onChange(filter.key, e.target.value)}\n className=\"h-8 text-sm\"\n />\n )\n }\n\n if (filter.type === 'boolean') {\n return (\n <div className=\"space-y-1\">\n {[{ label: 'Yes', value: 'true' }, { label: 'No', value: 'false' }].map((o) => (\n <label key={o.value} className=\"flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-muted\">\n <input\n type=\"radio\"\n name={filter.key}\n checked={String(current) === o.value}\n onChange={() => onChange(filter.key, o.value)}\n className=\"h-3.5 w-3.5\"\n />\n {o.label}\n </label>\n ))}\n </div>\n )\n }\n\n const multi = filter.type === 'multiselect'\n const selected = new Set(Array.isArray(current) ? current.map(String) : current != null ? [String(current)] : [])\n\n if (options.length === 0) {\n return <p className=\"px-2 py-1.5 text-xs text-muted-foreground\">No options available</p>\n }\n\n return (\n <div className=\"max-h-56 space-y-0.5 overflow-y-auto\">\n {options.map((o) => (\n <label key={o.value} className=\"flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-muted\">\n <input\n type={multi ? 'checkbox' : 'radio'}\n name={filter.key}\n checked={selected.has(o.value)}\n onChange={() => {\n if (!multi) { onChange(filter.key, selected.has(o.value) ? undefined : o.value); return }\n const next = new Set(selected)\n if (next.has(o.value)) next.delete(o.value)\n else next.add(o.value)\n onChange(filter.key, [...next])\n }}\n className=\"h-3.5 w-3.5\"\n />\n <span className=\"truncate\">{o.label}</span>\n </label>\n ))}\n </div>\n )\n}\n\nexport interface AnalyticsFilterPickerProps {\n /** Every filter offered on this surface, from the cards in view. */\n filters: AnalyticsFilterDef[]\n}\n\nexport function AnalyticsFilterPicker({ filters }: AnalyticsFilterPickerProps) {\n const { state, setFilters, clearFilters } = useAnalyticsContext()\n const [open, setOpen] = React.useState(false)\n const [search, setSearch] = React.useState('')\n const [openGroup, setOpenGroup] = React.useState<string | null>(null)\n // Staged: edits do not hit the query until Apply, so a five-filter change is\n // one refetch instead of five — and Clear can be abandoned by closing.\n const [draft, setDraft] = React.useState<Record<string, unknown>>(state.filters)\n\n React.useEffect(() => { if (open) setDraft(state.filters) }, [open, state.filters])\n\n const groups = React.useMemo(() => {\n const q = search.trim().toLowerCase()\n const matching = q ? filters.filter((f) => f.label.toLowerCase().includes(q)) : filters\n const map = new Map<string, AnalyticsFilterDef[]>()\n for (const f of matching) {\n const key = f.group ?? UNGROUPED\n map.set(key, [...(map.get(key) ?? []), f])\n }\n return [...map.entries()].sort(([a], [b]) => a.localeCompare(b))\n }, [filters, search])\n\n const activeCount = Object.keys(state.filters).length\n if (filters.length === 0) return null\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"h-8 gap-1.5 text-xs font-normal\">\n <SlidersHorizontal className=\"h-3.5 w-3.5\" />\n Filters\n {activeCount > 0 ? (\n <span className=\"ml-0.5 rounded-full bg-primary px-1.5 text-[10px] font-medium text-primary-foreground\">\n {activeCount}\n </span>\n ) : null}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-80 p-0\">\n <div className=\"border-b p-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search filters\"\n className=\"h-8 pl-8 text-sm\"\n />\n </div>\n </div>\n\n <div className=\"max-h-80 overflow-y-auto p-1\">\n {groups.length === 0 ? (\n <p className=\"px-3 py-6 text-center text-sm text-muted-foreground\">No filters match</p>\n ) : (\n groups.map(([group, groupFilters]) => (\n <div key={group}>\n <button\n type=\"button\"\n onClick={() => setOpenGroup((g) => (g === group ? null : group))}\n aria-expanded={openGroup === group}\n className=\"flex w-full items-center justify-between rounded-md px-2 py-2 text-sm hover:bg-muted\"\n >\n <span className=\"font-medium\">{group}</span>\n <ChevronRight className={cn('h-3.5 w-3.5 text-muted-foreground transition-transform', openGroup === group && 'rotate-90')} />\n </button>\n {openGroup === group ? (\n <div className=\"space-y-3 px-2 pb-3 pt-1\">\n {groupFilters.map((f) => (\n <div key={f.key}>\n <p className=\"mb-1 text-xs font-medium text-muted-foreground\">{f.label}</p>\n <FilterValues\n filter={f}\n draft={draft}\n onChange={(key, value) => setDraft((d) => {\n const next = { ...d }\n if (value == null || value === '' || (Array.isArray(value) && value.length === 0)) delete next[key]\n else next[key] = value\n return next\n })}\n />\n </div>\n ))}\n </div>\n ) : null}\n </div>\n ))\n )}\n </div>\n\n <div className=\"flex items-center justify-between gap-2 border-t p-2\">\n <Button\n variant=\"ghost\" size=\"sm\" className=\"h-8 text-xs\"\n onClick={() => { setDraft({}); clearFilters(); setOpen(false) }}\n >\n Clear\n </Button>\n <Button size=\"sm\" className=\"h-8 text-xs\" onClick={() => { setFilters(draft); setOpen(false) }}>\n Apply\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\n// ---------------------------------------------------------------------------\n// The bar\n// ---------------------------------------------------------------------------\n\nexport interface AnalyticsControlsProps {\n /** Filters offered in the picker — usually the union across visible cards. */\n filters?: AnalyticsFilterDef[]\n /** Hide the comparison control on surfaces where it means nothing. */\n showCompare?: boolean\n /** Right-aligned extras (e.g. Export, New report). */\n actions?: React.ReactNode\n className?: string\n}\n\nexport function AnalyticsControls({ filters = [], showCompare = true, actions, className }: AnalyticsControlsProps) {\n const { state, preset, setPreset, setCompare, refresh } = useAnalyticsContext()\n const presetLabel = PRESETS.find((p) => p.value === preset)?.label\n ?? `${state.dateRange.from} – ${state.dateRange.to}`\n const compareLabel = COMPARE_OPTIONS.find((c) => c.value === (state.compare ?? 'none'))?.label\n\n const activeFilters = Object.entries(state.filters)\n const filterLabel = (key: string) => filters.find((f) => f.key === key)?.label ?? key\n\n return (\n <div className={cn('flex flex-wrap items-center gap-2', className)}>\n <Dropdown>\n <DropdownTrigger asChild>\n <ControlButton icon={Calendar}>{presetLabel}</ControlButton>\n </DropdownTrigger>\n <DropdownContent align=\"start\" className=\"w-48\">\n {PRESETS.map((p) => (\n <DropdownItem key={p.value} onSelect={() => setPreset(p.value)}>\n {p.label}\n </DropdownItem>\n ))}\n </DropdownContent>\n </Dropdown>\n\n {showCompare ? (\n <Dropdown>\n <DropdownTrigger asChild>\n <ControlButton icon={GitCompareArrows}>Compare: {compareLabel}</ControlButton>\n </DropdownTrigger>\n <DropdownContent align=\"start\" className=\"w-48\">\n {COMPARE_OPTIONS.map((c) => (\n <DropdownItem key={c.value} onSelect={() => setCompare(c.value)}>\n {c.label}\n </DropdownItem>\n ))}\n </DropdownContent>\n </Dropdown>\n ) : null}\n\n <AnalyticsFilterPicker filters={filters} />\n\n {/* Applied filters stay visible as removable chips: a filter you cannot\n see is a filter you forget you set, and every number below is wrong\n in a way the page never explains. */}\n {activeFilters.map(([key, value]) => (\n <ActiveFilterChip key={key} label={filterLabel(key)} value={value} filterKey={key} />\n ))}\n\n <div className=\"ml-auto flex items-center gap-2\">\n {actions}\n <Button\n variant=\"outline\" size=\"sm\" onClick={refresh}\n aria-label=\"Refresh\" className=\"h-8 w-8 p-0\"\n >\n <RefreshCw className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n )\n}\n\nfunction ActiveFilterChip({ label, value, filterKey }: { label: string; value: unknown; filterKey: string }) {\n const { setFilter } = useAnalyticsContext()\n const text = Array.isArray(value) ? `${value.length} selected` : String(value)\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full border bg-muted/50 py-1 pl-2.5 pr-1 text-xs\">\n <span className=\"text-muted-foreground\">{label}:</span>\n <span className=\"font-medium\">{text}</span>\n <button\n type=\"button\"\n onClick={() => setFilter(filterKey, undefined)}\n aria-label={`Remove ${label} filter`}\n className=\"rounded-full p-0.5 hover:bg-muted\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n )\n}\n"]}
|
|
@@ -51,6 +51,16 @@ export interface AppShellProps {
|
|
|
51
51
|
/** i18n label for the billing/subscription user-menu item. */
|
|
52
52
|
billingLabel?: string;
|
|
53
53
|
pageTitle?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Seta de voltar da barra, quando a ROTA declara um pai. É o caminho sem
|
|
56
|
+
* código de página: `parentRoute` no manifesto e pronto. Uma página que
|
|
57
|
+
* reivindica o slot (PageHeader) ganha desta — o cabeçalho dela sabe mais,
|
|
58
|
+
* porque tem o dado carregado.
|
|
59
|
+
*/
|
|
60
|
+
pageBack?: {
|
|
61
|
+
onBack: () => void;
|
|
62
|
+
label?: string;
|
|
63
|
+
};
|
|
54
64
|
currentPath?: string;
|
|
55
65
|
userMenuExtras?: {
|
|
56
66
|
label: string;
|
|
@@ -84,6 +94,9 @@ export interface AppShellProps {
|
|
|
84
94
|
sidebarNavKey?: string;
|
|
85
95
|
/** Push direction for a `sidebarNavKey` change. Default 'forward'. */
|
|
86
96
|
sidebarNavDirection?: 'forward' | 'back';
|
|
97
|
+
/** Render nav-group children as bare labels with an elbow marking the active
|
|
98
|
+
* one, instead of an icon each. See Sidebar's `navChildConnector`. */
|
|
99
|
+
sidebarNavChildConnector?: boolean;
|
|
87
100
|
/**
|
|
88
101
|
* Full-height column pinned to the right (the assistant dock, a tasks
|
|
89
102
|
* panel). Rendered as a flex SIBLING of the layout, so the app narrows to
|
|
@@ -107,5 +120,5 @@ export interface AppShellProps {
|
|
|
107
120
|
/** Accessible name for the drag handle. */
|
|
108
121
|
rightRailResizeLabel?: string;
|
|
109
122
|
}
|
|
110
|
-
export declare function AppShell({ variant, contentFrame, navigation, logo, user, children, onNavigate, onSignOut, onProfile, onSettings, onBilling, userPlan, billingLabel, pageTitle, currentPath, userMenuExtras, orgSwitcher, topbarStart, topbarEnd, sidebarTopContent, sidebarFooterContent, bottomNav, onBottomNavAction, mobileHeader, userMenuSlot, notificationSlot, unreadCount, sidebarSectionLabels, sidebarNavKey, sidebarNavDirection, rightRail, rightRailOpen, defaultRightRailWidth, onRightRailWidthChange, rightRailMinWidth, rightRailMaxWidth, rightRailResizeLabel, }: AppShellProps): React.JSX.Element | null;
|
|
123
|
+
export declare function AppShell({ variant, contentFrame, navigation, logo, user, children, onNavigate, onSignOut, onProfile, onSettings, onBilling, userPlan, billingLabel, pageTitle, pageBack, currentPath, userMenuExtras, orgSwitcher, topbarStart, topbarEnd, sidebarTopContent, sidebarFooterContent, bottomNav, onBottomNavAction, mobileHeader, userMenuSlot, notificationSlot, unreadCount, sidebarSectionLabels, sidebarNavKey, sidebarNavDirection, sidebarNavChildConnector, rightRail, rightRailOpen, defaultRightRailWidth, onRightRailWidthChange, rightRailMinWidth, rightRailMaxWidth, rightRailResizeLabel, }: AppShellProps): React.JSX.Element | null;
|
|
111
124
|
//# sourceMappingURL=AppShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/layout/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/layout/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAgB9B,OAAO,EAAW,KAAK,cAAc,EAAuC,MAAM,WAAW,CAAA;AAgB7F,wBAAgB,mBAAmB,IAAI,WAAW,GAAG,IAAI,CAExD;AAKD,wBAAgB,0BAA0B,IAAI,WAAW,GAAG,IAAI,CAE/D;AAMD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAYD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,CAAA;IACd,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,mBAAmB,CAAA;AAEpE;;;;8DAI8D;AAC9D,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEtE,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,OAAO,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IACzC;iDAC6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAA;IAC7B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,mEAAmE;IACnE,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;IAC3C,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,EAAE,CAAA;IACjF,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACnC,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAA;IAC3B,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC,2CAA2C;IAC3C,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/E;yDACqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IACxC;2EACuE;IACvE,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B;gEAC4D;IAC5D,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sEAAsE;IACtE,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,qEAAqE;IACrE,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2CAA2C;IAC3C,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAqkBD,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,YAAY,EACZ,UAAe,EACf,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,YAAwB,EACxB,YAAY,EACZ,gBAAgB,EAChB,WAAe,EACf,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,wBAAwB,EACxB,SAAS,EACT,aAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,EAAE,aAAa,4BAuHf"}
|
|
@@ -9,7 +9,7 @@ export interface ModuleNavItem {
|
|
|
9
9
|
active?: boolean;
|
|
10
10
|
onClick?: () => void;
|
|
11
11
|
/** Feature id for the access gate. When set, `useModuleNavAccess` (in
|
|
12
|
-
* @fayz-ai/
|
|
12
|
+
* @fayz-ai/admin) resolves this link's role (hide) and plan (Crown) state. */
|
|
13
13
|
feature?: string;
|
|
14
14
|
/** Freemium discovery: the user's role allows this link but their plan does
|
|
15
15
|
* not entitle `feature`. Renders a small Crown badge (same vocabulary as the
|
|
@@ -39,7 +39,16 @@ export interface ModulePageProps {
|
|
|
39
39
|
/** Navigation direction for the transition (from `useModuleNavigation`). */
|
|
40
40
|
direction?: 'forward' | 'back';
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Onde a sub-navegação de um módulo mora.
|
|
44
|
+
* rail — coluna à esquerda, dentro da página.
|
|
45
|
+
* tabs — faixa de abas na primeira linha do corpo (HeaderTabs).
|
|
46
|
+
* sidebar — em lugar nenhum da página: a sidebar da shell carrega as sub-views
|
|
47
|
+
* como filhas do item do módulo. Para módulos cujas sub-views são
|
|
48
|
+
* DESTINOS (Funil, Leads, Orçamentos) e não recortes de uma mesma
|
|
49
|
+
* tela — listar as duas coisas seria a mesma navegação duas vezes.
|
|
50
|
+
*/
|
|
51
|
+
export type ModuleNavVariant = 'rail' | 'tabs' | 'sidebar';
|
|
43
52
|
export declare function ModuleLayoutProvider({ variant, children }: {
|
|
44
53
|
variant: ModuleNavVariant;
|
|
45
54
|
children: React.ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModulePage.d.ts","sourceRoot":"","sources":["../../src/layout/ModulePage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ModulePage.d.ts","sourceRoot":"","sources":["../../src/layout/ModulePage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAqB9B,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAI5E;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB;mFAC+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;0EAGsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;CAC3B;AAkBD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,aAAa,EAAE,CAAA;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iFAAiF;IACjF,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B;+DAC2D;IAC3D,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B;8FAC0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAC/B;AAQD;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;AAI1D,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAEnH;AAED,wBAAgB,eAAe,IAAI,gBAAgB,CAElD;AAwJD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,CAAA;AAI5D,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAE3G;AAED,wBAAgB,YAAY,IAAI,eAAe,CAE9C;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,eAAe,CAAA;CAC5B;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,kBAAkB,qBAiGnH;AAsFD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,UAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,eAAe,qBA8ExK"}
|
package/dist/layout/Sidebar.d.ts
CHANGED
|
@@ -69,7 +69,14 @@ export interface SidebarProps {
|
|
|
69
69
|
/** Push direction for a `navKey` change. 'forward' pulls the new rail in
|
|
70
70
|
* from the right (drilling in), 'back' from the left (returning). */
|
|
71
71
|
navDirection?: 'forward' | 'back';
|
|
72
|
+
/**
|
|
73
|
+
* Render a group's children as bare labels with an elbow (↳) marking the
|
|
74
|
+
* active one, instead of the icon-per-child list. Icons on children make a
|
|
75
|
+
* group read as a second flat menu; the elbow says "you are inside this one"
|
|
76
|
+
* with a single mark. Off by default — it changes every existing rail.
|
|
77
|
+
*/
|
|
78
|
+
navChildConnector?: boolean;
|
|
72
79
|
}
|
|
73
80
|
export { ICON_MAP };
|
|
74
|
-
export declare function Sidebar({ navigation, logo, collapsed, onToggle, onNavigate, currentPath: currentPathProp, user: _user, orgSwitcher, topContent, footerContent, borderless, userMenuSlot, notificationSlot, unreadCount, sectionLabels, navKey, navDirection, }: SidebarProps): React.JSX.Element;
|
|
81
|
+
export declare function Sidebar({ navigation, logo, collapsed, onToggle, onNavigate, currentPath: currentPathProp, user: _user, orgSwitcher, topContent, footerContent, borderless, userMenuSlot, notificationSlot, unreadCount, sectionLabels, navKey, navDirection, navChildConnector, }: SidebarProps): React.JSX.Element;
|
|
75
82
|
//# sourceMappingURL=Sidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAInC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC1C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAA;IAC/E;;4DAEwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;mFAE+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,cAAc,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,EAAE,CAAA;IACjF,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kDAAkD;IAClD,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;yEAEqE;IACrE,aAAa,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACxE;;iEAE6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;0EACsE;IACtE,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"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"}
|
package/dist/layout/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { AppShell, BackStyleProvider, ContentSplit, ContentSplitTrigger, ModuleLayoutProvider, ModulePage, NavTransitionProvider, PageHeaderActions, PageTransition, Sidebar, SubpageHeader, Topbar, useBackStyle, useModuleHeaderActionsSlot, useModuleHeaderSlot, useModuleLayout, useNavTransition } from '../chunk-
|
|
2
|
-
export { SaveBar, SaveBarProvider, useBackHandler, useSaveBar } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
export { ICON_MAP } from '../chunk-
|
|
1
|
+
export { AppShell, BackStyleProvider, ContentSplit, ContentSplitTrigger, ModuleLayoutProvider, ModulePage, NavTransitionProvider, PageHeaderActions, PageTransition, Sidebar, SubpageHeader, Topbar, useBackStyle, useModuleHeaderActionsSlot, useModuleHeaderSlot, useModuleLayout, useNavTransition } from '../chunk-H63TOSQ7.js';
|
|
2
|
+
export { SaveBar, SaveBarProvider, useBackHandler, useSaveBar } from '../chunk-VAKWUUVC.js';
|
|
3
|
+
import '../chunk-OKZ6WQB3.js';
|
|
4
|
+
export { ICON_MAP } from '../chunk-22EVFMS3.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/lib/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAG5C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
package/dist/preset.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -5,13 +5,28 @@ interface DataTableProps<TData, TValue> {
|
|
|
5
5
|
data: TData[];
|
|
6
6
|
loading?: boolean;
|
|
7
7
|
skeletonRows?: number;
|
|
8
|
-
emptyMessage?:
|
|
8
|
+
emptyMessage?: React.ReactNode;
|
|
9
9
|
onRowClick?: (row: TData) => void;
|
|
10
|
-
/** Visual variant: 'card' (white bg, card wrapper — default)
|
|
11
|
-
|
|
10
|
+
/** Visual variant: 'card' (white bg, card wrapper — default), 'flat'
|
|
11
|
+
* (transparent bg, still bordered), or 'bare' — no wrapper chrome at all,
|
|
12
|
+
* for a table already inside a card that owns the border and radius. */
|
|
13
|
+
variant?: 'card' | 'flat' | 'bare';
|
|
12
14
|
/** Compact mode: smaller padding and font size */
|
|
13
15
|
compact?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Qual coluna está ordenada e para que lado, quando quem ordena é OUTRO
|
|
18
|
+
* controle (o menu "Ordenar" da barra de ferramentas).
|
|
19
|
+
*
|
|
20
|
+
* Marca o cabeçalho sem torná-lo clicável: com a ordenação fora da tabela,
|
|
21
|
+
* a seta é INFORMAÇÃO ("está ordenado por isto, assim"), não um botão. Sem
|
|
22
|
+
* ela, mudar a ordem por um menu que fecha em seguida não deixava rastro
|
|
23
|
+
* nenhum na tela.
|
|
24
|
+
*/
|
|
25
|
+
sortIndicator?: {
|
|
26
|
+
columnId: string;
|
|
27
|
+
dir: 'asc' | 'desc';
|
|
28
|
+
};
|
|
14
29
|
}
|
|
15
|
-
declare function DataTable<TData, TValue>({ columns, data, loading, skeletonRows, emptyMessage, onRowClick, variant, compact, }: DataTableProps<TData, TValue>): React.JSX.Element;
|
|
30
|
+
declare function DataTable<TData, TValue>({ columns, data, loading, skeletonRows, emptyMessage, onRowClick, variant, compact, sortIndicator, }: DataTableProps<TData, TValue>): React.JSX.Element;
|
|
16
31
|
export { DataTable, type DataTableProps };
|
|
17
32
|
//# sourceMappingURL=data-table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/primitives/data-table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,KAAK,SAAS,EAMf,MAAM,uBAAuB,CAAA;AAK9B,UAAU,cAAc,CAAC,KAAK,EAAE,MAAM;IACpC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;IACnC,IAAI,EAAE,KAAK,EAAE,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/primitives/data-table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,KAAK,SAAS,EAMf,MAAM,uBAAuB,CAAA;AAK9B,UAAU,cAAc,CAAC,KAAK,EAAE,MAAM;IACpC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;IACnC,IAAI,EAAE,KAAK,EAAE,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IACjC;;6EAEyE;IACzE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IAClC,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAA;CAC1D;AAED,iBAAS,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAChC,OAAO,EACP,IAAI,EACJ,OAAe,EACf,YAAgB,EAChB,YAA4B,EAC5B,UAAU,EACV,OAAgB,EAChB,OAAe,EACf,aAAa,GACd,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,qBA8I/B;AAED,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,CAAA"}
|
|
@@ -7,9 +7,11 @@ interface DatePickerProps {
|
|
|
7
7
|
/**
|
|
8
8
|
* `input` (default) is the form-field trigger. `toolbar` is the 26px pill that
|
|
9
9
|
* matches SegmentedControl/Button `sm`, for filter bars where a full-height
|
|
10
|
-
* form field towers over everything beside it.
|
|
10
|
+
* form field towers over everything beside it. `chip` is the FilterChip look
|
|
11
|
+
* — a data está ao lado de outros filtros e é um filtro como eles; com a
|
|
12
|
+
* moldura de campo ela lia como algo a preencher, não a escolher.
|
|
11
13
|
*/
|
|
12
|
-
variant?: 'input' | 'toolbar';
|
|
14
|
+
variant?: 'input' | 'toolbar' | 'chip';
|
|
13
15
|
/** Open the dropdown immediately on mount */
|
|
14
16
|
defaultOpen?: boolean;
|
|
15
17
|
/** Called when the dropdown opens or closes */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/primitives/date-picker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAA;AAkDnE,UAAU,eAAe;IACvB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB
|
|
1
|
+
{"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/primitives/date-picker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAA;AAkDnE,UAAU,eAAe;IACvB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;IACtC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC;AASD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,eAAe,qBAwJvH"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface FilterChipOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export interface FilterChipProps {
|
|
7
|
+
/** Texto quando nada está filtrado ("Todos os status"). */
|
|
8
|
+
allLabel: string;
|
|
9
|
+
options: FilterChipOption[];
|
|
10
|
+
/** Valor atual. `undefined` = sem filtro. */
|
|
11
|
+
value?: string;
|
|
12
|
+
onChange: (value: string | undefined) => void;
|
|
13
|
+
/** Nome acessível do filtro ("Status"). */
|
|
14
|
+
label?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Ícone à esquerda. Um filtro cujo VALOR não denuncia de que ele é — "Todo o
|
|
17
|
+
* período" ao lado de "Todas as contas" — ganha o calendário para se
|
|
18
|
+
* identificar sem gastar a palavra "Período" na pastilha.
|
|
19
|
+
*/
|
|
20
|
+
icon?: React.ComponentType<{
|
|
21
|
+
className?: string;
|
|
22
|
+
}>;
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function FilterChip({ allLabel, options, value, onChange, label, icon: Icon, className }: FilterChipProps): React.JSX.Element;
|
|
26
|
+
//# sourceMappingURL=filter-chip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-chip.d.ts","sourceRoot":"","sources":["../../src/primitives/filter-chip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAwB9B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC7C,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,eAAe,qBAuC/G"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface HeaderTab<T extends string = string> {
|
|
3
|
+
value: T;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
/** Rendered before the label (already-sized lucide component or node). */
|
|
6
|
+
icon?: React.ComponentType<{
|
|
7
|
+
className?: string;
|
|
8
|
+
}>;
|
|
9
|
+
/** Small trailing count chip — omit for none (0 still renders). */
|
|
10
|
+
count?: number;
|
|
11
|
+
/** Trailing adornment (e.g. a plan-gate badge). Rendered after the count. */
|
|
12
|
+
badge?: React.ReactNode;
|
|
13
|
+
}
|
|
14
|
+
export interface HeaderTabsProps<T extends string = string> {
|
|
15
|
+
tabs: ReadonlyArray<HeaderTab<T>>;
|
|
16
|
+
value: T;
|
|
17
|
+
onChange: (value: T) => void;
|
|
18
|
+
className?: string;
|
|
19
|
+
'aria-label'?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The list-header tab strip: a bordered group whose active item lifts onto a
|
|
23
|
+
* card surface, with hairline separators between the resting ones.
|
|
24
|
+
*
|
|
25
|
+
* Distinct from SegmentedControl on purpose. SegmentedControl is a compact
|
|
26
|
+
* inline toggle (7d/30d) that inverts to a solid foreground pill; this is the
|
|
27
|
+
* primary view switch at the top of a list — taller, icon-capable, and quiet
|
|
28
|
+
* enough that the page's action buttons still read as the loudest thing in the
|
|
29
|
+
* row.
|
|
30
|
+
*/
|
|
31
|
+
export declare function HeaderTabs<T extends string = string>({ tabs, value, onChange, className, ...rest }: HeaderTabsProps<T>): React.JSX.Element;
|
|
32
|
+
//# sourceMappingURL=header-tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-tabs.d.ts","sourceRoot":"","sources":["../../src/primitives/header-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAClD,KAAK,EAAE,CAAC,CAAA;IACR,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACxB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACxD,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,KAAK,EAAE,CAAC,CAAA;IACR,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACpD,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAC1C,EAAE,eAAe,CAAC,CAAC,CAAC,qBAgDpB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface HintProps extends React.HTMLAttributes<HTMLElement> {
|
|
3
|
+
/** The tip. Nothing renders when this is empty. */
|
|
4
|
+
label?: React.ReactNode;
|
|
5
|
+
children: React.ReactElement;
|
|
6
|
+
side?: 'top' | 'right' | 'bottom' | 'left';
|
|
7
|
+
/** Milliseconds before it opens. 0 — an icon button gives no other clue what
|
|
8
|
+
* it does, so waiting 700ms to find out is the wrong trade. */
|
|
9
|
+
delayDuration?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A styled tooltip for any control that would otherwise rely on the browser's
|
|
13
|
+
* native `title` attribute.
|
|
14
|
+
*
|
|
15
|
+
* `title=` looks like a tooltip until you use one: it appears after a ~1s
|
|
16
|
+
* delay you cannot change, in the OS's own styling, never on touch, and it is
|
|
17
|
+
* skipped by several screen readers. This renders the design-system tooltip
|
|
18
|
+
* instead, and — because the trigger keeps its own `aria-describedby` — the
|
|
19
|
+
* text is announced rather than merely drawn.
|
|
20
|
+
*
|
|
21
|
+
* Self-contained on purpose: it mounts its own Provider so a caller can drop a
|
|
22
|
+
* Hint anywhere without first knowing whether some ancestor set one up.
|
|
23
|
+
*/
|
|
24
|
+
export declare const Hint: React.ForwardRefExoticComponent<HintProps & React.RefAttributes<HTMLElement>>;
|
|
25
|
+
//# sourceMappingURL=hint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hint.d.ts","sourceRoot":"","sources":["../../src/primitives/hint.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAClE,mDAAmD;IACnD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAA;IAC5B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC1C;oEACgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI,+EAmBf,CAAA"}
|