@qrvey/widget-configurability 0.0.0-beta.4657 → 0.0.0-beta.4707

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 (38) hide show
  1. package/README.md +23 -1
  2. package/dist/cjs/doc/dashboard.structure.doc.js +3 -2
  3. package/dist/cjs/doc/dashboard.structure.doc.js.map +1 -1
  4. package/dist/cjs/index.js +4 -1
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/metadata/customization-docs.js +200 -0
  7. package/dist/cjs/metadata/customization-docs.js.map +1 -0
  8. package/dist/cjs/metadata/customization-metadata.js +80 -24
  9. package/dist/cjs/metadata/customization-metadata.js.map +1 -1
  10. package/dist/cjs/metadata/index.js +4 -1
  11. package/dist/cjs/metadata/index.js.map +1 -1
  12. package/dist/cjs/metadata/labels/chart-panel.defaults.js +15 -0
  13. package/dist/cjs/metadata/labels/chart-panel.defaults.js.map +1 -0
  14. package/dist/cjs/metadata/labels/chart-panel.labels.js +457 -44
  15. package/dist/cjs/metadata/labels/chart-panel.labels.js.map +1 -1
  16. package/dist/cjs/metadata/labels/dashboard.defaults.js +451 -0
  17. package/dist/cjs/metadata/labels/dashboard.defaults.js.map +1 -0
  18. package/dist/cjs/metadata/labels/dashboard.labels.js +1075 -179
  19. package/dist/cjs/metadata/labels/dashboard.labels.js.map +1 -1
  20. package/dist/cjs/metadata/labels/submodule.labels.js +11 -0
  21. package/dist/cjs/metadata/labels/submodule.labels.js.map +1 -0
  22. package/dist/cjs/structures/dashboard.structure.v1.js +5 -1
  23. package/dist/cjs/structures/dashboard.structure.v1.js.map +1 -1
  24. package/dist/cjs/structures/download-manager.structure.v1.js +1 -1
  25. package/dist/cjs/structures/download-manager.structure.v1.js.map +1 -1
  26. package/dist/cjs/structures/download-modal.structure.v1.js +13 -2
  27. package/dist/cjs/structures/download-modal.structure.v1.js.map +1 -1
  28. package/dist/cjs/utils/defaults.helpers.js +10 -0
  29. package/dist/cjs/utils/defaults.helpers.js.map +1 -1
  30. package/dist/esm/index.mjs +43 -8
  31. package/dist/esm/index.mjs.map +1 -1
  32. package/dist/esm/metadata.mjs +2129 -272
  33. package/dist/esm/metadata.mjs.map +1 -1
  34. package/dist/types/index.d.ts +9 -46
  35. package/dist/types/metadata.d.ts +74 -8
  36. package/dist/types/structure.models-BqVB4VLP.d.ts +89 -0
  37. package/package.json +1 -1
  38. package/dist/types/customization.models-CCSWjfb2.d.ts +0 -47
@@ -32,10 +32,26 @@ var __objRest = (source, exclude) => {
32
32
  };
33
33
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
34
34
 
35
+ // src/metadata/labels/chart-panel.defaults.ts
36
+ var CHART_PANEL_DEFAULTS = {
37
+ menuLayout: {
38
+ type: "string",
39
+ values: [
40
+ "header",
41
+ "floating"
42
+ ],
43
+ description: "Define the type of menu displayed in the charts",
44
+ since: "9.4",
45
+ notes: "If the user wants to replicate the hidden options, they need to use the remove attribute."
46
+ }
47
+ };
48
+
35
49
  // src/metadata/labels/chart-panel.labels.ts
