cxtms 1.9.251 → 1.9.253

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cxtms",
3
- "version": "1.9.251",
3
+ "version": "1.9.253",
4
4
  "description": "Schema validation package for CXTMS YAML modules",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -293,6 +293,13 @@
293
293
  }
294
294
  ]
295
295
  },
296
+ "itemHeaderFields": {
297
+ "oneOf": [
298
+ { "type": "object" },
299
+ { "type": "array", "items": { "type": "object" } }
300
+ ],
301
+ "description": "Interactive components rendered in the always-visible accordion summary. Uses the same item/index/collection variables and field-name prefixing as itemTemplate."
302
+ },
296
303
  "groupTemplate": {
297
304
  "type": "object",
298
305
  "description": "Custom template for group headers",
@@ -419,7 +426,9 @@
419
426
  "showExpandAll": { "type": "boolean", "default": true },
420
427
  "collapseNested": { "type": "boolean", "default": true },
421
428
  "autoItemTitle": { "type": "boolean", "default": true },
422
- "density": { "type": "string", "enum": ["compact", "comfortable"], "default": "compact" }
429
+ "density": { "type": "string", "enum": ["compact", "comfortable"], "default": "compact" },
430
+ "rowVariant": { "type": "string", "enum": ["card", "flat"], "default": "card", "description": "Row chrome: card uses a bordered panel; flat uses dividers while retaining the open-row accent." },
431
+ "nestedVariant": { "type": "string", "enum": ["panel", "rail", "none"], "default": "panel", "description": "Nested collection chrome: panel uses a box, rail uses a left border and indent, and none removes wrapper chrome." }
423
432
  }
424
433
  }
425
434
  },
@@ -135,7 +135,7 @@
135
135
  },
