@audere/ui 0.3.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/dist/ai/index.d.ts +32 -0
- package/dist/ai/index.js +98 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/charts/index.d.ts +78 -0
- package/dist/charts/index.js +388 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/composition/index.d.ts +27 -0
- package/dist/composition/index.js +61 -0
- package/dist/composition/index.js.map +1 -0
- package/dist/data/index.d.ts +73 -0
- package/dist/data/index.js +320 -0
- package/dist/data/index.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +1350 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/index.d.ts +107 -0
- package/dist/layout/index.js +232 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/primitives/index.d.ts +29 -0
- package/dist/primitives/index.js +163 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/surface/index.d.ts +16 -0
- package/dist/surface/index.js +38 -0
- package/dist/surface/index.js.map +1 -0
- package/dist/theme/index.d.ts +72 -0
- package/dist/theme/index.js +60 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/workflow/index.d.ts +38 -0
- package/dist/workflow/index.js +101 -0
- package/dist/workflow/index.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/surface/Surface.tsx","../src/data/DataTable.tsx","../src/data/MetricTile.tsx","../src/data/InsightCard.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/data/CrossAppNotifications.tsx","../src/charts/ChartContainer.tsx","../src/charts/SharedPieChart.tsx","../src/charts/SharedBarChart.tsx","../src/charts/SharedAreaChart.tsx","../src/charts/CashflowChart.tsx","../src/theme/colors.ts","../src/theme/spacing.ts","../src/theme/typography.ts","../src/theme/shadows.ts","../src/workflow/TaskCard.tsx","../src/workflow/Checklist.tsx","../src/workflow/ProgressTracker.tsx","../src/ai/AIActionCard.tsx","../src/ai/AIInsightPanel.tsx","../src/ai/AIChatPanel.tsx","../src/primitives/input.tsx","../src/primitives/tabs.tsx","../src/composition/PageHeader.tsx","../src/composition/Section.tsx","../src/composition/Toolbar.tsx","../src/layout/constants.ts","../src/layout/AppLayout.tsx","../src/layout/feeModelerSidebarTokens.ts","../src/layout/FeeModelerAppSidebar.tsx","../../../src/app/config/apps.ts","../../../src/app/utils/cn.ts","../../../src/app/components/platform/AppSwitcher.tsx","../../../src/app/components/platform/WorkspaceSelector.tsx","../../../src/app/components/platform/TopNavigation.tsx","../../../src/app/components/platform/PlatformSidebarMode.tsx"],"names":["jsx","jsxs","cva","Slot","RechartsPieChart","ResponsiveContainer","RechartsBarChart","Tooltip","DEFAULT_FILL","RechartsAreaChart","CartesianGrid","XAxis","YAxis","ReferenceLine","Area","Link","cn","twMerge","clsx","ChevronDown","Brain","CheckSquare","MessageSquare"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/utils\";\n\nconst surfaceVariants = cva(\n \"rounded-xl border border-border bg-card text-card-foreground shadow-sm\",\n {\n variants: {\n padding: {\n none: \"p-0\",\n sm: \"p-4\",\n md: \"p-6\",\n },\n },\n defaultVariants: {\n padding: \"none\",\n },\n },\n);\n\nexport type SurfaceProps = React.ComponentProps<\"div\"> &\n VariantProps<typeof surfaceVariants>;\n\n/**\n * Default elevated panel for tables, metrics, charts, and grouped content.\n * Uses theme CSS variables (`--card`, `--border`); host apps must define :root tokens.\n */\nexport function Surface({ className, padding, ...props }: SurfaceProps) {\n return (\n <div\n data-slot=\"surface\"\n className={cn(surfaceVariants({ padding }), className)}\n {...props}\n />\n );\n}\n\nexport { surfaceVariants };\n","import type { ReactNode } from \"react\";\n\nimport { Surface } from \"../surface/Surface\";\n\nexport type Column<T> = {\n key: keyof T;\n header: string;\n render?: (row: T) => ReactNode;\n};\n\nexport type DataTableProps<T extends { id: string | number }> = {\n columns: Column<T>[];\n rows: T[];\n};\n\nexport function DataTable<T extends { id: string | number }>({\n columns,\n rows,\n}: DataTableProps<T>) {\n return (\n <Surface className=\"overflow-x-auto\">\n <table className=\"w-full text-left text-sm text-foreground\">\n <thead className=\"border-b border-border bg-muted/50 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n <tr>\n {columns.map((column) => (\n <th\n key={String(column.key)}\n scope=\"col\"\n className=\"px-6 py-3\"\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr\n key={row.id}\n className=\"border-b border-border/60 bg-card transition-colors hover:bg-muted/40\"\n >\n {columns.map((column) => (\n <td key={String(column.key)} className=\"px-6 py-4\">\n {column.render ? column.render(row) : String(row[column.key])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </Surface>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Surface } from \"../surface/Surface\";\n\nexport type MetricTileProps = {\n label: string;\n value: string;\n helperText?: string;\n trend?: ReactNode;\n};\n\nexport function MetricTile({ label, value, helperText, trend }: MetricTileProps) {\n return (\n <Surface padding=\"sm\">\n <div className=\"space-y-1\">\n <p className=\"text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n {label}\n </p>\n <p className=\"text-2xl font-semibold text-foreground\">{value}</p>\n </div>\n {helperText ? (\n <p className=\"mt-2 text-xs text-muted-foreground\">{helperText}</p>\n ) : null}\n {trend ? <div className=\"mt-3 text-xs\">{trend}</div> : null}\n </Surface>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Surface } from \"../surface/Surface\";\nimport { cn } from \"../lib/utils\";\n\nexport type InsightCardProps = {\n title: string;\n tone?: \"neutral\" | \"warning\" | \"success\";\n icon?: ReactNode;\n children: ReactNode;\n};\n\n/** Semantic accents — not mapped to theme tokens; use for clear status differentiation. */\nconst toneClasses: Record<NonNullable<InsightCardProps[\"tone\"]>, string> = {\n neutral: \"\",\n warning: \"border-l-4 border-l-amber-500\",\n success: \"border-l-4 border-l-emerald-500\",\n};\n\nexport function InsightCard({\n title,\n tone = \"neutral\",\n icon,\n children,\n}: InsightCardProps) {\n return (\n <Surface\n className={cn(tone !== \"neutral\" && toneClasses[tone])}\n padding=\"md\"\n >\n <div className=\"flex items-start gap-4\">\n {icon ? (\n <div className=\"mt-1 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted\">\n {icon}\n </div>\n ) : null}\n <div className=\"min-w-0\">\n <h4 className=\"mb-1 text-sm font-semibold text-foreground\">{title}</h4>\n <div className=\"text-sm text-muted-foreground\">{children}</div>\n </div>\n </div>\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background text-foreground hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9 rounded-md\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge, badgeVariants };\n","import type { ReactNode } from \"react\";\n\nimport { Button } from \"../primitives/button\";\nimport { Badge } from \"../primitives/badge\";\nimport { Surface } from \"../surface/Surface\";\nimport { cn } from \"../lib/utils\";\n\n/** One cross-app notification row (caller supplies app icon as ReactNode). */\nexport type CrossAppNotificationItem = {\n id: string;\n icon: ReactNode;\n appLabel: string;\n message: string;\n timeAgo: string;\n read?: boolean;\n};\n\nexport type CrossAppNotificationsFeedV1Props = {\n /** Outer panel title (e.g. “Cross-app Notifications”). */\n panelTitle?: string;\n /** Inner list header (e.g. “Notifications”). */\n listHeader?: string;\n items: CrossAppNotificationItem[];\n onMarkAllRead?: () => void;\n onItemClick?: (id: string) => void;\n className?: string;\n};\n\n/**\n * **V1 — Single panel, divided list** (matches the cross-app mockup).\n * `Surface` container + inner header row + `divide-y` list; unread rows use bold body text.\n */\nexport function CrossAppNotificationsFeedV1({\n panelTitle = \"Cross-app Notifications\",\n listHeader = \"Notifications\",\n items,\n onMarkAllRead,\n onItemClick,\n className,\n}: CrossAppNotificationsFeedV1Props) {\n return (\n <Surface padding=\"none\" className={cn(\"overflow-hidden\", className)}>\n {panelTitle ? (\n <div className=\"border-b border-border px-5 py-4\">\n <h2 className=\"text-base font-semibold tracking-tight text-foreground\">{panelTitle}</h2>\n </div>\n ) : null}\n\n <div className=\"flex items-center justify-between gap-3 border-b border-border px-5 py-3\">\n <span className=\"text-sm font-semibold text-foreground\">{listHeader}</span>\n {onMarkAllRead ? (\n <Button type=\"button\" variant=\"link\" size=\"sm\" className=\"h-auto p-0 text-sm\" onClick={onMarkAllRead}>\n Mark all as read\n </Button>\n ) : (\n <span className=\"text-sm text-muted-foreground\"> </span>\n )}\n </div>\n\n <ul className=\"divide-y divide-border\" role=\"list\">\n {items.map((item) => (\n <li key={item.id}>\n <button\n type=\"button\"\n className={cn(\n \"flex w-full gap-3 px-5 py-4 text-left transition-colors hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n item.read && \"opacity-90\",\n )}\n onClick={() => onItemClick?.(item.id)}\n >\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted text-muted-foreground\">\n {item.icon}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\n \"block text-sm leading-snug text-foreground\",\n !item.read ? \"font-bold\" : \"font-normal text-muted-foreground\",\n )}\n >\n <span className={!item.read ? \"font-bold\" : \"font-semibold\"}>{item.appLabel}:</span>{\" \"}\n {item.message}\n </span>\n <span className=\"mt-1 flex items-center gap-1 text-xs text-muted-foreground\">\n <span aria-hidden className=\"text-[11px]\">\n ◷\n </span>\n {item.timeAgo}\n </span>\n </span>\n </button>\n </li>\n ))}\n </ul>\n </Surface>\n );\n}\n\nexport type CrossAppNotificationsFeedV2Props = CrossAppNotificationsFeedV1Props;\n\n/**\n * **V2 — Inset rows** on a muted canvas: same structure as V1 but each row sits in a soft inner\n * `Surface` strip (more separation, less ruler line).\n */\nexport function CrossAppNotificationsFeedV2({\n panelTitle = \"Cross-app Notifications\",\n listHeader = \"Notifications\",\n items,\n onMarkAllRead,\n onItemClick,\n className,\n}: CrossAppNotificationsFeedV2Props) {\n return (\n <Surface padding=\"none\" className={cn(\"overflow-hidden bg-muted/30\", className)}>\n {panelTitle ? (\n <div className=\"border-b border-border bg-card px-5 py-4\">\n <h2 className=\"text-base font-semibold tracking-tight text-foreground\">{panelTitle}</h2>\n </div>\n ) : null}\n\n <div className=\"flex items-center justify-between gap-3 border-b border-border bg-card px-5 py-3\">\n <span className=\"text-sm font-semibold text-foreground\">{listHeader}</span>\n {onMarkAllRead ? (\n <Button type=\"button\" variant=\"link\" size=\"sm\" className=\"h-auto p-0 text-sm\" onClick={onMarkAllRead}>\n Mark all as read\n </Button>\n ) : null}\n </div>\n\n <div className=\"space-y-2 p-3\">\n {items.map((item) => (\n <Surface\n key={item.id}\n padding=\"none\"\n className=\"border-border/80 bg-card shadow-none transition-colors hover:border-primary/25\"\n >\n <button\n type=\"button\"\n className=\"flex w-full gap-3 px-4 py-3 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n onClick={() => onItemClick?.(item.id)}\n >\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-full bg-muted\">\n {item.icon}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\n \"block text-sm leading-snug\",\n !item.read ? \"font-bold text-foreground\" : \"font-normal text-muted-foreground\",\n )}\n >\n <span className={!item.read ? \"font-bold\" : \"font-semibold text-foreground\"}>{item.appLabel}:</span>{\" \"}\n {item.message}\n </span>\n <span className=\"mt-1 text-xs text-muted-foreground\">{item.timeAgo}</span>\n </span>\n </button>\n </Surface>\n ))}\n </div>\n </Surface>\n );\n}\n\nexport type CrossAppNotificationsFeedV3Props = Omit<CrossAppNotificationsFeedV1Props, \"listHeader\"> & {\n listHeader?: string;\n};\n\n/**\n * **V3 — Dense single-line row**: `Badge` for app, truncated message, time on the right; best for many items.\n */\nexport function CrossAppNotificationsFeedV3({\n panelTitle = \"Cross-app Notifications\",\n listHeader = \"Notifications\",\n items,\n onMarkAllRead,\n onItemClick,\n className,\n}: CrossAppNotificationsFeedV3Props) {\n return (\n <Surface padding=\"none\" className={cn(\"overflow-hidden\", className)}>\n {panelTitle ? (\n <div className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold tracking-tight text-foreground\">{panelTitle}</h2>\n </div>\n ) : null}\n\n <div className=\"flex items-center justify-between gap-2 border-b border-border px-4 py-2\">\n <span className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">{listHeader}</span>\n {onMarkAllRead ? (\n <Button type=\"button\" variant=\"link\" size=\"sm\" className=\"h-auto p-0 text-xs\" onClick={onMarkAllRead}>\n Mark all read\n </Button>\n ) : null}\n </div>\n\n <ul className=\"divide-y divide-border\" role=\"list\">\n {items.map((item) => (\n <li key={item.id}>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 px-4 py-2.5 text-left text-sm hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={() => onItemClick?.(item.id)}\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted text-[10px]\">\n {item.icon}\n </span>\n <Badge variant=\"secondary\" className=\"shrink-0 text-[10px]\">\n {item.appLabel}\n </Badge>\n <span\n className={cn(\n \"min-w-0 flex-1 truncate\",\n !item.read ? \"font-semibold text-foreground\" : \"font-normal text-muted-foreground\",\n )}\n >\n {item.message}\n </span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">{item.timeAgo}</span>\n </button>\n </li>\n ))}\n </ul>\n </Surface>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Surface } from \"../surface/Surface\";\nimport { cn } from \"../lib/utils\";\n\nexport type ChartContainerProps = {\n title?: string;\n className?: string;\n height?: number;\n children: ReactNode;\n};\n\n/** Wrapper for shared chart cards: consistent surface, height, optional title. */\nexport function ChartContainer({\n title,\n className = \"\",\n height = 280,\n children,\n}: ChartContainerProps) {\n return (\n <Surface className={cn(\"flex flex-col overflow-hidden\", className)}>\n {title ? (\n <div className=\"px-6 pb-2 pt-4\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n </div>\n ) : null}\n <div className=\"flex-1 px-4 pb-4\" style={{ minHeight: height }}>\n {children}\n </div>\n </Surface>\n );\n}\n","import {\n PieChart as RechartsPieChart,\n Pie,\n Cell,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { ChartContainer } from \"./ChartContainer\";\n\nconst AUDERE_CHART_COLORS = [\n \"#0f172a\", // navy900\n \"#14b8a6\", // teal500\n \"#64748b\", // slate-500\n \"#0d9488\", // teal-600\n \"#94a3b8\", // slate-400\n \"#2dd4bf\", // teal-400\n];\n\nexport type PieChartDataItem = {\n name: string;\n value: number;\n};\n\nexport type SharedPieChartProps = {\n data: PieChartDataItem[];\n title?: string;\n height?: number;\n showLegend?: boolean;\n /** Name of the value field for tooltip (e.g. \"Clients\", \"Revenue\") */\n valueLabel?: string;\n};\n\nexport function SharedPieChart({\n data,\n title,\n height = 280,\n showLegend = true,\n valueLabel = \"Value\",\n}: SharedPieChartProps) {\n return (\n <ChartContainer title={title} height={height}>\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsPieChart margin={{ top: 8, right: 8, bottom: 8, left: 8 }}>\n <Pie\n data={data}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={90}\n paddingAngle={2}\n dataKey=\"value\"\n nameKey=\"name\"\n label={({ name, percent }) => `${name} ${(percent * 100).toFixed(0)}%`}\n labelLine={false}\n >\n {data.map((_, index) => (\n <Cell\n key={`cell-${index}`}\n fill={AUDERE_CHART_COLORS[index % AUDERE_CHART_COLORS.length]}\n stroke=\"white\"\n strokeWidth={2}\n />\n ))}\n </Pie>\n <Tooltip\n formatter={(value: number) => [value, valueLabel]}\n contentStyle={{\n borderRadius: \"8px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"var(--card)\",\n color: \"var(--card-foreground)\",\n boxShadow: \"0 1px 3px 0 rgb(15 23 42 / 0.08)\",\n fontSize: \"12px\",\n }}\n labelStyle={{ color: \"var(--foreground)\", fontWeight: 600 }}\n />\n {showLegend && (\n <Legend\n verticalAlign=\"bottom\"\n height={36}\n formatter={(value: string, entry: any) => (\n <span className=\"text-xs text-muted-foreground\">\n {value}\n {entry?.payload?.payload?.value != null && ` (${entry.payload.payload.value})`}\n </span>\n )}\n />\n )}\n </RechartsPieChart>\n </ResponsiveContainer>\n </ChartContainer>\n );\n}\n","import {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n ReferenceLine,\n} from \"recharts\";\nimport { ChartContainer } from \"./ChartContainer\";\n\nexport type BarChartDataItem = Record<string, string | number>;\n\nexport type SharedBarChartProps = {\n data: BarChartDataItem[];\n /** Key in each item for the category axis (e.g. \"name\", \"month\") */\n dataKey: string;\n /** Key(s) for the bar value(s). Single = one bar series, multiple = grouped/stacked */\n valueKeys?: string[];\n title?: string;\n height?: number;\n /** Optional reference line value (e.g. monthly target) */\n referenceLine?: { value: number; label?: string };\n /** Bar fill colour (default Audere teal) */\n fill?: string;\n};\n\nconst DEFAULT_FILL = \"#14b8a6\";\n\nexport function SharedBarChart({\n data,\n dataKey,\n valueKeys = [\"value\"],\n title,\n height = 260,\n referenceLine,\n fill = DEFAULT_FILL,\n}: SharedBarChartProps) {\n const colors = [\"#14b8a6\", \"#0f172a\", \"#64748b\", \"#0d9488\"];\n\n return (\n <ChartContainer title={title} height={height}>\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsBarChart\n data={data}\n margin={{ top: 8, right: 8, bottom: 8, left: 8 }}\n >\n <CartesianGrid strokeDasharray=\"3 3\" vertical={false} stroke=\"#e2e8f0\" />\n <XAxis\n dataKey={dataKey}\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: \"#64748b\" }}\n dy={8}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: \"#64748b\" }}\n dx={-8}\n />\n <Tooltip\n contentStyle={{\n borderRadius: \"8px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"var(--card)\",\n color: \"var(--card-foreground)\",\n boxShadow: \"0 1px 3px 0 rgb(15 23 42 / 0.08)\",\n fontSize: \"12px\",\n }}\n cursor={{ fill: \"var(--muted)\" }}\n />\n {referenceLine != null && (\n <ReferenceLine\n y={referenceLine.value}\n stroke=\"#dc2626\"\n strokeDasharray=\"4 4\"\n label={{\n value: referenceLine.label ?? \"Target\",\n position: \"right\",\n fontSize: 11,\n fill: \"#64748b\",\n }}\n />\n )}\n {valueKeys.map((key, idx) => (\n <Bar\n key={key}\n dataKey={key}\n fill={colors[idx % colors.length]}\n radius={[4, 4, 0, 0]}\n name={key.replace(/([A-Z])/g, \" $1\").trim()}\n />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </ChartContainer>\n );\n}\n","import {\n AreaChart as RechartsAreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { ChartContainer } from \"./ChartContainer\";\n\nexport type AreaChartDataItem = Record<string, string | number>;\n\nexport type SharedAreaChartProps = {\n data: AreaChartDataItem[];\n dataKey: string;\n valueKey: string;\n title?: string;\n height?: number;\n /** Optional second series key for stacked/dual area (e.g. inflow vs outflow) */\n secondaryValueKey?: string;\n fill?: string;\n};\n\nconst DEFAULT_FILL = \"#0f172a\";\nconst SECONDARY_FILL = \"#14b8a6\";\n\nexport function SharedAreaChart({\n data,\n dataKey,\n valueKey,\n title,\n height = 260,\n secondaryValueKey,\n fill = DEFAULT_FILL,\n}: SharedAreaChartProps) {\n return (\n <ChartContainer title={title} height={height}>\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsAreaChart\n data={data}\n margin={{ top: 8, right: 8, bottom: 8, left: 8 }}\n >\n <defs>\n <linearGradient id=\"areaFill\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={fill} stopOpacity={0.35} />\n <stop offset=\"95%\" stopColor={fill} stopOpacity={0} />\n </linearGradient>\n {secondaryValueKey && (\n <linearGradient id=\"areaFillSecondary\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={SECONDARY_FILL} stopOpacity={0.35} />\n <stop offset=\"95%\" stopColor={SECONDARY_FILL} stopOpacity={0} />\n </linearGradient>\n )}\n </defs>\n <CartesianGrid strokeDasharray=\"3 3\" vertical={false} stroke=\"#e2e8f0\" />\n <XAxis\n dataKey={dataKey}\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: \"#64748b\" }}\n dy={8}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: \"#64748b\" }}\n dx={-8}\n />\n <Tooltip\n contentStyle={{\n borderRadius: \"8px\",\n border: \"1px solid var(--border)\",\n backgroundColor: \"var(--card)\",\n color: \"var(--card-foreground)\",\n boxShadow: \"0 1px 3px 0 rgb(15 23 42 / 0.08)\",\n fontSize: \"12px\",\n }}\n />\n {secondaryValueKey && (\n <Area\n type=\"monotone\"\n dataKey={secondaryValueKey}\n stroke={SECONDARY_FILL}\n strokeWidth={2}\n fill=\"url(#areaFillSecondary)\"\n />\n )}\n <Area\n type=\"monotone\"\n dataKey={valueKey}\n stroke={fill}\n strokeWidth={2}\n fill=\"url(#areaFill)\"\n />\n </RechartsAreaChart>\n </ResponsiveContainer>\n </ChartContainer>\n );\n}\n","import {\n AreaChart as RechartsAreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n ReferenceLine,\n} from \"recharts\";\nimport { ChartContainer } from \"./ChartContainer\";\n\nexport type CashflowChartDataItem = {\n /** Period label (e.g. \"Jan\", \"Q1\") */\n period: string;\n /** Inflow amount */\n inflow: number;\n /** Outflow amount */\n outflow: number;\n /** Optional net (inflow - outflow); computed if not provided */\n net?: number;\n};\n\nexport type CashflowChartProps = {\n data: CashflowChartDataItem[];\n title?: string;\n height?: number;\n /** Currency or unit for tooltip (e.g. \"£\", \"$\") */\n currency?: string;\n};\n\nfunction formatValue(value: number, currency = \"\"): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"−\" : \"\";\n if (abs >= 1_000_000) return `${sign}${currency}${(abs / 1_000_000).toFixed(1)}M`;\n if (abs >= 1_000) return `${sign}${currency}${(abs / 1_000).toFixed(1)}k`;\n return `${sign}${currency}${abs.toLocaleString()}`;\n}\n\nexport function CashflowChart({\n data,\n title,\n height = 260,\n currency = \"£\",\n}: CashflowChartProps) {\n const series = data.map((d) => ({\n ...d,\n net: d.net ?? d.inflow - d.outflow,\n }));\n\n return (\n <ChartContainer title={title} height={height}>\n <ResponsiveContainer width=\"100%\" height={height}>\n <RechartsAreaChart\n data={series}\n margin={{ top: 8, right: 8, bottom: 8, left: 8 }}\n >\n <defs>\n <linearGradient id=\"cashflowNet\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor=\"#14b8a6\" stopOpacity={0.4} />\n <stop offset=\"95%\" stopColor=\"#14b8a6\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <CartesianGrid strokeDasharray=\"3 3\" vertical={false} stroke=\"#e2e8f0\" />\n <XAxis\n dataKey=\"period\"\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: \"#64748b\" }}\n dy={8}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: \"#64748b\" }}\n dx={-8}\n tickFormatter={(v) => formatValue(v, currency)}\n />\n <ReferenceLine y={0} stroke=\"#94a3b8\" strokeDasharray=\"2 2\" />\n <Tooltip\n contentStyle={{\n borderRadius: \"8px\",\n border: \"1px solid #e2e8f0\",\n boxShadow: \"0 1px 3px 0 rgb(15 23 42 / 0.08)\",\n fontSize: \"12px\",\n }}\n formatter={(value: any, name: any) => [\n formatValue(Number(value), currency),\n name === \"inflow\" ? \"Inflow\" : name === \"outflow\" ? \"Outflow\" : \"Net\",\n ]}\n labelFormatter={(label) => `Period: ${label}`}\n content={({ active, payload, label }: any) => {\n if (!active || !payload?.length || !label) return null;\n const row = series.find((d) => d.period === label);\n return (\n <div className=\"rounded-lg border border-border bg-card px-3 py-2 text-card-foreground shadow-sm\">\n <div className=\"mb-1.5 text-xs font-semibold\">{label}</div>\n {row && (\n <div className=\"grid grid-cols-1 gap-0.5 text-xs text-muted-foreground\">\n <span>Inflow: {formatValue(row.inflow, currency)}</span>\n <span>Outflow: {formatValue(row.outflow, currency)}</span>\n <span className=\"font-medium text-foreground\">\n Net: {formatValue(row.net ?? row.inflow - row.outflow, currency)}\n </span>\n </div>\n )}\n </div>\n );\n }}\n />\n <Area\n type=\"monotone\"\n dataKey=\"net\"\n stroke=\"#14b8a6\"\n strokeWidth={2}\n fill=\"url(#cashflowNet)\"\n name=\"net\"\n />\n </RechartsAreaChart>\n </ResponsiveContainer>\n </ChartContainer>\n );\n}\n","/**\n * Canonical colour system for Audere shared UI\n * -------------------------------------------\n * Runtime styling uses **CSS variables on `:root`** (light / `.dark`), exposed as\n * Tailwind utilities by the host app (`bg-background`, `text-foreground`, `border-border`,\n * `bg-card`, `text-muted-foreground`, `bg-primary`, `bg-sidebar`, …).\n *\n * @audere/ui compound components use those utilities only — not raw hex or `slate-*`,\n * except intentional semantic accents (e.g. status borders) documented on the component.\n *\n * Shared UI app: `src/styles/theme.css`. Other apps: align variable names with shadcn-style tokens.\n */\n\n/** Maps to `--${key}` on :root for inline styles, canvas, or third-party charts. */\nexport const cssVarName = {\n background: \"--background\",\n foreground: \"--foreground\",\n card: \"--card\",\n cardForeground: \"--card-foreground\",\n border: \"--border\",\n muted: \"--muted\",\n mutedForeground: \"--muted-foreground\",\n primary: \"--primary\",\n primaryForeground: \"--primary-foreground\",\n destructive: \"--destructive\",\n accent: \"--accent\",\n sidebar: \"--sidebar\",\n sidebarBorder: \"--sidebar-border\",\n sidebarForeground: \"--sidebar-foreground\",\n chart1: \"--chart-1\",\n chart2: \"--chart-2\",\n chart3: \"--chart-3\",\n chart4: \"--chart-4\",\n chart5: \"--chart-5\",\n} as const;\n\nexport type CssVarToken = keyof typeof cssVarName;\n\n/** `var(--token)` for use in `style={{ color: cssVar(\"primary\") }}` or SVG attributes. */\nexport function cssVar(token: CssVarToken): string {\n return `var(${cssVarName[token]})`;\n}\n","/** Numeric rhythm for JS/layout math. Prefer Tailwind spacing scale in components when possible. */\nexport const spacing = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n \"2xl\": 32,\n} as const;\n\nexport type SpacingToken = keyof typeof spacing;\n","/** Reference sizes for non-Tailwind contexts. Host sets body font via theme / `font-sans`. */\nexport const typography = {\n fontFamily: \"'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'SF Pro Text', sans-serif\",\n sizes: {\n xs: 12,\n sm: 14,\n md: 16,\n lg: 18,\n xl: 20,\n \"2xl\": 24,\n \"3xl\": 30,\n },\n} as const;\n\nexport type TypographySizeToken = keyof typeof typography.sizes;\n","export const shadows = {\n subtle: \"0 1px 2px 0 rgb(15 23 42 / 0.04)\",\n card: \"0 1px 3px 0 rgb(15 23 42 / 0.08)\",\n popover: \"0 10px 40px rgb(15 23 42 / 0.22)\",\n} as const;\n\nexport type ShadowToken = keyof typeof shadows;\n","import type { ReactNode } from \"react\";\n\nimport { Surface } from \"../surface/Surface\";\n\nexport type TaskStatus = \"todo\" | \"in-progress\" | \"done\";\n\nexport type TaskCardProps = {\n status: TaskStatus;\n title: string;\n description?: string;\n footer?: ReactNode;\n actions?: ReactNode;\n};\n\nexport function TaskCard({\n status,\n title,\n description,\n footer,\n actions,\n}: TaskCardProps) {\n const statusLabel =\n status === \"done\" ? \"Completed\" : status === \"in-progress\" ? \"In Progress\" : \"To Do\";\n\n return (\n <Surface\n padding=\"none\"\n className=\"transition-colors hover:border-primary/30\"\n >\n <div className=\"px-5 pb-5 pt-5\">\n <div className=\"mb-3 flex items-start justify-between gap-3\">\n <span className=\"inline-flex items-center rounded-full bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground\">\n {statusLabel}\n </span>\n {actions}\n </div>\n <h3 className=\"mb-1 text-sm font-semibold leading-snug text-foreground\">\n {title}\n </h3>\n {description ? (\n <p className=\"mb-4 line-clamp-2 text-xs text-muted-foreground\">{description}</p>\n ) : null}\n {footer ? (\n <div className=\"mt-4 border-t border-border pt-4 text-xs text-muted-foreground\">\n {footer}\n </div>\n ) : null}\n </div>\n </Surface>\n );\n}\n","import { Surface } from \"../surface/Surface\";\n\nexport type ChecklistItem = {\n id: string | number;\n label: string;\n status: \"todo\" | \"pending\" | \"done\";\n meta?: string;\n};\n\nexport type ChecklistProps = {\n title?: string;\n items: ChecklistItem[];\n};\n\nexport function Checklist({ title, items }: ChecklistProps) {\n return (\n <Surface padding=\"none\">\n {title ? (\n <div className=\"flex items-center justify-between rounded-t-[inherit] border-b border-border bg-muted/50 px-4 py-3\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n </div>\n ) : null}\n <div className=\"p-2\">\n {items.map((item) => (\n <div\n key={item.id}\n className=\"group flex cursor-pointer items-start gap-3 rounded-md p-3 transition-colors hover:bg-muted/60\"\n >\n <div className=\"mt-0.5 h-5 w-5 rounded-full border border-border group-hover:border-primary\" />\n <div className=\"min-w-0 flex-1\">\n <p\n className={\n item.status === \"done\"\n ? \"text-sm font-medium text-muted-foreground line-through\"\n : \"text-sm font-medium text-foreground\"\n }\n >\n {item.label}\n </p>\n {item.meta ? (\n <p className=\"mt-0.5 text-xs text-muted-foreground\">{item.meta}</p>\n ) : null}\n </div>\n </div>\n ))}\n </div>\n </Surface>\n );\n}\n","import { Surface } from \"../surface/Surface\";\n\nexport type ProgressStep = {\n id: string | number;\n title: string;\n description?: string;\n state: \"complete\" | \"current\" | \"upcoming\";\n};\n\nexport type ProgressTrackerProps = {\n title?: string;\n steps: ProgressStep[];\n};\n\nexport function ProgressTracker({ title, steps }: ProgressTrackerProps) {\n return (\n <Surface padding=\"none\">\n {title ? (\n <div className=\"px-4 pb-2 pt-4\">\n <h3 className=\"text-sm font-medium text-foreground\">{title}</h3>\n </div>\n ) : null}\n <div className=\"space-y-6 px-4 pb-6 pt-2\">\n <div className=\"relative ml-3 space-y-6 border-l-2 border-border\">\n {steps.map((step) => (\n <div key={step.id} className=\"relative pl-6\">\n <div className=\"absolute -left-[9px] top-1 flex h-4 w-4 items-center justify-center rounded-full border-2 border-border bg-card\">\n {step.state === \"complete\" ? (\n <div className=\"h-2 w-2 rounded-full bg-primary\" />\n ) : null}\n {step.state === \"current\" ? (\n <div className=\"h-2 w-2 animate-pulse rounded-full bg-primary/80\" />\n ) : null}\n </div>\n <h4 className=\"text-sm font-semibold text-foreground\">{step.title}</h4>\n {step.description ? (\n <p className=\"mt-1 text-xs text-muted-foreground\">{step.description}</p>\n ) : null}\n </div>\n ))}\n </div>\n </div>\n </Surface>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Surface } from \"../surface/Surface\";\n\nexport type AIActionCardProps = {\n title: string;\n description: string;\n badge?: ReactNode;\n children?: ReactNode;\n};\n\nexport function AIActionCard({\n title,\n description,\n badge,\n children,\n}: AIActionCardProps) {\n return (\n <Surface padding=\"md\" className=\"overflow-hidden border-primary/20\">\n {badge ? (\n <div className=\"mb-4 flex items-center gap-2 text-sm font-semibold text-primary\">\n {badge}\n </div>\n ) : null}\n <h3 className=\"mb-2 text-xl font-medium text-foreground\">{title}</h3>\n <p className=\"mb-6 max-w-3xl text-muted-foreground\">{description}</p>\n {children ? <div className=\"space-y-4\">{children}</div> : null}\n </Surface>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Surface } from \"../surface/Surface\";\n\nexport type AIInsightPanelProps = {\n title: string;\n children: ReactNode;\n headerAccessory?: ReactNode;\n};\n\nexport function AIInsightPanel({\n title,\n children,\n headerAccessory,\n}: AIInsightPanelProps) {\n return (\n <Surface\n padding=\"md\"\n className=\"relative overflow-hidden bg-gradient-to-br from-primary/5 via-card to-card\"\n >\n <div className=\"mb-4 flex items-center justify-between gap-4\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {headerAccessory}\n </div>\n <div className=\"leading-relaxed text-foreground\">{children}</div>\n </Surface>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Surface } from \"../surface/Surface\";\nimport { cn } from \"../lib/utils\";\n\nexport type ChatMessage = {\n id: string | number;\n role: \"assistant\" | \"user\";\n content: ReactNode;\n};\n\nexport type AIChatPanelProps = {\n title: string;\n messages: ChatMessage[];\n footer?: ReactNode;\n className?: string;\n};\n\nexport function AIChatPanel({ title, messages, footer, className }: AIChatPanelProps) {\n return (\n <Surface\n padding=\"none\"\n className={cn(\"flex flex-col\", className ?? \"h-[400px]\")}\n >\n <div className=\"flex items-center justify-between rounded-t-[inherit] border-b border-border bg-muted/40 p-4\">\n <div className=\"text-sm font-medium text-foreground\">{title}</div>\n </div>\n <div className=\"flex-1 space-y-4 overflow-y-auto p-4\">\n {messages.map((message) => (\n <div\n key={message.id}\n className={\n message.role === \"assistant\"\n ? \"flex max-w-[85%] gap-3\"\n : \"ml-auto flex max-w-[85%] justify-end gap-3\"\n }\n >\n <div\n className={\n message.role === \"assistant\"\n ? \"rounded-2xl rounded-tl-sm border border-border bg-muted p-3 text-sm text-foreground\"\n : \"rounded-2xl rounded-tr-sm bg-primary p-3 text-sm text-primary-foreground\"\n }\n >\n {message.content}\n </div>\n </div>\n ))}\n </div>\n {footer ? <div className=\"border-t border-border p-4\">{footer}</div> : null}\n </Surface>\n );\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\n\nimport { cn } from \"../lib/utils\";\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n );\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-xl p-[3px] flex\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-card dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-xl border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nexport type PageHeaderProps = {\n title: string;\n description?: string;\n actions?: ReactNode;\n className?: string;\n};\n\nexport function PageHeader({\n title,\n description,\n actions,\n className,\n}: PageHeaderProps) {\n return (\n <header\n className={cn(\n \"flex flex-col gap-4 border-b border-border pb-8 sm:flex-row sm:items-start sm:justify-between\",\n className,\n )}\n >\n <div className=\"min-w-0 space-y-1\">\n <h1 className=\"text-3xl font-semibold tracking-tight text-foreground\">\n {title}\n </h1>\n {description ? (\n <p className=\"text-lg text-muted-foreground\">{description}</p>\n ) : null}\n </div>\n {actions ? (\n <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{actions}</div>\n ) : null}\n </header>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nexport type SectionProps = {\n children: ReactNode;\n title?: string;\n description?: string;\n className?: string;\n};\n\nexport function Section({\n title,\n description,\n children,\n className,\n}: SectionProps) {\n return (\n <section className={cn(\"space-y-4\", className)}>\n {title || description ? (\n <div className=\"space-y-1\">\n {title ? (\n <h2 className=\"text-xl font-semibold tracking-tight text-foreground\">\n {title}\n </h2>\n ) : null}\n {description ? (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n ) : null}\n </div>\n ) : null}\n {children}\n </section>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nexport type ToolbarProps = {\n children: ReactNode;\n className?: string;\n};\n\n/** Primary row for filters, bulk actions, or view controls above a table or list. */\nexport function Toolbar({ children, className }: ToolbarProps) {\n return (\n <div\n className={cn(\n \"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:justify-between\",\n className,\n )}\n >\n {children}\n </div>\n );\n}\n","/**\n * Audere app shell constraints — use these strings in custom layouts so spacing\n * stays aligned with {@link AppLayout}.\n */\nexport const audereShell = {\n /** Sidebar column width (Tailwind `w-64`). */\n sidebarWidthClass: \"w-64\",\n /** Offset for main column beside fixed sidebar. */\n mainGutterClass: \"pl-64\",\n /** Max width of primary content well inside the shell. */\n contentMaxWidthClass: \"max-w-6xl\",\n /** Default padding around the content well. */\n contentPaddingClass: \"p-8 lg:p-12\",\n /** Full outer shell: page canvas + typography base. */\n pageRootClass:\n \"flex min-h-screen bg-muted/30 font-sans text-foreground antialiased\",\n /** Fixed sidebar track (border + background use sidebar tokens). */\n asideTrackClass:\n \"fixed inset-y-0 z-10 flex w-64 flex-shrink-0 flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground\",\n /** Sticky-style header strip above content. */\n headerStripClass: \"border-b border-border bg-card/80 backdrop-blur\",\n} as const;\n","import type { ReactNode } from \"react\";\n\nimport { audereShell } from \"./constants\";\nimport { cn } from \"../lib/utils\";\n\nexport type AppLayoutProps = {\n children: ReactNode;\n sidebar?: ReactNode;\n header?: ReactNode;\n};\n\nexport function AppLayout({ sidebar, header, children }: AppLayoutProps) {\n return (\n <div className={audereShell.pageRootClass}>\n <aside className={audereShell.asideTrackClass}>{sidebar}</aside>\n\n <main className={cn(\"flex flex-1 flex-col\", audereShell.mainGutterClass)}>\n <div className={audereShell.headerStripClass}>{header}</div>\n <div\n className={cn(\n \"mx-auto flex flex-1\",\n audereShell.contentMaxWidthClass,\n audereShell.contentPaddingClass,\n )}\n >\n {children}\n </div>\n </main>\n </div>\n );\n}\n","/**\n * Locked Fee Modeler app sidebar visual tokens (Shared UI).\n * Section titles are larger than nested links; nested uses muted slate-400 vs section slate-300.\n */\nexport const feeModelerSidebarTokens = {\n /** Outer aside: deep navy rail */\n /** z-40: stay above main content (cards, sticky toolbars) so nav clicks always register */\n shell: \"fixed inset-y-0 z-40 flex w-64 shrink-0 flex-col bg-slate-800 text-white\",\n /** Brand / top block above nav */\n brandRegion: \"border-b border-slate-700 p-5\",\n /** Scrollable nav region (everything above footer) */\n navScroll:\n \"min-h-0 flex-1 space-y-0.5 overflow-y-auto p-3\",\n /** flex column wrapper: scroll + footer */\n navRoot: \"flex min-h-0 flex-1 flex-col\",\n /** Optional “back” link row */\n backLink:\n \"mb-2 flex items-center gap-2 rounded-md px-3 py-2 text-xs font-medium text-slate-300 hover:bg-slate-700 hover:text-white\",\n /** Home (primary rail, same size as settings footer link) */\n primaryRailLink:\n \"flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors\",\n primaryRailLinkInactive: \"text-slate-300 hover:bg-slate-700 hover:text-white\",\n primaryRailLinkActive: \"bg-teal-600 text-white\",\n /** Collapsible section header button */\n sectionTrigger:\n \"flex w-full items-center justify-between rounded-md px-3 py-2 text-left text-sm font-semibold uppercase tracking-wider text-slate-300 hover:bg-slate-700/60\",\n /** Nested item under a section */\n nestedLink:\n \"flex items-center gap-2 rounded-md px-3 py-1.5 text-[14px] font-medium leading-snug transition-colors\",\n nestedLinkInactive: \"text-slate-400 hover:bg-slate-700 hover:text-white\",\n nestedLinkActive: \"bg-teal-600 text-white\",\n nestedIcon: \"h-3.5 w-3.5 shrink-0 opacity-90\",\n primaryIcon: \"h-4 w-4 shrink-0\",\n sectionChevron: \"h-3.5 w-3.5 shrink-0 transition-transform\",\n /** Settings (and similar) pinned footer */\n footerRegion: \"shrink-0 border-t border-slate-700 p-3 pt-2\",\n} as const;\n","import type { ComponentType, ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { feeModelerSidebarTokens as t } from \"./feeModelerSidebarTokens\";\n\nexport type FeeModelerNavItem = {\n path: string;\n label: string;\n icon: ComponentType<{ className?: string }>;\n};\n\nexport type FeeModelerNavGroup = {\n id: string;\n label: string;\n items: FeeModelerNavItem[];\n};\n\nexport type FeeModelerSidebarLinkProps = {\n to: string;\n className?: string;\n children?: ReactNode;\n};\n\nexport type FeeModelerAppSidebarProps = {\n pathname: string;\n navigate: (to: string) => void;\n Link: ComponentType<FeeModelerSidebarLinkProps>;\n /** Logo row, optional badge, etc. */\n branding: ReactNode;\n home: FeeModelerNavItem;\n settings: FeeModelerNavItem;\n groups: FeeModelerNavGroup[];\n isGroupVisible?: (group: FeeModelerNavGroup) => boolean;\n backLink?: { to: string; label: string };\n openGroupId: string | null;\n onOpenGroupChange: (id: string | null) => void;\n /** Optional block below the Settings link (e.g. user / org line) */\n belowSettings?: ReactNode;\n};\n\nfunction ChevronRight({ open }: { open: boolean }) {\n return (\n <svg\n className={cn(t.sectionChevron, open && \"rotate-90\")}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\n/**\n * Fee Modeler application sidebar: accordion sections, primary Home, Settings footer.\n * Routing-agnostic: pass your router `Link` and `navigate`.\n */\nexport function FeeModelerAppSidebar({\n pathname,\n navigate,\n Link,\n branding,\n home,\n settings,\n groups,\n isGroupVisible,\n backLink,\n openGroupId,\n onOpenGroupChange,\n belowSettings,\n}: FeeModelerAppSidebarProps) {\n const visibleGroups = isGroupVisible ? groups.filter(isGroupVisible) : groups;\n const HomeIcon = home.icon;\n const SettingsIcon = settings.icon;\n\n return (\n <aside className={t.shell}>\n <div className={t.brandRegion}>{branding}</div>\n\n <nav className={t.navRoot}>\n <div className={t.navScroll}>\n {backLink ? (\n <Link to={backLink.to} className={t.backLink}>\n <span className=\"inline-flex items-center gap-2\">\n <svg\n className=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n aria-hidden\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n {backLink.label}\n </span>\n </Link>\n ) : null}\n\n <Link\n to={home.path}\n className={cn(\n t.primaryRailLink,\n pathname === home.path ? t.primaryRailLinkActive : t.primaryRailLinkInactive,\n )}\n >\n <HomeIcon className={t.primaryIcon} />\n {home.label}\n </Link>\n\n {visibleGroups.map((group) => {\n const isOpen = openGroupId === group.id;\n const only = group.items.length === 1 ? group.items[0] : null;\n\n // Single route per section (e.g. SETUP): use a real Link so navigation always works.\n // Accordion + navigate(first) was easy to miss under overlapping main content (low z-index).\n if (only) {\n const isActive = pathname === only.path;\n const OnlyIcon = only.icon;\n return (\n <div key={group.id} className=\"mt-1\">\n <Link\n to={only.path}\n className={cn(\n t.sectionTrigger,\n \"no-underline\",\n isActive ? \"bg-teal-600 text-white hover:bg-teal-600\" : \"\",\n )}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n <OnlyIcon className={t.nestedIcon} />\n <span>{group.label}</span>\n </span>\n </Link>\n </div>\n );\n }\n\n return (\n <div key={group.id} className=\"mt-1\">\n <button\n type=\"button\"\n onClick={() => {\n if (isOpen) {\n onOpenGroupChange(null);\n return;\n }\n const first = group.items[0];\n if (first) {\n if (pathname !== first.path) {\n navigate(first.path);\n }\n onOpenGroupChange(group.id);\n }\n }}\n className={t.sectionTrigger}\n >\n <span>{group.label}</span>\n <ChevronRight open={isOpen} />\n </button>\n\n {isOpen && (\n <div className=\"space-y-0.5\">\n {group.items.map((item) => {\n const isActive = pathname === item.path;\n const Icon = item.icon;\n return (\n <Link\n key={item.path}\n to={item.path}\n className={cn(\n t.nestedLink,\n isActive ? t.nestedLinkActive : t.nestedLinkInactive,\n )}\n >\n <Icon className={t.nestedIcon} />\n {item.label}\n </Link>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n <div className={t.footerRegion}>\n <Link\n to={settings.path}\n className={cn(\n t.primaryRailLink,\n pathname === settings.path ? t.primaryRailLinkActive : t.primaryRailLinkInactive,\n )}\n >\n <SettingsIcon className={t.primaryIcon} />\n {settings.label}\n </Link>\n {belowSettings ?? null}\n </div>\n </nav>\n </aside>\n );\n}\n","import type { LucideIcon } from \"lucide-react\";\nimport { LayoutGrid, Brain, CheckSquare, TrendingUp, MessageSquare, Home } from \"lucide-react\";\n\nexport type AppItem = {\n name: string;\n path: string;\n icon: LucideIcon;\n iconBg?: string;\n};\n\nexport const PLATFORM_APPS: AppItem[] = [\n { name: \"Audere Hub\", path: \"/hub\", icon: LayoutGrid, iconBg: \"bg-slate-700\" },\n { name: \"CoachAI\", path: \"/coachai\", icon: Brain, iconBg: \"bg-teal-600\" },\n { name: \"RoleAudit\", path: \"/roleaudit\", icon: CheckSquare, iconBg: \"bg-blue-600\" },\n { name: \"FeeModeler\", path: \"/feemodeler\", icon: TrendingUp, iconBg: \"bg-indigo-600\" },\n { name: \"Marketos\", path: \"/marketos\", icon: MessageSquare, iconBg: \"bg-violet-600\" },\n { name: \"Finsight\", path: \"/finsight\", icon: LayoutGrid, iconBg: \"bg-emerald-600\" },\n { name: \"Practice Evolution\", path: \"/home\", icon: Home, iconBg: \"bg-slate-600\" },\n];\n\nexport function getCurrentApp(pathname: string): AppItem {\n if (pathname.startsWith(\"/hub\")) return PLATFORM_APPS[0];\n if (pathname.startsWith(\"/marketos\")) return PLATFORM_APPS[4];\n if (pathname.startsWith(\"/finsight\")) return PLATFORM_APPS[5];\n if (pathname.startsWith(\"/home\")) return PLATFORM_APPS[6];\n if (pathname.startsWith(\"/roleaudit\")) return PLATFORM_APPS[2];\n if (pathname.startsWith(\"/feemodeler\")) return PLATFORM_APPS[3];\n if (pathname.startsWith(\"/coachai\")) return PLATFORM_APPS[1];\n return PLATFORM_APPS[0];\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { useState, useRef, useEffect } from \"react\";\nimport { Link, useLocation } from \"react-router\";\nimport { ChevronDown } from \"lucide-react\";\nimport { PLATFORM_APPS, getCurrentApp } from \"../../config/apps\";\nimport { cn } from \"../../utils/cn\";\n\ntype AppSwitcherProps = {\n className?: string;\n};\n\nexport function AppSwitcher({ className }: AppSwitcherProps) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const location = useLocation();\n const current = getCurrentApp(location.pathname);\n\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const CurrentIcon = current.icon;\n\n return (\n <div ref={ref} className={cn(\"relative\", className)}>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex items-center gap-2 h-9 px-3 rounded-md border border-slate-200 bg-white text-sm font-medium text-slate-800 hover:bg-slate-50 min-w-[140px] justify-between\"\n >\n <span className=\"flex items-center gap-2 truncate\">\n <span className={cn(\"flex h-5 w-5 shrink-0 items-center justify-center rounded text-white\", current.iconBg)}>\n <CurrentIcon className=\"h-3 w-3\" />\n </span>\n <span className=\"truncate\">{current.name}</span>\n </span>\n <ChevronDown className={cn(\"h-4 w-4 shrink-0 text-slate-400 transition-transform\", open && \"rotate-180\")} />\n </button>\n {open && (\n <div className=\"absolute left-0 top-full mt-1 w-64 rounded-lg border border-slate-200 bg-white py-1 shadow-lg z-50\">\n {PLATFORM_APPS.map((app) => {\n const Icon = app.icon;\n const isCurrent = app.path === current.path;\n const content = (\n <>\n <span className={cn(\"flex h-6 w-6 shrink-0 items-center justify-center rounded text-white\", app.iconBg)}>\n <Icon className=\"h-3.5 w-3.5\" />\n </span>\n <span className=\"truncate\">{app.name}</span>\n </>\n );\n return app.path.startsWith(\"#\") ? (\n <a\n key={app.name}\n href={app.path}\n className={cn(\n \"flex items-center gap-3 px-3 py-2 text-sm rounded-md mx-1 transition-colors\",\n isCurrent ? \"bg-teal-50 text-teal-800\" : \"text-slate-700 hover:bg-slate-50\",\n )}\n >\n {content}\n </a>\n ) : (\n <Link\n key={app.name}\n to={app.path}\n onClick={() => setOpen(false)}\n className={cn(\n \"flex items-center gap-3 px-3 py-2 text-sm rounded-md mx-1 transition-colors\",\n isCurrent ? \"bg-teal-50 text-teal-800\" : \"text-slate-700 hover:bg-slate-50\",\n )}\n >\n {content}\n </Link>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { ChevronDown } from \"lucide-react\";\n\nexport function WorkspaceSelector() {\n return (\n <div className=\"border border-slate-200 rounded-lg w-64 bg-white shadow-sm\">\n <button className=\"flex w-full items-center justify-between px-4 py-3 text-sm font-medium text-slate-900 hover:bg-slate-50 rounded-lg\">\n <div className=\"flex items-center gap-3\">\n <div className=\"h-8 w-8 rounded-full bg-slate-100 border border-slate-200 flex items-center justify-center text-xs font-bold text-slate-600\">\n AF\n </div>\n <div className=\"text-left\">\n <div className=\"font-semibold text-slate-900\">Acme Financial</div>\n <div className=\"text-xs text-slate-500\">Enterprise Plan</div>\n </div>\n </div>\n <ChevronDown className=\"h-4 w-4 text-slate-400\" />\n </button>\n </div>\n );\n}","import { Search, ChevronDown, Bell } from \"lucide-react\";\n\nexport function TopNavigation() {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white shadow-sm overflow-hidden\">\n <div className=\"flex h-16 items-center justify-between border-b border-slate-100 bg-white px-6\">\n <div className=\"flex items-center gap-6\">\n <div className=\"flex items-center\">\n <span className=\"text-base font-semibold tracking-tight text-slate-900\">\n Audere Hub\n </span>\n </div>\n <div className=\"h-4 w-px bg-slate-200\"></div>\n <button className=\"flex items-center gap-2 text-sm font-medium text-slate-600 hover:text-slate-900\">\n Acme Financial <ChevronDown className=\"h-4 w-4 text-slate-400\" />\n </button>\n </div>\n\n <div className=\"flex flex-1 items-center justify-center px-8\">\n <div className=\"group flex h-9 w-full max-w-md items-center gap-2 rounded-md border border-slate-200 bg-slate-50 px-3 text-sm text-slate-500 ring-offset-white transition-colors hover:border-slate-300 focus-within:border-teal-500 focus-within:ring-2 focus-within:ring-teal-500 focus-within:ring-offset-2\">\n <Search className=\"h-4 w-4 shrink-0 text-slate-400\" />\n <span className=\"flex-1 text-left\">Search anything...</span>\n <kbd className=\"hidden h-5 items-center gap-1 rounded border border-slate-200 bg-white px-1.5 font-mono text-[10px] font-medium text-slate-500 sm:flex\">\n <span className=\"text-xs\">⌘</span>K\n </kbd>\n </div>\n </div>\n\n <div className=\"flex items-center gap-4\">\n <button className=\"text-slate-400 hover:text-slate-600 relative\">\n <Bell className=\"h-5 w-5\" />\n <span className=\"absolute top-0 right-0 block h-2 w-2 rounded-full bg-red-500 ring-2 ring-white\"></span>\n </button>\n <div className=\"h-8 w-8 rounded-full bg-slate-200 flex items-center justify-center text-xs font-medium text-slate-600 border border-slate-300 cursor-pointer\">\n JS\n </div>\n </div>\n </div>\n </div>\n );\n}","import { Grid, Brain, CheckSquare, LineChart, MessageSquare, LayoutDashboard } from \"lucide-react\";\n\nconst PLATFORM_ITEMS = [\n { name: \"Hub\", icon: Grid, active: true },\n { name: \"CoachAI\", icon: Brain, active: false },\n { name: \"RoleAudit\", icon: CheckSquare, active: false },\n { name: \"FeeModeler\", icon: LineChart, active: false },\n { name: \"Marketos\", icon: MessageSquare, active: false },\n { name: \"Finsight\", icon: LayoutDashboard, active: false },\n];\n\nexport function PlatformSidebarMode() {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-slate-900 p-6 shadow-sm flex flex-col justify-start\">\n <h3 className=\"text-sm font-semibold text-white mb-6\">Platform Mode</h3>\n <div className=\"space-y-1 w-56\">\n {PLATFORM_ITEMS.map((item) => {\n const Icon = item.icon;\n return (\n <div \n key={item.name} \n className={`flex items-center gap-3 px-3 py-2 rounded-md text-sm cursor-pointer transition-colors ${\n item.active \n ? 'bg-teal-500/10 text-teal-400 font-medium' \n : 'text-slate-400 hover:bg-slate-800 hover:text-white'\n }`}\n >\n <Icon className=\"h-4 w-4\" />\n {item.name}\n </div>\n );\n })}\n </div>\n </div>\n );\n}"]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode, ComponentType } from 'react';
|
|
3
|
+
|
|
4
|
+
type AppLayoutProps = {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
sidebar?: ReactNode;
|
|
7
|
+
header?: ReactNode;
|
|
8
|
+
};
|
|
9
|
+
declare function AppLayout({ sidebar, header, children }: AppLayoutProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Audere app shell constraints — use these strings in custom layouts so spacing
|
|
13
|
+
* stays aligned with {@link AppLayout}.
|
|
14
|
+
*/
|
|
15
|
+
declare const audereShell: {
|
|
16
|
+
/** Sidebar column width (Tailwind `w-64`). */
|
|
17
|
+
readonly sidebarWidthClass: "w-64";
|
|
18
|
+
/** Offset for main column beside fixed sidebar. */
|
|
19
|
+
readonly mainGutterClass: "pl-64";
|
|
20
|
+
/** Max width of primary content well inside the shell. */
|
|
21
|
+
readonly contentMaxWidthClass: "max-w-6xl";
|
|
22
|
+
/** Default padding around the content well. */
|
|
23
|
+
readonly contentPaddingClass: "p-8 lg:p-12";
|
|
24
|
+
/** Full outer shell: page canvas + typography base. */
|
|
25
|
+
readonly pageRootClass: "flex min-h-screen bg-muted/30 font-sans text-foreground antialiased";
|
|
26
|
+
/** Fixed sidebar track (border + background use sidebar tokens). */
|
|
27
|
+
readonly asideTrackClass: "fixed inset-y-0 z-10 flex w-64 flex-shrink-0 flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground";
|
|
28
|
+
/** Sticky-style header strip above content. */
|
|
29
|
+
readonly headerStripClass: "border-b border-border bg-card/80 backdrop-blur";
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Locked Fee Modeler app sidebar visual tokens (Shared UI).
|
|
34
|
+
* Section titles are larger than nested links; nested uses muted slate-400 vs section slate-300.
|
|
35
|
+
*/
|
|
36
|
+
declare const feeModelerSidebarTokens: {
|
|
37
|
+
/** Outer aside: deep navy rail */
|
|
38
|
+
/** z-40: stay above main content (cards, sticky toolbars) so nav clicks always register */
|
|
39
|
+
readonly shell: "fixed inset-y-0 z-40 flex w-64 shrink-0 flex-col bg-slate-800 text-white";
|
|
40
|
+
/** Brand / top block above nav */
|
|
41
|
+
readonly brandRegion: "border-b border-slate-700 p-5";
|
|
42
|
+
/** Scrollable nav region (everything above footer) */
|
|
43
|
+
readonly navScroll: "min-h-0 flex-1 space-y-0.5 overflow-y-auto p-3";
|
|
44
|
+
/** flex column wrapper: scroll + footer */
|
|
45
|
+
readonly navRoot: "flex min-h-0 flex-1 flex-col";
|
|
46
|
+
/** Optional “back” link row */
|
|
47
|
+
readonly backLink: "mb-2 flex items-center gap-2 rounded-md px-3 py-2 text-xs font-medium text-slate-300 hover:bg-slate-700 hover:text-white";
|
|
48
|
+
/** Home (primary rail, same size as settings footer link) */
|
|
49
|
+
readonly primaryRailLink: "flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors";
|
|
50
|
+
readonly primaryRailLinkInactive: "text-slate-300 hover:bg-slate-700 hover:text-white";
|
|
51
|
+
readonly primaryRailLinkActive: "bg-teal-600 text-white";
|
|
52
|
+
/** Collapsible section header button */
|
|
53
|
+
readonly sectionTrigger: "flex w-full items-center justify-between rounded-md px-3 py-2 text-left text-sm font-semibold uppercase tracking-wider text-slate-300 hover:bg-slate-700/60";
|
|
54
|
+
/** Nested item under a section */
|
|
55
|
+
readonly nestedLink: "flex items-center gap-2 rounded-md px-3 py-1.5 text-[14px] font-medium leading-snug transition-colors";
|
|
56
|
+
readonly nestedLinkInactive: "text-slate-400 hover:bg-slate-700 hover:text-white";
|
|
57
|
+
readonly nestedLinkActive: "bg-teal-600 text-white";
|
|
58
|
+
readonly nestedIcon: "h-3.5 w-3.5 shrink-0 opacity-90";
|
|
59
|
+
readonly primaryIcon: "h-4 w-4 shrink-0";
|
|
60
|
+
readonly sectionChevron: "h-3.5 w-3.5 shrink-0 transition-transform";
|
|
61
|
+
/** Settings (and similar) pinned footer */
|
|
62
|
+
readonly footerRegion: "shrink-0 border-t border-slate-700 p-3 pt-2";
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
type FeeModelerNavItem = {
|
|
66
|
+
path: string;
|
|
67
|
+
label: string;
|
|
68
|
+
icon: ComponentType<{
|
|
69
|
+
className?: string;
|
|
70
|
+
}>;
|
|
71
|
+
};
|
|
72
|
+
type FeeModelerNavGroup = {
|
|
73
|
+
id: string;
|
|
74
|
+
label: string;
|
|
75
|
+
items: FeeModelerNavItem[];
|
|
76
|
+
};
|
|
77
|
+
type FeeModelerSidebarLinkProps = {
|
|
78
|
+
to: string;
|
|
79
|
+
className?: string;
|
|
80
|
+
children?: ReactNode;
|
|
81
|
+
};
|
|
82
|
+
type FeeModelerAppSidebarProps = {
|
|
83
|
+
pathname: string;
|
|
84
|
+
navigate: (to: string) => void;
|
|
85
|
+
Link: ComponentType<FeeModelerSidebarLinkProps>;
|
|
86
|
+
/** Logo row, optional badge, etc. */
|
|
87
|
+
branding: ReactNode;
|
|
88
|
+
home: FeeModelerNavItem;
|
|
89
|
+
settings: FeeModelerNavItem;
|
|
90
|
+
groups: FeeModelerNavGroup[];
|
|
91
|
+
isGroupVisible?: (group: FeeModelerNavGroup) => boolean;
|
|
92
|
+
backLink?: {
|
|
93
|
+
to: string;
|
|
94
|
+
label: string;
|
|
95
|
+
};
|
|
96
|
+
openGroupId: string | null;
|
|
97
|
+
onOpenGroupChange: (id: string | null) => void;
|
|
98
|
+
/** Optional block below the Settings link (e.g. user / org line) */
|
|
99
|
+
belowSettings?: ReactNode;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Fee Modeler application sidebar: accordion sections, primary Home, Settings footer.
|
|
103
|
+
* Routing-agnostic: pass your router `Link` and `navigate`.
|
|
104
|
+
*/
|
|
105
|
+
declare function FeeModelerAppSidebar({ pathname, navigate, Link, branding, home, settings, groups, isGroupVisible, backLink, openGroupId, onOpenGroupChange, belowSettings, }: FeeModelerAppSidebarProps): react_jsx_runtime.JSX.Element;
|
|
106
|
+
|
|
107
|
+
export { AppLayout, type AppLayoutProps, FeeModelerAppSidebar, type FeeModelerAppSidebarProps, type FeeModelerNavGroup, type FeeModelerNavItem, type FeeModelerSidebarLinkProps, audereShell, feeModelerSidebarTokens };
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { clsx } from 'clsx';
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/layout/constants.ts
|
|
6
|
+
var audereShell = {
|
|
7
|
+
/** Sidebar column width (Tailwind `w-64`). */
|
|
8
|
+
sidebarWidthClass: "w-64",
|
|
9
|
+
/** Offset for main column beside fixed sidebar. */
|
|
10
|
+
mainGutterClass: "pl-64",
|
|
11
|
+
/** Max width of primary content well inside the shell. */
|
|
12
|
+
contentMaxWidthClass: "max-w-6xl",
|
|
13
|
+
/** Default padding around the content well. */
|
|
14
|
+
contentPaddingClass: "p-8 lg:p-12",
|
|
15
|
+
/** Full outer shell: page canvas + typography base. */
|
|
16
|
+
pageRootClass: "flex min-h-screen bg-muted/30 font-sans text-foreground antialiased",
|
|
17
|
+
/** Fixed sidebar track (border + background use sidebar tokens). */
|
|
18
|
+
asideTrackClass: "fixed inset-y-0 z-10 flex w-64 flex-shrink-0 flex-col border-r border-sidebar-border bg-sidebar text-sidebar-foreground",
|
|
19
|
+
/** Sticky-style header strip above content. */
|
|
20
|
+
headerStripClass: "border-b border-border bg-card/80 backdrop-blur"
|
|
21
|
+
};
|
|
22
|
+
function cn(...inputs) {
|
|
23
|
+
return twMerge(clsx(inputs));
|
|
24
|
+
}
|
|
25
|
+
function AppLayout({ sidebar, header, children }) {
|
|
26
|
+
return /* @__PURE__ */ jsxs("div", { className: audereShell.pageRootClass, children: [
|
|
27
|
+
/* @__PURE__ */ jsx("aside", { className: audereShell.asideTrackClass, children: sidebar }),
|
|
28
|
+
/* @__PURE__ */ jsxs("main", { className: cn("flex flex-1 flex-col", audereShell.mainGutterClass), children: [
|
|
29
|
+
/* @__PURE__ */ jsx("div", { className: audereShell.headerStripClass, children: header }),
|
|
30
|
+
/* @__PURE__ */ jsx(
|
|
31
|
+
"div",
|
|
32
|
+
{
|
|
33
|
+
className: cn(
|
|
34
|
+
"mx-auto flex flex-1",
|
|
35
|
+
audereShell.contentMaxWidthClass,
|
|
36
|
+
audereShell.contentPaddingClass
|
|
37
|
+
),
|
|
38
|
+
children
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
] })
|
|
42
|
+
] });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/layout/feeModelerSidebarTokens.ts
|
|
46
|
+
var feeModelerSidebarTokens = {
|
|
47
|
+
/** Outer aside: deep navy rail */
|
|
48
|
+
/** z-40: stay above main content (cards, sticky toolbars) so nav clicks always register */
|
|
49
|
+
shell: "fixed inset-y-0 z-40 flex w-64 shrink-0 flex-col bg-slate-800 text-white",
|
|
50
|
+
/** Brand / top block above nav */
|
|
51
|
+
brandRegion: "border-b border-slate-700 p-5",
|
|
52
|
+
/** Scrollable nav region (everything above footer) */
|
|
53
|
+
navScroll: "min-h-0 flex-1 space-y-0.5 overflow-y-auto p-3",
|
|
54
|
+
/** flex column wrapper: scroll + footer */
|
|
55
|
+
navRoot: "flex min-h-0 flex-1 flex-col",
|
|
56
|
+
/** Optional “back” link row */
|
|
57
|
+
backLink: "mb-2 flex items-center gap-2 rounded-md px-3 py-2 text-xs font-medium text-slate-300 hover:bg-slate-700 hover:text-white",
|
|
58
|
+
/** Home (primary rail, same size as settings footer link) */
|
|
59
|
+
primaryRailLink: "flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors",
|
|
60
|
+
primaryRailLinkInactive: "text-slate-300 hover:bg-slate-700 hover:text-white",
|
|
61
|
+
primaryRailLinkActive: "bg-teal-600 text-white",
|
|
62
|
+
/** Collapsible section header button */
|
|
63
|
+
sectionTrigger: "flex w-full items-center justify-between rounded-md px-3 py-2 text-left text-sm font-semibold uppercase tracking-wider text-slate-300 hover:bg-slate-700/60",
|
|
64
|
+
/** Nested item under a section */
|
|
65
|
+
nestedLink: "flex items-center gap-2 rounded-md px-3 py-1.5 text-[14px] font-medium leading-snug transition-colors",
|
|
66
|
+
nestedLinkInactive: "text-slate-400 hover:bg-slate-700 hover:text-white",
|
|
67
|
+
nestedLinkActive: "bg-teal-600 text-white",
|
|
68
|
+
nestedIcon: "h-3.5 w-3.5 shrink-0 opacity-90",
|
|
69
|
+
primaryIcon: "h-4 w-4 shrink-0",
|
|
70
|
+
sectionChevron: "h-3.5 w-3.5 shrink-0 transition-transform",
|
|
71
|
+
/** Settings (and similar) pinned footer */
|
|
72
|
+
footerRegion: "shrink-0 border-t border-slate-700 p-3 pt-2"
|
|
73
|
+
};
|
|
74
|
+
function ChevronRight({ open }) {
|
|
75
|
+
return /* @__PURE__ */ jsx(
|
|
76
|
+
"svg",
|
|
77
|
+
{
|
|
78
|
+
className: cn(feeModelerSidebarTokens.sectionChevron, open && "rotate-90"),
|
|
79
|
+
viewBox: "0 0 24 24",
|
|
80
|
+
fill: "none",
|
|
81
|
+
stroke: "currentColor",
|
|
82
|
+
strokeWidth: "2",
|
|
83
|
+
strokeLinecap: "round",
|
|
84
|
+
strokeLinejoin: "round",
|
|
85
|
+
"aria-hidden": true,
|
|
86
|
+
children: /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" })
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
function FeeModelerAppSidebar({
|
|
91
|
+
pathname,
|
|
92
|
+
navigate,
|
|
93
|
+
Link,
|
|
94
|
+
branding,
|
|
95
|
+
home,
|
|
96
|
+
settings,
|
|
97
|
+
groups,
|
|
98
|
+
isGroupVisible,
|
|
99
|
+
backLink,
|
|
100
|
+
openGroupId,
|
|
101
|
+
onOpenGroupChange,
|
|
102
|
+
belowSettings
|
|
103
|
+
}) {
|
|
104
|
+
const visibleGroups = isGroupVisible ? groups.filter(isGroupVisible) : groups;
|
|
105
|
+
const HomeIcon = home.icon;
|
|
106
|
+
const SettingsIcon = settings.icon;
|
|
107
|
+
return /* @__PURE__ */ jsxs("aside", { className: feeModelerSidebarTokens.shell, children: [
|
|
108
|
+
/* @__PURE__ */ jsx("div", { className: feeModelerSidebarTokens.brandRegion, children: branding }),
|
|
109
|
+
/* @__PURE__ */ jsxs("nav", { className: feeModelerSidebarTokens.navRoot, children: [
|
|
110
|
+
/* @__PURE__ */ jsxs("div", { className: feeModelerSidebarTokens.navScroll, children: [
|
|
111
|
+
backLink ? /* @__PURE__ */ jsx(Link, { to: backLink.to, className: feeModelerSidebarTokens.backLink, children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
|
|
112
|
+
/* @__PURE__ */ jsx(
|
|
113
|
+
"svg",
|
|
114
|
+
{
|
|
115
|
+
className: "h-3 w-3",
|
|
116
|
+
viewBox: "0 0 24 24",
|
|
117
|
+
fill: "none",
|
|
118
|
+
stroke: "currentColor",
|
|
119
|
+
strokeWidth: "2",
|
|
120
|
+
"aria-hidden": true,
|
|
121
|
+
children: /* @__PURE__ */ jsx("path", { d: "m15 18-6-6 6-6" })
|
|
122
|
+
}
|
|
123
|
+
),
|
|
124
|
+
backLink.label
|
|
125
|
+
] }) }) : null,
|
|
126
|
+
/* @__PURE__ */ jsxs(
|
|
127
|
+
Link,
|
|
128
|
+
{
|
|
129
|
+
to: home.path,
|
|
130
|
+
className: cn(
|
|
131
|
+
feeModelerSidebarTokens.primaryRailLink,
|
|
132
|
+
pathname === home.path ? feeModelerSidebarTokens.primaryRailLinkActive : feeModelerSidebarTokens.primaryRailLinkInactive
|
|
133
|
+
),
|
|
134
|
+
children: [
|
|
135
|
+
/* @__PURE__ */ jsx(HomeIcon, { className: feeModelerSidebarTokens.primaryIcon }),
|
|
136
|
+
home.label
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
visibleGroups.map((group) => {
|
|
141
|
+
const isOpen = openGroupId === group.id;
|
|
142
|
+
const only = group.items.length === 1 ? group.items[0] : null;
|
|
143
|
+
if (only) {
|
|
144
|
+
const isActive = pathname === only.path;
|
|
145
|
+
const OnlyIcon = only.icon;
|
|
146
|
+
return /* @__PURE__ */ jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsx(
|
|
147
|
+
Link,
|
|
148
|
+
{
|
|
149
|
+
to: only.path,
|
|
150
|
+
className: cn(
|
|
151
|
+
feeModelerSidebarTokens.sectionTrigger,
|
|
152
|
+
"no-underline",
|
|
153
|
+
isActive ? "bg-teal-600 text-white hover:bg-teal-600" : ""
|
|
154
|
+
),
|
|
155
|
+
children: /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
|
|
156
|
+
/* @__PURE__ */ jsx(OnlyIcon, { className: feeModelerSidebarTokens.nestedIcon }),
|
|
157
|
+
/* @__PURE__ */ jsx("span", { children: group.label })
|
|
158
|
+
] })
|
|
159
|
+
}
|
|
160
|
+
) }, group.id);
|
|
161
|
+
}
|
|
162
|
+
return /* @__PURE__ */ jsxs("div", { className: "mt-1", children: [
|
|
163
|
+
/* @__PURE__ */ jsxs(
|
|
164
|
+
"button",
|
|
165
|
+
{
|
|
166
|
+
type: "button",
|
|
167
|
+
onClick: () => {
|
|
168
|
+
if (isOpen) {
|
|
169
|
+
onOpenGroupChange(null);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const first = group.items[0];
|
|
173
|
+
if (first) {
|
|
174
|
+
if (pathname !== first.path) {
|
|
175
|
+
navigate(first.path);
|
|
176
|
+
}
|
|
177
|
+
onOpenGroupChange(group.id);
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
className: feeModelerSidebarTokens.sectionTrigger,
|
|
181
|
+
children: [
|
|
182
|
+
/* @__PURE__ */ jsx("span", { children: group.label }),
|
|
183
|
+
/* @__PURE__ */ jsx(ChevronRight, { open: isOpen })
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
),
|
|
187
|
+
isOpen && /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: group.items.map((item) => {
|
|
188
|
+
const isActive = pathname === item.path;
|
|
189
|
+
const Icon = item.icon;
|
|
190
|
+
return /* @__PURE__ */ jsxs(
|
|
191
|
+
Link,
|
|
192
|
+
{
|
|
193
|
+
to: item.path,
|
|
194
|
+
className: cn(
|
|
195
|
+
feeModelerSidebarTokens.nestedLink,
|
|
196
|
+
isActive ? feeModelerSidebarTokens.nestedLinkActive : feeModelerSidebarTokens.nestedLinkInactive
|
|
197
|
+
),
|
|
198
|
+
children: [
|
|
199
|
+
/* @__PURE__ */ jsx(Icon, { className: feeModelerSidebarTokens.nestedIcon }),
|
|
200
|
+
item.label
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
item.path
|
|
204
|
+
);
|
|
205
|
+
}) })
|
|
206
|
+
] }, group.id);
|
|
207
|
+
})
|
|
208
|
+
] }),
|
|
209
|
+
/* @__PURE__ */ jsxs("div", { className: feeModelerSidebarTokens.footerRegion, children: [
|
|
210
|
+
/* @__PURE__ */ jsxs(
|
|
211
|
+
Link,
|
|
212
|
+
{
|
|
213
|
+
to: settings.path,
|
|
214
|
+
className: cn(
|
|
215
|
+
feeModelerSidebarTokens.primaryRailLink,
|
|
216
|
+
pathname === settings.path ? feeModelerSidebarTokens.primaryRailLinkActive : feeModelerSidebarTokens.primaryRailLinkInactive
|
|
217
|
+
),
|
|
218
|
+
children: [
|
|
219
|
+
/* @__PURE__ */ jsx(SettingsIcon, { className: feeModelerSidebarTokens.primaryIcon }),
|
|
220
|
+
settings.label
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
),
|
|
224
|
+
belowSettings ?? null
|
|
225
|
+
] })
|
|
226
|
+
] })
|
|
227
|
+
] });
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export { AppLayout, FeeModelerAppSidebar, audereShell, feeModelerSidebarTokens };
|
|
231
|
+
//# sourceMappingURL=index.js.map
|
|
232
|
+
//# sourceMappingURL=index.js.map
|