@maxhealth.tech/prefab 0.2.39 → 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.
Files changed (53) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +1 -1
  3. package/dist/app.d.ts +24 -2
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +46 -9
  6. package/dist/app.js.map +1 -1
  7. package/dist/components/charts/index.d.ts +56 -4
  8. package/dist/components/charts/index.d.ts.map +1 -1
  9. package/dist/components/charts/index.js +33 -7
  10. package/dist/components/charts/index.js.map +1 -1
  11. package/dist/core/theme-css.d.ts +32 -0
  12. package/dist/core/theme-css.d.ts.map +1 -0
  13. package/dist/core/theme-css.js +55 -0
  14. package/dist/core/theme-css.js.map +1 -0
  15. package/dist/core/validate.d.ts.map +1 -1
  16. package/dist/core/validate.js +24 -1
  17. package/dist/core/validate.js.map +1 -1
  18. package/dist/index.d.ts +5 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/mcp/display.d.ts +6 -2
  23. package/dist/mcp/display.d.ts.map +1 -1
  24. package/dist/mcp/display.js +8 -2
  25. package/dist/mcp/display.js.map +1 -1
  26. package/dist/renderer/app.d.ts +2 -0
  27. package/dist/renderer/app.d.ts.map +1 -1
  28. package/dist/renderer/app.js +5 -0
  29. package/dist/renderer/app.js.map +1 -1
  30. package/dist/renderer/bridge.d.ts.map +1 -1
  31. package/dist/renderer/bridge.js +2 -0
  32. package/dist/renderer/bridge.js.map +1 -1
  33. package/dist/renderer/components/chart-helpers.d.ts +63 -0
  34. package/dist/renderer/components/chart-helpers.d.ts.map +1 -0
  35. package/dist/renderer/components/chart-helpers.js +202 -0
  36. package/dist/renderer/components/chart-helpers.js.map +1 -0
  37. package/dist/renderer/components/chart-tooltip.d.ts +1 -1
  38. package/dist/renderer/components/chart-tooltip.d.ts.map +1 -1
  39. package/dist/renderer/components/charts.d.ts +4 -20
  40. package/dist/renderer/components/charts.d.ts.map +1 -1
  41. package/dist/renderer/components/charts.js +246 -195
  42. package/dist/renderer/components/charts.js.map +1 -1
  43. package/dist/renderer/index.d.ts +6 -0
  44. package/dist/renderer/index.d.ts.map +1 -1
  45. package/dist/renderer/index.js +65 -24
  46. package/dist/renderer/index.js.map +1 -1
  47. package/dist/renderer/theme.d.ts +15 -0
  48. package/dist/renderer/theme.d.ts.map +1 -1
  49. package/dist/renderer/theme.js +26 -18
  50. package/dist/renderer/theme.js.map +1 -1
  51. package/dist/renderer.auto.min.js +14 -12
  52. package/dist/renderer.min.js +14 -12
  53. package/package.json +1 -1
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Shared chart rendering helpers — colors, axes, SVG primitives, legend,
3
+ * value formatting. Used by the per-chart renderers in [charts.ts] and the
4
+ * tooltip zones in [chart-tooltip.ts].
5
+ */
6
+ import { resolveValue, el } from '../engine.js';
7
+ export const COLORS = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#ec4899'];
8
+ export const AXIS_COLOR = 'var(--muted-foreground, #6b7280)';
9
+ export const GRID_COLOR = 'var(--border, #e5e7eb)';
10
+ export const AXIS_FONT = '10';
11
+ /** Compute chart layout accounting for optional Y-axis label space. */
12
+ export function chartLayout(svgWidth, svgHeight, hasYAxis, hasYAxisRight = false) {
13
+ const plotLeft = hasYAxis ? 44 : 0;
14
+ const plotRight = svgWidth - (hasYAxisRight ? 44 : 0);
15
+ const plotTop = 10;
16
+ const plotBottom = svgHeight - 24;
17
+ return {
18
+ plotLeft,
19
+ plotRight,
20
+ plotTop,
21
+ plotBottom,
22
+ plotWidth: plotRight - plotLeft,
23
+ plotHeight: plotBottom - plotTop,
24
+ };
25
+ }
26
+ /** Nice round tick values for a 0..max range, returning ~tickCount values. */
27
+ function niceYTicks(max, tickCount = 5) {
28
+ if (max <= 0)
29
+ return [0];
30
+ const rawStep = max / tickCount;
31
+ const magnitude = Math.pow(10, Math.floor(Math.log10(rawStep)));
32
+ const residual = rawStep / magnitude;
33
+ const niceStep = residual <= 1.5 ? magnitude
34
+ : residual <= 3 ? 2 * magnitude
35
+ : residual <= 7 ? 5 * magnitude
36
+ : 10 * magnitude;
37
+ const ticks = [];
38
+ for (let v = 0; v <= max + niceStep * 0.01; v += niceStep) {
39
+ ticks.push(Math.round(v * 1000) / 1000);
40
+ }
41
+ return ticks;
42
+ }
43
+ // ── Axes ─────────────────────────────────────────────────────────────────────
44
+ /** Draw Y-axis labels + optional horizontal grid lines into SVG. */
45
+ export function drawYAxis(svg, layout, max, showGrid, format) {
46
+ const ticks = niceYTicks(max);
47
+ for (const tick of ticks) {
48
+ const y = layout.plotBottom - (max > 0 ? (tick / max) * layout.plotHeight : 0);
49
+ const label = svgEl('text', {
50
+ x: layout.plotLeft - 6, y: y + 3, 'text-anchor': 'end', 'font-size': AXIS_FONT, fill: AXIS_COLOR,
51
+ });
52
+ label.textContent = formatYValue(tick, format);
53
+ svg.appendChild(label);
54
+ if (showGrid && tick > 0) {
55
+ svg.appendChild(svgEl('line', {
56
+ x1: layout.plotLeft, y1: y, x2: layout.plotRight, y2: y,
57
+ stroke: GRID_COLOR, 'stroke-width': 1, 'stroke-dasharray': '4 3',
58
+ }));
59
+ }
60
+ }
61
+ }
62
+ /** Draw secondary Y-axis labels on the right side of the plot. */
63
+ export function drawYAxisRight(svg, layout, max, format) {
64
+ const ticks = niceYTicks(max);
65
+ for (const tick of ticks) {
66
+ const y = layout.plotBottom - (max > 0 ? (tick / max) * layout.plotHeight : 0);
67
+ const label = svgEl('text', {
68
+ x: layout.plotRight + 6, y: y + 3, 'text-anchor': 'start', 'font-size': AXIS_FONT, fill: AXIS_COLOR,
69
+ });
70
+ label.textContent = formatYValue(tick, format);
71
+ svg.appendChild(label);
72
+ }
73
+ }
74
+ /** Draw X-axis labels under the plot area. */
75
+ export function drawXAxisLabels(svg, data, xAxisKey, getX, yBase, format) {
76
+ for (let i = 0; i < data.length; i++) {
77
+ const val = data[i][xAxisKey];
78
+ const label = svgEl('text', {
79
+ x: getX(i), y: yBase + 14, 'text-anchor': 'middle', 'font-size': AXIS_FONT, fill: AXIS_COLOR,
80
+ });
81
+ label.textContent = val == null ? '' : (format ? format(val) : String(val));
82
+ svg.appendChild(label);
83
+ }
84
+ }
85
+ /** Draw a baseline (X-axis line) at the bottom of the plot. */
86
+ export function drawBaseline(svg, layout) {
87
+ svg.appendChild(svgEl('line', {
88
+ x1: layout.plotLeft, y1: layout.plotBottom, x2: layout.plotRight, y2: layout.plotBottom,
89
+ stroke: AXIS_COLOR, 'stroke-width': 1,
90
+ }));
91
+ }
92
+ // ── Value formatting ─────────────────────────────────────────────────────────
93
+ /** Apply a pipe expression to a value using the Rx engine. */
94
+ export function applyPipeFormat(value, pipe, ctx) {
95
+ if (value == null)
96
+ return '';
97
+ const result = resolveValue(`{{ __v | ${pipe} }}`, { ...ctx, scope: { ...ctx.scope, __v: value } });
98
+ return result == null ? String(value) : String(result);
99
+ }
100
+ export function formatYValue(value, format) {
101
+ if (format === 'currency')
102
+ return `$${value.toLocaleString()}`;
103
+ if (format === 'percent')
104
+ return `${value}%`;
105
+ if (value >= 1_000_000)
106
+ return `${(value / 1_000_000).toFixed(1)}M`;
107
+ if (value >= 1_000)
108
+ return `${(value / 1_000).toFixed(1)}K`;
109
+ return String(value);
110
+ }
111
+ /**
112
+ * Effective value-axis / tooltip format for a chart node.
113
+ *
114
+ * `valueFormat` (protocol 0.3 / upstream PR #454) is the canonical field;
115
+ * `yAxisFormat` remains a TS-only override for the left axis of dual-axis
116
+ * charts. `"auto"` (upstream's default) means "no explicit format".
117
+ */
118
+ export function resolveValueFormat(node) {
119
+ const fmt = node.yAxisFormat ?? node.valueFormat;
120
+ return fmt && fmt !== 'auto' ? fmt : undefined;
121
+ }
122
+ /** Create a format callback for tooltip entries that handles per-axis formats + null. */
123
+ export function makeTooltipFormatter(ctx, yAxisFormat, yAxisRightFormat) {
124
+ return (raw, s) => {
125
+ if (raw === null || raw === undefined)
126
+ return '—';
127
+ // Per-series tooltipFormat overrides axis format
128
+ if (s.tooltipFormat)
129
+ return applyPipeFormat(raw, s.tooltipFormat, ctx);
130
+ const fmt = s.yAxisId === 'right' ? yAxisRightFormat : yAxisFormat;
131
+ return formatYValue(Number(raw), fmt);
132
+ };
133
+ }
134
+ // ── SVG primitives ───────────────────────────────────────────────────────────
135
+ export function createSvg(width, height, chartType) {
136
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
137
+ svg.setAttribute('width', '100%');
138
+ svg.setAttribute('height', String(height));
139
+ svg.setAttribute('viewBox', `0 0 ${width} ${height}`);
140
+ svg.setAttribute('role', 'img');
141
+ if (chartType) {
142
+ svg.setAttribute('aria-label', `${chartType} chart`);
143
+ }
144
+ svg.style.overflow = 'visible';
145
+ return svg;
146
+ }
147
+ /** Create an SVG element with string-coerced attributes. */
148
+ export function svgEl(tag, attrs) {
149
+ const node = document.createElementNS('http://www.w3.org/2000/svg', tag);
150
+ for (const [k, v] of Object.entries(attrs))
151
+ node.setAttribute(k, String(v));
152
+ return node;
153
+ }
154
+ /** Create an SVG <text> element with content. */
155
+ export function svgText(attrs, text) {
156
+ const t = svgEl('text', attrs);
157
+ t.textContent = text;
158
+ return t;
159
+ }
160
+ /** Polar → SVG coords (degrees, math convention with screen y flipped). */
161
+ export function polar(cx, cy, r, angleDeg) {
162
+ const a = (angleDeg * Math.PI) / 180;
163
+ return { x: cx + r * Math.cos(a), y: cy - r * Math.sin(a) };
164
+ }
165
+ /** Sampled arc stroke path between two angles — avoids large-arc/sweep flag math. */
166
+ export function arcPath(cx, cy, r, a1, a2) {
167
+ const steps = Math.max(2, Math.ceil(Math.abs(a2 - a1) / 4));
168
+ const parts = [];
169
+ for (let i = 0; i <= steps; i++) {
170
+ const p = polar(cx, cy, r, a1 + ((a2 - a1) * i) / steps);
171
+ parts.push(`${i === 0 ? 'M' : 'L'} ${p.x.toFixed(2)} ${p.y.toFixed(2)}`);
172
+ }
173
+ return parts.join(' ');
174
+ }
175
+ // ── Legend ───────────────────────────────────────────────────────────────────
176
+ export function addLegend(wrapper, series, show) {
177
+ if (show === false || series.length <= 1)
178
+ return;
179
+ const legend = el('div', 'pf-chart-legend');
180
+ legend.style.display = 'flex';
181
+ legend.style.gap = '12px';
182
+ legend.style.fontSize = '12px';
183
+ legend.style.marginBottom = '8px';
184
+ for (let i = 0; i < series.length; i++) {
185
+ const item = el('div', 'pf-chart-legend-item');
186
+ item.style.display = 'flex';
187
+ item.style.alignItems = 'center';
188
+ item.style.gap = '4px';
189
+ const dot = el('span');
190
+ dot.style.width = '8px';
191
+ dot.style.height = '8px';
192
+ dot.style.borderRadius = '50%';
193
+ dot.style.backgroundColor = series[i].color ?? COLORS[i % COLORS.length];
194
+ const label = el('span');
195
+ label.textContent = series[i].label ?? series[i].dataKey;
196
+ item.appendChild(dot);
197
+ item.appendChild(label);
198
+ legend.appendChild(item);
199
+ }
200
+ wrapper.appendChild(legend);
201
+ }
202
+ //# sourceMappingURL=chart-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-helpers.js","sourceRoot":"","sources":["../../../src/renderer/components/chart-helpers.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Extracted from charts.ts to keep each file under 700 LOC.
5
5
  */
