@cxtms/cx-schema 1.8.1 → 1.9.0

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 (72) hide show
  1. package/README.md +34 -34
  2. package/dist/cli.js +2408 -177
  3. package/dist/cli.js.map +1 -1
  4. package/dist/types.d.ts +2 -0
  5. package/dist/types.d.ts.map +1 -1
  6. package/dist/validator.d.ts +8 -0
  7. package/dist/validator.d.ts.map +1 -1
  8. package/dist/validator.js +54 -2
  9. package/dist/validator.js.map +1 -1
  10. package/dist/workflowValidator.d.ts +4 -0
  11. package/dist/workflowValidator.d.ts.map +1 -1
  12. package/dist/workflowValidator.js +28 -2
  13. package/dist/workflowValidator.js.map +1 -1
  14. package/package.json +2 -2
  15. package/schemas/components/appComponent.json +8 -0
  16. package/schemas/components/module.json +31 -2
  17. package/schemas/components/timelineGrid.json +4 -0
  18. package/schemas/schemas.json +12 -0
  19. package/schemas/workflows/tasks/authentication.json +26 -12
  20. package/schemas/workflows/workflow.json +0 -4
  21. package/scripts/postinstall.js +16 -13
  22. package/{.claude/skills/cx-core → skills/cxtms-developer}/SKILL.md +16 -14
  23. package/skills/cxtms-developer/ref-cli-auth.md +120 -0
  24. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-accounting.md +7 -0
  25. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-commodity.md +12 -0
  26. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-contact.md +10 -0
  27. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-geography.md +34 -1
  28. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-order-sub.md +13 -0
  29. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-order.md +14 -0
  30. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-rate.md +8 -0
  31. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-shared.md +9 -0
  32. package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-warehouse.md +5 -0
  33. package/skills/cxtms-developer/ref-graphql-query.md +320 -0
  34. package/{.claude/skills/cx-module → skills/cxtms-module-builder}/SKILL.md +112 -37
  35. package/{.claude/skills/cx-module → skills/cxtms-module-builder}/ref-components-data.md +7 -0
  36. package/{.claude/skills/cx-module → skills/cxtms-module-builder}/ref-components-display.md +17 -0
  37. package/{.claude/skills/cx-module → skills/cxtms-module-builder}/ref-components-forms.md +7 -1
  38. package/{.claude/skills/cx-module → skills/cxtms-module-builder}/ref-components-interactive.md +11 -0
  39. package/{.claude/skills/cx-module → skills/cxtms-module-builder}/ref-components-layout.md +11 -0
  40. package/{.claude/skills/cx-module → skills/cxtms-module-builder}/ref-components-specialized.md +50 -0
  41. package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/SKILL.md +139 -30
  42. package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/ref-communication.md +8 -0
  43. package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/ref-entity.md +43 -0
  44. package/skills/cxtms-workflow-builder/ref-expressions-ncalc.md +128 -0
  45. package/skills/cxtms-workflow-builder/ref-expressions-template.md +159 -0
  46. package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/ref-flow.md +8 -1
  47. package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/ref-other.md +9 -0
  48. package/templates/module-configuration.yaml +23 -89
  49. package/templates/module-form.yaml +3 -3
  50. package/templates/module-grid.yaml +3 -3
  51. package/templates/module-select.yaml +3 -3
  52. package/templates/module.yaml +3 -2
  53. package/templates/workflow-api-tracking.yaml +1 -1
  54. package/templates/workflow-basic.yaml +1 -1
  55. package/templates/workflow-document.yaml +1 -1
  56. package/templates/workflow-entity-trigger.yaml +1 -1
  57. package/templates/workflow-ftp-edi.yaml +1 -1
  58. package/templates/workflow-ftp-tracking.yaml +1 -1
  59. package/templates/workflow-mcp-tool.yaml +1 -1
  60. package/templates/workflow-public-api.yaml +1 -1
  61. package/templates/workflow-scheduled.yaml +1 -1
  62. package/templates/workflow-utility.yaml +1 -1
  63. package/templates/workflow-webhook.yaml +1 -1
  64. package/templates/workflow.yaml +1 -1
  65. package/.claude/skills/cx-workflow/ref-expressions.md +0 -272
  66. /package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-job.md +0 -0
  67. /package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-notification.md +0 -0
  68. /package/{.claude/skills/cx-core → skills/cxtms-developer}/ref-entity-organization.md +0 -0
  69. /package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/ref-accounting.md +0 -0
  70. /package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/ref-filetransfer.md +0 -0
  71. /package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/ref-query.md +0 -0
  72. /package/{.claude/skills/cx-workflow → skills/cxtms-workflow-builder}/ref-utilities.md +0 -0
