nexabase-report 0.28.0 → 0.28.3

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.
@@ -0,0 +1,1920 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$ref": "#/definitions/NexaReportDefinition",
4
+ "definitions": {
5
+ "NexaReportDefinition": {
6
+ "type": "object",
7
+ "properties": {
8
+ "metadata": {
9
+ "type": "object",
10
+ "properties": {
11
+ "version": {
12
+ "type": "string"
13
+ },
14
+ "name": {
15
+ "type": "string"
16
+ },
17
+ "description": {
18
+ "type": "string"
19
+ },
20
+ "author": {
21
+ "type": "string"
22
+ },
23
+ "createdAt": {
24
+ "type": "string"
25
+ },
26
+ "locale": {
27
+ "type": "string"
28
+ }
29
+ },
30
+ "required": [
31
+ "version",
32
+ "name",
33
+ "createdAt"
34
+ ],
35
+ "additionalProperties": false
36
+ },
37
+ "documentType": {
38
+ "type": "string",
39
+ "enum": [
40
+ "Report",
41
+ "Dashboard"
42
+ ]
43
+ },
44
+ "layout": {
45
+ "type": "object",
46
+ "properties": {
47
+ "page": {
48
+ "type": "object",
49
+ "properties": {
50
+ "format": {
51
+ "type": "string",
52
+ "enum": [
53
+ "A4",
54
+ "Letter",
55
+ "Ticket",
56
+ "Dashboard"
57
+ ]
58
+ },
59
+ "orientation": {
60
+ "type": "string",
61
+ "enum": [
62
+ "portrait",
63
+ "landscape"
64
+ ]
65
+ },
66
+ "width": {
67
+ "type": "number"
68
+ },
69
+ "height": {
70
+ "type": "number"
71
+ },
72
+ "margins": {
73
+ "type": "object",
74
+ "properties": {
75
+ "top": {
76
+ "type": "number"
77
+ },
78
+ "right": {
79
+ "type": "number"
80
+ },
81
+ "bottom": {
82
+ "type": "number"
83
+ },
84
+ "left": {
85
+ "type": "number"
86
+ }
87
+ },
88
+ "required": [
89
+ "top",
90
+ "right",
91
+ "bottom",
92
+ "left"
93
+ ],
94
+ "additionalProperties": false
95
+ }
96
+ },
97
+ "required": [
98
+ "format",
99
+ "orientation"
100
+ ],
101
+ "additionalProperties": false
102
+ },
103
+ "bands": {
104
+ "type": "array",
105
+ "items": {
106
+ "$ref": "#/definitions/NexaReportBand"
107
+ }
108
+ },
109
+ "widgets": {
110
+ "type": "array",
111
+ "items": {
112
+ "$ref": "#/definitions/DashboardWidget"
113
+ }
114
+ },
115
+ "watermark": {
116
+ "$ref": "#/definitions/WatermarkConfig"
117
+ },
118
+ "generateTOC": {
119
+ "type": "boolean"
120
+ }
121
+ },
122
+ "required": [
123
+ "page"
124
+ ],
125
+ "additionalProperties": false
126
+ },
127
+ "dataSources": {
128
+ "type": "array",
129
+ "items": {
130
+ "$ref": "#/definitions/NexaDataSource"
131
+ }
132
+ },
133
+ "dictionary": {
134
+ "$ref": "#/definitions/ReportDictionary"
135
+ },
136
+ "parameters": {
137
+ "type": "array",
138
+ "items": {
139
+ "$ref": "#/definitions/ReportParameter"
140
+ }
141
+ },
142
+ "variables": {
143
+ "type": "array",
144
+ "items": {
145
+ "$ref": "#/definitions/ReportVariable"
146
+ }
147
+ },
148
+ "expressions": {
149
+ "type": "array",
150
+ "items": {
151
+ "$ref": "#/definitions/ExpressionField"
152
+ }
153
+ },
154
+ "styles": {
155
+ "type": "array",
156
+ "items": {
157
+ "$ref": "#/definitions/NexaNamedStyle"
158
+ }
159
+ }
160
+ },
161
+ "required": [
162
+ "metadata",
163
+ "layout",
164
+ "dataSources"
165
+ ],
166
+ "additionalProperties": false
167
+ },
168
+ "NexaReportBand": {
169
+ "type": "object",
170
+ "properties": {
171
+ "id": {
172
+ "type": "string"
173
+ },
174
+ "type": {
175
+ "$ref": "#/definitions/NexaReportBandType"
176
+ },
177
+ "height": {
178
+ "type": "number"
179
+ },
180
+ "elements": {
181
+ "type": "array",
182
+ "items": {
183
+ "$ref": "#/definitions/NexaReportElement"
184
+ }
185
+ },
186
+ "dataSource": {
187
+ "type": "string"
188
+ },
189
+ "parentDataSource": {
190
+ "type": "string"
191
+ },
192
+ "masterField": {
193
+ "type": "string"
194
+ },
195
+ "childField": {
196
+ "type": "string"
197
+ },
198
+ "filter": {
199
+ "$ref": "#/definitions/DataSourceFilter"
200
+ },
201
+ "pageBreakBefore": {
202
+ "type": "boolean"
203
+ },
204
+ "pageBreakAfter": {
205
+ "type": "boolean"
206
+ },
207
+ "repeatOnEveryPage": {
208
+ "type": "boolean"
209
+ },
210
+ "backgroundColor": {
211
+ "type": "string"
212
+ }
213
+ },
214
+ "required": [
215
+ "id",
216
+ "type",
217
+ "height",
218
+ "elements"
219
+ ],
220
+ "additionalProperties": false
221
+ },
222
+ "NexaReportBandType": {
223
+ "type": "string",
224
+ "enum": [
225
+ "ReportHeader",
226
+ "PageHeader",
227
+ "DataBand",
228
+ "GroupHeader",
229
+ "GroupFooter",
230
+ "PageFooter",
231
+ "ReportFooter",
232
+ "DetailBand",
233
+ "StaticPage"
234
+ ]
235
+ },
236
+ "NexaReportElement": {
237
+ "type": "object",
238
+ "properties": {
239
+ "id": {
240
+ "type": "string"
241
+ },
242
+ "type": {
243
+ "anyOf": [
244
+ {
245
+ "type": "string",
246
+ "const": "Text"
247
+ },
248
+ {
249
+ "type": "string",
250
+ "const": "Image"
251
+ },
252
+ {
253
+ "type": "string",
254
+ "const": "Barcode"
255
+ },
256
+ {
257
+ "type": "string",
258
+ "const": "Table"
259
+ },
260
+ {
261
+ "type": "string",
262
+ "const": "Chart"
263
+ },
264
+ {
265
+ "type": "string",
266
+ "const": "Crosstab"
267
+ },
268
+ {
269
+ "type": "string",
270
+ "const": "SubReport"
271
+ },
272
+ {
273
+ "$ref": "#/definitions/ShapeType"
274
+ },
275
+ {
276
+ "type": "string",
277
+ "const": "QRCode"
278
+ },
279
+ {
280
+ "type": "string",
281
+ "const": "DrillDown"
282
+ },
283
+ {
284
+ "type": "string",
285
+ "const": "Gauge"
286
+ },
287
+ {
288
+ "type": "string",
289
+ "const": "Indicator"
290
+ },
291
+ {
292
+ "type": "string",
293
+ "const": "RichText"
294
+ }
295
+ ]
296
+ },
297
+ "x": {
298
+ "type": "number"
299
+ },
300
+ "y": {
301
+ "type": "number"
302
+ },
303
+ "width": {
304
+ "type": "number"
305
+ },
306
+ "height": {
307
+ "type": "number"
308
+ },
309
+ "style": {
310
+ "$ref": "#/definitions/NexaElementStyle"
311
+ },
312
+ "content": {
313
+ "type": "string"
314
+ },
315
+ "binding": {
316
+ "type": "string"
317
+ },
318
+ "tableColumns": {
319
+ "type": "array",
320
+ "items": {
321
+ "$ref": "#/definitions/NexaTableColumn"
322
+ }
323
+ },
324
+ "tableShowHeader": {
325
+ "type": "boolean"
326
+ },
327
+ "tableShowFooter": {
328
+ "type": "boolean"
329
+ },
330
+ "tableShowGroupHeader": {
331
+ "type": "boolean"
332
+ },
333
+ "tableShowGroupFooter": {
334
+ "type": "boolean"
335
+ },
336
+ "tableGroupBy": {
337
+ "type": "string"
338
+ },
339
+ "tableStyle": {
340
+ "$ref": "#/definitions/NexaTableStyle"
341
+ },
342
+ "chartConfig": {
343
+ "$ref": "#/definitions/NexaChartConfig"
344
+ },
345
+ "crosstabConfig": {
346
+ "$ref": "#/definitions/NexaCrosstabConfig"
347
+ },
348
+ "crosstabStyle": {
349
+ "$ref": "#/definitions/NexaCrosstabStyle"
350
+ },
351
+ "styleRef": {
352
+ "type": "string"
353
+ },
354
+ "richText": {
355
+ "type": "string"
356
+ },
357
+ "gaugeConfig": {
358
+ "$ref": "#/definitions/GaugeConfig"
359
+ },
360
+ "indicatorConfig": {
361
+ "$ref": "#/definitions/IndicatorConfig"
362
+ },
363
+ "subReportId": {
364
+ "type": "string"
365
+ },
366
+ "subReportDefinition": {
367
+ "$ref": "#/definitions/NexaReportDefinition"
368
+ },
369
+ "subReportDataSource": {
370
+ "type": "string"
371
+ },
372
+ "subReportBindings": {
373
+ "type": "array",
374
+ "items": {
375
+ "type": "object",
376
+ "properties": {
377
+ "masterField": {
378
+ "type": "string"
379
+ },
380
+ "childField": {
381
+ "type": "string"
382
+ }
383
+ },
384
+ "required": [
385
+ "masterField",
386
+ "childField"
387
+ ],
388
+ "additionalProperties": false
389
+ }
390
+ },
391
+ "drillDownConfig": {
392
+ "$ref": "#/definitions/NexaDrillDownConfig"
393
+ },
394
+ "shapeType": {
395
+ "$ref": "#/definitions/ShapeType"
396
+ },
397
+ "groupId": {
398
+ "type": "string"
399
+ },
400
+ "zIndex": {
401
+ "type": "number"
402
+ },
403
+ "conditionalFormats": {
404
+ "type": "array",
405
+ "items": {
406
+ "$ref": "#/definitions/ConditionalFormat"
407
+ }
408
+ },
409
+ "tooltipExpression": {
410
+ "type": "string"
411
+ },
412
+ "canGrow": {
413
+ "type": "boolean"
414
+ },
415
+ "options": {
416
+ "type": "object",
417
+ "properties": {
418
+ "barcodeFormat": {
419
+ "type": "string"
420
+ },
421
+ "displayValue": {
422
+ "type": "boolean"
423
+ },
424
+ "imageUrl": {
425
+ "type": "string"
426
+ },
427
+ "imageSource": {
428
+ "type": "string",
429
+ "enum": [
430
+ "url",
431
+ "binding"
432
+ ]
433
+ },
434
+ "shapeStyle": {
435
+ "type": "string",
436
+ "enum": [
437
+ "solid",
438
+ "dashed",
439
+ "dotted"
440
+ ]
441
+ },
442
+ "strokeWidth": {
443
+ "type": "number"
444
+ },
445
+ "lineColor": {
446
+ "type": "string"
447
+ },
448
+ "fillColor": {
449
+ "type": "string"
450
+ },
451
+ "cornerRadius": {
452
+ "type": "number"
453
+ },
454
+ "subReportCollapsed": {
455
+ "type": "boolean"
456
+ },
457
+ "orientation": {
458
+ "type": "string",
459
+ "enum": [
460
+ "horizontal",
461
+ "vertical"
462
+ ]
463
+ }
464
+ },
465
+ "additionalProperties": false
466
+ }
467
+ },
468
+ "required": [
469
+ "id",
470
+ "type",
471
+ "x",
472
+ "y",
473
+ "width",
474
+ "height",
475
+ "style"
476
+ ],
477
+ "additionalProperties": false
478
+ },
479
+ "ShapeType": {
480
+ "type": "string",
481
+ "enum": [
482
+ "Line",
483
+ "Rectangle",
484
+ "Ellipse",
485
+ "Arrow"
486
+ ]
487
+ },
488
+ "NexaElementStyle": {
489
+ "type": "object",
490
+ "properties": {
491
+ "fontSize": {
492
+ "type": "string"
493
+ },
494
+ "color": {
495
+ "type": "string"
496
+ },
497
+ "fontWeight": {
498
+ "type": "string"
499
+ },
500
+ "fontStyle": {
501
+ "type": "string",
502
+ "enum": [
503
+ "normal",
504
+ "italic"
505
+ ]
506
+ },
507
+ "fontFamily": {
508
+ "type": "string"
509
+ },
510
+ "textAlign": {
511
+ "type": "string",
512
+ "enum": [
513
+ "left",
514
+ "center",
515
+ "right",
516
+ "justify"
517
+ ]
518
+ },
519
+ "verticalAlign": {
520
+ "type": "string",
521
+ "enum": [
522
+ "top",
523
+ "middle",
524
+ "bottom"
525
+ ]
526
+ },
527
+ "border": {
528
+ "type": "string"
529
+ },
530
+ "backgroundColor": {
531
+ "type": "string"
532
+ },
533
+ "padding": {
534
+ "type": "number"
535
+ },
536
+ "objectFit": {
537
+ "type": "string",
538
+ "enum": [
539
+ "contain",
540
+ "cover",
541
+ "fill"
542
+ ]
543
+ }
544
+ },
545
+ "additionalProperties": false
546
+ },
547
+ "NexaTableColumn": {
548
+ "type": "object",
549
+ "properties": {
550
+ "id": {
551
+ "type": "string"
552
+ },
553
+ "title": {
554
+ "type": "string"
555
+ },
556
+ "width": {
557
+ "type": "number"
558
+ },
559
+ "binding": {
560
+ "type": "string"
561
+ },
562
+ "format": {
563
+ "type": "string"
564
+ },
565
+ "alignment": {
566
+ "type": "string",
567
+ "enum": [
568
+ "left",
569
+ "center",
570
+ "right"
571
+ ]
572
+ },
573
+ "footerText": {
574
+ "type": "string"
575
+ },
576
+ "groupHeaderText": {
577
+ "type": "string"
578
+ },
579
+ "groupFooterText": {
580
+ "type": "string"
581
+ },
582
+ "conditionalFormats": {
583
+ "type": "array",
584
+ "items": {
585
+ "$ref": "#/definitions/ConditionalFormat"
586
+ }
587
+ }
588
+ },
589
+ "required": [
590
+ "id",
591
+ "title",
592
+ "width",
593
+ "binding"
594
+ ],
595
+ "additionalProperties": false
596
+ },
597
+ "ConditionalFormat": {
598
+ "type": "object",
599
+ "properties": {
600
+ "id": {
601
+ "type": "string"
602
+ },
603
+ "name": {
604
+ "type": "string"
605
+ },
606
+ "condition": {
607
+ "type": "object",
608
+ "properties": {
609
+ "field": {
610
+ "type": "string"
611
+ },
612
+ "operator": {
613
+ "$ref": "#/definitions/ConditionOperator"
614
+ },
615
+ "value": {},
616
+ "value2": {}
617
+ },
618
+ "required": [
619
+ "field",
620
+ "operator"
621
+ ],
622
+ "additionalProperties": false
623
+ },
624
+ "style": {
625
+ "type": "object",
626
+ "properties": {
627
+ "backgroundColor": {
628
+ "type": "string"
629
+ },
630
+ "color": {
631
+ "type": "string"
632
+ },
633
+ "fontWeight": {
634
+ "type": "string"
635
+ },
636
+ "fontStyle": {
637
+ "type": "string"
638
+ },
639
+ "border": {
640
+ "type": "string"
641
+ },
642
+ "borderColor": {
643
+ "type": "string"
644
+ },
645
+ "fontSize": {
646
+ "type": "string"
647
+ }
648
+ },
649
+ "additionalProperties": false
650
+ },
651
+ "enabled": {
652
+ "type": "boolean"
653
+ }
654
+ },
655
+ "required": [
656
+ "id",
657
+ "name",
658
+ "condition",
659
+ "style",
660
+ "enabled"
661
+ ],
662
+ "additionalProperties": false
663
+ },
664
+ "ConditionOperator": {
665
+ "type": "string",
666
+ "enum": [
667
+ "eq",
668
+ "ne",
669
+ "gt",
670
+ "gte",
671
+ "lt",
672
+ "lte",
673
+ "contains",
674
+ "starts_with",
675
+ "is_null",
676
+ "is_not_null",
677
+ "between",
678
+ "regex"
679
+ ]
680
+ },
681
+ "NexaTableStyle": {
682
+ "type": "object",
683
+ "properties": {
684
+ "headerBackground": {
685
+ "type": "string"
686
+ },
687
+ "headerColor": {
688
+ "type": "string"
689
+ },
690
+ "headerBold": {
691
+ "type": "boolean"
692
+ },
693
+ "alternateRows": {
694
+ "type": "boolean"
695
+ },
696
+ "alternateRowBackground": {
697
+ "type": "string"
698
+ },
699
+ "borderColor": {
700
+ "type": "string"
701
+ },
702
+ "borderWidth": {
703
+ "type": "number"
704
+ }
705
+ },
706
+ "additionalProperties": false
707
+ },
708
+ "NexaChartConfig": {
709
+ "type": "object",
710
+ "properties": {
711
+ "chartType": {
712
+ "$ref": "#/definitions/ChartType"
713
+ },
714
+ "title": {
715
+ "type": "string"
716
+ },
717
+ "categoryField": {
718
+ "type": "string"
719
+ },
720
+ "valueFields": {
721
+ "type": "array",
722
+ "items": {
723
+ "type": "object",
724
+ "properties": {
725
+ "binding": {
726
+ "type": "string"
727
+ },
728
+ "label": {
729
+ "type": "string"
730
+ },
731
+ "color": {
732
+ "type": "string"
733
+ }
734
+ },
735
+ "required": [
736
+ "binding",
737
+ "label"
738
+ ],
739
+ "additionalProperties": false
740
+ }
741
+ },
742
+ "showLegend": {
743
+ "type": "boolean"
744
+ },
745
+ "showLabels": {
746
+ "type": "boolean"
747
+ },
748
+ "legendPosition": {
749
+ "type": "string",
750
+ "enum": [
751
+ "top",
752
+ "bottom",
753
+ "left",
754
+ "right"
755
+ ]
756
+ },
757
+ "colorPalette": {
758
+ "type": "array",
759
+ "items": {
760
+ "type": "string"
761
+ }
762
+ },
763
+ "orientation": {
764
+ "type": "string",
765
+ "enum": [
766
+ "horizontal",
767
+ "vertical"
768
+ ]
769
+ },
770
+ "stacked": {
771
+ "type": "boolean"
772
+ },
773
+ "showGrid": {
774
+ "type": "boolean"
775
+ },
776
+ "smoothLine": {
777
+ "type": "boolean"
778
+ },
779
+ "donutInnerRadius": {
780
+ "type": "number"
781
+ },
782
+ "dataSource": {
783
+ "type": "string"
784
+ }
785
+ },
786
+ "required": [
787
+ "chartType",
788
+ "title",
789
+ "categoryField",
790
+ "valueFields",
791
+ "showLegend",
792
+ "showLabels",
793
+ "legendPosition",
794
+ "colorPalette",
795
+ "orientation",
796
+ "stacked",
797
+ "showGrid",
798
+ "smoothLine"
799
+ ],
800
+ "additionalProperties": false
801
+ },
802
+ "ChartType": {
803
+ "type": "string",
804
+ "enum": [
805
+ "bar",
806
+ "line",
807
+ "pie",
808
+ "doughnut",
809
+ "area",
810
+ "scatter"
811
+ ]
812
+ },
813
+ "NexaCrosstabConfig": {
814
+ "type": "object",
815
+ "properties": {
816
+ "rowFields": {
817
+ "type": "array",
818
+ "items": {
819
+ "type": "object",
820
+ "properties": {
821
+ "binding": {
822
+ "type": "string"
823
+ },
824
+ "label": {
825
+ "type": "string"
826
+ }
827
+ },
828
+ "required": [
829
+ "binding",
830
+ "label"
831
+ ],
832
+ "additionalProperties": false
833
+ }
834
+ },
835
+ "columnField": {
836
+ "type": "string"
837
+ },
838
+ "valueFields": {
839
+ "type": "array",
840
+ "items": {
841
+ "type": "object",
842
+ "properties": {
843
+ "binding": {
844
+ "type": "string"
845
+ },
846
+ "label": {
847
+ "type": "string"
848
+ },
849
+ "aggregation": {
850
+ "$ref": "#/definitions/AggregationType"
851
+ },
852
+ "format": {
853
+ "type": "string"
854
+ }
855
+ },
856
+ "required": [
857
+ "binding",
858
+ "label",
859
+ "aggregation"
860
+ ],
861
+ "additionalProperties": false
862
+ }
863
+ },
864
+ "showTotals": {
865
+ "type": "boolean"
866
+ },
867
+ "showGrandTotals": {
868
+ "type": "boolean"
869
+ },
870
+ "totalsLabel": {
871
+ "type": "string"
872
+ },
873
+ "dataSource": {
874
+ "type": "string"
875
+ },
876
+ "columnWidth": {
877
+ "type": "number",
878
+ "description": "Column width in px for each data column. Default: 100"
879
+ },
880
+ "rowHeaderWidth": {
881
+ "type": "number",
882
+ "description": "Row header width in px. Default: 120"
883
+ },
884
+ "allowPageBreak": {
885
+ "type": "boolean",
886
+ "description": "Enable row-based pagination (split across pages). Default: true"
887
+ },
888
+ "maxRowsPerPage": {
889
+ "type": "number",
890
+ "description": "Max rows per page before splitting. 0 = unlimited. Default: 0"
891
+ }
892
+ },
893
+ "required": [
894
+ "rowFields",
895
+ "columnField",
896
+ "valueFields",
897
+ "showTotals",
898
+ "showGrandTotals",
899
+ "totalsLabel"
900
+ ],
901
+ "additionalProperties": false
902
+ },
903
+ "AggregationType": {
904
+ "type": "string",
905
+ "enum": [
906
+ "sum",
907
+ "count",
908
+ "avg",
909
+ "min",
910
+ "max",
911
+ "first",
912
+ "last"
913
+ ]
914
+ },
915
+ "NexaCrosstabStyle": {
916
+ "type": "object",
917
+ "properties": {
918
+ "headerBackground": {
919
+ "type": "string",
920
+ "description": "Background color for the column header row. Default: #f3f4f6"
921
+ },
922
+ "headerColor": {
923
+ "type": "string",
924
+ "description": "Text color for column headers. Default: #111827"
925
+ },
926
+ "headerBold": {
927
+ "type": "boolean",
928
+ "description": "Bold column headers. Default: true"
929
+ },
930
+ "rowHeaderBackground": {
931
+ "type": "string",
932
+ "description": "Background color for row header cells. Default: #fafafa"
933
+ },
934
+ "rowHeaderColor": {
935
+ "type": "string",
936
+ "description": "Text color for row header cells. Default: #111827"
937
+ },
938
+ "rowHeaderBold": {
939
+ "type": "boolean",
940
+ "description": "Bold row headers. Default: true"
941
+ },
942
+ "alternateRows": {
943
+ "type": "boolean",
944
+ "description": "Enable alternating row colors (zebra). Default: true"
945
+ },
946
+ "alternateRowBackground": {
947
+ "type": "string",
948
+ "description": "Background color for alternate rows. Default: #f9fafb"
949
+ },
950
+ "borderColor": {
951
+ "type": "string",
952
+ "description": "Border color for all cells. Default: #d1d5db"
953
+ },
954
+ "borderWidth": {
955
+ "type": "number",
956
+ "description": "Border width in px. Default: 1"
957
+ },
958
+ "totalsBackground": {
959
+ "type": "string",
960
+ "description": "Background color for total cells. Default: #e8f4fd"
961
+ },
962
+ "totalsColor": {
963
+ "type": "string",
964
+ "description": "Text color for total cells. Default: #111827"
965
+ },
966
+ "totalsBold": {
967
+ "type": "boolean",
968
+ "description": "Bold total cells. Default: true"
969
+ },
970
+ "grandTotalBackground": {
971
+ "type": "string",
972
+ "description": "Background color for grand total row. Default: #dbeafe"
973
+ }
974
+ },
975
+ "additionalProperties": false
976
+ },
977
+ "GaugeConfig": {
978
+ "type": "object",
979
+ "properties": {
980
+ "gaugeType": {
981
+ "type": "string",
982
+ "enum": [
983
+ "radial",
984
+ "linear"
985
+ ]
986
+ },
987
+ "valueField": {
988
+ "type": "string"
989
+ },
990
+ "aggregation": {
991
+ "$ref": "#/definitions/AggregationType"
992
+ },
993
+ "min": {
994
+ "type": "number"
995
+ },
996
+ "max": {
997
+ "type": "number"
998
+ },
999
+ "target": {
1000
+ "type": "number"
1001
+ },
1002
+ "format": {
1003
+ "type": "string"
1004
+ },
1005
+ "ranges": {
1006
+ "type": "array",
1007
+ "items": {
1008
+ "type": "object",
1009
+ "properties": {
1010
+ "from": {
1011
+ "type": "number"
1012
+ },
1013
+ "to": {
1014
+ "type": "number"
1015
+ },
1016
+ "color": {
1017
+ "type": "string"
1018
+ }
1019
+ },
1020
+ "required": [
1021
+ "from",
1022
+ "to",
1023
+ "color"
1024
+ ],
1025
+ "additionalProperties": false
1026
+ }
1027
+ },
1028
+ "showValue": {
1029
+ "type": "boolean"
1030
+ },
1031
+ "showLabel": {
1032
+ "type": "boolean"
1033
+ }
1034
+ },
1035
+ "required": [
1036
+ "gaugeType",
1037
+ "valueField",
1038
+ "aggregation",
1039
+ "min",
1040
+ "max"
1041
+ ],
1042
+ "additionalProperties": false
1043
+ },
1044
+ "IndicatorConfig": {
1045
+ "type": "object",
1046
+ "properties": {
1047
+ "binding": {
1048
+ "type": "string"
1049
+ },
1050
+ "valueField": {
1051
+ "type": "string"
1052
+ },
1053
+ "aggregation": {
1054
+ "$ref": "#/definitions/AggregationType"
1055
+ },
1056
+ "label": {
1057
+ "type": "string"
1058
+ },
1059
+ "prefix": {
1060
+ "type": "string"
1061
+ },
1062
+ "suffix": {
1063
+ "type": "string"
1064
+ },
1065
+ "format": {
1066
+ "type": "string"
1067
+ },
1068
+ "showTrend": {
1069
+ "type": "boolean"
1070
+ },
1071
+ "trendBinding": {
1072
+ "type": "string"
1073
+ },
1074
+ "icon": {
1075
+ "type": "string"
1076
+ },
1077
+ "color": {
1078
+ "type": "string"
1079
+ }
1080
+ },
1081
+ "required": [
1082
+ "binding",
1083
+ "aggregation",
1084
+ "label"
1085
+ ],
1086
+ "additionalProperties": false
1087
+ },
1088
+ "NexaDrillDownConfig": {
1089
+ "type": "object",
1090
+ "properties": {
1091
+ "targetReportId": {
1092
+ "type": "string"
1093
+ },
1094
+ "targetReportDefinition": {
1095
+ "$ref": "#/definitions/NexaReportDefinition"
1096
+ },
1097
+ "parameterMappings": {
1098
+ "type": "array",
1099
+ "items": {
1100
+ "type": "object",
1101
+ "properties": {
1102
+ "targetParameter": {
1103
+ "type": "string"
1104
+ },
1105
+ "sourceField": {
1106
+ "type": "string"
1107
+ }
1108
+ },
1109
+ "required": [
1110
+ "targetParameter",
1111
+ "sourceField"
1112
+ ],
1113
+ "additionalProperties": false
1114
+ }
1115
+ },
1116
+ "openInNewTab": {
1117
+ "type": "boolean"
1118
+ },
1119
+ "showAsModal": {
1120
+ "type": "boolean"
1121
+ },
1122
+ "modalSize": {
1123
+ "type": "string",
1124
+ "enum": [
1125
+ "small",
1126
+ "medium",
1127
+ "large",
1128
+ "fullscreen"
1129
+ ]
1130
+ },
1131
+ "tooltip": {
1132
+ "type": "string"
1133
+ },
1134
+ "icon": {
1135
+ "type": "string"
1136
+ },
1137
+ "cursorStyle": {
1138
+ "type": "string",
1139
+ "enum": [
1140
+ "pointer",
1141
+ "zoom-in",
1142
+ "default"
1143
+ ]
1144
+ }
1145
+ },
1146
+ "required": [
1147
+ "parameterMappings"
1148
+ ],
1149
+ "additionalProperties": false
1150
+ },
1151
+ "DataSourceFilter": {
1152
+ "type": "object",
1153
+ "properties": {
1154
+ "field": {
1155
+ "type": "string"
1156
+ },
1157
+ "operator": {
1158
+ "$ref": "#/definitions/ConditionOperator"
1159
+ },
1160
+ "value": {},
1161
+ "value2": {}
1162
+ },
1163
+ "required": [
1164
+ "field",
1165
+ "operator"
1166
+ ],
1167
+ "additionalProperties": false
1168
+ },
1169
+ "DashboardWidget": {
1170
+ "type": "object",
1171
+ "properties": {
1172
+ "id": {
1173
+ "type": "string"
1174
+ },
1175
+ "type": {
1176
+ "$ref": "#/definitions/DashboardWidgetType"
1177
+ },
1178
+ "x": {
1179
+ "type": "number"
1180
+ },
1181
+ "y": {
1182
+ "type": "number"
1183
+ },
1184
+ "w": {
1185
+ "type": "number"
1186
+ },
1187
+ "h": {
1188
+ "type": "number"
1189
+ },
1190
+ "title": {
1191
+ "type": "string"
1192
+ },
1193
+ "dataSource": {
1194
+ "type": "string"
1195
+ },
1196
+ "config": {
1197
+ "anyOf": [
1198
+ {
1199
+ "$ref": "#/definitions/NexaChartConfig"
1200
+ },
1201
+ {
1202
+ "$ref": "#/definitions/NexaCrosstabConfig"
1203
+ },
1204
+ {
1205
+ "$ref": "#/definitions/IndicatorConfig"
1206
+ },
1207
+ {
1208
+ "$ref": "#/definitions/GaugeConfig"
1209
+ },
1210
+ {
1211
+ "$ref": "#/definitions/TableWidgetConfig"
1212
+ },
1213
+ {}
1214
+ ]
1215
+ },
1216
+ "style": {
1217
+ "$ref": "#/definitions/NexaElementStyle"
1218
+ },
1219
+ "interactive": {
1220
+ "type": "boolean"
1221
+ }
1222
+ },
1223
+ "required": [
1224
+ "id",
1225
+ "type",
1226
+ "x",
1227
+ "y",
1228
+ "w",
1229
+ "h",
1230
+ "config"
1231
+ ],
1232
+ "additionalProperties": false
1233
+ },
1234
+ "DashboardWidgetType": {
1235
+ "type": "string",
1236
+ "enum": [
1237
+ "Chart",
1238
+ "Table",
1239
+ "Indicator",
1240
+ "Gauge",
1241
+ "PivotTable",
1242
+ "Map",
1243
+ "Filter",
1244
+ "Text",
1245
+ "Image"
1246
+ ]
1247
+ },
1248
+ "TableWidgetConfig": {
1249
+ "type": "object",
1250
+ "properties": {
1251
+ "columns": {
1252
+ "type": "array",
1253
+ "items": {
1254
+ "$ref": "#/definitions/TableWidgetColumn"
1255
+ }
1256
+ },
1257
+ "showHeader": {
1258
+ "type": "boolean"
1259
+ },
1260
+ "showFooter": {
1261
+ "type": "boolean"
1262
+ },
1263
+ "footerText": {
1264
+ "type": "string"
1265
+ },
1266
+ "pageSize": {
1267
+ "type": "number"
1268
+ },
1269
+ "allowSorting": {
1270
+ "type": "boolean"
1271
+ },
1272
+ "allowFiltering": {
1273
+ "type": "boolean"
1274
+ },
1275
+ "alternatingRowColors": {
1276
+ "type": "boolean"
1277
+ },
1278
+ "headerBackgroundColor": {
1279
+ "type": "string"
1280
+ },
1281
+ "headerTextColor": {
1282
+ "type": "string"
1283
+ },
1284
+ "rowHeight": {
1285
+ "type": "number"
1286
+ },
1287
+ "dataSource": {
1288
+ "type": "string"
1289
+ }
1290
+ },
1291
+ "required": [
1292
+ "columns",
1293
+ "showHeader",
1294
+ "showFooter",
1295
+ "pageSize",
1296
+ "allowSorting",
1297
+ "allowFiltering",
1298
+ "alternatingRowColors",
1299
+ "headerBackgroundColor",
1300
+ "headerTextColor",
1301
+ "rowHeight"
1302
+ ],
1303
+ "additionalProperties": false
1304
+ },
1305
+ "TableWidgetColumn": {
1306
+ "type": "object",
1307
+ "properties": {
1308
+ "field": {
1309
+ "type": "string"
1310
+ },
1311
+ "header": {
1312
+ "type": "string"
1313
+ },
1314
+ "width": {
1315
+ "type": [
1316
+ "number",
1317
+ "string"
1318
+ ]
1319
+ },
1320
+ "alignment": {
1321
+ "type": "string",
1322
+ "enum": [
1323
+ "left",
1324
+ "center",
1325
+ "right"
1326
+ ]
1327
+ },
1328
+ "format": {
1329
+ "type": "string"
1330
+ },
1331
+ "color": {
1332
+ "type": "string"
1333
+ },
1334
+ "aggregation": {
1335
+ "$ref": "#/definitions/AggregationType"
1336
+ }
1337
+ },
1338
+ "required": [
1339
+ "field",
1340
+ "header"
1341
+ ],
1342
+ "additionalProperties": false
1343
+ },
1344
+ "WatermarkConfig": {
1345
+ "type": "object",
1346
+ "properties": {
1347
+ "text": {
1348
+ "type": "string"
1349
+ },
1350
+ "imageUrl": {
1351
+ "type": "string"
1352
+ },
1353
+ "opacity": {
1354
+ "type": "number"
1355
+ },
1356
+ "rotation": {
1357
+ "type": "number"
1358
+ },
1359
+ "fontSize": {
1360
+ "type": "number"
1361
+ },
1362
+ "color": {
1363
+ "type": "string"
1364
+ },
1365
+ "position": {
1366
+ "type": "string",
1367
+ "enum": [
1368
+ "center",
1369
+ "top-left",
1370
+ "top-right",
1371
+ "bottom-left",
1372
+ "bottom-right",
1373
+ "tile"
1374
+ ]
1375
+ },
1376
+ "pages": {
1377
+ "type": "string",
1378
+ "enum": [
1379
+ "all",
1380
+ "first",
1381
+ "last",
1382
+ "except-first",
1383
+ "except-last"
1384
+ ]
1385
+ },
1386
+ "behindContent": {
1387
+ "type": "boolean"
1388
+ }
1389
+ },
1390
+ "required": [
1391
+ "opacity",
1392
+ "rotation",
1393
+ "position",
1394
+ "pages",
1395
+ "behindContent"
1396
+ ],
1397
+ "additionalProperties": false
1398
+ },
1399
+ "NexaDataSource": {
1400
+ "type": "object",
1401
+ "properties": {
1402
+ "id": {
1403
+ "type": "string"
1404
+ },
1405
+ "alias": {
1406
+ "type": "string"
1407
+ },
1408
+ "collection": {
1409
+ "type": "string"
1410
+ },
1411
+ "filters": {
1412
+ "type": "array",
1413
+ "items": {
1414
+ "$ref": "#/definitions/DataSourceFilter"
1415
+ }
1416
+ },
1417
+ "sort": {
1418
+ "type": "array",
1419
+ "items": {
1420
+ "type": "object",
1421
+ "properties": {
1422
+ "field": {
1423
+ "type": "string"
1424
+ },
1425
+ "direction": {
1426
+ "type": "string",
1427
+ "enum": [
1428
+ "asc",
1429
+ "desc"
1430
+ ]
1431
+ }
1432
+ },
1433
+ "required": [
1434
+ "field",
1435
+ "direction"
1436
+ ],
1437
+ "additionalProperties": false
1438
+ }
1439
+ },
1440
+ "joins": {
1441
+ "type": "array",
1442
+ "items": {
1443
+ "$ref": "#/definitions/JoinConfig"
1444
+ }
1445
+ },
1446
+ "enabled": {
1447
+ "type": "boolean"
1448
+ },
1449
+ "isDetail": {
1450
+ "type": "boolean"
1451
+ },
1452
+ "parentAlias": {
1453
+ "type": "string"
1454
+ },
1455
+ "masterField": {
1456
+ "type": "string"
1457
+ },
1458
+ "childField": {
1459
+ "type": "string"
1460
+ },
1461
+ "isManual": {
1462
+ "type": "boolean"
1463
+ },
1464
+ "manualData": {
1465
+ "type": "array",
1466
+ "items": {}
1467
+ },
1468
+ "manualSchema": {
1469
+ "type": "array",
1470
+ "items": {
1471
+ "$ref": "#/definitions/DataField"
1472
+ }
1473
+ }
1474
+ },
1475
+ "required": [
1476
+ "id",
1477
+ "alias",
1478
+ "collection",
1479
+ "enabled"
1480
+ ],
1481
+ "additionalProperties": false
1482
+ },
1483
+ "JoinConfig": {
1484
+ "type": "object",
1485
+ "properties": {
1486
+ "id": {
1487
+ "type": "string"
1488
+ },
1489
+ "collection": {
1490
+ "type": "string"
1491
+ },
1492
+ "alias": {
1493
+ "type": "string"
1494
+ },
1495
+ "localField": {
1496
+ "type": "string"
1497
+ },
1498
+ "foreignField": {
1499
+ "type": "string"
1500
+ },
1501
+ "joinType": {
1502
+ "type": "string",
1503
+ "enum": [
1504
+ "inner",
1505
+ "left",
1506
+ "right"
1507
+ ]
1508
+ }
1509
+ },
1510
+ "required": [
1511
+ "id",
1512
+ "collection",
1513
+ "alias",
1514
+ "localField",
1515
+ "foreignField",
1516
+ "joinType"
1517
+ ],
1518
+ "additionalProperties": false
1519
+ },
1520
+ "DataField": {
1521
+ "type": "object",
1522
+ "properties": {
1523
+ "name": {
1524
+ "type": "string"
1525
+ },
1526
+ "type": {
1527
+ "$ref": "#/definitions/FieldType"
1528
+ },
1529
+ "label": {
1530
+ "type": "string"
1531
+ },
1532
+ "primaryKey": {
1533
+ "type": "boolean"
1534
+ },
1535
+ "foreignKey": {
1536
+ "type": "string"
1537
+ },
1538
+ "format": {
1539
+ "type": "string"
1540
+ },
1541
+ "nullable": {
1542
+ "type": "boolean"
1543
+ },
1544
+ "defaultValue": {},
1545
+ "source": {
1546
+ "type": "string",
1547
+ "enum": [
1548
+ "collection",
1549
+ "manual",
1550
+ "calculated"
1551
+ ]
1552
+ }
1553
+ },
1554
+ "required": [
1555
+ "name",
1556
+ "type"
1557
+ ],
1558
+ "additionalProperties": false
1559
+ },
1560
+ "FieldType": {
1561
+ "type": "string",
1562
+ "enum": [
1563
+ "string",
1564
+ "number",
1565
+ "date",
1566
+ "boolean",
1567
+ "object",
1568
+ "array",
1569
+ "calculated"
1570
+ ]
1571
+ },
1572
+ "ReportDictionary": {
1573
+ "type": "object",
1574
+ "properties": {
1575
+ "dataSources": {
1576
+ "type": "array",
1577
+ "items": {
1578
+ "$ref": "#/definitions/DataSourceDef"
1579
+ }
1580
+ },
1581
+ "relationships": {
1582
+ "type": "array",
1583
+ "items": {
1584
+ "$ref": "#/definitions/DataRelationship"
1585
+ }
1586
+ },
1587
+ "calculatedFields": {
1588
+ "type": "array",
1589
+ "items": {
1590
+ "$ref": "#/definitions/CalculatedField"
1591
+ }
1592
+ },
1593
+ "manualFields": {
1594
+ "type": "array",
1595
+ "items": {
1596
+ "$ref": "#/definitions/ManualField"
1597
+ }
1598
+ },
1599
+ "relations": {
1600
+ "type": "array",
1601
+ "items": {
1602
+ "$ref": "#/definitions/DataSourceRelation"
1603
+ }
1604
+ }
1605
+ },
1606
+ "required": [
1607
+ "dataSources"
1608
+ ],
1609
+ "additionalProperties": false
1610
+ },
1611
+ "DataSourceDef": {
1612
+ "type": "object",
1613
+ "properties": {
1614
+ "alias": {
1615
+ "type": "string"
1616
+ },
1617
+ "label": {
1618
+ "type": "string"
1619
+ },
1620
+ "fields": {
1621
+ "type": "array",
1622
+ "items": {
1623
+ "$ref": "#/definitions/DataField"
1624
+ }
1625
+ },
1626
+ "sampleData": {
1627
+ "type": "array",
1628
+ "items": {}
1629
+ }
1630
+ },
1631
+ "required": [
1632
+ "alias",
1633
+ "fields"
1634
+ ],
1635
+ "additionalProperties": false
1636
+ },
1637
+ "DataRelationship": {
1638
+ "type": "object",
1639
+ "properties": {
1640
+ "from": {
1641
+ "type": "string"
1642
+ },
1643
+ "to": {
1644
+ "type": "string"
1645
+ },
1646
+ "type": {
1647
+ "type": "string",
1648
+ "enum": [
1649
+ "many-to-one",
1650
+ "one-to-many",
1651
+ "one-to-one"
1652
+ ]
1653
+ }
1654
+ },
1655
+ "required": [
1656
+ "from",
1657
+ "to",
1658
+ "type"
1659
+ ],
1660
+ "additionalProperties": false
1661
+ },
1662
+ "CalculatedField": {
1663
+ "type": "object",
1664
+ "properties": {
1665
+ "name": {
1666
+ "type": "string"
1667
+ },
1668
+ "expression": {
1669
+ "type": "string"
1670
+ },
1671
+ "returnType": {
1672
+ "type": "string",
1673
+ "enum": [
1674
+ "string",
1675
+ "number",
1676
+ "date",
1677
+ "boolean"
1678
+ ]
1679
+ }
1680
+ },
1681
+ "required": [
1682
+ "name",
1683
+ "expression",
1684
+ "returnType"
1685
+ ],
1686
+ "additionalProperties": false
1687
+ },
1688
+ "ManualField": {
1689
+ "type": "object",
1690
+ "properties": {
1691
+ "id": {
1692
+ "type": "string"
1693
+ },
1694
+ "name": {
1695
+ "type": "string"
1696
+ },
1697
+ "label": {
1698
+ "type": "string"
1699
+ },
1700
+ "type": {
1701
+ "$ref": "#/definitions/FieldType"
1702
+ },
1703
+ "dataSourceAlias": {
1704
+ "type": "string"
1705
+ },
1706
+ "expression": {
1707
+ "type": "string"
1708
+ },
1709
+ "format": {
1710
+ "type": "string"
1711
+ },
1712
+ "defaultValue": {},
1713
+ "createdAt": {
1714
+ "type": "string"
1715
+ }
1716
+ },
1717
+ "required": [
1718
+ "id",
1719
+ "name",
1720
+ "label",
1721
+ "type",
1722
+ "dataSourceAlias",
1723
+ "createdAt"
1724
+ ],
1725
+ "additionalProperties": false
1726
+ },
1727
+ "DataSourceRelation": {
1728
+ "type": "object",
1729
+ "properties": {
1730
+ "id": {
1731
+ "type": "string"
1732
+ },
1733
+ "fromDataSource": {
1734
+ "type": "string"
1735
+ },
1736
+ "fromField": {
1737
+ "type": "string"
1738
+ },
1739
+ "toDataSource": {
1740
+ "type": "string"
1741
+ },
1742
+ "toField": {
1743
+ "type": "string"
1744
+ },
1745
+ "joinType": {
1746
+ "type": "string",
1747
+ "enum": [
1748
+ "inner",
1749
+ "left",
1750
+ "right",
1751
+ "cross"
1752
+ ]
1753
+ },
1754
+ "label": {
1755
+ "type": "string"
1756
+ }
1757
+ },
1758
+ "required": [
1759
+ "id",
1760
+ "fromDataSource",
1761
+ "fromField",
1762
+ "toDataSource",
1763
+ "toField",
1764
+ "joinType"
1765
+ ],
1766
+ "additionalProperties": false
1767
+ },
1768
+ "ReportParameter": {
1769
+ "type": "object",
1770
+ "properties": {
1771
+ "id": {
1772
+ "type": "string"
1773
+ },
1774
+ "name": {
1775
+ "type": "string"
1776
+ },
1777
+ "label": {
1778
+ "type": "string"
1779
+ },
1780
+ "type": {
1781
+ "$ref": "#/definitions/ParameterType"
1782
+ },
1783
+ "defaultValue": {},
1784
+ "required": {
1785
+ "type": "boolean"
1786
+ },
1787
+ "options": {
1788
+ "type": "array",
1789
+ "items": {
1790
+ "type": "object",
1791
+ "properties": {
1792
+ "label": {
1793
+ "type": "string"
1794
+ },
1795
+ "value": {}
1796
+ },
1797
+ "required": [
1798
+ "label",
1799
+ "value"
1800
+ ],
1801
+ "additionalProperties": false
1802
+ }
1803
+ },
1804
+ "description": {
1805
+ "type": "string"
1806
+ }
1807
+ },
1808
+ "required": [
1809
+ "id",
1810
+ "name",
1811
+ "label",
1812
+ "type",
1813
+ "required"
1814
+ ],
1815
+ "additionalProperties": false
1816
+ },
1817
+ "ParameterType": {
1818
+ "type": "string",
1819
+ "enum": [
1820
+ "string",
1821
+ "number",
1822
+ "date",
1823
+ "boolean",
1824
+ "select"
1825
+ ]
1826
+ },
1827
+ "ReportVariable": {
1828
+ "type": "object",
1829
+ "properties": {
1830
+ "id": {
1831
+ "type": "string"
1832
+ },
1833
+ "name": {
1834
+ "type": "string"
1835
+ },
1836
+ "expression": {
1837
+ "type": "string"
1838
+ },
1839
+ "aggregate": {
1840
+ "type": "string",
1841
+ "enum": [
1842
+ "sum",
1843
+ "count",
1844
+ "avg",
1845
+ "min",
1846
+ "max",
1847
+ "none"
1848
+ ]
1849
+ },
1850
+ "resetOn": {
1851
+ "type": "string",
1852
+ "enum": [
1853
+ "report",
1854
+ "group"
1855
+ ]
1856
+ }
1857
+ },
1858
+ "required": [
1859
+ "id",
1860
+ "name",
1861
+ "expression",
1862
+ "aggregate",
1863
+ "resetOn"
1864
+ ],
1865
+ "additionalProperties": false,
1866
+ "description": "A stateful accumulator evaluated once per data row as the report is generated — the \"running total\" of Crystal Reports or the Total object of Stimulsoft.\n\nIts value is snapshotted onto each band instance at the moment that band prints, so a DataBand sees the total *including* its own row, a GroupFooter sees its whole group, and a ReportFooter sees everything.\n\nNote: `resetOn: 'page'` is deliberately NOT supported. Page boundaries are only decided after the band stream has been generated, so a page-scoped accumulator would need a second, separate mechanism; it is rejected at author time rather than silently producing a report-scoped total."
1867
+ },
1868
+ "ExpressionField": {
1869
+ "type": "object",
1870
+ "properties": {
1871
+ "id": {
1872
+ "type": "string"
1873
+ },
1874
+ "name": {
1875
+ "type": "string"
1876
+ },
1877
+ "expression": {
1878
+ "type": "string"
1879
+ },
1880
+ "returnType": {
1881
+ "type": "string",
1882
+ "enum": [
1883
+ "string",
1884
+ "number",
1885
+ "date",
1886
+ "boolean"
1887
+ ]
1888
+ }
1889
+ },
1890
+ "required": [
1891
+ "id",
1892
+ "name",
1893
+ "expression",
1894
+ "returnType"
1895
+ ],
1896
+ "additionalProperties": false
1897
+ },
1898
+ "NexaNamedStyle": {
1899
+ "type": "object",
1900
+ "properties": {
1901
+ "id": {
1902
+ "type": "string"
1903
+ },
1904
+ "name": {
1905
+ "type": "string"
1906
+ },
1907
+ "style": {
1908
+ "$ref": "#/definitions/NexaElementStyle"
1909
+ }
1910
+ },
1911
+ "required": [
1912
+ "id",
1913
+ "name",
1914
+ "style"
1915
+ ],
1916
+ "additionalProperties": false,
1917
+ "description": "A named, reusable style. Elements point at one with `styleRef` instead of repeating the same properties, so changing the style restyles every element that uses it."
1918
+ }
1919
+ }
1920
+ }