36
50
  var CHART_PANEL_LABELS = {
37
51
  header: {
38
- label: "Chart header"
52
+ label: "Chart header",
53
+ description: "The entire header for the panel",
54
+ since: "9.0"
39
55
  },
40
56
  floatingMenu: {
41
57
  label: "Floating menu"
@@ -50,222 +66,1310 @@ var CHART_PANEL_LABELS = {
50
66
  label: "Chart actions"
51
67
  },
52
68
  optionMenu: {
53
- label: "Chart options menu"
69
+ label: "Chart options menu",
70
+ description: "The three dot button",
71
+ since: "9.0"
54
72
  },
55
73
  optionDateGrouping: {
56
- label: "Date grouping options"
74
+ label: "Date grouping options",
75
+ description: "The column date grouping section in column settings",
76
+ since: "9.0"
77
+ },
78
+ "floatingMenu.optionDateGrouping": {
79
+ label: "Date grouping options",
80
+ description: "The column date grouping section in column settings",
81
+ since: "9.4"
57
82
  },
58
83
  dashFilterScope: {
59
- label: "Dashboard filters"
84
+ label: "Dashboard filters",
85
+ description: "Filters that apply to the entire dashboard",
86
+ since: "9.3"
87
+ },
88
+ "floatingMenu.qFilter.dashFilterScope": {
89
+ label: "Dashboard filters",
90
+ description: "Filters that apply to the entire dashboard",
91
+ since: "9.4"
60
92
  },
61
93
  tabFilterScope: {
62
- label: "Tab filters"
94
+ label: "Tab filters",
95
+ description: "Filters that apply to the current tab",
96
+ since: "9.3"
97
+ },
98
+ "floatingMenu.qFilter.tabFilterScope": {
99
+ label: "Tab filters",
100
+ description: "Filters that apply to the current tab",
101
+ since: "9.4"
63
102
  },
64
103
  panelFilterScope: {
65
- label: "Panel filters"
104
+ label: "Panel filters",
105
+ description: "Filters that apply to the selected panel",
106
+ since: "9.3"
107
+ },
108
+ "floatingMenu.qFilter.panelFilterScope": {
109
+ label: "Panel filters",
110
+ description: "Filters that apply to the selected panel",
111
+ since: "9.4"
66
112
  },
67
113
  qChartName: {
68
- label: "Chart name"
114
+ label: "Chart name",
115
+ description: "The title of the panel",
116
+ since: "9.0"
69
117
  },
70
118
  qFitPanel: {
71
- label: "Fit to panel"
119
+ label: "Fit to panel",
120
+ description: "The fit-to-panel button",
121
+ since: "9.0"
122
+ },
123
+ "floatingMenu.qFitPanel": {
124
+ label: "Fit to panel",
125
+ description: "The fit-to-panel button",
126
+ since: "9.4"
72
127
  },
73
128
  qChartSelection: {
74
- label: "Chart type selection"
129
+ label: "Chart type selection",
130
+ description: "The chart selection button",
131
+ since: "9.0"
132
+ },
133
+ "floatingMenu.qChartSelection": {
134
+ label: "Chart type selection",
135
+ description: "The chart selection button",
136
+ since: "9.4"
75
137
  },
76
138
  qColumnSection: {
77
- label: "Column section"
139
+ label: "Column section",
140
+ description: "Add/Remove sections in expandable table",
141
+ since: "9.3"
142
+ },
143
+ "floatingMenu.qColumnSection": {
144
+ label: "Column section",
145
+ description: "Add/Remove sections in expandable table",
146
+ since: "9.4"
78
147
  },
79
148
  qSorting: {
80
- label: "Sorting"
149
+ label: "Sorting",
150
+ description: "The sorting button",
151
+ since: "9.0"
152
+ },
153
+ "floatingMenu.qSorting": {
154
+ label: "Sorting",
155
+ description: "The sorting button",
156
+ since: "9.4"
81
157
  },
82
158
  qColumnReplacement: {
83
- label: "Column replacement"
159
+ label: "Column replacement",
160
+ description: "The column replacement section in column settings",
161
+ since: "9.0"
162
+ },
163
+ "floatingMenu.qColumnReplacement": {
164
+ label: "Column replacement",
165
+ description: "The column replacement section in column settings",
166
+ since: "9.4"
84
167
  },
85
168
  qColumnAggregation: {
86
- label: "Column aggregation"
169
+ label: "Column aggregation",
170
+ description: "The column aggregation section in column settings",
171
+ since: "9.0"
172
+ },
173
+ "floatingMenu.qColumnAggregation": {
174
+ label: "Column aggregation",
175
+ description: "The column aggregation section in column settings",
176
+ since: "9.4"
87
177
  },
88
178
  qColumnGrouping: {
89
- label: "Column grouping"
179
+ label: "Column grouping",
180
+ description: "Add/remove groups in a simple or grouped table.",
181
+ since: "9.3"
182
+ },
183
+ "floatingMenu.qColumnGrouping": {
184
+ label: "Column grouping",
185
+ description: "Add/remove groups in a simple or grouped table.",
186
+ since: "9.4"
90
187
  },
91
188
  qDateGrouping: {
92
189
  label: "Date grouping"
93
190
  },
94
191
  qColumnSelection: {
95
- label: "Column selection"
192
+ label: "Column selection",
193
+ description: "Add/Remove columns in table charts",
194
+ since: "9.3"
195
+ },
196
+ "floatingMenu.qColumnSelection": {
197
+ label: "Column selection",
198
+ description: "Add/Remove columns in table charts",
199
+ since: "9.4"
96
200
  },
97
201
  qResetColumnsWidth: {
98
- label: "Reset column widths"
202
+ label: "Reset column widths",
203
+ description: 'Option to reset column width in tables when an-panel menu is "Header" mode',
204
+ since: "9.5"
205
+ },
206
+ "floatingMenu.qResetColumnsWidth": {
207
+ label: "Reset column widths",
208
+ description: 'Option to reset column width in tables when an-panel menu is "Floating" mode',
209
+ since: "9.5"
99
210
  },
100
211
  qSmartAnalyzer: {
101
- label: "Smart analyzer"
212
+ label: "Smart analyzer",
213
+ description: "Keep or remove the smart analyzer icon",
214
+ since: "9.5"
215
+ },
216
+ "floatingMenu.qSmartAnalyzer": {
217
+ label: "Smart analyzer",
218
+ description: "Keep or remove the smart analyzer icon",
219
+ since: "9.4"
102
220
  },
103
221
  qEditChart: {
104
- label: "Edit chart"
222
+ label: "Edit chart",
223
+ description: "The edit option inside the three dot button",
224
+ since: "9.0"
225
+ },
226
+ "floatingMenu.qEditChart": {
227
+ label: "Edit chart",
228
+ description: "The edit option inside the three dot button",
229
+ since: "9.4"
105
230
  },
106
231
  qDuplicateChart: {
107
- label: "Duplicate chart"
232
+ label: "Duplicate chart",
233
+ description: "The duplicate option inside the three dot button",
234
+ since: "9.0"
235
+ },
236
+ "floatingMenu.qDuplicateChart": {
237
+ label: "Duplicate chart",
238
+ description: "The duplicate option inside the three dot button",
239
+ since: "9.4"
108
240
  },
109
241
  qDownloadChart: {
110
- label: "Download"
242
+ label: "Download",
243
+ description: "The download group inside the three dot button",
244
+ since: "9.0"
245
+ },
246
+ "floatingMenu.qDownloadChart": {
247
+ label: "Download",
248
+ description: "The download group inside the three dot button",
249
+ since: "9.4"
111
250
  },
112
251
  qChartJPG: {
113
- label: "JPG"
252
+ label: "JPG",
253
+ description: "The JPG format in the download group",
254
+ since: "9.0"
255
+ },
256
+ "floatingMenu.qDownloadChart.qChartJPG": {
257
+ label: "JPG",
258
+ description: "The JPG format in the download group",
259
+ since: "9.4"
114
260
  },
115
261
  qChartPDF: {
116
- label: "PDF"
262
+ label: "PDF",
263
+ description: "The PDF format in the download group",
264
+ since: "9.0"
265
+ },
266
+ "floatingMenu.qDownloadChart.qChartPDF": {
267
+ label: "PDF",
268
+ description: "The PDF format in the download group",
269
+ since: "9.4"
117
270
  },
118
271
  qChartCSV: {
119
- label: "CSV"
272
+ label: "CSV",
273
+ description: "The CSV format in the download group",
274
+ since: "9.0"
275
+ },
276
+ "floatingMenu.qDownloadChart.qChartCSV": {
277
+ label: "CSV",
278
+ description: "The CSV format in the download group",
279
+ since: "9.4"
120
280
  },
121
281
  qChartSummary: {
122
- label: "Summary"
282
+ label: "Summary",
283
+ description: "The CSV with summaries format in the download group",
284
+ since: "9.0"
285
+ },
286
+ "floatingMenu.qDownloadChart.qChartSummary": {
287
+ label: "Summary",
288
+ description: "The CSV with summaries format in the download group",
289
+ since: "9.4"
123
290
  },
124
291
  qChartExcel: {
125
- label: "Excel"
292
+ label: "Excel",
293
+ description: "The Excel format in the download group",
294
+ since: "9.0"
295
+ },
296
+ "floatingMenu.qDownloadChart.qChartExcel": {
297
+ label: "Excel",
298
+ description: "The Excel format in the download group",
299
+ since: "9.4"
126
300
  },
127
301
  qFilter: {
128
- label: "Filters"
302
+ label: "Filters",
303
+ description: "The filter and the options for filtering",
304
+ since: "9.0"
305
+ },
306
+ "floatingMenu.qFilter": {
307
+ label: "Filters",
308
+ description: "The filter and the options for filtering",
309
+ since: "9.4"
129
310
  },
130
311
  qAddFilter: {
131
- label: "Add filter"
312
+ label: "Add filter",
313
+ description: "Option to add a new filter",
314
+ since: "9.3"
315
+ },
316
+ "floatingMenu.qFilter.qAddFilter": {
317
+ label: "Add filter",
318
+ description: "Option to add a new filter",
319
+ since: "9.4"
132
320
  },
133
321
  qEditFilter: {
134
- label: "Edit filter"
322
+ label: "Edit filter",
323
+ description: "Option to edit a dashboard-level filter",
324
+ since: "9.3"
325
+ },
326
+ "header.qFilter.tabFilterScope.qEditFilter": {
327
+ label: "Edit filter",
328
+ description: "Option to edit a tab-level filter",
329
+ since: "9.3"
330
+ },
331
+ "header.qFilter.panelFilterScope.qEditFilter": {
332
+ label: "Edit filter",
333
+ description: "Option to edit a panel-level filter",
334
+ since: "9.3"
335
+ },
336
+ "floatingMenu.qFilter.dashFilterScope.qEditFilter": {
337
+ label: "Edit filter",
338
+ description: "Option to edit a dashboard-level filter",
339
+ since: "9.4"
340
+ },
341
+ "floatingMenu.qFilter.tabFilterScope.qEditFilter": {
342
+ label: "Edit filter",
343
+ description: "Option to edit a tab-level filter",
344
+ since: "9.4"
345
+ },
346
+ "floatingMenu.qFilter.panelFilterScope.qEditFilter": {
347
+ label: "Edit filter",
348
+ description: "Option to edit a panel-level filter",
349
+ since: "9.4"
135
350
  },
136
351
  qDeleteFilter: {
137
- label: "Delete filter"
352
+ label: "Delete filter",
353
+ description: "Option to delete a dashboard-level filter",
354
+ since: "9.3"
355
+ },
356
+ "header.qFilter.tabFilterScope.qDeleteFilter": {
357
+ label: "Delete filter",
358
+ description: "Option to delete a tab-level filter",
359
+ since: "9.3"
360
+ },
361
+ "header.qFilter.panelFilterScope.qDeleteFilter": {
362
+ label: "Delete filter",
363
+ description: "Option to delete a panel-level filter",
364
+ since: "9.3"
365
+ },
366
+ "floatingMenu.qFilter.dashFilterScope.qDeleteFilter": {
367
+ label: "Delete filter",
368
+ description: "Option to delete a dashboard-level filter",
369
+ since: "9.4"
370
+ },
371
+ "floatingMenu.qFilter.tabFilterScope.qDeleteFilter": {
372
+ label: "Delete filter",
373
+ description: "Option to delete a tab-level filter",
374
+ since: "9.4"
375
+ },
376
+ "floatingMenu.qFilter.panelFilterScope.qDeleteFilter": {
377
+ label: "Delete filter",
378
+ description: "Option to delete a panel-level filter",
379
+ since: "9.4"
138
380
  },
139
381
  qYear: {
140
- label: "Year"
382
+ label: "Year",
383
+ description: "The option for (Year) in the date grouping dropdown",
384
+ since: "9.0"
385
+ },
386
+ "floatingMenu.optionDateGrouping.qYear": {
387
+ label: "Year",
388
+ description: "The option for (Year) in the date grouping dropdown",
389
+ since: "9.4"
141
390
  },
142
391
  qQuarter: {
143
- label: "Quarter"
392
+ label: "Quarter",
393
+ description: "The option for (Quarter, Year) in the date grouping dropdown",
394
+ since: "9.0"
395
+ },
396
+ "floatingMenu.optionDateGrouping.qQuarter": {
397
+ label: "Quarter",
398
+ description: "The option for (Quarter, Year) in the date grouping dropdown",
399
+ since: "9.4"
144
400
  },
145
401
  qQuarterOnly: {
146
- label: "Quarter only"
402
+ label: "Quarter only",
403
+ description: "The option for (Quarter) in the date grouping dropdown",
404
+ since: "9.0"
405
+ },
406
+ "floatingMenu.optionDateGrouping.qQuarterOnly": {
407
+ label: "Quarter only",
408
+ description: "The option for (Quarter) in the date grouping dropdown",
409
+ since: "9.4"
147
410
  },
148
411
  qMonth: {
149
- label: "Month"
412
+ label: "Month",
413
+ description: "The option for (Month, Year) in the date grouping dropdown",
414
+ since: "9.0"
415
+ },
416
+ "floatingMenu.optionDateGrouping.qMonth": {
417
+ label: "Month",
418
+ description: "The option for (Month, Year) in the date grouping dropdown",
419
+ since: "9.4"
150
420
  },
151
421
  qMonthOnly: {
152
- label: "Month only"
422
+ label: "Month only",
423
+ description: "The option for (Month) in the date grouping dropdown",
424
+ since: "9.0"
425
+ },
426
+ "floatingMenu.optionDateGrouping.qMonthOnly": {
427
+ label: "Month only",
428
+ description: "The option for (Month) in the date grouping dropdown",
429
+ since: "9.4"
153
430
  },
154
431
  qWeek: {
155
- label: "Week"
432
+ label: "Week",
433
+ description: "The option for (Week, Year) in the date grouping dropdown",
434
+ since: "9.0"
435
+ },
436
+ "floatingMenu.optionDateGrouping.qWeek": {
437
+ label: "Week",
438
+ description: "The option for (Week, Year) in the date grouping dropdown",
439
+ since: "9.4"
156
440
  },
157
441
  qDay: {
158
- label: "Day"
442
+ label: "Day",
443
+ description: "The option for (Full Date) in the date grouping dropdown",
444
+ since: "9.0"
445
+ },
446
+ "floatingMenu.optionDateGrouping.qDay": {
447
+ label: "Day",
448
+ description: "The option for (Full Date) in the date grouping dropdown",
449
+ since: "9.4"
159
450
  },
160
451
  qDayOnly: {
161
- label: "Day only"
452
+ label: "Day only",
453
+ description: "The option for (Day Month) in the date grouping dropdown",
454
+ since: "9.0"
455
+ },
456
+ "floatingMenu.optionDateGrouping.qDayOnly": {
457
+ label: "Day only",
458
+ description: "The option for (Day Month) in the date grouping dropdown",
459
+ since: "9.4"
162
460
  },
163
461
  qHour: {
164
- label: "Hour"
462
+ label: "Hour",
463
+ description: "The option for (Date, Hour) in the date grouping dropdown",
464
+ since: "9.0"
465
+ },
466
+ "floatingMenu.optionDateGrouping.qHour": {
467
+ label: "Hour",
468
+ description: "The option for (Date, Hour) in the date grouping dropdown",
469
+ since: "9.4"
165
470
  },
166
471
  qHourOnly: {
167
- label: "Hour only"
472
+ label: "Hour only",
473
+ description: "The option for (Hour) in the date grouping dropdown",
474
+ since: "9.0"
475
+ },
476
+ "floatingMenu.optionDateGrouping.qHourOnly": {
477
+ label: "Hour only",
478
+ description: "The option for (Hour) in the date grouping dropdown",
479
+ since: "9.4"
168
480
  },
169
481
  qMinute: {
170
- label: "Minute"
482
+ label: "Minute",
483
+ description: "The option for (Date, Minute) in the date grouping dropdown",
484
+ since: "9.0"
485
+ },
486
+ "floatingMenu.optionDateGrouping.qMinute": {
487
+ label: "Minute",
488
+ description: "The option for (Date, Minute) in the date grouping dropdown",
489
+ since: "9.4"
171
490
  },
172
491
  qMinuteOnly: {
173
- label: "Minute only"
492
+ label: "Minute only",
493
+ description: "The option for (Minute) in the date grouping dropdown",
494
+ since: "9.0"
495
+ },
496
+ "floatingMenu.optionDateGrouping.qMinuteOnly": {
497
+ label: "Minute only",
498
+ description: "The option for (Minute) in the date grouping dropdown",
499
+ since: "9.4"
174
500
  },
175
501
  qSecond: {
176
- label: "Second"
502
+ label: "Second",
503
+ description: "The option for (Date, Second) in the date grouping dropdown",
504
+ since: "9.0"
505
+ },
506
+ "floatingMenu.optionDateGrouping.qSecond": {
507
+ label: "Second",
508
+ description: "The option for (Date, Second) in the date grouping dropdown",
509
+ since: "9.4"
177
510
  },
178
511
  qSecondOnly: {
179
- label: "Second only"
512
+ label: "Second only",
513
+ description: "The option for (Second) in the date grouping dropdown",
514
+ since: "9.0"
515
+ },
516
+ "floatingMenu.optionDateGrouping.qSecondOnly": {
517
+ label: "Second only",
518
+ description: "The option for (Second) in the date grouping dropdown",
519
+ since: "9.4"
180
520
  },
181
521
  qComparativeAnalysis: {
182
522
  label: "Comparative analysis"
183
523
  }
184
524
  };
185
525
 
526
+ // src/metadata/labels/dashboard.defaults.ts
527
+ var COLOR = "Color names or hex, e.g. '#000000', 'green', 'GREEN'";
528
+ var IMAGE_URL = "Valid image url";
529
+ var COLUMNS_EXAMPLE = '[{ "columnId": "xxxxx", "datasetId": "datasetxxx" }]';
530
+ var GROUPINGS_EXAMPLE = '["day","month","quarter","week","year","quarter_only","month_only","day_only"]';
531
+ var ANY_TEXT = /* @__PURE__ */ __name((example) => `Any text string, e.g. "${example}"`, "ANY_TEXT");
532
+ var COLUMN_NOTE = "To apply this default, you need to select a column using the \u201Ccolumns\u201D field. If no column is selected through customization, the default will be loaded based on the column\u2019s data type.";
533
+ var FONT_FAMILIES = [
534
+ "Roboto, sans-serif",
535
+ "Georgia, serif",
536
+ "Palatino Linotype, Book Antiqua, Palatino, serif",
537
+ "Times New Roman, Times, serif",
538
+ "Arial, Helvetica, sans-serif",
539
+ "Arial Black, Gadget, sans-serif",
540
+ "Comic Sans MS, cursive, sans-serif",
541
+ "Impact, Charcoal, sans-serif",
542
+ "Lucida Sans Unicode, Lucida Grande, sans-serif",
543
+ "Tahoma, Geneva, sans-serif",
544
+ "Trebuchet MS, Helvetica, sans-serif",
545
+ "Verdana, Geneva, sans-serif",
546
+ "Courier New, Courier, monospace",
547
+ "Lucida Console, Monaco, monospace"
548
+ ];
549
+ var FONT_SIZES = [
550
+ 8,
551
+ 9,
552
+ 10,
553
+ 11,
554
+ 12,
555
+ 14,
556
+ 15,
557
+ 16,
558
+ 18,
559
+ 24,
560
+ 30,
561
+ 36,
562
+ 48,
563
+ 60,
564
+ 72,
565
+ 96
566
+ ];
567
+ var px = /* @__PURE__ */ __name((sizes) => sizes.map((size) => `${size}px`), "px");
568
+ var BORDER_WIDTHS = px(Array.from({
569
+ length: 20
570
+ }, (_, index) => index + 1));
571
+ var ASPECTS = [
572
+ "contain",
573
+ "cover",
574
+ "fill"
575
+ ];
576
+ var TRIGGERS = [
577
+ "BUTTON",
578
+ "AUTOMATIC"
579
+ ];
580
+ var color = /* @__PURE__ */ __name((description, since = "9.0") => __spreadValues({
581
+ type: "string",
582
+ example: COLOR,
583
+ description
584
+ }, since && {
585
+ since
586
+ }), "color");
587
+ var fonts = /* @__PURE__ */ __name((description) => ({
588
+ type: "string",
589
+ values: FONT_FAMILIES,
590
+ description,
591
+ since: "9.0"
592
+ }), "fonts");
593
+ var filterControl = /* @__PURE__ */ __name((prefix) => ({
594
+ [`${prefix}.columns`]: {
595
+ type: "Array",
596
+ example: COLUMNS_EXAMPLE,
597
+ description: "An array of columns where the filter will be applied.",
598
+ since: "9.0"
599
+ },
600
+ [`${prefix}.defaultGrouping`]: {
601
+ type: "string",
602
+ example: "A grouping, e.g. 'day', 'month', 'year'",
603
+ description: `Date grouping selected by the user in interaction mode. Note: ${COLUMN_NOTE} You also have to select a list of valid groupings.`,
604
+ since: "9.0"
605
+ },
606
+ [`${prefix}.groupings`]: {
607
+ type: "Array",
608
+ example: GROUPINGS_EXAMPLE,
609
+ description: `Date grouping list. Note: ${COLUMN_NOTE}`,
610
+ since: "9.0"
611
+ }
612
+ }), "filterControl");
613
+ var notIncluded = /* @__PURE__ */ __name((type, description, extra = {}) => __spreadProps(__spreadValues(__spreadValues({
614
+ type
615
+ }, description && {
616
+ description
617
+ }), extra), {
618
+ notes: "Not included yet",
619
+ audience: "internal"
620
+ }), "notIncluded");
621
+ var DASHBOARD_DEFAULTS = __spreadProps(__spreadValues(__spreadProps(__spreadValues({
622
+ // View list
623
+ assetListViewMode: {
624
+ type: "string",
625
+ values: [
626
+ "card",
627
+ "table"
628
+ ],
629
+ description: "Defines the default view mode for the asset list",
630
+ since: "9.0",
631
+ notes: "If the user switches the view, this will be saved in the local storage"
632
+ },
633
+ // View endUser
634
+ dragElement: {
635
+ type: "boolean",
636
+ description: "Defines whether elements are draggable by default",
637
+ since: "9.2.PR.3",
638
+ notes: "These variables were added in https://qrveydev.atlassian.net/browse/RB-6924"
639
+ },
640
+ resizeElement: {
641
+ type: "boolean",
642
+ description: "Defines whether elements are resizable by default",
643
+ since: "9.2.PR.3",
644
+ notes: "These variables were added in https://qrveydev.atlassian.net/browse/RB-6924"
645
+ },
646
+ removeElement: {
647
+ type: "boolean",
648
+ description: "Defines whether elements can be removed by default",
649
+ since: "9.2.PR.3",
650
+ notes: "These variables were added in https://qrveydev.atlassian.net/browse/RB-6924"
651
+ },
652
+ changeLayout: {
653
+ type: "boolean",
654
+ description: "Defines whether elements can be removed, draggable and resizable by default",
655
+ since: "9.3",
656
+ notes: "This variable was added in https://qrveydev.atlassian.net/browse/RB-7903"
657
+ },
658
+ unsavedChangesBehavior: {
659
+ type: "string",
660
+ values: [
661
+ "prompt",
662
+ "discard",
663
+ "autoSave"
664
+ ],
665
+ description: "Defines whether unsaved personalization changes are saved, discarded, or prompted by default",
666
+ since: "9.4",
667
+ notes: "This variable was added in https://qrveydev.atlassian.net/browse/RB-8434"
668
+ },
669
+ // Item type textBox
670
+ "customStyles.text.alignText": {
671
+ type: "string",
672
+ values: [
673
+ "left",
674
+ "center",
675
+ "right",
676
+ "justify"
677
+ ],
678
+ description: "Default align text for the text element",
679
+ since: "9.0"
680
+ },
681
+ "customStyles.text.backgroundColor": color("Default background color"),
682
+ "customStyles.text.borderColor": color("Default border color for the text element"),
683
+ "customStyles.text.borderStyle": {
684
+ type: "string",
685
+ values: [
686
+ "solid",
687
+ "dotted",
688
+ "dashed",
689
+ "double"
690
+ ],
691
+ since: "9.0"
692
+ },
693
+ "customStyles.text.borderWidth": {
694
+ type: "string",
695
+ values: BORDER_WIDTHS,
696
+ description: "Default border width",
697
+ since: "9.0"
698
+ },
699
+ "customStyles.text.fontColor": color("Default font color for the text element"),
700
+ "customStyles.text.fontFamily": fonts("Default font for the text element"),
701
+ "customStyles.text.fontSize": {
702
+ type: "string",
703
+ values: px(FONT_SIZES),
704
+ description: "Default font size for the text element",
705
+ since: "9.0"
706
+ },
707
+ "customStyles.text.fontStyle": {
708
+ type: "boolean",
709
+ description: "Default font style for the text element (italic styling)",
710
+ since: "9.0"
711
+ },
712
+ "customStyles.text.fontWeight": {
713
+ type: "boolean",
714
+ description: "Default font weight for the text element (bold styling)",
715
+ since: "9.0"
716
+ },
717
+ "customStyles.text.paddingBottom": {
718
+ type: "number",
719
+ description: "Default padding bottom for the text element",
720
+ since: "9.0"
721
+ },
722
+ "customStyles.text.paddingLeft": {
723
+ type: "number",
724
+ description: "Default padding left for the text element",
725
+ since: "9.0"
726
+ },
727
+ "customStyles.text.paddingRight": {
728
+ type: "number",
729
+ description: "Default padding right for the text element",
730
+ since: "9.0"
731
+ },
732
+ "customStyles.text.paddingTop": {
733
+ type: "number",
734
+ description: "Default padding top for the text element",
735
+ since: "9.0"
736
+ },
737
+ "customStyles.text.strike": {
738
+ type: "boolean",
739
+ description: "Default strike for the text element",
740
+ since: "9.0"
741
+ },
742
+ "customStyles.text.underline": {
743
+ type: "boolean",
744
+ description: "Default underline for the text element",
745
+ since: "9.0"
746
+ },
747
+ // Item type image
748
+ "customStyles.image.aspect": {
749
+ type: "string",
750
+ values: ASPECTS,
751
+ description: "Default aspect for image",
752
+ since: "9.0"
753
+ },
754
+ "customStyles.image.image": {
755
+ type: "string",
756
+ example: IMAGE_URL,
757
+ description: "Image for the item."
758
+ },
759
+ // Item type button
760
+ "customStyles.button.background": color("Button background color"),
761
+ "customStyles.button.color": color("Button font color"),
762
+ "customStyles.button.fontFamily": fonts("Button font family"),
763
+ "customStyles.button.fontSize": {
764
+ type: "string",
765
+ description: "Button font size",
766
+ since: "9.0",
767
+ notes: "With another value, the closest possible option will be selected"
768
+ },
769
+ "customStyles.button.label": {
770
+ type: "string",
771
+ description: "Text for the element",
772
+ since: "9.0"
773
+ },
774
+ "customStyles.button.url": {
775
+ type: "string",
776
+ example: "Valid url",
777
+ description: "Url for the button click event",
778
+ since: "9.0"
779
+ },
780
+ // Item type header
781
+ "customStyles.header.layoutWidth": {
782
+ type: "string",
783
+ values: [
784
+ "screen",
785
+ "canvas"
786
+ ],
787
+ description: "Width of the header",
788
+ since: "9.0"
789
+ },
790
+ "customStyles.header.backgroundColor": color("Background color for the header"),
791
+ "customStyles.header.height": {
792
+ type: "number",
793
+ description: "Default header size",
794
+ since: "9.0",
795
+ notes: "Value should be between 10 and 300"
796
+ },
797
+ "customStyles.header.backgroundImageConfig.aspect": {
798
+ type: "string",
799
+ values: ASPECTS,
800
+ description: "Default aspect for header background image",
801
+ since: "9.0"
802
+ },
803
+ "customStyles.header.backgroundImageConfig.image": {
804
+ type: "string",
805
+ example: IMAGE_URL,
806
+ description: "Background image for the header.",
807
+ since: "9.0"
808
+ },
809
+ // Item type container
810
+ "customStyles.container.backgroundAspect": {
811
+ type: "string",
812
+ values: ASPECTS,
813
+ description: "Sets the size of the element's background image",
814
+ since: "9.0"
815
+ },
816
+ "customStyles.container.backgroundColor": color("The background color of the container"),
817
+ "customStyles.container.borderColor": color("The border color of the container"),
818
+ "customStyles.container.borderRadius": {
819
+ type: "number",
820
+ description: "The number to round the corners of the container outer border edges",
821
+ since: "9.0"
822
+ },
823
+ "customStyles.container.borderStyle": {
824
+ type: "string",
825
+ values: [
826
+ "none",
827
+ "solid",
828
+ "dotted"
829
+ ],
830
+ description: "The style to visualize the border",
831
+ since: "9.0"
832
+ },
833
+ "customStyles.container.borderWidth": {
834
+ type: "number",
835
+ description: "The width number of the border style",
836
+ since: "9.0"
837
+ },
838
+ "customStyles.container.backgroundImageURL": {
839
+ type: "string",
840
+ example: IMAGE_URL,
841
+ description: "Background image for the container.",
842
+ since: "9.0"
843
+ },
844
+ // Item type tab
845
+ "customStyles.tab.backgroundColor": color("Tabs indicator color"),
846
+ "customStyles.tab.border": color("Tabs' border color"),
847
+ "customStyles.tab.fontColor": color("Tabs font color"),
848
+ "customStyles.tab.fontSize": {
849
+ type: "string",
850
+ values: px(FONT_SIZES.filter((size) => size <= 30)),
851
+ description: "Tabs font size",
852
+ since: "9.0",
853
+ notes: "With another value, the closest possible option will be selected"
854
+ },
855
+ "customStyles.tab.fontType": fonts("Tabs font type"),
856
+ "customStyles.tab.generalSize": {
857
+ type: "number",
858
+ description: "Default size for tabs",
859
+ since: "9.0"
860
+ },
861
+ "customStyles.tab.name": {
862
+ type: "string",
863
+ description: "Label for the name of a new tab.",
864
+ since: "9.0"
865
+ },
866
+ "customStyles.tab.selectorColor": color("Selected tab indicator color"),
867
+ "customStyles.tab.widthType": {
868
+ type: "string",
869
+ values: [
870
+ "MANUAL",
871
+ "AUTOMATIC",
872
+ "SAME_SIZE"
873
+ ],
874
+ description: "Tabs definition for width type",
875
+ since: "9.0"
876
+ },
877
+ // Item type input box
878
+ "customStyles.filterCtrlInputBox.backgroundColor": color("Background color for the Filter Control"),
879
+ "customStyles.filterCtrlInputBox.borderColor": color("Border color for the filter control"),
880
+ "customStyles.filterCtrlInputBox.buttonBackgroundColor": color("Background color of the apply filter button in the Filter Control"),
881
+ "customStyles.filterCtrlInputBox.buttonBorderColor": color("Border color of the apply filter button in the Filter Control"),
882
+ "customStyles.filterCtrlInputBox.buttonTextColor": color("Text color of the apply filter button in the Filter Control")
883
+ }, filterControl("customStyles.filterCtrlInputBox")), {
884
+ "customStyles.filterCtrlInputBox.defaultValidator": {
885
+ type: "IFilterValidator",
886
+ example: "A validator or operator, e.g. 'CONTAINS'",
887
+ description: `Default validator selected for the Filter Control. Note: ${COLUMN_NOTE} You also have to select a list of valid validators`,
888
+ since: "9.0"
889
+ },
890
+ "customStyles.filterCtrlInputBox.fontColor": color("Font color for the filter control label (title)"),
891
+ "customStyles.filterCtrlInputBox.fontFamily": fonts("List of font types for the Filter Control"),
892
+ "customStyles.filterCtrlInputBox.hint": {
893
+ type: "string",
894
+ example: "Placeholder text, any text string.",
895
+ description: "Placeholder text for the filter field.",
896
+ since: "9.0"
897
+ },
898
+ "customStyles.filterCtrlInputBox.selectorColor": color("Color of the selector checkbox"),
899
+ "customStyles.filterCtrlInputBox.title": {
900
+ type: "string",
901
+ example: ANY_TEXT("Column name"),
902
+ description: "Name definition in the filter control, which can be a column name or any text from the panel configuration.",
903
+ since: "9.0"
904
+ },
905
+ "customStyles.filterCtrlInputBox.trigger": {
906
+ type: "string",
907
+ values: TRIGGERS,
908
+ description: "Displays the Apply Filter button or operates automatically",
909
+ since: "9.0"
910
+ },
911
+ "customStyles.filterCtrlInputBox.triggerButtonLabel": {
912
+ type: "string",
913
+ example: ANY_TEXT("Filter"),
914
+ description: "Label to display text on the apply filter button",
915
+ since: "9.0"
916
+ },
917
+ "customStyles.filterCtrlInputBox.validators": {
918
+ type: "IFilterValidator[]",
919
+ example: '["EQUALS","NOT_EQUAL"]',
920
+ description: `Object for the validators/operators list. Note: ${COLUMN_NOTE}`,
921
+ since: "9.0"
922
+ },
923
+ // Item type multi-select list
924
+ "customStyles.filterCtrlMultiSelectList.backgroundColor": color("Background color for the Filter Control"),
925
+ "customStyles.filterCtrlMultiSelectList.borderColor": color("Border color for the filter control"),
926
+ "customStyles.filterCtrlMultiSelectList.buttonBackgroundColor": color("Default background color for filter buttons"),
927
+ "customStyles.filterCtrlMultiSelectList.buttonBorderColor": color("Default border color for filter buttons"),
928
+ "customStyles.filterCtrlMultiSelectList.buttonTextColor": color("Default text color for filter buttons"),
929
+ "customStyles.filterCtrlMultiSelectList.columns": {
930
+ type: "Array",
931
+ example: COLUMNS_EXAMPLE,
932
+ description: "An array of columns where the filter will be applied. Note: This default requires the fields sourceDataDataset, sourceDataDisplayColumn, and sourceDataValueColumn to be provided through customization to load the data associated.",
933
+ since: "9.0"
934
+ },
935
+ "customStyles.filterCtrlMultiSelectList.defaultValidator": {
936
+ type: "IFilterValidator",
937
+ values: [
938
+ "EQUALS",
939
+ "NOT_EQUAL"
940
+ ],
941
+ description: `Default validator/operator to load. Note: ${COLUMN_NOTE}`,
942
+ since: "9.0"
943
+ },
944
+ "customStyles.filterCtrlMultiSelectList.fontColor": color("Font color for the filter control label (title)", void 0),
945
+ "customStyles.filterCtrlMultiSelectList.fontFamily": fonts("List of font types for Filter Control"),
946
+ "customStyles.filterCtrlMultiSelectList.hint": {
947
+ type: "string",
948
+ example: "Placeholder text for the search input",
949
+ description: "Default placeholder for the search input field",
950
+ since: "9.0"
951
+ },
952
+ "customStyles.filterCtrlMultiSelectList.selectorColor": color("Default color for the selector checkbox"),
953
+ "customStyles.filterCtrlMultiSelectList.sourceDataDataset": {
954
+ type: "string",
955
+ example: "Dataset id, should be included in one of the listed inside of the columns attribute",
956
+ description: "Defines the dataset for sub-listing the columns in the sourceDataDisplayColumn attribute, and the sourceDataValueColumn attribute. Required if the columns attribute is defined",
957
+ since: "9.1"
958
+ },
959
+ "customStyles.filterCtrlMultiSelectList.sourceDataDisplayColumn": {
960
+ type: "string",
961
+ example: "Column id, should be included in one of the listed inside of the columns attribute",
962
+ description: "Defines the column with the display values for the filter control. Required if the columns attribute is defined.",
963
+ since: "9.1"
964
+ },
965
+ "customStyles.filterCtrlMultiSelectList.sourceDataValueColumn": {
966
+ type: "string",
967
+ example: "Column id, should be included in one of the listed inside of the columns attribute",
968
+ description: "Defines the column with the actual filter values for the filter control. Required if the columns attribute is defined.",
969
+ since: "9.1"
970
+ },
971
+ "customStyles.filterCtrlMultiSelectList.title": {
972
+ type: "string",
973
+ example: ANY_TEXT("Column name"),
974
+ description: "Defines the label in the filter control, which can be a column name or any text from the panel configuration.",
975
+ since: "9.0"
976
+ },
977
+ "customStyles.filterCtrlMultiSelectList.trigger": {
978
+ type: "string",
979
+ values: TRIGGERS,
980
+ description: "Shows the Apply Filter button or operates automatically",
981
+ since: "9.0"
982
+ },
983
+ "customStyles.filterCtrlMultiSelectList.triggerButtonLabel": {
984
+ type: "string",
985
+ example: ANY_TEXT("Filter"),
986
+ description: "Label to display the text on the apply filter button",
987
+ since: "9.0"
988
+ },
989
+ "customStyles.filterCtrlMultiSelectList.type": {
990
+ type: "string",
991
+ values: [
992
+ "LIST",
993
+ "DROPDOWN"
994
+ ],
995
+ description: "Groups of values: 'LIST' or 'DROPDOWN' (should be in uppercase). Other types of values are undefined",
996
+ since: "9.0"
997
+ },
998
+ "customStyles.filterCtrlMultiSelectList.validators": {
999
+ type: "IFilterValidator[]",
1000
+ example: '["EQUALS","NOT_EQUAL"]',
1001
+ description: `An array of the selected validators for the Filter control. For the multi-select list only EQUALS and NOT_EQUAL are available. Note: ${COLUMN_NOTE}`,
1002
+ since: "9.0"
1003
+ },
1004
+ // Item type date picker
1005
+ "customStyles.filterCtrlDatePicker.backgroundColor": color("Background color for the Filter Control"),
1006
+ "customStyles.filterCtrlDatePicker.borderColor": color("Border color for the filter control"),
1007
+ "customStyles.filterCtrlDatePicker.buttonBackgroundColor": color("Background color for the apply filter button"),
1008
+ "customStyles.filterCtrlDatePicker.buttonBorderColor": color("Border color for the filter button"),
1009
+ "customStyles.filterCtrlDatePicker.buttonTextColor": color("Text color for the filter button")
1010
+ }), filterControl("customStyles.filterCtrlDatePicker")), {
1011
+ "customStyles.filterCtrlDatePicker.columns": {
1012
+ type: "Array",
1013
+ example: COLUMNS_EXAMPLE,
1014
+ description: "An array of columns where the filter will be applied. The data type of the columns should be date, if not, it won't apply as a valid column",
1015
+ since: "9.0"
1016
+ },
1017
+ "customStyles.filterCtrlDatePicker.defaultValidator": {
1018
+ type: "IFilterValidator",
1019
+ example: "e.g. 'AFTER'",
1020
+ description: "Full list of validators: IFilterValidator. Only those associated to dates are valid",
1021
+ since: "9.0"
1022
+ },
1023
+ "customStyles.filterCtrlDatePicker.fontColor": color("Font color for the filter control label (title)"),
1024
+ "customStyles.filterCtrlDatePicker.fontFamily": fonts("List of font types for the filter control"),
1025
+ "customStyles.filterCtrlDatePicker.hint": {
1026
+ type: "string",
1027
+ example: "Placeholder text, any text string.",
1028
+ description: "Default placeholder",
1029
+ since: "9.0"
1030
+ },
1031
+ "customStyles.filterCtrlDatePicker.selectorColor": color("Color of the selector checkbox"),
1032
+ "customStyles.filterCtrlDatePicker.title": {
1033
+ type: "string",
1034
+ example: ANY_TEXT("Column name"),
1035
+ description: "Default name for the filter control",
1036
+ since: "9.0"
1037
+ },
1038
+ "customStyles.filterCtrlDatePicker.trigger": {
1039
+ type: "string",
1040
+ values: TRIGGERS,
1041
+ description: "Default trigger action, either with a button or automatic mode (on blur)",
1042
+ since: "9.0"
1043
+ },
1044
+ "customStyles.filterCtrlDatePicker.triggerButtonLabel": {
1045
+ type: "string",
1046
+ example: ANY_TEXT("Filter"),
1047
+ description: "Default text for the Apply Filter button",
1048
+ since: "9.0"
1049
+ },
1050
+ "customStyles.filterCtrlDatePicker.validators": {
1051
+ type: "IFilterValidator[]",
1052
+ example: '["EQUALS","AFTER"]',
1053
+ description: `Object to list the validators/operators. Note: ${COLUMN_NOTE}`,
1054
+ since: "9.0"
1055
+ },
1056
+ // Filter panel
1057
+ "filterPanel.defaultView": {
1058
+ type: "string",
1059
+ values: [
1060
+ "expanded",
1061
+ "collapsed"
1062
+ ],
1063
+ description: "Default value for collapsing or expanding the filter panel",
1064
+ since: "9.0"
1065
+ },
1066
+ "filterPanel.displayIcon": {
1067
+ type: "boolean",
1068
+ description: "Default value for the display icon option in the filter panels settings",
1069
+ since: "9.0"
1070
+ },
1071
+ "filterPanel.displayColor": {
1072
+ type: "boolean",
1073
+ description: "Default value for the display color option in the filter panels settings",
1074
+ since: "9.0"
1075
+ },
1076
+ "filterPanel.scopeDashboardColor": color("Default color for filters created under the dashboard scope when displayed inside the filter panel", "9.4"),
1077
+ "filterPanel.scopeTabColor": color("Default color for filters created under the tab scope when displayed inside the filter panel", "9.4"),
1078
+ "filterPanel.scopePanelColor": color("Default color for filters created under the panel scope when displayed inside the filter panel", "9.4"),
1079
+ "filterPanel.scopeContainerColor": color("Default color for filters created under the container scope when displayed inside the filter panel", "9.4"),
1080
+ // Item types line, rectangle and ellipse: the sheet marks them "Not included yet".
1081
+ // The sheet describes the next two colors as "Color of the selector checkbox", copied from the filter controls.
1082
+ "customStyles.line.lineColor": notIncluded("string", void 0, {
1083
+ example: COLOR
1084
+ }),
1085
+ "customStyles.line.lineWidth": notIncluded("number", "Specifies the initial width of the line", {
1086
+ example: "Range: 0-20"
1087
+ }),
1088
+ "customStyles.line.lineStyle": notIncluded("string", "Default line type to load", {
1089
+ values: [
1090
+ "solid",
1091
+ "dotted",
1092
+ "dashed",
1093
+ "double"
1094
+ ]
1095
+ }),
1096
+ "customStyles.rectangle.fillColor": notIncluded("string", "Default background color for rectangle", {
1097
+ example: COLOR
1098
+ }),
1099
+ "customStyles.rectangle.borderColor": notIncluded("string", "Border color for the rectangle", {
1100
+ example: COLOR
1101
+ }),
1102
+ "customStyles.rectangle.borderWidth": notIncluded("number", "Specifies the initial width of the border", {
1103
+ example: "Range: 0-20"
1104
+ }),
1105
+ "customStyles.rectangle.borderStyle": notIncluded("string", "Default border type to load", {
1106
+ values: [
1107
+ "none",
1108
+ "solid",
1109
+ "dotted",
1110
+ "dashed",
1111
+ "double"
1112
+ ]
1113
+ }),
1114
+ "customStyles.rectangle.roundCornerTopRight": notIncluded("number", "Defines the rounding radius for the top-right corner", {
1115
+ example: "0 - no upper limit"
1116
+ }),
1117
+ "customStyles.rectangle.roundCornerTopLeft": notIncluded("number", "Defines the rounding radius for the top-left corner", {
1118
+ example: "0 - no upper limit"
1119
+ }),
1120
+ "customStyles.rectangle.roundCornerBottomRight": notIncluded("number", "Defines the rounding radius for the bottom-right corner", {
1121
+ example: "0 - no upper limit"
1122
+ }),
1123
+ "customStyles.rectangle.roundCornerBottomLeft": notIncluded("number", "Defines the rounding radius for the bottom-left corner", {
1124
+ example: "0 - no upper limit"
1125
+ }),
1126
+ "customStyles.ellipse.borderColor": notIncluded("string", void 0, {
1127
+ example: COLOR
1128
+ }),
1129
+ "customStyles.ellipse.borderWidth": notIncluded("number", "Specifies the initial width of the border", {
1130
+ example: "Range: 0-20"
1131
+ }),
1132
+ "customStyles.ellipse.borderStyle": notIncluded("string", "Default border type to load", {
1133
+ values: [
1134
+ "solid",
1135
+ "dotted",
1136
+ "dashed",
1137
+ "double"
1138
+ ]
1139
+ }),
1140
+ "customStyles.ellipse.fillColor": notIncluded("string", "Default background color for ellipse", {
1141
+ example: COLOR
1142
+ }),
1143
+ // Additional options
1144
+ "downloadModal.exportVersion": {
1145
+ type: "string",
1146
+ values: [
1147
+ "saved",
1148
+ "unsaved"
1149
+ ],
1150
+ description: "Defines the default value to export version",
1151
+ since: "9.3",
1152
+ notes: "If the default value is set to 'unsaved', but the export modal is opened with no pending changes, the default selected option should switch to 'saved'."
1153
+ },
1154
+ "downloadModal.subscribeMyself": {
1155
+ type: "boolean",
1156
+ description: 'Defines whether the "Subscribe myself" checkbox starts checked when creating a scheduled export. If downloadModal.qSubscribeMyself is hidden, it also defines whether the creator is subscribed',
1157
+ since: "9.6",
1158
+ notes: "The default value is true. This variable was added in https://qrveydev.atlassian.net/browse/RB-9606"
1159
+ },
1160
+ "downloadModal.pageSize": {
1161
+ type: "string",
1162
+ values: [
1163
+ "LEGACY",
1164
+ "LETTER",
1165
+ "A4",
1166
+ "A3",
1167
+ "LEGAL",
1168
+ "TABLOID"
1169
+ ],
1170
+ description: "Defines the page size Advanced Settings preselects for chart PDF exports. Case-sensitive; an invalid value is ignored",
1171
+ since: "9.6"
1172
+ },
1173
+ "downloadModal.orientation": {
1174
+ type: "string",
1175
+ values: [
1176
+ "PORTRAIT",
1177
+ "LANDSCAPE"
1178
+ ],
1179
+ description: "Defines the orientation Advanced Settings preselects for chart PDF exports. Case-sensitive; an invalid value is ignored",
1180
+ since: "9.6"
1181
+ },
1182
+ "duplicateModal.duplicateCharts": {
1183
+ type: "boolean",
1184
+ description: "If the dashboard's charts are duplicated. true = create independent copies of the charts for the new dashboard (edits to either dashboard's charts stay isolated). false = the new dashboard points to the original charts (edits made through either dashboard are reflected in both).",
1185
+ since: "9.5"
1186
+ },
1187
+ "duplicateModal.duplicateFilters": {
1188
+ type: "boolean",
1189
+ description: "If the dashboard's filters are duplicated. true = create independent copies of the filters for the new dashboard. false = the new dashboard does not get its own copies of the filters.",
1190
+ since: "9.5"
1191
+ },
1192
+ "duplicateModal.duplicateDashActions": {
1193
+ type: "boolean",
1194
+ description: "If the dashboard-level actions are duplicated. true = create independent copies of the actions for the new dashboard. false = the new dashboard does not get its own copies of the actions.",
1195
+ since: "9.5"
1196
+ },
1197
+ // Validated paths no documented default reaches: DashboardX reads the filter controls' defaults under
1198
+ // customStyles.filterCtrl* (vem-item.manager), so these validators never run on what partners write.
1199
+ "customStyles.filterList.type": {
1200
+ type: "string",
1201
+ values: [
1202
+ "LIST",
1203
+ "DROPDOWN"
1204
+ ],
1205
+ audience: "internal"
1206
+ },
1207
+ "customStyles.filterList.triggerType": {
1208
+ type: "string",
1209
+ values: TRIGGERS,
1210
+ audience: "internal"
1211
+ },
1212
+ "customStyles.filterInput.triggerType": {
1213
+ type: "string",
1214
+ values: TRIGGERS,
1215
+ audience: "internal"
1216
+ },
1217
+ "customStyles.filterDate.triggerType": {
1218
+ type: "string",
1219
+ values: TRIGGERS,
1220
+ audience: "internal"
1221
+ }
1222
+ });
1223
+
186
1224
  // src/metadata/labels/dashboard.labels.ts
187
1225
  var DASHBOARD_LABELS = {
188
1226
  // Sections
189
1227
  navBar: {
190
- label: "Navigation bar"
1228
+ label: "Navigation bar",
1229
+ description: "The main top bar",
1230
+ since: "9.0"
191
1231
  },
192
1232
  assetList: {
193
- label: "Dashboard list"
1233
+ label: "Dashboard list",
1234
+ description: "The list options",
1235
+ since: "9.0"
194
1236
  },
195
1237
  "assetList.asset": {
196
- label: "Dashboard item"
1238
+ label: "Dashboard item",
1239
+ description: "The options inside the asset concept",
1240
+ since: "9.0"
197
1241
  },
198
1242
  "assetList.asset.optionMenu": {
199
- label: "Dashboard options menu"
1243
+ label: "Dashboard options menu",
1244
+ description: "The list options for the menu",
1245
+ since: "9.0"
200
1246
  },
201
1247
  "assetList.asset.card": {
202
- label: "Card view"
1248
+ label: "Card view",
1249
+ description: "Configuration key for the card view that displays summarized dashboard information.",
1250
+ since: "9.2.PR.3",
1251
+ notes: "Main container for dashboard details in card format."
203
1252
  },
204
1253
  "assetList.asset.table": {
205
- label: "Table view"
1254
+ label: "Table view",
1255
+ description: "Configuration key for the table view that lists dashboards and their details.",
1256
+ since: "9.2.PR.3",
1257
+ notes: "Main container for table columns and related UI elements."
206
1258
  },
207
1259
  controlBarLeft: {
208
- label: "Left control bar"
1260
+ label: "Left control bar",
1261
+ description: "The list options for the header",
1262
+ since: "9.0"
209
1263
  },
210
1264
  controlBarRight: {
211
- label: "Right control bar"
1265
+ label: "Right control bar",
1266
+ description: "The list of options on the right",
1267
+ since: "9.0"
212
1268
  },
213
1269
  header: {
214
- label: "Dashboard header"
1270
+ label: "Dashboard header",
1271
+ description: "The header where is located the dashboard name, description and favorite",
1272
+ since: "9.0"
215
1273
  },
216
1274
  "header.qOptionsMenu": {
217
- label: "Dashboard options menu"
1275
+ label: "Dashboard options menu",
1276
+ description: "The whole three-dot menu: removing it takes its four children without naming them"
1277
+ },
1278
+ // The sheet has no text of their own, and their leaf ids carry the list menu's ("...inside the menu for the list").
1279
+ "header.qOptionsMenu.qDuplDash": {
1280
+ label: "Duplicate dashboard"
1281
+ },
1282
+ "header.qOptionsMenu.qDeleteDash": {
1283
+ label: "Delete dashboard"
218
1284
  },
219
1285
  menuBar: {
220
- label: "Menu bar"
1286
+ label: "Menu bar",
1287
+ description: "The menu",
1288
+ since: "9.0",
1289
+ notes: "If the toolbar and the menu are hidden, the entire bar will be hidden"
221
1290
  },
222
1291
  "menuBar.file": {
223
- label: "File menu"
1292
+ label: "File menu",
1293
+ description: "The file menu",
1294
+ since: "9.0"
224
1295
  },
225
1296
  "menuBar.edit": {
226
- label: "Edit menu"
1297
+ label: "Edit menu",
1298
+ description: "The edit menu",
1299
+ since: "9.0"
227
1300
  },
228
1301
  "menuBar.insert": {
229
- label: "Insert menu"
1302
+ label: "Insert menu",
1303
+ description: "The insert menu",
1304
+ since: "9.0"
230
1305
  },
231
1306
  toolBar: {
232
- label: "Toolbar"
1307
+ label: "Toolbar",
1308
+ description: "The toolbar section",
1309
+ since: "9.0",
1310
+ notes: "If the toolbar and the menu are hidden, the entire bar will be hidden"
233
1311
  },
234
1312
  configPanel: {
235
- label: "Configuration panel"
1313
+ label: "Configuration panel",
1314
+ description: "The configuration panel for the items and containers",
1315
+ since: "9.0"
236
1316
  },
237
1317
  filterPanel: {
238
- label: "Filter panel"
1318
+ label: "Filter panel",
1319
+ description: "The filters panel",
1320
+ since: "9.0"
239
1321
  },
240
1322
  downloadModal: {
241
- label: "Download modal"
1323
+ label: "Download modal",
1324
+ description: "The options associated to the download modal",
1325
+ since: "9.0"
242
1326
  },
243
1327
  canvas: {
244
1328
  label: "Canvas"
245
1329
  },
246
1330
  duplicateModal: {
247
- label: "Duplicate modal"
1331
+ label: "Duplicate modal",
1332
+ description: 'Controls the "Duplicate Dashboard" options modal shown when duplicating a dashboard.',
1333
+ since: "9.5",
1334
+ notes: 'If an option is removed, for example remove: ["duplicateModal"], it does not mean the duplicate functionality is removed. Only the modal will be skipped, and the duplication process will proceed using the specified default values.'
248
1335
  },
249
1336
  "duplicateModal.options": {
250
1337
  label: "Duplicate options"
251
1338
  },
252
1339
  grid: {
253
- label: "Grid"
1340
+ label: "Grid",
1341
+ description: "The grid menu",
1342
+ since: "9.0"
1343
+ },
1344
+ "toolBar.grid": {
1345
+ label: "Grid",
1346
+ description: "The grid group inside the toolbar",
1347
+ since: "9.0"
254
1348
  },
255
1349
  dashFilterScope: {
256
- label: "Dashboard filters"
1350
+ label: "Dashboard filters",
1351
+ description: "Settings associated to the dashboard scope",
1352
+ since: "9.0"
257
1353
  },
258
1354
  tabFilterScope: {
259
- label: "Tab filters"
1355
+ label: "Tab filters",
1356
+ description: "Settings associated to the tab scope",
1357
+ since: "9.0"
260
1358
  },
261
1359
  containerFilterScope: {
262
- label: "Container filters"
1360
+ label: "Container filters",
1361
+ description: "Settings associated to the container scope",
1362
+ since: "9.4"
263
1363
  },
264
1364
  panelFilterScope: {
265
- label: "Panel filters"
1365
+ label: "Panel filters",
1366
+ description: "Settings associated to the chart panel scope",
1367
+ since: "9.0"
266
1368
  },
267
1369
  viewOnlyFilterScope: {
268
- label: "View-only filters"
1370
+ label: "View-only filters",
1371
+ description: "This key controls the display of view-only filters in the dashboard\u2019s filter panel.",
1372
+ since: "9.4"
269
1373
  },
270
1374
  edit: {
271
1375
  label: "Edit menu"
@@ -280,463 +1384,911 @@ var DASHBOARD_LABELS = {
280
1384
  label: "Options"
281
1385
  },
282
1386
  timezone: {
283
- label: "Timezone"
1387
+ label: "Timezone",
1388
+ description: "The timezone label",
1389
+ since: "9.0"
284
1390
  },
285
1391
  // Navigation and list
286
1392
  qAppTitle: {
287
- label: "Application title"
1393
+ label: "Application title",
1394
+ description: "The app title in the main top bar",
1395
+ since: "9.0"
288
1396
  },
289
1397
  qBackButton: {
290
- label: "Back button"
1398
+ label: "Back button",
1399
+ description: "The back button on the nav bar",
1400
+ since: "9.0",
1401
+ notes: "Only available when a dashboard is selected"
291
1402
  },
292
1403
  qQvTokenExpiredMessage: {
293
- label: "Session expired message"
1404
+ label: "Session expired message",
1405
+ description: "Controls the visibility of the error message displayed to users when the security token (qv_token) expires while using the embedded dashboard.",
1406
+ since: "9.3"
294
1407
  },
295
1408
  qGoToDashBackButton: {
296
- label: "Back to source dashboard button"
1409
+ label: "Back to source dashboard button",
1410
+ description: "Hide back button (arrow) for the Go To Dashboard action. Displayed in the target dashboard of a Go To Dashboard action, this button takes the user back to the original dashboard.",
1411
+ since: "9.3"
297
1412
  },
298
1413
  qCreateDash: {
299
- label: "Create dashboard"
1414
+ label: "Create dashboard",
1415
+ description: "The create button for the asset list",
1416
+ since: "9.0"
300
1417
  },
301
1418
  qSwitchView: {
302
- label: "Card/table switch"
1419
+ label: "Card/table switch",
1420
+ description: "The switch button on the asset list",
1421
+ since: "9.0"
303
1422
  },
304
1423
  qFilterBy: {
305
- label: "Filter by"
1424
+ label: "Filter by",
1425
+ description: "The filter by control",
1426
+ since: "9.0"
306
1427
  },
307
1428
  qSortBy: {
308
- label: "Sort by"
1429
+ label: "Sort by",
1430
+ description: "The sort by control",
1431
+ since: "9.0",
1432
+ notes: "Only available for the card mode on the assetList"
309
1433
  },
310
1434
  qSearch: {
311
- label: "Search"
1435
+ label: "Search",
1436
+ description: "The search input box",
1437
+ since: "9.0"
312
1438
  },
313
1439
  qSelectColumn: {
314
- label: "Column selection"
1440
+ label: "Column selection",
1441
+ description: "The select columns dropdown",
1442
+ since: "9.0",
1443
+ notes: "Only available for the table mode on the assetList"
315
1444
  },
316
1445
  qStatus: {
317
- label: "Status"
1446
+ label: "Status",
1447
+ description: "Refers to the text element that displays the current publication status of the dashboard.",
1448
+ since: "9.2.PR.3",
1449
+ notes: "Appears as \u201CStatus\u201D (e.g., Published, Modified, Draft)."
1450
+ },
1451
+ "assetList.asset.table.qStatus": {
1452
+ label: "Status",
1453
+ description: "Refers to the column that indicates the current publication status of the dashboard.",
1454
+ since: "9.2.PR.3",
1455
+ notes: "Appears as \u201CStatus\u201D"
1456
+ },
1457
+ "controlBarRight.qStatus": {
1458
+ label: "Status",
1459
+ description: "The status label for the dashboard",
1460
+ since: "9.0"
318
1461
  },
319
1462
  qPreview: {
320
- label: "Preview"
1463
+ label: "Preview",
1464
+ description: "Allows the preview mode visualization",
1465
+ since: "9.0"
321
1466
  },
322
1467
  qPublish: {
323
- label: "Publish"
1468
+ label: "Publish",
1469
+ description: "The button for publishing a new version of the dashboard",
1470
+ since: "9.0"
324
1471
  },
325
1472
  qUnpublish: {
326
- label: "Unpublish"
1473
+ label: "Unpublish",
1474
+ description: "The button for unpublishing a dashboard",
1475
+ since: "9.2"
327
1476
  },
328
1477
  qDesign: {
329
- label: "Design"
1478
+ label: "Design",
1479
+ description: "The design button inside the edit bar",
1480
+ since: "9.0"
330
1481
  },
331
1482
  qEditDash: {
332
- label: "Edit dashboard"
1483
+ label: "Edit dashboard",
1484
+ description: "The edit option inside the menu for the list",
1485
+ since: "9.0"
333
1486
  },
334
1487
  qUseDash: {
335
- label: "Use dashboard"
1488
+ label: "Use dashboard",
1489
+ description: "The use option inside the menu for the list",
1490
+ since: "9.2"
336
1491
  },
337
1492
  qRenameDash: {
338
- label: "Rename dashboard"
1493
+ label: "Rename dashboard",
1494
+ description: "The rename option inside the menu for the list",
1495
+ since: "9.0"
339
1496
  },
340
1497
  qDeleteDash: {
341
- label: "Delete dashboard"
1498
+ label: "Delete dashboard",
1499
+ description: "The delete option inside the menu for the list",
1500
+ since: "9.0"
342
1501
  },
343
1502
  qManageTags: {
344
- label: "Manage tags"
1503
+ label: "Manage tags",
1504
+ description: `"Manage Tags" in the list's three-dot menu`
1505
+ },
1506
+ "header.qOptionsMenu.qManageTags": {
1507
+ label: "Manage tags",
1508
+ description: 'Only "Manage Tags" inside that menu'
1509
+ },
1510
+ "menuBar.file.qManageTags": {
1511
+ label: "Manage tags",
1512
+ description: '"Manage Tags" in the File menu'
345
1513
  },
346
1514
  qTags: {
347
- label: "Tags"
1515
+ label: "Tags",
1516
+ description: "The tag row on the card"
1517
+ },
1518
+ "assetList.asset.table.qTags": {
1519
+ label: "Tags",
1520
+ description: "The Tags column and its entry in the column picker"
1521
+ },
1522
+ "header.qTags": {
1523
+ label: "Tags",
1524
+ description: "Tags in the builder header. Hiding it also cancels the request to load the tags"
348
1525
  },
349
1526
  qFilterByTags: {
350
- label: "Filter by tags"
1527
+ label: "Filter by tags",
1528
+ description: "The toolbar's tag filter. Independent of showing tags"
351
1529
  },
352
1530
  qDuplDash: {
353
- label: "Duplicate dashboard"
1531
+ label: "Duplicate dashboard",
1532
+ description: "The duplicate option inside the menu for the list",
1533
+ since: "9.0"
354
1534
  },
355
1535
  qDuplDashAndCharts: {
356
- label: "Duplicate dashboard and charts"
1536
+ label: "Duplicate dashboard and charts",
1537
+ description: "The duplicate option inside the menu for the list",
1538
+ since: "9.2.PR.4",
1539
+ notes: "Deprecated in version 9.5"
357
1540
  },
358
1541
  qManageSharing: {
359
1542
  label: "Manage sharing"
360
1543
  },
361
1544
  qFavorite: {
362
- label: "Favorite"
1545
+ label: "Favorite",
1546
+ description: "Refers to the icon used to mark or unmark a dashboard as favorite.",
1547
+ since: "9.2.PR.3",
1548
+ notes: "Shown as a star icon at the top of the card."
1549
+ },
1550
+ "assetList.asset.table.qFavorite": {
1551
+ label: "Favorite",
1552
+ description: "Refers to the column that displays the favorite (star) icon of each dashboard.",
1553
+ since: "9.2.PR.3",
1554
+ notes: "Not included in the dropdown but can still be configured in the table."
363
1555
  },
364
1556
  qCreatedDate: {
365
- label: "Created date"
1557
+ label: "Created date",
1558
+ description: "Refers to the text element that shows the creation date of the dashboard.",
1559
+ since: "9.2.PR.3",
1560
+ notes: "Appears as \u201CCreated\u201D in the card details."
1561
+ },
1562
+ "assetList.asset.table.qCreatedDate": {
1563
+ label: "Created date",
1564
+ description: "Refers to the column that shows the creation date of the dashboard.",
1565
+ since: "9.2.PR.3",
1566
+ notes: "Appears as \u201CCreated\u201D in the table."
366
1567
  },
367
1568
  qLastModifDate: {
368
- label: "Last modified date"
1569
+ label: "Last modified date",
1570
+ description: "Refers to the text element that shows the last modification date of the dashboard.",
1571
+ since: "9.2.PR.3",
1572
+ notes: "Appears as \u201CLast Modified\u201D in the card details."
1573
+ },
1574
+ "assetList.asset.table.qLastModifDate": {
1575
+ label: "Last modified date",
1576
+ description: "Refers to the column that shows the last modification date of the dashboard.",
1577
+ since: "9.2.PR.3",
1578
+ notes: "Appears as \u201CLast Modified\u201D in the table."
369
1579
  },
370
1580
  qNumberOfCharts: {
371
- label: "Number of charts"
1581
+ label: "Number of charts",
1582
+ description: "Refers to the text element that shows how many charts the dashboard contains.",
1583
+ since: "9.2.PR.3",
1584
+ notes: "Appears as \u201CNumber of Charts\u201D"
1585
+ },
1586
+ "assetList.asset.table.qNumberOfCharts": {
1587
+ label: "Number of charts",
1588
+ description: "Refers to the column that displays the number of charts contained in the dashboard.",
1589
+ since: "9.2.PR.3",
1590
+ notes: "Appears as \u201CNumber of Charts\u201D"
372
1591
  },
373
1592
  qSharing: {
374
- label: "Sharing"
1593
+ label: "Sharing",
1594
+ description: "Refers to the text element that shows the dashboard\u2019s privacy or sharing configuration.",
1595
+ since: "9.2.PR.3",
1596
+ notes: "Appears as \u201CPrivacy\u201D"
1597
+ },
1598
+ "assetList.asset.table.qSharing": {
1599
+ label: "Sharing",
1600
+ description: "Refers to the column that displays the privacy or sharing configuration of the dashboard.",
1601
+ since: "9.2.PR.3",
1602
+ notes: "Appears as \u201CPrivacy\u201D"
375
1603
  },
376
1604
  qSharingIcon: {
377
1605
  label: "Sharing icon"
378
1606
  },
379
1607
  qOwner: {
380
- label: "Owner"
1608
+ label: "Owner",
1609
+ description: "Refers to the text element that displays the owner\u2019s email or name.",
1610
+ since: "9.2.PR.3",
1611
+ notes: "Appears as \u201COwner\u201D"
1612
+ },
1613
+ "assetList.asset.table.qOwner": {
1614
+ label: "Owner",
1615
+ description: "Refers to the column that displays the dashboard owner information (name or email).",
1616
+ since: "9.2.PR.3",
1617
+ notes: "Appears as \u201COwner\u201D"
381
1618
  },
382
1619
  qDescription: {
383
- label: "Description"
1620
+ label: "Description",
1621
+ description: "Refers to the text element that displays the dashboard description.",
1622
+ since: "9.2.PR.3",
1623
+ notes: "Appears as \u201CDescription\u201D or \u201CNo description\u201D"
1624
+ },
1625
+ "assetList.asset.table.qDescription": {
1626
+ label: "Description",
1627
+ description: "Refers to the column that displays the dashboard description text.",
1628
+ since: "9.2.PR.3",
1629
+ notes: "Appears as \u201CDescription\u201D"
384
1630
  },
385
1631
  // Header
386
1632
  qDashFavorite: {
387
- label: "Favorite"
1633
+ label: "Favorite",
1634
+ description: "The dashboard favorite option",
1635
+ since: "9.0"
388
1636
  },
389
1637
  qDashName: {
390
- label: "Dashboard name"
1638
+ label: "Dashboard name",
1639
+ description: "The dashboard name",
1640
+ since: "9.0"
391
1641
  },
392
1642
  qDashDesc: {
393
- label: "Dashboard description"
1643
+ label: "Dashboard description",
1644
+ description: "The dashboard description",
1645
+ since: "9.0"
394
1646
  },
395
1647
  // Menu bar
396
1648
  qMnuCreateDash: {
397
- label: "New dashboard"
1649
+ label: "New dashboard",
1650
+ description: "The new dashboard option inside the file menu",
1651
+ since: "9.0",
1652
+ notes: "Only available if the _in_composer property is true"
398
1653
  },
399
1654
  qMnuOpenDash: {
400
- label: "Open dashboard"
1655
+ label: "Open dashboard",
1656
+ description: "The open dashboard option inside the file menu",
1657
+ since: "9.0",
1658
+ notes: "Only available if the _in_composer property is true"
401
1659
  },
402
1660
  qMnuDuplicateDash: {
403
- label: "Duplicate dashboard"
1661
+ label: "Duplicate dashboard",
1662
+ description: "The duplicate dashboard option inside the file menu",
1663
+ since: "9.0",
1664
+ notes: "Only available if the _in_composer property is true"
404
1665
  },
405
1666
  qMnuDuplicateDashAndCharts: {
406
- label: "Duplicate dashboard and charts"
1667
+ label: "Duplicate dashboard and charts",
1668
+ description: "The duplicate dashboard and charts option inside the file menu",
1669
+ since: "9.2.PR.4",
1670
+ notes: "Only available if the _in_composer property is true, Deprecated in version 9.5"
407
1671
  },
408
1672
  qMnuCanvasSize: {
409
- label: "Canvas size"
1673
+ label: "Canvas size",
1674
+ description: "The canvas size option inside the file menu",
1675
+ since: "9.0",
1676
+ notes: "Only available if the canvas mode is Fixed"
410
1677
  },
411
1678
  qMnuThemes: {
412
- label: "Themes"
1679
+ label: "Themes",
1680
+ description: "The themes option inside the file menu",
1681
+ since: "9.0"
413
1682
  },
414
1683
  qMnuDeleteDash: {
415
- label: "Delete dashboard"
1684
+ label: "Delete dashboard",
1685
+ description: "The delete dashboard option inside the file menu",
1686
+ since: "9.0",
1687
+ notes: "Only available if the _in_composer property is true"
416
1688
  },
417
1689
  qMnuDownloadDash: {
418
- label: "Download"
1690
+ label: "Download",
1691
+ description: "Download options for the dashboard",
1692
+ since: "9.0"
419
1693
  },
420
1694
  qCreateDataset: {
421
- label: "Custom dataset"
1695
+ label: "Custom dataset",
1696
+ description: "The custom dataset options inside file menu",
1697
+ since: "9.0"
1698
+ },
1699
+ "toolBar.qCreateDataset": {
1700
+ label: "Custom dataset",
1701
+ description: "Custom Dataset options",
1702
+ since: "9.0"
422
1703
  },
423
1704
  qCreateCustomDataset: {
424
- label: "Create custom dataset"
1705
+ label: "Create custom dataset",
1706
+ description: "The create custom dataset option inside the file menu",
1707
+ since: "9.2"
1708
+ },
1709
+ "toolBar.qCreateDataset.qCreateCustomDataset": {
1710
+ label: "Create custom dataset",
1711
+ description: "The option to create a new custom dataset",
1712
+ since: "9.2"
425
1713
  },
426
1714
  qViewCustomDataset: {
427
- label: "View custom dataset"
1715
+ label: "View custom dataset",
1716
+ description: "The view custom datasets option inside the file menu",
1717
+ since: "9.2"
1718
+ },
1719
+ "toolBar.qCreateDataset.qViewCustomDataset": {
1720
+ label: "View custom dataset",
1721
+ description: "The option for view custom datasets",
1722
+ since: "9.2"
428
1723
  },
429
1724
  qUndoRedo: {
430
- label: "Undo / redo"
1725
+ label: "Undo / redo",
1726
+ description: "The undo/redo options",
1727
+ since: "9.0"
431
1728
  },
432
1729
  qCopyElement: {
433
- label: "Copy"
1730
+ label: "Copy",
1731
+ description: "The copy option inside the edit menu",
1732
+ since: "9.0",
1733
+ notes: "The option is available using the CTRL + C shortcut"
434
1734
  },
435
1735
  qPasteElement: {
436
- label: "Paste"
1736
+ label: "Paste",
1737
+ description: "The paste option inside the edit menu",
1738
+ since: "9.0",
1739
+ notes: "The option is available using the CTRL + V shortcut"
437
1740
  },
438
1741
  qCutElement: {
439
- label: "Cut"
1742
+ label: "Cut",
1743
+ description: "The cut option inside the edit menu",
1744
+ since: "9.0",
1745
+ notes: "The option is available using the CTRL + X shortcut"
440
1746
  },
441
1747
  qRemoveElement: {
442
- label: "Remove"
1748
+ label: "Remove",
1749
+ description: "The remove option inside the edit menu",
1750
+ since: "9.0",
1751
+ notes: "The option is available using the Backspace/Supr shortcut"
443
1752
  },
444
1753
  qDuplElement: {
445
- label: "Duplicate"
1754
+ label: "Duplicate",
1755
+ description: "The duplicate option inside the edit menu",
1756
+ since: "9.0",
1757
+ notes: "The option is available using the CTRL + D shortcut"
446
1758
  },
447
1759
  qSelectAllElem: {
448
- label: "Select all"
1760
+ label: "Select all",
1761
+ description: "The select all option inside the edit menu",
1762
+ since: "9.0",
1763
+ notes: "The option is available using the CTRL + Shift + K shortcut"
449
1764
  },
450
1765
  qSelectAllContElem: {
451
1766
  label: "Select all in container"
452
1767
  },
453
1768
  qMnuInsertChart: {
454
- label: "Chart"
1769
+ label: "Chart",
1770
+ description: "The insert chart group inside the insert menu",
1771
+ since: "9.0"
455
1772
  },
456
1773
  qMnuExistingChart: {
457
- label: "Existing chart"
1774
+ label: "Existing chart",
1775
+ description: "The option for inserting existing chart from the gallery for the insert menu",
1776
+ since: "9.0"
458
1777
  },
459
1778
  qMnuNewChart: {
460
- label: "New chart"
1779
+ label: "New chart",
1780
+ description: "The option for inserting a new chart from the chart builder for the insert menu",
1781
+ since: "9.0"
461
1782
  },
462
1783
  qMnuNewChartAI: {
463
- label: "New chart with AI"
1784
+ label: "New chart with AI",
1785
+ description: "The option for inserting a new chart from the AI modal",
1786
+ since: "9.1"
464
1787
  },
465
1788
  qMnuInsertFilterCtrl: {
466
- label: "Filter control"
1789
+ label: "Filter control",
1790
+ description: "The insert filter control elements group inside the insert menu",
1791
+ since: "9.0"
467
1792
  },
468
1793
  qMnuDatePicker: {
469
- label: "Date picker"
1794
+ label: "Date picker",
1795
+ description: "The option for inserting a new date picker",
1796
+ since: "9.0"
470
1797
  },
471
1798
  qMnuInputBox: {
472
- label: "Input box"
1799
+ label: "Input box",
1800
+ description: "The option for inserting a new input box",
1801
+ since: "9.0"
473
1802
  },
474
1803
  qMnuMultiSelectList: {
475
- label: "Multi-select list"
1804
+ label: "Multi-select list",
1805
+ description: "The option for inserting a new value list - Multiple selection",
1806
+ since: "9.0"
476
1807
  },
477
1808
  qMnuSingleSelectList: {
478
- label: "Single-select list"
1809
+ label: "Single-select list",
1810
+ description: "The option for inserting a new value list - Single selection",
1811
+ since: "9.4"
479
1812
  },
480
1813
  qMnuInsertShape: {
481
- label: "Shape"
1814
+ label: "Shape",
1815
+ description: "The insert shapes option inside the insert menu"
482
1816
  },
483
1817
  qMnuLine: {
484
- label: "Line"
1818
+ label: "Line",
1819
+ description: "The option for inserting a new line"
485
1820
  },
486
1821
  qMnuRectangle: {
487
- label: "Rectangle"
1822
+ label: "Rectangle",
1823
+ description: "The option for inserting a new rectangle"
488
1824
  },
489
1825
  qMnuEllipse: {
490
- label: "Ellipse"
1826
+ label: "Ellipse",
1827
+ description: "The option for inserting a new ellipse"
491
1828
  },
492
1829
  qMnuInsertText: {
493
- label: "Text"
1830
+ label: "Text",
1831
+ description: "The option for inserting a text element",
1832
+ since: "9.0"
494
1833
  },
495
1834
  qMnuInsertImage: {
496
- label: "Image"
1835
+ label: "Image",
1836
+ description: "The option for inserting an image element",
1837
+ since: "9.0"
497
1838
  },
498
1839
  qMnuInsertButton: {
499
- label: "Button"
1840
+ label: "Button",
1841
+ description: "The option for inserting a button element",
1842
+ since: "9.0"
500
1843
  },
501
1844
  qMnuInsertContainer: {
502
- label: "Container"
1845
+ label: "Container",
1846
+ description: "The option for inserting a container element",
1847
+ since: "9.1"
503
1848
  },
504
1849
  qMnuInsertHeader: {
505
- label: "Header"
1850
+ label: "Header",
1851
+ description: "The option for inserting a header container",
1852
+ since: "9.0"
506
1853
  },
507
1854
  qMnuInsertTabs: {
508
- label: "Tabs"
1855
+ label: "Tabs",
1856
+ description: "The option for adding tabs to the dashboard",
1857
+ since: "9.0"
509
1858
  },
510
1859
  qMnuArrange: {
511
- label: "Arrange"
1860
+ label: "Arrange",
1861
+ description: "The arrange menu",
1862
+ since: "9.0"
512
1863
  },
513
1864
  qMnuBringToFront: {
514
- label: "Bring to front"
1865
+ label: "Bring to front",
1866
+ description: "The option for sending an element to the front from the arrange menu",
1867
+ since: "9.0"
515
1868
  },
516
1869
  qMnuSendToBack: {
517
- label: "Send to back"
1870
+ label: "Send to back",
1871
+ description: "The option for sending an element to the back from the arrange menu",
1872
+ since: "9.0"
518
1873
  },
519
1874
  qMnuAlign: {
520
- label: "Align"
1875
+ label: "Align",
1876
+ description: "The align group inside the arrange menu",
1877
+ since: "9.0"
521
1878
  },
522
1879
  qMnuDisplayGrid: {
523
- label: "Display grid"
1880
+ label: "Display grid",
1881
+ description: "The hide/display grid option inside the grid menu",
1882
+ since: "9.0"
524
1883
  },
525
1884
  qMnuSnapToGrid: {
526
- label: "Snap to grid"
1885
+ label: "Snap to grid",
1886
+ description: "The snap to grid option inside the grid menu",
1887
+ since: "9.0"
527
1888
  },
528
1889
  qMnuSwitchGrid: {
529
- label: "Switch grid"
1890
+ label: "Switch grid",
1891
+ description: "The switch grid type option inside the grid menu",
1892
+ since: "9.0"
530
1893
  },
531
1894
  // Toolbar
532
1895
  qCanvasSize: {
533
- label: "Canvas size"
1896
+ label: "Canvas size",
1897
+ description: "The canvas size option inside the toolbar",
1898
+ since: "9.0"
534
1899
  },
535
1900
  qInsertChart: {
536
- label: "Insert chart"
1901
+ label: "Insert chart",
1902
+ description: "The insert chart group inside the toolbar",
1903
+ since: "9.0"
537
1904
  },
538
1905
  qExistingChart: {
539
- label: "Existing chart"
1906
+ label: "Existing chart",
1907
+ description: "The option for inserting existing chart from the gallery for the toolbar",
1908
+ since: "9.0"
540
1909
  },
541
1910
  qNewChart: {
542
- label: "New chart"
1911
+ label: "New chart",
1912
+ description: "The option for inserting a new chart from the chart builder for the toolbar",
1913
+ since: "9.0"
543
1914
  },
544
1915
  qNewChartAI: {
545
- label: "New chart with AI"
1916
+ label: "New chart with AI",
1917
+ description: "The option for inserting a new chart from the AI modal",
1918
+ since: "9.1"
546
1919
  },
547
1920
  qInsertFilterCtrl: {
548
- label: "Insert filter control"
1921
+ label: "Insert filter control",
1922
+ description: "The insert filter control elements group inside the toolbar",
1923
+ since: "9.0"
549
1924
  },
550
1925
  qDatePicker: {
551
- label: "Date picker"
1926
+ label: "Date picker",
1927
+ description: "The option for inserting a new date picker",
1928
+ since: "9.0"
552
1929
  },
553
1930
  qInputBox: {
554
- label: "Input box"
1931
+ label: "Input box",
1932
+ description: "The option for inserting a new input box",
1933
+ since: "9.0"
555
1934
  },
556
1935
  qMultiSelectList: {
557
- label: "Multi-select list"
1936
+ label: "Multi-select list",
1937
+ description: "The option for inserting a new value list - Multiple selection",
1938
+ since: "9.0"
558
1939
  },
559
1940
  qSingleSelectList: {
560
- label: "Single-select list"
1941
+ label: "Single-select list",
1942
+ description: "The option for inserting a new value list - Single selection",
1943
+ since: "9.4"
561
1944
  },
562
1945
  qInsertShape: {
563
1946
  label: "Insert shape"
564
1947
  },
565
1948
  qLine: {
566
- label: "Line"
1949
+ label: "Line",
1950
+ description: "The option for inserting a new line"
567
1951
  },
568
1952
  qRectangle: {
569
- label: "Rectangle"
1953
+ label: "Rectangle",
1954
+ description: "The option for inserting a new rectangle"
570
1955
  },
571
1956
  qEllipse: {
572
- label: "Ellipse"
1957
+ label: "Ellipse",
1958
+ description: "The option for inserting a new ellipse"
573
1959
  },
574
1960
  qSnapToGrid: {
575
- label: "Snap to grid"
1961
+ label: "Snap to grid",
1962
+ description: "The snap to grid option inside the toolbar",
1963
+ since: "9.0"
576
1964
  },
577
1965
  qDisplayGrid: {
578
- label: "Display grid"
1966
+ label: "Display grid",
1967
+ description: "The hide/display grid option inside the toolbar",
1968
+ since: "9.0"
579
1969
  },
580
1970
  qSwitchGrid: {
581
- label: "Switch grid"
1971
+ label: "Switch grid",
1972
+ description: "The switch grid type option inside the toolbar",
1973
+ since: "9.0"
582
1974
  },
583
1975
  qDownloadDash: {
584
- label: "Download"
1976
+ label: "Download",
1977
+ description: "Download options for the dashboard",
1978
+ since: "9.0"
585
1979
  },
586
1980
  qDashPDF: {
587
- label: "PDF"
1981
+ label: "PDF",
1982
+ description: "PDF download option",
1983
+ since: "9.0"
588
1984
  },
589
1985
  qDashCSV: {
590
- label: "CSV"
1986
+ label: "CSV",
1987
+ description: "CSV download option",
1988
+ since: "9.0"
591
1989
  },
592
1990
  qDashExcel: {
593
- label: "Excel"
1991
+ label: "Excel",
1992
+ description: "Excel download option",
1993
+ since: "9.0"
594
1994
  },
595
1995
  qDashDataset: {
596
- label: "Dataset"
1996
+ label: "Dataset",
1997
+ description: "Dataset download option",
1998
+ since: "9.2"
597
1999
  },
598
2000
  qArrange: {
599
- label: "Arrange"
2001
+ label: "Arrange",
2002
+ description: "The arrange group inside the toolbar",
2003
+ since: "9.0"
600
2004
  },
601
2005
  qBringToFront: {
602
- label: "Bring to front"
2006
+ label: "Bring to front",
2007
+ description: "The option for sending an element to the front from the toolbar",
2008
+ since: "9.0"
603
2009
  },
604
2010
  qSendToBack: {
605
- label: "Send to back"
2011
+ label: "Send to back",
2012
+ description: "The option for sending an element to the back from the toolbar",
2013
+ since: "9.0"
606
2014
  },
607
2015
  qResponsiveView: {
608
- label: "Responsive view"
2016
+ label: "Responsive view",
2017
+ description: "The responsive view group in the toolbar",
2018
+ since: "9.0"
609
2019
  },
610
2020
  qDesktop: {
611
- label: "Desktop"
2021
+ label: "Desktop",
2022
+ description: "The desktop view for the dashboard",
2023
+ since: "9.0"
612
2024
  },
613
2025
  qTablet: {
614
- label: "Tablet"
2026
+ label: "Tablet",
2027
+ description: "The tablet view for the dashboard",
2028
+ since: "9.0"
615
2029
  },
616
2030
  qMobile: {
617
- label: "Mobile"
2031
+ label: "Mobile",
2032
+ description: "The mobile view for the dashboard",
2033
+ since: "9.0"
618
2034
  },
619
2035
  qBreakpoints: {
620
- label: "Breakpoints"
2036
+ label: "Breakpoints",
2037
+ description: "The option to open the modal for modifying the breakpoints",
2038
+ since: "9.0",
2039
+ notes: "Only available in responsive canvas"
621
2040
  },
622
2041
  qAlign: {
623
- label: "Align"
2042
+ label: "Align",
2043
+ description: "The align group inside the toolbar",
2044
+ since: "9.0"
624
2045
  },
625
2046
  qAlignRight: {
626
- label: "Align right"
2047
+ label: "Align right",
2048
+ description: "The option for aligning to the right",
2049
+ since: "9.0"
627
2050
  },
628
2051
  qAlignLeft: {
629
- label: "Align left"
2052
+ label: "Align left",
2053
+ description: "The option for aligning to the left",
2054
+ since: "9.0"
630
2055
  },
631
2056
  qAlignCenter: {
632
- label: "Align center"
2057
+ label: "Align center",
2058
+ description: "The option for aligning to the center",
2059
+ since: "9.0"
633
2060
  },
634
2061
  qAlignTop: {
635
- label: "Align top"
2062
+ label: "Align top",
2063
+ description: "The option for aligning to the top",
2064
+ since: "9.0"
636
2065
  },
637
2066
  qAlignMiddle: {
638
- label: "Align middle"
2067
+ label: "Align middle",
2068
+ description: "The option for aligning to the middle",
2069
+ since: "9.0"
639
2070
  },
640
2071
  qAlignBottom: {
641
- label: "Align bottom"
2072
+ label: "Align bottom",
2073
+ description: "The option for aligning to the bottom",
2074
+ since: "9.0"
642
2075
  },
643
2076
  qInsertText: {
644
- label: "Insert text"
2077
+ label: "Insert text",
2078
+ description: "The option for inserting a text element",
2079
+ since: "9.0"
645
2080
  },
646
2081
  qInsertImage: {
647
- label: "Insert image"
2082
+ label: "Insert image",
2083
+ description: "The option for inserting an image element",
2084
+ since: "9.0"
648
2085
  },
649
2086
  qInsertButton: {
650
- label: "Insert button"
2087
+ label: "Insert button",
2088
+ description: "The option for inserting a button element",
2089
+ since: "9.0"
651
2090
  },
652
2091
  qInsertContainer: {
653
- label: "Insert container"
2092
+ label: "Insert container",
2093
+ description: "The option for inserting a container element",
2094
+ since: "9.1"
654
2095
  },
655
2096
  qRespGridMargins: {
656
- label: "Responsive grid margins"
2097
+ label: "Responsive grid margins",
2098
+ description: "The configuration for margins",
2099
+ since: "9.0",
2100
+ notes: "Only available in responsive canvas"
657
2101
  },
658
2102
  qRespGridColumns: {
659
- label: "Responsive grid columns"
2103
+ label: "Responsive grid columns",
2104
+ description: "The configuration for number of columns",
2105
+ since: "9.0",
2106
+ notes: "Only available in responsive canvas"
660
2107
  },
661
2108
  qThemes: {
662
- label: "Themes"
2109
+ label: "Themes",
2110
+ description: "The themes option inside the toolbar",
2111
+ since: "9.0"
663
2112
  },
664
2113
  qDashVersion: {
665
- label: "Dashboard version"
2114
+ label: "Dashboard version",
2115
+ description: "The dashboard version indicator",
2116
+ since: "9.0"
666
2117
  },
667
2118
  qGetDashVersion: {
668
- label: "Change version"
2119
+ label: "Change version",
2120
+ description: "The button for switching between dashboard versions",
2121
+ since: "9.0"
669
2122
  },
670
2123
  qSourceDashBanner: {
671
- label: "Personalization banner"
2124
+ label: "Personalization banner",
2125
+ description: "Control the EUP Source Dashboard banner visibility",
2126
+ since: "9.3"
672
2127
  },
673
2128
  qHiddenItems: {
674
- label: "Hidden items"
2129
+ label: "Hidden items",
2130
+ description: "The button for the hidden elements",
2131
+ since: "9.0"
675
2132
  },
676
2133
  qDiscard: {
677
- label: "Discard changes"
2134
+ label: "Discard changes",
2135
+ description: "The button for discarding changes",
2136
+ since: "9.0"
2137
+ },
2138
+ "toolBar.qDiscard": {
2139
+ label: "Discard changes",
2140
+ description: "The discard button",
2141
+ since: "9.0"
678
2142
  },
679
2143
  qSave: {
680
- label: "Save changes"
2144
+ label: "Save changes",
2145
+ description: "The save button",
2146
+ since: "9.0"
681
2147
  },
682
2148
  qSwitchMode: {
683
- label: "Interact / design switch"
2149
+ label: "Interact / design switch",
2150
+ description: "The button for switching between dashboard mode (interact or design)",
2151
+ since: "9.2"
684
2152
  },
685
2153
  qHideToolBar: {
686
- label: "Hide toolbar"
2154
+ label: "Hide toolbar",
2155
+ description: "The hide toolbar button",
2156
+ since: "9.0"
687
2157
  },
688
2158
  qDownloadList: {
689
- label: "Download list"
2159
+ label: "Download list",
2160
+ description: "List of export statuses",
2161
+ since: "9.3"
690
2162
  },
691
2163
  qChangeLayout: {
692
- label: "Change layout"
2164
+ label: "Change layout",
2165
+ description: "Controls only if the Change Layout button or option is displayed in the UI",
2166
+ since: "9.3"
693
2167
  },
694
2168
  // Filter panel
695
2169
  qAddFilter: {
696
- label: "Add filter"
2170
+ label: "Add filter",
2171
+ description: "The adding button for the filter panel",
2172
+ since: "9.0"
697
2173
  },
698
2174
  qEnabDisabAllFilters: {
699
- label: "Enable / disable all filters"
2175
+ label: "Enable / disable all filters",
2176
+ description: "The option for enable/disable all the filters",
2177
+ since: "9.0"
700
2178
  },
701
2179
  qDeleteAllFilters: {
702
- label: "Delete all filters"
2180
+ label: "Delete all filters",
2181
+ description: "The option for removing all the filters",
2182
+ since: "9.0"
703
2183
  },
704
2184
  qFilterSettings: {
705
- label: "Filter settings"
2185
+ label: "Filter settings",
2186
+ description: "The settings buttons in the filter panel",
2187
+ since: "9.0"
706
2188
  },
707
2189
  qEditFilter: {
708
- label: "Edit filter"
2190
+ label: "Edit filter",
2191
+ description: "The edit button in the dashboard scope",
2192
+ since: "9.0"
2193
+ },
2194
+ "filterPanel.tabFilterScope.qEditFilter": {
2195
+ label: "Edit filter",
2196
+ description: "The edit button in the tab scope",
2197
+ since: "9.0"
2198
+ },
2199
+ "filterPanel.containerFilterScope.qEditFilter": {
2200
+ label: "Edit filter",
2201
+ description: "The edit button in the container scope",
2202
+ since: "9.4"
2203
+ },
2204
+ "filterPanel.panelFilterScope.qEditFilter": {
2205
+ label: "Edit filter",
2206
+ description: "The edit button in the chart panel scope",
2207
+ since: "9.0"
709
2208
  },
710
2209
  qEnabDisabFilter: {
711
- label: "Enable / disable filter"
2210
+ label: "Enable / disable filter",
2211
+ description: "The enable/disable button in the dashboard scope",
2212
+ since: "9.0"
2213
+ },
2214
+ "filterPanel.tabFilterScope.qEnabDisabFilter": {
2215
+ label: "Enable / disable filter",
2216
+ description: "The enable/disable button in the tab scope",
2217
+ since: "9.0"
2218
+ },
2219
+ "filterPanel.containerFilterScope.qEnabDisabFilter": {
2220
+ label: "Enable / disable filter",
2221
+ description: "The enable/disable button in the container scope",
2222
+ since: "9.4"
2223
+ },
2224
+ "filterPanel.panelFilterScope.qEnabDisabFilter": {
2225
+ label: "Enable / disable filter",
2226
+ description: "The enable/disable button in the chart panel scope",
2227
+ since: "9.0"
712
2228
  },
713
2229
  qDeleteFilter: {
714
- label: "Delete filter"
2230
+ label: "Delete filter",
2231
+ description: "The remove option in the dashboard scope",
2232
+ since: "9.0"
2233
+ },
2234
+ "filterPanel.tabFilterScope.qDeleteFilter": {
2235
+ label: "Delete filter",
2236
+ description: "The remove option in the tab scope",
2237
+ since: "9.0"
2238
+ },
2239
+ "filterPanel.containerFilterScope.qDeleteFilter": {
2240
+ label: "Delete filter",
2241
+ description: "The remove option in the container scope",
2242
+ since: "9.4"
2243
+ },
2244
+ "filterPanel.panelFilterScope.qDeleteFilter": {
2245
+ label: "Delete filter",
2246
+ description: "The remove option in the chart panel scope",
2247
+ since: "9.0"
715
2248
  },
716
2249
  // Download modal
717
2250
  qScheduleOption: {
718
- label: "Schedule"
2251
+ label: "Schedule",
2252
+ description: "The schedule button inside the download modal",
2253
+ since: "9.0"
719
2254
  },
720
2255
  qSubscribeOption: {
721
- label: "Subscribe"
2256
+ label: "Subscribe",
2257
+ description: "The Subscribe tab within the Download modal",
2258
+ since: "9.0"
722
2259
  },
723
2260
  qSubscribeExternalUsers: {
724
- label: "Subscribe external users"
2261
+ label: "Subscribe external users",
2262
+ description: "The option to add external users using the Enter key within the Subscribe tab",
2263
+ since: "9.0"
725
2264
  },
726
2265
  qSubscribeBanner: {
727
- label: "Subscription banner"
2266
+ label: "Subscription banner",
2267
+ description: 'The banner "All subscribers will receive the exported file with the same data as you." within the Subscribe tab',
2268
+ since: "9.6",
2269
+ notes: "If qSubscribeBanner, qSubscribeOwner, qSubscribeOrganization, qSubscribeMyself and qSubscribeSpecificPeople are all hidden, the Subscribe tab is hidden too. Outside Composer, qSubscribeOrganization already counts as hidden. A keep list that includes downloadModal.qSubscribeOption also keeps these five keys."
728
2270
  },
729
2271
  qOwnerLabel: {
730
- label: "Owner"
2272
+ label: "Owner",
2273
+ description: "The owner label within the Subscribe tab",
2274
+ since: "9.6"
731
2275
  },
732
2276
  qSubscribeOrganization: {
733
- label: "Subscribe organization"
2277
+ label: "Subscribe organization",
2278
+ description: 'The "Subscribe everyone in my organization" checkbox within the Subscribe tab',
2279
+ since: "9.6",
2280
+ notes: "Only available if the _in_composer property is true"
734
2281
  },
735
2282
  qSubscribeMyself: {
736
- label: "Subscribe myself"
2283
+ label: "Subscribe myself",
2284
+ description: 'The "Subscribe myself" checkbox within the Subscribe tab',
2285
+ since: "9.6",
2286
+ notes: "Its initial value is set with defaults.downloadModal.subscribeMyself (see Customization Defaults)"
737
2287
  },
738
2288
  qSubscribeSpecificPeople: {
739
- label: "Subscribe specific people"
2289
+ label: "Subscribe specific people",
2290
+ description: "The Subscribe Specific People field within the Subscribe tab",
2291
+ since: "9.6"
740
2292
  },
741
2293
  qSubscribeOwner: {
742
2294
  label: "Subscribe owner"
@@ -744,27 +2296,56 @@ var DASHBOARD_LABELS = {
744
2296
  qIncludeHeader: {
745
2297
  label: "Include header"
746
2298
  },
2299
+ qAdvancedSettings: {
2300
+ label: "Advanced settings",
2301
+ description: "The Advanced Settings section of the export modal; its options are visible only when the section is",
2302
+ since: "9.6"
2303
+ },
2304
+ qPageSize: {
2305
+ label: "Page size",
2306
+ description: "The Page Size option within Advanced Settings",
2307
+ since: "9.6",
2308
+ notes: "Its initial value is set with defaults.downloadModal.pageSize (see Customization Defaults)"
2309
+ },
2310
+ qOrientation: {
2311
+ label: "Orientation",
2312
+ description: "The Orientation option within Advanced Settings",
2313
+ since: "9.6",
2314
+ notes: "Its initial value is set with defaults.downloadModal.orientation (see Customization Defaults)"
2315
+ },
747
2316
  qIncludeHyperlinks: {
748
2317
  label: "Include hyperlinks"
749
2318
  },
750
2319
  qExportVersion: {
751
- label: "Export version"
2320
+ label: "Export version",
2321
+ description: "The options to export, latest saved version or unsaved version",
2322
+ since: "9.3"
752
2323
  },
753
2324
  qSavedVersionWarning: {
754
- label: "Saved version banner"
2325
+ label: "Saved version banner",
2326
+ description: "The warning banner for the export latest saved version option",
2327
+ since: "9.3"
755
2328
  },
756
2329
  qUnsavedVersionWarning: {
757
- label: "Unsaved version banner"
2330
+ label: "Unsaved version banner",
2331
+ description: "The warning banner for the export unsaved saved version option",
2332
+ since: "9.3"
758
2333
  },
759
2334
  // Duplicate modal
760
2335
  qCharts: {
761
- label: "Charts"
2336
+ label: "Charts",
2337
+ description: 'Controls the "Charts" choice group in the modal (duplicate vs. keep original charts).',
2338
+ since: "9.5"
762
2339
  },
763
2340
  qFilters: {
764
- label: "Filters"
2341
+ label: "Filters",
2342
+ description: `Controls the "Filters" choice group (duplicate vs. don't duplicate filters).`,
2343
+ since: "9.5"
765
2344
  },
766
2345
  qDashActions: {
767
- label: "Dashboard actions"
2346
+ label: "Dashboard actions",
2347
+ description: `Controls the "Actions" choice group (duplicate vs. don't duplicate dashboard actions).`,
2348
+ since: "9.5"
768
2349
  }
769
2350
  };
770
2351
 
@@ -801,7 +2382,7 @@ var WidgetVersion = /* @__PURE__ */ function(WidgetVersion2) {
801
2382
  }({});
802
2383
 
803
2384
  // src/utils/defaults.helpers.ts
804
- var FONT_SIZES = [
2385
+ var FONT_SIZES2 = [
805
2386
  8,
806
2387
  9,
807
2388
  10,
@@ -853,10 +2434,10 @@ var numberMinMaxValue = /* @__PURE__ */ __name((maxValue, minValue) => (value) =
853
2434
  }, "numberMinMaxValue");
854
2435
  var fontSizeMinMaxValue = /* @__PURE__ */ __name((minSize, maxSize) => (value) => {
855
2436
  const inputSize = parseInt(value, 10);
856
- if (FONT_SIZES.includes(inputSize) && inputSize >= minSize && inputSize <= maxSize) {
2437
+ if (FONT_SIZES2.includes(inputSize) && inputSize >= minSize && inputSize <= maxSize) {
857
2438
  return `${inputSize}px`;
858
2439
  }
859
- const validFontSizes = FONT_SIZES.filter((size) => size >= minSize && size <= maxSize);
2440
+ const validFontSizes = FONT_SIZES2.filter((size) => size >= minSize && size <= maxSize);
860
2441
  if (validFontSizes.length === 0) {
861
2442
  return void 0;
862
2443
  }
@@ -890,6 +2471,19 @@ var validateType = /* @__PURE__ */ __name((validValues) => (value) => {
890
2471
  const receivedValue = value.toUpperCase();
891
2472
  return validValues.includes(receivedValue) ? receivedValue : void 0;
892
2473
  }, "validateType");
2474
+ var PAGE_SIZES = [
2475
+ "LEGACY",
2476
+ "LETTER",
2477
+ "A4",
2478
+ "A3",
2479
+ "LEGAL",
2480
+ "TABLOID"
2481
+ ];
2482
+ var PAGE_ORIENTATIONS = [
2483
+ "PORTRAIT",
2484
+ "LANDSCAPE"
2485
+ ];
2486
+ var validateOneOf = /* @__PURE__ */ __name((validValues) => (value) => typeof value === "string" && validValues.includes(value) ? value : void 0, "validateOneOf");
893
2487
  var DX_VALIDATOR_MAP = {
894
2488
  "customStyles.header.height": numberMinMaxValue(300, 10),
895
2489
  "customStyles.text.fontSize": fontSizeMinMaxValue(8, 96),
@@ -921,10 +2515,14 @@ var DX_VALIDATOR_MAP = {
921
2515
  // Unsaved Changes Behavior
922
2516
  unsavedChangesBehavior: validateUnsavedChangesBehavior,
923
2517
  // Download modal
924
- "downloadModal.subscribeMyself": validateBoolean
2518
+ "downloadModal.subscribeMyself": validateBoolean,
2519
+ "downloadModal.pageSize": validateOneOf(PAGE_SIZES),
2520
+ "downloadModal.orientation": validateOneOf(PAGE_ORIENTATIONS)
925
2521
  };
926
2522
  var DOWNLOAD_MODAL_VALIDATOR_MAP = {
927
- subscribeMyself: validateBoolean
2523
+ subscribeMyself: validateBoolean,
2524
+ pageSize: validateOneOf(PAGE_SIZES),
2525
+ orientation: validateOneOf(PAGE_ORIENTATIONS)
928
2526
  };
929
2527
 
930
2528
  // src/structures/download-modal.structure.v1.ts
@@ -941,6 +2539,16 @@ var DOWNLOAD_MODAL_V1_KEYS = [
941
2539
  "qIncludeHyperlinks",
942
2540
  "qIncludeHeader"
943
2541
  ];
2542
+ var DOWNLOAD_MODAL_V1_ADVANCED_SETTINGS = "qAdvancedSettings";
2543
+ var DOWNLOAD_MODAL_V1_ADVANCED_SETTINGS_KEYS = [
2544
+ "qPageSize",
2545
+ "qOrientation"
2546
+ ];
2547
+ var DOWNLOAD_MODAL_V1_SECTIONS = {
2548
+ [DOWNLOAD_MODAL_V1_ADVANCED_SETTINGS]: [
2549
+ ...DOWNLOAD_MODAL_V1_ADVANCED_SETTINGS_KEYS
2550
+ ]
2551
+ };
944
2552
  var DOWNLOAD_MODAL_V1_KEEP_INHERITANCE = {
945
2553
  qSubscribeBanner: "qSubscribeOption",
946
2554
  qOwnerLabel: "qSubscribeOption",
@@ -959,12 +2567,12 @@ var DOWNLOAD_MODAL_V1_DEFAULTS = {
959
2567
  var downloadModalV1Config = {
960
2568
  version: "1.0",
961
2569
  keepInheritance: DOWNLOAD_MODAL_V1_KEEP_INHERITANCE,
962
- baseStructure: __spreadValues({
2570
+ baseStructure: __spreadValues(__spreadValues({
963
2571
  defaults: __spreadValues({}, DOWNLOAD_MODAL_V1_DEFAULTS)
964
2572
  }, Object.fromEntries(DOWNLOAD_MODAL_V1_KEYS.map((key) => [
965
2573
  key,
966
2574
  true
967
- ])))
2575
+ ]))), DOWNLOAD_MODAL_V1_SECTIONS)
968
2576
  };
969
2577
  var download_modal_structure_v1_default = downloadModalV1Config;
970
2578
 
@@ -1294,6 +2902,7 @@ var dashboardV1Config = {
1294
2902
  },
1295
2903
  downloadModal: [
1296
2904
  ...DOWNLOAD_MODAL_V1_KEYS,
2905
+ DOWNLOAD_MODAL_V1_SECTIONS,
1297
2906
  ...DOWNLOAD_MODAL_HOST_KEYS
1298
2907
  ],
1299
2908
  duplicateModal: [
@@ -1412,7 +3021,8 @@ var downloadManagerV1Config = {
1412
3021
  ],
1413
3022
  // The export modal's own keys, so a scope of this section carries all of them.
1414
3023
  downloadModal: [
1415
- ...DOWNLOAD_MODAL_V1_KEYS
3024
+ ...DOWNLOAD_MODAL_V1_KEYS,
3025
+ DOWNLOAD_MODAL_V1_SECTIONS
1416
3026
  ],
1417
3027
  moreInfoModal: [
1418
3028
  "qFileType",
@@ -2076,8 +3686,8 @@ function getViewPrefix(view) {
2076
3686
  return view ? `${view}${STRUCTURE_VIEW_NAME_SEPARATOR}` : "";
2077
3687
  }
2078
3688
  __name(getViewPrefix, "getViewPrefix");
2079
- function getStructureKey(key, viewPrefix) {
2080
- const viewValue = getViewPrefix(viewPrefix);
3689
+ function getStructureKey(key, viewPrefix2) {
3690
+ const viewValue = getViewPrefix(viewPrefix2);
2081
3691
  return `${viewValue}${key}`;
2082
3692
  }
2083
3693
  __name(getStructureKey, "getStructureKey");
@@ -2122,9 +3732,9 @@ function canInsertInCustomization(key, customization, validateKeepOption, keepAl
2122
3732
  };
2123
3733
  }
2124
3734
  __name(canInsertInCustomization, "canInsertInCustomization");
2125
- function evalInsertKey(key, { viewKeys, viewPrefix = "", hasKeepOption, keepAliases }, customization) {
3735
+ function evalInsertKey(key, { viewKeys, viewPrefix: viewPrefix2 = "", hasKeepOption, keepAliases }, customization) {
2126
3736
  var _a;
2127
- const customizationView = (_a = customization == null ? void 0 : customization.views) == null ? void 0 : _a[viewPrefix];
3737
+ const customizationView = (_a = customization == null ? void 0 : customization.views) == null ? void 0 : _a[viewPrefix2];
2128
3738
  const custCanInsert = customization ? canInsertInCustomization(key, customization, hasKeepOption === "root", keepAliases) : {
2129
3739
  canInsert: true,
2130
3740
  conditionAffect: false
@@ -2141,10 +3751,10 @@ function evalInsertKey(key, { viewKeys, viewPrefix = "", hasKeepOption, keepAlia
2141
3751
  };
2142
3752
  }
2143
3753
  __name(evalInsertKey, "evalInsertKey");
2144
- function canInsertKey(key, { viewKeys, viewPrefix = "", hasKeepOption, checkCondition = false, keepAliases }, customization) {
3754
+ function canInsertKey(key, { viewKeys, viewPrefix: viewPrefix2 = "", hasKeepOption, checkCondition = false, keepAliases }, customization) {
2145
3755
  const result = evalInsertKey(key, {
2146
3756
  viewKeys,
2147
- viewPrefix,
3757
+ viewPrefix: viewPrefix2,
2148
3758
  hasKeepOption,
2149
3759
  keepAliases
2150
3760
  }, customization);
@@ -2155,8 +3765,8 @@ function canInsertKey(key, { viewKeys, viewPrefix = "", hasKeepOption, checkCond
2155
3765
  };
2156
3766
  }
2157
3767
  __name(canInsertKey, "canInsertKey");
2158
- function addKeyToPermissions(permissionMap, key, { viewPrefix, checkCondition, conditionMaps }, defaults, childMap, conditionAffect) {
2159
- const keyAttr = getStructureKey(key, viewPrefix);
3768
+ function addKeyToPermissions(permissionMap, key, { viewPrefix: viewPrefix2, checkCondition, conditionMaps }, defaults, childMap, conditionAffect) {
3769
+ const keyAttr = getStructureKey(key, viewPrefix2);
2160
3770
  if (checkCondition && conditionAffect != null) {
2161
3771
  permissionMap[keyAttr] = conditionAffect;
2162
3772
  return;
@@ -2173,10 +3783,10 @@ function addKeyToPermissions(permissionMap, key, { viewPrefix, checkCondition, c
2173
3783
  });
2174
3784
  }
2175
3785
  __name(addKeyToPermissions, "addKeyToPermissions");
2176
- function calculatePermissionMap(config, customization, { viewKeys, pathPrefix = "", viewPrefix = "", hasKeepOption: previousKeepOption, prevDefaults, customDefaults, conditionMaps, checkCondition, keepAliases }) {
3786
+ function calculatePermissionMap(config, customization, { viewKeys, pathPrefix = "", viewPrefix: viewPrefix2 = "", hasKeepOption: previousKeepOption, prevDefaults, customDefaults, conditionMaps, checkCondition, keepAliases }) {
2177
3787
  const permissionMap = {};
2178
3788
  const currentKeepOption = nodeHasKeepOption(config, customization, {
2179
- viewPrefix,
3789
+ viewPrefix: viewPrefix2,
2180
3790
  pathPrefix
2181
3791
  });
2182
3792
  for (const key in config) {
@@ -2189,7 +3799,7 @@ function calculatePermissionMap(config, customization, { viewKeys, pathPrefix =
2189
3799
  const newPrefix = `${currentKey}${STRUCTURE_SECTION_NAME_SEPARATOR}`;
2190
3800
  const canInsertResult = canInsertKey(currentKey, {
2191
3801
  viewKeys,
2192
- viewPrefix,
3802
+ viewPrefix: viewPrefix2,
2193
3803
  hasKeepOption,
2194
3804
  checkCondition,
2195
3805
  keepAliases
@@ -2203,7 +3813,7 @@ function calculatePermissionMap(config, customization, { viewKeys, pathPrefix =
2203
3813
  defaults = calculateDefaults(prevDefaults, {}, customDefaults);
2204
3814
  childMap = calculatePermissionMapArray(configValue, customization, {
2205
3815
  viewKeys,
2206
- viewPrefix,
3816
+ viewPrefix: viewPrefix2,
2207
3817
  pathPrefix: newPrefix,
2208
3818
  prevDefaults,
2209
3819
  customDefaults,
@@ -2216,7 +3826,7 @@ function calculatePermissionMap(config, customization, { viewKeys, pathPrefix =
2216
3826
  defaults = calculateDefaults(prevDefaults, configValue.defaults, customDefaults);
2217
3827
  childMap = calculatePermissionMap(configValue, customization, {
2218
3828
  viewKeys,
2219
- viewPrefix,
3829
+ viewPrefix: viewPrefix2,
2220
3830
  pathPrefix: newPrefix,
2221
3831
  prevDefaults: defaults,
2222
3832
  conditionMaps,
@@ -2230,7 +3840,7 @@ function calculatePermissionMap(config, customization, { viewKeys, pathPrefix =
2230
3840
  defaults = calculateDefaults(prevDefaults, {}, customDefaults);
2231
3841
  }
2232
3842
  addKeyToPermissions(permissionMap, currentKey, {
2233
- viewPrefix,
3843
+ viewPrefix: viewPrefix2,
2234
3844
  checkCondition,
2235
3845
  conditionMaps
2236
3846
  }, defaults, childMap, canInsertResult.conditionAffect);
@@ -2305,7 +3915,7 @@ function mapObjKeys(configValue, { pathPrefix }) {
2305
3915
  return Object.keys(configValue).map((x) => getStructureKey(`${pathPrefix}${x}`));
2306
3916
  }
2307
3917
  __name(mapObjKeys, "mapObjKeys");
2308
- function mapArrayKeys(configValue, { viewPrefix, pathPrefix }) {
3918
+ function mapArrayKeys(configValue, { viewPrefix: viewPrefix2, pathPrefix }) {
2309
3919
  return configValue.reduce((result, value) => {
2310
3920
  if (typeof value === "string") {
2311
3921
  result.push(getStructureKey(`${pathPrefix}${value}`));
@@ -2318,16 +3928,16 @@ function mapArrayKeys(configValue, { viewPrefix, pathPrefix }) {
2318
3928
  }, []);
2319
3929
  }
2320
3930
  __name(mapArrayKeys, "mapArrayKeys");
2321
- function nodeHasKeepOption(configValue, customization, { viewPrefix, pathPrefix }) {
3931
+ function nodeHasKeepOption(configValue, customization, { viewPrefix: viewPrefix2, pathPrefix }) {
2322
3932
  var _a;
2323
3933
  if (!customization) return;
2324
3934
  const nodeKeys = Array.isArray(configValue) ? mapArrayKeys(configValue, {
2325
- viewPrefix,
3935
+ viewPrefix: viewPrefix2,
2326
3936
  pathPrefix
2327
3937
  }) : mapObjKeys(configValue, {
2328
3938
  pathPrefix
2329
3939
  });
2330
- const customizationView = viewPrefix ? (_a = customization == null ? void 0 : customization.views) == null ? void 0 : _a[viewPrefix] : void 0;
3940
+ const customizationView = viewPrefix2 ? (_a = customization == null ? void 0 : customization.views) == null ? void 0 : _a[viewPrefix2] : void 0;
2331
3941
  for (const key of nodeKeys) {
2332
3942
  if (keyIsIncludedInKeep(key, customization)) {
2333
3943
  return "root";
@@ -2338,10 +3948,10 @@ function nodeHasKeepOption(configValue, customization, { viewPrefix, pathPrefix
2338
3948
  return void 0;
2339
3949
  }
2340
3950
  __name(nodeHasKeepOption, "nodeHasKeepOption");
2341
- function calculatePermissionMapArray(configValue, customization, { viewKeys, viewPrefix, pathPrefix, prevDefaults, customDefaults, conditionMaps, checkCondition, keepAliases }) {
3951
+ function calculatePermissionMapArray(configValue, customization, { viewKeys, viewPrefix: viewPrefix2, pathPrefix, prevDefaults, customDefaults, conditionMaps, checkCondition, keepAliases }) {
2342
3952
  const permissionMap = {};
2343
3953
  const hasKeepOption = nodeHasKeepOption(configValue, customization, {
2344
- viewPrefix,
3954
+ viewPrefix: viewPrefix2,
2345
3955
  pathPrefix
2346
3956
  });
2347
3957
  const defaultsSimple = calculateDefaults(prevDefaults, void 0, customDefaults);
@@ -2350,7 +3960,7 @@ function calculatePermissionMapArray(configValue, customization, { viewKeys, vie
2350
3960
  if (typeof option === "string") {
2351
3961
  const canInsertResult = canInsertKey(fullPath, {
2352
3962
  viewKeys,
2353
- viewPrefix,
3963
+ viewPrefix: viewPrefix2,
2354
3964
  hasKeepOption,
2355
3965
  checkCondition,
2356
3966
  keepAliases
@@ -2359,7 +3969,7 @@ function calculatePermissionMapArray(configValue, customization, { viewKeys, vie
2359
3969
  return;
2360
3970
  }
2361
3971
  addKeyToPermissions(permissionMap, fullPath, {
2362
- viewPrefix,
3972
+ viewPrefix: viewPrefix2,
2363
3973
  checkCondition,
2364
3974
  conditionMaps
2365
3975
  }, defaultsSimple, void 0, canInsertResult.conditionAffect);
@@ -2367,7 +3977,7 @@ function calculatePermissionMapArray(configValue, customization, { viewKeys, vie
2367
3977
  Object.assign(permissionMap, calculatePermissionMap(option, customization, {
2368
3978
  viewKeys,
2369
3979
  pathPrefix,
2370
- viewPrefix,
3980
+ viewPrefix: viewPrefix2,
2371
3981
  hasKeepOption,
2372
3982
  prevDefaults,
2373
3983
  customDefaults,
@@ -2532,31 +4142,68 @@ __name(structureFromSubmodule, "structureFromSubmodule");
2532
4142
  // src/metadata/customization-metadata.ts
2533
4143
  var widgetMetadata = {
2534
4144
  [Widget.DASHBOARD]: {
2535
- labels: DASHBOARD_LABELS
4145
+ labels: DASHBOARD_LABELS,
4146
+ defaults: DASHBOARD_DEFAULTS
2536
4147
  },
2537
4148
  [Widget.CHART_PANEL]: {
2538
- labels: CHART_PANEL_LABELS
4149
+ labels: CHART_PANEL_LABELS,
4150
+ defaults: CHART_PANEL_DEFAULTS
2539
4151
  }
2540
4152
  };
4153
+ var findWidgetOfSubmodule = /* @__PURE__ */ __name((name) => Object.keys(WIDGET_SUBMODULE_NAMES).find((key) => WIDGET_SUBMODULE_NAMES[key] === name), "findWidgetOfSubmodule");
2541
4154
  var widgetOfSubmodule = /* @__PURE__ */ __name((name) => {
2542
- const widget = Object.keys(WIDGET_SUBMODULE_NAMES).find((key) => WIDGET_SUBMODULE_NAMES[key] === name);
4155
+ const widget = findWidgetOfSubmodule(name);
2543
4156
  if (!widget) throw new Error(`No widget registered for the submodule ${name}`);
2544
4157
  return widget;
2545
4158
  }, "widgetOfSubmodule");
2546
- function resolveTarget(widget, target, version) {
2547
- var _a, _b;
2548
- const embedded = ((_a = target.subModules) == null ? void 0 : _a.length) ? widgetOfSubmodule(target.subModules[target.subModules.length - 1]) : widget;
2549
- const config = getWidgetConfig(embedded, ((_b = target.subModules) == null ? void 0 : _b.length) ? void 0 : version);
4159
+ var isWidgetConfig = /* @__PURE__ */ __name((source) => typeof source.version === "string" && typeof source.baseStructure === "object", "isWidgetConfig");
4160
+ var rootOf = /* @__PURE__ */ __name((source) => isWidgetConfig(source) ? source.baseStructure : source, "rootOf");
4161
+ function structureRootOf(widget, options = {}, subModule) {
4162
+ var _a;
4163
+ const source = subModule ? (_a = options.subModuleStructures) == null ? void 0 : _a[subModule] : options.structure;
4164
+ if (source) return rootOf(source);
4165
+ return getWidgetConfig(widget, subModule ? void 0 : options.version).baseStructure;
4166
+ }
4167
+ __name(structureRootOf, "structureRootOf");
4168
+ var asCustomization = /* @__PURE__ */ __name((value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0, "asCustomization");
4169
+ function resolveTarget(widget, target, options) {
4170
+ var _a;
4171
+ const subModules = (_a = target.subModules) != null ? _a : [];
4172
+ const host = structureRootOf(widget, options);
4173
+ const views = host.views ? target.views : [
4174
+ void 0
4175
+ ];
4176
+ if (!subModules.length) {
4177
+ return {
4178
+ widget,
4179
+ keys: views.map((view) => structureKeysOf(widget, view, options.version, {
4180
+ structure: host
4181
+ }))
4182
+ };
4183
+ }
4184
+ const embedded = widgetOfSubmodule(subModules[subModules.length - 1]);
2550
4185
  return {
2551
4186
  widget: embedded,
2552
- views: config.baseStructure.views ? target.views : [
2553
- void 0
2554
- ]
4187
+ keys: views.map((view) => {
4188
+ let structure = host;
4189
+ let customization;
4190
+ let hostView = view;
4191
+ subModules.forEach((name) => {
4192
+ const instance = new WidgetStructureInstance(calculateViewMap(structure, customization));
4193
+ customization = asCustomization(instance.getSubmodule(name, hostView));
4194
+ structure = structureRootOf(widgetOfSubmodule(name), options, name);
4195
+ hostView = structure.views ? view : void 0;
4196
+ });
4197
+ return structureKeysOf(embedded, hostView, void 0, {
4198
+ structure,
4199
+ customization
4200
+ });
4201
+ })
2555
4202
  };
2556
4203
  }
2557
4204
  __name(resolveTarget, "resolveTarget");
2558
- function structureKeysOf(widget, view, version) {
2559
- const map = calculateViewMap(getWidgetConfig(widget, version).baseStructure);
4205
+ function structureKeysOf(widget, view, version, options = {}) {
4206
+ const map = calculateViewMap(options.structure ? rootOf(options.structure) : getWidgetConfig(widget, version).baseStructure, options.customization);
2560
4207
  const prefix = view ? `${view}${STRUCTURE_VIEW_NAME_SEPARATOR}` : "";
2561
4208
  return Object.keys(map).filter((key) => view ? key.startsWith(prefix) : !key.includes(STRUCTURE_VIEW_NAME_SEPARATOR)).map((key) => key.slice(prefix.length)).filter((key) => key !== "subModules");
2562
4209
  }
@@ -2572,14 +4219,11 @@ function getCustomizationLabel(widget, key) {
2572
4219
  }
2573
4220
  __name(getCustomizationLabel, "getCustomizationLabel");
2574
4221
  function getCustomizationTree(widget, target, options = {}) {
2575
- const resolved = resolveTarget(widget, target, options.version);
4222
+ const resolved = resolveTarget(widget, target, options);
2576
4223
  const ordered = [];
2577
- resolved.views.forEach((view) => {
2578
- var _a;
2579
- return structureKeysOf(resolved.widget, view, ((_a = target.subModules) == null ? void 0 : _a.length) ? void 0 : options.version).forEach((key) => {
2580
- if (!ordered.includes(key)) ordered.push(key);
2581
- });
2582
- });
4224
+ resolved.keys.forEach((keys) => keys.forEach((key) => {
4225
+ if (!ordered.includes(key)) ordered.push(key);
4226
+ }));
2583
4227
  const roots = [];
2584
4228
  const nodes = /* @__PURE__ */ new Map();
2585
4229
  const ensure = /* @__PURE__ */ __name((key) => {
@@ -2745,6 +4389,219 @@ function toggleCustomizationKey(customization, target, key, visible) {
2745
4389
  }
2746
4390
  __name(toggleCustomizationKey, "toggleCustomizationKey");
2747
4391
 
2748
- export { getCustomizationLabel, getCustomizationTree, getCustomizationTreeState, structureKeysOf, toggleCustomizationKey, widgetMetadata };
4392
+ // src/metadata/labels/submodule.labels.ts
4393
+ var SUBMODULE_LABELS = {
4394
+ chartPanel: {
4395
+ label: "Chart panel"
4396
+ },
4397
+ chartBuilder: {
4398
+ label: "Chart builder"
4399
+ },
4400
+ chartGallery: {
4401
+ label: "Chart gallery"
4402
+ },
4403
+ downloadModal: {
4404
+ label: "Download modal"
4405
+ }
4406
+ };
4407
+
4408
+ // src/metadata/customization-docs.ts
4409
+ var DEFAULT_AUDIENCE = "partner";
4410
+ var compact = /* @__PURE__ */ __name((value) => Object.fromEntries(Object.entries(value).filter(([, field]) => field !== void 0)), "compact");
4411
+ var asObject = /* @__PURE__ */ __name((value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : {}, "asObject");
4412
+ var viewPrefix = /* @__PURE__ */ __name((view) => view ? `${view}${STRUCTURE_VIEW_NAME_SEPARATOR}` : "", "viewPrefix");
4413
+ var parentOf = /* @__PURE__ */ __name((key) => {
4414
+ const index = key.lastIndexOf(STRUCTURE_SECTION_NAME_SEPARATOR);
4415
+ return index < 0 ? void 0 : key.slice(0, index);
4416
+ }, "parentOf");
4417
+ var typeOf = /* @__PURE__ */ __name((value) => {
4418
+ if (value === void 0) return void 0;
4419
+ return Array.isArray(value) ? "Array" : typeof value;
4420
+ }, "typeOf");
4421
+ var ownerByPath = /* @__PURE__ */ __name((name, keys) => keys.filter((key) => name.startsWith(`${key}${STRUCTURE_SECTION_NAME_SEPARATOR}`)).sort((left, right) => right.length - left.length)[0], "ownerByPath");
4422
+ function declaredDefaults(widget, structure) {
4423
+ const instance = new WidgetStructureInstance(calculateViewMap(structure));
4424
+ const root = asObject(structure.defaults);
4425
+ const declared = /* @__PURE__ */ new Map();
4426
+ const views = structure.views ? Object.keys(structure.views) : [
4427
+ void 0
4428
+ ];
4429
+ views.forEach((view) => structureKeysOf(widget, view, void 0, {
4430
+ structure
4431
+ }).forEach((key) => {
4432
+ const parent = parentOf(key);
4433
+ const inherited = parent ? asObject(instance.getDefaults(viewPrefix(view) + parent)) : root;
4434
+ Object.entries(asObject(instance.getDefaults(viewPrefix(view) + key))).filter(([name, value]) => !(name in inherited) || JSON.stringify(inherited[name]) !== JSON.stringify(value)).forEach(([name, value]) => declared.set(key, __spreadProps(__spreadValues({}, declared.get(key)), {
4435
+ [name]: value
4436
+ })));
4437
+ }));
4438
+ return declared;
4439
+ }
4440
+ __name(declaredDefaults, "declaredDefaults");
4441
+ function defaultDocsOf(widget, structure, validators) {
4442
+ var _a, _b;
4443
+ const labels = (_b = (_a = widgetMetadata[widget]) == null ? void 0 : _a.defaults) != null ? _b : {};
4444
+ const values = /* @__PURE__ */ new Map();
4445
+ const declaredBy = /* @__PURE__ */ new Map();
4446
+ Object.entries(asObject(structure.defaults)).forEach(([name, value]) => values.set(name, value));
4447
+ declaredDefaults(widget, structure).forEach((defaults, key) => Object.entries(defaults).forEach(([name, value]) => {
4448
+ var _a2;
4449
+ if (!values.has(name)) values.set(name, value);
4450
+ declaredBy.set(name, [
4451
+ ...(_a2 = declaredBy.get(name)) != null ? _a2 : [],
4452
+ key
4453
+ ]);
4454
+ }));
4455
+ const names = [
4456
+ .../* @__PURE__ */ new Set([
4457
+ ...Object.keys(labels),
4458
+ ...values.keys(),
4459
+ ...Object.keys(validators)
4460
+ ])
4461
+ ];
4462
+ const docs = names.map((name) => {
4463
+ var _a2, _b2, _c;
4464
+ const label = (_a2 = labels[name]) != null ? _a2 : {};
4465
+ const value = values.get(name);
4466
+ return compact({
4467
+ name,
4468
+ type: (_b2 = label.type) != null ? _b2 : typeOf(value),
4469
+ values: label.values,
4470
+ example: value === void 0 ? label.example : JSON.stringify(value),
4471
+ description: label.description,
4472
+ since: label.since,
4473
+ notes: label.notes,
4474
+ audience: (_c = label.audience) != null ? _c : DEFAULT_AUDIENCE
4475
+ });
4476
+ });
4477
+ return {
4478
+ docs,
4479
+ declaredBy
4480
+ };
4481
+ }
4482
+ __name(defaultDocsOf, "defaultDocsOf");
4483
+ var validatorsOf = /* @__PURE__ */ __name((widget, validationMap) => {
4484
+ var _a;
4485
+ return (_a = validationMap != null ? validationMap : widgetValidators[widget]) != null ? _a : {};
4486
+ }, "validatorsOf");
4487
+ function defaultsByKey({ docs, declaredBy }, keys) {
4488
+ const byKey = /* @__PURE__ */ new Map();
4489
+ docs.forEach((doc) => {
4490
+ var _a;
4491
+ const declared = ((_a = declaredBy.get(doc.name)) != null ? _a : []).filter((key) => keys.includes(key));
4492
+ const owners = declared.length ? declared : [
4493
+ ownerByPath(doc.name, keys)
4494
+ ].filter((key) => !!key);
4495
+ owners.forEach((key) => {
4496
+ var _a2;
4497
+ return byKey.set(key, [
4498
+ ...(_a2 = byKey.get(key)) != null ? _a2 : [],
4499
+ doc
4500
+ ]);
4501
+ });
4502
+ });
4503
+ return byKey;
4504
+ }
4505
+ __name(defaultsByKey, "defaultsByKey");
4506
+ function flatten(widget, tree, scope, defaults) {
4507
+ const keys = [];
4508
+ const collect = /* @__PURE__ */ __name((nodes) => nodes.forEach((node) => {
4509
+ var _a;
4510
+ keys.push(node.key);
4511
+ collect((_a = node.children) != null ? _a : []);
4512
+ }), "collect");
4513
+ collect(tree);
4514
+ const byKey = defaultsByKey(defaults, keys);
4515
+ const walk = /* @__PURE__ */ __name((nodes, parent, inherited) => nodes.flatMap((node) => {
4516
+ var _a;
4517
+ const { since, notes, audience } = getCustomizationLabel(widget, node.key);
4518
+ const own = audience != null ? audience : inherited;
4519
+ const entry = compact({
4520
+ key: node.key,
4521
+ scope,
4522
+ parent,
4523
+ kind: node.kind,
4524
+ label: node.label,
4525
+ description: node.description,
4526
+ since,
4527
+ notes,
4528
+ audience: own,
4529
+ defaults: byKey.get(node.key)
4530
+ });
4531
+ return [
4532
+ entry,
4533
+ ...walk((_a = node.children) != null ? _a : [], node.key, own)
4534
+ ];
4535
+ }), "walk");
4536
+ return walk(tree, null, DEFAULT_AUDIENCE);
4537
+ }
4538
+ __name(flatten, "flatten");
4539
+ function subModuleEntry(widget, name, scope) {
4540
+ var _a;
4541
+ const key = `subModules${STRUCTURE_SECTION_NAME_SEPARATOR}${name}`;
4542
+ const { label, description, since, notes, audience } = (_a = SUBMODULE_LABELS[name]) != null ? _a : getCustomizationLabel(widget, key);
4543
+ return compact({
4544
+ key,
4545
+ scope,
4546
+ parent: null,
4547
+ kind: "subModule",
4548
+ label,
4549
+ description,
4550
+ since,
4551
+ notes,
4552
+ audience: audience != null ? audience : DEFAULT_AUDIENCE
4553
+ });
4554
+ }
4555
+ __name(subModuleEntry, "subModuleEntry");
4556
+ function getCustomizationDocs(widget, options = {}) {
4557
+ const structure = structureRootOf(widget, options);
4558
+ const map = calculateViewMap(structure);
4559
+ const hostDefaults = defaultDocsOf(widget, structure, validatorsOf(widget, options.validationMap));
4560
+ const views = structure.views ? Object.keys(structure.views).filter((view) => !options.views || options.views.includes(view)) : [
4561
+ void 0
4562
+ ];
4563
+ return views.flatMap((view) => {
4564
+ const scope = view != null ? view : "";
4565
+ const target = {
4566
+ views: view ? [
4567
+ view
4568
+ ] : []
4569
+ };
4570
+ const entries = flatten(widget, getCustomizationTree(widget, target, options), scope, hostDefaults);
4571
+ Object.keys(asObject(map[`${viewPrefix(view)}subModules`])).filter((name) => !options.subModules || options.subModules.includes(name)).forEach((name) => {
4572
+ entries.push(subModuleEntry(widget, name, scope));
4573
+ const embedded = findWidgetOfSubmodule(name);
4574
+ if (!embedded) return;
4575
+ entries.push(...flatten(embedded, getCustomizationTree(widget, __spreadProps(__spreadValues({}, target), {
4576
+ subModules: [
4577
+ name
4578
+ ]
4579
+ }), options), view ? `${view}${STRUCTURE_VIEW_NAME_SEPARATOR}${name}` : name, defaultDocsOf(embedded, structureRootOf(embedded, options, name), validatorsOf(embedded))));
4580
+ });
4581
+ return entries;
4582
+ });
4583
+ }
4584
+ __name(getCustomizationDocs, "getCustomizationDocs");
4585
+ function getCustomizationDefaultDocs(widget, options = {}) {
4586
+ const structure = structureRootOf(widget, options);
4587
+ const { docs, declaredBy } = defaultDocsOf(widget, structure, validatorsOf(widget, options.validationMap));
4588
+ const views = structure.views ? Object.keys(structure.views) : [
4589
+ void 0
4590
+ ];
4591
+ const keys = [
4592
+ ...new Set(views.flatMap((view) => structureKeysOf(widget, view, void 0, {
4593
+ structure
4594
+ })))
4595
+ ];
4596
+ return docs.map((doc) => {
4597
+ var _a, _b, _c;
4598
+ return __spreadProps(__spreadValues({}, doc), {
4599
+ key: (_c = (_b = (_a = declaredBy.get(doc.name)) == null ? void 0 : _a[0]) != null ? _b : ownerByPath(doc.name, keys)) != null ? _c : null
4600
+ });
4601
+ });
4602
+ }
4603
+ __name(getCustomizationDefaultDocs, "getCustomizationDefaultDocs");
4604
+
4605
+ export { getCustomizationDefaultDocs, getCustomizationDocs, getCustomizationLabel, getCustomizationTree, getCustomizationTreeState, structureKeysOf, toggleCustomizationKey, widgetMetadata };
2749
4606
  //# sourceMappingURL=metadata.mjs.map
2750
4607
  //# sourceMappingURL=metadata.mjs.map