6
- import type { ChartLayout, SeriesEntry } from './charts.js';
6
+ import type { ChartLayout, SeriesEntry } from './chart-helpers.js';
7
7
  export interface TooltipEntry {
8
8
  label: string;
9
9
  value: string | number;
@@ -1 +1 @@
1
- {"version":3,"file":"chart-tooltip.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/chart-tooltip.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,WAAW,CAAA;IACpB,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,aAAa,CAAA;CACrB;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,GAAG,UAAU,CAUlF;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,OAAO,EAAE,YAAY,EAAE,GACtB,IAAI,CA8BN;AAMD,oDAAoD;AACpD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,EACjE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GACrC,IAAI,CA+BN;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,SAAS,EAAE,WAAW,EAAE,EACxB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,EACjE,SAAS,CAAC,EAAE,cAAc,EAC1B,SAAS,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAChC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GACrC,IAAI,CAyDN"}
1
+ {"version":3,"file":"chart-tooltip.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/chart-tooltip.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAIlE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,WAAW,CAAA;IACpB,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,aAAa,CAAA;CACrB;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,GAAG,UAAU,CAUlF;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,OAAO,EAAE,YAAY,EAAE,GACtB,IAAI,CA8BN;AAMD,oDAAoD;AACpD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,EACjE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GACrC,IAAI,CA+BN;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,SAAS,EAAE,WAAW,EAAE,EACxB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,EACjE,SAAS,CAAC,EAAE,cAAc,EAC1B,SAAS,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAChC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GACrC,IAAI,CAyDN"}
@@ -1,25 +1,9 @@
1
1
  /**
2
- * Chart component renderers — BarChart, LineChart, AreaChart, PieChart, etc.
2
+ * Chart component renderers — BarChart, LineChart, AreaChart, PieChart,
3
+ * ScatterChart, RadialChart, Histogram.
3
4
  *
4
- * Charts render as SVG using simple built-in drawing.
5
- * For production use, these can be enhanced with a charting library.
5
+ * Charts render as SVG using simple built-in drawing. Shared axis/SVG/format
6
+ * helpers live in [chart-helpers.ts]; tooltip hit-zones in [chart-tooltip.ts].
6
7
  */
7
8
  export declare function registerChartComponents(): void;
8
- export interface SeriesEntry {
9
- dataKey: string;
10
- label?: string;
11
- color?: string;
12
- yAxisId?: 'left' | 'right';
13
- tooltipFormat?: string;
14
- }
15
- export interface ChartLayout {
16
- /** Usable plot area after axis padding */
17
- plotLeft: number;
18
- plotRight: number;
19
- plotTop: number;
20
- plotBottom: number;
21
- plotWidth: number;
22
- plotHeight: number;
23
- }
24
- export declare function formatYValue(value: number, format?: string): string;
25
9
  //# sourceMappingURL=charts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/charts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wBAAgB,uBAAuB,IAAI,IAAI,CAS9C;AAOD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAID,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB;AA+ID,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnE"}
1
+ {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/charts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,wBAAgB,uBAAuB,IAAI,IAAI,CAS9C"}