@xpert-ai/plugin-live-dashboard 0.3.1 → 0.4.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 (148) hide show
  1. package/.xpertai-plugin/plugin.json +10 -2
  2. package/README.md +6 -0
  3. package/assets/branding/cover-v1.prompt.txt +27 -0
  4. package/assets/branding/cover-v1.webp +0 -0
  5. package/assets/previews/customer-brief.png +0 -0
  6. package/assets/previews/profit-atlas.png +0 -0
  7. package/assets/previews/trend-workspace.png +0 -0
  8. package/dist/index.js +6 -3
  9. package/dist/lib/agent.schema.d.ts +43 -37
  10. package/dist/lib/agent.schema.js +2 -1
  11. package/dist/lib/app-config.d.ts +62 -0
  12. package/dist/lib/app-config.js +38 -0
  13. package/dist/lib/artifact-type.provider.d.ts +15 -0
  14. package/dist/lib/artifact-type.provider.js +78 -0
  15. package/dist/lib/assistant-template.d.ts +1 -2
  16. package/dist/lib/assistant-template.js +3 -52
  17. package/dist/lib/content.provider.js +13 -5
  18. package/dist/lib/dashboard-navigation.d.ts +58 -14
  19. package/dist/lib/dashboard-navigation.js +11 -10
  20. package/dist/lib/dashboard-view.schema.d.ts +197 -46
  21. package/dist/lib/dashboard-view.schema.js +8 -1
  22. package/dist/lib/dashboard.service.d.ts +39 -2
  23. package/dist/lib/dashboard.service.js +52 -28
  24. package/dist/lib/document-libraries.d.ts +1 -1
  25. package/dist/lib/document-libraries.js +3 -2
  26. package/dist/lib/document-network.d.ts +1 -1
  27. package/dist/lib/document-network.js +2 -6
  28. package/dist/lib/editing-feedback.d.ts +5 -0
  29. package/dist/lib/editing-feedback.js +19 -0
  30. package/dist/lib/editing-patch.d.ts +22 -0
  31. package/dist/lib/editing-patch.js +46 -0
  32. package/dist/lib/editing-session.d.ts +167 -0
  33. package/dist/lib/editing-session.js +53 -0
  34. package/dist/lib/editing.d.ts +92 -60
  35. package/dist/lib/editing.js +36 -24
  36. package/dist/lib/html-guidance.d.ts +1 -1
  37. package/dist/lib/html-guidance.js +1 -1
  38. package/dist/lib/middleware.js +42 -18
  39. package/dist/lib/monitor.d.ts +70 -0
  40. package/dist/lib/monitor.js +101 -0
  41. package/dist/lib/plugin.js +4 -1
  42. package/dist/lib/project.d.ts +106 -0
  43. package/dist/lib/project.js +17 -0
  44. package/dist/lib/projects.schema.d.ts +49 -0
  45. package/dist/lib/projects.schema.js +7 -0
  46. package/dist/lib/projects.service.d.ts +23 -0
  47. package/dist/lib/projects.service.js +65 -0
  48. package/dist/lib/resource-card.js +1 -1
  49. package/dist/lib/runtime-context.d.ts +3 -0
  50. package/dist/lib/runtime-context.js +13 -0
  51. package/dist/lib/save-evidence.d.ts +1 -1
  52. package/dist/lib/templates.d.ts +2 -0
  53. package/dist/lib/templates.js +55 -0
  54. package/dist/lib/view.provider.d.ts +97 -7
  55. package/dist/lib/view.provider.js +39 -10
  56. package/dist/libraries/TREND-WORKSPACE-ICONS-LICENSE.txt +43 -0
  57. package/dist/libraries/catalog.json +1 -1
  58. package/dist/remote/app.css +1 -1
  59. package/dist/remote/app.js +33 -33
  60. package/dist/remote/build-manifest.json +115 -32
  61. package/dist/sandbox-actions/action.json +1 -1
  62. package/dist/sandbox-actions/bundle/host.js +2 -2
  63. package/dist/sandbox-actions/bundle/resource-cache.mjs +2 -1
  64. package/dist/sandbox-actions/bundle/validate.mjs +1 -1
  65. package/docs/docs.json +7 -0
  66. package/docs/frontend-libraries.mdx +12 -4
  67. package/docs/html-mode.md +3 -3
  68. package/docs/quick-start-acceptance.mdx +50 -0
  69. package/docs/quick-start.mdx +64 -0
  70. package/docs/superstore.mdx +38 -0
  71. package/docs/team-sharing.mdx +6 -2
  72. package/docs/trend-workspace-acceptance.mdx +43 -0
  73. package/docs/trend-workspace.mdx +30 -0
  74. package/docs/verification.mdx +4 -2
  75. package/docs/visual-styles-acceptance.mdx +40 -0
  76. package/docs/visual-styles.mdx +46 -0
  77. package/package.json +23 -17
  78. package/skills/live-dashboard/SKILL.md +27 -3
  79. package/skills/live-dashboard/examples/README.md +25 -0
  80. package/skills/live-dashboard/examples/catalog.json +79 -0
  81. package/skills/live-dashboard/examples/production-quality/README.md +25 -0
  82. package/skills/live-dashboard/examples/production-quality/dashboard.html +129 -0
  83. package/skills/live-dashboard/examples/production-quality/definition.json +67 -0
  84. package/skills/live-dashboard/examples/production-quality/demo.csv +7 -0
  85. package/skills/live-dashboard/examples/production-quality/demo.json +44 -0
  86. package/skills/live-dashboard/examples/production-quality/expected.json +26 -0
  87. package/skills/live-dashboard/examples/production-quality/preview.png +0 -0
  88. package/skills/live-dashboard/examples/production-quality/query.json +53 -0
  89. package/skills/live-dashboard/examples/regional-sales/README.md +25 -0
  90. package/skills/live-dashboard/examples/regional-sales/dashboard-create.json +35 -0
  91. package/skills/live-dashboard/examples/regional-sales/definition.json +35 -0
  92. package/skills/live-dashboard/examples/regional-sales/demo.csv +5 -0
  93. package/skills/live-dashboard/examples/regional-sales/demo.json +18 -0
  94. package/skills/live-dashboard/examples/regional-sales/expected.json +19 -0
  95. package/skills/live-dashboard/examples/regional-sales/preview.png +0 -0
  96. package/skills/live-dashboard/examples/regional-sales/query.json +45 -0
  97. package/skills/live-dashboard/examples/sales-overview/README.md +25 -0
  98. package/skills/live-dashboard/examples/sales-overview/dashboard.html +129 -0
  99. package/skills/live-dashboard/examples/sales-overview/definition.json +57 -0
  100. package/skills/live-dashboard/examples/sales-overview/demo.csv +7 -0
  101. package/skills/live-dashboard/examples/sales-overview/demo.json +38 -0
  102. package/skills/live-dashboard/examples/sales-overview/expected.json +22 -0
  103. package/skills/live-dashboard/examples/sales-overview/preview.png +0 -0
  104. package/skills/live-dashboard/examples/sales-overview/query.json +52 -0
  105. package/skills/live-dashboard/examples/superstore/README.md +64 -0
  106. package/skills/live-dashboard/examples/superstore/THIRD_PARTY_LICENSE.txt +207 -0
  107. package/skills/live-dashboard/examples/superstore/build_data.py +155 -0
  108. package/skills/live-dashboard/examples/superstore/build_pages.py +129 -0
  109. package/skills/live-dashboard/examples/superstore/checks.json +104 -0
  110. package/skills/live-dashboard/examples/superstore/customers-mobile-dark.png +0 -0
  111. package/skills/live-dashboard/examples/superstore/customers-select.png +0 -0
  112. package/skills/live-dashboard/examples/superstore/customers.html +316 -0
  113. package/skills/live-dashboard/examples/superstore/customers.png +0 -0
  114. package/skills/live-dashboard/examples/superstore/customers.queries.json +512 -0
  115. package/skills/live-dashboard/examples/superstore/expected.json +4069 -0
  116. package/skills/live-dashboard/examples/superstore/import.json +200 -0
  117. package/skills/live-dashboard/examples/superstore/orders.csv +10195 -0
  118. package/skills/live-dashboard/examples/superstore/overview-mobile-dark.png +0 -0
  119. package/skills/live-dashboard/examples/superstore/overview-select.png +0 -0
  120. package/skills/live-dashboard/examples/superstore/overview.html +310 -0
  121. package/skills/live-dashboard/examples/superstore/overview.png +0 -0
  122. package/skills/live-dashboard/examples/superstore/overview.queries.json +636 -0
  123. package/skills/live-dashboard/examples/superstore/page.js +109 -0
  124. package/skills/live-dashboard/examples/superstore/profitability-mobile-dark.png +0 -0
  125. package/skills/live-dashboard/examples/superstore/profitability-select.png +0 -0
  126. package/skills/live-dashboard/examples/superstore/profitability.html +307 -0
  127. package/skills/live-dashboard/examples/superstore/profitability.png +0 -0
  128. package/skills/live-dashboard/examples/superstore/profitability.queries.json +334 -0
  129. package/skills/live-dashboard/examples/superstore/provenance.json +24 -0
  130. package/skills/live-dashboard/examples/superstore/semantic-model.json +220 -0
  131. package/skills/live-dashboard/examples/superstore/test_data.py +62 -0
  132. package/skills/live-dashboard/references/html-runtime.md +1 -1
  133. package/skills/live-dashboard/themes/README.md +50 -0
  134. package/skills/live-dashboard/themes/customer-brief/README.md +47 -0
  135. package/skills/live-dashboard/themes/customer-brief/charts.js +17 -0
  136. package/skills/live-dashboard/themes/customer-brief/layout.html +22 -0
  137. package/skills/live-dashboard/themes/customer-brief/theme.css +108 -0
  138. package/skills/live-dashboard/themes/profit-atlas/README.md +43 -0
  139. package/skills/live-dashboard/themes/profit-atlas/charts.js +30 -0
  140. package/skills/live-dashboard/themes/profit-atlas/layout.html +19 -0
  141. package/skills/live-dashboard/themes/profit-atlas/theme.css +75 -0
  142. package/skills/live-dashboard/themes/trend-workspace/ICON_LICENSE.txt +43 -0
  143. package/skills/live-dashboard/themes/trend-workspace/README.md +144 -0
  144. package/skills/live-dashboard/themes/trend-workspace/charts.js +60 -0
  145. package/skills/live-dashboard/themes/trend-workspace/icons.js +11 -0
  146. package/skills/live-dashboard/themes/trend-workspace/layout.html +45 -0
  147. package/skills/live-dashboard/themes/trend-workspace/select.js +127 -0
  148. package/skills/live-dashboard/themes/trend-workspace/theme.css +137 -0
