@cxtms/cx-schema 1.9.22 → 1.9.23

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/cx-schema",
3
- "version": "1.9.22",
3
+ "version": "1.9.23",
4
4
  "description": "Schema validation package for CXTMS YAML modules",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -17,6 +17,10 @@
17
17
 
18
18
  Full-featured data table with views, filtering, sorting, pagination, and row actions.
19
19
 
20
+ **Responsive layout:**
21
+ - **Toolbar**: ViewSelector and search input stack full-width on mobile (`xs`), then collapse to auto-width on `sm` and above. Search input enforces a `20ch` minimum width on `sm+`.
22
+ - **Filters**: Filter inputs use a responsive grid — 1 per row on `xs`/`sm`, 2 per row on `md`, 3 per row on `lg`, 4 per row on `xl`.
23
+
20
24
  **Props:**
21
25
  | Prop | Type | Description |
22
26
  |------|------|-------------|
@@ -84,6 +84,7 @@ commodities:
84
84
  mapping: # dict -> List<dict>, string -> List<object>
85
85
  name: "{{ item.name }}"
86
86
  quantity: "{{ item.qty }}"
87
+ "{{ item.langKey }}": "{{ item.value }}" # dynamic key (template-substituted)
87
88
  ```
88
89
 
89
90
  **`switch`** (value context) -- Value-based switch (case-insensitive match):
@@ -104,6 +105,7 @@ orderData:
104
105
  mapping: # dict: merge overrides. array: append items
105
106
  status: "Updated"
106
107
  notes: "{{ newNotes }}"
108
+ "{{ dynamicField }}": "{{ value }}" # dynamic key (template-substituted)
107
109
  ```
108
110
 
109
111
  **`resolve`** -- Entity ID lookup by querying a GraphQL collection:
@@ -137,6 +139,25 @@ apiKey:
137
139
  initializationVector: "{{ iv }}" # optional Base64 IV
138
140
  ```
139
141
 
142
+ ### Template-Substituted Dictionary Keys
143
+
144
+ Dictionary **keys** (not just values) support `{{ path }}` template expressions. The engine resolves each key through the same template parser before inserting it into the result dictionary. This works in:
145
+
146
+ - **Generic dictionaries** (plain object mappings in step inputs)
147
+ - **`foreach` complex mapping** keys
148
+ - **`extends` mapping** keys
149
+
150
+ ```yaml
151
+ # Build a dict whose keys depend on a variable
152
+ inputs:
153
+ customValues:
154
+ "{{ fieldName }}": "{{ fieldValue }}" # single variable key
155
+ "{{ prefix }}_{{ lang }}": "translated text" # composite key
156
+ staticKey: "literal value" # plain keys pass through unchanged
157
+ ```
158
+
159
+ **Fallback**: If a templated key resolves to null or empty string, the engine keeps the original literal key (e.g., `{{ missingVar }}`) to avoid silently dropping entries. An `InvalidOperationException` during resolution also falls back to the literal key.
160
+
140
161
  ---
141
162
 
142
163
  ## Property Path Syntax (in collection, mapping, variable paths)