@dlh.io/bideux 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 (90) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +90 -0
  3. package/dist/all.d.ts +14 -0
  4. package/dist/all.js +15 -0
  5. package/dist/all.js.map +1 -0
  6. package/dist/chunk-62IQGXLW.js +11470 -0
  7. package/dist/chunk-62IQGXLW.js.map +1 -0
  8. package/dist/chunk-75CRTQK7.js +315 -0
  9. package/dist/chunk-75CRTQK7.js.map +1 -0
  10. package/dist/chunk-FVO6E22Z.js +225 -0
  11. package/dist/chunk-FVO6E22Z.js.map +1 -0
  12. package/dist/chunk-GRITOB4M.js +337 -0
  13. package/dist/chunk-GRITOB4M.js.map +1 -0
  14. package/dist/chunk-HPFHIZWO.js +40 -0
  15. package/dist/chunk-HPFHIZWO.js.map +1 -0
  16. package/dist/chunk-IMNUQGHE.js +2864 -0
  17. package/dist/chunk-IMNUQGHE.js.map +1 -0
  18. package/dist/chunk-LHD445PJ.js +571 -0
  19. package/dist/chunk-LHD445PJ.js.map +1 -0
  20. package/dist/chunk-LPLBBHOW.js +386 -0
  21. package/dist/chunk-LPLBBHOW.js.map +1 -0
  22. package/dist/chunk-NGM5R3LW.js +881 -0
  23. package/dist/chunk-NGM5R3LW.js.map +1 -0
  24. package/dist/chunk-OMPR32AR.js +1320 -0
  25. package/dist/chunk-OMPR32AR.js.map +1 -0
  26. package/dist/chunk-QDQ5VVTC.js +255 -0
  27. package/dist/chunk-QDQ5VVTC.js.map +1 -0
  28. package/dist/chunk-RRWZKNDZ.js +1004 -0
  29. package/dist/chunk-RRWZKNDZ.js.map +1 -0
  30. package/dist/chunk-SRWIBMEB.js +178 -0
  31. package/dist/chunk-SRWIBMEB.js.map +1 -0
  32. package/dist/element/chunk-AOKCBPMV.js +1646 -0
  33. package/dist/element/chunk-AOKCBPMV.js.map +1 -0
  34. package/dist/element/chunk-B67SYRQP.js +281 -0
  35. package/dist/element/chunk-B67SYRQP.js.map +1 -0
  36. package/dist/element/chunk-FNRVFA2C.js +55 -0
  37. package/dist/element/chunk-FNRVFA2C.js.map +1 -0
  38. package/dist/element/chunk-G3C722QP.js +4707 -0
  39. package/dist/element/chunk-G3C722QP.js.map +1 -0
  40. package/dist/element/chunk-H5IFOSQP.js +346 -0
  41. package/dist/element/chunk-H5IFOSQP.js.map +1 -0
  42. package/dist/element/chunk-LXR3CLCN.js +30 -0
  43. package/dist/element/chunk-LXR3CLCN.js.map +1 -0
  44. package/dist/element/chunk-TFV4CJR4.js +183 -0
  45. package/dist/element/chunk-TFV4CJR4.js.map +1 -0
  46. package/dist/element/chunk-TXSK3CIN.js +859 -0
  47. package/dist/element/chunk-TXSK3CIN.js.map +1 -0
  48. package/dist/element/chunk-WDTTBY3S.js +45 -0
  49. package/dist/element/chunk-WDTTBY3S.js.map +1 -0
  50. package/dist/element/chunk-ZI3RYCAR.js +233 -0
  51. package/dist/element/chunk-ZI3RYCAR.js.map +1 -0
  52. package/dist/element/element.d.ts +3044 -0
  53. package/dist/element/element.js +146554 -0
  54. package/dist/element/element.js.map +1 -0
  55. package/dist/element/revo-grid.entry-7FHEBN3O.js +4817 -0
  56. package/dist/element/revo-grid.entry-7FHEBN3O.js.map +1 -0
  57. package/dist/element/revogr-attribution_7.entry-LSOFVZRA.js +1328 -0
  58. package/dist/element/revogr-attribution_7.entry-LSOFVZRA.js.map +1 -0
  59. package/dist/element/revogr-clipboard_3.entry-V74UIBPJ.js +494 -0
  60. package/dist/element/revogr-clipboard_3.entry-V74UIBPJ.js.map +1 -0
  61. package/dist/element/revogr-data_4.entry-2UBOKTFN.js +1041 -0
  62. package/dist/element/revogr-data_4.entry-2UBOKTFN.js.map +1 -0
  63. package/dist/element/revogr-filter-panel.entry-B24PLQU4.js +552 -0
  64. package/dist/element/revogr-filter-panel.entry-B24PLQU4.js.map +1 -0
  65. package/dist/index.d.ts +1041 -0
  66. package/dist/index.js +10 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/react.d.ts +1915 -0
  69. package/dist/react.js +14 -0
  70. package/dist/react.js.map +1 -0
  71. package/dist/renderers/echarts.d.ts +44 -0
  72. package/dist/renderers/echarts.js +6 -0
  73. package/dist/renderers/echarts.js.map +1 -0
  74. package/dist/renderers/index.d.ts +48 -0
  75. package/dist/renderers/index.js +12 -0
  76. package/dist/renderers/index.js.map +1 -0
  77. package/dist/renderers/revogrid.d.ts +76 -0
  78. package/dist/renderers/revogrid.js +6 -0
  79. package/dist/renderers/revogrid.js.map +1 -0
  80. package/dist/renderers/tabulator.d.ts +37 -0
  81. package/dist/renderers/tabulator.js +6 -0
  82. package/dist/renderers/tabulator.js.map +1 -0
  83. package/dist/result-table-CPls-277.d.ts +1885 -0
  84. package/dist/schema/dashboard.schema.json +4374 -0
  85. package/dist/schema/semantic-model.schema.json +1200 -0
  86. package/dist/schema/widget.schema.json +1793 -0
  87. package/dist/styles.css +156 -0
  88. package/dist/theme.css +1789 -0
  89. package/dist/types-CHFSsU_X.d.ts +1007 -0
  90. package/package.json +119 -0