@@ -0,0 +1,636 @@
1
+ {
2
+ "controls": [
3
+ {
4
+ "controlId": "year",
5
+ "label": "年份",
6
+ "type": "string",
7
+ "defaultValue": "",
8
+ "allowedValues": [
9
+ "",
10
+ "2021",
11
+ "2022",
12
+ "2023",
13
+ "2024"
14
+ ]
15
+ },
16
+ {
17
+ "controlId": "region",
18
+ "label": "区域",
19
+ "type": "string",
20
+ "defaultValue": "",
21
+ "allowedValues": [
22
+ "",
23
+ "Central",
24
+ "East",
25
+ "South",
26
+ "West"
27
+ ]
28
+ },
29
+ {
30
+ "controlId": "category",
31
+ "label": "品类",
32
+ "type": "string",
33
+ "defaultValue": "",
34
+ "allowedValues": [
35
+ "",
36
+ "Furniture",
37
+ "Office Supplies",
38
+ "Technology"
39
+ ]
40
+ }
41
+ ],
42
+ "bindings": [
43
+ {
44
+ "id": "summary",
45
+ "providerId": "data-xpert.ontology",
46
+ "operation": "action",
47
+ "contractVersion": 1,
48
+ "payload": {
49
+ "resourceId": "<discovered-resource-id>",
50
+ "actionTypeCode": "sql.query_cube_slice",
51
+ "target": {
52
+ "entityTypeCode": "semantic_cube",
53
+ "entityRef": "<published-model-id>::SuperstoreOrders"
54
+ },
55
+ "params": {
56
+ "dimensions": [],
57
+ "measures": [
58
+ "Sales",
59
+ "Profit",
60
+ "Orders",
61
+ "Customers"
62
+ ],
63
+ "filters": [
64
+ {
65
+ "field": "OrderYear",
66
+ "op": "contains",
67
+ "value": ""
68
+ },
69
+ {
70
+ "field": "Region",
71
+ "op": "contains",
72
+ "value": ""
73
+ },
74
+ {
75
+ "field": "Category",
76
+ "op": "contains",
77
+ "value": ""
78
+ }
79
+ ],
80
+ "limit": 100
81
+ },
82
+ "parameterPaths": {
83
+ "year": [
84
+ "filters",
85
+ "0",
86
+ "value"
87
+ ],
88
+ "region": [
89
+ "filters",
90
+ "1",
91
+ "value"
92
+ ],
93
+ "category": [
94
+ "filters",
95
+ "2",
96
+ "value"
97
+ ]
98
+ }
99
+ },
100
+ "parameters": [
101
+ {
102
+ "name": "year",
103
+ "controlId": "year",
104
+ "type": "string",
105
+ "required": true,
106
+ "defaultValue": "",
107
+ "allowedValues": [
108
+ "",
109
+ "2021",
110
+ "2022",
111
+ "2023",
112
+ "2024"
113
+ ]
114
+ },
115
+ {
116
+ "name": "region",
117
+ "controlId": "region",
118
+ "type": "string",
119
+ "required": true,
120
+ "defaultValue": "",
121
+ "allowedValues": [
122
+ "",
123
+ "Central",
124
+ "East",
125
+ "South",
126
+ "West"
127
+ ]
128
+ },
129
+ {
130
+ "name": "category",
131
+ "controlId": "category",
132
+ "type": "string",
133
+ "required": true,
134
+ "defaultValue": "",
135
+ "allowedValues": [
136
+ "",
137
+ "Furniture",
138
+ "Office Supplies",
139
+ "Technology"
140
+ ]
141
+ }
142
+ ],
143
+ "output": {
144
+ "datasetId": "summary",
145
+ "fields": [
146
+ {
147
+ "id": "Sales",
148
+ "sourceField": "Sales",
149
+ "label": "Sales",
150
+ "logicalType": "decimal",
151
+ "role": "measure",
152
+ "nullable": true
153
+ },
154
+ {
155
+ "id": "Profit",
156
+ "sourceField": "Profit",
157
+ "label": "Profit",
158
+ "logicalType": "decimal",
159
+ "role": "measure",
160
+ "nullable": true
161
+ },
162
+ {
163
+ "id": "Orders",
164
+ "sourceField": "Orders",
165
+ "label": "Orders",
166
+ "logicalType": "int64",
167
+ "role": "measure",
168
+ "nullable": false
169
+ },
170
+ {
171
+ "id": "Customers",
172
+ "sourceField": "Customers",
173
+ "label": "Customers",
174
+ "logicalType": "int64",
175
+ "role": "measure",
176
+ "nullable": false
177
+ }
178
+ ],
179
+ "grain": []
180
+ }
181
+ },
182
+ {
183
+ "id": "trend",
184
+ "providerId": "data-xpert.ontology",
185
+ "operation": "action",
186
+ "contractVersion": 1,
187
+ "payload": {
188
+ "resourceId": "<discovered-resource-id>",
189
+ "actionTypeCode": "sql.query_cube_slice",
190
+ "target": {
191
+ "entityTypeCode": "semantic_cube",
192
+ "entityRef": "<published-model-id>::SuperstoreOrders"
193
+ },
194
+ "params": {
195
+ "dimensions": [
196
+ "OrderMonth"
197
+ ],
198
+ "measures": [
199
+ "Sales",
200
+ "Profit",
201
+ "Orders",
202
+ "Customers"
203
+ ],
204
+ "filters": [
205
+ {
206
+ "field": "OrderYear",
207
+ "op": "contains",
208
+ "value": ""
209
+ },
210
+ {
211
+ "field": "Region",
212
+ "op": "contains",
213
+ "value": ""
214
+ },
215
+ {
216
+ "field": "Category",
217
+ "op": "contains",
218
+ "value": ""
219
+ }
220
+ ],
221
+ "limit": 100
222
+ },
223
+ "parameterPaths": {
224
+ "year": [
225
+ "filters",
226
+ "0",
227
+ "value"
228
+ ],
229
+ "region": [
230
+ "filters",
231
+ "1",
232
+ "value"
233
+ ],
234
+ "category": [
235
+ "filters",
236
+ "2",
237
+ "value"
238
+ ]
239
+ }
240
+ },
241
+ "parameters": [
242
+ {
243
+ "name": "year",
244
+ "controlId": "year",
245
+ "type": "string",
246
+ "required": true,
247
+ "defaultValue": "",
248
+ "allowedValues": [
249
+ "",
250
+ "2021",
251
+ "2022",
252
+ "2023",
253
+ "2024"
254
+ ]
255
+ },
256
+ {
257
+ "name": "region",
258
+ "controlId": "region",
259
+ "type": "string",
260
+ "required": true,
261
+ "defaultValue": "",
262
+ "allowedValues": [
263
+ "",
264
+ "Central",
265
+ "East",
266
+ "South",
267
+ "West"
268
+ ]
269
+ },
270
+ {
271
+ "name": "category",
272
+ "controlId": "category",
273
+ "type": "string",
274
+ "required": true,
275
+ "defaultValue": "",
276
+ "allowedValues": [
277
+ "",
278
+ "Furniture",
279
+ "Office Supplies",
280
+ "Technology"
281
+ ]
282
+ }
283
+ ],
284
+ "output": {
285
+ "datasetId": "trend",
286
+ "fields": [
287
+ {
288
+ "id": "OrderMonth",
289
+ "sourceField": "OrderMonth",
290
+ "label": "OrderMonth",
291
+ "logicalType": "string",
292
+ "role": "dimension",
293
+ "nullable": false
294
+ },
295
+ {
296
+ "id": "Sales",
297
+ "sourceField": "Sales",
298
+ "label": "Sales",
299
+ "logicalType": "decimal",
300
+ "role": "measure",
301
+ "nullable": true
302
+ },
303
+ {
304
+ "id": "Profit",
305
+ "sourceField": "Profit",
306
+ "label": "Profit",
307
+ "logicalType": "decimal",
308
+ "role": "measure",
309
+ "nullable": true
310
+ },
311
+ {
312
+ "id": "Orders",
313
+ "sourceField": "Orders",
314
+ "label": "Orders",
315
+ "logicalType": "int64",
316
+ "role": "measure",
317
+ "nullable": false
318
+ },
319
+ {
320
+ "id": "Customers",
321
+ "sourceField": "Customers",
322
+ "label": "Customers",
323
+ "logicalType": "int64",
324
+ "role": "measure",
325
+ "nullable": false
326
+ }
327
+ ],
328
+ "grain": [
329
+ "OrderMonth"
330
+ ]
331
+ }
332
+ },
333
+ {
334
+ "id": "regions",
335
+ "providerId": "data-xpert.ontology",
336
+ "operation": "action",
337
+ "contractVersion": 1,
338
+ "payload": {
339
+ "resourceId": "<discovered-resource-id>",
340
+ "actionTypeCode": "sql.query_cube_slice",
341
+ "target": {
342
+ "entityTypeCode": "semantic_cube",
343
+ "entityRef": "<published-model-id>::SuperstoreOrders"
344
+ },
345
+ "params": {
346
+ "dimensions": [
347
+ "Region"
348
+ ],
349
+ "measures": [
350
+ "Sales",
351
+ "Profit",
352
+ "Orders",
353
+ "Customers"
354
+ ],
355
+ "filters": [
356
+ {
357
+ "field": "OrderYear",
358
+ "op": "contains",
359
+ "value": ""
360
+ },
361
+ {
362
+ "field": "Region",
363
+ "op": "contains",
364
+ "value": ""
365
+ },
366
+ {
367
+ "field": "Category",
368
+ "op": "contains",
369
+ "value": ""
370
+ }
371
+ ],
372
+ "limit": 100
373
+ },
374
+ "parameterPaths": {
375
+ "year": [
376
+ "filters",
377
+ "0",
378
+ "value"
379
+ ],
380
+ "region": [
381
+ "filters",
382
+ "1",
383
+ "value"
384
+ ],
385
+ "category": [
386
+ "filters",
387
+ "2",
388
+ "value"
389
+ ]
390
+ }
391
+ },
392
+ "parameters": [
393
+ {
394
+ "name": "year",
395
+ "controlId": "year",
396
+ "type": "string",
397
+ "required": true,
398
+ "defaultValue": "",
399
+ "allowedValues": [
400
+ "",
401
+ "2021",
402
+ "2022",
403
+ "2023",
404
+ "2024"
405
+ ]
406
+ },
407
+ {
408
+ "name": "region",
409
+ "controlId": "region",
410
+ "type": "string",
411
+ "required": true,
412
+ "defaultValue": "",
413
+ "allowedValues": [
414
+ "",
415
+ "Central",
416
+ "East",
417
+ "South",
418
+ "West"
419
+ ]
420
+ },
421
+ {
422
+ "name": "category",
423
+ "controlId": "category",
424
+ "type": "string",
425
+ "required": true,
426
+ "defaultValue": "",
427
+ "allowedValues": [
428
+ "",
429
+ "Furniture",
430
+ "Office Supplies",
431
+ "Technology"
432
+ ]
433
+ }
434
+ ],
435
+ "output": {
436
+ "datasetId": "regions",
437
+ "fields": [
438
+ {
439
+ "id": "Region",
440
+ "sourceField": "Region",
441
+ "label": "Region",
442
+ "logicalType": "string",
443
+ "role": "dimension",
444
+ "nullable": false
445
+ },
446
+ {
447
+ "id": "Sales",
448
+ "sourceField": "Sales",
449
+ "label": "Sales",
450
+ "logicalType": "decimal",
451
+ "role": "measure",
452
+ "nullable": true
453
+ },
454
+ {
455
+ "id": "Profit",
456
+ "sourceField": "Profit",
457
+ "label": "Profit",
458
+ "logicalType": "decimal",
459
+ "role": "measure",
460
+ "nullable": true
461
+ },
462
+ {
463
+ "id": "Orders",
464
+ "sourceField": "Orders",
465
+ "label": "Orders",
466
+ "logicalType": "int64",
467
+ "role": "measure",
468
+ "nullable": false
469
+ },
470
+ {
471
+ "id": "Customers",
472
+ "sourceField": "Customers",
473
+ "label": "Customers",
474
+ "logicalType": "int64",
475
+ "role": "measure",
476
+ "nullable": false
477
+ }
478
+ ],
479
+ "grain": [
480
+ "Region"
481
+ ]
482
+ }
483
+ },
484
+ {
485
+ "id": "categories",
486
+ "providerId": "data-xpert.ontology",
487
+ "operation": "action",
488
+ "contractVersion": 1,
489
+ "payload": {
490
+ "resourceId": "<discovered-resource-id>",
491
+ "actionTypeCode": "sql.query_cube_slice",
492
+ "target": {
493
+ "entityTypeCode": "semantic_cube",
494
+ "entityRef": "<published-model-id>::SuperstoreOrders"
495
+ },
496
+ "params": {
497
+ "dimensions": [
498
+ "Category"
499
+ ],
500
+ "measures": [
501
+ "Sales",
502
+ "Profit",
503
+ "Orders",
504
+ "Customers"
505
+ ],
506
+ "filters": [
507
+ {
508
+ "field": "OrderYear",
509
+ "op": "contains",
510
+ "value": ""
511
+ },
512
+ {
513
+ "field": "Region",
514
+ "op": "contains",
515
+ "value": ""
516
+ },
517
+ {
518
+ "field": "Category",
519
+ "op": "contains",
520
+ "value": ""
521
+ }
522
+ ],
523
+ "limit": 100
524
+ },
525
+ "parameterPaths": {
526
+ "year": [
527
+ "filters",
528
+ "0",
529
+ "value"
530
+ ],
531
+ "region": [
532
+ "filters",
533
+ "1",
534
+ "value"
535
+ ],
536
+ "category": [
537
+ "filters",
538
+ "2",
539
+ "value"
540
+ ]
541
+ }
542
+ },
543
+ "parameters": [
544
+ {
545
+ "name": "year",
546
+ "controlId": "year",
547
+ "type": "string",
548
+ "required": true,
549
+ "defaultValue": "",
550
+ "allowedValues": [
551
+ "",
552
+ "2021",
553
+ "2022",
554
+ "2023",
555
+ "2024"
556
+ ]
557
+ },
558
+ {
559
+ "name": "region",
560
+ "controlId": "region",
561
+ "type": "string",
562
+ "required": true,
563
+ "defaultValue": "",
564
+ "allowedValues": [
565
+ "",
566
+ "Central",
567
+ "East",
568
+ "South",
569
+ "West"
570
+ ]
571
+ },
572
+ {
573
+ "name": "category",
574
+ "controlId": "category",
575
+ "type": "string",
576
+ "required": true,
577
+ "defaultValue": "",
578
+ "allowedValues": [
579
+ "",
580
+ "Furniture",
581
+ "Office Supplies",
582
+ "Technology"
583
+ ]
584
+ }
585
+ ],
586
+ "output": {
587
+ "datasetId": "categories",
588
+ "fields": [
589
+ {
590
+ "id": "Category",
591
+ "sourceField": "Category",
592
+ "label": "Category",
593
+ "logicalType": "string",
594
+ "role": "dimension",
595
+ "nullable": false
596
+ },
597
+ {
598
+ "id": "Sales",
599
+ "sourceField": "Sales",
600
+ "label": "Sales",
601
+ "logicalType": "decimal",
602
+ "role": "measure",
603
+ "nullable": true
604
+ },
605
+ {
606
+ "id": "Profit",
607
+ "sourceField": "Profit",
608
+ "label": "Profit",
609
+ "logicalType": "decimal",
610
+ "role": "measure",
611
+ "nullable": true
612
+ },
613
+ {
614
+ "id": "Orders",
615
+ "sourceField": "Orders",
616
+ "label": "Orders",
617
+ "logicalType": "int64",
618
+ "role": "measure",
619
+ "nullable": false
620
+ },
621
+ {
622
+ "id": "Customers",
623
+ "sourceField": "Customers",
624
+ "label": "Customers",
625
+ "logicalType": "int64",
626
+ "role": "measure",
627
+ "nullable": false
628
+ }
629
+ ],
630
+ "grain": [
631
+ "Category"
632
+ ]
633
+ }
634
+ }
635
+ ]
636
+ }