@arqel-dev/ui 0.11.0 → 0.13.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/SKILL.md +5 -2
- package/dist/AreaChart-NMQ2RQGA.js +33 -0
- package/dist/AreaChart-NMQ2RQGA.js.map +1 -0
- package/dist/ArqelCreatePage-P3G6TKIK.js +8 -0
- package/dist/ArqelCreatePage-P3G6TKIK.js.map +1 -0
- package/dist/ArqelDashboardPage-PX3Y75AA.js +6 -0
- package/dist/ArqelDashboardPage-PX3Y75AA.js.map +1 -0
- package/dist/ArqelEditPage-HKQSE6E5.js +8 -0
- package/dist/ArqelEditPage-HKQSE6E5.js.map +1 -0
- package/dist/ArqelIndexPage-MRH3572Z.js +12 -0
- package/dist/ArqelIndexPage-MRH3572Z.js.map +1 -0
- package/dist/ArqelShowPage-4FS5MTUN.js +6 -0
- package/dist/ArqelShowPage-4FS5MTUN.js.map +1 -0
- package/dist/BarChart-KLHKTLO2.js +19 -0
- package/dist/BarChart-KLHKTLO2.js.map +1 -0
- package/dist/DonutChart-L56R4QF2.js +11 -0
- package/dist/DonutChart-L56R4QF2.js.map +1 -0
- package/dist/LineChart-GHMPHFZZ.js +30 -0
- package/dist/LineChart-GHMPHFZZ.js.map +1 -0
- package/dist/PieChart-T2VQOFPP.js +4 -0
- package/dist/PieChart-T2VQOFPP.js.map +1 -0
- package/dist/RadarChart-CSWR5AO7.js +32 -0
- package/dist/RadarChart-CSWR5AO7.js.map +1 -0
- package/dist/Topbar-DffcNdcJ.d.ts +50 -0
- package/dist/action.d.ts +12 -2
- package/dist/action.js +6 -1090
- package/dist/action.js.map +1 -1
- package/dist/auth.js +1 -10
- package/dist/auth.js.map +1 -1
- package/dist/chunk-2LTZJ4R7.js +110 -0
- package/dist/chunk-2LTZJ4R7.js.map +1 -0
- package/dist/chunk-3JJOHYD7.js +57 -0
- package/dist/chunk-3JJOHYD7.js.map +1 -0
- package/dist/chunk-47HD7ALI.js +370 -0
- package/dist/chunk-47HD7ALI.js.map +1 -0
- package/dist/chunk-6UJQP7KU.js +737 -0
- package/dist/chunk-6UJQP7KU.js.map +1 -0
- package/dist/chunk-7LSZADUC.js +50 -0
- package/dist/chunk-7LSZADUC.js.map +1 -0
- package/dist/chunk-B7ULUJVO.js +11 -0
- package/dist/chunk-B7ULUJVO.js.map +1 -0
- package/dist/chunk-C5H44NSP.js +37 -0
- package/dist/chunk-C5H44NSP.js.map +1 -0
- package/dist/chunk-DSULVRB6.js +101 -0
- package/dist/chunk-DSULVRB6.js.map +1 -0
- package/dist/chunk-ERT7LL6C.js +199 -0
- package/dist/chunk-ERT7LL6C.js.map +1 -0
- package/dist/chunk-EYAUPJ6J.js +64 -0
- package/dist/chunk-EYAUPJ6J.js.map +1 -0
- package/dist/chunk-FHRQ7PWE.js +58 -0
- package/dist/chunk-FHRQ7PWE.js.map +1 -0
- package/dist/chunk-FV7RESKL.js +285 -0
- package/dist/chunk-FV7RESKL.js.map +1 -0
- package/dist/chunk-K7QY56XN.js +610 -0
- package/dist/chunk-K7QY56XN.js.map +1 -0
- package/dist/chunk-L3JBBN4H.js +27 -0
- package/dist/chunk-L3JBBN4H.js.map +1 -0
- package/dist/chunk-MSRTGCTJ.js +597 -0
- package/dist/chunk-MSRTGCTJ.js.map +1 -0
- package/dist/chunk-MTNFFSVA.js +92 -0
- package/dist/chunk-MTNFFSVA.js.map +1 -0
- package/dist/chunk-MTZJDFQ6.js +32 -0
- package/dist/chunk-MTZJDFQ6.js.map +1 -0
- package/dist/chunk-MXUXMHOK.js +16 -0
- package/dist/chunk-MXUXMHOK.js.map +1 -0
- package/dist/chunk-PXON56HL.js +35 -0
- package/dist/chunk-PXON56HL.js.map +1 -0
- package/dist/chunk-PZEVKMZX.js +598 -0
- package/dist/chunk-PZEVKMZX.js.map +1 -0
- package/dist/chunk-R4BOUU6Y.js +55 -0
- package/dist/chunk-R4BOUU6Y.js.map +1 -0
- package/dist/chunk-RMPOR2YZ.js +12 -0
- package/dist/chunk-RMPOR2YZ.js.map +1 -0
- package/dist/chunk-RNAMHQM6.js +12 -0
- package/dist/chunk-RNAMHQM6.js.map +1 -0
- package/dist/chunk-TNJEHYRF.js +387 -0
- package/dist/chunk-TNJEHYRF.js.map +1 -0
- package/dist/chunk-VSTRVXXZ.js +49 -0
- package/dist/chunk-VSTRVXXZ.js.map +1 -0
- package/dist/chunk-WKWV36PG.js +140 -0
- package/dist/chunk-WKWV36PG.js.map +1 -0
- package/dist/cn-By8XWiSA.d.ts +12 -0
- package/dist/flash.js +2 -104
- package/dist/flash.js.map +1 -1
- package/dist/form.js +4 -673
- package/dist/form.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -3706
- package/dist/index.js.map +1 -1
- package/dist/pages.js +23 -3025
- package/dist/pages.js.map +1 -1
- package/dist/palette.js +1 -283
- package/dist/palette.js.map +1 -1
- package/dist/primitives.js +3 -658
- package/dist/primitives.js.map +1 -1
- package/dist/resource.js +5 -720
- package/dist/resource.js.map +1 -1
- package/dist/shell.d.ts +26 -46
- package/dist/shell.js +46 -1039
- package/dist/shell.js.map +1 -1
- package/dist/table.js +4 -618
- package/dist/table.js.map +1 -1
- package/dist/utility.js +3 -104
- package/dist/utility.js.map +1 -1
- package/dist/utils.d.ts +12 -6
- package/dist/utils.js +2 -9
- package/dist/utils.js.map +1 -1
- package/dist/widgets.d.ts +7 -2
- package/dist/widgets.js +3 -675
- package/dist/widgets.js.map +1 -1
- package/package.json +15 -14
package/dist/widgets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/widgets/types.ts","../src/widgets/charts/LineChart.tsx","../src/widgets/charts/BarChart.tsx","../src/widgets/charts/AreaChart.tsx","../src/widgets/charts/PieChart.tsx","../src/widgets/charts/DonutChart.tsx","../src/widgets/charts/RadarChart.tsx","../src/utils/cn.ts","../src/widgets/WidgetWrapper.tsx","../src/widgets/ChartCard.tsx","../src/widgets/DashboardFilters.tsx","../src/widgets/StatCard.tsx","../src/widgets/TableCard.tsx","../src/widgets/WidgetRenderer.tsx","../src/widgets/DashboardGrid.tsx"],"names":["jsx","jsxs","RechartsLineChart","ResponsiveContainer","RechartsBarChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","RechartsAreaChart","RechartsPieChart","RechartsRadarChart","LineChart","BarChart","AreaChart","PieChart","DonutChart","RadarChart","Fragment","useState"],"mappings":"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","file":"widgets.js","sourcesContent":["export type ChartType = 'line' | 'bar' | 'area' | 'pie' | 'donut' | 'radar';\n\nexport interface ChartDataset {\n label: string;\n data: number[];\n color?: string;\n}\n\nexport interface ChartData {\n labels: string[];\n datasets: ChartDataset[];\n}\n\nexport interface ChartWidgetProps {\n widget: {\n name: string;\n type: 'chart';\n heading?: string | undefined;\n description?: string | undefined;\n chartType: ChartType;\n chartData: ChartData;\n chartOptions?: Record<string, unknown> | undefined;\n height: number;\n showLegend: boolean;\n showGrid: boolean;\n };\n}\n\nexport interface ChartSubProps {\n chartData: ChartData;\n chartOptions?: Record<string, unknown> | undefined;\n height: number;\n showLegend: boolean;\n showGrid: boolean;\n}\n\n/**\n * Translates the PHP-side `{labels, datasets}` shape into Recharts' expected\n * row shape: `[{ name: label, dataset1: value, dataset2: value, ... }]`.\n *\n * Dataset keys are stable indices (`dataset0`, `dataset1`, ...) so chart\n * components can pair them with their human label/color via the datasets\n * array passed to `<Line dataKey=\"dataset0\" name={datasets[0].label} />`.\n */\nexport function toRowShape(data: ChartData): Array<Record<string, number | string>> {\n return data.labels.map((label, i) => {\n const row: Record<string, number | string> = { name: label };\n data.datasets.forEach((ds, j) => {\n row[`dataset${j}`] = ds.data[i] ?? 0;\n });\n return row;\n });\n}\n\nconst PALETTE = [\n '#2563eb',\n '#10b981',\n '#f59e0b',\n '#ef4444',\n '#8b5cf6',\n '#ec4899',\n '#14b8a6',\n '#f97316',\n];\n\nexport function colorFor(dataset: ChartDataset, index: number): string {\n return dataset.color ?? PALETTE[index % PALETTE.length] ?? '#2563eb';\n}\n","import {\n CartesianGrid,\n Legend,\n Line,\n LineChart as RechartsLineChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { type ChartSubProps, colorFor, toRowShape } from '../types';\n\nexport function LineChart({ chartData, height, showLegend, showGrid }: ChartSubProps) {\n const rows = toRowShape(chartData);\n return (\n <div data-testid=\"chart-line\" style={{ width: '100%', height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsLineChart data={rows}>\n {showGrid ? <CartesianGrid strokeDasharray=\"3 3\" /> : null}\n <XAxis dataKey=\"name\" />\n <YAxis />\n <Tooltip />\n {showLegend ? <Legend /> : null}\n {chartData.datasets.map((ds, i) => (\n <Line\n key={ds.label}\n type=\"monotone\"\n dataKey={`dataset${i}`}\n name={ds.label}\n stroke={colorFor(ds, i)}\n strokeWidth={2}\n dot={false}\n />\n ))}\n </RechartsLineChart>\n </ResponsiveContainer>\n </div>\n );\n}\n","import {\n Bar,\n CartesianGrid,\n Legend,\n BarChart as RechartsBarChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { type ChartSubProps, colorFor, toRowShape } from '../types';\n\nexport function BarChart({ chartData, height, showLegend, showGrid }: ChartSubProps) {\n const rows = toRowShape(chartData);\n return (\n <div data-testid=\"chart-bar\" style={{ width: '100%', height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart data={rows}>\n {showGrid ? <CartesianGrid strokeDasharray=\"3 3\" /> : null}\n <XAxis dataKey=\"name\" />\n <YAxis />\n <Tooltip />\n {showLegend ? <Legend /> : null}\n {chartData.datasets.map((ds, i) => (\n <Bar key={ds.label} dataKey={`dataset${i}`} name={ds.label} fill={colorFor(ds, i)} />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n}\n","import {\n Area,\n CartesianGrid,\n Legend,\n AreaChart as RechartsAreaChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { type ChartSubProps, colorFor, toRowShape } from '../types';\n\nexport function AreaChart({ chartData, height, showLegend, showGrid }: ChartSubProps) {\n const rows = toRowShape(chartData);\n return (\n <div data-testid=\"chart-area\" style={{ width: '100%', height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsAreaChart data={rows}>\n {showGrid ? <CartesianGrid strokeDasharray=\"3 3\" /> : null}\n <XAxis dataKey=\"name\" />\n <YAxis />\n <Tooltip />\n {showLegend ? <Legend /> : null}\n {chartData.datasets.map((ds, i) => {\n const color = colorFor(ds, i);\n return (\n <Area\n key={ds.label}\n type=\"monotone\"\n dataKey={`dataset${i}`}\n name={ds.label}\n stroke={color}\n fill={color}\n fillOpacity={0.3}\n />\n );\n })}\n </RechartsAreaChart>\n </ResponsiveContainer>\n </div>\n );\n}\n","import {\n Cell,\n Legend,\n Pie,\n PieChart as RechartsPieChart,\n ResponsiveContainer,\n Tooltip,\n} from 'recharts';\nimport { type ChartSubProps, colorFor } from '../types';\n\nexport interface PieChartProps extends ChartSubProps {\n innerRadius?: number | undefined;\n testId?: string | undefined;\n}\n\nexport function PieChart({\n chartData,\n height,\n showLegend,\n innerRadius = 0,\n testId = 'chart-pie',\n}: PieChartProps) {\n const first = chartData.datasets[0];\n const slices = (first?.data ?? []).map((value, i) => ({\n name: chartData.labels[i] ?? `Slice ${i + 1}`,\n value,\n }));\n\n return (\n <div data-testid={testId} style={{ width: '100%', height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsPieChart>\n <Pie\n data={slices}\n dataKey=\"value\"\n nameKey=\"name\"\n innerRadius={innerRadius}\n outerRadius=\"80%\"\n label\n >\n {slices.map((slice, i) => (\n <Cell key={slice.name} fill={colorFor(first ?? { label: '', data: [] }, i)} />\n ))}\n </Pie>\n <Tooltip />\n {showLegend ? <Legend /> : null}\n </RechartsPieChart>\n </ResponsiveContainer>\n </div>\n );\n}\n","import type { ChartSubProps } from '../types';\nimport { PieChart } from './PieChart';\n\n/**\n * DonutChart is a PieChart with a non-zero innerRadius. We delegate so the\n * Recharts primitives stay in one chunk per shape (pie ≡ donut visually).\n */\nexport function DonutChart(props: ChartSubProps) {\n return <PieChart {...props} innerRadius={60} testId=\"chart-donut\" />;\n}\n","import {\n Legend,\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart as RechartsRadarChart,\n ResponsiveContainer,\n Tooltip,\n} from 'recharts';\nimport { type ChartSubProps, colorFor, toRowShape } from '../types';\n\nexport function RadarChart({ chartData, height, showLegend, showGrid }: ChartSubProps) {\n const rows = toRowShape(chartData);\n\n return (\n <div data-testid=\"chart-radar\" style={{ width: '100%', height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsRadarChart data={rows}>\n {showGrid ? <PolarGrid /> : null}\n <PolarAngleAxis dataKey=\"name\" />\n <PolarRadiusAxis />\n {chartData.datasets.map((ds, i) => {\n const color = colorFor(ds, i);\n return (\n <Radar\n key={ds.label}\n dataKey={`dataset${i}`}\n name={ds.label}\n stroke={color}\n fill={color}\n fillOpacity={0.3}\n />\n );\n })}\n <Tooltip />\n {showLegend ? <Legend /> : null}\n </RechartsRadarChart>\n </ResponsiveContainer>\n </div>\n );\n}\n","/**\n * `cn` — clsx + tailwind-merge.\n *\n * Joins class names and de-duplicates conflicting Tailwind utilities so\n * later values override earlier ones (e.g. `cn('p-2', 'p-4')` → `'p-4'`).\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * `<WidgetWrapper>` — common chrome for dashboard widgets.\n *\n * Provides:\n * - Heading / description header.\n * - Loading skeleton (CLS-safe placeholder while deferred widgets fetch).\n * - Error state (`role=\"alert\"`) with optional retry action.\n * - `aria-label`-ed `<section>` so widgets are individually navigable.\n *\n * Used by `<StatCard>` (and shortly `<ChartCard>` / `<TableCard>`) so the\n * outer card chrome is consistent across widget types.\n */\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\n\nexport interface WidgetWrapperProps {\n heading?: string | undefined;\n description?: string | undefined;\n loading?: boolean | undefined;\n error?: Error | null | undefined;\n onRetry?: (() => void) | undefined;\n /** Tailwind grid column span (number → `col-span-{n}`, or raw class). */\n columnSpan?: number | string | undefined;\n className?: string | undefined;\n children: ReactNode;\n}\n\nfunction resolveColumnSpan(columnSpan?: number | string): string | undefined {\n if (columnSpan === undefined) return undefined;\n if (typeof columnSpan === 'number') return `col-span-${columnSpan}`;\n return columnSpan;\n}\n\nexport function WidgetWrapper({\n heading,\n description,\n loading = false,\n error = null,\n onRetry,\n columnSpan,\n className,\n children,\n}: WidgetWrapperProps) {\n const baseClass = cn(\n 'rounded border bg-background p-4',\n resolveColumnSpan(columnSpan),\n className,\n );\n\n if (loading) {\n return (\n <section\n aria-label={heading}\n aria-busy=\"true\"\n className={baseClass}\n data-widget-state=\"loading\"\n >\n <div className=\"animate-pulse h-32 bg-muted rounded\" />\n </section>\n );\n }\n\n if (error) {\n return (\n <section aria-label={heading} className={baseClass} data-widget-state=\"error\">\n <div role=\"alert\" className=\"flex flex-col gap-2 text-sm text-destructive\">\n <p>{error.message}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"self-start rounded border px-2 py-1 text-xs text-foreground hover:bg-muted\"\n >\n Retry\n </button>\n )}\n </div>\n </section>\n );\n }\n\n return (\n <section aria-label={heading} className={baseClass} data-widget-state=\"ready\">\n {heading && <h2 className=\"text-sm font-medium text-muted-foreground\">{heading}</h2>}\n {description && <p className=\"mt-1 text-xs text-muted-foreground\">{description}</p>}\n <div className={cn(heading || description ? 'mt-3' : undefined)}>{children}</div>\n </section>\n );\n}\n","import { type ComponentType, lazy, Suspense } from 'react';\nimport type { ChartSubProps, ChartType, ChartWidgetProps } from './types';\nimport { WidgetWrapper } from './WidgetWrapper';\n\n/**\n * Lazy-loaded chart sub-components. Each `import()` becomes a separate chunk\n * in the build output so the ~60KB Recharts payload (and its sibling chart\n * primitives) stay out of the main `@arqel-dev/ui` bundle. Dashboards that only\n * use StatCard never pay for Recharts.\n */\nconst LineChart = lazy(() => import('./charts/LineChart').then((m) => ({ default: m.LineChart })));\nconst BarChart = lazy(() => import('./charts/BarChart').then((m) => ({ default: m.BarChart })));\nconst AreaChart = lazy(() => import('./charts/AreaChart').then((m) => ({ default: m.AreaChart })));\nconst PieChart = lazy(() => import('./charts/PieChart').then((m) => ({ default: m.PieChart })));\nconst DonutChart = lazy(() =>\n import('./charts/DonutChart').then((m) => ({ default: m.DonutChart })),\n);\nconst RadarChart = lazy(() =>\n import('./charts/RadarChart').then((m) => ({ default: m.RadarChart })),\n);\n\nconst REGISTRY: Record<ChartType, ComponentType<ChartSubProps>> = {\n line: LineChart,\n bar: BarChart,\n area: AreaChart,\n pie: PieChart,\n donut: DonutChart,\n radar: RadarChart,\n};\n\nexport function ChartCard({ widget }: ChartWidgetProps) {\n const Chart = REGISTRY[widget.chartType] ?? LineChart;\n\n return (\n <WidgetWrapper heading={widget.heading} description={widget.description}>\n <Suspense\n fallback={\n <div\n role=\"status\"\n aria-label=\"Loading chart\"\n data-testid=\"chart-fallback\"\n className=\"animate-pulse rounded bg-muted\"\n style={{ height: widget.height }}\n />\n }\n >\n <Chart\n chartData={widget.chartData}\n chartOptions={widget.chartOptions}\n height={widget.height}\n showLegend={widget.showLegend}\n showGrid={widget.showGrid}\n />\n </Suspense>\n </WidgetWrapper>\n );\n}\n","/**\n * `<DashboardFilters>` — renders one control per dashboard `Filter`\n * payload (`Arqel\\Widgets\\Filters\\*`). Two filter types are wired in\n * Phase 2 part-3: `select` (single dropdown) and `date_range` (from/to\n * date inputs). Unknown types are dropped silently — extension points\n * land in later slices.\n *\n * Controlled component: callers own `values` and react to `onChange`.\n */\n\nimport { cn } from '../utils/cn.js';\n\nexport interface SelectFilterPayload {\n name: string;\n type: 'select';\n label?: string | null;\n options?: Record<string, string> | Array<{ value: string; label: string }>;\n multiple?: boolean;\n}\n\nexport interface DateRangeFilterPayload {\n name: string;\n type: 'date_range';\n label?: string | null;\n}\n\nexport type DashboardFilterPayload =\n | SelectFilterPayload\n | DateRangeFilterPayload\n | { name: string; type: string; label?: string | null; [key: string]: unknown };\n\nexport interface DashboardFiltersProps {\n filters: DashboardFilterPayload[];\n values: Record<string, unknown>;\n onChange: (name: string, value: unknown) => void;\n className?: string | undefined;\n}\n\nexport function DashboardFilters({ filters, values, onChange, className }: DashboardFiltersProps) {\n if (!filters || filters.length === 0) return null;\n\n return (\n <div className={cn('flex flex-wrap gap-2', className)} data-testid=\"dashboard-filters\">\n {filters.map((filter) => (\n <FilterControl\n key={filter.name}\n filter={filter}\n value={values[filter.name]}\n onChange={(v) => onChange(filter.name, v)}\n />\n ))}\n </div>\n );\n}\n\nfunction FilterControl({\n filter,\n value,\n onChange,\n}: {\n filter: DashboardFilterPayload;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n if (filter.type === 'select') {\n return (\n <SelectControl filter={filter as SelectFilterPayload} value={value} onChange={onChange} />\n );\n }\n if (filter.type === 'date_range') {\n return (\n <DateRangeControl\n filter={filter as DateRangeFilterPayload}\n value={value}\n onChange={onChange}\n />\n );\n }\n return null;\n}\n\nfunction controlClasses() {\n return cn(\n 'h-9 rounded-sm border border-[var(--input)]',\n 'bg-background px-2 text-sm',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n );\n}\n\nfunction normaliseOptions(\n raw: SelectFilterPayload['options'],\n): Array<{ value: string; label: string }> {\n if (!raw) return [];\n if (Array.isArray(raw)) {\n return raw.map((o) => ({ value: String(o.value), label: String(o.label ?? o.value) }));\n }\n return Object.entries(raw).map(([k, v]) => ({ value: String(k), label: String(v) }));\n}\n\nfunction SelectControl({\n filter,\n value,\n onChange,\n}: {\n filter: SelectFilterPayload;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const options = normaliseOptions(filter.options);\n return (\n <label className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n {filter.label ?? filter.name}\n <select\n aria-label={filter.label ?? filter.name}\n className={controlClasses()}\n value={value === undefined || value === null ? '' : String(value)}\n onChange={(e) => onChange(e.target.value === '' ? null : e.target.value)}\n >\n <option value=\"\">All</option>\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </label>\n );\n}\n\nfunction DateRangeControl({\n filter,\n value,\n onChange,\n}: {\n filter: DateRangeFilterPayload;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const range = (value && typeof value === 'object' ? (value as Record<string, unknown>) : {}) as {\n from?: unknown;\n to?: unknown;\n };\n const fromValue = typeof range.from === 'string' ? range.from : '';\n const toValue = typeof range.to === 'string' ? range.to : '';\n\n return (\n <fieldset className=\"flex flex-col gap-1 text-xs text-muted-foreground\">\n <legend>{filter.label ?? filter.name}</legend>\n <div className=\"flex items-center gap-1\">\n <input\n type=\"date\"\n aria-label={`${filter.label ?? filter.name} from`}\n className={controlClasses()}\n value={fromValue}\n onChange={(e) => onChange({ from: e.target.value || null, to: range.to ?? null })}\n />\n <span aria-hidden=\"true\">–</span>\n <input\n type=\"date\"\n aria-label={`${filter.label ?? filter.name} to`}\n className={controlClasses()}\n value={toValue}\n onChange={(e) => onChange({ from: range.from ?? null, to: e.target.value || null })}\n />\n </div>\n </fieldset>\n );\n}\n","/**\n * `<StatCard>` — KPI / \"big number\" widget.\n *\n * Renders the payload produced by `Arqel\\Widgets\\StatWidget::data()`:\n *\n * {\n * name, type: 'stat', heading?, description?,\n * value, statDescription?, descriptionIcon?,\n * color, icon?, chart?: number[], url?\n * }\n *\n * Includes a tiny inline-SVG sparkline (no Recharts dep) when `chart`\n * is set. ChartCard / TableCard (Recharts-based) ship in a separate\n * cluster; this component is intentionally Recharts-free so the\n * common \"big number\" case stays bundle-cheap.\n */\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn.js';\nimport { WidgetWrapper } from './WidgetWrapper.js';\n\nexport type StatCardColor = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface StatCardWidget {\n name: string;\n type: 'stat';\n heading?: string;\n description?: string;\n value: string | number | null;\n statDescription?: string | null;\n descriptionIcon?: string | null;\n color: StatCardColor;\n icon?: string | null;\n chart?: number[] | null;\n url?: string | null;\n}\n\nexport interface StatCardProps {\n widget: StatCardWidget;\n className?: string | undefined;\n columnSpan?: number | string | undefined;\n}\n\nconst COLOR_TEXT: Record<StatCardColor, string> = {\n primary: 'text-primary',\n secondary: 'text-secondary-foreground',\n success: 'text-green-600',\n warning: 'text-amber-600',\n danger: 'text-red-600',\n info: 'text-sky-600',\n};\n\nconst COLOR_STROKE: Record<StatCardColor, string> = {\n primary: 'stroke-primary',\n secondary: 'stroke-secondary-foreground',\n success: 'stroke-green-500',\n warning: 'stroke-amber-500',\n danger: 'stroke-red-500',\n info: 'stroke-sky-500',\n};\n\ninterface SparklineProps {\n points: number[];\n color: StatCardColor;\n}\n\nfunction Sparkline({ points, color }: SparklineProps) {\n if (points.length < 2) return null;\n\n const min = Math.min(...points);\n const max = Math.max(...points);\n const range = max - min || 1;\n const stepX = 100 / (points.length - 1);\n\n const coords = points\n .map((value, index) => {\n const x = index * stepX;\n // Invert Y so larger values render higher in the viewBox.\n const y = 30 - ((value - min) / range) * 30;\n return `${x.toFixed(2)},${y.toFixed(2)}`;\n })\n .join(' ');\n\n return (\n <svg\n viewBox=\"0 0 100 30\"\n preserveAspectRatio=\"none\"\n className={cn('mt-3 h-8 w-full', COLOR_STROKE[color])}\n role=\"img\"\n aria-label=\"Trend sparkline\"\n data-testid=\"stat-card-sparkline\"\n >\n <polyline\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n points={coords}\n />\n </svg>\n );\n}\n\nexport function StatCard({ widget, className, columnSpan }: StatCardProps) {\n const { heading, description, value, statDescription, descriptionIcon, color, chart, url } =\n widget;\n\n const hasChart = Array.isArray(chart) && chart.length >= 2;\n\n const body: ReactNode = (\n <>\n <div className={cn('text-4xl font-bold tabular-nums', COLOR_TEXT[color])}>{value ?? '—'}</div>\n {statDescription && (\n <div className=\"mt-2 flex items-center gap-1 text-xs text-muted-foreground\">\n {descriptionIcon && (\n <span aria-hidden=\"true\" data-testid=\"stat-card-icon\">\n {/* Icon name passed through; an icon registry resolves it app-side. */}\n {descriptionIcon}\n </span>\n )}\n <span>{statDescription}</span>\n </div>\n )}\n {hasChart && <Sparkline points={chart as number[]} color={color} />}\n </>\n );\n\n const inner = url ? (\n <a\n href={url}\n className=\"block rounded outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n data-testid=\"stat-card-link\"\n >\n {body}\n </a>\n ) : (\n body\n );\n\n return (\n <WidgetWrapper\n heading={heading}\n description={description}\n columnSpan={columnSpan}\n className={className}\n >\n {inner}\n </WidgetWrapper>\n );\n}\n","/**\n * `<TableCard>` — minimal mini-table widget rendered inside a dashboard.\n *\n * Mirrors the payload produced by `Arqel\\Widgets\\TableWidget::data()`:\n * `{ columns, records, limit, seeAllUrl, loadError? }`. The component is\n * intentionally schema-light — each column carries `name` + `label` and\n * cells extract `record[column.name]` verbatim. Renders a `role=\"alert\"`\n * panel when the PHP side surfaced a `loadError` instead of trying to\n * draw an empty table.\n */\n\nimport { cn } from '../utils/cn.js';\nimport { WidgetWrapper } from './WidgetWrapper.js';\n\nexport interface TableCardColumn {\n name: string;\n label?: string | null;\n}\n\nexport interface TableCardRecord {\n [key: string]: unknown;\n}\n\nexport interface TableCardWidget {\n name: string;\n type: 'table';\n heading?: string | null;\n description?: string | null;\n columns: TableCardColumn[];\n records: TableCardRecord[];\n limit: number;\n seeAllUrl?: string | null;\n loadError?: string | null;\n}\n\nexport interface TableCardProps {\n widget: TableCardWidget;\n className?: string | undefined;\n}\n\nexport function TableCard({ widget, className }: TableCardProps) {\n return (\n <WidgetWrapper\n heading={widget.heading ?? undefined}\n description={widget.description ?? undefined}\n className={className}\n >\n {widget.loadError ? (\n <div role=\"alert\" className=\"text-sm text-red-600\">\n {widget.loadError}\n </div>\n ) : (\n <>\n <div className=\"overflow-x-auto\">\n <table className={cn('w-full border-collapse text-sm', 'text-foreground')}>\n <thead>\n <tr className=\"border-b border-border text-left\">\n {widget.columns.map((column) => (\n <th\n key={column.name}\n scope=\"col\"\n className=\"px-2 py-1.5 font-medium text-muted-foreground\"\n >\n {column.label ?? column.name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {widget.records.map((record, rowIndex) => (\n <tr\n // biome-ignore lint/suspicious/noArrayIndexKey: records may lack a stable id\n key={rowIndex}\n className=\"border-b border-border last:border-0\"\n >\n {widget.columns.map((column) => (\n <td key={column.name} className=\"px-2 py-1.5\">\n {formatCell(record[column.name])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {widget.seeAllUrl && (\n <div className=\"mt-3 text-right\">\n <a href={widget.seeAllUrl} className=\"text-sm text-primary\">\n See all →\n </a>\n </div>\n )}\n </>\n )}\n </WidgetWrapper>\n );\n}\n\nfunction formatCell(value: unknown): string {\n if (value === null || value === undefined) return '';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return '';\n }\n}\n","/**\n * `<WidgetRenderer>` — dispatches widget payloads to the right card\n * by `widget.type` (`stat`, `chart`, `table`). Unknown / `custom` types\n * surface a `role=\"alert\"` so a misconfigured registry never silently\n * blanks the dashboard.\n *\n * Two server interactions live here:\n * 1. **Polling** — when `widget.poll > 0`, re-fetch the widget data\n * endpoint every N seconds and replace the inline payload.\n * 2. **Deferred** — when `widget.deferred === true` and `data` is\n * `null`, fetch once on mount.\n *\n * Both call the canonical endpoint\n * `/admin/dashboards/{dashboardId}/widgets/{widgetId}/data` so the\n * payload shape stays identical to the SSR / Inertia path.\n */\n\nimport { useEffect, useRef, useState } from 'react';\nimport { ChartCard } from './ChartCard.js';\nimport { StatCard } from './StatCard.js';\nimport { TableCard } from './TableCard.js';\n\nexport interface WidgetPayload {\n name: string;\n type: string;\n component?: string;\n data?: unknown;\n poll?: number | null;\n deferred?: boolean;\n dashboardId?: string;\n widgetId?: string;\n [key: string]: unknown;\n}\n\nexport interface WidgetRendererProps {\n widget: WidgetPayload;\n filterValues?: Record<string, unknown>;\n fetcher?: ((url: string) => Promise<unknown>) | undefined;\n}\n\nexport function WidgetRenderer({ widget, filterValues, fetcher }: WidgetRendererProps) {\n const [data, setData] = useState<unknown>(widget.data ?? null);\n const filterRef = useRef(filterValues);\n filterRef.current = filterValues;\n\n const dashboardId = widget.dashboardId;\n const widgetId = widget.widgetId ?? widget.name;\n const poll = typeof widget.poll === 'number' ? widget.poll : 0;\n const deferred = widget.deferred === true;\n // Capture the initial-payload presence in a ref so the effect doesn't\n // need to take `widget.data` as a dep (we only consult it once on mount).\n const hasInlineDataRef = useRef(widget.data !== null && widget.data !== undefined);\n\n useEffect(() => {\n if (!dashboardId || !widgetId) return undefined;\n\n const url = `/admin/dashboards/${dashboardId}/widgets/${widgetId}/data`;\n const doFetch = async () => {\n try {\n const result = fetcher\n ? await fetcher(url)\n : await fetch(url, { headers: { Accept: 'application/json' } }).then((r) => r.json());\n setData(result);\n } catch {\n // Swallow — the inline payload (or the previous successful poll) stays.\n }\n };\n\n let interval: ReturnType<typeof setInterval> | undefined;\n\n if (deferred && !hasInlineDataRef.current) {\n void doFetch();\n }\n\n if (poll > 0) {\n interval = setInterval(() => {\n void doFetch();\n }, poll * 1000);\n }\n\n return () => {\n if (interval) clearInterval(interval);\n };\n }, [dashboardId, widgetId, poll, deferred, fetcher]);\n\n const merged = mergeData(widget, data);\n\n switch (widget.type) {\n case 'stat':\n return <StatCard widget={merged as never} />;\n case 'chart':\n return <ChartCard widget={merged as never} />;\n case 'table':\n return <TableCard widget={merged as never} />;\n default:\n return (\n <div role=\"alert\" className=\"text-sm text-red-600\">\n Widget type {widget.type} not registered\n </div>\n );\n }\n}\n\nfunction mergeData(widget: WidgetPayload, data: unknown): Record<string, unknown> {\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n return { ...widget, ...(data as Record<string, unknown>) };\n }\n return { ...widget, data };\n}\n","/**\n * `<DashboardGrid>` — top-level layout for an Arqel dashboard.\n *\n * Renders the dashboard heading + description, the filter bar (when the\n * dashboard declares filters), and a CSS Grid of widgets. Column count\n * accepts either a flat int or a responsive map (`{sm,md,lg,xl,2xl}`)\n * matching `Arqel\\Widgets\\Dashboard::columns()`. Each widget honours\n * `columnSpan` (defaults to 1) via `gridColumn: span N`.\n *\n * Filter values are controlled internally when `onFilterChange` is not\n * provided; supply that prop (and `filterValues`) to lift state out\n * (e.g., to push it to the URL through Inertia).\n */\n\nimport { type CSSProperties, useState } from 'react';\nimport { cn } from '../utils/cn.js';\nimport { type DashboardFilterPayload, DashboardFilters } from './DashboardFilters.js';\nimport { type WidgetPayload, WidgetRenderer } from './WidgetRenderer.js';\n\nexport interface DashboardPayload {\n id: string;\n label: string;\n path?: string | null;\n heading?: string | null;\n description?: string | null;\n widgets: WidgetPayload[];\n filters?: DashboardFilterPayload[] | Record<string, unknown> | null;\n columns: number | Partial<Record<'sm' | 'md' | 'lg' | 'xl' | '2xl', number>>;\n}\n\nexport interface DashboardGridProps {\n dashboard: DashboardPayload;\n filterValues?: Record<string, unknown>;\n onFilterChange?: ((name: string, value: unknown) => void) | undefined;\n className?: string | undefined;\n}\n\nconst BREAKPOINT_PREFIX: Record<string, string> = {\n sm: 'sm:',\n md: 'md:',\n lg: 'lg:',\n xl: 'xl:',\n '2xl': '2xl:',\n};\n\nexport function DashboardGrid({\n dashboard,\n filterValues,\n onFilterChange,\n className,\n}: DashboardGridProps) {\n const [internalValues, setInternalValues] = useState<Record<string, unknown>>(filterValues ?? {});\n const values = filterValues ?? internalValues;\n\n const handleChange = (name: string, value: unknown) => {\n if (onFilterChange) {\n onFilterChange(name, value);\n } else {\n setInternalValues((prev) => ({ ...prev, [name]: value }));\n }\n };\n\n const filterPayload = normaliseFilters(dashboard.filters);\n const heading = dashboard.heading ?? dashboard.label;\n\n return (\n <div className={cn('space-y-4', className)}>\n <header className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"space-y-1\">\n {heading && <h1 className=\"text-xl font-semibold\">{heading}</h1>}\n {dashboard.description && (\n <p className=\"text-sm text-muted-foreground\">{dashboard.description}</p>\n )}\n </div>\n {filterPayload.length > 0 && (\n <DashboardFilters filters={filterPayload} values={values} onChange={handleChange} />\n )}\n </header>\n\n <div\n className={cn('grid gap-4', gridColsClass(dashboard.columns))}\n data-testid=\"dashboard-grid\"\n >\n {dashboard.widgets.map((widget) => {\n const rawSpan = (widget as { columnSpan?: unknown }).columnSpan;\n const span = typeof rawSpan === 'number' ? rawSpan : 1;\n const style: CSSProperties = { gridColumn: `span ${span}` };\n return (\n <div key={widget.name} style={style} data-widget-slot={widget.name}>\n <WidgetRenderer widget={widget} filterValues={values} />\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction gridColsClass(columns: DashboardPayload['columns']): string {\n if (typeof columns === 'number') {\n return `grid-cols-${Math.max(1, Math.min(12, columns))}`;\n }\n const parts: string[] = [];\n // Base fallback when no `sm` provided.\n parts.push('grid-cols-1');\n for (const bp of ['sm', 'md', 'lg', 'xl', '2xl'] as const) {\n const value = columns[bp];\n if (typeof value === 'number') {\n parts.push(`${BREAKPOINT_PREFIX[bp]}grid-cols-${Math.max(1, Math.min(12, value))}`);\n }\n }\n return parts.join(' ');\n}\n\nfunction normaliseFilters(raw: DashboardPayload['filters']): DashboardFilterPayload[] {\n if (!raw) return [];\n if (Array.isArray(raw)) return raw;\n // Legacy `Record<string, mixed>` passthrough — render as a select-less\n // empty list so we don't crash. The declarative path is preferred.\n return [];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"widgets.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arqel-dev/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "Structural React components (AppShell, DataTable, FormRenderer, etc.) for Arqel admin panels.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://arqel.dev",
|
|
@@ -92,40 +92,41 @@
|
|
|
92
92
|
"clsx": "^2.1.1",
|
|
93
93
|
"radix-ui": "^1.4.3",
|
|
94
94
|
"tailwind-merge": "^2.5.5",
|
|
95
|
-
"@arqel-dev/types": "0.
|
|
95
|
+
"@arqel-dev/types": "0.13.0"
|
|
96
96
|
},
|
|
97
97
|
"peerDependencies": {
|
|
98
|
-
"@inertiajs/react": "^
|
|
98
|
+
"@inertiajs/react": "^3.0.0",
|
|
99
99
|
"@tanstack/react-table": "^8.20.0",
|
|
100
100
|
"lucide-react": "^0.468.0",
|
|
101
|
-
"react": "^19.
|
|
102
|
-
"react-dom": "^19.
|
|
101
|
+
"react": "^19.2.0",
|
|
102
|
+
"react-dom": "^19.2.0",
|
|
103
103
|
"recharts": "^2.15.0",
|
|
104
104
|
"tailwindcss": "^4.0.0",
|
|
105
|
-
"@arqel-dev/hooks": "0.
|
|
106
|
-
"@arqel-dev/react": "0.
|
|
105
|
+
"@arqel-dev/hooks": "0.13.0",
|
|
106
|
+
"@arqel-dev/react": "0.13.0"
|
|
107
107
|
},
|
|
108
108
|
"devDependencies": {
|
|
109
109
|
"@base-ui-components/react": "^1.0.0-alpha.0",
|
|
110
|
-
"@inertiajs/react": "^
|
|
110
|
+
"@inertiajs/react": "^3.0.0",
|
|
111
111
|
"@tanstack/react-table": "^8.20.0",
|
|
112
112
|
"@testing-library/jest-dom": "^6.6.3",
|
|
113
113
|
"@testing-library/react": "^16.1.0",
|
|
114
114
|
"@testing-library/user-event": "^14.5.2",
|
|
115
|
+
"@types/node": "^22.0.0",
|
|
115
116
|
"@types/react": "^19.0.0",
|
|
116
117
|
"@types/react-dom": "^19.0.0",
|
|
117
|
-
"@vitest/coverage-v8": "^
|
|
118
|
+
"@vitest/coverage-v8": "^4.1.0",
|
|
118
119
|
"jsdom": "^25.0.1",
|
|
119
120
|
"lucide-react": "^0.468.0",
|
|
120
|
-
"react": "^19.
|
|
121
|
-
"react-dom": "^19.
|
|
121
|
+
"react": "^19.2.0",
|
|
122
|
+
"react-dom": "^19.2.0",
|
|
122
123
|
"recharts": "^2.15.0",
|
|
123
124
|
"tailwindcss": "^4.0.0",
|
|
124
125
|
"tsup": "^8.5.0",
|
|
125
126
|
"typescript": "^5.6.3",
|
|
126
|
-
"vitest": "^
|
|
127
|
-
"@arqel-dev/hooks": "0.
|
|
128
|
-
"@arqel-dev/react": "0.
|
|
127
|
+
"vitest": "^4.1.0",
|
|
128
|
+
"@arqel-dev/hooks": "0.13.0",
|
|
129
|
+
"@arqel-dev/react": "0.13.0"
|
|
129
130
|
},
|
|
130
131
|
"publishConfig": {
|
|
131
132
|
"access": "public"
|