@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,4374 @@
1
+ {
2
+ "$defs": {
3
+ "BreakpointConfig": {
4
+ "additionalProperties": true,
5
+ "description": "Responsive breakpoint configuration for the dashboard grid.",
6
+ "properties": {
7
+ "cols": {
8
+ "default": 24,
9
+ "title": "Cols",
10
+ "type": "integer"
11
+ },
12
+ "containerPadding": {
13
+ "anyOf": [
14
+ {
15
+ "items": {
16
+ "type": "integer"
17
+ },
18
+ "type": "array"
19
+ },
20
+ {
21
+ "type": "null"
22
+ }
23
+ ],
24
+ "default": null,
25
+ "title": "Containerpadding"
26
+ },
27
+ "margin": {
28
+ "items": {
29
+ "type": "integer"
30
+ },
31
+ "title": "Margin",
32
+ "type": "array"
33
+ },
34
+ "row_height": {
35
+ "default": 30,
36
+ "title": "Row Height",
37
+ "type": "integer"
38
+ }
39
+ },
40
+ "title": "BreakpointConfig",
41
+ "type": "object"
42
+ },
43
+ "DashboardCacheConfig": {
44
+ "additionalProperties": true,
45
+ "description": "Dashboard-level cache configuration.",
46
+ "properties": {
47
+ "enabled": {
48
+ "default": true,
49
+ "title": "Enabled",
50
+ "type": "boolean"
51
+ },
52
+ "icon": {
53
+ "default": "refresh-cw",
54
+ "title": "Icon",
55
+ "type": "string"
56
+ },
57
+ "showInEmbed": {
58
+ "default": true,
59
+ "title": "Showinembed",
60
+ "type": "boolean"
61
+ },
62
+ "showInLayout": {
63
+ "default": true,
64
+ "title": "Showinlayout",
65
+ "type": "boolean"
66
+ },
67
+ "showInPreview": {
68
+ "default": true,
69
+ "title": "Showinpreview",
70
+ "type": "boolean"
71
+ },
72
+ "ttlSeconds": {
73
+ "anyOf": [
74
+ {
75
+ "type": "integer"
76
+ },
77
+ {
78
+ "type": "null"
79
+ }
80
+ ],
81
+ "default": 300,
82
+ "title": "Ttlseconds"
83
+ }
84
+ },
85
+ "title": "DashboardCacheConfig",
86
+ "type": "object"
87
+ },
88
+ "DashboardConfig": {
89
+ "additionalProperties": true,
90
+ "description": "Dashboard-level configuration overrides.",
91
+ "properties": {
92
+ "cache": {
93
+ "anyOf": [
94
+ {
95
+ "$ref": "#/$defs/DashboardCacheConfig"
96
+ },
97
+ {
98
+ "type": "null"
99
+ }
100
+ ],
101
+ "default": null
102
+ },
103
+ "dataModelId": {
104
+ "anyOf": [
105
+ {
106
+ "type": "string"
107
+ },
108
+ {
109
+ "type": "null"
110
+ }
111
+ ],
112
+ "default": null,
113
+ "title": "Datamodelid"
114
+ },
115
+ "filterPanel": {
116
+ "anyOf": [
117
+ {
118
+ "$ref": "#/$defs/DashboardFilterPanelConfig"
119
+ },
120
+ {
121
+ "type": "null"
122
+ }
123
+ ],
124
+ "default": null
125
+ },
126
+ "footer": {
127
+ "anyOf": [
128
+ {
129
+ "$ref": "#/$defs/DashboardSectionConfig"
130
+ },
131
+ {
132
+ "type": "null"
133
+ }
134
+ ],
135
+ "default": null
136
+ },
137
+ "grid": {
138
+ "anyOf": [
139
+ {
140
+ "$ref": "#/$defs/DashboardGridConfig"
141
+ },
142
+ {
143
+ "type": "null"
144
+ }
145
+ ],
146
+ "default": null
147
+ },
148
+ "header": {
149
+ "anyOf": [
150
+ {
151
+ "$ref": "#/$defs/DashboardSectionConfig"
152
+ },
153
+ {
154
+ "type": "null"
155
+ }
156
+ ],
157
+ "default": null
158
+ },
159
+ "print": {
160
+ "anyOf": [
161
+ {
162
+ "$ref": "#/$defs/DashboardPrintConfig"
163
+ },
164
+ {
165
+ "type": "null"
166
+ }
167
+ ],
168
+ "default": null
169
+ },
170
+ "widgetDefaults": {
171
+ "anyOf": [
172
+ {
173
+ "$ref": "#/$defs/WidgetDefaults"
174
+ },
175
+ {
176
+ "type": "null"
177
+ }
178
+ ],
179
+ "default": null
180
+ }
181
+ },
182
+ "title": "DashboardConfig",
183
+ "type": "object"
184
+ },
185
+ "DashboardFilterPanelConfig": {
186
+ "additionalProperties": true,
187
+ "description": "Configuration for the dashboard filter panel.",
188
+ "properties": {
189
+ "background": {
190
+ "anyOf": [
191
+ {
192
+ "type": "string"
193
+ },
194
+ {
195
+ "type": "null"
196
+ }
197
+ ],
198
+ "default": null,
199
+ "title": "Background"
200
+ },
201
+ "collapsible": {
202
+ "anyOf": [
203
+ {
204
+ "type": "boolean"
205
+ },
206
+ {
207
+ "type": "null"
208
+ }
209
+ ],
210
+ "default": true,
211
+ "title": "Collapsible"
212
+ },
213
+ "defaultCollapsed": {
214
+ "anyOf": [
215
+ {
216
+ "type": "boolean"
217
+ },
218
+ {
219
+ "type": "null"
220
+ }
221
+ ],
222
+ "default": false,
223
+ "title": "Defaultcollapsed"
224
+ },
225
+ "disableCollapse": {
226
+ "anyOf": [
227
+ {
228
+ "type": "boolean"
229
+ },
230
+ {
231
+ "type": "null"
232
+ }
233
+ ],
234
+ "default": false,
235
+ "title": "Disablecollapse"
236
+ },
237
+ "gap": {
238
+ "anyOf": [
239
+ {
240
+ "type": "string"
241
+ },
242
+ {
243
+ "type": "integer"
244
+ },
245
+ {
246
+ "type": "null"
247
+ }
248
+ ],
249
+ "default": 12,
250
+ "title": "Gap"
251
+ },
252
+ "layout": {
253
+ "anyOf": [
254
+ {
255
+ "$ref": "#/$defs/FilterLayout"
256
+ },
257
+ {
258
+ "type": "null"
259
+ }
260
+ ],
261
+ "default": null
262
+ },
263
+ "padding": {
264
+ "anyOf": [
265
+ {
266
+ "type": "string"
267
+ },
268
+ {
269
+ "type": "integer"
270
+ },
271
+ {
272
+ "type": "null"
273
+ }
274
+ ],
275
+ "default": 12,
276
+ "title": "Padding"
277
+ },
278
+ "position": {
279
+ "default": "top",
280
+ "enum": [
281
+ "top",
282
+ "left"
283
+ ],
284
+ "title": "Position",
285
+ "type": "string"
286
+ },
287
+ "width": {
288
+ "anyOf": [
289
+ {
290
+ "type": "string"
291
+ },
292
+ {
293
+ "type": "integer"
294
+ },
295
+ {
296
+ "type": "null"
297
+ }
298
+ ],
299
+ "default": 280,
300
+ "title": "Width"
301
+ }
302
+ },
303
+ "title": "DashboardFilterPanelConfig",
304
+ "type": "object"
305
+ },
306
+ "DashboardGridConfig": {
307
+ "additionalProperties": true,
308
+ "description": "Core react-grid-layout behavior for the dashboard.",
309
+ "properties": {
310
+ "allowOverlap": {
311
+ "anyOf": [
312
+ {
313
+ "type": "boolean"
314
+ },
315
+ {
316
+ "type": "null"
317
+ }
318
+ ],
319
+ "default": false,
320
+ "title": "Allowoverlap"
321
+ },
322
+ "compactType": {
323
+ "anyOf": [
324
+ {
325
+ "enum": [
326
+ "vertical",
327
+ "horizontal"
328
+ ],
329
+ "type": "string"
330
+ },
331
+ {
332
+ "type": "null"
333
+ }
334
+ ],
335
+ "default": "vertical",
336
+ "title": "Compacttype"
337
+ },
338
+ "containerPadding": {
339
+ "anyOf": [
340
+ {
341
+ "items": {
342
+ "type": "integer"
343
+ },
344
+ "type": "array"
345
+ },
346
+ {
347
+ "type": "null"
348
+ }
349
+ ],
350
+ "default": null,
351
+ "title": "Containerpadding"
352
+ },
353
+ "draggableCancel": {
354
+ "anyOf": [
355
+ {
356
+ "type": "string"
357
+ },
358
+ {
359
+ "type": "null"
360
+ }
361
+ ],
362
+ "default": ".widget-edit-btn, .widget-remove-btn",
363
+ "title": "Draggablecancel"
364
+ },
365
+ "draggableHandle": {
366
+ "anyOf": [
367
+ {
368
+ "type": "string"
369
+ },
370
+ {
371
+ "type": "null"
372
+ }
373
+ ],
374
+ "default": ".custom-drag-handle",
375
+ "title": "Draggablehandle"
376
+ },
377
+ "isBounded": {
378
+ "anyOf": [
379
+ {
380
+ "type": "boolean"
381
+ },
382
+ {
383
+ "type": "null"
384
+ }
385
+ ],
386
+ "default": true,
387
+ "title": "Isbounded"
388
+ },
389
+ "maxLayoutWidth": {
390
+ "anyOf": [
391
+ {
392
+ "enum": [
393
+ "mobile",
394
+ "tablet",
395
+ "desktop",
396
+ "wide"
397
+ ],
398
+ "type": "string"
399
+ },
400
+ {
401
+ "type": "null"
402
+ }
403
+ ],
404
+ "default": "wide",
405
+ "title": "Maxlayoutwidth"
406
+ },
407
+ "maxRows": {
408
+ "anyOf": [
409
+ {
410
+ "type": "integer"
411
+ },
412
+ {
413
+ "type": "null"
414
+ }
415
+ ],
416
+ "default": 12,
417
+ "title": "Maxrows"
418
+ },
419
+ "preventCollision": {
420
+ "anyOf": [
421
+ {
422
+ "type": "boolean"
423
+ },
424
+ {
425
+ "type": "null"
426
+ }
427
+ ],
428
+ "default": false,
429
+ "title": "Preventcollision"
430
+ },
431
+ "resizeHandles": {
432
+ "anyOf": [
433
+ {
434
+ "items": {
435
+ "type": "string"
436
+ },
437
+ "type": "array"
438
+ },
439
+ {
440
+ "type": "null"
441
+ }
442
+ ],
443
+ "title": "Resizehandles"
444
+ },
445
+ "snap": {
446
+ "anyOf": [
447
+ {
448
+ "type": "boolean"
449
+ },
450
+ {
451
+ "type": "null"
452
+ }
453
+ ],
454
+ "default": false,
455
+ "title": "Snap"
456
+ },
457
+ "squareCells": {
458
+ "anyOf": [
459
+ {
460
+ "type": "boolean"
461
+ },
462
+ {
463
+ "type": "null"
464
+ }
465
+ ],
466
+ "default": true,
467
+ "title": "Squarecells"
468
+ }
469
+ },
470
+ "title": "DashboardGridConfig",
471
+ "type": "object"
472
+ },
473
+ "DashboardPrintConfig": {
474
+ "additionalProperties": true,
475
+ "description": "Print/export settings for the dashboard.",
476
+ "properties": {
477
+ "backgroundColor": {
478
+ "anyOf": [
479
+ {
480
+ "type": "string"
481
+ },
482
+ {
483
+ "type": "null"
484
+ }
485
+ ],
486
+ "default": "white",
487
+ "title": "Backgroundcolor"
488
+ },
489
+ "fitMode": {
490
+ "default": "fit_to_width",
491
+ "enum": [
492
+ "fit_to_width",
493
+ "fit_to_page"
494
+ ],
495
+ "title": "Fitmode",
496
+ "type": "string"
497
+ },
498
+ "orientation": {
499
+ "default": "auto",
500
+ "enum": [
501
+ "auto",
502
+ "portrait",
503
+ "landscape"
504
+ ],
505
+ "title": "Orientation",
506
+ "type": "string"
507
+ },
508
+ "pageSize": {
509
+ "default": "a4",
510
+ "enum": [
511
+ "a4",
512
+ "letter"
513
+ ],
514
+ "title": "Pagesize",
515
+ "type": "string"
516
+ },
517
+ "scale": {
518
+ "default": "contain",
519
+ "enum": [
520
+ "contain",
521
+ "cover"
522
+ ],
523
+ "title": "Scale",
524
+ "type": "string"
525
+ }
526
+ },
527
+ "title": "DashboardPrintConfig",
528
+ "type": "object"
529
+ },
530
+ "DashboardResponsiveConfig": {
531
+ "additionalProperties": true,
532
+ "description": "Top-level responsive grid configuration.",
533
+ "properties": {
534
+ "desktop": {
535
+ "$ref": "#/$defs/BreakpointConfig"
536
+ },
537
+ "mobile": {
538
+ "$ref": "#/$defs/BreakpointConfig"
539
+ },
540
+ "tablet": {
541
+ "$ref": "#/$defs/BreakpointConfig"
542
+ },
543
+ "wide": {
544
+ "$ref": "#/$defs/BreakpointConfig"
545
+ }
546
+ },
547
+ "title": "DashboardResponsiveConfig",
548
+ "type": "object"
549
+ },
550
+ "DashboardSectionConfig": {
551
+ "additionalProperties": true,
552
+ "description": "Configuration for header/footer sections.",
553
+ "properties": {
554
+ "background": {
555
+ "anyOf": [
556
+ {
557
+ "type": "string"
558
+ },
559
+ {
560
+ "type": "null"
561
+ }
562
+ ],
563
+ "default": null,
564
+ "title": "Background"
565
+ },
566
+ "height": {
567
+ "anyOf": [
568
+ {
569
+ "type": "string"
570
+ },
571
+ {
572
+ "type": "integer"
573
+ },
574
+ {
575
+ "type": "null"
576
+ }
577
+ ],
578
+ "default": null,
579
+ "title": "Height"
580
+ },
581
+ "padding": {
582
+ "anyOf": [
583
+ {
584
+ "type": "string"
585
+ },
586
+ {
587
+ "type": "integer"
588
+ },
589
+ {
590
+ "type": "null"
591
+ }
592
+ ],
593
+ "default": 16,
594
+ "title": "Padding"
595
+ },
596
+ "textAlign": {
597
+ "anyOf": [
598
+ {
599
+ "enum": [
600
+ "left",
601
+ "center",
602
+ "right",
603
+ "justify"
604
+ ],
605
+ "type": "string"
606
+ },
607
+ {
608
+ "type": "null"
609
+ }
610
+ ],
611
+ "default": null,
612
+ "title": "Textalign"
613
+ },
614
+ "verticalAlign": {
615
+ "anyOf": [
616
+ {
617
+ "enum": [
618
+ "top",
619
+ "middle",
620
+ "bottom"
621
+ ],
622
+ "type": "string"
623
+ },
624
+ {
625
+ "type": "null"
626
+ }
627
+ ],
628
+ "default": null,
629
+ "title": "Verticalalign"
630
+ },
631
+ "visible": {
632
+ "anyOf": [
633
+ {
634
+ "type": "boolean"
635
+ },
636
+ {
637
+ "type": "null"
638
+ }
639
+ ],
640
+ "default": true,
641
+ "title": "Visible"
642
+ },
643
+ "widgets": {
644
+ "anyOf": [
645
+ {
646
+ "items": {
647
+ "$ref": "#/$defs/WidgetSpec"
648
+ },
649
+ "type": "array"
650
+ },
651
+ {
652
+ "type": "null"
653
+ }
654
+ ],
655
+ "default": null,
656
+ "title": "Widgets"
657
+ }
658
+ },
659
+ "title": "DashboardSectionConfig",
660
+ "type": "object"
661
+ },
662
+ "DashboardSpecInner": {
663
+ "additionalProperties": true,
664
+ "description": "Inner spec body of a dashboard.",
665
+ "properties": {
666
+ "config": {
667
+ "anyOf": [
668
+ {
669
+ "$ref": "#/$defs/DashboardConfig"
670
+ },
671
+ {
672
+ "type": "null"
673
+ }
674
+ ],
675
+ "default": null
676
+ },
677
+ "data_stores": {
678
+ "items": {
679
+ "$ref": "#/$defs/DataStore"
680
+ },
681
+ "title": "Data Stores",
682
+ "type": "array"
683
+ },
684
+ "datasets": {
685
+ "items": {
686
+ "$ref": "#/$defs/Dataset"
687
+ },
688
+ "title": "Datasets",
689
+ "type": "array"
690
+ },
691
+ "metrics": {
692
+ "items": {
693
+ "$ref": "#/$defs/Metric"
694
+ },
695
+ "title": "Metrics",
696
+ "type": "array"
697
+ },
698
+ "model_refs": {
699
+ "items": {
700
+ "type": "string"
701
+ },
702
+ "title": "Model Refs",
703
+ "type": "array"
704
+ },
705
+ "queries": {
706
+ "anyOf": [
707
+ {
708
+ "additionalProperties": {
709
+ "$ref": "#/$defs/NamedQuery"
710
+ },
711
+ "type": "object"
712
+ },
713
+ {
714
+ "type": "null"
715
+ }
716
+ ],
717
+ "default": null,
718
+ "title": "Queries"
719
+ },
720
+ "relationships": {
721
+ "items": {
722
+ "$ref": "#/$defs/Relationship"
723
+ },
724
+ "title": "Relationships",
725
+ "type": "array"
726
+ },
727
+ "responsive": {
728
+ "$ref": "#/$defs/DashboardResponsiveConfig"
729
+ },
730
+ "semanticModelRef": {
731
+ "anyOf": [
732
+ {
733
+ "type": "string"
734
+ },
735
+ {
736
+ "type": "null"
737
+ }
738
+ ],
739
+ "default": null,
740
+ "title": "Semantic Model Ref"
741
+ },
742
+ "semantic_model": {
743
+ "anyOf": [
744
+ {
745
+ "items": {
746
+ "$ref": "#/$defs/SemanticModel"
747
+ },
748
+ "type": "array"
749
+ },
750
+ {
751
+ "type": "null"
752
+ }
753
+ ],
754
+ "default": null,
755
+ "title": "Semantic Model"
756
+ },
757
+ "semantic_model_ref": {
758
+ "anyOf": [
759
+ {
760
+ "type": "string"
761
+ },
762
+ {
763
+ "type": "null"
764
+ }
765
+ ],
766
+ "default": null,
767
+ "title": "Semantic Model Ref"
768
+ },
769
+ "semantic_models": {
770
+ "anyOf": [
771
+ {
772
+ "items": {
773
+ "$ref": "#/$defs/SemanticModel"
774
+ },
775
+ "type": "array"
776
+ },
777
+ {
778
+ "type": "null"
779
+ }
780
+ ],
781
+ "default": null,
782
+ "title": "Semantic Model"
783
+ },
784
+ "tabs": {
785
+ "items": {
786
+ "$ref": "#/$defs/DashboardTab"
787
+ },
788
+ "title": "Tabs",
789
+ "type": "array"
790
+ }
791
+ },
792
+ "title": "DashboardSpecInner",
793
+ "type": "object"
794
+ },
795
+ "DashboardTab": {
796
+ "additionalProperties": true,
797
+ "description": "A tab/page inside a dashboard.",
798
+ "properties": {
799
+ "default": {
800
+ "default": false,
801
+ "title": "Default",
802
+ "type": "boolean"
803
+ },
804
+ "id": {
805
+ "title": "Id",
806
+ "type": "string"
807
+ },
808
+ "label": {
809
+ "title": "Label",
810
+ "type": "string"
811
+ },
812
+ "widgets": {
813
+ "items": {
814
+ "anyOf": [
815
+ {
816
+ "$ref": "#/$defs/WidgetRef"
817
+ },
818
+ {
819
+ "$ref": "#/$defs/WidgetSpec"
820
+ },
821
+ {
822
+ "type": "string"
823
+ }
824
+ ]
825
+ },
826
+ "title": "Widgets",
827
+ "type": "array"
828
+ }
829
+ },
830
+ "required": [
831
+ "id",
832
+ "label"
833
+ ],
834
+ "title": "DashboardTab",
835
+ "type": "object"
836
+ },
837
+ "DataStore": {
838
+ "additionalProperties": true,
839
+ "description": "A data-store (warehouse) connection referenced by datasets.",
840
+ "properties": {
841
+ "ai_context": {
842
+ "anyOf": [
843
+ {
844
+ "additionalProperties": {
845
+ "$ref": "#/$defs/JsonValue"
846
+ },
847
+ "type": "object"
848
+ },
849
+ {
850
+ "type": "string"
851
+ },
852
+ {
853
+ "type": "null"
854
+ }
855
+ ],
856
+ "default": null,
857
+ "title": "Ai Context"
858
+ },
859
+ "custom_extensions": {
860
+ "anyOf": [
861
+ {
862
+ "items": {
863
+ "additionalProperties": {
864
+ "$ref": "#/$defs/JsonValue"
865
+ },
866
+ "type": "object"
867
+ },
868
+ "type": "array"
869
+ },
870
+ {
871
+ "type": "null"
872
+ }
873
+ ],
874
+ "default": null,
875
+ "title": "Custom Extensions"
876
+ },
877
+ "data_model_id": {
878
+ "anyOf": [
879
+ {
880
+ "type": "string"
881
+ },
882
+ {
883
+ "type": "null"
884
+ }
885
+ ],
886
+ "default": null,
887
+ "description": "Host data-store identifier holding credentials, database, and schema. Omit to use the host's default active store.",
888
+ "title": "Data Model Id"
889
+ },
890
+ "default": {
891
+ "default": false,
892
+ "description": "Store used by datasets that do not name one.",
893
+ "title": "Default",
894
+ "type": "boolean"
895
+ },
896
+ "description": {
897
+ "anyOf": [
898
+ {
899
+ "type": "string"
900
+ },
901
+ {
902
+ "type": "null"
903
+ }
904
+ ],
905
+ "default": null,
906
+ "title": "Description"
907
+ },
908
+ "id": {
909
+ "description": "Id datasets use to point at this store, for example ops_dw.",
910
+ "title": "Id",
911
+ "type": "string"
912
+ },
913
+ "name": {
914
+ "anyOf": [
915
+ {
916
+ "type": "string"
917
+ },
918
+ {
919
+ "type": "null"
920
+ }
921
+ ],
922
+ "default": null,
923
+ "title": "Name"
924
+ },
925
+ "vendor": {
926
+ "anyOf": [
927
+ {
928
+ "type": "string"
929
+ },
930
+ {
931
+ "type": "null"
932
+ }
933
+ ],
934
+ "default": null,
935
+ "description": "Warehouse vendor, for example snowflake, databricks or postgres.",
936
+ "title": "Vendor"
937
+ }
938
+ },
939
+ "required": [
940
+ "id"
941
+ ],
942
+ "title": "DataStore",
943
+ "type": "object"
944
+ },
945
+ "Dataset": {
946
+ "additionalProperties": true,
947
+ "description": "A reusable semantic dataset: schema/table, dimensions, and metrics.",
948
+ "properties": {
949
+ "ai_context": {
950
+ "anyOf": [
951
+ {
952
+ "additionalProperties": {
953
+ "$ref": "#/$defs/JsonValue"
954
+ },
955
+ "type": "object"
956
+ },
957
+ {
958
+ "type": "string"
959
+ },
960
+ {
961
+ "type": "null"
962
+ }
963
+ ],
964
+ "default": null,
965
+ "title": "Ai Context"
966
+ },
967
+ "cache": {
968
+ "anyOf": [
969
+ {
970
+ "$ref": "#/$defs/DatasetCacheConfig"
971
+ },
972
+ {
973
+ "type": "null"
974
+ }
975
+ ],
976
+ "default": null
977
+ },
978
+ "custom_extensions": {
979
+ "anyOf": [
980
+ {
981
+ "items": {
982
+ "additionalProperties": {
983
+ "$ref": "#/$defs/JsonValue"
984
+ },
985
+ "type": "object"
986
+ },
987
+ "type": "array"
988
+ },
989
+ {
990
+ "type": "null"
991
+ }
992
+ ],
993
+ "default": null,
994
+ "title": "Custom Extensions"
995
+ },
996
+ "dataStoreId": {
997
+ "anyOf": [
998
+ {
999
+ "type": "string"
1000
+ },
1001
+ {
1002
+ "type": "null"
1003
+ }
1004
+ ],
1005
+ "default": null,
1006
+ "description": "Id of the data store in this model's data_stores list. Omit to use the model's default store.",
1007
+ "title": "Data Store Id"
1008
+ },
1009
+ "dataStoreIds": {
1010
+ "anyOf": [
1011
+ {
1012
+ "items": {
1013
+ "type": "string"
1014
+ },
1015
+ "type": "array"
1016
+ },
1017
+ {
1018
+ "type": "null"
1019
+ }
1020
+ ],
1021
+ "default": null,
1022
+ "title": "Data Store Ids"
1023
+ },
1024
+ "data_model_id": {
1025
+ "anyOf": [
1026
+ {
1027
+ "type": "string"
1028
+ },
1029
+ {
1030
+ "type": "null"
1031
+ }
1032
+ ],
1033
+ "default": null,
1034
+ "title": "Data Model Id"
1035
+ },
1036
+ "data_store_id": {
1037
+ "anyOf": [
1038
+ {
1039
+ "type": "string"
1040
+ },
1041
+ {
1042
+ "type": "null"
1043
+ }
1044
+ ],
1045
+ "default": null,
1046
+ "description": "Id of the data store in this model's data_stores list. Omit to use the model's default store.",
1047
+ "title": "Data Store Id"
1048
+ },
1049
+ "data_store_ids": {
1050
+ "anyOf": [
1051
+ {
1052
+ "items": {
1053
+ "type": "string"
1054
+ },
1055
+ "type": "array"
1056
+ },
1057
+ {
1058
+ "type": "null"
1059
+ }
1060
+ ],
1061
+ "default": null,
1062
+ "title": "Data Store Ids"
1063
+ },
1064
+ "description": {
1065
+ "anyOf": [
1066
+ {
1067
+ "type": "string"
1068
+ },
1069
+ {
1070
+ "type": "null"
1071
+ }
1072
+ ],
1073
+ "default": null,
1074
+ "title": "Description"
1075
+ },
1076
+ "dimensions": {
1077
+ "description": "Columns widgets can group or filter by.",
1078
+ "items": {
1079
+ "$ref": "#/$defs/Dimension"
1080
+ },
1081
+ "title": "Dimensions",
1082
+ "type": "array"
1083
+ },
1084
+ "fields": {
1085
+ "description": "Columns widgets can group or filter by.",
1086
+ "items": {
1087
+ "$ref": "#/$defs/Dimension"
1088
+ },
1089
+ "title": "Dimensions",
1090
+ "type": "array"
1091
+ },
1092
+ "filter_field": {
1093
+ "anyOf": [
1094
+ {
1095
+ "type": "string"
1096
+ },
1097
+ {
1098
+ "type": "null"
1099
+ }
1100
+ ],
1101
+ "default": null,
1102
+ "description": "Column carrying the location key. Without it a location-scoped user cannot query this dataset.",
1103
+ "title": "Filter Field"
1104
+ },
1105
+ "filter_param": {
1106
+ "default": "restaurant_ids",
1107
+ "title": "Filter Param",
1108
+ "type": "string"
1109
+ },
1110
+ "from": {
1111
+ "anyOf": [
1112
+ {
1113
+ "type": "string"
1114
+ },
1115
+ {
1116
+ "type": "null"
1117
+ }
1118
+ ],
1119
+ "default": null,
1120
+ "description": "Table or view the rows come from, for example {mart_schema}.RPT_DAILY_SALES_SUMMARY.",
1121
+ "title": "From"
1122
+ },
1123
+ "group_by": {
1124
+ "anyOf": [
1125
+ {
1126
+ "items": {
1127
+ "type": "string"
1128
+ },
1129
+ "type": "array"
1130
+ },
1131
+ {
1132
+ "type": "null"
1133
+ }
1134
+ ],
1135
+ "default": null,
1136
+ "title": "Group By"
1137
+ },
1138
+ "id": {
1139
+ "description": "Id widgets use to ask for this dataset, for example daily_sales.",
1140
+ "title": "Id",
1141
+ "type": "string"
1142
+ },
1143
+ "kpi": {
1144
+ "anyOf": [
1145
+ {
1146
+ "type": "string"
1147
+ },
1148
+ {
1149
+ "type": "null"
1150
+ }
1151
+ ],
1152
+ "default": null,
1153
+ "title": "Kpi"
1154
+ },
1155
+ "materialization": {
1156
+ "anyOf": [
1157
+ {
1158
+ "$ref": "#/$defs/DatasetMaterialization"
1159
+ },
1160
+ {
1161
+ "type": "null"
1162
+ }
1163
+ ],
1164
+ "default": null
1165
+ },
1166
+ "mesh": {
1167
+ "anyOf": [
1168
+ {
1169
+ "$ref": "#/$defs/MeshPlan"
1170
+ },
1171
+ {
1172
+ "type": "null"
1173
+ }
1174
+ ],
1175
+ "default": null
1176
+ },
1177
+ "metrics": {
1178
+ "description": "Aggregations valid on this dataset's source.",
1179
+ "items": {
1180
+ "$ref": "#/$defs/Metric"
1181
+ },
1182
+ "title": "Metrics",
1183
+ "type": "array"
1184
+ },
1185
+ "name": {
1186
+ "anyOf": [
1187
+ {
1188
+ "type": "string"
1189
+ },
1190
+ {
1191
+ "type": "null"
1192
+ }
1193
+ ],
1194
+ "default": null,
1195
+ "description": "Label shown to users. Defaults to the id.",
1196
+ "title": "Name"
1197
+ },
1198
+ "params": {
1199
+ "additionalProperties": {
1200
+ "$ref": "#/$defs/JsonValue"
1201
+ },
1202
+ "title": "Params",
1203
+ "type": "object"
1204
+ },
1205
+ "primary_key": {
1206
+ "anyOf": [
1207
+ {
1208
+ "items": {
1209
+ "type": "string"
1210
+ },
1211
+ "type": "array"
1212
+ },
1213
+ {
1214
+ "type": "null"
1215
+ }
1216
+ ],
1217
+ "default": null,
1218
+ "title": "Primary Key"
1219
+ },
1220
+ "query": {
1221
+ "anyOf": [
1222
+ {
1223
+ "type": "string"
1224
+ },
1225
+ {
1226
+ "type": "null"
1227
+ }
1228
+ ],
1229
+ "default": null,
1230
+ "description": "SQL to run when source_type is query.",
1231
+ "title": "Query"
1232
+ },
1233
+ "relationships": {
1234
+ "items": {
1235
+ "$ref": "#/$defs/Relationship"
1236
+ },
1237
+ "title": "Relationships",
1238
+ "type": "array"
1239
+ },
1240
+ "source": {
1241
+ "anyOf": [
1242
+ {
1243
+ "type": "string"
1244
+ },
1245
+ {
1246
+ "type": "null"
1247
+ }
1248
+ ],
1249
+ "default": null,
1250
+ "description": "Table or view the rows come from, for example {mart_schema}.RPT_DAILY_SALES_SUMMARY.",
1251
+ "title": "From"
1252
+ },
1253
+ "source_type": {
1254
+ "anyOf": [
1255
+ {
1256
+ "enum": [
1257
+ "table",
1258
+ "view",
1259
+ "query",
1260
+ "mesh"
1261
+ ],
1262
+ "type": "string"
1263
+ },
1264
+ {
1265
+ "type": "null"
1266
+ }
1267
+ ],
1268
+ "default": null,
1269
+ "description": "table or view reads source; query runs the query field; mesh combines datasets from different data stores.",
1270
+ "title": "Source Type"
1271
+ },
1272
+ "unique_keys": {
1273
+ "anyOf": [
1274
+ {
1275
+ "items": {
1276
+ "items": {
1277
+ "type": "string"
1278
+ },
1279
+ "type": "array"
1280
+ },
1281
+ "type": "array"
1282
+ },
1283
+ {
1284
+ "type": "null"
1285
+ }
1286
+ ],
1287
+ "default": null,
1288
+ "title": "Unique Keys"
1289
+ }
1290
+ },
1291
+ "required": [
1292
+ "id"
1293
+ ],
1294
+ "title": "Dataset",
1295
+ "type": "object"
1296
+ },
1297
+ "DatasetCacheConfig": {
1298
+ "additionalProperties": true,
1299
+ "description": "How long a dataset's warehouse results may be reused.",
1300
+ "properties": {
1301
+ "enabled": {
1302
+ "default": true,
1303
+ "title": "Enabled",
1304
+ "type": "boolean"
1305
+ },
1306
+ "ttlSeconds": {
1307
+ "anyOf": [
1308
+ {
1309
+ "type": "integer"
1310
+ },
1311
+ {
1312
+ "type": "null"
1313
+ }
1314
+ ],
1315
+ "default": 300,
1316
+ "title": "Ttl Seconds"
1317
+ },
1318
+ "ttl_seconds": {
1319
+ "anyOf": [
1320
+ {
1321
+ "type": "integer"
1322
+ },
1323
+ {
1324
+ "type": "null"
1325
+ }
1326
+ ],
1327
+ "default": 300,
1328
+ "title": "Ttl Seconds"
1329
+ }
1330
+ },
1331
+ "title": "DatasetCacheConfig",
1332
+ "type": "object"
1333
+ },
1334
+ "DatasetDataSource": {
1335
+ "additionalProperties": true,
1336
+ "description": "Reference a reusable Dataset defined in the dashboard manifest.",
1337
+ "properties": {
1338
+ "columns": {
1339
+ "anyOf": [
1340
+ {
1341
+ "items": {
1342
+ "type": "string"
1343
+ },
1344
+ "type": "array"
1345
+ },
1346
+ {
1347
+ "type": "null"
1348
+ }
1349
+ ],
1350
+ "default": null,
1351
+ "title": "Columns"
1352
+ },
1353
+ "data_model_id": {
1354
+ "anyOf": [
1355
+ {
1356
+ "type": "string"
1357
+ },
1358
+ {
1359
+ "type": "null"
1360
+ }
1361
+ ],
1362
+ "default": null,
1363
+ "title": "Data Model Id"
1364
+ },
1365
+ "dataset": {
1366
+ "title": "Dataset",
1367
+ "type": "string"
1368
+ },
1369
+ "dimensions": {
1370
+ "anyOf": [
1371
+ {
1372
+ "items": {
1373
+ "type": "string"
1374
+ },
1375
+ "type": "array"
1376
+ },
1377
+ {
1378
+ "type": "null"
1379
+ }
1380
+ ],
1381
+ "default": null,
1382
+ "title": "Dimensions"
1383
+ },
1384
+ "filters": {
1385
+ "items": {
1386
+ "$ref": "#/$defs/IncomingFilter"
1387
+ },
1388
+ "title": "Filters",
1389
+ "type": "array"
1390
+ },
1391
+ "kind": {
1392
+ "const": "dataset",
1393
+ "default": "dataset",
1394
+ "title": "Kind",
1395
+ "type": "string"
1396
+ },
1397
+ "metrics": {
1398
+ "anyOf": [
1399
+ {
1400
+ "items": {
1401
+ "type": "string"
1402
+ },
1403
+ "type": "array"
1404
+ },
1405
+ {
1406
+ "type": "null"
1407
+ }
1408
+ ],
1409
+ "default": null,
1410
+ "title": "Metrics"
1411
+ },
1412
+ "params": {
1413
+ "additionalProperties": {
1414
+ "$ref": "#/$defs/JsonValue"
1415
+ },
1416
+ "title": "Params",
1417
+ "type": "object"
1418
+ }
1419
+ },
1420
+ "required": [
1421
+ "dataset"
1422
+ ],
1423
+ "title": "DatasetDataSource",
1424
+ "type": "object"
1425
+ },
1426
+ "DatasetMaterialization": {
1427
+ "additionalProperties": true,
1428
+ "description": "A pre-aggregated rollup the engine may read instead of the base source.\n\n``grain`` lists the dimensions the rollup is aggregated to and ``metrics``\nthe measures it carries. A widget selection covered by both is answered from\n``source``; anything wider falls back to the dataset's own source, so the\nrollup is an optimisation and never changes what a widget can ask for.",
1429
+ "properties": {
1430
+ "enabled": {
1431
+ "default": true,
1432
+ "title": "Enabled",
1433
+ "type": "boolean"
1434
+ },
1435
+ "grain": {
1436
+ "items": {
1437
+ "type": "string"
1438
+ },
1439
+ "title": "Grain",
1440
+ "type": "array"
1441
+ },
1442
+ "metrics": {
1443
+ "items": {
1444
+ "type": "string"
1445
+ },
1446
+ "title": "Metrics",
1447
+ "type": "array"
1448
+ },
1449
+ "source": {
1450
+ "anyOf": [
1451
+ {
1452
+ "type": "string"
1453
+ },
1454
+ {
1455
+ "type": "null"
1456
+ }
1457
+ ],
1458
+ "default": null,
1459
+ "title": "Source"
1460
+ }
1461
+ },
1462
+ "title": "DatasetMaterialization",
1463
+ "type": "object"
1464
+ },
1465
+ "DemoDataSource": {
1466
+ "additionalProperties": true,
1467
+ "description": "Deterministic generated data for testing and previews.",
1468
+ "properties": {
1469
+ "columns": {
1470
+ "anyOf": [
1471
+ {
1472
+ "items": {
1473
+ "type": "string"
1474
+ },
1475
+ "type": "array"
1476
+ },
1477
+ {
1478
+ "type": "null"
1479
+ }
1480
+ ],
1481
+ "default": null,
1482
+ "title": "Columns"
1483
+ },
1484
+ "dataset": {
1485
+ "anyOf": [
1486
+ {
1487
+ "type": "string"
1488
+ },
1489
+ {
1490
+ "type": "null"
1491
+ }
1492
+ ],
1493
+ "default": null,
1494
+ "title": "Dataset"
1495
+ },
1496
+ "kind": {
1497
+ "const": "demo",
1498
+ "default": "demo",
1499
+ "title": "Kind",
1500
+ "type": "string"
1501
+ },
1502
+ "rows": {
1503
+ "default": 30,
1504
+ "title": "Rows",
1505
+ "type": "integer"
1506
+ },
1507
+ "seed": {
1508
+ "default": 42,
1509
+ "title": "Seed",
1510
+ "type": "integer"
1511
+ }
1512
+ },
1513
+ "title": "DemoDataSource",
1514
+ "type": "object"
1515
+ },
1516
+ "Dimension": {
1517
+ "additionalProperties": true,
1518
+ "description": "A dimension (attribute) inside a Dataset.",
1519
+ "properties": {
1520
+ "ai_context": {
1521
+ "anyOf": [
1522
+ {
1523
+ "additionalProperties": {
1524
+ "$ref": "#/$defs/JsonValue"
1525
+ },
1526
+ "type": "object"
1527
+ },
1528
+ {
1529
+ "type": "string"
1530
+ },
1531
+ {
1532
+ "type": "null"
1533
+ }
1534
+ ],
1535
+ "default": null,
1536
+ "title": "Ai Context"
1537
+ },
1538
+ "column": {
1539
+ "anyOf": [
1540
+ {
1541
+ "type": "string"
1542
+ },
1543
+ {
1544
+ "type": "null"
1545
+ }
1546
+ ],
1547
+ "default": null,
1548
+ "description": "Warehouse column this dimension reads. Defaults to the id.",
1549
+ "title": "Column"
1550
+ },
1551
+ "custom_extensions": {
1552
+ "anyOf": [
1553
+ {
1554
+ "items": {
1555
+ "additionalProperties": {
1556
+ "$ref": "#/$defs/JsonValue"
1557
+ },
1558
+ "type": "object"
1559
+ },
1560
+ "type": "array"
1561
+ },
1562
+ {
1563
+ "type": "null"
1564
+ }
1565
+ ],
1566
+ "default": null,
1567
+ "title": "Custom Extensions"
1568
+ },
1569
+ "description": {
1570
+ "anyOf": [
1571
+ {
1572
+ "type": "string"
1573
+ },
1574
+ {
1575
+ "type": "null"
1576
+ }
1577
+ ],
1578
+ "default": null,
1579
+ "title": "Description"
1580
+ },
1581
+ "expression": {
1582
+ "anyOf": [
1583
+ {
1584
+ "type": "string"
1585
+ },
1586
+ {
1587
+ "$ref": "#/$defs/Expression"
1588
+ },
1589
+ {
1590
+ "type": "null"
1591
+ }
1592
+ ],
1593
+ "default": null,
1594
+ "description": "SQL expression to use instead of a plain column.",
1595
+ "title": "Expression"
1596
+ },
1597
+ "format": {
1598
+ "anyOf": [
1599
+ {
1600
+ "type": "string"
1601
+ },
1602
+ {
1603
+ "type": "null"
1604
+ }
1605
+ ],
1606
+ "default": null,
1607
+ "title": "Format"
1608
+ },
1609
+ "group": {
1610
+ "anyOf": [
1611
+ {
1612
+ "type": "string"
1613
+ },
1614
+ {
1615
+ "type": "null"
1616
+ }
1617
+ ],
1618
+ "default": null,
1619
+ "title": "Group"
1620
+ },
1621
+ "hidden": {
1622
+ "anyOf": [
1623
+ {
1624
+ "type": "boolean"
1625
+ },
1626
+ {
1627
+ "type": "null"
1628
+ }
1629
+ ],
1630
+ "default": null,
1631
+ "title": "Hidden"
1632
+ },
1633
+ "id": {
1634
+ "description": "Id widgets use to group or filter by, for example business_date.",
1635
+ "title": "Id",
1636
+ "type": "string"
1637
+ },
1638
+ "is_time": {
1639
+ "anyOf": [
1640
+ {
1641
+ "type": "boolean"
1642
+ },
1643
+ {
1644
+ "type": "null"
1645
+ }
1646
+ ],
1647
+ "default": null,
1648
+ "title": "Is Time"
1649
+ },
1650
+ "label": {
1651
+ "anyOf": [
1652
+ {
1653
+ "type": "string"
1654
+ },
1655
+ {
1656
+ "type": "null"
1657
+ }
1658
+ ],
1659
+ "default": null,
1660
+ "title": "Label"
1661
+ },
1662
+ "name": {
1663
+ "anyOf": [
1664
+ {
1665
+ "type": "string"
1666
+ },
1667
+ {
1668
+ "type": "null"
1669
+ }
1670
+ ],
1671
+ "default": null,
1672
+ "title": "Name"
1673
+ },
1674
+ "type": {
1675
+ "default": "string",
1676
+ "enum": [
1677
+ "string",
1678
+ "number",
1679
+ "date",
1680
+ "time",
1681
+ "boolean"
1682
+ ],
1683
+ "title": "Type",
1684
+ "type": "string"
1685
+ }
1686
+ },
1687
+ "required": [
1688
+ "id"
1689
+ ],
1690
+ "title": "Dimension",
1691
+ "type": "object"
1692
+ },
1693
+ "Expression": {
1694
+ "additionalProperties": true,
1695
+ "description": "OSI-style multi-dialect expression block.\n\n``dialects`` lists SQL or expression variants per warehouse. ``default`` is\navailable for row-level formulas or fallback SQL.",
1696
+ "properties": {
1697
+ "default": {
1698
+ "anyOf": [
1699
+ {
1700
+ "type": "string"
1701
+ },
1702
+ {
1703
+ "type": "null"
1704
+ }
1705
+ ],
1706
+ "default": null,
1707
+ "title": "Default"
1708
+ },
1709
+ "dialects": {
1710
+ "items": {
1711
+ "$ref": "#/$defs/ExpressionDialect"
1712
+ },
1713
+ "title": "Dialects",
1714
+ "type": "array"
1715
+ }
1716
+ },
1717
+ "title": "Expression",
1718
+ "type": "object"
1719
+ },
1720
+ "ExpressionDialect": {
1721
+ "additionalProperties": true,
1722
+ "description": "A single dialect expression for a field or metric.",
1723
+ "properties": {
1724
+ "dialect": {
1725
+ "title": "Dialect",
1726
+ "type": "string"
1727
+ },
1728
+ "expression": {
1729
+ "title": "Expression",
1730
+ "type": "string"
1731
+ }
1732
+ },
1733
+ "required": [
1734
+ "dialect",
1735
+ "expression"
1736
+ ],
1737
+ "title": "ExpressionDialect",
1738
+ "type": "object"
1739
+ },
1740
+ "FieldMapping": {
1741
+ "additionalProperties": true,
1742
+ "description": "Map widget fields to columns in the data source.",
1743
+ "properties": {
1744
+ "category": {
1745
+ "anyOf": [
1746
+ {
1747
+ "type": "string"
1748
+ },
1749
+ {
1750
+ "type": "null"
1751
+ }
1752
+ ],
1753
+ "default": null,
1754
+ "title": "Category"
1755
+ },
1756
+ "date": {
1757
+ "anyOf": [
1758
+ {
1759
+ "type": "string"
1760
+ },
1761
+ {
1762
+ "type": "null"
1763
+ }
1764
+ ],
1765
+ "default": null,
1766
+ "title": "Date"
1767
+ },
1768
+ "delta": {
1769
+ "anyOf": [
1770
+ {
1771
+ "type": "string"
1772
+ },
1773
+ {
1774
+ "type": "null"
1775
+ }
1776
+ ],
1777
+ "default": null,
1778
+ "title": "Delta"
1779
+ },
1780
+ "label": {
1781
+ "anyOf": [
1782
+ {
1783
+ "type": "string"
1784
+ },
1785
+ {
1786
+ "type": "null"
1787
+ }
1788
+ ],
1789
+ "default": null,
1790
+ "title": "Label"
1791
+ },
1792
+ "series": {
1793
+ "anyOf": [
1794
+ {
1795
+ "type": "string"
1796
+ },
1797
+ {
1798
+ "type": "null"
1799
+ }
1800
+ ],
1801
+ "default": null,
1802
+ "title": "Series"
1803
+ },
1804
+ "series_name": {
1805
+ "anyOf": [
1806
+ {
1807
+ "type": "string"
1808
+ },
1809
+ {
1810
+ "type": "null"
1811
+ }
1812
+ ],
1813
+ "default": null,
1814
+ "title": "Series Name"
1815
+ },
1816
+ "value": {
1817
+ "anyOf": [
1818
+ {
1819
+ "type": "string"
1820
+ },
1821
+ {
1822
+ "type": "null"
1823
+ }
1824
+ ],
1825
+ "default": null,
1826
+ "title": "Value"
1827
+ },
1828
+ "x": {
1829
+ "anyOf": [
1830
+ {
1831
+ "type": "string"
1832
+ },
1833
+ {
1834
+ "type": "null"
1835
+ }
1836
+ ],
1837
+ "default": null,
1838
+ "title": "X"
1839
+ },
1840
+ "y": {
1841
+ "anyOf": [
1842
+ {
1843
+ "type": "string"
1844
+ },
1845
+ {
1846
+ "type": "null"
1847
+ }
1848
+ ],
1849
+ "default": null,
1850
+ "title": "Y"
1851
+ }
1852
+ },
1853
+ "title": "FieldMapping",
1854
+ "type": "object"
1855
+ },
1856
+ "FilterBinding": {
1857
+ "additionalProperties": true,
1858
+ "description": "How a filter widget is wired to a target widget.",
1859
+ "properties": {
1860
+ "field": {
1861
+ "title": "Field",
1862
+ "type": "string"
1863
+ },
1864
+ "operator": {
1865
+ "default": "eq",
1866
+ "enum": [
1867
+ "eq",
1868
+ "in",
1869
+ "gt",
1870
+ "lt",
1871
+ "gte",
1872
+ "lte",
1873
+ "contains",
1874
+ "date",
1875
+ "between"
1876
+ ],
1877
+ "title": "Operator",
1878
+ "type": "string"
1879
+ },
1880
+ "param": {
1881
+ "anyOf": [
1882
+ {
1883
+ "type": "string"
1884
+ },
1885
+ {
1886
+ "type": "null"
1887
+ }
1888
+ ],
1889
+ "default": null,
1890
+ "title": "Param"
1891
+ },
1892
+ "target": {
1893
+ "default": "*",
1894
+ "title": "Target",
1895
+ "type": "string"
1896
+ }
1897
+ },
1898
+ "required": [
1899
+ "field"
1900
+ ],
1901
+ "title": "FilterBinding",
1902
+ "type": "object"
1903
+ },
1904
+ "FilterLayout": {
1905
+ "additionalProperties": true,
1906
+ "description": "Algorithmic or manual layout for the filter panel.",
1907
+ "properties": {
1908
+ "buttonSpan": {
1909
+ "anyOf": [
1910
+ {
1911
+ "type": "integer"
1912
+ },
1913
+ {
1914
+ "type": "null"
1915
+ }
1916
+ ],
1917
+ "default": 1,
1918
+ "title": "Buttonspan"
1919
+ },
1920
+ "columns": {
1921
+ "anyOf": [
1922
+ {
1923
+ "type": "integer"
1924
+ },
1925
+ {
1926
+ "type": "null"
1927
+ }
1928
+ ],
1929
+ "default": null,
1930
+ "title": "Columns"
1931
+ },
1932
+ "dateSpan": {
1933
+ "anyOf": [
1934
+ {
1935
+ "type": "integer"
1936
+ },
1937
+ {
1938
+ "type": "null"
1939
+ }
1940
+ ],
1941
+ "default": 2,
1942
+ "title": "Datespan"
1943
+ },
1944
+ "gap": {
1945
+ "anyOf": [
1946
+ {
1947
+ "type": "string"
1948
+ },
1949
+ {
1950
+ "type": "integer"
1951
+ },
1952
+ {
1953
+ "type": "null"
1954
+ }
1955
+ ],
1956
+ "default": 12,
1957
+ "title": "Gap"
1958
+ },
1959
+ "maxColumnWidth": {
1960
+ "anyOf": [
1961
+ {
1962
+ "type": "integer"
1963
+ },
1964
+ {
1965
+ "type": "null"
1966
+ }
1967
+ ],
1968
+ "default": null,
1969
+ "title": "Maxcolumnwidth"
1970
+ },
1971
+ "minColumnWidth": {
1972
+ "anyOf": [
1973
+ {
1974
+ "type": "integer"
1975
+ },
1976
+ {
1977
+ "type": "null"
1978
+ }
1979
+ ],
1980
+ "default": 180,
1981
+ "title": "Mincolumnwidth"
1982
+ },
1983
+ "mode": {
1984
+ "default": "auto",
1985
+ "enum": [
1986
+ "auto",
1987
+ "grid",
1988
+ "flex"
1989
+ ],
1990
+ "title": "Mode",
1991
+ "type": "string"
1992
+ },
1993
+ "padding": {
1994
+ "anyOf": [
1995
+ {
1996
+ "type": "string"
1997
+ },
1998
+ {
1999
+ "type": "integer"
2000
+ },
2001
+ {
2002
+ "type": "null"
2003
+ }
2004
+ ],
2005
+ "default": 12,
2006
+ "title": "Padding"
2007
+ },
2008
+ "radioSpan": {
2009
+ "anyOf": [
2010
+ {
2011
+ "type": "integer"
2012
+ },
2013
+ {
2014
+ "type": "null"
2015
+ }
2016
+ ],
2017
+ "default": 2,
2018
+ "title": "Radiospan"
2019
+ },
2020
+ "selectSpan": {
2021
+ "anyOf": [
2022
+ {
2023
+ "type": "integer"
2024
+ },
2025
+ {
2026
+ "type": "null"
2027
+ }
2028
+ ],
2029
+ "default": 1,
2030
+ "title": "Selectspan"
2031
+ }
2032
+ },
2033
+ "title": "FilterLayout",
2034
+ "type": "object"
2035
+ },
2036
+ "IncomingFilter": {
2037
+ "additionalProperties": true,
2038
+ "description": "How a target widget or dataset applies a filter broadcast from the dashboard.",
2039
+ "properties": {
2040
+ "field": {
2041
+ "title": "Field",
2042
+ "type": "string"
2043
+ },
2044
+ "filter_id": {
2045
+ "title": "Filter Id",
2046
+ "type": "string"
2047
+ },
2048
+ "operator": {
2049
+ "default": "eq",
2050
+ "enum": [
2051
+ "eq",
2052
+ "in",
2053
+ "gt",
2054
+ "lt",
2055
+ "gte",
2056
+ "lte",
2057
+ "contains",
2058
+ "date",
2059
+ "between"
2060
+ ],
2061
+ "title": "Operator",
2062
+ "type": "string"
2063
+ },
2064
+ "param": {
2065
+ "anyOf": [
2066
+ {
2067
+ "type": "string"
2068
+ },
2069
+ {
2070
+ "type": "null"
2071
+ }
2072
+ ],
2073
+ "default": null,
2074
+ "title": "Param"
2075
+ }
2076
+ },
2077
+ "required": [
2078
+ "filter_id",
2079
+ "field"
2080
+ ],
2081
+ "title": "IncomingFilter",
2082
+ "type": "object"
2083
+ },
2084
+ "InteractionVariableMapping": {
2085
+ "additionalProperties": true,
2086
+ "description": "Map a source value (event, filter, or literal) to a target filter/variable.",
2087
+ "properties": {
2088
+ "source": {
2089
+ "$ref": "#/$defs/InteractionVariableSource"
2090
+ },
2091
+ "target": {
2092
+ "title": "Target",
2093
+ "type": "string"
2094
+ },
2095
+ "target_type": {
2096
+ "default": "filter",
2097
+ "enum": [
2098
+ "filter",
2099
+ "dimension"
2100
+ ],
2101
+ "title": "Target Type",
2102
+ "type": "string"
2103
+ }
2104
+ },
2105
+ "required": [
2106
+ "target"
2107
+ ],
2108
+ "title": "InteractionVariableMapping",
2109
+ "type": "object"
2110
+ },
2111
+ "InteractionVariableSource": {
2112
+ "additionalProperties": true,
2113
+ "description": "Source of a value for an interaction variable mapping.",
2114
+ "properties": {
2115
+ "field": {
2116
+ "anyOf": [
2117
+ {
2118
+ "type": "string"
2119
+ },
2120
+ {
2121
+ "type": "null"
2122
+ }
2123
+ ],
2124
+ "default": null,
2125
+ "title": "Field"
2126
+ },
2127
+ "kind": {
2128
+ "default": "event",
2129
+ "enum": [
2130
+ "event",
2131
+ "filter",
2132
+ "literal"
2133
+ ],
2134
+ "title": "Kind",
2135
+ "type": "string"
2136
+ },
2137
+ "value": {
2138
+ "anyOf": [
2139
+ {
2140
+ "$ref": "#/$defs/JsonValue"
2141
+ },
2142
+ {
2143
+ "type": "null"
2144
+ }
2145
+ ],
2146
+ "default": null
2147
+ }
2148
+ },
2149
+ "title": "InteractionVariableSource",
2150
+ "type": "object"
2151
+ },
2152
+ "JsonValue": {},
2153
+ "KpiDataSource": {
2154
+ "additionalProperties": true,
2155
+ "description": "Run a KPI from the catalog.",
2156
+ "properties": {
2157
+ "data_model_id": {
2158
+ "anyOf": [
2159
+ {
2160
+ "type": "string"
2161
+ },
2162
+ {
2163
+ "type": "null"
2164
+ }
2165
+ ],
2166
+ "default": null,
2167
+ "title": "Data Model Id"
2168
+ },
2169
+ "kind": {
2170
+ "const": "kpi",
2171
+ "default": "kpi",
2172
+ "title": "Kind",
2173
+ "type": "string"
2174
+ },
2175
+ "kpi": {
2176
+ "title": "Kpi",
2177
+ "type": "string"
2178
+ },
2179
+ "labelColumn": {
2180
+ "anyOf": [
2181
+ {
2182
+ "type": "string"
2183
+ },
2184
+ {
2185
+ "type": "null"
2186
+ }
2187
+ ],
2188
+ "default": null,
2189
+ "title": "Labelcolumn"
2190
+ },
2191
+ "params": {
2192
+ "additionalProperties": {
2193
+ "$ref": "#/$defs/JsonValue"
2194
+ },
2195
+ "title": "Params",
2196
+ "type": "object"
2197
+ },
2198
+ "valueColumn": {
2199
+ "anyOf": [
2200
+ {
2201
+ "type": "string"
2202
+ },
2203
+ {
2204
+ "type": "null"
2205
+ }
2206
+ ],
2207
+ "default": null,
2208
+ "title": "Valuecolumn"
2209
+ }
2210
+ },
2211
+ "required": [
2212
+ "kpi"
2213
+ ],
2214
+ "title": "KpiDataSource",
2215
+ "type": "object"
2216
+ },
2217
+ "LabelBlock": {
2218
+ "additionalProperties": true,
2219
+ "description": "A rich label with optional tooltip and icon.",
2220
+ "properties": {
2221
+ "icon": {
2222
+ "anyOf": [
2223
+ {
2224
+ "type": "string"
2225
+ },
2226
+ {
2227
+ "type": "null"
2228
+ }
2229
+ ],
2230
+ "default": null,
2231
+ "title": "Icon"
2232
+ },
2233
+ "position": {
2234
+ "anyOf": [
2235
+ {
2236
+ "enum": [
2237
+ "top",
2238
+ "bottom",
2239
+ "left",
2240
+ "right"
2241
+ ],
2242
+ "type": "string"
2243
+ },
2244
+ {
2245
+ "type": "null"
2246
+ }
2247
+ ],
2248
+ "default": "top",
2249
+ "title": "Position"
2250
+ },
2251
+ "text": {
2252
+ "anyOf": [
2253
+ {
2254
+ "type": "string"
2255
+ },
2256
+ {
2257
+ "type": "null"
2258
+ }
2259
+ ],
2260
+ "default": null,
2261
+ "title": "Text"
2262
+ },
2263
+ "tooltip": {
2264
+ "anyOf": [
2265
+ {
2266
+ "type": "string"
2267
+ },
2268
+ {
2269
+ "type": "null"
2270
+ }
2271
+ ],
2272
+ "default": null,
2273
+ "title": "Tooltip"
2274
+ }
2275
+ },
2276
+ "title": "LabelBlock",
2277
+ "type": "object"
2278
+ },
2279
+ "LayoutItem": {
2280
+ "additionalProperties": true,
2281
+ "description": "A single position/size entry in a responsive grid.",
2282
+ "properties": {
2283
+ "h": {
2284
+ "default": 4,
2285
+ "title": "H",
2286
+ "type": "integer"
2287
+ },
2288
+ "isBounded": {
2289
+ "anyOf": [
2290
+ {
2291
+ "type": "boolean"
2292
+ },
2293
+ {
2294
+ "type": "null"
2295
+ }
2296
+ ],
2297
+ "default": null,
2298
+ "title": "Isbounded"
2299
+ },
2300
+ "isDraggable": {
2301
+ "anyOf": [
2302
+ {
2303
+ "type": "boolean"
2304
+ },
2305
+ {
2306
+ "type": "null"
2307
+ }
2308
+ ],
2309
+ "default": null,
2310
+ "title": "Isdraggable"
2311
+ },
2312
+ "isResizable": {
2313
+ "anyOf": [
2314
+ {
2315
+ "type": "boolean"
2316
+ },
2317
+ {
2318
+ "type": "null"
2319
+ }
2320
+ ],
2321
+ "default": null,
2322
+ "title": "Isresizable"
2323
+ },
2324
+ "maxH": {
2325
+ "anyOf": [
2326
+ {
2327
+ "type": "integer"
2328
+ },
2329
+ {
2330
+ "type": "null"
2331
+ }
2332
+ ],
2333
+ "default": null,
2334
+ "title": "Maxh"
2335
+ },
2336
+ "maxW": {
2337
+ "anyOf": [
2338
+ {
2339
+ "type": "integer"
2340
+ },
2341
+ {
2342
+ "type": "null"
2343
+ }
2344
+ ],
2345
+ "default": null,
2346
+ "title": "Maxw"
2347
+ },
2348
+ "minH": {
2349
+ "anyOf": [
2350
+ {
2351
+ "type": "integer"
2352
+ },
2353
+ {
2354
+ "type": "null"
2355
+ }
2356
+ ],
2357
+ "default": null,
2358
+ "title": "Minh"
2359
+ },
2360
+ "minW": {
2361
+ "anyOf": [
2362
+ {
2363
+ "type": "integer"
2364
+ },
2365
+ {
2366
+ "type": "null"
2367
+ }
2368
+ ],
2369
+ "default": null,
2370
+ "title": "Minw"
2371
+ },
2372
+ "resizeHandles": {
2373
+ "anyOf": [
2374
+ {
2375
+ "items": {
2376
+ "type": "string"
2377
+ },
2378
+ "type": "array"
2379
+ },
2380
+ {
2381
+ "type": "null"
2382
+ }
2383
+ ],
2384
+ "default": null,
2385
+ "title": "Resizehandles"
2386
+ },
2387
+ "w": {
2388
+ "default": 4,
2389
+ "title": "W",
2390
+ "type": "integer"
2391
+ },
2392
+ "x": {
2393
+ "default": 0,
2394
+ "title": "X",
2395
+ "type": "integer"
2396
+ },
2397
+ "y": {
2398
+ "default": 0,
2399
+ "title": "Y",
2400
+ "type": "integer"
2401
+ }
2402
+ },
2403
+ "title": "LayoutItem",
2404
+ "type": "object"
2405
+ },
2406
+ "MeshPart": {
2407
+ "additionalProperties": true,
2408
+ "description": "One dataset taking part in a mesh dataset.",
2409
+ "properties": {
2410
+ "dataset": {
2411
+ "title": "Dataset",
2412
+ "type": "string"
2413
+ }
2414
+ },
2415
+ "required": [
2416
+ "dataset"
2417
+ ],
2418
+ "title": "MeshPart",
2419
+ "type": "object"
2420
+ },
2421
+ "MeshPlan": {
2422
+ "additionalProperties": true,
2423
+ "description": "How a mesh dataset stitches datasets from different data stores together.",
2424
+ "properties": {
2425
+ "join": {
2426
+ "default": "left",
2427
+ "enum": [
2428
+ "left",
2429
+ "inner"
2430
+ ],
2431
+ "title": "Join",
2432
+ "type": "string"
2433
+ },
2434
+ "join_columns": {
2435
+ "items": {
2436
+ "type": "string"
2437
+ },
2438
+ "title": "Join Columns",
2439
+ "type": "array"
2440
+ },
2441
+ "max_rows": {
2442
+ "default": 50000,
2443
+ "exclusiveMinimum": 0,
2444
+ "title": "Max Rows",
2445
+ "type": "integer"
2446
+ },
2447
+ "parts": {
2448
+ "items": {
2449
+ "$ref": "#/$defs/MeshPart"
2450
+ },
2451
+ "maxItems": 3,
2452
+ "title": "Parts",
2453
+ "type": "array"
2454
+ }
2455
+ },
2456
+ "title": "MeshPlan",
2457
+ "type": "object"
2458
+ },
2459
+ "Metadata": {
2460
+ "additionalProperties": true,
2461
+ "description": "Common metadata for dashboards and widgets.",
2462
+ "properties": {
2463
+ "author": {
2464
+ "anyOf": [
2465
+ {
2466
+ "type": "string"
2467
+ },
2468
+ {
2469
+ "type": "null"
2470
+ }
2471
+ ],
2472
+ "default": null,
2473
+ "title": "Author"
2474
+ },
2475
+ "description": {
2476
+ "default": "",
2477
+ "title": "Description",
2478
+ "type": "string"
2479
+ },
2480
+ "header": {
2481
+ "anyOf": [
2482
+ {
2483
+ "$ref": "#/$defs/WidgetHeader"
2484
+ },
2485
+ {
2486
+ "type": "null"
2487
+ }
2488
+ ],
2489
+ "default": null
2490
+ },
2491
+ "id": {
2492
+ "title": "Id",
2493
+ "type": "string"
2494
+ },
2495
+ "name": {
2496
+ "title": "Name",
2497
+ "type": "string"
2498
+ },
2499
+ "platform": {
2500
+ "$ref": "#/$defs/PlatformAttributes"
2501
+ },
2502
+ "tags": {
2503
+ "items": {
2504
+ "type": "string"
2505
+ },
2506
+ "title": "Tags",
2507
+ "type": "array"
2508
+ },
2509
+ "version": {
2510
+ "default": "1.0.0",
2511
+ "title": "Version",
2512
+ "type": "string"
2513
+ }
2514
+ },
2515
+ "required": [
2516
+ "id",
2517
+ "name"
2518
+ ],
2519
+ "title": "Metadata",
2520
+ "type": "object"
2521
+ },
2522
+ "Metric": {
2523
+ "additionalProperties": true,
2524
+ "description": "A calculated field or metric inside a Dataset.",
2525
+ "properties": {
2526
+ "ai_context": {
2527
+ "anyOf": [
2528
+ {
2529
+ "additionalProperties": {
2530
+ "$ref": "#/$defs/JsonValue"
2531
+ },
2532
+ "type": "object"
2533
+ },
2534
+ {
2535
+ "type": "string"
2536
+ },
2537
+ {
2538
+ "type": "null"
2539
+ }
2540
+ ],
2541
+ "default": null,
2542
+ "title": "Ai Context"
2543
+ },
2544
+ "custom_extensions": {
2545
+ "anyOf": [
2546
+ {
2547
+ "items": {
2548
+ "additionalProperties": {
2549
+ "$ref": "#/$defs/JsonValue"
2550
+ },
2551
+ "type": "object"
2552
+ },
2553
+ "type": "array"
2554
+ },
2555
+ {
2556
+ "type": "null"
2557
+ }
2558
+ ],
2559
+ "default": null,
2560
+ "title": "Custom Extensions"
2561
+ },
2562
+ "dependencies": {
2563
+ "anyOf": [
2564
+ {
2565
+ "items": {
2566
+ "type": "string"
2567
+ },
2568
+ "type": "array"
2569
+ },
2570
+ {
2571
+ "type": "null"
2572
+ }
2573
+ ],
2574
+ "default": null,
2575
+ "title": "Dependencies"
2576
+ },
2577
+ "description": {
2578
+ "anyOf": [
2579
+ {
2580
+ "type": "string"
2581
+ },
2582
+ {
2583
+ "type": "null"
2584
+ }
2585
+ ],
2586
+ "default": null,
2587
+ "title": "Description"
2588
+ },
2589
+ "expression": {
2590
+ "anyOf": [
2591
+ {
2592
+ "type": "string"
2593
+ },
2594
+ {
2595
+ "$ref": "#/$defs/Expression"
2596
+ }
2597
+ ],
2598
+ "description": "SQL aggregate such as SUM(NET_SALES), or an expression over other metrics such as labor_cost / net_sales.",
2599
+ "title": "Expression"
2600
+ },
2601
+ "filter": {
2602
+ "anyOf": [
2603
+ {
2604
+ "type": "string"
2605
+ },
2606
+ {
2607
+ "type": "null"
2608
+ }
2609
+ ],
2610
+ "default": null,
2611
+ "title": "Filter"
2612
+ },
2613
+ "format": {
2614
+ "anyOf": [
2615
+ {
2616
+ "type": "string"
2617
+ },
2618
+ {
2619
+ "type": "null"
2620
+ }
2621
+ ],
2622
+ "default": null,
2623
+ "title": "Format"
2624
+ },
2625
+ "group": {
2626
+ "anyOf": [
2627
+ {
2628
+ "type": "string"
2629
+ },
2630
+ {
2631
+ "type": "null"
2632
+ }
2633
+ ],
2634
+ "default": null,
2635
+ "title": "Group"
2636
+ },
2637
+ "hidden": {
2638
+ "anyOf": [
2639
+ {
2640
+ "type": "boolean"
2641
+ },
2642
+ {
2643
+ "type": "null"
2644
+ }
2645
+ ],
2646
+ "default": null,
2647
+ "title": "Hidden"
2648
+ },
2649
+ "id": {
2650
+ "description": "Id widgets use to ask for this metric, for example net_sales.",
2651
+ "title": "Id",
2652
+ "type": "string"
2653
+ },
2654
+ "label": {
2655
+ "anyOf": [
2656
+ {
2657
+ "type": "string"
2658
+ },
2659
+ {
2660
+ "type": "null"
2661
+ }
2662
+ ],
2663
+ "default": null,
2664
+ "title": "Label"
2665
+ },
2666
+ "name": {
2667
+ "anyOf": [
2668
+ {
2669
+ "type": "string"
2670
+ },
2671
+ {
2672
+ "type": "null"
2673
+ }
2674
+ ],
2675
+ "default": null,
2676
+ "title": "Name"
2677
+ },
2678
+ "type": {
2679
+ "default": "formula",
2680
+ "description": "sql sends the expression to the warehouse; formula computes it from other metrics after the query.",
2681
+ "enum": [
2682
+ "sql",
2683
+ "formula"
2684
+ ],
2685
+ "title": "Type",
2686
+ "type": "string"
2687
+ }
2688
+ },
2689
+ "required": [
2690
+ "id",
2691
+ "expression"
2692
+ ],
2693
+ "title": "Metric",
2694
+ "type": "object"
2695
+ },
2696
+ "NamedQuery": {
2697
+ "additionalProperties": true,
2698
+ "description": "A reusable named query referenced by widgets.",
2699
+ "properties": {
2700
+ "data_model_id": {
2701
+ "anyOf": [
2702
+ {
2703
+ "type": "string"
2704
+ },
2705
+ {
2706
+ "type": "null"
2707
+ }
2708
+ ],
2709
+ "default": null,
2710
+ "title": "Data Model Id"
2711
+ },
2712
+ "dimensions": {
2713
+ "anyOf": [
2714
+ {
2715
+ "items": {
2716
+ "type": "string"
2717
+ },
2718
+ "type": "array"
2719
+ },
2720
+ {
2721
+ "type": "null"
2722
+ }
2723
+ ],
2724
+ "default": null,
2725
+ "title": "Dimensions"
2726
+ },
2727
+ "file": {
2728
+ "anyOf": [
2729
+ {
2730
+ "type": "string"
2731
+ },
2732
+ {
2733
+ "type": "null"
2734
+ }
2735
+ ],
2736
+ "default": null,
2737
+ "title": "File"
2738
+ },
2739
+ "filter_field": {
2740
+ "anyOf": [
2741
+ {
2742
+ "type": "string"
2743
+ },
2744
+ {
2745
+ "type": "null"
2746
+ }
2747
+ ],
2748
+ "default": null,
2749
+ "title": "Filter Field"
2750
+ },
2751
+ "filters": {
2752
+ "anyOf": [
2753
+ {
2754
+ "items": {
2755
+ "additionalProperties": {
2756
+ "$ref": "#/$defs/JsonValue"
2757
+ },
2758
+ "type": "object"
2759
+ },
2760
+ "type": "array"
2761
+ },
2762
+ {
2763
+ "type": "null"
2764
+ }
2765
+ ],
2766
+ "default": null,
2767
+ "title": "Filters"
2768
+ },
2769
+ "limit": {
2770
+ "anyOf": [
2771
+ {
2772
+ "type": "integer"
2773
+ },
2774
+ {
2775
+ "type": "null"
2776
+ }
2777
+ ],
2778
+ "default": null,
2779
+ "title": "Limit"
2780
+ },
2781
+ "metrics": {
2782
+ "anyOf": [
2783
+ {
2784
+ "items": {
2785
+ "type": "string"
2786
+ },
2787
+ "type": "array"
2788
+ },
2789
+ {
2790
+ "type": "null"
2791
+ }
2792
+ ],
2793
+ "default": null,
2794
+ "title": "Metrics"
2795
+ },
2796
+ "model": {
2797
+ "anyOf": [
2798
+ {
2799
+ "type": "string"
2800
+ },
2801
+ {
2802
+ "type": "null"
2803
+ }
2804
+ ],
2805
+ "default": null,
2806
+ "title": "Model"
2807
+ },
2808
+ "params": {
2809
+ "additionalProperties": {
2810
+ "$ref": "#/$defs/JsonValue"
2811
+ },
2812
+ "title": "Params",
2813
+ "type": "object"
2814
+ },
2815
+ "segments": {
2816
+ "anyOf": [
2817
+ {
2818
+ "items": {
2819
+ "type": "string"
2820
+ },
2821
+ "type": "array"
2822
+ },
2823
+ {
2824
+ "type": "null"
2825
+ }
2826
+ ],
2827
+ "default": null,
2828
+ "title": "Segments"
2829
+ },
2830
+ "sort": {
2831
+ "anyOf": [
2832
+ {
2833
+ "items": {
2834
+ "additionalProperties": {
2835
+ "$ref": "#/$defs/JsonValue"
2836
+ },
2837
+ "type": "object"
2838
+ },
2839
+ "type": "array"
2840
+ },
2841
+ {
2842
+ "type": "null"
2843
+ }
2844
+ ],
2845
+ "default": null,
2846
+ "title": "Sort"
2847
+ },
2848
+ "sql": {
2849
+ "anyOf": [
2850
+ {
2851
+ "type": "string"
2852
+ },
2853
+ {
2854
+ "type": "null"
2855
+ }
2856
+ ],
2857
+ "default": null,
2858
+ "title": "Sql"
2859
+ }
2860
+ },
2861
+ "title": "NamedQuery",
2862
+ "type": "object"
2863
+ },
2864
+ "PlatformAttributes": {
2865
+ "additionalProperties": true,
2866
+ "description": "Cross-cutting platform attributes attached to every dashboard object.\n\nThese attributes control the relationship of the object to the platform,\nthe dashboard, the user, and security. They are intentionally generic so\nthe spec can grow into the larger enterprise BI project.",
2867
+ "properties": {
2868
+ "allow_embed": {
2869
+ "default": false,
2870
+ "title": "Allow Embed",
2871
+ "type": "boolean"
2872
+ },
2873
+ "owner": {
2874
+ "anyOf": [
2875
+ {
2876
+ "type": "string"
2877
+ },
2878
+ {
2879
+ "type": "null"
2880
+ }
2881
+ ],
2882
+ "default": null,
2883
+ "title": "Owner"
2884
+ },
2885
+ "public": {
2886
+ "default": false,
2887
+ "title": "Public",
2888
+ "type": "boolean"
2889
+ },
2890
+ "roles": {
2891
+ "items": {
2892
+ "type": "string"
2893
+ },
2894
+ "title": "Roles",
2895
+ "type": "array"
2896
+ },
2897
+ "scope": {
2898
+ "default": "dashboard",
2899
+ "enum": [
2900
+ "org",
2901
+ "project",
2902
+ "dashboard",
2903
+ "widget"
2904
+ ],
2905
+ "title": "Scope",
2906
+ "type": "string"
2907
+ },
2908
+ "status": {
2909
+ "default": "draft",
2910
+ "enum": [
2911
+ "draft",
2912
+ "published",
2913
+ "archived"
2914
+ ],
2915
+ "title": "Status",
2916
+ "type": "string"
2917
+ },
2918
+ "tags": {
2919
+ "items": {
2920
+ "type": "string"
2921
+ },
2922
+ "title": "Tags",
2923
+ "type": "array"
2924
+ },
2925
+ "version": {
2926
+ "default": "1.0.0",
2927
+ "title": "Version",
2928
+ "type": "string"
2929
+ }
2930
+ },
2931
+ "title": "PlatformAttributes",
2932
+ "type": "object"
2933
+ },
2934
+ "QueryDataSource": {
2935
+ "additionalProperties": true,
2936
+ "description": "Reference a named query defined in the dashboard manifest.",
2937
+ "properties": {
2938
+ "data_model_id": {
2939
+ "anyOf": [
2940
+ {
2941
+ "type": "string"
2942
+ },
2943
+ {
2944
+ "type": "null"
2945
+ }
2946
+ ],
2947
+ "default": null,
2948
+ "title": "Data Model Id"
2949
+ },
2950
+ "kind": {
2951
+ "const": "query",
2952
+ "default": "query",
2953
+ "title": "Kind",
2954
+ "type": "string"
2955
+ },
2956
+ "params": {
2957
+ "additionalProperties": {
2958
+ "$ref": "#/$defs/JsonValue"
2959
+ },
2960
+ "title": "Params",
2961
+ "type": "object"
2962
+ },
2963
+ "query": {
2964
+ "title": "Query",
2965
+ "type": "string"
2966
+ }
2967
+ },
2968
+ "required": [
2969
+ "query"
2970
+ ],
2971
+ "title": "QueryDataSource",
2972
+ "type": "object"
2973
+ },
2974
+ "Relationship": {
2975
+ "additionalProperties": true,
2976
+ "description": "A relationship between two datasets (OSI-style join).",
2977
+ "properties": {
2978
+ "ai_context": {
2979
+ "anyOf": [
2980
+ {
2981
+ "additionalProperties": {
2982
+ "$ref": "#/$defs/JsonValue"
2983
+ },
2984
+ "type": "object"
2985
+ },
2986
+ {
2987
+ "type": "string"
2988
+ },
2989
+ {
2990
+ "type": "null"
2991
+ }
2992
+ ],
2993
+ "default": null,
2994
+ "title": "Ai Context"
2995
+ },
2996
+ "custom_extensions": {
2997
+ "anyOf": [
2998
+ {
2999
+ "items": {
3000
+ "additionalProperties": {
3001
+ "$ref": "#/$defs/JsonValue"
3002
+ },
3003
+ "type": "object"
3004
+ },
3005
+ "type": "array"
3006
+ },
3007
+ {
3008
+ "type": "null"
3009
+ }
3010
+ ],
3011
+ "default": null,
3012
+ "title": "Custom Extensions"
3013
+ },
3014
+ "from": {
3015
+ "description": "Id of the dataset on the left of the join.",
3016
+ "title": "From",
3017
+ "type": "string"
3018
+ },
3019
+ "from_columns": {
3020
+ "description": "Join columns on the from dataset.",
3021
+ "items": {
3022
+ "type": "string"
3023
+ },
3024
+ "title": "From Columns",
3025
+ "type": "array"
3026
+ },
3027
+ "name": {
3028
+ "description": "Name of the join, for example sales_to_labor.",
3029
+ "title": "Name",
3030
+ "type": "string"
3031
+ },
3032
+ "relationship": {
3033
+ "anyOf": [
3034
+ {
3035
+ "enum": [
3036
+ "one_to_one",
3037
+ "many_to_one",
3038
+ "one_to_many",
3039
+ "many_to_many"
3040
+ ],
3041
+ "type": "string"
3042
+ },
3043
+ {
3044
+ "type": "null"
3045
+ }
3046
+ ],
3047
+ "default": null,
3048
+ "description": "Cardinality. one_to_many and many_to_many can fan out and double-count.",
3049
+ "title": "Relationship"
3050
+ },
3051
+ "to": {
3052
+ "description": "Id of the dataset on the right of the join.",
3053
+ "title": "To",
3054
+ "type": "string"
3055
+ },
3056
+ "to_columns": {
3057
+ "description": "Join columns on the to dataset, positionally matched to from_columns.",
3058
+ "items": {
3059
+ "type": "string"
3060
+ },
3061
+ "title": "To Columns",
3062
+ "type": "array"
3063
+ }
3064
+ },
3065
+ "required": [
3066
+ "name",
3067
+ "from",
3068
+ "to"
3069
+ ],
3070
+ "title": "Relationship",
3071
+ "type": "object"
3072
+ },
3073
+ "ResponsiveLayout": {
3074
+ "additionalProperties": true,
3075
+ "description": "Responsive overrides for a layout item.",
3076
+ "properties": {
3077
+ "desktop": {
3078
+ "anyOf": [
3079
+ {
3080
+ "$ref": "#/$defs/LayoutItem"
3081
+ },
3082
+ {
3083
+ "type": "null"
3084
+ }
3085
+ ],
3086
+ "default": null
3087
+ },
3088
+ "mobile": {
3089
+ "anyOf": [
3090
+ {
3091
+ "$ref": "#/$defs/LayoutItem"
3092
+ },
3093
+ {
3094
+ "type": "null"
3095
+ }
3096
+ ],
3097
+ "default": null
3098
+ },
3099
+ "tablet": {
3100
+ "anyOf": [
3101
+ {
3102
+ "$ref": "#/$defs/LayoutItem"
3103
+ },
3104
+ {
3105
+ "type": "null"
3106
+ }
3107
+ ],
3108
+ "default": null
3109
+ },
3110
+ "wide": {
3111
+ "anyOf": [
3112
+ {
3113
+ "$ref": "#/$defs/LayoutItem"
3114
+ },
3115
+ {
3116
+ "type": "null"
3117
+ }
3118
+ ],
3119
+ "default": null
3120
+ }
3121
+ },
3122
+ "title": "ResponsiveLayout",
3123
+ "type": "object"
3124
+ },
3125
+ "SemanticModel": {
3126
+ "additionalProperties": true,
3127
+ "description": "An OSI semantic model block (data stores, datasets, relationships, metrics).",
3128
+ "properties": {
3129
+ "ai_context": {
3130
+ "anyOf": [
3131
+ {
3132
+ "additionalProperties": {
3133
+ "$ref": "#/$defs/JsonValue"
3134
+ },
3135
+ "type": "object"
3136
+ },
3137
+ {
3138
+ "type": "string"
3139
+ },
3140
+ {
3141
+ "type": "null"
3142
+ }
3143
+ ],
3144
+ "default": null,
3145
+ "description": "Business context available to host authoring tools, including synonyms.",
3146
+ "title": "Ai Context"
3147
+ },
3148
+ "custom_extensions": {
3149
+ "anyOf": [
3150
+ {
3151
+ "items": {
3152
+ "additionalProperties": {
3153
+ "$ref": "#/$defs/JsonValue"
3154
+ },
3155
+ "type": "object"
3156
+ },
3157
+ "type": "array"
3158
+ },
3159
+ {
3160
+ "type": "null"
3161
+ }
3162
+ ],
3163
+ "default": null,
3164
+ "title": "Custom Extensions"
3165
+ },
3166
+ "data_stores": {
3167
+ "description": "Warehouse connections datasets may read from.",
3168
+ "items": {
3169
+ "$ref": "#/$defs/DataStore"
3170
+ },
3171
+ "maxItems": 3,
3172
+ "title": "Data Stores",
3173
+ "type": "array"
3174
+ },
3175
+ "datasets": {
3176
+ "description": "Reusable sources of rows widgets can ask for.",
3177
+ "items": {
3178
+ "$ref": "#/$defs/Dataset"
3179
+ },
3180
+ "title": "Datasets",
3181
+ "type": "array"
3182
+ },
3183
+ "description": {
3184
+ "anyOf": [
3185
+ {
3186
+ "type": "string"
3187
+ },
3188
+ {
3189
+ "type": "null"
3190
+ }
3191
+ ],
3192
+ "default": null,
3193
+ "title": "Description"
3194
+ },
3195
+ "kind": {
3196
+ "const": "semantic_model",
3197
+ "default": "semantic_model",
3198
+ "title": "Kind",
3199
+ "type": "string"
3200
+ },
3201
+ "metrics": {
3202
+ "description": "Metrics usable across datasets, including formulas spanning a join.",
3203
+ "items": {
3204
+ "$ref": "#/$defs/Metric"
3205
+ },
3206
+ "title": "Metrics",
3207
+ "type": "array"
3208
+ },
3209
+ "name": {
3210
+ "description": "Model name. Dashboards reference the tenant model as default.",
3211
+ "title": "Name",
3212
+ "type": "string"
3213
+ },
3214
+ "relationships": {
3215
+ "description": "Joins between datasets, so one widget can mix their fields.",
3216
+ "items": {
3217
+ "$ref": "#/$defs/Relationship"
3218
+ },
3219
+ "title": "Relationships",
3220
+ "type": "array"
3221
+ }
3222
+ },
3223
+ "required": [
3224
+ "name"
3225
+ ],
3226
+ "title": "SemanticModel",
3227
+ "type": "object"
3228
+ },
3229
+ "SqlDataSource": {
3230
+ "additionalProperties": true,
3231
+ "description": "Run an arbitrary SQL query against the configured data store.",
3232
+ "properties": {
3233
+ "data_model_id": {
3234
+ "anyOf": [
3235
+ {
3236
+ "type": "string"
3237
+ },
3238
+ {
3239
+ "type": "null"
3240
+ }
3241
+ ],
3242
+ "default": null,
3243
+ "title": "Data Model Id"
3244
+ },
3245
+ "filter_field": {
3246
+ "anyOf": [
3247
+ {
3248
+ "type": "string"
3249
+ },
3250
+ {
3251
+ "type": "null"
3252
+ }
3253
+ ],
3254
+ "default": null,
3255
+ "title": "Filter Field"
3256
+ },
3257
+ "kind": {
3258
+ "const": "sql",
3259
+ "default": "sql",
3260
+ "title": "Kind",
3261
+ "type": "string"
3262
+ },
3263
+ "params": {
3264
+ "additionalProperties": {
3265
+ "$ref": "#/$defs/JsonValue"
3266
+ },
3267
+ "title": "Params",
3268
+ "type": "object"
3269
+ },
3270
+ "query": {
3271
+ "title": "Query",
3272
+ "type": "string"
3273
+ }
3274
+ },
3275
+ "required": [
3276
+ "query"
3277
+ ],
3278
+ "title": "SqlDataSource",
3279
+ "type": "object"
3280
+ },
3281
+ "StaticDataSource": {
3282
+ "additionalProperties": true,
3283
+ "description": "Static data supplied inline in the spec.",
3284
+ "properties": {
3285
+ "columns": {
3286
+ "anyOf": [
3287
+ {
3288
+ "items": {
3289
+ "type": "string"
3290
+ },
3291
+ "type": "array"
3292
+ },
3293
+ {
3294
+ "type": "null"
3295
+ }
3296
+ ],
3297
+ "default": null,
3298
+ "title": "Columns"
3299
+ },
3300
+ "default_value": {
3301
+ "$ref": "#/$defs/JsonValue",
3302
+ "default": null
3303
+ },
3304
+ "kind": {
3305
+ "const": "static",
3306
+ "default": "static",
3307
+ "title": "Kind",
3308
+ "type": "string"
3309
+ },
3310
+ "options": {
3311
+ "items": {
3312
+ "$ref": "#/$defs/StaticOption"
3313
+ },
3314
+ "title": "Options",
3315
+ "type": "array"
3316
+ },
3317
+ "rows": {
3318
+ "items": {
3319
+ "additionalProperties": {
3320
+ "$ref": "#/$defs/JsonValue"
3321
+ },
3322
+ "type": "object"
3323
+ },
3324
+ "title": "Rows",
3325
+ "type": "array"
3326
+ }
3327
+ },
3328
+ "title": "StaticDataSource",
3329
+ "type": "object"
3330
+ },
3331
+ "StaticOption": {
3332
+ "additionalProperties": true,
3333
+ "description": "A single option for a static select or filter.",
3334
+ "properties": {
3335
+ "label": {
3336
+ "title": "Label",
3337
+ "type": "string"
3338
+ },
3339
+ "value": {
3340
+ "$ref": "#/$defs/JsonValue"
3341
+ }
3342
+ },
3343
+ "required": [
3344
+ "value",
3345
+ "label"
3346
+ ],
3347
+ "title": "StaticOption",
3348
+ "type": "object"
3349
+ },
3350
+ "WidgetDefaults": {
3351
+ "additionalProperties": true,
3352
+ "description": "Dashboard-level defaults for widget appearance.",
3353
+ "properties": {
3354
+ "echarts": {
3355
+ "anyOf": [
3356
+ {
3357
+ "$ref": "#/$defs/WidgetTheme"
3358
+ },
3359
+ {
3360
+ "type": "null"
3361
+ }
3362
+ ],
3363
+ "default": null
3364
+ },
3365
+ "filter": {
3366
+ "anyOf": [
3367
+ {
3368
+ "$ref": "#/$defs/WidgetTheme"
3369
+ },
3370
+ {
3371
+ "type": "null"
3372
+ }
3373
+ ],
3374
+ "default": null
3375
+ },
3376
+ "global": {
3377
+ "anyOf": [
3378
+ {
3379
+ "$ref": "#/$defs/WidgetTheme"
3380
+ },
3381
+ {
3382
+ "type": "null"
3383
+ }
3384
+ ],
3385
+ "default": null
3386
+ },
3387
+ "image": {
3388
+ "anyOf": [
3389
+ {
3390
+ "$ref": "#/$defs/WidgetTheme"
3391
+ },
3392
+ {
3393
+ "type": "null"
3394
+ }
3395
+ ],
3396
+ "default": null
3397
+ },
3398
+ "kpi": {
3399
+ "anyOf": [
3400
+ {
3401
+ "$ref": "#/$defs/WidgetTheme"
3402
+ },
3403
+ {
3404
+ "type": "null"
3405
+ }
3406
+ ],
3407
+ "default": null
3408
+ },
3409
+ "markdown": {
3410
+ "anyOf": [
3411
+ {
3412
+ "$ref": "#/$defs/WidgetTheme"
3413
+ },
3414
+ {
3415
+ "type": "null"
3416
+ }
3417
+ ],
3418
+ "default": null
3419
+ },
3420
+ "pivot_table": {
3421
+ "anyOf": [
3422
+ {
3423
+ "$ref": "#/$defs/WidgetTheme"
3424
+ },
3425
+ {
3426
+ "type": "null"
3427
+ }
3428
+ ],
3429
+ "default": null
3430
+ },
3431
+ "select": {
3432
+ "anyOf": [
3433
+ {
3434
+ "$ref": "#/$defs/WidgetTheme"
3435
+ },
3436
+ {
3437
+ "type": "null"
3438
+ }
3439
+ ],
3440
+ "default": null
3441
+ },
3442
+ "table": {
3443
+ "anyOf": [
3444
+ {
3445
+ "$ref": "#/$defs/WidgetTheme"
3446
+ },
3447
+ {
3448
+ "type": "null"
3449
+ }
3450
+ ],
3451
+ "default": null
3452
+ },
3453
+ "tabulator": {
3454
+ "anyOf": [
3455
+ {
3456
+ "$ref": "#/$defs/WidgetTheme"
3457
+ },
3458
+ {
3459
+ "type": "null"
3460
+ }
3461
+ ],
3462
+ "default": null
3463
+ },
3464
+ "text": {
3465
+ "anyOf": [
3466
+ {
3467
+ "$ref": "#/$defs/WidgetTheme"
3468
+ },
3469
+ {
3470
+ "type": "null"
3471
+ }
3472
+ ],
3473
+ "default": null
3474
+ }
3475
+ },
3476
+ "title": "WidgetDefaults",
3477
+ "type": "object"
3478
+ },
3479
+ "WidgetDisplay": {
3480
+ "additionalProperties": true,
3481
+ "description": "Display-specific configuration.",
3482
+ "properties": {
3483
+ "background": {
3484
+ "anyOf": [
3485
+ {
3486
+ "type": "string"
3487
+ },
3488
+ {
3489
+ "type": "null"
3490
+ }
3491
+ ],
3492
+ "default": null,
3493
+ "title": "Background"
3494
+ },
3495
+ "border": {
3496
+ "anyOf": [
3497
+ {
3498
+ "type": "string"
3499
+ },
3500
+ {
3501
+ "type": "boolean"
3502
+ },
3503
+ {
3504
+ "type": "null"
3505
+ }
3506
+ ],
3507
+ "default": null,
3508
+ "title": "Border"
3509
+ },
3510
+ "borderRadius": {
3511
+ "anyOf": [
3512
+ {
3513
+ "type": "string"
3514
+ },
3515
+ {
3516
+ "type": "integer"
3517
+ },
3518
+ {
3519
+ "type": "null"
3520
+ }
3521
+ ],
3522
+ "default": null,
3523
+ "title": "Borderradius"
3524
+ },
3525
+ "echarts": {
3526
+ "anyOf": [
3527
+ {
3528
+ "additionalProperties": {
3529
+ "$ref": "#/$defs/JsonValue"
3530
+ },
3531
+ "type": "object"
3532
+ },
3533
+ {
3534
+ "type": "null"
3535
+ }
3536
+ ],
3537
+ "default": null,
3538
+ "title": "Echarts"
3539
+ },
3540
+ "filter": {
3541
+ "anyOf": [
3542
+ {
3543
+ "additionalProperties": {
3544
+ "$ref": "#/$defs/JsonValue"
3545
+ },
3546
+ "type": "object"
3547
+ },
3548
+ {
3549
+ "type": "null"
3550
+ }
3551
+ ],
3552
+ "default": null,
3553
+ "title": "Filter"
3554
+ },
3555
+ "image": {
3556
+ "anyOf": [
3557
+ {
3558
+ "additionalProperties": {
3559
+ "$ref": "#/$defs/JsonValue"
3560
+ },
3561
+ "type": "object"
3562
+ },
3563
+ {
3564
+ "type": "null"
3565
+ }
3566
+ ],
3567
+ "default": null,
3568
+ "title": "Image"
3569
+ },
3570
+ "kpi": {
3571
+ "anyOf": [
3572
+ {
3573
+ "additionalProperties": {
3574
+ "$ref": "#/$defs/JsonValue"
3575
+ },
3576
+ "type": "object"
3577
+ },
3578
+ {
3579
+ "type": "null"
3580
+ }
3581
+ ],
3582
+ "default": null,
3583
+ "title": "Kpi"
3584
+ },
3585
+ "margin": {
3586
+ "anyOf": [
3587
+ {
3588
+ "type": "string"
3589
+ },
3590
+ {
3591
+ "type": "integer"
3592
+ },
3593
+ {
3594
+ "type": "null"
3595
+ }
3596
+ ],
3597
+ "default": null,
3598
+ "title": "Margin"
3599
+ },
3600
+ "markdown": {
3601
+ "anyOf": [
3602
+ {
3603
+ "additionalProperties": {
3604
+ "$ref": "#/$defs/JsonValue"
3605
+ },
3606
+ "type": "object"
3607
+ },
3608
+ {
3609
+ "type": "null"
3610
+ }
3611
+ ],
3612
+ "default": null,
3613
+ "title": "Markdown"
3614
+ },
3615
+ "padding": {
3616
+ "anyOf": [
3617
+ {
3618
+ "type": "string"
3619
+ },
3620
+ {
3621
+ "type": "integer"
3622
+ },
3623
+ {
3624
+ "type": "null"
3625
+ }
3626
+ ],
3627
+ "default": null,
3628
+ "title": "Padding"
3629
+ },
3630
+ "pivot_table": {
3631
+ "anyOf": [
3632
+ {
3633
+ "additionalProperties": {
3634
+ "$ref": "#/$defs/JsonValue"
3635
+ },
3636
+ "type": "object"
3637
+ },
3638
+ {
3639
+ "type": "null"
3640
+ }
3641
+ ],
3642
+ "default": null,
3643
+ "title": "Pivot Table"
3644
+ },
3645
+ "select": {
3646
+ "anyOf": [
3647
+ {
3648
+ "additionalProperties": {
3649
+ "$ref": "#/$defs/JsonValue"
3650
+ },
3651
+ "type": "object"
3652
+ },
3653
+ {
3654
+ "type": "null"
3655
+ }
3656
+ ],
3657
+ "default": null,
3658
+ "title": "Select"
3659
+ },
3660
+ "shadow": {
3661
+ "anyOf": [
3662
+ {
3663
+ "type": "string"
3664
+ },
3665
+ {
3666
+ "type": "boolean"
3667
+ },
3668
+ {
3669
+ "type": "null"
3670
+ }
3671
+ ],
3672
+ "default": null,
3673
+ "title": "Shadow"
3674
+ },
3675
+ "table": {
3676
+ "anyOf": [
3677
+ {
3678
+ "additionalProperties": {
3679
+ "$ref": "#/$defs/JsonValue"
3680
+ },
3681
+ "type": "object"
3682
+ },
3683
+ {
3684
+ "type": "null"
3685
+ }
3686
+ ],
3687
+ "default": null,
3688
+ "title": "Table"
3689
+ },
3690
+ "tabulator": {
3691
+ "anyOf": [
3692
+ {
3693
+ "additionalProperties": {
3694
+ "$ref": "#/$defs/JsonValue"
3695
+ },
3696
+ "type": "object"
3697
+ },
3698
+ {
3699
+ "type": "null"
3700
+ }
3701
+ ],
3702
+ "default": null,
3703
+ "title": "Tabulator"
3704
+ },
3705
+ "text": {
3706
+ "anyOf": [
3707
+ {
3708
+ "additionalProperties": {
3709
+ "$ref": "#/$defs/JsonValue"
3710
+ },
3711
+ "type": "object"
3712
+ },
3713
+ {
3714
+ "type": "null"
3715
+ }
3716
+ ],
3717
+ "default": null,
3718
+ "title": "Text"
3719
+ }
3720
+ },
3721
+ "title": "WidgetDisplay",
3722
+ "type": "object"
3723
+ },
3724
+ "WidgetHeader": {
3725
+ "additionalProperties": true,
3726
+ "description": "Object-level header/title configuration for any widget.",
3727
+ "properties": {
3728
+ "backgroundColor": {
3729
+ "anyOf": [
3730
+ {
3731
+ "type": "string"
3732
+ },
3733
+ {
3734
+ "type": "null"
3735
+ }
3736
+ ],
3737
+ "default": null,
3738
+ "title": "Backgroundcolor"
3739
+ },
3740
+ "border": {
3741
+ "anyOf": [
3742
+ {
3743
+ "type": "string"
3744
+ },
3745
+ {
3746
+ "type": "boolean"
3747
+ },
3748
+ {
3749
+ "type": "null"
3750
+ }
3751
+ ],
3752
+ "default": null,
3753
+ "title": "Border"
3754
+ },
3755
+ "borderRadius": {
3756
+ "anyOf": [
3757
+ {
3758
+ "type": "string"
3759
+ },
3760
+ {
3761
+ "type": "integer"
3762
+ },
3763
+ {
3764
+ "type": "null"
3765
+ }
3766
+ ],
3767
+ "default": null,
3768
+ "title": "Borderradius"
3769
+ },
3770
+ "color": {
3771
+ "anyOf": [
3772
+ {
3773
+ "type": "string"
3774
+ },
3775
+ {
3776
+ "type": "null"
3777
+ }
3778
+ ],
3779
+ "default": null,
3780
+ "title": "Color"
3781
+ },
3782
+ "fontSize": {
3783
+ "anyOf": [
3784
+ {
3785
+ "type": "string"
3786
+ },
3787
+ {
3788
+ "type": "integer"
3789
+ },
3790
+ {
3791
+ "type": "null"
3792
+ }
3793
+ ],
3794
+ "default": null,
3795
+ "title": "Fontsize"
3796
+ },
3797
+ "fontWeight": {
3798
+ "anyOf": [
3799
+ {
3800
+ "type": "string"
3801
+ },
3802
+ {
3803
+ "type": "integer"
3804
+ },
3805
+ {
3806
+ "type": "null"
3807
+ }
3808
+ ],
3809
+ "default": null,
3810
+ "title": "Fontweight"
3811
+ },
3812
+ "padding": {
3813
+ "anyOf": [
3814
+ {
3815
+ "type": "string"
3816
+ },
3817
+ {
3818
+ "type": "integer"
3819
+ },
3820
+ {
3821
+ "type": "null"
3822
+ }
3823
+ ],
3824
+ "default": null,
3825
+ "title": "Padding"
3826
+ },
3827
+ "textAlign": {
3828
+ "anyOf": [
3829
+ {
3830
+ "enum": [
3831
+ "left",
3832
+ "center",
3833
+ "right",
3834
+ "justify"
3835
+ ],
3836
+ "type": "string"
3837
+ },
3838
+ {
3839
+ "type": "null"
3840
+ }
3841
+ ],
3842
+ "default": null,
3843
+ "title": "Textalign"
3844
+ },
3845
+ "title": {
3846
+ "anyOf": [
3847
+ {
3848
+ "type": "string"
3849
+ },
3850
+ {
3851
+ "$ref": "#/$defs/LabelBlock"
3852
+ },
3853
+ {
3854
+ "type": "null"
3855
+ }
3856
+ ],
3857
+ "default": null,
3858
+ "title": "Title"
3859
+ },
3860
+ "verticalAlign": {
3861
+ "anyOf": [
3862
+ {
3863
+ "enum": [
3864
+ "top",
3865
+ "middle",
3866
+ "bottom"
3867
+ ],
3868
+ "type": "string"
3869
+ },
3870
+ {
3871
+ "type": "null"
3872
+ }
3873
+ ],
3874
+ "default": null,
3875
+ "title": "Verticalalign"
3876
+ },
3877
+ "visible": {
3878
+ "anyOf": [
3879
+ {
3880
+ "type": "boolean"
3881
+ },
3882
+ {
3883
+ "type": "null"
3884
+ }
3885
+ ],
3886
+ "default": true,
3887
+ "title": "Visible"
3888
+ }
3889
+ },
3890
+ "title": "WidgetHeader",
3891
+ "type": "object"
3892
+ },
3893
+ "WidgetInteraction": {
3894
+ "additionalProperties": true,
3895
+ "description": "A user-driven interaction on a widget.",
3896
+ "properties": {
3897
+ "id": {
3898
+ "title": "Id",
3899
+ "type": "string"
3900
+ },
3901
+ "label": {
3902
+ "anyOf": [
3903
+ {
3904
+ "type": "string"
3905
+ },
3906
+ {
3907
+ "type": "null"
3908
+ }
3909
+ ],
3910
+ "default": null,
3911
+ "title": "Label"
3912
+ },
3913
+ "open_in": {
3914
+ "default": "same",
3915
+ "enum": [
3916
+ "modal",
3917
+ "same",
3918
+ "new",
3919
+ "detail"
3920
+ ],
3921
+ "title": "Open In",
3922
+ "type": "string"
3923
+ },
3924
+ "pass_filters": {
3925
+ "default": true,
3926
+ "title": "Pass Filters",
3927
+ "type": "boolean"
3928
+ },
3929
+ "pass_selection": {
3930
+ "default": true,
3931
+ "title": "Pass Selection",
3932
+ "type": "boolean"
3933
+ },
3934
+ "target": {
3935
+ "title": "Target",
3936
+ "type": "string"
3937
+ },
3938
+ "target_type": {
3939
+ "default": "dashboard",
3940
+ "enum": [
3941
+ "dashboard",
3942
+ "url",
3943
+ "filter",
3944
+ "dimension"
3945
+ ],
3946
+ "title": "Target Type",
3947
+ "type": "string"
3948
+ },
3949
+ "type": {
3950
+ "enum": [
3951
+ "drilldown",
3952
+ "set_filter",
3953
+ "navigate"
3954
+ ],
3955
+ "title": "Type",
3956
+ "type": "string"
3957
+ },
3958
+ "variable_mappings": {
3959
+ "items": {
3960
+ "$ref": "#/$defs/InteractionVariableMapping"
3961
+ },
3962
+ "title": "Variable Mappings",
3963
+ "type": "array"
3964
+ }
3965
+ },
3966
+ "required": [
3967
+ "id",
3968
+ "type",
3969
+ "target"
3970
+ ],
3971
+ "title": "WidgetInteraction",
3972
+ "type": "object"
3973
+ },
3974
+ "WidgetLayout": {
3975
+ "additionalProperties": true,
3976
+ "description": "Layout configuration for a widget.",
3977
+ "properties": {
3978
+ "h": {
3979
+ "default": 4,
3980
+ "title": "H",
3981
+ "type": "integer"
3982
+ },
3983
+ "isBounded": {
3984
+ "anyOf": [
3985
+ {
3986
+ "type": "boolean"
3987
+ },
3988
+ {
3989
+ "type": "null"
3990
+ }
3991
+ ],
3992
+ "default": null,
3993
+ "title": "Isbounded"
3994
+ },
3995
+ "isDraggable": {
3996
+ "anyOf": [
3997
+ {
3998
+ "type": "boolean"
3999
+ },
4000
+ {
4001
+ "type": "null"
4002
+ }
4003
+ ],
4004
+ "default": null,
4005
+ "title": "Isdraggable"
4006
+ },
4007
+ "isResizable": {
4008
+ "anyOf": [
4009
+ {
4010
+ "type": "boolean"
4011
+ },
4012
+ {
4013
+ "type": "null"
4014
+ }
4015
+ ],
4016
+ "default": null,
4017
+ "title": "Isresizable"
4018
+ },
4019
+ "maxH": {
4020
+ "anyOf": [
4021
+ {
4022
+ "type": "integer"
4023
+ },
4024
+ {
4025
+ "type": "null"
4026
+ }
4027
+ ],
4028
+ "default": null,
4029
+ "title": "Maxh"
4030
+ },
4031
+ "maxW": {
4032
+ "anyOf": [
4033
+ {
4034
+ "type": "integer"
4035
+ },
4036
+ {
4037
+ "type": "null"
4038
+ }
4039
+ ],
4040
+ "default": null,
4041
+ "title": "Maxw"
4042
+ },
4043
+ "minH": {
4044
+ "anyOf": [
4045
+ {
4046
+ "type": "integer"
4047
+ },
4048
+ {
4049
+ "type": "null"
4050
+ }
4051
+ ],
4052
+ "default": null,
4053
+ "title": "Minh"
4054
+ },
4055
+ "minW": {
4056
+ "anyOf": [
4057
+ {
4058
+ "type": "integer"
4059
+ },
4060
+ {
4061
+ "type": "null"
4062
+ }
4063
+ ],
4064
+ "default": null,
4065
+ "title": "Minw"
4066
+ },
4067
+ "resizeHandles": {
4068
+ "anyOf": [
4069
+ {
4070
+ "items": {
4071
+ "type": "string"
4072
+ },
4073
+ "type": "array"
4074
+ },
4075
+ {
4076
+ "type": "null"
4077
+ }
4078
+ ],
4079
+ "default": null,
4080
+ "title": "Resizehandles"
4081
+ },
4082
+ "responsive": {
4083
+ "$ref": "#/$defs/ResponsiveLayout"
4084
+ },
4085
+ "unplaced": {
4086
+ "anyOf": [
4087
+ {
4088
+ "type": "boolean"
4089
+ },
4090
+ {
4091
+ "type": "null"
4092
+ }
4093
+ ],
4094
+ "default": null,
4095
+ "title": "Unplaced"
4096
+ },
4097
+ "w": {
4098
+ "default": 4,
4099
+ "title": "W",
4100
+ "type": "integer"
4101
+ },
4102
+ "x": {
4103
+ "default": 0,
4104
+ "title": "X",
4105
+ "type": "integer"
4106
+ },
4107
+ "y": {
4108
+ "default": 0,
4109
+ "title": "Y",
4110
+ "type": "integer"
4111
+ }
4112
+ },
4113
+ "title": "WidgetLayout",
4114
+ "type": "object"
4115
+ },
4116
+ "WidgetRef": {
4117
+ "additionalProperties": true,
4118
+ "description": "A reference to a separate widget YAML file.",
4119
+ "properties": {
4120
+ "ref": {
4121
+ "title": "Ref",
4122
+ "type": "string"
4123
+ }
4124
+ },
4125
+ "required": [
4126
+ "ref"
4127
+ ],
4128
+ "title": "WidgetRef",
4129
+ "type": "object"
4130
+ },
4131
+ "WidgetSpec": {
4132
+ "additionalProperties": true,
4133
+ "description": "Specification for a single widget/object.",
4134
+ "properties": {
4135
+ "kind": {
4136
+ "const": "widget",
4137
+ "default": "widget",
4138
+ "title": "Kind",
4139
+ "type": "string"
4140
+ },
4141
+ "metadata": {
4142
+ "$ref": "#/$defs/Metadata"
4143
+ },
4144
+ "spec": {
4145
+ "$ref": "#/$defs/WidgetSpecInner"
4146
+ },
4147
+ "version": {
4148
+ "default": "1.0",
4149
+ "title": "Version",
4150
+ "type": "string"
4151
+ }
4152
+ },
4153
+ "required": [
4154
+ "metadata",
4155
+ "spec"
4156
+ ],
4157
+ "title": "WidgetSpec",
4158
+ "type": "object"
4159
+ },
4160
+ "WidgetSpecInner": {
4161
+ "additionalProperties": true,
4162
+ "description": "Inner spec body of a widget.",
4163
+ "properties": {
4164
+ "bindings": {
4165
+ "items": {
4166
+ "$ref": "#/$defs/FilterBinding"
4167
+ },
4168
+ "title": "Bindings",
4169
+ "type": "array"
4170
+ },
4171
+ "component": {
4172
+ "default": "echarts",
4173
+ "enum": [
4174
+ "echarts",
4175
+ "kpi",
4176
+ "filter",
4177
+ "select",
4178
+ "table",
4179
+ "tabulator",
4180
+ "pivot_table",
4181
+ "text",
4182
+ "image",
4183
+ "markdown"
4184
+ ],
4185
+ "title": "Component",
4186
+ "type": "string"
4187
+ },
4188
+ "data": {
4189
+ "discriminator": {
4190
+ "mapping": {
4191
+ "dataset": "#/$defs/DatasetDataSource",
4192
+ "demo": "#/$defs/DemoDataSource",
4193
+ "kpi": "#/$defs/KpiDataSource",
4194
+ "query": "#/$defs/QueryDataSource",
4195
+ "sql": "#/$defs/SqlDataSource",
4196
+ "static": "#/$defs/StaticDataSource"
4197
+ },
4198
+ "propertyName": "kind"
4199
+ },
4200
+ "oneOf": [
4201
+ {
4202
+ "$ref": "#/$defs/KpiDataSource"
4203
+ },
4204
+ {
4205
+ "$ref": "#/$defs/StaticDataSource"
4206
+ },
4207
+ {
4208
+ "$ref": "#/$defs/DemoDataSource"
4209
+ },
4210
+ {
4211
+ "$ref": "#/$defs/SqlDataSource"
4212
+ },
4213
+ {
4214
+ "$ref": "#/$defs/DatasetDataSource"
4215
+ },
4216
+ {
4217
+ "$ref": "#/$defs/QueryDataSource"
4218
+ }
4219
+ ],
4220
+ "title": "Data"
4221
+ },
4222
+ "display": {
4223
+ "$ref": "#/$defs/WidgetDisplay"
4224
+ },
4225
+ "filters": {
4226
+ "items": {
4227
+ "$ref": "#/$defs/IncomingFilter"
4228
+ },
4229
+ "title": "Filters",
4230
+ "type": "array"
4231
+ },
4232
+ "interactions": {
4233
+ "items": {
4234
+ "$ref": "#/$defs/WidgetInteraction"
4235
+ },
4236
+ "title": "Interactions",
4237
+ "type": "array"
4238
+ },
4239
+ "layout": {
4240
+ "$ref": "#/$defs/WidgetLayout"
4241
+ },
4242
+ "mappings": {
4243
+ "$ref": "#/$defs/FieldMapping"
4244
+ }
4245
+ },
4246
+ "title": "WidgetSpecInner",
4247
+ "type": "object"
4248
+ },
4249
+ "WidgetTheme": {
4250
+ "additionalProperties": true,
4251
+ "description": "Reusable theme settings for a widget or a default widget group.",
4252
+ "properties": {
4253
+ "background": {
4254
+ "anyOf": [
4255
+ {
4256
+ "type": "string"
4257
+ },
4258
+ {
4259
+ "type": "null"
4260
+ }
4261
+ ],
4262
+ "default": null,
4263
+ "title": "Background"
4264
+ },
4265
+ "border": {
4266
+ "anyOf": [
4267
+ {
4268
+ "type": "string"
4269
+ },
4270
+ {
4271
+ "type": "boolean"
4272
+ },
4273
+ {
4274
+ "type": "null"
4275
+ }
4276
+ ],
4277
+ "default": null,
4278
+ "title": "Border"
4279
+ },
4280
+ "borderRadius": {
4281
+ "anyOf": [
4282
+ {
4283
+ "type": "string"
4284
+ },
4285
+ {
4286
+ "type": "integer"
4287
+ },
4288
+ {
4289
+ "type": "null"
4290
+ }
4291
+ ],
4292
+ "default": null,
4293
+ "title": "Borderradius"
4294
+ },
4295
+ "margin": {
4296
+ "anyOf": [
4297
+ {
4298
+ "type": "string"
4299
+ },
4300
+ {
4301
+ "type": "integer"
4302
+ },
4303
+ {
4304
+ "type": "null"
4305
+ }
4306
+ ],
4307
+ "default": null,
4308
+ "title": "Margin"
4309
+ },
4310
+ "padding": {
4311
+ "anyOf": [
4312
+ {
4313
+ "type": "string"
4314
+ },
4315
+ {
4316
+ "type": "integer"
4317
+ },
4318
+ {
4319
+ "type": "null"
4320
+ }
4321
+ ],
4322
+ "default": null,
4323
+ "title": "Padding"
4324
+ },
4325
+ "shadow": {
4326
+ "anyOf": [
4327
+ {
4328
+ "type": "string"
4329
+ },
4330
+ {
4331
+ "type": "boolean"
4332
+ },
4333
+ {
4334
+ "type": "null"
4335
+ }
4336
+ ],
4337
+ "default": null,
4338
+ "title": "Shadow"
4339
+ }
4340
+ },
4341
+ "title": "WidgetTheme",
4342
+ "type": "object"
4343
+ }
4344
+ },
4345
+ "$id": "https://bideux.dev/schema/uas/dashboard.schema.json",
4346
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4347
+ "additionalProperties": true,
4348
+ "description": "Top-level dashboard manifest.",
4349
+ "properties": {
4350
+ "kind": {
4351
+ "const": "dashboard",
4352
+ "default": "dashboard",
4353
+ "title": "Kind",
4354
+ "type": "string"
4355
+ },
4356
+ "metadata": {
4357
+ "$ref": "#/$defs/Metadata"
4358
+ },
4359
+ "spec": {
4360
+ "$ref": "#/$defs/DashboardSpecInner"
4361
+ },
4362
+ "version": {
4363
+ "default": "1.0",
4364
+ "title": "Version",
4365
+ "type": "string"
4366
+ }
4367
+ },
4368
+ "required": [
4369
+ "metadata",
4370
+ "spec"
4371
+ ],
4372
+ "title": "DashboardSpec",
4373
+ "type": "object"
4374
+ }