@cxtms/cx-schema 1.9.67 → 1.9.241

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 (81) hide show
  1. package/dist/cli.js +43 -9
  2. package/dist/cli.js.map +1 -1
  3. package/package.json +1 -1
  4. package/schemas/actions/all.json +5 -1
  5. package/schemas/actions/reload.json +17 -0
  6. package/schemas/actions/setSessionStorage.json +38 -0
  7. package/schemas/actions/sound.json +39 -0
  8. package/schemas/actions/vibrate.json +48 -0
  9. package/schemas/components/avatar.json +1 -0
  10. package/schemas/components/badge.json +79 -0
  11. package/schemas/components/barcodeScanner.json +28 -0
  12. package/schemas/components/camera.json +177 -0
  13. package/schemas/components/card.json +78 -0
  14. package/schemas/components/dashboard-widget.json +39 -0
  15. package/schemas/components/dashboard.json +46 -0
  16. package/schemas/components/dataGrid.json +15 -0
  17. package/schemas/components/field-collection.json +86 -2
  18. package/schemas/components/field.json +39 -4
  19. package/schemas/components/form.json +4 -0
  20. package/schemas/components/index.json +17 -1
  21. package/schemas/components/infoLine.json +1 -0
  22. package/schemas/components/map.json +167 -0
  23. package/schemas/components/module.json +32 -0
  24. package/schemas/components/planner.json +1 -0
  25. package/schemas/components/progressBar.json +1 -0
  26. package/schemas/components/timeline.json +216 -74
  27. package/schemas/components/timelineGrid.json +5 -1
  28. package/schemas/fields/autocomplete-googleplaces.json +2 -2
  29. package/schemas/fields/datetime.json +2 -2
  30. package/schemas/fields/index.json +4 -0
  31. package/schemas/fields/number-select.json +88 -0
  32. package/schemas/fields/rangedatetime.json +10 -2
  33. package/schemas/fields/select-async.json +2 -2
  34. package/schemas/fields/toggle.json +91 -0
  35. package/schemas/schema.graphql +11016 -12171
  36. package/schemas/schemas.json +131 -4
  37. package/schemas/workflows/flow/entity.json +3 -1
  38. package/schemas/workflows/input.json +1 -1
  39. package/schemas/workflows/output.json +1 -1
  40. package/schemas/workflows/tasks/all.json +9 -0
  41. package/schemas/workflows/tasks/commodity.json +8 -0
  42. package/schemas/workflows/tasks/contact-address.json +25 -0
  43. package/schemas/workflows/tasks/dispatch-routes.json +64 -0
  44. package/schemas/workflows/tasks/edi.json +15 -0
  45. package/schemas/workflows/tasks/export.json +21 -0
  46. package/schemas/workflows/tasks/httpRequest.json +4 -0
  47. package/schemas/workflows/tasks/import.json +5 -0
  48. package/schemas/workflows/tasks/order-move.json +38 -0
  49. package/schemas/workflows/tasks/order.json +6 -0
  50. package/schemas/workflows/tasks/organization-config.json +101 -0
  51. package/schemas/workflows/tasks/tracking-event.json +11 -3
  52. package/schemas/workflows/tasks/workflow-execute.json +4 -0
  53. package/schemas/workflows/variable.json +2 -2
  54. package/schemas/workflows/workflow.json +39 -2
  55. package/skills/cxtms-developer/SKILL.md +5 -2
  56. package/skills/cxtms-developer/ref-cli-auth.md +2 -0
  57. package/skills/cxtms-developer/ref-entity-commodity.md +41 -5
  58. package/skills/cxtms-developer/ref-entity-contact.md +46 -0
  59. package/skills/cxtms-developer/ref-entity-dispatch-routing.md +195 -0
  60. package/skills/cxtms-developer/ref-entity-geography.md +26 -1
  61. package/skills/cxtms-developer/ref-entity-job.md +6 -2
  62. package/skills/cxtms-developer/ref-entity-order-sub.md +1 -1
  63. package/skills/cxtms-developer/ref-entity-order.md +36 -3
  64. package/skills/cxtms-developer/ref-entity-organization.md +4 -2
  65. package/skills/cxtms-developer/ref-entity-shared.md +79 -3
  66. package/skills/cxtms-developer/ref-graphql-query.md +246 -4
  67. package/skills/cxtms-module-builder/SKILL.md +33 -6
  68. package/skills/cxtms-module-builder/ref-components-data.md +85 -0
  69. package/skills/cxtms-module-builder/ref-components-display.md +282 -8
  70. package/skills/cxtms-module-builder/ref-components-forms.md +386 -21
  71. package/skills/cxtms-module-builder/ref-components-interactive.md +2 -0
  72. package/skills/cxtms-module-builder/ref-components-layout.md +288 -29
  73. package/skills/cxtms-module-builder/ref-components-specialized.md +168 -20
  74. package/skills/cxtms-workflow-builder/SKILL.md +45 -6
  75. package/skills/cxtms-workflow-builder/ref-entity.md +100 -4
  76. package/skills/cxtms-workflow-builder/ref-expressions-ncalc.md +35 -2
  77. package/skills/cxtms-workflow-builder/ref-expressions-template.md +15 -1
  78. package/skills/cxtms-workflow-builder/ref-flow.md +6 -1
  79. package/skills/cxtms-workflow-builder/ref-query.md +16 -0
  80. package/skills/cxtms-workflow-builder/ref-utilities.md +32 -2
  81. package/templates/workflow-public-api.yaml +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cxtms/cx-schema",