136
136
  "defaultData": {
137
137
  "type": "array",
138
- "description": "Default data imports loaded with the module. Supported entities include reference/master data such as Terminal; Terminal rows match by Name unless keys are provided.",
138
+ "description": "Default data imports loaded with the module. Supported entities include reference/master data such as Terminal and EquipmentStatus; EquipmentStatus rows match by StatusName unless keys are provided.",
139
139
  "items": {
140
140
  "type": "object",
141
141
  "properties": {
@@ -1 +1 @@
1
- {"$schema":"http://json-schema.org/draft-07/schema#","title":"Planner Component","type":"object","required":["component","props"],"properties":{"component":{"const":"planner"},"name":{"type":"string"},"props":{"type":"object","required":["queries","rows","columns","itemTemplate"],"properties":{"height":{},"refreshHandler":{"type":"string"},"debug":{"type":"boolean"},"options":{"type":"object","properties":{"enableVirtualization":{"type":"boolean"},"virtualizeThreshold":{"type":"number"},"estimatedRowHeight":{"type":"number"}},"additionalProperties":true},"queries":{"type":"array","minItems":1,"items":{"type":"object","required":["name","query"],"properties":{"name":{"type":"string"},"query":{"type":"object"},"itemsPath":{"type":"string"},"parentAs":{"type":"string"},"mapping":{"type":"object"}},"additionalProperties":true}},"rows":{"type":"object","required":["groupBy","headerWidth"],"properties":{"groupBy":{"type":"string"},"fromQuery":{"type":"string"},"key":{"type":"string"},"label":{},"orderBy":{"type":"array"},"unassigned":{"type":"object"},"headerWidth":{"type":"number"}},"additionalProperties":true},"columns":{"type":"object","required":["width"],"properties":{"orderBy":{"type":"array"},"appendEmpty":{"type":"boolean","description":"Keep one trailing empty slot beyond the largest group."},"label":{},"width":{"type":"number"}},"additionalProperties":true},"rowHeaderTemplate":{"$ref":"../schemas.json#/definitions/component"},"itemTemplate":{"$ref":"../schemas.json#/definitions/component"},"emptyCellTemplate":{"$ref":"../schemas.json#/definitions/component"},"summaryComponent":{"$ref":"../schemas.json#/definitions/component"},"emptyStateTemplate":{"$ref":"../schemas.json#/definitions/component"},"itemAccent":{},"events":{"type":"object","additionalProperties":{"$ref":"../schemas.json#/definitions/actionsList"}}},"additionalProperties":true}},"additionalProperties":true}
1
+ {"$schema":"http://json-schema.org/draft-07/schema#","title":"Planner Component","type":"object","required":["component","props"],"properties":{"component":{"const":"planner"},"name":{"type":"string"},"props":{"type":"object","required":["queries","rows","columns","itemTemplate"],"properties":{"height":{},"refreshHandler":{"type":"string"},"debug":{"type":"boolean"},"options":{"type":"object","properties":{"enableVirtualization":{"type":"boolean"},"virtualizeThreshold":{"type":"number"},"estimatedRowHeight":{"type":"number"}},"additionalProperties":true},"queries":{"type":"array","minItems":1,"items":{"type":"object","required":["name","query"],"properties":{"name":{"type":"string"},"query":{"type":"object"},"itemsPath":{"type":"string"},"parentAs":{"type":"string"},"mapping":{"type":"object"}},"additionalProperties":true}},"rows":{"type":"object","required":["groupBy","headerWidth"],"properties":{"groupBy":{"type":"string"},"fromQuery":{"type":"string"},"key":{"type":"string"},"label":{},"orderBy":{"type":"array"},"unassigned":{"type":"object"},"headerWidth":{"type":"number"}},"additionalProperties":true},"columns":{"type":"object","required":["width"],"properties":{"orderBy":{"type":"array"},"appendEmpty":{"type":"boolean","description":"Keep one trailing empty slot beyond the largest group."},"label":{},"width":{"type":"number"}},"additionalProperties":true},"rowHeaderTemplate":{"$ref":"../schemas.json#/definitions/component"},"itemTemplate":{"$ref":"../schemas.json#/definitions/component"},"emptyCellTemplate":{"$ref":"../schemas.json#/definitions/component"},"summaryComponent":{"$ref":"../schemas.json#/definitions/component"},"emptyStateTemplate":{"$ref":"../schemas.json#/definitions/component"},"itemAccent":{},"dragSource":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"data":{},"canDrag":{}},"additionalProperties":false},"events":{"type":"object","additionalProperties":{"$ref":"../schemas.json#/definitions/actionsList"}}},"additionalProperties":true}},"additionalProperties":true}
@@ -4,6 +4,7 @@
4
4
  "description": "Schema for datetime input field type",
5
5
  "type": "object",
6
6
  "properties": {
7
+ "displayMode": { "type": "string", "enum": ["readEdit"], "description": "Show the formatted value as text until clicked; remain editable while the calendar is open and return to read display when it closes." },
7
8
  "type": { "type": "string", "const": "datetime" },
8
9
  "label": {
9
10
  "oneOf": [{ "type": "string" }, { "$ref": "../schemas.json#/definitions/localized" }],
@@ -30,6 +30,11 @@
30
30
  "description": "Whether field is disabled",
31
31
  "x-example": false
32
32
  },
33
+ "displayMode": {
34
+ "type": "string",
35
+ "enum": ["readEdit"],
36
+ "description": "Show the resolved option label as text until clicked, then return to read display on blur."
37
+ },
33
38
  "options": {
34
39
  "type": "object",
35
40
  "description": "Select-async specific options",
@@ -4,6 +4,7 @@
4
4
  "description": "Schema for time input field type",
5
5
  "type": "object",
6
6
  "properties": {
7
+ "displayMode": { "type": "string", "enum": ["readEdit"], "description": "Show the formatted value as text until clicked, then return to read display on blur." },
7
8
  "type": {
8
9
  "type": "string",
9
10
  "const": "time"
@@ -88,4 +89,4 @@
88
89
  }
89
90
  },
90
91
  "required": ["type"]
91
- }
92
+ }
@@ -4740,9 +4740,10 @@ type contact {
4740
4740
  @cost(weight: "10")
4741
4741
  getContactAttachments(filter: String, orderBy: String): [AttachmentGqlDto]
4742
4742
  @cost(weight: "10")
4743
- getCustomValuesAttachment(filter: String): AttachmentGqlDto
4744
- @cost(weight: "10")
4745
- availableCredit: [AvailableCreditByCurrency] @cost(weight: "10")
4743
+ getCustomValuesAttachment(filter: String): AttachmentGqlDto
4744
+ @cost(weight: "10")
4745
+ getEquipment(idPropertyName: String!): equipment @cost(weight: "10")
4746
+ availableCredit: [AvailableCreditByCurrency] @cost(weight: "10")
4746
4747
  contactId: Int!
4747
4748
  accountNumber: String
4748
4749
  contactFirstName: String
@@ -291,8 +291,8 @@
291
291
  "description": "Enable dynamic grid features"
292
292
  },
293
293
  "enableViews": {
294
- "type": "boolean",
295
- "description": "Enable view switching"
294
+ "type": ["boolean", "string"],
295
+ "description": "Enable view switching. String templates are resolved against component variables and store state."
296
296
  },
297
297
  "enableSearch": {
298
298
  "type": "boolean",
@@ -307,8 +307,8 @@
307
307
  "description": "Enable column management"
308
308
  },
309
309
  "enableFilter": {
310
- "type": "boolean",
311
- "description": "Enable filtering"
310
+ "type": ["boolean", "string"],
311
+ "description": "Enable filtering. String templates are resolved against component variables and store state."
312
312
  },
313
313
  "defaultView": {
314
314
  "type": "string",
@@ -82,6 +82,14 @@ props:
82
82
 
83
83
  Dynamic entity fields use the same rule through `fieldDefinition.props.allowFilter`.
84
84
 
85
+ View filter `values` are template-aware. They are resolved from the DataGrid's current local variables and store when the view is applied, so a default filter can follow runtime state instead of sending the template literally:
86
+
87
+ ```yaml
88
+ filters:
89
+ - name: equipmentId
90
+ values: "{{ selectedEquipmentId }}"
91
+ ```
92
+
85
93
  ---
86
94
 
87
95
  ## dataGrid sticky column state
@@ -45,11 +45,11 @@ Full-featured data table with views, filtering, sorting, pagination, and row act
45
45
  | `includeEntityKeysInExport` | `boolean` | `true` | Force `entityKeys`/primary keys into exports even when hidden, preserving ID-first re-import matching. Set `false` for id-less templates or cross-space copies. |
46
46
  | `navigationType` | `navigate \| dialog \| store` | — | **Required.** Row click behavior |
47
47
  | `enableDynamicGrid` | `boolean` | — | Enable dynamic columns |
48
- | `enableViews` | `boolean` | — | Show view selector |
48
+ | `enableViews` | `boolean \| template` | — | Show view selector; templates resolve against variables and store |
49
49
  | `enableSearch` | `boolean` | — | Show search input |
50
50
  | `enablePagination` | `boolean` | — | Show pagination |
51
51
  | `enableColumns` | `boolean` | — | Show column selector |
52
- | `enableFilter` | `boolean` | — | Show filter panel |
52
+ | `enableFilter` | `boolean \| template` | — | Show filter panel; templates resolve against variables and store |
53
53
  | `defaultView` | `string` | — | Default view name |
54
54
  | `defaultPageSize` | `number` | `20` | Rows per page |
55
55
  | `enableRefresh` | `boolean` | — | Auto-refresh |
@@ -681,6 +681,10 @@ props:
681
681
 
682
682
  Grouped collections can render groups in multiple columns. Use a fixed `groupCols` count or responsive breakpoint counts; each count is converted to Material UI's 12-column grid.
683
683
 
684
+ Accordion collections support `itemHeaderFields` for interactive fields that remain visible while a row is collapsed. The header fields share `item`, `index`, `collection`, and field-name prefixing with `itemTemplate`; wrap them in a `layout` for grid sizing. Use `rowVariant: flat` and `nestedVariant: rail` or `none` to reduce card chrome in nested collections.
685
+
686
+ For `datetime`, `time`, and `select-async` fields, `displayMode: readEdit` renders the current value as text until clicked. Date/time fields stay in edit mode while their calendar popup is open and return to text when it closes; other fields return on blur.
687
+
684
688
  ```yaml
685
689
  component: field-collection
686
690
  name: businessHours
@@ -471,6 +471,8 @@ Optional templates cover row headers, empty cells/state, and summaries. Events a
471
471
 
472
472
  Set `columns.appendEmpty: true` to render one trailing empty ordinal slot beyond the largest group, ensuring every lane has an append target.
473
473
 
474
+ Set `props.dragSource` to make planner cards draggable between lanes. It uses the shared `type`, optional `data`, and optional templated `canDrag` contract; target cells receive the payload through `dragItem` and `dragType`. Native dragging is desktop-only, so keep a click-driven equivalent.
475
+
474
476
  ## timeline-grid
475
477
 
476
478
  CSS Grid-based timeline with swim lanes, drill-down, and virtual scrolling.