@grafloria/element 0.1.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 (61) hide show
  1. package/package.json +41 -0
  2. package/src/index.d.ts +87 -0
  3. package/src/index.js +547 -0
  4. package/src/index.js.map +1 -0
  5. package/src/lib/dashboard-kit/dashboard.d.ts +345 -0
  6. package/src/lib/dashboard-kit/dashboard.js +594 -0
  7. package/src/lib/dashboard-kit/dashboard.js.map +1 -0
  8. package/src/lib/dashboard-kit/grid-binder.d.ts +277 -0
  9. package/src/lib/dashboard-kit/grid-binder.js +1635 -0
  10. package/src/lib/dashboard-kit/grid-binder.js.map +1 -0
  11. package/src/lib/dashboard-kit/grid-mapping.d.ts +141 -0
  12. package/src/lib/dashboard-kit/grid-mapping.js +176 -0
  13. package/src/lib/dashboard-kit/grid-mapping.js.map +1 -0
  14. package/src/lib/dashboard-kit/index.d.ts +5 -0
  15. package/src/lib/dashboard-kit/index.js +33 -0
  16. package/src/lib/dashboard-kit/index.js.map +1 -0
  17. package/src/lib/dashboard-kit/styles.d.ts +25 -0
  18. package/src/lib/dashboard-kit/styles.js +203 -0
  19. package/src/lib/dashboard-kit/styles.js.map +1 -0
  20. package/src/lib/dashboard-kit/widgets.d.ts +112 -0
  21. package/src/lib/dashboard-kit/widgets.js +389 -0
  22. package/src/lib/dashboard-kit/widgets.js.map +1 -0
  23. package/src/lib/diagram-kit/card.d.ts +75 -0
  24. package/src/lib/diagram-kit/card.js +209 -0
  25. package/src/lib/diagram-kit/card.js.map +1 -0
  26. package/src/lib/diagram-kit/editing.d.ts +54 -0
  27. package/src/lib/diagram-kit/editing.js +289 -0
  28. package/src/lib/diagram-kit/editing.js.map +1 -0
  29. package/src/lib/diagram-kit/er.d.ts +73 -0
  30. package/src/lib/diagram-kit/er.js +163 -0
  31. package/src/lib/diagram-kit/er.js.map +1 -0
  32. package/src/lib/diagram-kit/handles.d.ts +181 -0
  33. package/src/lib/diagram-kit/handles.js +325 -0
  34. package/src/lib/diagram-kit/handles.js.map +1 -0
  35. package/src/lib/diagram-kit/index.d.ts +8 -0
  36. package/src/lib/diagram-kit/index.js +38 -0
  37. package/src/lib/diagram-kit/index.js.map +1 -0
  38. package/src/lib/diagram-kit/rows.d.ts +53 -0
  39. package/src/lib/diagram-kit/rows.js +147 -0
  40. package/src/lib/diagram-kit/rows.js.map +1 -0
  41. package/src/lib/diagram-kit/styles.d.ts +18 -0
  42. package/src/lib/diagram-kit/styles.js +114 -0
  43. package/src/lib/diagram-kit/styles.js.map +1 -0
  44. package/src/lib/diagram-kit/uml.d.ts +59 -0
  45. package/src/lib/diagram-kit/uml.js +138 -0
  46. package/src/lib/diagram-kit/uml.js.map +1 -0
  47. package/src/lib/diagram-kit/update.d.ts +133 -0
  48. package/src/lib/diagram-kit/update.js +251 -0
  49. package/src/lib/diagram-kit/update.js.map +1 -0
  50. package/src/lib/grafloria-flow-element.d.ts +48 -0
  51. package/src/lib/grafloria-flow-element.js +271 -0
  52. package/src/lib/grafloria-flow-element.js.map +1 -0
  53. package/src/lib/grafloria.d.ts +61 -0
  54. package/src/lib/grafloria.js +72 -0
  55. package/src/lib/grafloria.js.map +1 -0
  56. package/src/lib/load.d.ts +72 -0
  57. package/src/lib/load.js +255 -0
  58. package/src/lib/load.js.map +1 -0
  59. package/src/lib/node-type-registry.d.ts +39 -0
  60. package/src/lib/node-type-registry.js +50 -0
  61. package/src/lib/node-type-registry.js.map +1 -0
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ /**
3
+ * BUILT-IN WIDGET RENDERERS — what `kind` means when you write no `renderWidget`.
4
+ *
5
+ * `dashboard({ views: [...] })` is data-first: a widget is `{ id, kind, span,
6
+ * rows, data }`. Until now `kind` was a free-form string that only meant
7
+ * something if the page supplied `renderWidget`; omitting it drew a titled
8
+ * empty frame. This module is the other half — six real renderers driven by
9
+ * the DEVELOPER'S OWN `data`, so a dashboard is useful from pure data alone:
10
+ *
11
+ * ```js
12
+ * dashboard({ widgets: [
13
+ * { id: 'rev', kind: 'kpi', span: 3, data: { label: 'Revenue', value: '$6.8M', delta: 12.4 } },
14
+ * { id: 'trend', kind: 'line', span: 8, rows: 2, data: { series: [10, 14, 12, 19] } },
15
+ * ]}); // no renderWidget, no charting library, real widgets
16
+ * ```
17
+ *
18
+ * TWO THINGS THIS DELIBERATELY IS NOT:
19
+ * - A charting library. Every mark is hand-drawn inline SVG (the same
20
+ * technique the dashboard demo uses), so the kit still adds ZERO
21
+ * dependencies and the whole file is readable.
22
+ * - A dataset. Nothing here ships sample numbers; every renderer reads the
23
+ * `data` the developer declared and degrades to an empty-state note when it
24
+ * is missing, partial or the wrong shape. A widget renderer must NEVER
25
+ * throw: it paints into a live board, mid-gesture, on every reflow.
26
+ *
27
+ * `renderWidget` remains the seam for anything richer — and it composes:
28
+ * call `defaultWidgetRenderer(widget, host)` first, then decorate the host
29
+ * (that is exactly what demos/dashboard/dashboard-builder.html does for its
30
+ * focus ring and pin marker).
31
+ */
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.defaultWidgetRenderer = exports.renderTableWidget = exports.renderFunnelWidget = exports.renderDonutWidget = exports.renderBarWidget = exports.renderLineWidget = exports.renderKpiWidget = exports.BUILT_IN_WIDGET_KINDS = void 0;
34
+ const styles_1 = require("./styles");
35
+ /** The kinds `defaultWidgetRenderer` knows; anything else gets the placeholder. */
36
+ exports.BUILT_IN_WIDGET_KINDS = ['kpi', 'line', 'bar', 'donut', 'funnel', 'table'];
37
+ /**
38
+ * Categorical default palette — readable on both light and dark cards. Per-mark
39
+ * overrides win (`slices[].color`); everything else cycles this list.
40
+ */
41
+ const PALETTE = ['#3b52d9', '#0ea5e9', '#14b8a6', '#f59e0b', '#8b5cf6', '#64748b'];
42
+ const colorAt = (i) => PALETTE[((i % PALETTE.length) + PALETTE.length) % PALETTE.length];
43
+ // -- primitives ---------------------------------------------------------------
44
+ const esc = (v) => String(v !== null && v !== void 0 ? v : '').replace(/[&<>"]/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' })[c]);
45
+ /** Finite numbers only — a NaN in the data must not become a NaN in a path. */
46
+ const num = (v, fallback = 0) => (typeof v === 'number' && Number.isFinite(v) ? v : fallback);
47
+ const isNum = (v) => typeof v === 'number' && Number.isFinite(v);
48
+ /** 6730 → '6.7k'. Axis and centre figures only; your `value` is never touched. */
49
+ function compact(n) {
50
+ const a = Math.abs(n);
51
+ if (a >= 1e9)
52
+ return `${(n / 1e9).toFixed(1)}B`;
53
+ if (a >= 1e6)
54
+ return `${(n / 1e6).toFixed(1)}M`;
55
+ if (a >= 1e4)
56
+ return `${(n / 1e3).toFixed(1)}k`;
57
+ return `${Math.round(n * 100) / 100}`;
58
+ }
59
+ /** Round an axis maximum up to a friendly step (762 → 800, 2860 → 3000). */
60
+ function niceMax(v) {
61
+ if (!(v > 0))
62
+ return 1;
63
+ const step = Math.pow(10, Math.floor(Math.log10(v))) / 2;
64
+ return Math.ceil(v / step) * step;
65
+ }
66
+ /** The card shell: `<div class="axdb-widget"><div h/><div b/></div>`, body returned. */
67
+ function card(host, widget, title) {
68
+ var _a, _b;
69
+ const doc = (_a = host.ownerDocument) !== null && _a !== void 0 ? _a : document;
70
+ (0, styles_1.ensureDashboardKitStyles)(doc);
71
+ host.innerHTML = '';
72
+ const root = doc.createElement('div');
73
+ root.className = `axdb-widget axdb-widget--${(_b = widget.kind) !== null && _b !== void 0 ? _b : 'widget'}`;
74
+ const head = doc.createElement('div');
75
+ head.className = 'axdb-widget-h';
76
+ head.textContent = title;
77
+ const body = doc.createElement('div');
78
+ body.className = 'axdb-widget-b';
79
+ root.appendChild(head);
80
+ root.appendChild(body);
81
+ host.appendChild(root);
82
+ return body;
83
+ }
84
+ /** Header text: an explicit title wins, then a data-supplied label, then the kind. */
85
+ function titleOf(widget, label) {
86
+ var _a, _b, _c;
87
+ const t = (_c = (_b = (_a = widget.title) !== null && _a !== void 0 ? _a : (typeof label === 'string' && label ? label : undefined)) !== null && _b !== void 0 ? _b : widget.kind) !== null && _c !== void 0 ? _c : widget.id;
88
+ return String(t);
89
+ }
90
+ /** The one empty state, so every kind fails the same readable way. */
91
+ function empty(body, note = 'no data') {
92
+ body.innerHTML = `<div class="axdb-widget-empty">${esc(note)}</div>`;
93
+ }
94
+ const data = (widget) => { var _a; return ((_a = widget.data) !== null && _a !== void 0 ? _a : {}); };
95
+ const legend = (items, column = false) => `<div class="axdb-lg${column ? ' axdb-lg--col' : ''}">` +
96
+ items.map((i) => `<i><b style="background:${esc(i.color)}"></b>${esc(i.label)}</i>`).join('') +
97
+ '</div>';
98
+ // -- kpi ----------------------------------------------------------------------
99
+ /** `{ label, value, delta?, spark? }` — headline number + change + sparkline. */
100
+ const renderKpiWidget = (widget, host) => {
101
+ var _a;
102
+ const d = data(widget);
103
+ const body = card(host, widget, titleOf(widget, d.label));
104
+ const value = d.value === undefined || d.value === null || d.value === '' ? '—' : d.value;
105
+ let html = `<div class="axdb-kpi-v">${esc(value)}</div>`;
106
+ if (isNum(d.delta)) {
107
+ const up = d.delta >= 0;
108
+ html +=
109
+ `<div class="axdb-kpi-d ${up ? 'up' : 'down'}">${up ? '▲' : '▼'} ${Math.abs(d.delta)}% ` +
110
+ `<span>${esc((_a = d.deltaLabel) !== null && _a !== void 0 ? _a : 'vs previous')}</span></div>`;
111
+ }
112
+ const spark = (Array.isArray(d.spark) ? d.spark : []).filter(isNum);
113
+ if (spark.length > 1) {
114
+ const W = 240;
115
+ const H = 40;
116
+ const max = Math.max(...spark);
117
+ const min = Math.min(...spark);
118
+ const pts = spark.map((v, i) => {
119
+ const x = (i / (spark.length - 1)) * W;
120
+ const y = H - ((v - min) / (max - min || 1)) * (H - 6) - 3;
121
+ return `${x.toFixed(1)},${y.toFixed(1)}`;
122
+ });
123
+ html +=
124
+ `<svg class="axdb-kpi-s" viewBox="0 0 ${W} ${H}" preserveAspectRatio="none" aria-hidden="true">` +
125
+ `<path d="M0,${H} L${pts.join(' L')} L${W},${H} Z" fill="${colorAt(0)}" fill-opacity="0.12"></path>` +
126
+ `<polyline points="${pts.join(' ')}" fill="none" stroke="${colorAt(0)}" stroke-width="2" ` +
127
+ `stroke-linejoin="round" stroke-linecap="round"></polyline></svg>`;
128
+ }
129
+ body.classList.add('axdb-kpi');
130
+ body.innerHTML = html;
131
+ };
132
+ exports.renderKpiWidget = renderKpiWidget;
133
+ // -- line ---------------------------------------------------------------------
134
+ /** Accept both `number[]` and `{name, values}[]`, drop anything unusable. */
135
+ function normalizeSeries(raw) {
136
+ if (!Array.isArray(raw) || raw.length === 0)
137
+ return [];
138
+ if (raw.every((s) => typeof s === 'number')) {
139
+ const values = raw.filter(isNum);
140
+ return values.length ? [{ values }] : [];
141
+ }
142
+ return raw
143
+ .filter((s) => !!s && Array.isArray(s.values))
144
+ .map((s) => ({ name: s.name, values: s.values.filter(isNum) }))
145
+ .filter((s) => s.values.length > 0);
146
+ }
147
+ /** `{ series, labels? }` — area under the first series, a line per series. */
148
+ const renderLineWidget = (widget, host) => {
149
+ const d = data(widget);
150
+ const body = card(host, widget, titleOf(widget));
151
+ const series = normalizeSeries(d.series);
152
+ if (!series.length)
153
+ return empty(body);
154
+ const W = 640;
155
+ const H = 250;
156
+ const pad = { l: 34, r: 12, t: 12, b: 22 };
157
+ const iw = W - pad.l - pad.r;
158
+ const ih = H - pad.t - pad.b;
159
+ const all = series.flatMap((s) => s.values);
160
+ const count = Math.max(...series.map((s) => s.values.length));
161
+ const max = niceMax(Math.max(...all));
162
+ const min = Math.min(0, ...all);
163
+ const xAt = (i) => pad.l + (count > 1 ? (i / (count - 1)) * iw : iw / 2);
164
+ const yAt = (v) => pad.t + ih - ((v - min) / (max - min || 1)) * ih;
165
+ const grid = [0, 0.25, 0.5, 0.75, 1]
166
+ .map((f) => {
167
+ const y = pad.t + ih - f * ih;
168
+ return (`<line x1="${pad.l}" y1="${y.toFixed(1)}" x2="${W - pad.r}" y2="${y.toFixed(1)}" ` +
169
+ `stroke="var(--axdb-grid)" stroke-width="1"></line>` +
170
+ `<text x="${pad.l - 6}" y="${(y + 3).toFixed(1)}" text-anchor="end" font-size="9" ` +
171
+ `fill="var(--axdb-muted)">${esc(compact(min + f * (max - min)))}</text>`);
172
+ })
173
+ .join('');
174
+ const labels = Array.isArray(d.labels) ? d.labels : [];
175
+ const every = labels.length > 8 ? 2 : 1;
176
+ const ticks = labels
177
+ .slice(0, count)
178
+ .map((l, i) => i % every === 0
179
+ ? `<text x="${xAt(i).toFixed(1)}" y="${H - 6}" text-anchor="middle" font-size="9" ` +
180
+ `fill="var(--axdb-muted)">${esc(l)}</text>`
181
+ : '')
182
+ .join('');
183
+ const marks = series
184
+ .map((s, si) => {
185
+ const pts = s.values.map((v, i) => `${xAt(i).toFixed(1)},${yAt(v).toFixed(1)}`).join(' ');
186
+ const area = si === 0 && s.values.length > 1
187
+ ? `<path d="M${xAt(0).toFixed(1)},${(pad.t + ih).toFixed(1)} L${pts.replace(/ /g, ' L')} ` +
188
+ `L${xAt(s.values.length - 1).toFixed(1)},${(pad.t + ih).toFixed(1)} Z" ` +
189
+ `fill="${colorAt(si)}" fill-opacity="0.10"></path>`
190
+ : '';
191
+ return (area +
192
+ `<polyline points="${pts}" fill="none" stroke="${colorAt(si)}" stroke-width="${si === 0 ? 2.4 : 1.8}" ` +
193
+ `stroke-linejoin="round" stroke-linecap="round"></polyline>`);
194
+ })
195
+ .join('');
196
+ const named = series.filter((s) => s.name);
197
+ if (named.length)
198
+ body.classList.add('axdb-has-lg');
199
+ body.innerHTML =
200
+ `<svg viewBox="0 0 ${W} ${H}" preserveAspectRatio="xMidYMid meet" role="img" ` +
201
+ `aria-label="${esc(titleOf(widget))}">${grid}${ticks}${marks}</svg>` +
202
+ (named.length ? legend(series.map((s, i) => { var _a; return ({ label: String((_a = s.name) !== null && _a !== void 0 ? _a : ''), color: colorAt(i) }); })) : '');
203
+ };
204
+ exports.renderLineWidget = renderLineWidget;
205
+ // -- bar ----------------------------------------------------------------------
206
+ /** `{ bars: [{label, value}] }` — columns, value above, category below. */
207
+ const renderBarWidget = (widget, host) => {
208
+ const d = data(widget);
209
+ const body = card(host, widget, titleOf(widget));
210
+ const bars = (Array.isArray(d.bars) ? d.bars : []).filter((b) => !!b);
211
+ if (!bars.length)
212
+ return empty(body);
213
+ const W = 640;
214
+ const H = 250;
215
+ const pad = { l: 34, r: 12, t: 12, b: 26 };
216
+ const iw = W - pad.l - pad.r;
217
+ const ih = H - pad.t - pad.b;
218
+ const max = niceMax(Math.max(...bars.map((b) => num(b.value))));
219
+ const slot = iw / bars.length;
220
+ const bw = slot * 0.56;
221
+ const grid = [0, 0.5, 1]
222
+ .map((f) => {
223
+ const y = pad.t + ih - f * ih;
224
+ return (`<line x1="${pad.l}" y1="${y.toFixed(1)}" x2="${W - pad.r}" y2="${y.toFixed(1)}" ` +
225
+ `stroke="var(--axdb-grid)" stroke-width="1"></line>` +
226
+ `<text x="${pad.l - 6}" y="${(y + 3).toFixed(1)}" text-anchor="end" font-size="9" ` +
227
+ `fill="var(--axdb-muted)">${esc(compact(f * max))}</text>`);
228
+ })
229
+ .join('');
230
+ const marks = bars
231
+ .map((b, i) => {
232
+ var _a;
233
+ const v = Math.max(0, num(b.value));
234
+ const h = (v / max) * ih;
235
+ const x = pad.l + i * slot + (slot - bw) / 2;
236
+ const y = pad.t + ih - h;
237
+ return (`<rect x="${x.toFixed(1)}" y="${y.toFixed(1)}" width="${bw.toFixed(1)}" height="${h.toFixed(1)}" ` +
238
+ `rx="4" fill="${colorAt(i)}"></rect>` +
239
+ `<text x="${(x + bw / 2).toFixed(1)}" y="${(y - 4).toFixed(1)}" text-anchor="middle" font-size="9.5" ` +
240
+ `font-weight="600" fill="var(--axdb-ink)">${esc(compact(num(b.value)))}</text>` +
241
+ `<text x="${(x + bw / 2).toFixed(1)}" y="${H - 8}" text-anchor="middle" font-size="9" ` +
242
+ `fill="var(--axdb-muted)">${esc((_a = b.label) !== null && _a !== void 0 ? _a : '')}</text>`);
243
+ })
244
+ .join('');
245
+ body.innerHTML =
246
+ `<svg viewBox="0 0 ${W} ${H}" preserveAspectRatio="xMidYMid meet" role="img" ` +
247
+ `aria-label="${esc(titleOf(widget))}">${grid}${marks}</svg>`;
248
+ };
249
+ exports.renderBarWidget = renderBarWidget;
250
+ // -- donut --------------------------------------------------------------------
251
+ /** One arc of the ring, as an SVG path command. */
252
+ function arcPath(cx, cy, r, a0, a1) {
253
+ const at = (a) => [cx + r * Math.cos(a), cy + r * Math.sin(a)];
254
+ const [x0, y0] = at(a0);
255
+ const [x1, y1] = at(a1);
256
+ return `M${x0.toFixed(2)},${y0.toFixed(2)} A${r},${r} 0 ${a1 - a0 > Math.PI ? 1 : 0} 1 ${x1.toFixed(2)},${y1.toFixed(2)}`;
257
+ }
258
+ /** `{ slices: [{label, value, color?}], centerLabel? }` — ring + legend. */
259
+ const renderDonutWidget = (widget, host) => {
260
+ var _a, _b;
261
+ const d = data(widget);
262
+ const body = card(host, widget, titleOf(widget));
263
+ const slices = (Array.isArray(d.slices) ? d.slices : []).filter((s) => !!s && num(s.value) > 0);
264
+ const total = slices.reduce((s, x) => s + num(x.value), 0);
265
+ if (!slices.length || total <= 0)
266
+ return empty(body);
267
+ const cx = 90;
268
+ const cy = 90;
269
+ const r = 66;
270
+ let a = -Math.PI / 2;
271
+ const segs = slices
272
+ .map((s, i) => {
273
+ var _a;
274
+ const sweep = (num(s.value) / total) * Math.PI * 2;
275
+ const a1 = a + sweep;
276
+ // A hair of padding each side keeps neighbouring arcs visually separate —
277
+ // clamped so a very thin slice cannot invert into a backwards arc.
278
+ const inset = Math.min(0.02, sweep / 4);
279
+ const path = arcPath(cx, cy, r, a + inset, a1 - inset);
280
+ a = a1;
281
+ return `<path d="${path}" fill="none" stroke="${esc((_a = s.color) !== null && _a !== void 0 ? _a : colorAt(i))}" stroke-width="26" stroke-linecap="round"></path>`;
282
+ })
283
+ .join('');
284
+ body.classList.add('axdb-donut');
285
+ body.innerHTML =
286
+ `<svg viewBox="0 0 180 180" preserveAspectRatio="xMidYMid meet" role="img" aria-label="${esc(titleOf(widget))}">` +
287
+ segs +
288
+ `<text x="${cx}" y="${cy - 2}" text-anchor="middle" font-size="20" font-weight="700" ` +
289
+ `fill="var(--axdb-ink)">${esc((_a = d.centerLabel) !== null && _a !== void 0 ? _a : compact(total))}</text>` +
290
+ `<text x="${cx}" y="${cy + 16}" text-anchor="middle" font-size="10" ` +
291
+ `fill="var(--axdb-muted)">${esc((_b = d.centerCaption) !== null && _b !== void 0 ? _b : 'total')}</text>` +
292
+ '</svg>' +
293
+ legend(slices.map((s, i) => {
294
+ var _a, _b;
295
+ return ({
296
+ label: `${(_a = s.label) !== null && _a !== void 0 ? _a : ''} · ${Math.round((num(s.value) / total) * 100)}%`,
297
+ color: (_b = s.color) !== null && _b !== void 0 ? _b : colorAt(i),
298
+ });
299
+ }), true);
300
+ };
301
+ exports.renderDonutWidget = renderDonutWidget;
302
+ // -- funnel -------------------------------------------------------------------
303
+ /** `{ stages: [{label, value}] }` — centred bars scaled against the first stage. */
304
+ const renderFunnelWidget = (widget, host) => {
305
+ const d = data(widget);
306
+ const body = card(host, widget, titleOf(widget));
307
+ const stages = (Array.isArray(d.stages) ? d.stages : []).filter((s) => !!s);
308
+ if (!stages.length)
309
+ return empty(body);
310
+ const W = 260;
311
+ const rowH = 34;
312
+ const gap = 8;
313
+ const H = stages.length * (rowH + gap);
314
+ const max = Math.max(...stages.map((s) => num(s.value)), 1);
315
+ const track = W - 90;
316
+ const marks = stages
317
+ .map((s, i) => {
318
+ var _a;
319
+ const w = Math.max(2, (num(s.value) / max) * track);
320
+ const x = (track - w) / 2 + 8;
321
+ const y = i * (rowH + gap);
322
+ return (`<rect x="${x.toFixed(1)}" y="${y}" width="${w.toFixed(1)}" height="${rowH}" rx="6" fill="${colorAt(i)}"></rect>` +
323
+ `<text x="${(x + w / 2).toFixed(1)}" y="${y + rowH / 2 + 4}" text-anchor="middle" font-size="11" ` +
324
+ `font-weight="600" fill="#fff">${esc(compact(num(s.value)))}</text>` +
325
+ `<text x="${W - 78}" y="${y + rowH / 2 + 4}" font-size="10.5" fill="var(--axdb-muted)">${esc((_a = s.label) !== null && _a !== void 0 ? _a : '')}</text>`);
326
+ })
327
+ .join('');
328
+ body.innerHTML =
329
+ `<svg viewBox="0 0 ${W} ${H}" preserveAspectRatio="xMidYMid meet" role="img" ` +
330
+ `aria-label="${esc(titleOf(widget))}">${marks}</svg>`;
331
+ };
332
+ exports.renderFunnelWidget = renderFunnelWidget;
333
+ // -- table --------------------------------------------------------------------
334
+ /** `{ columns, rows }` — plain rows; numeric cells right-align themselves. */
335
+ const renderTableWidget = (widget, host) => {
336
+ const d = data(widget);
337
+ const body = card(host, widget, titleOf(widget));
338
+ const columns = Array.isArray(d.columns) ? d.columns : [];
339
+ const rows = (Array.isArray(d.rows) ? d.rows : []).filter((r) => Array.isArray(r));
340
+ if (!columns.length && !rows.length)
341
+ return empty(body);
342
+ const head = columns.length
343
+ ? `<thead><tr>${columns.map((c) => `<th>${esc(c)}</th>`).join('')}</tr></thead>`
344
+ : '';
345
+ const cols = columns.length || Math.max(0, ...rows.map((r) => r.length));
346
+ const tbody = rows
347
+ .map((r) => '<tr>' +
348
+ Array.from({ length: cols }, (_, i) => r[i])
349
+ .map((cell) => `<td class="${isNum(cell) ? 'num' : ''}">${esc(cell !== null && cell !== void 0 ? cell : '')}</td>`)
350
+ .join('') +
351
+ '</tr>')
352
+ .join('');
353
+ body.classList.add('axdb-scroll');
354
+ body.innerHTML = `<table class="axdb-table">${head}<tbody>${tbody}</tbody></table>`;
355
+ };
356
+ exports.renderTableWidget = renderTableWidget;
357
+ // -- dispatch -----------------------------------------------------------------
358
+ const BY_KIND = {
359
+ kpi: exports.renderKpiWidget,
360
+ line: exports.renderLineWidget,
361
+ bar: exports.renderBarWidget,
362
+ donut: exports.renderDonutWidget,
363
+ funnel: exports.renderFunnelWidget,
364
+ table: exports.renderTableWidget,
365
+ };
366
+ /**
367
+ * Paint `widget` into `host` by its `kind` — `dashboard()`'s default
368
+ * `renderWidget`, and the composable base for your own.
369
+ *
370
+ * An unknown (or absent) kind falls back to the titled placeholder frame, so a
371
+ * board of not-yet-implemented widgets still lays out and is still testable.
372
+ * Never throws: bad data paints an empty state.
373
+ */
374
+ const defaultWidgetRenderer = (widget, host) => {
375
+ var _a;
376
+ const renderer = BY_KIND[(_a = widget === null || widget === void 0 ? void 0 : widget.kind) !== null && _a !== void 0 ? _a : ''];
377
+ if (renderer) {
378
+ try {
379
+ renderer(widget, host);
380
+ return;
381
+ }
382
+ catch (_b) {
383
+ /* a broken widget must not take the board down — fall through to the frame */
384
+ }
385
+ }
386
+ card(host, widget !== null && widget !== void 0 ? widget : { id: '' }, titleOf(widget !== null && widget !== void 0 ? widget : { id: '' }));
387
+ };
388
+ exports.defaultWidgetRenderer = defaultWidgetRenderer;
389
+ //# sourceMappingURL=widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../../../../../libs/element/src/lib/dashboard-kit/widgets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Card building — the ONE source of truth for the ER/UML card HTML trees, the
3
+ * layout constants and the size math.
4
+ *
5
+ * Both the builders (er.ts / uml.ts, which emit the initial render() spec) and
6
+ * the live editor (update.ts, which regenerates a card after an edit) call
7
+ * these. Keeping them here is what stops the two paths from drifting: an edited
8
+ * card is byte-for-byte the card the builder would have produced for the same
9
+ * data, so a re-rendered table looks identical to a freshly built one.
10
+ *
11
+ * `editable` threads through: when true the card grows the in-canvas editing
12
+ * chrome (a per-row delete control and a trailing "add" affordance). That
13
+ * chrome is DELIBERATELY not a `.axk-row`/`.axk-member` — the row-selection and
14
+ * port-reconciliation code count those, and the affordance is neither a column
15
+ * nor a member.
16
+ */
17
+ import type { ErColumn, ErEntitySpec } from './er';
18
+ import type { UmlClassSpec } from './uml';
19
+ /** Row height / header height of the entity card — sizing is derived from these. */
20
+ export declare const ER_ROW_H = 25;
21
+ export declare const ER_HEAD_H = 28;
22
+ /**
23
+ * Auto-height slack: the html wrapper's padding (8px) + the card's 1px
24
+ * top/bottom borders + the head rendering slightly under ER_HEAD_H. Measured
25
+ * live — with less, an auto-sized card overflows a few px, and the wheel
26
+ * delegation would steal that much scroll on EVERY card.
27
+ */
28
+ export declare const ER_BORDER_SLACK = 9;
29
+ /** The editable "add column" affordance row's height (excluded from row math). */
30
+ export declare const ER_ADD_H = 26;
31
+ /** UML compartment metrics (mirrors the pre-kit demos, measured live). */
32
+ export declare const UML_LINE_H = 19;
33
+ export declare const UML_NAME_H = 30;
34
+ export declare const UML_STEREO_H = 14;
35
+ export declare const UML_PAD = 8;
36
+ /** Node-local y of a row's centre (the +1 offsets past the card's top border). */
37
+ export declare function erRowCenterY(rowIndex: number): number;
38
+ /** Inverse of {@link erRowCenterY}: which column row a pinned port sits on. */
39
+ export declare function rowIndexFromY(y: number): number;
40
+ /** A node's html-content tree node (the shape the renderer's html layer eats). */
41
+ export interface HtmlNode {
42
+ tag: string;
43
+ className?: string;
44
+ text?: string;
45
+ children?: HtmlNode[];
46
+ }
47
+ /**
48
+ * The `.axk-entity` content tree — the SAME tree er.ts ships and update.ts
49
+ * regenerates. `editable` adds the delete control per row and the trailing add
50
+ * affordance.
51
+ */
52
+ export declare function entityCardContent(entity: ErEntitySpec, editable?: boolean): HtmlNode;
53
+ /** Card height for an entity — explicit height wins, else derived from columns. */
54
+ export declare function entityAutoHeight(entity: ErEntitySpec, editable?: boolean): number;
55
+ /**
56
+ * The `.axk-uml` content tree. `editable` adds a delete control per member and
57
+ * a trailing add affordance in each compartment.
58
+ */
59
+ export declare function classCardContent(cls: UmlClassSpec, editable?: boolean): HtmlNode;
60
+ /** Card height for a class — explicit height wins, else derived from members. */
61
+ export declare function classAutoHeight(cls: UmlClassSpec, editable?: boolean): number;
62
+ /**
63
+ * Match old columns to new columns for port reconciliation. Returns a map from
64
+ * OLD index → NEW index; an old index absent from the map is a REMOVED column
65
+ * (its pinned ports and their edges are dropped).
66
+ *
67
+ * Three passes, most-certain first, so a single edit is always read the way a
68
+ * human means it:
69
+ * 1. object identity — reorder / add / remove that preserved references;
70
+ * 2. name — a retype (same name, new object) or a rebuilt array;
71
+ * 3. positional remainder — the leftovers matched in order, which is exactly
72
+ * what a rename is (one old + one new in the same slot). Without pass 3 a
73
+ * rename reads as remove+add and the edge is severed.
74
+ */
75
+ export declare function matchColumns(oldCols: ErColumn[], newCols: ErColumn[]): Map<number, number>;