@@ -1,30 +1,36 @@
1
1
  ---
2
- name: cx-module
3
- description: Generate schema-valid CargoXplorer app module YAML files (UI screens, forms, grids, routes)
2
+ name: cxtms-module-builder
3
+ description: >
4
+ Works with CXTMS app module YAML files — creates, modifies, fixes, validates, and deploys UI screens, forms, grids, and routes.
5
+ Use when the user asks to create, modify, or fix a module YAML file, references *-module.yaml files, or asks about UI components/forms/grids/routes in a CX project.
6
+ Not for workflow YAML files, TypeScript code, or non-YAML tasks.
4
7
  argument-hint: <description of what to build>
5
8
  ---
6
9
 
7
10
  You are a CargoXplorer module YAML builder. You generate schema-valid YAML for CX app modules — UI screens, forms, data grids, routes, and components. All output must conform to the JSON schemas in `.cx-schema/`.
8
11
 
9
- **IMPORTANT — use `cx-cli` for all module operations:**
10
- - **Scaffold**: `npx cx-cli create module <name> --template <template>` — generates a schema-valid YAML file. ALWAYS run this first, then read the generated file, then customize. Do NOT write YAML from scratch or copy templates manually.
11
- - **Scaffold with fields**: `npx cx-cli create module <name> --template <template> --options '<json>'`
12
- - **Validate**: `npx cx-cli <file.yaml>` — run after every change
13
- - **Schema lookup**: `npx cx-cli schema <component>` — e.g., `cx-cli schema form`, `cx-cli schema dataGrid`
14
- - **Examples**: `npx cx-cli example <component>` — show example YAML
15
- - **List schemas**: `npx cx-cli list`
16
- - **Extract**: `npx cx-cli extract <source> <component> --to <target>` — move components between modules
17
- - **Feature folder**: `npx cx-cli create module <name> --template <template> --feature <feature-name>`
12
+ **IMPORTANT — use `cxtms` for all module operations:**
13
+ - **Scaffold**: `npx cxtms create module <name> --template <template>` — generates a schema-valid YAML file. ALWAYS run this first, then read the generated file, then customize. Do NOT write YAML from scratch or copy templates manually.
14
+ - **Scaffold with fields**: `npx cxtms create module <name> --template <template> --options '<json>'`
15
+ - **Validate**: `npx cxtms <file.yaml>` — run after every change
16
+ - **Schema lookup**: `npx cxtms schema <component>` — e.g., `cxtms schema form`, `cxtms schema dataGrid`
17
+ - **Examples**: `npx cxtms example <component>` — show example YAML
18
+ - **List schemas**: `npx cxtms list`
19
+ - **Extract**: `npx cxtms extract <source> <component> --to <target>` — move components between modules
20
+ - **Feature folder**: `npx cxtms create module <name> --template <template> --feature <feature-name>`
21
+ - **Deploy to server**: `npx cxtms appmodule deploy <file.yaml> --org <id>` — creates or updates module on the CX server
22
+ - **Undeploy from server**: `npx cxtms appmodule undeploy <appModuleId> --org <id>` — removes a module by UUID
23
+ - **Publish all**: `npx cxtms publish [--feature <name>] --org <id>` — deploy all modules and workflows to the server
18
24
 
19
25
  ## Generation Workflow
20
26
 
21
27
  ### Step 1: Scaffold via CLI — MANDATORY
22
28
 
23
- **You MUST run `cx-cli create module` to generate the initial file.** Do not skip this step. Do not write YAML from scratch. Do not read template files and copy them manually. The CLI generates correct UUIDs, file paths, and structure.
29
+ **You MUST run `cxtms create module` to generate the initial file.** Do not skip this step. Do not write YAML from scratch. Do not read template files and copy them manually. The CLI generates correct UUIDs, file paths, and structure.
24
30
 