3
- "version": "1.9.67",
3
+ "version": "1.9.241",
4
4
  "description": "Schema validation package for CXTMS YAML modules",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -7,12 +7,14 @@
7
7
  { "$ref": "navigateBack.json" },
8
8
  { "$ref": "navigateBackOrClose.json" },
9
9
  { "$ref": "refresh.json" },
10
+ { "$ref": "reload.json" },
10
11
  { "$ref": "notification.json" },
11
12
  { "$ref": "confirm.json" },
12
13
  { "$ref": "mutation.json" },
13
14
  { "$ref": "query.json" },
14
15
  { "$ref": "setFields.json" },
15
16
  { "$ref": "setStore.json" },
17
+ { "$ref": "setSessionStorage.json" },
16
18
  { "$ref": "validateForm.json" },
17
19
  { "$ref": "dialog.json" },
18
20
  { "$ref": "workflow.json" },
@@ -22,6 +24,8 @@
22
24
  { "$ref": "consoleLog.json" },
23
25
  { "$ref": "openBarcodeScanner.json" },
24
26
  { "$ref": "resetDirtyState.json" },
25
- { "$ref": "clipboard.json" }
27
+ { "$ref": "clipboard.json" },
28
+ { "$ref": "sound.json" },
29
+ { "$ref": "vibrate.json" }
26
30
  ]
27
31
  }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "reload Action",