@@ -0,0 +1,571 @@
1
+ import { tableExportModel } from './chunk-QDQ5VVTC.js';
2
+ import { rendererFrame, getClickInteraction } from './chunk-75CRTQK7.js';
3
+
4
+ // ../dashboard-renderers/src/types.ts
5
+ var PIVOT_META_PROP = "__pivotMeta";
6
+
7
+ // ../dashboard-renderers/src/pivot-columns.ts
8
+ function isPivotColumnGroup(definition) {
9
+ return "children" in definition;
10
+ }
11
+ function readPivotPayload(result) {
12
+ const pivot = result?.pivot;
13
+ if (typeof pivot !== "object" || pivot === null || Array.isArray(pivot)) {
14
+ return null;
15
+ }
16
+ const candidate = pivot;
17
+ if (!Array.isArray(candidate.rows) || !Array.isArray(candidate.measures)) {
18
+ return null;
19
+ }
20
+ if (!Array.isArray(candidate.column_tree) || !Array.isArray(candidate.row_fields)) {
21
+ return null;
22
+ }
23
+ return pivot;
24
+ }
25
+ function buildPivotColumns(payload, collapsedColumns = /* @__PURE__ */ new Set()) {
26
+ const rowColumns = payload.row_fields.map(
27
+ (field) => ({
28
+ prop: field.key,
29
+ name: field.label,
30
+ columnKey: null,
31
+ measure: null,
32
+ isTotal: false,
33
+ isRowField: true,
34
+ pinStart: true
35
+ })
36
+ );
37
+ return [
38
+ ...rowColumns,
39
+ ...payload.column_tree.map(
40
+ (node) => toColumnDefinition(node, collapsedColumns)
41
+ )
42
+ ];
43
+ }
44
+ function toColumnDefinition(node, collapsedColumns) {
45
+ if (node.children.length > 0) {
46
+ const children = visibleChildren(node, collapsedColumns);
47
+ return {
48
+ name: node.label,
49
+ key: node.key,
50
+ foldable: node.children.some((child) => child.is_group_total),
51
+ folded: collapsedColumns.has(node.key),
52
+ leafCount: countValueLeaves(node),
53
+ children: children.map(
54
+ (child) => toColumnDefinition(child, collapsedColumns)
55
+ )
56
+ };
57
+ }
58
+ return {
59
+ prop: node.column ?? node.key,
60
+ name: node.label,
61
+ columnKey: node.column,
62
+ measure: node.measure,
63
+ isTotal: node.is_total,
64
+ isRowField: false,
65
+ pinStart: false
66
+ };
67
+ }
68
+ function countValueLeaves(node) {
69
+ if (node.children.length === 0) {
70
+ return node.is_group_total || node.is_total ? 0 : 1;
71
+ }
72
+ return node.children.reduce((sum, child) => sum + countValueLeaves(child), 0);
73
+ }
74
+ function visibleChildren(node, collapsedColumns) {
75
+ if (!collapsedColumns.has(node.key)) return node.children;
76
+ const totals = node.children.filter((child) => child.is_group_total);
77
+ return totals.length > 0 ? totals : node.children;
78
+ }
79
+ function pivotColumnGroups(payload) {
80
+ const groups = [];
81
+ const walk = (nodes, prefix) => {
82
+ for (const node of nodes) {
83
+ if (node.children.length === 0) continue;
84
+ const path = [...prefix, node.label];
85
+ if (node.children.some((child) => child.is_group_total)) {
86
+ groups.push({ key: node.key, label: path.join(" / ") });
87
+ }
88
+ walk(node.children, path);
89
+ }
90
+ };
91
+ walk(payload.column_tree, []);
92
+ return groups;
93
+ }
94
+ function pivotValueColumns(payload, collapsedColumns = /* @__PURE__ */ new Set()) {
95
+ const columns = [];
96
+ const walk = (nodes, prefix) => {
97
+ for (const node of nodes) {
98
+ const path = [...prefix, node.label];
99
+ if (node.children.length === 0) {
100
+ if (node.column !== null) {
101
+ columns.push({ key: node.column, label: path.join(" / ") });
102
+ }
103
+ continue;
104
+ }
105
+ walk(visibleChildren(node, collapsedColumns), path);
106
+ }
107
+ };
108
+ walk(payload.column_tree, []);
109
+ return columns;
110
+ }
111
+ function buildPivotRows(payload, rows = payload.rows) {
112
+ const fields = payload.row_fields.map((field) => field.key);
113
+ const spellOutPath = payload.subtotals === "none";
114
+ return rows.map(
115
+ (row) => toGridRow(row, fields, spellOutPath, payload.column_keys)
116
+ );
117
+ }
118
+ function buildPivotTotalRow(payload) {
119
+ if (payload.total_row === null) return null;
120
+ const fields = payload.row_fields.map((field) => field.key);
121
+ return toGridRow(payload.total_row, fields, false, payload.column_keys);
122
+ }
123
+ function pivotRowFilters(payload, meta) {
124
+ const filters = {};
125
+ payload.row_fields.forEach((field, index) => {
126
+ const value = meta.path[index];
127
+ if (value !== void 0) filters[field.key] = value;
128
+ });
129
+ return filters;
130
+ }
131
+ function pivotColumnFilters(payload, prop) {
132
+ const walk = (nodes, path) => {
133
+ for (const node of nodes) {
134
+ if (node.children.length === 0) {
135
+ if (node.column !== prop) continue;
136
+ if (node.is_total) return {};
137
+ const filters = {};
138
+ payload.column_fields.forEach((field, index) => {
139
+ const value = path[index];
140
+ if (value !== void 0) filters[field.key] = value;
141
+ });
142
+ return filters;
143
+ }
144
+ const found = walk(
145
+ node.children,
146
+ node.is_total ? path : [...path, node.label]
147
+ );
148
+ if (found !== null) return found;
149
+ }
150
+ return null;
151
+ };
152
+ return walk(payload.column_tree, []);
153
+ }
154
+ function toGridRow(row, fields, spellOutPath, columnKeys) {
155
+ const meta = {
156
+ key: row.key,
157
+ label: row.label,
158
+ path: row.path,
159
+ depth: row.depth,
160
+ kind: row.kind
161
+ };
162
+ const grid = { [PIVOT_META_PROP]: meta };
163
+ fields.forEach((field, index) => {
164
+ if (row.kind === "grand_total" || row.kind === "other") {
165
+ grid[field] = index === 0 ? row.label : "";
166
+ return;
167
+ }
168
+ if (spellOutPath) {
169
+ grid[field] = row.path[index] ?? "";
170
+ return;
171
+ }
172
+ grid[field] = index === row.depth ? row.label : "";
173
+ });
174
+ for (const key of columnKeys) {
175
+ const value = row.cells[key];
176
+ grid[key] = value === void 0 ? null : value;
177
+ }
178
+ return grid;
179
+ }
180
+ function pivotMeasuresByKey(payload) {
181
+ return new Map(payload.measures.map((measure) => [measure.key, measure]));
182
+ }
183
+ function pivotRowMeta(row) {
184
+ const meta = row?.[PIVOT_META_PROP];
185
+ if (typeof meta !== "object" || meta === null || Array.isArray(meta)) {
186
+ return null;
187
+ }
188
+ const candidate = meta;
189
+ if (typeof candidate.depth !== "number" || typeof candidate.kind !== "string") {
190
+ return null;
191
+ }
192
+ return meta;
193
+ }
194
+ function formatPivotValue(value, measure, emptyValue) {
195
+ if (value === null || value === void 0 || value === "") return emptyValue;
196
+ const number = typeof value === "number" ? value : Number(value);
197
+ if (!Number.isFinite(number)) return emptyValue;
198
+ const format = measure?.format ?? "number";
199
+ const decimals = measure?.decimals ?? void 0;
200
+ if (format === "currency") {
201
+ return new Intl.NumberFormat("en-US", {
202
+ style: "currency",
203
+ currency: "USD",
204
+ minimumFractionDigits: decimals ?? 0,
205
+ maximumFractionDigits: decimals ?? 0
206
+ }).format(number);
207
+ }
208
+ if (format === "percent") {
209
+ return new Intl.NumberFormat("en-US", {
210
+ style: "percent",
211
+ minimumFractionDigits: decimals ?? 1,
212
+ maximumFractionDigits: decimals ?? 1
213
+ }).format(number);
214
+ }
215
+ return new Intl.NumberFormat("en-US", {
216
+ minimumFractionDigits: decimals ?? 0,
217
+ maximumFractionDigits: decimals ?? (Number.isInteger(number) ? 0 : 2)
218
+ }).format(number);
219
+ }
220
+ function pivotHeatmapIntensity(value, range) {
221
+ if (range === void 0) return null;
222
+ if (typeof value !== "number" || !Number.isFinite(value)) return null;
223
+ const span = range.max - range.min;
224
+ if (span <= 0) return null;
225
+ const ratio = (value - range.min) / span;
226
+ return Math.min(1, Math.max(0, ratio));
227
+ }
228
+ function pivotTruncationNote(payload) {
229
+ const notes = [];
230
+ if (payload.truncated.row_groups > 0) {
231
+ const shown = payload.truncated.row_groups_total - payload.truncated.row_groups;
232
+ const rolled = payload.truncated.rolled_up > 0 ? `, with ${payload.truncated.rolled_up} in Other` : "";
233
+ notes.push(
234
+ `${shown} of ${payload.truncated.row_groups_total} row groups${rolled}`
235
+ );
236
+ }
237
+ if (payload.truncated.columns > 0) {
238
+ const shown = payload.truncated.columns_total - payload.truncated.columns;
239
+ notes.push(`${shown} of ${payload.truncated.columns_total} columns`);
240
+ }
241
+ return notes.length > 0 ? `Showing ${notes.join(" and ")}.` : null;
242
+ }
243
+
244
+ // ../dashboard-renderers/src/pivot-view.ts
245
+ function initialPivotViewState(payload, capture = false) {
246
+ return {
247
+ collapsed: initialCollapsed(payload, capture),
248
+ collapsedColumns: initialCollapsedColumns(payload, capture),
249
+ search: "",
250
+ filters: {},
251
+ sort: null
252
+ };
253
+ }
254
+ function initialCollapsed(payload, capture) {
255
+ if (capture && typeof payload.snapshot_expand === "number") {
256
+ return new Set(
257
+ payload.rows.filter(
258
+ (row) => row.kind === "group" && row.depth >= payload.snapshot_expand
259
+ ).map((row) => row.key)
260
+ );
261
+ }
262
+ return payload.subtotals === "collapsed" ? new Set(pivotGroupKeys(payload)) : /* @__PURE__ */ new Set();
263
+ }
264
+ function initialCollapsedColumns(payload, capture) {
265
+ if (!capture || typeof payload.snapshot_expand_columns !== "number") {
266
+ return /* @__PURE__ */ new Set();
267
+ }
268
+ const open = payload.snapshot_expand_columns;
269
+ const folded = /* @__PURE__ */ new Set();
270
+ const walk = (nodes, level) => {
271
+ for (const node of nodes) {
272
+ if (node.children.length === 0 || node.is_total) continue;
273
+ if (level >= open && node.children.some((child) => child.is_group_total)) {
274
+ folded.add(node.key);
275
+ continue;
276
+ }
277
+ walk(node.children, level + 1);
278
+ }
279
+ };
280
+ walk(payload.column_tree, 0);
281
+ return folded;
282
+ }
283
+ function pivotOpenRowLevels(payload, state) {
284
+ if (state.collapsed.size === 0) return null;
285
+ let shallowest = null;
286
+ for (const row of payload.rows) {
287
+ if (row.kind !== "group" || !state.collapsed.has(row.key)) continue;
288
+ if (shallowest === null || row.depth < shallowest) {
289
+ shallowest = row.depth;
290
+ }
291
+ }
292
+ return shallowest;
293
+ }
294
+ function pivotOpenColumnLevels(payload, state) {
295
+ if (state.collapsedColumns.size === 0) return null;
296
+ let shallowest = null;
297
+ const walk = (nodes, level) => {
298
+ for (const node of nodes) {
299
+ if (node.children.length === 0 || node.is_total) continue;
300
+ if (state.collapsedColumns.has(node.key)) {
301
+ if (shallowest === null || level < shallowest) shallowest = level;
302
+ continue;
303
+ }
304
+ walk(node.children, level + 1);
305
+ }
306
+ };
307
+ walk(payload.column_tree, 0);
308
+ return shallowest;
309
+ }
310
+ function pivotSignature(payload) {
311
+ return [
312
+ payload.row_fields.map((field) => field.key).join(","),
313
+ payload.column_fields.map((field) => field.key).join(","),
314
+ payload.measures.map((measure) => measure.key).join(","),
315
+ payload.subtotals
316
+ ].join("|");
317
+ }
318
+ function pivotGroupKeys(payload) {
319
+ return payload.rows.filter((row) => row.kind === "group").map((row) => row.key);
320
+ }
321
+ function pivotHasGroups(payload) {
322
+ return payload.rows.some((row) => row.kind === "group");
323
+ }
324
+ function pivotFilterCount(state) {
325
+ return Object.keys(state.filters).length;
326
+ }
327
+ function setPivotColumnFilter(filters, column, filter) {
328
+ const next = { ...filters };
329
+ if (filter === null) {
330
+ delete next[column];
331
+ } else {
332
+ next[column] = filter;
333
+ }
334
+ return next;
335
+ }
336
+ function pivotFilterKeeps(value, filter) {
337
+ switch (filter.op) {
338
+ case "gte":
339
+ return value >= filter.value;
340
+ case "gt":
341
+ return value > filter.value;
342
+ case "eq":
343
+ return value === filter.value;
344
+ case "lte":
345
+ return value <= filter.value;
346
+ case "lt":
347
+ return value < filter.value;
348
+ }
349
+ }
350
+ function pivotVisibleRows(payload, state) {
351
+ const tree = pivotTree(payload.rows);
352
+ const sorted = state.sort === null ? tree : sortNodes(tree, state.sort, payload);
353
+ const kept = filterNodes(sorted, state);
354
+ const visible = [];
355
+ collect(kept, state.collapsed, visible);
356
+ return visible;
357
+ }
358
+ function pivotSortDirection(state, payload, column) {
359
+ if (state.sort !== null) {
360
+ return state.sort.column === column ? state.sort.direction : null;
361
+ }
362
+ return payload.sort.column === column ? payload.sort.direction : null;
363
+ }
364
+ function nextPivotSort(state, payload, column) {
365
+ const first = payload.column_keys.includes(column) ? "desc" : "asc";
366
+ if (state.sort?.column !== column) return { column, direction: first };
367
+ if (state.sort.direction === first) {
368
+ return { column, direction: first === "asc" ? "desc" : "asc" };
369
+ }
370
+ return null;
371
+ }
372
+ function togglePivotGroup(collapsed, key) {
373
+ const next = new Set(collapsed);
374
+ if (!next.delete(key)) next.add(key);
375
+ return next;
376
+ }
377
+ function pivotTree(rows) {
378
+ const roots = [];
379
+ const openByDepth = /* @__PURE__ */ new Map();
380
+ for (const row of rows) {
381
+ const node = { row, children: [] };
382
+ const parent = row.depth > 0 ? openByDepth.get(row.depth - 1) : void 0;
383
+ if (parent === void 0) {
384
+ roots.push(node);
385
+ } else {
386
+ parent.children.push(node);
387
+ }
388
+ if (row.kind === "group") openByDepth.set(row.depth, node);
389
+ }
390
+ return roots;
391
+ }
392
+ function sortNodes(nodes, sort, payload) {
393
+ const isValue = payload.column_keys.includes(sort.column);
394
+ const rank = payload.row_fields.findIndex(
395
+ (field) => field.key === sort.column
396
+ );
397
+ const ordered = [...nodes].sort(
398
+ (left, right) => isValue ? compareValues(
399
+ left.row.cells[sort.column],
400
+ right.row.cells[sort.column],
401
+ sort.direction
402
+ ) : compareLabels(left.row, right.row, rank, sort.direction)
403
+ );
404
+ return ordered.map((node) => ({
405
+ row: node.row,
406
+ children: sortNodes(node.children, sort, payload)
407
+ }));
408
+ }
409
+ function compareValues(left, right, direction) {
410
+ const missing = (value) => value === null || value === void 0 || !Number.isFinite(value);
411
+ if (missing(left) && missing(right)) return 0;
412
+ if (missing(left)) return 1;
413
+ if (missing(right)) return -1;
414
+ const difference = left - right;
415
+ return direction === "desc" ? -difference : difference;
416
+ }
417
+ function compareLabels(left, right, rank, direction) {
418
+ const at = rank >= 0 ? rank : Math.max(left.depth, 0);
419
+ const a = left.path[at] ?? left.label;
420
+ const b = right.path[at] ?? right.label;
421
+ const order = a.localeCompare(b, void 0, {
422
+ numeric: true,
423
+ sensitivity: "base"
424
+ });
425
+ return direction === "desc" ? -order : order;
426
+ }
427
+ function filterNodes(nodes, state) {
428
+ const query = state.search.trim().toLowerCase();
429
+ const filters = Object.entries(state.filters);
430
+ if (query === "" && filters.length === 0) return nodes;
431
+ const keep = (node) => {
432
+ const children = node.children.map(keep).filter((child) => child !== null);
433
+ if (children.length > 0) return { row: node.row, children };
434
+ if (node.row.kind === "group") return null;
435
+ if (query !== "" && !matchesQuery(node.row, query)) return null;
436
+ for (const [column, filter] of filters) {
437
+ const value = node.row.cells[column];
438
+ if (typeof value !== "number" || !pivotFilterKeeps(value, filter)) {
439
+ return null;
440
+ }
441
+ }
442
+ return { row: node.row, children: [] };
443
+ };
444
+ return nodes.map(keep).filter((node) => node !== null);
445
+ }
446
+ function matchesQuery(row, query) {
447
+ return row.path.some((label) => label.toLowerCase().includes(query));
448
+ }
449
+ function collect(nodes, collapsed, into) {
450
+ for (const node of nodes) {
451
+ into.push(node.row);
452
+ if (collapsed.has(node.row.key)) continue;
453
+ collect(node.children, collapsed, into);
454
+ }
455
+ }
456
+
457
+ // ../dashboard-renderers/src/pivot-model.ts
458
+ function buildPivotRendererModel(widget, result, context = {}) {
459
+ const frame = rendererFrame(
460
+ widget,
461
+ "pivot_table",
462
+ context.widgetDefaults,
463
+ context.framed
464
+ );
465
+ const payload = readPivotPayload(result);
466
+ if (payload === null) {
467
+ const missing = {
468
+ kind: "pivot",
469
+ status: "missing",
470
+ frame,
471
+ message: "This widget did not return a pivot table."
472
+ };
473
+ return missing;
474
+ }
475
+ const view = context.pivotView ?? initialPivotViewState(payload, context.capture);
476
+ const visibleRows = pivotVisibleRows(payload, view);
477
+ const ready = {
478
+ kind: "pivot",
479
+ status: "ready",
480
+ frame,
481
+ payload,
482
+ view,
483
+ columns: buildPivotColumns(payload, view.collapsedColumns),
484
+ rows: buildPivotRows(payload, visibleRows),
485
+ totalRow: buildPivotTotalRow(payload),
486
+ valueColumns: pivotValueColumns(payload, view.collapsedColumns),
487
+ columnGroups: pivotColumnGroups(payload),
488
+ truncation: pivotTruncationNote(payload),
489
+ controls: {
490
+ searchPlaceholder: "Search rows",
491
+ expandable: pivotHasGroups(payload),
492
+ groupCount: pivotGroupKeys(payload).length,
493
+ filterCount: pivotFilterCount(view),
494
+ reordered: view.sort !== null,
495
+ canFilter: true,
496
+ canRearrange: false,
497
+ embedded: context.embedded === true
498
+ },
499
+ exports: tableExportModel(
500
+ typeof widget.spec.display === "object" && widget.spec.display !== null && !Array.isArray(widget.spec.display) && typeof widget.spec.display.pivot_table === "object" && widget.spec.display.pivot_table !== null && !Array.isArray(widget.spec.display.pivot_table) ? widget.spec.display.pivot_table : {},
501
+ widget.metadata.name,
502
+ context.excelExport !== false
503
+ ),
504
+ openLevels: {
505
+ rows: pivotOpenRowLevels(payload, view),
506
+ columns: pivotOpenColumnLevels(payload, view)
507
+ }
508
+ };
509
+ return ready;
510
+ }
511
+ function pivotCellPresentation(model, row, column) {
512
+ if (column.isRowField) {
513
+ return {
514
+ text: String(row[column.prop] ?? ""),
515
+ align: "left",
516
+ emphasized: false,
517
+ heatmapIntensity: null
518
+ };
519
+ }
520
+ const meta = row.__pivotMeta;
521
+ const value = row[column.prop];
522
+ const measure = pivotMeasuresByKey(model.payload).get(column.measure ?? "");
523
+ const shade = model.payload.heatmap_measure !== null && column.measure === model.payload.heatmap_measure && column.columnKey !== null && !column.isTotal && meta?.kind !== "group" && meta?.kind !== "grand_total" ? pivotHeatmapIntensity(
524
+ value,
525
+ model.payload.value_range[column.measure ?? ""]
526
+ ) : null;
527
+ return {
528
+ text: formatPivotValue(value, measure, model.payload.empty_value),
529
+ align: "right",
530
+ emphasized: column.isTotal || meta?.kind === "group" || meta?.kind === "grand_total",
531
+ heatmapIntensity: shade
532
+ };
533
+ }
534
+ function pivotCellAction(model, widget, row, column, value, detailAvailable = true) {
535
+ if (column.isRowField && row.kind === "group") {
536
+ return { kind: "toggle-row-group", key: row.key };
537
+ }
538
+ const columnFilters = column.columnKey === null ? null : pivotColumnFilters(model.payload, column.columnKey);
539
+ const interaction = getClickInteraction(widget);
540
+ if (interaction !== void 0) {
541
+ return {
542
+ kind: "interaction",
543
+ interaction,
544
+ context: {
545
+ widgetId: widget.metadata.id,
546
+ data: {
547
+ ...pivotRowFilters(model.payload, row),
548
+ ...columnFilters ?? {},
549
+ column: column.columnKey
550
+ },
551
+ value
552
+ }
553
+ };
554
+ }
555
+ if (!detailAvailable || columnFilters === null || row.kind === "other" || row.kind === "grand_total") {
556
+ return null;
557
+ }
558
+ const rowFilters = pivotRowFilters(model.payload, row);
559
+ const labelParts = [...row.path];
560
+ const columnLabel = column.columnKey === null ? void 0 : model.payload.column_labels[column.columnKey];
561
+ if (columnLabel !== void 0) labelParts.push(columnLabel);
562
+ return {
563
+ kind: "detail",
564
+ filters: { ...rowFilters, ...columnFilters },
565
+ label: labelParts.join(" / ")
566
+ };
567
+ }
568
+
569
+ export { PIVOT_META_PROP, buildPivotColumns, buildPivotRendererModel, buildPivotRows, buildPivotTotalRow, formatPivotValue, initialPivotViewState, isPivotColumnGroup, nextPivotSort, pivotCellAction, pivotCellPresentation, pivotColumnFilters, pivotColumnGroups, pivotFilterCount, pivotFilterKeeps, pivotGroupKeys, pivotHasGroups, pivotHeatmapIntensity, pivotMeasuresByKey, pivotOpenColumnLevels, pivotOpenRowLevels, pivotRowFilters, pivotRowMeta, pivotSignature, pivotSortDirection, pivotTruncationNote, pivotValueColumns, pivotVisibleRows, readPivotPayload, setPivotColumnFilter, togglePivotGroup };
570
+ //# sourceMappingURL=chunk-LHD445PJ.js.map
571
+ //# sourceMappingURL=chunk-LHD445PJ.js.map