25
31
  ```bash
26
- npx cx-cli create module <name> --template <template>
27
- npx cx-cli create module <name> --template <template> --options '<json>'
32
+ npx cxtms create module <name> --template <template>
33
+ npx cxtms create module <name> --template <template> --options '<json>'
28
34
  ```
29
35
 
30
36
  | Template | Use Case |
@@ -52,7 +58,7 @@ npx cx-cli create module <name> --template <template> --options '<json>'
52
58
  ### Step 4: Validate
53
59
 
54
60
  ```bash
55
- npx cx-cli <generated-file.yaml>
61
+ npx cxtms <generated-file.yaml>
56
62
  ```
57
63
 
58
64
  ---
@@ -64,7 +70,7 @@ Customize generated modules at scaffold time with `--options`. Accepts inline JS
64
70
  ### Field Array Format (all templates)
65
71
 
66
72
  ```bash
67
- npx cx-cli create module "Tariff" --template grid --options '[
73
+ npx cxtms create module "Tariff" --template grid --options '[
68
74
  {"name": "code", "type": "text", "label": "Tariff Code", "required": true},
69
75
  {"name": "rate", "type": "number", "label": "Rate %"},
70
76
  {"name": "effectiveDate", "type": "date"},
@@ -75,7 +81,7 @@ npx cx-cli create module "Tariff" --template grid --options '[
75
81
  ### Object Format (with entityName)
76
82
 
77
83
  ```bash
78
- npx cx-cli create module "Country" --template select --options '{
84
+ npx cxtms create module "Country" --template select --options '{
79
85
  "entityName": "Country",