4
+ "type": "object",
5
+ "properties": {
6
+ "reload": {
7
+ "description": "Refetches and replaces one or more forms from their initialValues source",
8
+ "oneOf": [
9
+ { "type": "string" },
10
+ { "type": "array", "items": { "type": "string" }, "minItems": 1 }
11
+ ],
12
+ "x-examples": ["orderForm", ["orderForm", "orderLinesForm"]]
13
+ }
14
+ },
15
+ "required": ["reload"],
16
+ "additionalProperties": false
17
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "setSessionStorage Action",
4
+ "type": "object",
5
+ "properties": {
6
+ "setSessionStorage": {
7
+ "type": "object",
8
+ "description": "Browser sessionStorage value to set for the current tab",
9
+ "required": ["key", "value"],
10
+ "properties": {
11
+ "key": {
12
+ "type": "string",
13
+ "description": "Unscoped sessionStorage key"
14
+ },
15
+ "value": {
16
+ "description": "Value to store. Template expressions are resolved before writing."
17
+ }
18
+ },
19
+ "additionalProperties": false,
20
+ "x-examples": [
21
+ { "key": "isDevMode", "value": "true" },
22
+ { "key": "activeWorkspace", "value": "{{ workspaceId }}" }
23
+ ]
24
+ },
25
+ "onSuccess": {
26
+ "type": "array",
27
+ "description": "Actions to execute after sessionStorage is updated",
28
+ "items": { "$ref": "all.json" }
29
+ },
30
+ "onError": {
31
+ "type": "array",
32
+ "description": "Actions to execute if sessionStorage update fails",
33
+ "items": { "$ref": "all.json" }
34
+ }
35
+ },
36
+ "required": ["setSessionStorage"],
37
+ "additionalProperties": false
38
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "sound Action",
4
+ "type": "object",
5
+ "properties": {
6
+ "sound": {
7
+ "oneOf": [
8
+ {
9
+ "type": "string",
10
+ "enum": ["success", "error", "warning", "scan"]
11
+ },
12
+ {
13
+ "type": "object",
14
+ "properties": {
15
+ "type": {
16
+ "type": "string",
17
+ "enum": ["success", "error", "warning", "scan"],
18
+ "description": "Feedback tone preset. Defaults to success."
19
+ },
20
+ "volume": {
21
+ "type": "number",
22
+ "minimum": 0,
23
+ "maximum": 1,
24
+ "description": "Tone volume from 0 to 1. Defaults to 1."
25
+ }
26
+ },
27
+ "additionalProperties": false
28
+ }
29
+ ],
30
+ "description": "Play a short browser-generated feedback tone. Unsupported browsers resolve without failing the action chain.",
31
+ "x-examples": [
32
+ "success",
33
+ { "type": "scan", "volume": 0.5 }
34
+ ]
35
+ }
36
+ },
37
+ "required": ["sound"],
38
+ "additionalProperties": false
39
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "vibrate Action",
4
+ "type": "object",
5
+ "properties": {
6
+ "vibrate": {
7
+ "oneOf": [
8
+ {
9
+ "type": "string",
10
+ "enum": ["success", "error", "warning", "light", "medium", "heavy"]
11
+ },
12
+ {
13
+ "type": "object",
14
+ "properties": {
15
+ "type": {
16
+ "type": "string",
17
+ "enum": ["success", "error", "warning", "light", "medium", "heavy"],
18
+ "description": "Haptic preset. Defaults to success."
19
+ },
20
+ "pattern": {
21
+ "type": "array",
22
+ "items": {
23
+ "type": "number",
24
+ "minimum": 0
25
+ },
26
+ "minItems": 1,
27
+ "description": "Vibration API pattern in milliseconds: even indexes vibrate, odd indexes pause."
28
+ },
29
+ "duration": {
30
+ "type": "number",
31
+ "minimum": 0,
32
+ "description": "Single vibration duration in milliseconds."
33
+ }
34
+ },
35
+ "additionalProperties": false
36
+ }
37
+ ],
38
+ "description": "Trigger device haptic feedback through navigator.vibrate when supported. Unsupported devices resolve without failing the action chain.",
39
+ "x-examples": [
40
+ "success",
41
+ { "type": "light" },
42
+ { "pattern": [50, 60, 50] }
43
+ ]
44
+ }
45
+ },
46
+ "required": ["vibrate"],
47
+ "additionalProperties": false
48
+ }
@@ -0,0 +1 @@
1
+ {"$schema":"http://json-schema.org/draft-07/schema#","title":"Avatar Component","type":"object","required":["component"],"properties":{"component":{"const":"avatar"},"name":{"type":"string"},"props":{"type":"object","properties":{"src":{},"firstName":{},"lastName":{},"name":{},"email":{},"colorSeed":{},"color":{"type":"string"},"bgcolor":{"type":"string"},"textColor":{"type":"string"},"size":{"type":["number","string"]},"skin":{"type":"string"},"variant":{"type":"string"},"tooltip":{},"onClick":{"$ref":"../schemas.json#/definitions/actionsList"}},"additionalProperties":true}},"additionalProperties":true}
@@ -0,0 +1,79 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "badge-component",
4
+ "title": "Badge Component",
5
+ "description": "Colored chip/badge with template-parsed label, optional color lookup key, dot indicator, and optional click actions.",
6
+ "type": "object",
7
+ "required": ["component", "props"],
8
+ "properties": {
9
+ "component": {
10
+ "type": "string",
11
+ "const": "badge",
12
+ "description": "Component type identifier"
13
+ },
14
+ "name": {
15
+ "type": "string",
16
+ "description": "Unique identifier for the badge component"
17
+ },
18
+ "props": {
19
+ "type": "object",
20
+ "required": ["label"],
21
+ "properties": {
22
+ "label": {
23
+ "type": ["string", "object"],
24
+ "description": "Badge text. Template-parsed with store values, component variables, and form values.",
25
+ "x-example": "{{ status }}"
26
+ },
27
+ "colorKey": {
28
+ "type": ["string", "object"],
29
+ "description": "Optional color lookup key. Template-parsed with store values, component variables, and form values. Defaults to the normalized label.",
30
+ "x-example": "{{ statusCode }}"
31
+ },
32
+ "color": { "type": ["string", "object"], "description": "Template-parsed seed color, normally an organization-defined hex." },
33
+ "variant": { "type": ["string", "object"], "description": "Semantic badge variant." },
34
+ "size": { "type": "string", "enum": ["xs", "sm", "md"], "default": "sm" },
35
+ "appearance": { "type": "string", "enum": ["soft", "outline", "solid", "ghost"], "default": "soft" },
36
+ "uppercase": { "type": "boolean", "default": false },
37
+ "dot": { "type": "boolean", "default": false },
38
+ "icon": { "type": "string" },
39
+ "maxWidth": { "type": ["number", "string"] },
40
+ "options": {
41
+ "type": "object",
42
+ "properties": {
43
+ "colors": {
44
+ "type": "object",
45
+ "description": "Map of color keys to text/background/dot colors. Include a default entry for fallback rendering.",
46
+ "additionalProperties": { "oneOf": [{ "type": "string" }, { "type": "object", "additionalProperties": true }] }
47
+ }
48
+ },
49
+ "additionalProperties": true
50
+ },
51
+ "onClick": {
52
+ "type": "array",
53
+ "description": "Actions to dispatch when clicked. Makes the badge interactive and stops event propagation.",
54
+ "items": {
55
+ "type": "object"
56
+ }
57
+ }
58
+ },
59
+ "additionalProperties": true
60
+ }
61
+ },
62
+ "additionalProperties": true,
63
+ "x-examples": {
64
+ "statusBadge": {
65
+ "component": "badge",
66
+ "name": "statusBadge",
67
+ "props": {
68
+ "label": "{{ status }}",
69
+ "colorKey": "{{ status }}",
70
+ "options": {
71
+ "colors": {
72
+ "Delivered": { "label": "#1b5e20", "bgcolor": "#e8f5e9", "dot": "#4caf50" },
73
+ "default": { "label": "#5f370e", "bgcolor": "#fff8e1", "dot": "#ff9800" }
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
@@ -16,8 +16,36 @@
16
16
  "properties": {
17
17
  "minBarcodeLength": {
18
18
  "type": "integer",
19
+ "minimum": 1,
19
20
  "description": "Minimum length for recognized barcodes"
20
21
  },
22
+ "deduplicate": {
23
+ "type": "boolean",
24
+ "default": true,
25
+ "description": "Suppress repeated reads of the same barcode"
26
+ },
27
+ "scanDelayMs": {
28
+ "type": "number",
29
+ "minimum": 0,
30
+ "default": 1000,
31
+ "description": "Per-code deduplication window in milliseconds"
32
+ },
33
+ "minScanIntervalMs": {
34
+ "type": "number",
35
+ "minimum": 0,
36
+ "default": 0,
37
+ "description": "Minimum interval in milliseconds between accepted scans"
38
+ },
39
+ "continuous": {
40
+ "type": "boolean",
41
+ "default": true,
42
+ "description": "Allow more than one accepted scan"
43
+ },
44
+ "maxBarcodes": {
45
+ "type": "integer",
46
+ "minimum": 1,
47
+ "description": "Maximum number of accepted scans in continuous mode"
48
+ },
21
49
  "onScan": {
22
50
  "$ref": "../schemas.json#/definitions/actionsList",
23
51
  "description": "Actions to execute when a barcode is successfully scanned"
@@ -0,0 +1,177 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Camera Component",
4
+ "type": "object",
5
+ "properties": {
6
+ "component": {
7
+ "type": "string",
8
+ "const": "camera"
9
+ },
10
+ "name": {
11
+ "type": "string",
12
+ "description": "Unique name identifier for the camera instance"
13
+ },
14
+ "props": {
15
+ "type": "object",
16
+ "properties": {
17
+ "width": {
18
+ "type": "number",
19
+ "description": "Viewport width in pixels"
20
+ },
21
+ "height": {
22
+ "type": "number",
23
+ "description": "Viewport height in pixels"
24
+ },
25
+ "facing": {
26
+ "type": "string",
27
+ "enum": ["front", "back"],
28
+ "default": "back",
29
+ "description": "Which camera to use"
30
+ },
31
+ "mode": {
32
+ "type": "string",
33
+ "enum": ["picture", "scanner", "hybrid"],
34
+ "description": "Camera mode. Scanner and hybrid modes are supported by the mobile renderer.",
35
+ "default": "picture"
36
+ },
37
+ "scanner": {
38
+ "type": "object",
39
+ "description": "Scanner settings used by scanner and hybrid modes.",
40
+ "properties": {
41
+ "recognize": {
42
+ "type": "array",
43
+ "items": { "type": "string", "enum": ["barcode", "vin", "container"] },
44
+ "uniqueItems": true,
45
+ "default": ["barcode"],
46
+ "description": "Mobile recognition modes. VIN and container use native OCR with checksum validation."
47
+ },
48
+ "autoCapture": {
49
+ "type": "boolean",
50
+ "default": false,
51
+ "description": "Mobile: capture a proof photo immediately after accepting a scan."
52
+ },
53
+ "barcodeTypes": { "type": "array", "items": { "type": "string" } },
54
+ "minBarcodeLength": { "type": "integer", "minimum": 1 },
55
+ "continuous": { "type": "boolean" },
56
+ "deduplicate": { "type": "boolean" },
57
+ "scanDelayMs": { "type": "number", "minimum": 0 },
58
+ "minScanIntervalMs": { "type": "number", "minimum": 0 },
59
+ "maxBarcodes": { "type": "integer", "minimum": 1 }
60
+ },
61
+ "additionalProperties": true
62
+ },
63
+ "enableTorch": {
64
+ "type": "boolean",
65
+ "description": "Enable the device flashlight/torch during streaming"
66
+ },
67
+ "zoom": {
68
+ "type": "number",
69
+ "description": "Initial zoom factor (device capabilities determine actual range)"
70
+ },
71
+ "autofocus": {
72
+ "type": "string",
73
+ "enum": ["on", "off"],
74
+ "description": "Controls autofocus. Omit to let the browser decide."
75
+ },
76
+ "mirror": {
77
+ "type": "boolean",
78
+ "description": "Horizontally flip the video preview. Defaults to true for front camera, false for back."
79
+ },
80
+ "picture": {
81
+ "type": "object",
82
+ "description": "Capture format and quality settings",
83
+ "properties": {
84
+ "quality": {
85
+ "type": "number",
86
+ "minimum": 0,
87
+ "maximum": 1,
88
+ "description": "JPEG/WebP quality from 0 to 1"
89
+ },
90
+ "format": {
91
+ "type": "string",
92
+ "enum": ["jpeg", "png", "webp"],
93
+ "default": "jpeg",
94
+ "description": "Output image format"
95
+ },
96
+ "base64": {
97
+ "type": "boolean",
98
+ "description": "If true, onCapture receives a base64 string; otherwise a Blob"
99
+ }
100
+ }
101
+ },
102
+ "onCapture": {
103
+ "$ref": "../schemas.json#/definitions/actionsList",
104
+ "description": "Actions fired after a successful capture. Receives { data: string|Blob, width: number, height: number }"
105
+ },
106
+ "onScan": {
107
+ "$ref": "../schemas.json#/definitions/actionsList",
108
+ "description": "Actions fired after an accepted scan. Receives { data, format, type } and optional proof-photo fields when scanner.autoCapture is enabled."
109
+ },
110
+ "onClose": {
111
+ "$ref": "../schemas.json#/definitions/actionsList",
112
+ "description": "Actions fired when the camera stream stops"
113
+ },
114
+ "onReady": {
115
+ "$ref": "../schemas.json#/definitions/actionsList",
116
+ "description": "Actions fired once the camera is initialized and streaming. Receives { facing, mode: 'picture' }"
117
+ },
118
+ "onPermissionDenied": {
119
+ "$ref": "../schemas.json#/definitions/actionsList",
120
+ "description": "Actions fired when camera permission is denied. Receives { permission: 'camera' }"
121
+ },
122
+ "onError": {
123
+ "$ref": "../schemas.json#/definitions/actionsList",
124
+ "description": "Actions fired on camera errors. Receives { message: string, code: string }"
125
+ }
126
+ }
127
+ }
128
+ },
129
+ "required": ["component"],
130
+ "x-examples": [
131
+ {
132
+ "component": "camera",
133
+ "props": {
134
+ "width": 1024,
135
+ "height": 768,
136
+ "facing": "back",
137
+ "onCapture": [
138
+ {
139
+ "fileUpload": {
140
+ "file": "{{ result.data }}",
141
+ "name": "capture",
142
+ "onSuccess": [
143
+ { "setStore": { "imageUrl": "{{ result.url }}" } }
144
+ ]
145
+ }
146
+ }
147
+ ],
148
+ "onClose": [
149
+ { "navigateBackOrClose": { "result": "camera_closed" } }
150
+ ]
151
+ }
152
+ },
153
+ {
154
+ "component": "camera",
155
+ "props": {
156
+ "facing": "front",
157
+ "mirror": true,
158
+ "picture": {
159
+ "format": "jpeg",
160
+ "quality": 0.85,
161
+ "base64": true
162
+ },
163
+ "onCapture": [
164
+ { "setStore": { "selfieData": "{{ result.data }}" } }
165
+ ],
166
+ "onPermissionDenied": [
167
+ {
168
+ "notification": {
169
+ "message": "Camera access is required to take photos.",
170
+ "variant": "warning"
171
+ }
172
+ }
173
+ ]
174
+ }
175
+ }
176
+ ]
177
+ }
@@ -28,6 +28,84 @@
28
28
  "type": "string",
29
29
  "description": "CSS classes for styling"
30
30
  },
31
+ "options": {
32
+ "type": "object",
33
+ "description": "Card visual and layout options",
34
+ "properties": {
35
+ "variant": {
36
+ "type": "string",
37
+ "enum": ["elevation", "outlined"],
38
+ "description": "MUI Card variant"
39
+ },
40
+ "elevation": {
41
+ "type": "number",
42
+ "description": "Shadow depth when variant is elevation"
43
+ },
44
+ "sx": {
45
+ "type": "object",
46
+ "description": "MUI sx styles applied to the card root",
47
+ "additionalProperties": true
48
+ },
49
+ "style": {
50
+ "type": "object",
51
+ "description": "Theme-aware CSSProperties applied after sx",
52
+ "properties": {
53
+ "light": {
54
+ "type": "object",
55
+ "description": "Card root styles for light mode",
56
+ "additionalProperties": true
57
+ },
58
+ "dark": {
59
+ "type": "object",
60
+ "description": "Card root styles for dark mode",
61
+ "additionalProperties": true
62
+ }
63
+ },
64
+ "additionalProperties": false
65
+ },
66
+ "bgcolor": {
67
+ "type": "string",
68
+ "description": "Background color"
69
+ },
70
+ "color": {
71
+ "type": "string",
72
+ "description": "Text color"
73
+ },
74
+ "className": {
75
+ "type": "string",
76
+ "description": "CSS classes for the card root"
77
+ },
78
+ "header": {
79
+ "type": "object",
80
+ "description": "Card header configuration",
81
+ "additionalProperties": true
82
+ },
83
+ "actions": {
84
+ "type": "object",
85
+ "description": "Card actions configuration",
86
+ "additionalProperties": true
87
+ },
88
+ "disableContentWrapper": {
89
+ "type": "boolean",
90
+ "description": "Render children directly without CardContent"
91
+ },
92
+ "contentSx": {
93
+ "type": "object",
94
+ "description": "MUI sx styles applied to CardContent",
95
+ "additionalProperties": true
96
+ },
97
+ "contentClassName": {
98
+ "type": "string",
99
+ "description": "CSS class applied to CardContent"
100
+ },
101
+ "contentProps": {
102
+ "type": "object",
103
+ "description": "Additional CardContent props",
104
+ "additionalProperties": true
105
+ }
106
+ },
107
+ "additionalProperties": true
108
+ },
31
109
  "toolbar": {
32
110
  "type": "array",
33
111
  "description": "Toolbar components",
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Dashboard Widget Component",
4
+ "type": "object",
5
+ "properties": {
6
+ "component": { "type": "string", "const": "dashboard-widget" },
7
+ "name": { "type": "string", "description": "Unique widget name within the parent dashboard" },
8
+ "inputs": { "type": "object" },
9
+ "props": {
10
+ "type": "object",
11
+ "properties": {
12
+ "options": {
13
+ "type": "object",
14
+ "properties": {
15
+ "row": { "type": "number", "default": 1 },
16
+ "col": { "type": "number", "default": 1 },
17
+ "rowSpan": { "type": "number", "default": 1 },
18
+ "colSpan": { "type": "number", "default": 1 },
19
+ "title": { "type": "string" },
20
+ "showHeader": { "type": "boolean", "default": true },
21
+ "className": { "type": "string" },
22
+ "minRowSpan": { "type": "number", "default": 1 },
23
+ "maxRowSpan": { "type": "number" },
24
+ "minColSpan": { "type": "number", "default": 1 },
25
+ "maxColSpan": { "type": "number" },
26
+ "isEditMode": { "type": "boolean" },
27
+ "allowScroll": { "type": "boolean", "default": false }
28
+ },
29
+ "additionalProperties": true
30
+ },
31
+ "isHidden": { "$ref": "../schemas.json#/definitions/templateExpression" }
32
+ },
33
+ "additionalProperties": true
34
+ },
35
+ "children": { "$ref": "../schemas.json#/definitions/componentChildren" }
36
+ },
37
+ "required": ["component", "name"],
38
+ "additionalProperties": false
39
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Dashboard Component",
4
+ "type": "object",
5
+ "properties": {
6
+ "component": { "type": "string", "const": "dashboard" },
7
+ "name": { "type": "string", "description": "Unique dashboard name; used in saved layout setting keys" },
8
+ "inputs": { "type": "object" },
9
+ "props": {
10
+ "type": "object",
11
+ "properties": {
12
+ "toolbar": {
13
+ "type": "array",
14
+ "description": "Header controls whose values are shared with dashboard widgets",
15
+ "items": { "$ref": "../schemas.json#/definitions/component" }
16
+ },
17
+ "options": {
18
+ "type": "object",
19
+ "properties": {
20
+ "rows": { "type": "number", "default": 12 },
21
+ "columns": { "type": "number", "default": 12 },
22
+ "gridGap": { "type": "number", "default": 8 },
23
+ "responsive": { "type": "boolean", "default": false },
24
+ "allowEdit": { "type": "boolean", "default": false },
25
+ "showGridLines": { "type": "boolean", "default": true },
26
+ "autoSave": { "type": "boolean", "default": false, "description": "Persist layout changes to UserSettings automatically" },
27
+ "title": { "type": "string" },
28
+ "minHeight": { "oneOf": [{ "type": "string" }, { "type": "number" }] },
29
+ "maxHeight": { "oneOf": [{ "type": "string" }, { "type": "number" }] },
30
+ "height": { "oneOf": [{ "type": "string" }, { "type": "number" }] }
31
+ },
32
+ "additionalProperties": true
33
+ },
34
+ "isHidden": { "$ref": "../schemas.json#/definitions/templateExpression" }
35
+ },
36
+ "additionalProperties": true
37
+ },
38
+ "children": {
39
+ "type": "array",
40
+ "description": "Dashboard widgets",
41
+ "items": { "$ref": "../schemas.json#/definitions/component" }
42
+ }
43
+ },
44
+ "required": ["component", "name"],
45
+ "additionalProperties": false
46
+ }