@camunda/design-system 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/carbon-compat/radio-button.d.ts.map +1 -1
  2. package/dist/carbon-compat/radio-button.js +2 -2
  3. package/dist/carbon-compat/radio-button.js.map +1 -1
  4. package/dist/src/components/ui/bar-chart.d.ts +26 -0
  5. package/dist/src/components/ui/bar-chart.d.ts.map +1 -0
  6. package/dist/src/components/ui/bar-chart.js +76 -0
  7. package/dist/src/components/ui/bar-chart.js.map +1 -0
  8. package/dist/src/components/ui/chart.d.ts +34 -0
  9. package/dist/src/components/ui/chart.d.ts.map +1 -0
  10. package/dist/src/components/ui/chart.js +90 -0
  11. package/dist/src/components/ui/chart.js.map +1 -0
  12. package/dist/src/components/ui/line-chart.d.ts +25 -0
  13. package/dist/src/components/ui/line-chart.d.ts.map +1 -0
  14. package/dist/src/components/ui/line-chart.js +37 -0
  15. package/dist/src/components/ui/line-chart.js.map +1 -0
  16. package/dist/src/components/ui/meter.d.ts +24 -0
  17. package/dist/src/components/ui/meter.d.ts.map +1 -0
  18. package/dist/src/components/ui/meter.js +50 -0
  19. package/dist/src/components/ui/meter.js.map +1 -0
  20. package/dist/src/components/ui/page-layout.d.ts +4 -1
  21. package/dist/src/components/ui/page-layout.d.ts.map +1 -1
  22. package/dist/src/components/ui/page-layout.js +22 -8
  23. package/dist/src/components/ui/page-layout.js.map +1 -1
  24. package/dist/src/components/ui/time-range-selector.d.ts +19 -0
  25. package/dist/src/components/ui/time-range-selector.d.ts.map +1 -0
  26. package/dist/src/components/ui/time-range-selector.js +54 -0
  27. package/dist/src/components/ui/time-range-selector.js.map +1 -0
  28. package/dist/src/examples/cost-dashboard/CostBreakdownChart.d.ts.map +1 -1
  29. package/dist/src/examples/cost-dashboard/CostBreakdownChart.js +9 -8
  30. package/dist/src/examples/cost-dashboard/CostBreakdownChart.js.map +1 -1
  31. package/dist/src/examples/cost-dashboard/CostDashboardPage.d.ts.map +1 -1
  32. package/dist/src/examples/cost-dashboard/CostDashboardPage.js +6 -2
  33. package/dist/src/examples/cost-dashboard/CostDashboardPage.js.map +1 -1
  34. package/dist/src/examples/cost-dashboard/TrendChart.d.ts.map +1 -1
  35. package/dist/src/examples/cost-dashboard/TrendChart.js +7 -9
  36. package/dist/src/examples/cost-dashboard/TrendChart.js.map +1 -1
  37. package/dist/src/examples/project-detail/ProjectDetailPage.d.ts.map +1 -1
  38. package/dist/src/examples/project-detail/ProjectDetailPage.js +3 -3
  39. package/dist/src/examples/project-detail/ProjectDetailPage.js.map +1 -1
  40. package/dist/src/examples/projects-list/ProjectsListPage.d.ts.map +1 -1
  41. package/dist/src/examples/projects-list/ProjectsListPage.js +7 -7
  42. package/dist/src/examples/projects-list/ProjectsListPage.js.map +1 -1
  43. package/dist/src/examples/shared/AppShell.d.ts +6 -1
  44. package/dist/src/examples/shared/AppShell.d.ts.map +1 -1
  45. package/dist/src/examples/shared/AppShell.js +7 -2
  46. package/dist/src/examples/shared/AppShell.js.map +1 -1
  47. package/dist/src/index.d.ts +5 -0
  48. package/dist/src/index.d.ts.map +1 -1
  49. package/dist/src/index.js +5 -0
  50. package/dist/src/index.js.map +1 -1
  51. package/dist/styles.css +129 -0
  52. package/package.json +1 -1
  53. package/dist/src/examples/cost-dashboard/useChartColors.d.ts +0 -10
  54. package/dist/src/examples/cost-dashboard/useChartColors.d.ts.map +0 -1
  55. package/dist/src/examples/cost-dashboard/useChartColors.js +0 -20
  56. package/dist/src/examples/cost-dashboard/useChartColors.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"radio-button.d.ts","sourceRoot":"","sources":["../../carbon-compat/radio-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EACV,qBAAqB,IAAI,2BAA2B,EACpD,gBAAgB,IAAI,sBAAsB,EAC3C,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEtD,iBAAS,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,qBA4GrD;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,qBAkD3C;AAED,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"radio-button.d.ts","sourceRoot":"","sources":["../../carbon-compat/radio-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EACV,qBAAqB,IAAI,2BAA2B,EACpD,gBAAgB,IAAI,sBAAsB,EAC3C,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEtD,iBAAS,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,qBA6GrD;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,qBAkD3C;AAED,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
@@ -33,9 +33,9 @@ function RadioButtonGroup(props) {
33
33
  onChange?.(value, name, synthetic);
34
34
  }
35
35
  : undefined;
36
- const group = (_jsx(RadioGroup, { name: name, value: valueSelected, defaultValue: defaultSelected, disabled: disabled, orientation: orientation === "horizontal" ? "horizontal" : "vertical", onValueChange: handleValueChange, className: cn(orientation === "horizontal" && "flex flex-row gap-4", className), ...rest, children: children }));
36
+ const group = (_jsx(RadioGroup, { name: name, value: valueSelected, defaultValue: defaultSelected, disabled: disabled, orientation: orientation === "horizontal" ? "horizontal" : "vertical", onValueChange: handleValueChange, className: cn(legendText && "gap-2", orientation === "horizontal" && "flex flex-row gap-4", className), ...rest, children: children }));
37
37
  if (legendText) {
38
- return (_jsxs("fieldset", { className: "space-y-2", children: [_jsx("legend", { className: "text-sm font-medium", children: legendText }), group] }));
38
+ return (_jsxs("fieldset", { className: "space-y-3", children: [_jsx("legend", { className: "text-sm font-medium", children: legendText }), group] }));
39
39
  }
40
40
  return group;
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"radio-button.js","sourceRoot":"","sources":["../../carbon-compat/radio-button.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radio-button.js","sourceRoot":"","sources":["../../carbon-compat/radio-button.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASxD,SAAS,gBAAgB,CAAC,KAA4B;IACpD,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,eAAe,EACf,QAAQ,EACR,UAAU,EACV,OAAO,EACP,WAAW,EACX,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,GAAG,IAAI,EACR,GAAG,KAoBH,CAAC;IACF,gBAAgB,CAAC,kBAAkB,EAAE;QACnC,UAAU;QACV,OAAO;QACP,WAAW;QACX,QAAQ;QACR,IAAI;QACJ,QAAQ;KACT,CAAC,CAAC;IAEH,wEAAwE;IACxE,oEAAoE;IACpE,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAOjC,CAAC;IACJ,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,IACE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;YAC3B,OAAQ,KAAK,CAAC,KAA6B,CAAC,KAAK,KAAK,QAAQ,EAC9D,CAAC;YACD,MAAM,aAAa,GAAI,KAAK,CAAC,KAAwC;iBAClE,QAAQ,CAAC;YACZ,MAAM,UAAU,GAAI,KAAK,CAAC,KAA2B,CAAC,KAAK,CAAC;YAC5D,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;gBACxC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GACrB,QAAQ,IAAI,oBAAoB,CAAC,IAAI,GAAG,CAAC;QACvC,CAAC,CAAC,CAAC,KAAa,EAAE,EAAE;YAChB,MAAM,SAAS,GAAG,EAAyC,CAAC;YAC5D,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1D,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACrC,CAAC;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,KAAK,GAAG,CACZ,KAAC,UAAU,IACT,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,eAAe,EAC7B,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EACrE,aAAa,EAAE,iBAAiB,EAChC,SAAS,EAAE,EAAE,CACX,UAAU,IAAI,OAAO,EACrB,WAAW,KAAK,YAAY,IAAI,qBAAqB,EACrD,SAAS,CACV,KACI,IAAgD,YAEpD,QAAQ,GACE,CACd,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CACL,oBAAU,SAAS,EAAC,WAAW,aAC7B,iBAAQ,SAAS,EAAC,qBAAqB,YAAE,UAAU,GAAU,EAC5D,KAAK,IACG,CACZ,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAuB;IAC1C,uDAAuD;IACvD,oEAAoE;IACpE,6DAA6D;IAC7D,MAAM,EACJ,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,EACT,EAAE,EACF,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EAAE,SAAS,EACnB,GAAG,IAAI,EACR,GAAG,KAUH,CAAC;IACF,gBAAgB,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAErD,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,aACtD,KAAC,cAAc,OACR,IAAoD,EACzD,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,GAClB,EACD,SAAS,KAAK,SAAS,IAAI,CAC1B,gBACE,OAAO,EAAE,EAAE,EACX,SAAS,EAAE,EAAE,CACX,kCAAkC,EAClC,SAAS,IAAI,SAAS,EACtB,QAAQ,IAAI,+BAA+B,CAC5C,YAEA,SAAS,GACJ,CACT,IACG,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type ChartConfig } from "./chart.js";
2
+ interface ReferenceLineConfig {
3
+ value: number;
4
+ label?: string;
5
+ axis?: "x" | "y";
6
+ }
7
+ interface BarChartProps {
8
+ data: Record<string, unknown>[];
9
+ categoryKey: string;
10
+ config: ChartConfig;
11
+ orientation?: "vertical" | "horizontal";
12
+ stacked?: boolean;
13
+ getCellColor?: (value: number, dataKey: string) => string;
14
+ showLabels?: boolean;
15
+ referenceLines?: ReferenceLineConfig[];
16
+ legend?: boolean;
17
+ loading?: boolean;
18
+ empty?: boolean;
19
+ radius?: number;
20
+ tickFormatter?: (value: unknown) => string;
21
+ className?: string;
22
+ }
23
+ declare function BarChart({ data, categoryKey, config, orientation, stacked, getCellColor, showLabels, referenceLines, legend, loading, empty, radius, tickFormatter, className, }: BarChartProps): import("react").JSX.Element;
24
+ export { BarChart };
25
+ export type { BarChartProps };
26
+ //# sourceMappingURL=bar-chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bar-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/bar-chart.tsx"],"names":[],"mappings":"AAWA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAEjB,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAClB;AAsCD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,QAAQ,CAAC,EAChB,IAAI,EACJ,WAAW,EACX,MAAM,EACN,WAAwB,EACxB,OAAe,EACf,YAAY,EACZ,UAAkB,EAClB,cAAc,EACd,MAAM,EACN,OAAe,EACf,KAAa,EACb,MAAU,EACV,aAAa,EACb,SAAS,GACV,EAAE,aAAa,+BAqHf;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Bar, BarChart as RechartsBarChart, CartesianGrid, Cell, LabelList, ReferenceLine, XAxis, YAxis, } from "recharts";
3
+ import { ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, } from "./chart.js";
4
+ // Recharts' <Bar radius> accepts a single number (all four corners) or a
5
+ // [topLeft, topRight, bottomRight, bottomLeft] tuple. For a stacked chart with
6
+ // 2+ series, only the outer-facing edge of the base and outer segments should
7
+ // round — internal seams between stacked segments must stay flat so the stack
8
+ // reads as one continuous bar. "Outer-facing" depends on orientation: vertical
9
+ // stacks grow up from the x-axis (first key = base = bottom corners round,
10
+ // last key = top = top corners round); horizontal stacks grow right from the
11
+ // y-axis (first key = base = left corners round, last key = right = right
12
+ // corners round). Grouped (stacked=false) or single-series charts keep the
13
+ // flat-4-corner radius. The `0` branches (flat/middle-of-stack segments) stay
14
+ // `0` regardless of `radius` — only the rounded branches scale with it.
15
+ function getBarRadius(index, total, stacked, orientation, radius) {
16
+ if (!stacked || total <= 1) {
17
+ return radius;
18
+ }
19
+ const isBase = index === 0;
20
+ const isOuter = index === total - 1;
21
+ if (orientation === "vertical") {
22
+ // [topLeft, topRight, bottomRight, bottomLeft]
23
+ if (isOuter)
24
+ return [radius, radius, 0, 0];
25
+ if (isBase)
26
+ return [0, 0, radius, radius];
27
+ return 0;
28
+ }
29
+ // orientation === "horizontal": base touches the y-axis (left), outer segment
30
+ // is right-most.
31
+ if (isBase)
32
+ return [radius, 0, 0, radius];
33
+ if (isOuter)
34
+ return [0, radius, radius, 0];
35
+ return 0;
36
+ }
37
+ function BarChart({ data, categoryKey, config, orientation = "vertical", stacked = false, getCellColor, showLabels = false, referenceLines, legend, loading = false, empty = false, radius = 4, tickFormatter, className, }) {
38
+ const seriesKeys = Object.keys(config);
39
+ const showLegend = legend ?? seriesKeys.length > 1;
40
+ // Public `orientation` describes bar growth direction. Recharts' `layout` is the
41
+ // inverse of that: its default ("horizontal") grows bars vertically, and
42
+ // "vertical" grows bars sideways. Translate here so no Recharts terminology
43
+ // leaks into the DS prop.
44
+ const rechartsLayout = orientation === "horizontal" ? "vertical" : "horizontal";
45
+ // Reference-line axis defaults to the value axis — the axis opposite categoryKey.
46
+ const defaultReferenceAxis = orientation === "horizontal" ? "x" : "y";
47
+ return (_jsx(ChartContainer, { config: config, loading: loading, empty: empty, className: className, children: _jsxs(RechartsBarChart, { data: data, layout: rechartsLayout, accessibilityLayer: true, children: [_jsx(CartesianGrid, { vertical: orientation === "horizontal", horizontal: orientation === "vertical", stroke: "var(--border)" }), orientation === "vertical" ? (_jsxs(_Fragment, { children: [_jsx(XAxis, { dataKey: categoryKey, tickLine: false, axisLine: false,
48
+ // Matches shadcn's own chart-bar-interactive registry default —
49
+ // Recharts skips tick labels that would render closer together
50
+ // than this pixel gap, avoiding crowded/overlapping labels on
51
+ // dense datasets (e.g. ~90 daily points). Sparse datasets are
52
+ // unaffected since their ticks already clear 32px.
53
+ minTickGap: 32, tickFormatter: tickFormatter }), _jsx(YAxis, { tickLine: false, axisLine: false })] })) : (_jsxs(_Fragment, { children: [_jsx(XAxis, { type: "number", tickLine: false, axisLine: false }), _jsx(YAxis, { dataKey: categoryKey, type: "category", tickLine: false, axisLine: false,
54
+ // Recharts' default category-axis width (60px) truncates longer
55
+ // labels (e.g. process/connector names) — "auto" measures each
56
+ // label and sizes the axis to fit, per this prop's purpose.
57
+ width: "auto", minTickGap: 32, tickFormatter: tickFormatter })] })), _jsx(ChartTooltip, { content: _jsx(ChartTooltipContent, {}) }), showLegend && _jsx(ChartLegend, { content: _jsx(ChartLegendContent, {}) }), referenceLines?.map((referenceLine, index) => (_jsx(ReferenceLine, { ...(referenceLine.axis
58
+ ? { [referenceLine.axis]: referenceLine.value }
59
+ : { [defaultReferenceAxis]: referenceLine.value }), ...(referenceLine.label
60
+ ? {
61
+ label: {
62
+ value: referenceLine.label,
63
+ position: "insideTopRight",
64
+ },
65
+ }
66
+ : {}), strokeDasharray: "4 4",
67
+ // chart.tsx's global style forces `.recharts-reference-line-line` to
68
+ // `stroke-border` via a Tailwind arbitrary-variant class, which beats
69
+ // the `stroke` SVG presentation attribute (lowest CSS priority). Set
70
+ // the color via inline `style` instead so it wins over that class.
71
+ style: { stroke: "var(--neutral-foreground-subtle)" } }, index))), seriesKeys.map((key, index) => (_jsxs(Bar, { dataKey: key, fill: `var(--color-${key})`, stackId: stacked ? "stack" : undefined, radius: getBarRadius(index, seriesKeys.length, stacked, orientation, radius), children: [getCellColor && seriesKeys.length === 1
72
+ ? data.map((row, index) => (_jsx(Cell, { fill: getCellColor(Number(row[key]), key) }, index)))
73
+ : null, showLabels && (_jsx(LabelList, { dataKey: key, position: orientation === "horizontal" ? "right" : "top", className: "fill-neutral-foreground-strong", fontSize: 12 }))] }, key)))] }) }));
74
+ }
75
+ export { BarChart };
76
+ //# sourceMappingURL=bar-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bar-chart.js","sourceRoot":"","sources":["../../../../src/components/ui/bar-chart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import * as React from "react";
2
+ import * as RechartsPrimitive from "recharts";
3
+ export type ChartConfig = Record<string, {
4
+ label: React.ReactNode;
5
+ icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;
6
+ color?: string;
7
+ }>;
8
+ declare function ChartContainer({ id, className, children, config, loading, empty, emptyMessage, ...props }: React.ComponentProps<"div"> & {
9
+ config: ChartConfig;
10
+ loading?: boolean;
11
+ empty?: boolean;
12
+ emptyMessage?: string;
13
+ children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];
14
+ }): React.JSX.Element;
15
+ declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
16
+ declare function ChartTooltipContent({ active, payload, className, indicator, hideLabel, hideIndicator, label, labelFormatter, formatter, color, labelClassName, }: Partial<RechartsPrimitive.TooltipContentProps> & {
17
+ className?: string;
18
+ indicator?: "line" | "dot" | "dashed";
19
+ hideLabel?: boolean;
20
+ hideIndicator?: boolean;
21
+ color?: string;
22
+ labelClassName?: string;
23
+ }): React.JSX.Element | null;
24
+ declare const ChartLegend: React.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => React.ReactPortal | null>;
25
+ declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, inactiveKeys, onToggleKey, }: {
26
+ className?: string;
27
+ payload?: readonly RechartsPrimitive.LegendPayload[];
28
+ verticalAlign?: RechartsPrimitive.LegendProps["verticalAlign"];
29
+ hideIcon?: boolean;
30
+ inactiveKeys?: Set<string>;
31
+ onToggleKey?: (key: string) => void;
32
+ }): React.JSX.Element | null;
33
+ export { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, };
34
+ //# sourceMappingURL=chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,UAAU,CAAC;AAK9C,MAAM,MAAM,WAAW,GAAG,MAAM,CAC9B,MAAM,EACN;IACE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CACF,CAAC;AAgBF,iBAAS,cAAc,CAAC,EACtB,EAAE,EACF,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAe,EACf,KAAa,EACb,YAAkC,EAClC,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,cAAc,CAC5B,OAAO,iBAAiB,CAAC,mBAAmB,CAC7C,CAAC,UAAU,CAAC,CAAC;CACf,qBAgCA;AAoBD,QAAA,MAAM,YAAY,kCAA4B,CAAC;AAE/C,iBAAS,mBAAmB,CAAC,EAC3B,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAiB,EACjB,SAAiB,EACjB,aAAqB,EACrB,KAAK,EACL,cAAc,EACd,SAAS,EACT,KAAK,EACL,cAAc,GACf,EAAE,OAAO,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,GAAG;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,4BAkHA;AAED,QAAA,MAAM,WAAW,sGAA2B,CAAC;AAE7C,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,QAAgB,EAChB,OAAO,EACP,aAAwB,EACxB,YAAY,EACZ,WAAW,GACZ,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,iBAAiB,CAAC,aAAa,EAAE,CAAC;IACrD,aAAa,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,4BAmEA;AAED,OAAO,EACL,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,kBAAkB,GACnB,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import * as RechartsPrimitive from "recharts";
4
+ import { cn } from "../../lib/utils.js";
5
+ import { Skeleton } from "./skeleton.js";
6
+ const ChartContext = React.createContext(null);
7
+ function useChart() {
8
+ const context = React.useContext(ChartContext);
9
+ if (!context) {
10
+ throw new Error("useChart must be used within a <ChartContainer />");
11
+ }
12
+ return context;
13
+ }
14
+ function ChartContainer({ id, className, children, config, loading = false, empty = false, emptyMessage = "No data available", ...props }) {
15
+ const generatedId = React.useId();
16
+ const chartId = `chart-${generatedId.replace(/:/g, "")}`;
17
+ return (_jsx(ChartContext.Provider, { value: { config }, children: _jsxs("div", { id: id, "data-slot": "chart", "data-chart": chartId, "aria-busy": loading || undefined, className: cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-neutral-foreground-subtle [&_.recharts-cartesian-grid_line]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-radial-bar-background-sector]:fill-neutral-background-strong [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-neutral-background-strong [&_.recharts-reference-line-line]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-surface]:outline-hidden", className), ...props, children: [_jsx(ChartStyle, { id: chartId, config: config }), loading ? (_jsx(Skeleton, { className: "h-full w-full" })) : empty ? (_jsx("div", { className: "flex h-full w-full items-center justify-center text-neutral-foreground-subtle", children: emptyMessage })) : (_jsx(RechartsPrimitive.ResponsiveContainer, { children: children }))] }) }));
18
+ }
19
+ function ChartStyle({ id, config }) {
20
+ const colorConfig = Object.entries(config).filter(([, entryConfig]) => entryConfig.color);
21
+ if (!colorConfig.length) {
22
+ return null;
23
+ }
24
+ return (_jsx("style", { children: `[data-chart="${id}"] {
25
+ ${colorConfig
26
+ .map(([key, entryConfig]) => ` --color-${key}: ${entryConfig.color};`)
27
+ .join("\n")}
28
+ }` }));
29
+ }
30
+ const ChartTooltip = RechartsPrimitive.Tooltip;
31
+ function ChartTooltipContent({ active, payload, className, indicator = "dot", hideLabel = false, hideIndicator = false, label, labelFormatter, formatter, color, labelClassName, }) {
32
+ const { config } = useChart();
33
+ const tooltipLabel = React.useMemo(() => {
34
+ if (hideLabel || !payload?.length) {
35
+ return null;
36
+ }
37
+ const value = !labelFormatter && typeof label === "string"
38
+ ? (config[label]?.label ?? label)
39
+ : label;
40
+ if (labelFormatter) {
41
+ return (_jsx("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) }));
42
+ }
43
+ if (!value) {
44
+ return null;
45
+ }
46
+ return _jsx("div", { className: cn("font-medium", labelClassName), children: value });
47
+ }, [label, labelFormatter, payload, hideLabel, labelClassName, config]);
48
+ if (!active || !payload?.length) {
49
+ return null;
50
+ }
51
+ const nestLabel = payload.length === 1 && indicator !== "dot";
52
+ return (_jsxs("div", { "data-slot": "chart-tooltip-content", className: cn("grid min-w-32 items-start gap-1.5 rounded-lg border border-border bg-popover px-2.5 py-1.5 text-xs text-popover-foreground shadow-lg", className), children: [!nestLabel ? tooltipLabel : null, _jsx("div", { className: "grid gap-1.5", children: payload.map((item, index) => {
53
+ const key = `${item.dataKey ?? item.name ?? "value"}`;
54
+ const itemConfig = config[key];
55
+ const indicatorColor = color ?? item.color ?? item.payload?.fill;
56
+ return (_jsx("div", { className: cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5 [&>svg]:text-neutral-foreground-subtle", indicator === "dot" && "items-center"), children: formatter && item.value !== undefined && item.name ? (formatter(item.value, item.name, item, index, item.payload)) : (_jsxs(_Fragment, { children: [itemConfig?.icon ? (_jsx(itemConfig.icon, { "aria-hidden": "true" })) : (!hideIndicator && (_jsx("div", { "aria-hidden": "true", className: cn("shrink-0 rounded-[2px] border-(--color-border-tooltip) bg-(--color-indicator-tooltip)", {
57
+ "h-2.5 w-2.5": indicator === "dot",
58
+ "h-full w-1": indicator === "line",
59
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
60
+ "my-0.5": nestLabel && indicator === "dashed",
61
+ }), style: {
62
+ "--color-indicator-tooltip": indicatorColor,
63
+ "--color-border-tooltip": indicatorColor,
64
+ } }))), _jsxs("div", { className: cn("flex flex-1 justify-between leading-none", nestLabel ? "items-end" : "items-center"), children: [_jsxs("div", { className: "grid gap-1.5", children: [nestLabel ? tooltipLabel : null, _jsx("span", { className: "text-neutral-foreground-subtle", children: itemConfig?.label ?? item.name })] }), item.value !== undefined && item.value !== null && (_jsx("span", { className: "font-mono font-medium tabular-nums text-neutral-foreground-strong", children: typeof item.value === "number"
65
+ ? item.value.toLocaleString()
66
+ : item.value }))] })] })) }, key || index));
67
+ }) })] }));
68
+ }
69
+ const ChartLegend = RechartsPrimitive.Legend;
70
+ function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = "bottom", inactiveKeys, onToggleKey, }) {
71
+ const { config } = useChart();
72
+ if (!payload?.length) {
73
+ return null;
74
+ }
75
+ return (_jsx("div", { "data-slot": "chart-legend-content", className: cn("flex items-center justify-center gap-4", verticalAlign === "top" ? "pb-3" : "pt-3", className), children: payload.map((item, index) => {
76
+ const lookupKey = `${item.dataKey ?? "value"}`;
77
+ const itemConfig = config[lookupKey];
78
+ const isInactive = inactiveKeys?.has(lookupKey) ?? false;
79
+ const itemContent = (_jsxs(_Fragment, { children: [itemConfig?.icon && !hideIcon ? (_jsx(itemConfig.icon, { "aria-hidden": "true" })) : (_jsx("div", { "aria-hidden": "true", className: "h-2 w-2 shrink-0 rounded-[2px] bg-(--color-indicator-legend)", style: {
80
+ "--color-indicator-legend": item.color,
81
+ } })), itemConfig?.label] }));
82
+ const itemClassName = cn("flex items-center gap-1.5 text-neutral-foreground-subtle [&>svg]:size-3 [&>svg]:text-neutral-foreground-subtle", isInactive && "opacity-50");
83
+ if (onToggleKey && inactiveKeys) {
84
+ return (_jsx("button", { type: "button", "aria-pressed": !isInactive, onClick: () => onToggleKey(lookupKey), className: cn(itemClassName, "cursor-pointer"), children: itemContent }, `${lookupKey}-${index}`));
85
+ }
86
+ return (_jsx("div", { className: itemClassName, children: itemContent }, `${lookupKey}-${index}`));
87
+ }) }));
88
+ }
89
+ export { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, };
90
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../../src/components/ui/chart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type ChartConfig } from "./chart.js";
2
+ interface ReferenceLineConfig {
3
+ value: number;
4
+ label?: string;
5
+ axis?: "x" | "y";
6
+ }
7
+ interface LineChartProps {
8
+ data: Record<string, unknown>[];
9
+ categoryKey: string;
10
+ config: ChartConfig;
11
+ curve?: "linear" | "monotone" | "step";
12
+ dots?: boolean;
13
+ connectNulls?: boolean;
14
+ strokeWidth?: number;
15
+ referenceLines?: ReferenceLineConfig[];
16
+ legend?: boolean;
17
+ loading?: boolean;
18
+ empty?: boolean;
19
+ tickFormatter?: (value: unknown) => string;
20
+ className?: string;
21
+ }
22
+ declare function LineChart({ data, categoryKey, config, curve, dots, connectNulls, strokeWidth, referenceLines, legend, loading, empty, tickFormatter, className, }: LineChartProps): import("react").JSX.Element;
23
+ export { LineChart };
24
+ export type { LineChartProps };
25
+ //# sourceMappingURL=line-chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-chart.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/line-chart.tsx"],"names":[],"mappings":"AAUA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAEjB,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAClB;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,SAAS,CAAC,EACjB,IAAI,EACJ,WAAW,EACX,MAAM,EACN,KAAkB,EAClB,IAAY,EACZ,YAAoB,EACpB,WAAe,EACf,cAAc,EACd,MAAM,EACN,OAAe,EACf,KAAa,EACb,aAAa,EACb,SAAS,GACV,EAAE,cAAc,+BAmFhB;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { CartesianGrid, Line, LineChart as RechartsLineChart, ReferenceLine, XAxis, YAxis, } from "recharts";
4
+ import { ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, } from "./chart.js";
5
+ function LineChart({ data, categoryKey, config, curve = "monotone", dots = false, connectNulls = false, strokeWidth = 2, referenceLines, legend, loading = false, empty = false, tickFormatter, className, }) {
6
+ const seriesKeys = Object.keys(config);
7
+ const showLegend = legend ?? seriesKeys.length > 1;
8
+ const [inactiveKeys, setInactiveKeys] = useState(new Set());
9
+ const toggleKey = (key) => setInactiveKeys((prev) => {
10
+ const next = new Set(prev);
11
+ if (next.has(key)) {
12
+ next.delete(key);
13
+ }
14
+ else {
15
+ next.add(key);
16
+ }
17
+ return next;
18
+ });
19
+ return (_jsx(ChartContainer, { config: config, loading: loading, empty: empty, className: className, children: _jsxs(RechartsLineChart, { data: data, accessibilityLayer: true, children: [_jsx(CartesianGrid, { vertical: false, stroke: "var(--border)" }), _jsx(XAxis, { dataKey: categoryKey, tickLine: false, axisLine: false, minTickGap: 32, tickFormatter: tickFormatter }), _jsx(YAxis, { tickLine: false, axisLine: false }), _jsx(ChartTooltip, { content: _jsx(ChartTooltipContent, {}) }), showLegend && (_jsx(ChartLegend, { content: _jsx(ChartLegendContent, { inactiveKeys: inactiveKeys, onToggleKey: toggleKey }) })), referenceLines?.map((referenceLine, index) => (_jsx(ReferenceLine, { ...(referenceLine.axis
20
+ ? { [referenceLine.axis]: referenceLine.value }
21
+ : { y: referenceLine.value }), ...(referenceLine.label
22
+ ? {
23
+ label: {
24
+ value: referenceLine.label,
25
+ position: "insideTopRight",
26
+ },
27
+ }
28
+ : {}), strokeDasharray: "4 4",
29
+ // chart.tsx's global style forces `.recharts-reference-line-line` to
30
+ // `stroke-border` via a Tailwind arbitrary-variant class, which beats
31
+ // the `stroke` SVG presentation attribute (lowest CSS priority). Set
32
+ // the color via inline `style` instead so it wins over that class —
33
+ // see bar-chart.tsx's identical reference-line handling.
34
+ style: { stroke: "var(--neutral-foreground-subtle)" } }, index))), seriesKeys.map((key) => (_jsx(Line, { dataKey: key, type: curve, stroke: `var(--color-${key})`, strokeWidth: strokeWidth, dot: dots, connectNulls: connectNulls, hide: inactiveKeys.has(key), isAnimationActive: false }, key)))] }) }));
35
+ }
36
+ export { LineChart };
37
+ //# sourceMappingURL=line-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-chart.js","sourceRoot":"","sources":["../../../../src/components/ui/line-chart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ interface MeterRange {
3
+ range: [number, number];
4
+ status: "success" | "warning" | "danger";
5
+ }
6
+ interface MeterProps {
7
+ value: number;
8
+ min?: number;
9
+ max: number;
10
+ ranges?: MeterRange[];
11
+ peak?: number;
12
+ label?: React.ReactNode;
13
+ unit?: string;
14
+ valueFormatter?: (value: number, max: number) => string;
15
+ showValue?: boolean;
16
+ loading?: boolean;
17
+ empty?: boolean;
18
+ emptyMessage?: string;
19
+ className?: string;
20
+ }
21
+ declare function Meter({ value, min, max, ranges, peak, label, unit, valueFormatter, showValue, loading, empty, emptyMessage, className, }: MeterProps): React.JSX.Element;
22
+ export { Meter };
23
+ export type { MeterProps, MeterRange };
24
+ //# sourceMappingURL=meter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/meter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,UAAU,UAAU;IAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;CAC1C;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqCD,iBAAS,KAAK,CAAC,EACb,KAAK,EACL,GAAO,EACP,GAAG,EACH,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,cAAsC,EACtC,SAAgB,EAChB,OAAe,EACf,KAAa,EACb,YAAkC,EAClC,SAAS,GACV,EAAE,UAAU,qBAqFZ;AAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils.js";
4
+ import { Skeleton } from "./skeleton.js";
5
+ import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
6
+ const STATUS_FILL = {
7
+ success: "var(--success-action-default)",
8
+ warning: "var(--warning-action-default)",
9
+ danger: "var(--danger-action-default)",
10
+ };
11
+ const STATUS_BACKGROUND = {
12
+ success: "var(--success-background-subtle)",
13
+ warning: "var(--warning-background-subtle)",
14
+ danger: "var(--danger-background-subtle)",
15
+ };
16
+ function toPercent(value, min, max) {
17
+ if (max === min) {
18
+ return 0;
19
+ }
20
+ return Math.max(0, Math.min(100, ((value - min) / (max - min)) * 100));
21
+ }
22
+ function statusAt(value, ranges) {
23
+ return ranges?.find(({ range: [start, end] }) => value >= start && value <= end)?.status;
24
+ }
25
+ function defaultValueFormatter(value, max) {
26
+ if (max === 0) {
27
+ return "0%";
28
+ }
29
+ return `${Math.round((value / max) * 100)}%`;
30
+ }
31
+ function Meter({ value, min = 0, max, ranges, peak, label, unit, valueFormatter = defaultValueFormatter, showValue = true, loading = false, empty = false, emptyMessage = "No data available", className, }) {
32
+ const generatedId = React.useId();
33
+ const labelId = `meter-label-${generatedId.replace(/:/g, "")}`;
34
+ const status = statusAt(value, ranges);
35
+ const fillColor = status
36
+ ? STATUS_FILL[status]
37
+ : "var(--primary-action-default)";
38
+ const fillPercent = toPercent(value, min, max);
39
+ const peakPercent = peak !== undefined ? toPercent(peak, min, max) : undefined;
40
+ const displayValue = `${valueFormatter(value, max)}${unit ? ` ${unit}` : ""}`;
41
+ const valueText = `${displayValue}${status ? `, ${status}` : ""}${peak !== undefined ? `, target ${valueFormatter(peak, max)}` : ""}`;
42
+ const track = (_jsxs("div", { role: "meter", "aria-valuenow": value, "aria-valuemin": min, "aria-valuemax": max, "aria-valuetext": valueText, "aria-labelledby": label ? labelId : undefined, tabIndex: 0, className: "relative h-3 w-full overflow-hidden rounded-full bg-neutral-background-subtle", children: [ranges?.map(({ range: [start, end], status: rangeStatus }, index) => (_jsx("div", { "aria-hidden": "true", className: "absolute inset-y-0", style: {
43
+ left: `${toPercent(start, min, max)}%`,
44
+ width: `${toPercent(end, min, max) - toPercent(start, min, max)}%`,
45
+ backgroundColor: STATUS_BACKGROUND[rangeStatus],
46
+ } }, index))), _jsx("div", { "aria-hidden": "true", className: "absolute inset-y-0 left-0 h-full rounded-full transition-all", style: { width: `${fillPercent}%`, backgroundColor: fillColor } }), peakPercent !== undefined && (_jsx("div", { "aria-hidden": "true", className: "absolute inset-y-0 w-0.5 bg-neutral-foreground-subtle", style: { left: `${peakPercent}%` } }))] }));
47
+ return (_jsxs("div", { className: cn("flex w-full flex-col gap-1.5", className), children: [(label || showValue) && (_jsxs("div", { className: "flex items-center justify-between text-sm", children: [label && (_jsx("span", { id: labelId, className: "text-neutral-foreground-strong", children: label })), showValue && !loading && !empty && (_jsx("span", { className: "font-mono text-neutral-foreground-subtle tabular-nums", children: displayValue }))] })), loading ? (_jsx(Skeleton, { className: "h-3 w-full rounded-full" })) : empty ? (_jsx("div", { className: "flex h-6 w-full items-center justify-center rounded-full bg-neutral-background-subtle text-xs text-neutral-foreground-subtle", children: emptyMessage })) : (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: track }), _jsx(TooltipContent, { children: valueText })] }))] }));
48
+ }
49
+ export { Meter };
50
+ //# sourceMappingURL=meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.js","sourceRoot":"","sources":["../../../../src/components/ui/meter.tsx"],"names":[],"mappings":"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"}
@@ -3,7 +3,10 @@ import { type VariantProps } from "class-variance-authority";
3
3
  declare const pageLayoutVariants: (props?: ({
4
4
  padding?: "default" | "none" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
- type PageLayoutProps = React.ComponentProps<"main"> & VariantProps<typeof pageLayoutVariants> & {
6
+ declare const pageContentWidthVariants: (props?: ({
7
+ width?: "constrained" | "full" | null | undefined;
8
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
+ type PageLayoutProps = React.ComponentProps<"main"> & VariantProps<typeof pageLayoutVariants> & VariantProps<typeof pageContentWidthVariants> & {
7
10
  separator?: boolean;
8
11
  };
9
12
  declare const PageLayout: React.ForwardRefExoticComponent<Omit<PageLayoutProps, "ref"> & React.RefAttributes<HTMLElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"page-layout.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/page-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAUlE,QAAA,MAAM,kBAAkB;;8EAavB,CAAC;AAEF,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GACjD,YAAY,CAAC,OAAO,kBAAkB,CAAC,GAAG;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AA0DJ,QAAA,MAAM,UAAU,kGAAwD,CAAC;AAOzE,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB,CAAC;AAiDF,QAAA,MAAM,UAAU,kGAAwD,CAAC;AAGzE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAClC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"page-layout.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/page-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAUlE,QAAA,MAAM,kBAAkB;;8EAavB,CAAC;AAEF,QAAA,MAAM,wBAAwB;;8EAU5B,CAAC;AAEH,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GACjD,YAAY,CAAC,OAAO,kBAAkB,CAAC,GACvC,YAAY,CAAC,OAAO,wBAAwB,CAAC,GAAG;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAsDJ,QAAA,MAAM,UAAU,kGAAwD,CAAC;AAOzE,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB,CAAC;AAiDF,QAAA,MAAM,UAAU,kGAAwD,CAAC;AAGzE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAClC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC"}
@@ -18,16 +18,30 @@ const pageLayoutVariants = cva("flex flex-col min-h-0 flex-1 bg-background text-
18
18
  padding: "default",
19
19
  },
20
20
  });
21
- function PageLayoutImpl({ id = "main-content", padding, separator = false, className, children, ref, ...props }) {
21
+ const pageContentWidthVariants = cva("flex flex-1 min-h-0 flex-col w-full", {
22
+ variants: {
23
+ width: {
24
+ constrained: "mx-auto max-w-[1584px]",
25
+ full: "",
26
+ },
27
+ },
28
+ defaultVariants: {
29
+ width: "constrained",
30
+ },
31
+ });
32
+ function PageLayoutImpl({ id = "main-content", padding, width, separator = false, className, children, ref, ...props }) {
22
33
  const childArray = React.Children.toArray(children);
23
- if (!separator) {
24
- return (_jsx("main", { "data-slot": "page-layout", id: id, className: cn(pageLayoutVariants({ padding }), className), ref: ref, ...props, children: children }));
34
+ let content = children;
35
+ if (separator) {
36
+ // Inject a <Separator> after the first PageHeader child.
37
+ const firstPageHeaderIndex = childArray.findIndex((child) => React.isValidElement(child) &&
38
+ child.type.displayName ===
39
+ "PageHeader");
40
+ if (firstPageHeaderIndex !== -1) {
41
+ content = (_jsxs(_Fragment, { children: [childArray.slice(0, firstPageHeaderIndex + 1), _jsx(Separator, {}), childArray.slice(firstPageHeaderIndex + 1)] }));
42
+ }
25
43
  }
26
- // When separator=true, inject a <Separator> after the first PageHeader child.
27
- const firstPageHeaderIndex = childArray.findIndex((child) => React.isValidElement(child) &&
28
- child.type.displayName === "PageHeader");
29
- const content = firstPageHeaderIndex === -1 ? (children) : (_jsxs(_Fragment, { children: [childArray.slice(0, firstPageHeaderIndex + 1), _jsx(Separator, {}), childArray.slice(firstPageHeaderIndex + 1)] }));
30
- return (_jsx("main", { "data-slot": "page-layout", id: id, className: cn(pageLayoutVariants({ padding }), className), ref: ref, ...props, children: content }));
44
+ return (_jsx("main", { "data-slot": "page-layout", id: id, className: cn(pageLayoutVariants({ padding }), className), ref: ref, ...props, children: _jsx("div", { "data-slot": "page-content", className: cn(pageContentWidthVariants({ width })), children: content }) }));
31
45
  }
32
46
  const PageLayout = withRef(PageLayoutImpl);
33
47
  PageLayout.displayName = "PageLayout";
@@ -1 +1 @@
1
- {"version":3,"file":"page-layout.js","sourceRoot":"","sources":["../../../../src/components/ui/page-layout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-layout.js","sourceRoot":"","sources":["../../../../src/components/ui/page-layout.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,kBAAkB,GAAG,GAAG,CAC5B,4DAA4D,EAC5D;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,EAAE;SACT;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CACF,CAAC;AAEF,MAAM,wBAAwB,GAAG,GAAG,CAAC,qCAAqC,EAAE;IAC1E,QAAQ,EAAE;QACR,KAAK,EAAE;YACL,WAAW,EAAE,wBAAwB;YACrC,IAAI,EAAE,EAAE;SACT;KACF;IACD,eAAe,EAAE;QACf,KAAK,EAAE,aAAa;KACrB;CACF,CAAC,CAAC;AAQH,SAAS,cAAc,CAAC,EACtB,EAAE,GAAG,cAAc,EACnB,OAAO,EACP,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,SAAS,EACT,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACQ;IAChB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEpD,IAAI,OAAO,GAAoB,QAAQ,CAAC;IAExC,IAAI,SAAS,EAAE,CAAC;QACd,yDAAyD;QACzD,MAAM,oBAAoB,GAAG,UAAU,CAAC,SAAS,CAC/C,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;YAC1B,KAAK,CAAC,IAAqC,CAAC,WAAW;gBACtD,YAAY,CACjB,CAAC;QAEF,IAAI,oBAAoB,KAAK,CAAC,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,CACR,8BACG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,GAAG,CAAC,CAAC,EAC9C,KAAC,SAAS,KAAG,EACZ,UAAU,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,IAC1C,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CACL,4BACY,aAAa,EACvB,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,EACzD,GAAG,EAAE,GAAG,KACJ,KAAK,YAET,2BACY,cAAc,EACxB,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,YAEjD,OAAO,GACJ,GACD,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,OAAO,CAA+B,cAAc,CAAC,CAAC;AACzE,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAetC,SAAS,cAAc,CAAC,EACtB,KAAK,EACL,WAAW,EACX,GAAG,EACH,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACQ;IAChB,OAAO,CACL,+BACY,aAAa,EACvB,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,EAC/C,GAAG,EAAE,GAAG,KACJ,KAAK,aAER,UAAU,IAAI,cAAK,SAAS,EAAC,MAAM,YAAE,UAAU,GAAO,EAEvD,eAAK,SAAS,EAAC,wCAAwC,aACrD,eAAK,SAAS,EAAC,6BAA6B,aAC1C,eAAK,SAAS,EAAC,mCAAmC,aAChD,aAAI,SAAS,EAAC,mDAAmD,YAC9D,KAAK,GACH,EACJ,GAAG,IAAI,cAAK,SAAS,EAAC,mBAAmB,YAAE,GAAG,GAAO,IAClD,EACL,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,yCAAyC,YACnD,WAAW,GACV,CACL,IACG,EAEL,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,yCAAyC,YACrD,OAAO,GACJ,CACP,IACG,EAEL,IAAI,IAAI,cAAK,SAAS,EAAC,MAAM,YAAE,IAAI,GAAO,IACpC,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,OAAO,CAA+B,cAAc,CAAC,CAAC;AACzE,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ interface TimeRangePreset {
2
+ value: string;
3
+ label: string;
4
+ days: number;
5
+ }
6
+ declare function filterByTimeRange(data: Record<string, unknown>[], dateKey: string, preset: string, presets?: TimeRangePreset[]): Record<string, unknown>[];
7
+ interface TimeRangeSelectorProps {
8
+ data: Record<string, unknown>[];
9
+ dateKey: string;
10
+ presets?: TimeRangePreset[];
11
+ value?: string;
12
+ defaultValue?: string;
13
+ onValueChange?: (value: string, filteredData: Record<string, unknown>[]) => void;
14
+ className?: string;
15
+ }
16
+ declare function TimeRangeSelector({ data, dateKey, presets, value, defaultValue, onValueChange, className, }: TimeRangeSelectorProps): import("react").JSX.Element;
17
+ export { TimeRangeSelector, filterByTimeRange };
18
+ export type { TimeRangeSelectorProps, TimeRangePreset };
19
+ //# sourceMappingURL=time-range-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-range-selector.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/time-range-selector.tsx"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AASD,iBAAS,iBAAiB,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAe,EAAoB,GAC3C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAwB3B;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KACpC,IAAI,CAAC;IACV,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,iBAAiB,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,OAAyB,EACzB,KAAK,EACL,YAAY,EACZ,aAAa,EACb,SAAS,GACV,EAAE,sBAAsB,+BA4CxB;AAED,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;AAChD,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,CAAC"}