80
86
  "fields": [
81
87
  {"name": "countryCode", "type": "text", "label": "Country Code"},
@@ -107,13 +113,18 @@ npx cx-cli create module "Country" --template select --options '{
107
113
 
108
114
  ## Extract Command
109
115
 
110
- Move a component (and its routes) from one module into another. Useful for splitting large modules into smaller, focused ones.
116
+ Move or copy a component (and its routes) from one module into another. Useful for splitting large modules or sharing components.
111
117
 
112
118
  ```bash
113
- cx-cli extract <source-file> <component-name> --to <target-file>
119
+ cxtms extract <source-file> <component-name> --to <target-file>
120
+ cxtms extract <source-file> <component-name> --to <target-file> --copy
114
121
  ```
115
122
 
116
- ### What Gets Moved
123
+ ### Flags
124
+ - `--to <file>` — target module file (required)
125
+ - `--copy` — copy instead of move (source keeps the component, target gets a higher-priority copy)
126
+
127
+ ### What Gets Moved/Copied
117
128
  - The component matching the exact `name` field
118
129
  - Any routes whose `component` field matches the component name
119
130
  - Permissions and entities are **NOT** moved
@@ -121,11 +132,14 @@ cx-cli extract <source-file> <component-name> --to <target-file>
121
132
  ### Examples
122
133
 
123
134
  ```bash
124
- # Extract to a new file (creates module scaffold automatically)
125
- npx cx-cli extract modules/orders.yaml Orders/CreateItem --to modules/order-create.yaml
135
+ # Move a component to a new file (creates module scaffold automatically)
136
+ npx cxtms extract modules/orders.yaml Orders/CreateItem --to modules/order-create.yaml
137
+
138
+ # Copy a component (source unchanged, target gets higher priority)
139
+ npx cxtms extract modules/orders.yaml Orders/CreateItem --to modules/order-create.yaml --copy
126
140
 
127
141
  # Extract to an existing module
128
- npx cx-cli extract modules/main.yaml Dashboard --to modules/dashboard.yaml
142
+ npx cxtms extract modules/main.yaml Dashboard --to modules/dashboard.yaml
129
143
  ```
130
144
 
131
145
  ### New Target Scaffold
@@ -138,7 +152,7 @@ When the target file doesn't exist, a new module is created with:
138
152
  ### Workflow
139
153
  1. Run `extract` to move the component
140
154
  2. Manually move any related permissions/entities if needed
141
- 3. Validate both files: `npx cx-cli <source>` and `npx cx-cli <target>`
155
+ 3. Validate both files: `npx cxtms <source>` and `npx cxtms <target>`
142
156
 
143
157
  ---
144
158
 
@@ -146,9 +160,9 @@ When the target file doesn't exist, a new module is created with:
146
160
 
147
161
  **Read these files only when needed for the current task.** Do not load all references upfront.
148
162
 
149
- ### Entity Field Reference (cx-core)
163
+ ### Entity Field Reference (cxtms-developer)
150
164
 
151
- !cat .claude/skills/cx-core/SKILL.md
165
+ !cat skills/cxtms-developer/SKILL.md
152
166
 
153
167
  ### Component Directory
154
168
 
@@ -156,12 +170,12 @@ Read the relevant category ref file when building specific component types:
156
170
 
157
171
  | Category | Components | File |
158
172
  |----------|-----------|------|
159
- | **Layout & Structure** | `layout`, `row`, `col`, `header`, `tabs`, `toolbar`, `card`, `line`, `slot` | `.claude/skills/cx-module/ref-components-layout.md` |
160
- | **Forms & Input** | `form`, `field`, `field-collection`, `barcodeScanner` | `.claude/skills/cx-module/ref-components-forms.md` |
161
- | **Data Display** | `dataGrid`, `text`, `markup`, `badge`, `icon`, `image`, `photo`, `summary`, `diff`, `viewer`, `embed` | `.claude/skills/cx-module/ref-components-display.md` |
162
- | **Interactive & Nav** | `button`, `dropdown`, `menuButton`, `link`, `redirect`, `navbar`, `navbarItem`, `navbarLink`, `navDropdown` | `.claude/skills/cx-module/ref-components-interactive.md` |
163
- | **Data & Collections** | `collection`, `list`, `listItem`, `datasource`, `script` | `.claude/skills/cx-module/ref-components-data.md` |
164
- | **Specialized** | `calendar`, `notes`, `dashboard`, `dashboard-widget`, `widget`, `timeline`, `timeline-grid`, `oauth2` | `.claude/skills/cx-module/ref-components-specialized.md` |
173
+ | **Layout & Structure** | `layout`, `row`, `col`, `header`, `tabs`, `toolbar`, `card`, `line`, `slot` | `skills/cxtms-module-builder/ref-components-layout.md` |
174
+ | **Forms & Input** | `form`, `field`, `field-collection`, `barcodeScanner` | `skills/cxtms-module-builder/ref-components-forms.md` |
175
+ | **Data Display** | `dataGrid`, `text`, `markup`, `badge`, `icon`, `image`, `photo`, `summary`, `diff`, `viewer`, `embed` | `skills/cxtms-module-builder/ref-components-display.md` |
176
+ | **Interactive & Nav** | `button`, `dropdown`, `menuButton`, `link`, `redirect`, `navbar`, `navbarItem`, `navbarLink`, `navDropdown` | `skills/cxtms-module-builder/ref-components-interactive.md` |
177
+ | **Data & Collections** | `collection`, `list`, `listItem`, `datasource`, `script` | `skills/cxtms-module-builder/ref-components-data.md` |
178
+ | **Specialized** | `calendar`, `notes`, `dashboard`, `dashboard-widget`, `widget`, `timeline`, `timeline-grid`, `oauth2` | `skills/cxtms-module-builder/ref-components-specialized.md` |
165
179
 
166
180
  ### Templates
167
181
 
@@ -198,7 +212,7 @@ module:
198
212
  description:
199
213
  en-US: "Module description"
200
214
  application: "CargoXplorer" # Required
201
- fileName: "modules/<name>-module.yaml" # File path in repo
215
+ filePath: "modules/<name>-module.yaml" # File path in repo
202
216
 
203
217
  entities:
204
218
  - name: <EntityName>
@@ -224,6 +238,15 @@ permissions:
224
238
  displayName: { en-US: "..." }
225
239
  roles: ["Admin", "Manager"]
226
240
 
241
+ configurations: # Optional: org-level config definitions
242
+ - configName: "apps.myFeature" # Unique config key
243
+ displayName: { en-US: "My Feature Settings" }
244
+ description: { en-US: "Configure my feature" }
245
+ component: "ModuleName/ConfigComponent" # Component that renders the config UI
246
+ defaultValue: # Optional default values
247
+ enabled: true
248
+ limit: 100
249
+
227
250
  routes:
228
251
  - name: "routeName"
229
252
  path: "/module-path" # Supports :params
@@ -384,9 +407,61 @@ Reusable select components (e.g., `Countries/Select`, `Ports/Select`) follow thi
384
407
 
385
408
  ---
386
409
 
410
+ ## Server Module Commands
411
+
412
+ Deploy, undeploy, and release commands are listed in the CLI section at the top of this file. For authentication setup (login, PAT tokens, org management): see [cxtms-developer/ref-cli-auth.md](skills/cxtms-developer/ref-cli-auth.md)
413
+
414
+ ### Releasing App to GitHub
415
+
416
+ Use `app release` to release modified modules and workflows from the CX server to a GitHub repository. This creates a branch and pull request — it does NOT push directly to the target branch.
417
+
418
+ ```bash
419
+ # Release all unpublished changes to GitHub (creates a PR) — message is required
420
+ npx cxtms app release -m "Add warehouse locations module"
421
+
422
+ # Release specific modules and/or workflows by YAML file
423
+ npx cxtms app release -m "Fix country module" modules/my-module.yaml
424
+ npx cxtms app release -m "Update billing" modules/a.yaml workflows/b.yaml
425
+
426
+ # Force release all modules and workflows (not just unpublished ones)
427
+ npx cxtms app release -m "Full republish" --force
428
+
429
+ # Release with explicit org
430
+ npx cxtms app release -m "Add warehouse locations module" --org 42
431
+ ```
432
+
433
+ **What `app release` does:**
434
+ 1. Reads `app.yaml` for the `id` (appManifestId), repository, and branch
435
+ 2. Increments the app version (patch bump)
436
+ 3. Creates a `publish/{app-name}-v{version}-{timestamp}` branch on GitHub
437
+ 4. Commits `app.yaml` + selected module/workflow YAML files to the branch
438
+ 5. Creates a pull request from the publish branch to the target branch
439
+ 6. Marks published modules and workflows as `hasUnpublishedChanges: false`
440
+
441
+ **This is a release-to-git operation** — it commits the current server-side YAML directly to GitHub via the API. No local git repo is involved. The modules and workflows being released are taken from the CX server database, not from local files. The YAML file arguments only identify *which* items to include by their IDs.
442
+
443
+ **Important:** Modules and workflows must be deployed to the TMS server before they can be released. Use `cxtms appmodule deploy` or `cxtms workflow deploy` first, then `cxtms app release` to commit them to GitHub.
444
+
445
+ **Do NOT run `app release` automatically.** Only release when the user explicitly requests it. Releasing creates a branch and PR on GitHub, so it should be done once when all changes are ready — not after every deploy.
446
+
447
+ **Prerequisites:**
448
+ - `app.yaml` must exist with a valid `id` field
449
+ - The app manifest must be installed on the server (`app install` first)
450
+ - The server must have a GitHub token configured for the organization
451
+ - The repository and branch must be set on the app manifest
452
+
453
+ **Related commands:**
454
+ - `npx cxtms app install` — install/refresh app from GitHub into the server
455
+ - `npx cxtms app install --force` — force reinstall even if same version
456
+ - `npx cxtms app install --branch develop` — install from a specific branch
457
+ - `npx cxtms app install --skip-changed` — skip modules with local changes
458
+ - `npx cxtms app list` — list installed app manifests on the server
459
+
460
+ ---
461
+
387
462
  # Generation Rules
388
463
 
389
- 1. **Always scaffold via `cx-cli create module` first** — never write YAML from scratch, never copy templates manually
464
+ 1. **Always scaffold via `cxtms create module` first** — never write YAML from scratch, never copy templates manually
390
465
  2. **Use localized strings** `{ en-US: "..." }` for all user-visible text
391
466
  3. **Follow naming conventions**:
392
467
  - Module names: PascalCase (e.g., `WarehouseLocations`)
@@ -394,9 +469,9 @@ Reusable select components (e.g., `Countries/Select`, `Ports/Select`) follow thi
394
469
  - Route paths: kebab-case (e.g., `/warehouse-locations`)
395
470
  - Permission names: PascalCase with slashes (e.g., `WarehouseLocations/Read`, `System/Contacts/Update`)
396
471
  4. **Template expressions** use `{{ expression }}` syntax (double curly braces)
397
- 5. **Include fileName** property pointing to the YAML file location
472
+ 5. **Include filePath** property pointing to the YAML file location
398
473
  6. **Set proper entityKind** when defining entities (Order, Contact, OrderEntity, AccountingTransaction, Calendar, CalendarEvent, Other)
399
474
  7. **DataGrid options** requires ALL properties: query, rootEntityName, entityKeys, navigationType, enableDynamicGrid, enableViews, enableSearch, enablePagination, enableColumns, enableFilter, defaultView, onRowClick
400
475
  8. **Form component** requires `validationSchema` in props
401
- 9. **Do not change `appModuleId` or `fileName`** — set correctly by CLI scaffold
402
- 10. **Always validate** the final YAML: `npx cx-cli <file.yaml>`
476
+ 9. **Do not change `appModuleId` or `filePath`** — set correctly by CLI scaffold
477
+ 10. **Always validate** the final YAML: `npx cxtms <file.yaml>`
@@ -1,5 +1,12 @@
1
1
  # Data & Collection Components
2
2
 
3
+ ## Contents
4
+ - Collection component
5
+ - List component
6
+ - ListItem component
7
+ - Datasource component
8
+ - Script component
9
+
3
10
  ## collection
4
11
 
5
12
  Iterates over data items and renders children as templates. Supports drag-and-drop reordering.
@@ -1,5 +1,18 @@
1
1
  # Data Display Components
2
2
 
3
+ ## Contents
4
+ - DataGrid component
5
+ - Text component
6
+ - Markup component
7
+ - Badge component
8
+ - Icon component
9
+ - Image component
10
+ - Photo component
11
+ - Summary component
12
+ - Diff component
13
+ - Viewer component
14
+ - Embed component
15
+
3
16
  ## dataGrid
4
17
 
5
18
  Full-featured data table with views, filtering, sorting, pagination, and row actions.
@@ -31,7 +44,11 @@ Full-featured data table with views, filtering, sorting, pagination, and row act
31
44
  | `defaultView` | `string` | — | Default view name |
32
45
  | `defaultPageSize` | `number` | `20` | Rows per page |
33
46
  | `enableRefresh` | `boolean` | — | Auto-refresh |
47
+ | `refreshInterval` | `number` | `30000` | Auto-refresh polling interval (ms) |
34
48
  | `enableChangeTracking` | `boolean` | `true` | Track data changes |
49
+ | `highlightNew` | `boolean` | `true` | Highlight newly added rows |
50
+ | `highlightUpdated` | `boolean` | `true` | Highlight rows with updated values |
51
+ | `highlightForRefreshes` | `number` | `1` | Per-row TTL — refresh cycles a highlight persists |
35
52
  | `onRowClick` | `action[]` | — | Default row click action |
36
53
  | `onDataLoad` | `action[]` | — | Action after data loads |
37
54
  | `items` | `any` | — | Static data (instead of query) |
@@ -1,5 +1,11 @@
1
1
  # Form & Input Components
2
2
 
3
+ ## Contents
4
+ - Form component
5
+ - Field component
6
+ - FieldCollection component
7
+ - BarcodeScanner component
8
+
3
9
  ## form
4
10
 
5
11
  Data entry form with validation, queries, and submission. Wraps React Hook Form's FormProvider.
@@ -182,7 +188,7 @@ Polymorphic form field — renders different input types based on `type` prop.
182
188
  | `onFocus` | Fires on focus |
183
189
  | `onKeyPress` | Fires on keypress (data: `key`, `keyCode`) |
184
190
  | `onSelectValue` | Fires on select-async value selection |
185
- | `onEditClick` | Fires when edit icon clicked (select-async, permission-gated) |
191
+ | `onEditClick` | Fires when edit icon clicked. Supported on text and select-async fields. Passes current form values (with optional `valueFieldName`) to the action context |
186
192
 
187
193
  ```yaml
188
194
  # Text field
@@ -1,5 +1,16 @@
1
1
  # Interactive & Navigation Components
2
2
 
3
+ ## Contents
4
+ - Button component
5
+ - Dropdown component
6
+ - MenuButton component
7
+ - Link component
8
+ - Redirect component
9
+ - Navbar component
10
+ - NavbarItem component
11
+ - NavbarLink component
12
+ - NavDropdown component
13
+
3
14
  ## button
4
15
 
5
16
  MUI Button with icon, label, loading state, and action dispatch.
@@ -1,5 +1,16 @@
1
1
  # Layout & Structure Components
2
2
 
3
+ ## Contents
4
+ - Layout component
5
+ - Row component
6
+ - Col component
7
+ - Header component
8
+ - Tabs component
9
+ - Toolbar component
10
+ - Card component
11
+ - Line component
12
+ - Slot component
13
+
3
14
  ## layout
4
15
 
5
16
  General-purpose container. Renders MUI Grid or Box with flexbox.
@@ -1,5 +1,15 @@
1
1
  # Specialized Components
2
2
 
3
+ ## Contents
4
+ - Calendar component
5
+ - Notes component
6
+ - Dashboard component
7
+ - DashboardWidget component
8
+ - Widget component
9
+ - Timeline component
10
+ - TimelineGrid component
11
+ - OAuth2 component
12
+
3
13
  ## calendar
4
14
 
5
15
  FullCalendar integration with GraphQL event sources, timezone support, and programmatic control.
@@ -331,7 +341,9 @@ CSS Grid-based timeline with swim lanes, drill-down, and virtual scrolling.
331
341
  | `view` | `day \| week \| month \| year` | `week` | Time view |
332
342
  | `startDate` / `endDate` | `string` | — | Date range |
333
343
  | `eventSources` | `EventSource[]` | — | Event data sources |
344
+ | `eventSources[].query.name` | `string` | `query1`, `query2`... | Source name, used as key in `summaryComponent` `dataSources` |
334
345
  | `eventTemplate` | `ComponentProps` | — | Custom event template |
346
+ | `summaryComponent` | `ComponentProps` | — | Custom component rendered per column in the summary row. Replaces numeric totals when set. |
335
347
  | `options.height` | `string \| number` | `600` | Container height |
336
348
  | `options.cellHeight` | `number` | `60/100` | Cell height (px) |
337
349
  | `options.groupBy` | `string` | — | Field for swim lane grouping |
@@ -342,6 +354,14 @@ CSS Grid-based timeline with swim lanes, drill-down, and virtual scrolling.
342
354
  | `options.showWeekends` | `boolean` | `true` | Show weekends |
343
355
  | `options.showTotalCount` | `boolean` | `false` | Show event totals |
344
356
 
357
+ **Summary component variables** (available when `summaryComponent` is set):
358
+ | Variable | Type | Description |
359
+ |----------|------|-------------|
360
+ | `dataSources` | `Record<string, TimelineEvent[]>` | Per-source events filtered to the column, keyed by `query.name` |
361
+ | `column` | `ColumnDefinition` | Column metadata (`id`, `label`, `date`, `startDate`, `endDate`) |
362
+ | `columnIndex` | `number` | Zero-based column index |
363
+ | `totalCount` | `number` | Total event count for the column across all sources |
364
+
345
365
  **Events:**
346
366
  | Event | Data | Description |
347
367
  |-------|------|-------------|
@@ -387,6 +407,36 @@ props:
387
407
  props: { date: "{{ date }}", assignee: "{{ row }}" }
388
408
  ```
389
409
 
410
+ **Summary component example** (per-source breakdown per column):
411
+ ```yaml
412
+ component: timeline-grid
413
+ props:
414
+ view: week
415
+ options: { height: 600, enableNavigation: true }
416
+ eventSources:
417
+ - query:
418
+ name: ups
419
+ command: "query($s:String!,$e:String!){ upsShipments(start:$s,end:$e){ id date title } }"
420
+ variables: { s: "{{ startDate }}", e: "{{ endDate }}" }
421
+ path: upsShipments
422
+ - query:
423
+ name: fedex
424
+ command: "query($s:String!,$e:String!){ fedexShipments(start:$s,end:$e){ id date title } }"
425
+ variables: { s: "{{ startDate }}", e: "{{ endDate }}" }
426
+ path: fedexShipments
427
+ summaryComponent:
428
+ component: layout
429
+ props:
430
+ direction: column
431
+ children:
432
+ - component: text
433
+ props: { value: "UPS: {{ dataSources.ups.length }}" }
434
+ - component: text
435
+ props: { value: "FedEx: {{ dataSources.fedex.length }}" }
436
+ - component: text
437
+ props: { value: "Total: {{ totalCount }}" }
438
+ ```
439
+
390
440
  ---
391
441
 
392
442
  ## oauth2