@cxtms/cx-schema 1.9.262 → 1.9.264

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/dist/index.d.ts CHANGED
@@ -3,5 +3,6 @@
3
3
  */
4
4
  export { ModuleValidator } from './validator';
5
5
  export { WorkflowValidator } from './workflowValidator';
6
+ export { validateQuickSearch, QuickSearchKind, QuickSearchKinds } from './quickSearchValidator';
6
7
  export { ValidationResult, ValidationError, ValidationWarning, ValidationSummary, ValidatorOptions, WorkflowValidatorOptions, YAMLModule, YAMLWorkflow, WorkflowErrorType } from './types';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,iBAAiB,EAClB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,iBAAiB,EAClB,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -3,9 +3,11 @@
3
3
  * CX Schema Validator - Main entry point
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.WorkflowValidator = exports.ModuleValidator = void 0;
6
+ exports.validateQuickSearch = exports.WorkflowValidator = exports.ModuleValidator = void 0;
7
7
  var validator_1 = require("./validator");
8
8
  Object.defineProperty(exports, "ModuleValidator", { enumerable: true, get: function () { return validator_1.ModuleValidator; } });
9
9
  var workflowValidator_1 = require("./workflowValidator");
10
10
  Object.defineProperty(exports, "WorkflowValidator", { enumerable: true, get: function () { return workflowValidator_1.WorkflowValidator; } });
11
+ var quickSearchValidator_1 = require("./quickSearchValidator");
12
+ Object.defineProperty(exports, "validateQuickSearch", { enumerable: true, get: function () { return quickSearchValidator_1.validateQuickSearch; } });
11
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,+DAAgG;AAAvF,2HAAA,mBAAmB,OAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Semantic rules for entity quickSearch blocks. Mirrors the backend's
3
+ * QuickSearchConfigValidator (tms-backend-api), except `filter`, which only
4
+ * the backend can check.
5
+ */
6
+ export interface QuickSearchKind {
7
+ key: string;
8
+ matchFields: string[];
9
+ select: string[];
10
+ }
11
+ export type QuickSearchKinds = Record<string, QuickSearchKind>;
12
+ export declare function validateQuickSearch(entityName: string, entityKind: string | undefined | null, config: any, kinds: QuickSearchKinds): string[];
13
+ //# sourceMappingURL=quickSearchValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickSearchValidator.d.ts","sourceRoot":"","sources":["../src/quickSearchValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAQ/D,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACrC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,gBAAgB,GACtB,MAAM,EAAE,CAmDV"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * Semantic rules for entity quickSearch blocks. Mirrors the backend's
4
+ * QuickSearchConfigValidator (tms-backend-api), except `filter`, which only
5
+ * the backend can check.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.validateQuickSearch = validateQuickSearch;
9
+ const CUSTOM_VALUES_PREFIX = 'customValues.';
10
+ // {{ path }} or {{helper path }}
11
+ const TEMPLATE_PATH = /\{\{\s*(?:[A-Za-z]+\s+)?([A-Za-z_][\w.]*)\s*\}\}/g;
12
+ // Component name, e.g. Orders/UpdateOrder
13
+ const DIALOG_COMPONENT = /^[A-Za-z0-9]+(\/[A-Za-z0-9]+)+$/;
14
+ function validateQuickSearch(entityName, entityKind, config, kinds) {
15
+ if (!config || config.enabled !== true)
16
+ return [];
17
+ const prefix = `Entity '${entityName}' quickSearch:`;
18
+ const kind = entityKind ? kinds[entityKind] : undefined;
19
+ if (!kind) {
20
+ return [`${prefix} entityKind must be one of ${Object.keys(kinds).join(', ')}.`];
21
+ }
22
+ const errors = [];
23
+ const match = Array.isArray(config.matchFields) ? config.matchFields : [];
24
+ const select = Array.isArray(config.select) ? config.select : [];
25
+ if (match.length === 0)
26
+ errors.push(`${prefix} matchFields must list at least one field.`);
27
+ for (const f of match) {
28
+ if (!kind.matchFields.includes(f)) {
29
+ errors.push(`${prefix} matchFields '${f}' is not searchable for ${entityKind}. Allowed: ${kind.matchFields.join(', ')}.`);
30
+ }
31
+ }
32
+ if (select.length === 0)
33
+ errors.push(`${prefix} select must list at least one path.`);
34
+ for (const p of select) {
35
+ if (!isSelectable(kind, p))
36
+ errors.push(`${prefix} select '${p}' is not available for ${entityKind}.`);
37
+ }
38
+ if (!config.display?.title || !String(config.display.title).trim())
39
+ errors.push(`${prefix} display.title is required.`);
40
+ if (!config.icon || !String(config.icon).trim())
41
+ errors.push(`${prefix} icon is required.`);
42
+ const open = config.open && typeof config.open === 'object' ? config.open : {};
43
+ const actions = ['navigate', 'dialog'].filter(a => a in open).length;
44
+ if (actions !== 1)
45
+ errors.push(`${prefix} open must define exactly one of navigate or dialog.`);
46
+ if ('dialog' in open && (typeof open.dialog !== 'string' || !DIALOG_COMPONENT.test(open.dialog))) {
47
+ errors.push(`${prefix} open.dialog must be a component name like 'Orders/UpdateOrder'.`);
48
+ }
49
+ if ('navigate' in open && typeof open.navigate !== 'string') {
50
+ errors.push(`${prefix} open.navigate must be a route path.`);
51
+ }
52
+ const allowed = new Set([...select, kind.key]);
53
+ const templates = [config.display?.title, config.display?.subtitle, config.display?.badge, open.navigate]
54
+ .filter((t) => typeof t === 'string');
55
+ const missing = new Set();
56
+ for (const t of templates) {
57
+ for (const m of t.matchAll(TEMPLATE_PATH)) {
58
+ if (!allowed.has(m[1]))
59
+ missing.add(m[1]);
60
+ }
61
+ }
62
+ for (const p of missing)
63
+ errors.push(`${prefix} template path '${p}' must be listed in select.`);
64
+ return errors;
65
+ }
66
+ function isSelectable(kind, path) {
67
+ if (path === `${CUSTOM_VALUES_PREFIX}*`)
68
+ return false;
69
+ if (kind.select.includes(path))
70
+ return true;
71
+ return path.startsWith(CUSTOM_VALUES_PREFIX)
72
+ && path.length > CUSTOM_VALUES_PREFIX.length
73
+ && kind.select.includes(`${CUSTOM_VALUES_PREFIX}*`);
74
+ }
75
+ //# sourceMappingURL=quickSearchValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickSearchValidator.js","sourceRoot":"","sources":["../src/quickSearchValidator.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ export declare class ModuleValidator {
7
7
  private schemas;
8
8
  private schemasDir;
9
9
  private options;
10
+ private quickSearchKinds;
11
+ private quickSearchKindsError;
10
12
  constructor(options?: ValidatorOptions);
11
13
  /**
12
14
  * Register all loaded schemas with Ajv
@@ -56,6 +58,11 @@ export declare class ModuleValidator {
56
58
  * Validate entities array
57
59
  */
58
60
  private validateEntities;
61
+ /**
62
+ * Validate an entity's quickSearch block: shape via schemas.json#/definitions/quickSearch,
63
+ * then the semantic rules the backend also enforces at module save.
64
+ */
65
+ private validateQuickSearch;
59
66
  /**
60
67
  * Validate configurations array
61
68
  */
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EACL,gBAAgB,EAGhB,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AAOjB,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,GAAE,gBAAqB;IA2B1C;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgEjE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyE/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;OAEG;IACH,OAAO,CAAC,YAAY;CAwBrB"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EACL,gBAAgB,EAGhB,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AAQjB,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,qBAAqB,CAAgB;gBAEjC,OAAO,GAAE,gBAAqB;IAsC1C;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgEjE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyE/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;OAEG;IACH,OAAO,CAAC,YAAY;CAwBrB"}
package/dist/validator.js CHANGED
@@ -46,6 +46,7 @@ const fs = __importStar(require("fs"));
46
46
  const path = __importStar(require("path"));
47
47
  const yaml_1 = __importDefault(require("yaml"));
48
48
  const schemaLoader_1 = require("./utils/schemaLoader");
49
+ const quickSearchValidator_1 = require("./quickSearchValidator");
49
50
  class ModuleValidator {
50
51
  constructor(options = {}) {
51
52
  this.schemasDir = options.schemasPath || path.join(__dirname, '../schemas');
@@ -68,6 +69,17 @@ class ModuleValidator {
68
69
  this.schemas = (0, schemaLoader_1.loadSchemas)(this.schemasDir);
69
70
  // Register schemas with Ajv
70
71
  this.registerSchemas();
72
+ const kindsPath = path.join(this.schemasDir, 'quick-search-kinds.json');
73
+ this.quickSearchKinds = null;
74
+ this.quickSearchKindsError = null;
75
+ if (fs.existsSync(kindsPath)) {
76
+ try {
77
+ this.quickSearchKinds = JSON.parse(fs.readFileSync(kindsPath, 'utf-8'));
78
+ }
79
+ catch (error) {
80
+ this.quickSearchKindsError = `quick-search-kinds.json in ${this.schemasDir} is invalid (${error.message}). Reinstall @cxtms/cx-schema.`;
81
+ }
82
+ }
71
83
  }
72
84
  /**
73
85
  * Register all loaded schemas with Ajv
@@ -363,8 +375,35 @@ class ModuleValidator {
363
375
  message: 'Entity must have a name property'
364
376
  });
365
377
  }
378
+ if (entity.quickSearch !== undefined) {
379
+ this.validateQuickSearch(entity, `${entityPath}.quickSearch`, errors);
380
+ }
366
381
  });
367
382
  }
383
+ /**
384
+ * Validate an entity's quickSearch block: shape via schemas.json#/definitions/quickSearch,
385
+ * then the semantic rules the backend also enforces at module save.
386
+ */
387
+ validateQuickSearch(entity, basePath, errors) {
388
+ const validate = this.ajv.getSchema('schemas.json#/definitions/quickSearch');
389
+ if (validate && !validate(entity.quickSearch)) {
390
+ this.addAjvErrors(validate.errors, basePath, errors);
391
+ return;
392
+ }
393
+ if (!this.quickSearchKinds) {
394
+ const reason = this.quickSearchKindsError
395
+ ?? `quick-search-kinds.json not found in ${this.schemasDir}. Reinstall @cxtms/cx-schema.`;
396
+ errors.push({
397
+ type: 'invalid_quick_search',
398
+ path: basePath,
399
+ message: `Cannot validate quickSearch: ${reason}`
400
+ });
401
+ return;
402
+ }
403
+ for (const message of (0, quickSearchValidator_1.validateQuickSearch)(entity.name, entity.entityKind, entity.quickSearch, this.quickSearchKinds)) {
404
+ errors.push({ type: 'invalid_quick_search', path: basePath, message });
405
+ }
406
+ }
368
407
  /**
369
408
  * Validate configurations array
370
409
  */
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cxtms/cx-schema",
3
- "version": "1.9.262",
3
+ "version": "1.9.264",
4
4
  "description": "Schema validation package for CXTMS YAML modules",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,6 +19,9 @@
19
19
  "src": {
20
20
  "description": "Image URL. Falls back to initials when empty or failed to load"
21
21
  },
22
+ "text": {
23
+ "description": "Explicit fallback text displayed after src and before generated initials. Template-aware; text longer than two characters scales to fit"
24
+ },
22
25
  "firstName": {
23
26
  "description": "Explicit first name (organization user form). Takes priority over name"
24
27
  },
@@ -79,7 +82,7 @@
79
82
  }
80
83
  },
81
84
  "additionalProperties": true,
82
- "description": "Circular avatar with automatic two-letter initials. Sources are tried in priority order: src image, firstName + lastName, name, email, then a placeholder user icon.",
85
+ "description": "Circular avatar with explicit text or automatic initials. Sources are tried in priority order: src image, text, firstName + lastName, name, email, then a placeholder user icon.",
83
86
  "x-examples": [
84
87
  {
85
88
  "component": "avatar",
@@ -77,7 +77,7 @@
77
77
  },
78
78
  "header": {
79
79
  "type": "object",
80
- "description": "Card header configuration",
80
+ "description": "Card header configuration. title and subheader accept localized values; title, subheader, and icon are template-aware",
81
81
  "additionalProperties": true
82
82
  },
83
83
  "actions": {
@@ -0,0 +1,27 @@
1
+ {
2
+ "AccountingTransaction": {
3
+ "key": "accountingTransactionId",
4
+ "matchFields": ["transactionNumber"],
5
+ "select": ["accountingTransactionStatus", "accountingTransactionType", "applyToContact.name", "created", "customValues.*", "dueDate", "transactionDate", "transactionNumber"]
6
+ },
7
+ "Commodity": {
8
+ "key": "commodityId",
9
+ "matchFields": ["description", "serialNumber", "trackingNumbers.trackingNumber"],
10
+ "select": ["billToContact.name", "commodityStatus.statusName", "created", "customValues.*", "description", "serialNumber"]
11
+ },
12
+ "Contact": {
13
+ "key": "contactId",
14
+ "matchFields": ["accountNumber", "name"],
15
+ "select": ["accountNumber", "contactStatus.statusName", "contactType", "created", "customValues.*", "name"]
16
+ },
17
+ "Job": {
18
+ "key": "jobId",
19
+ "matchFields": ["jobNumber"],
20
+ "select": ["created", "customValues.*", "customer.name", "description", "employee.name", "jobNumber", "jobStatus.jobStatusName"]
21
+ },
22
+ "Order": {
23
+ "key": "orderId",
24
+ "matchFields": ["orderNumber", "trackingNumber"],
25
+ "select": ["billToContact.name", "created", "customValues.*", "employeeContact.name", "orderNumber", "orderStatus.orderStatusName", "orderType", "salespersonContact.name", "trackingNumber"]
26
+ }
27
+ }
@@ -541,7 +541,7 @@
541
541
  "name": { "type": "string" },
542
542
  "entityKind": {
543
543
  "type": "string",
544
- "enum": ["Order", "Contact", "OrderEntity", "AccountingTransaction", "Calendar", "CalendarEvent", "Other"]
544
+ "enum": ["Order", "Contact", "OrderEntity", "AccountingTransaction", "Calendar", "CalendarEvent", "CalendarAvailabilityBlock", "Other", "AuditChangeEntry", "Job", "Commodity"]
545
545
  },
546
546
  "extension": { "type": "boolean", "description": "Whether this entity extends an existing type" },
547
547
  "displayName": { "$ref": "#/definitions/localized" },
@@ -549,11 +549,51 @@
549
549
  "fields": {
550
550
  "type": "array",
551
551
  "items": { "$ref": "#/definitions/entityField" }
552
- }
552
+ },
553
+ "quickSearch": { "$ref": "#/definitions/quickSearch" }
553
554
  },
554
555
  "required": ["name", "entityKind"]
555
556
  },
556
557
 
558
+ "quickSearch": {
559
+ "type": "object",
560
+ "description": "Opts the entity into the global quick search (Ctrl+K). The backend validates the same rules at module save; see skills/cxtms-module-builder.",
561
+ "properties": {
562
+ "enabled": { "type": "boolean" },
563
+ "filter": { "type": "string", "description": "Lucene filter narrowing the kind's table to this entity, e.g. 'orderType: AirShipmentOrder'." },
564
+ "permission": { "type": "string", "description": "Permission required to see this group. Not enforced by the backend yet (HasPermission stub)." },
565
+ "matchFields": { "type": "array", "items": { "type": "string" }, "description": "Identifier fields matched exact > prefix > contains. Allowed values per entityKind: schemas/quick-search-kinds.json." },
566
+ "select": { "type": "array", "items": { "type": "string" }, "description": "Dotted paths fetched for display/open templates; customValues.<key> allowed." },
567
+ "groupLabel": { "$ref": "#/definitions/localized", "description": "Defaults to the entity displayName." },
568
+ "icon": { "type": "string", "description": "Tabler icon class as used by the web app, e.g. tabler-plane." },
569
+ "order": { "type": "integer", "description": "Tab/group position, ascending; default 100." },
570
+ "display": {
571
+ "type": "object",
572
+ "properties": {
573
+ "title": { "type": "string" },
574
+ "subtitle": { "type": "string" },
575
+ "badge": { "type": "string" }
576
+ },
577
+ "additionalProperties": false
578
+ },
579
+ "open": {
580
+ "type": "object",
581
+ "description": "Exactly one of navigate (route path template, unchanged) or dialog (component name opened in a dialog, e.g. Orders/UpdateOrder).",
582
+ "properties": {
583
+ "navigate": { "type": "string" },
584
+ "dialog": {
585
+ "type": "string",
586
+ "pattern": "^[A-Za-z0-9]+(/[A-Za-z0-9]+)+$",
587
+ "description": "Component name opened in a dialog, e.g. Orders/UpdateOrder. It receives the record key (e.g. orderId), organizationId and the title."
588
+ }
589
+ },
590
+ "additionalProperties": false
591
+ }
592
+ },
593
+ "required": ["enabled"],
594
+ "additionalProperties": false
595
+ },
596
+
557
597
  "calendarEvent": {
558
598
  "type": "object",
559
599
  "description": "Calendar event object structure",
@@ -123,6 +123,7 @@ Used in module `entityKind` and Flow workflow `entity.name`:
123
123
  | `OrderEntity` | OrderEntity (Shipper, Consignee, Carrier roles on an order) |
124
124
  | `AccountingTransaction` | Invoice, Bill, CreditMemo |
125
125
  | `Commodity` | Commodity |
126
+ | `Job` | Job |
126
127
  | `Calendar` | CalendarEntity |
127
128
  | `CalendarEvent` | CalendarEvent |
128
129
  | `Other` | Any custom entity |
@@ -216,7 +216,7 @@ module:
216
216
 
217
217
  entities:
218
218
  - name: <EntityName>
219
- entityKind: Order | Contact | OrderEntity | AccountingTransaction | Calendar | CalendarEvent | Other
219
+ entityKind: Order | Contact | OrderEntity | AccountingTransaction | Job | Commodity | Calendar | CalendarEvent | CalendarAvailabilityBlock | AuditChangeEntry | Other
220
220
  extension: false # true if extending existing entity
221
221
  displayName: { en-US: "..." }
222
222
  fields:
@@ -234,6 +234,22 @@ entities:
234
234
  filter: "contactType: Customer"
235
235
  options: { baseName: "contactId" }
236
236
 
237
+ quickSearch: # Optional: show this entity in the global quick search (Ctrl+K)
238
+ enabled: true
239
+ filter: "orderType: AirShipmentOrder" # Lucene, same syntax as grid filters
240
+ permission: AirShipments/Read # Not enforced by the backend yet
241
+ matchFields: [orderNumber, trackingNumber] # Allowed per entityKind: .cx-schema/quick-search-kinds.json
242
+ select: [orderNumber, trackingNumber, billToContact.name, orderStatus.orderStatusName, customValues.hawb]
243
+ groupLabel: { en-US: "Air Shipments" } # Defaults to displayName
244
+ icon: tabler-plane
245
+ order: 20
246
+ display:
247
+ title: "{{ orderNumber }}" # Templates may use only select paths and the key (orderId)
248
+ subtitle: "{{ billToContact.name }} · {{ trackingNumber }}"
249
+ badge: "{{ orderStatus.orderStatusName }}"
250
+ open:
251
+ navigate: "consolidatedShipments/AirShipmentOrder/{{ orderId }}" # or dialog: Module/Component (opened in a dialog with the record key)
252
+
237
253
  permissions:
238
254
  - name: "ModuleName/Read" # PascalCase with slashes
239
255
  displayName: { en-US: "..." }
@@ -267,6 +283,8 @@ components:
267
283
  # ... component tree
268
284
  ```
269
285
 
286
+ **Quick search (`quickSearch`).** Supported `entityKind` values: `Order`, `Contact`, `AccountingTransaction`, `Job`, `Commodity`. `matchFields` must come from that kind's list in `.cx-schema/quick-search-kinds.json` (copied into your project at install; also available at `node_modules/@cxtms/cx-schema/schemas/quick-search-kinds.json`) — identifier columns only; `customValues` cannot be matched. `select` from the same file, plus any `customValues.<key>`. `display.title`, `icon` and exactly one of `open.navigate` / `open.dialog` are required. `npx cxtms` checks all of this; the backend additionally rejects an invalid `filter` when the module is saved. To change how a core entity opens (or hide it with `enabled: false`), redeclare the entity in your app module with its own full `quickSearch` block — the most recently saved block wins.
287
+
270
288
  ## Action Types
271
289
 
272
290
  Actions are used in event handlers (onClick, onSubmit, etc.) as arrays:
@@ -555,7 +573,7 @@ npx cxtms app release -m "Add warehouse locations module" --org 42
555
573
  - Permission names: PascalCase with slashes (e.g., `WarehouseLocations/Read`, `System/Contacts/Update`)
556
574
  4. **Template expressions** use `{{ expression }}` syntax (double curly braces); prefer built-in functions (`isEqual`, `any`, `isNullOrEmpty`, `format`, …) over `eval`, and write non-trivial `eval` expressions as multiline block scalars (`>-`) — see Template expressions
557
575
  5. **Include filePath** property pointing to the YAML file location
558
- 6. **Set proper entityKind** when defining entities (Order, Contact, OrderEntity, AccountingTransaction, Calendar, CalendarEvent, Other)
576
+ 6. **Set proper entityKind** when defining entities (Order, Contact, OrderEntity, AccountingTransaction, Job, Commodity, Calendar, CalendarEvent, CalendarAvailabilityBlock, AuditChangeEntry, Other); it is required for `quickSearch`
559
577
  7. **DataGrid options** requires ALL properties: query, rootEntityName, entityKeys, navigationType, enableDynamicGrid, enableViews, enableSearch, enablePagination, enableColumns, enableFilter, defaultView, onRowClick
560
578
  8. **Form component** requires `validationSchema` in props
561
579
  9. **Adaptive (mobile/tablet/desktop) design by default** — every form and layout must work on phones (`xs`), tablets (`sm`/`md`), and desktops (`lg+`):
@@ -281,7 +281,7 @@ Composable MUI ListItem with component slots and built-in popover menu.
281
281
  | `secondaryComponent` | `ComponentProps` | Secondary text area component |
282
282
  | `avatarComponent` | `ComponentProps` | Avatar slot component |
283
283
  | `secondaryAction` | `ComponentProps` | Right-side action component |
284
- | `selected` | `boolean` | Visual selection state |
284
+ | `selected` | `boolean \| template string` | Visual selection state; templates resolve against props, variables, and store values |
285
285
  | `disabled` | `boolean` | Disabled state |
286
286
  | `divider` | `boolean` | Bottom divider |
287
287
  | `button` | `boolean` | Render as ListItemButton |
@@ -291,6 +291,8 @@ Composable MUI ListItem with component slots and built-in popover menu.
291
291
 
292
292
  **Events:** `onClick`, `menu.items[].onClick`
293
293
 
294
+ Both event forms receive `sender`, the component's named `actions`, and the active React Hook Form/custom form context (with Formik retained for compatibility), so list-item actions can read or update the surrounding form.
295
+
294
296
  **Children:** Fallback — rendered when no primary/secondary components.
295
297
 
296
298
  ```yaml
@@ -521,12 +521,13 @@ props:
521
521
 
522
522
  ## avatar
523
523
 
524
- Template-aware display component for compact entity cards and planner headers. Circular avatar with automatic two-letter initials. Sources tried in priority order: `src` image → `firstName` + `lastName` → `name` → `email` → placeholder user icon. Color is picked deterministically from the theme palette by hashing `colorSeed`.
524
+ Template-aware display component for compact entity cards and planner headers. Circular avatar with explicit text or automatic two-letter initials. Sources tried in priority order: `src` image → `text` → `firstName` + `lastName` → `name` → `email` → placeholder user icon. Color is picked deterministically from the theme palette by hashing `colorSeed`.
525
525
 
526
526
  **Props (all template-parsed):**
527
527
  | Prop | Type | Description |
528
528
  |------|------|-------------|
529
529
  | `src` | `string` | Image URL; falls back to initials when empty or broken |
530
+ | `text` | `string` | Explicit fallback text after `src`; values longer than two characters scale to fit |
530
531
  | `name` | `string` | Full name: `Andre Kovac` → AK, `Kovac, Andre` → AK, `Madonna` → MA |
531
532
  | `firstName` / `lastName` | `string` | Explicit name parts (organization user form); take priority over `name` |
532
533
  | `email` | `string` | Last text fallback: local part, digits dropped (`andre.kovac@…` → AK) |
@@ -624,7 +625,7 @@ Icon renderer. Supports FontAwesome, Tabler, and Feather icons.
624
625
  **Props:**
625
626
  | Prop | Type | Description |
626
627
  |------|------|-------------|
627
- | `icon` | `string` | Icon name: FontAwesome name, `tabler-*` class, or `activity` |
628
+ | `icon` | `string` | Template-aware icon name: FontAwesome name, `tabler-*` class, or `activity`; resolves against variables and store values |
628
629
  | `color` | `string` | MUI palette color (e.g., `primary`, `error.light`) or CSS color |
629
630
  | `iconColor` | `string` | Higher-priority color override |
630
631
  | `style` | `object` | Inline styles |
@@ -633,7 +634,7 @@ Icon renderer. Supports FontAwesome, Tabler, and Feather icons.
633
634
  component: icon
634
635
  name: statusIcon
635
636
  props:
636
- icon: check-circle
637
+ icon: "{{ item.statusIcon }}"
637
638
  color: success
638
639
  ```
639
640
 
@@ -519,13 +519,15 @@ MUI Card container with optional header, content, and actions.
519
519
  | `className` | `string` | — | Additional CSS class |
520
520
  | `bgcolor` | `string` | — | Background color |
521
521
  | `color` | `string` | — | Text color |
522
- | `header` | `{title?, subheader?, icon?, iconColor?, sx?}` | — | Renders MUI CardHeader; icon is its avatar |
522
+ | `header` | `{title?, subheader?, icon?, iconColor?, sx?}` | — | Renders MUI CardHeader; title/subheader may be localized and title, subheader, and icon are template-aware |
523
523
  | `disableContentWrapper` | `boolean` | `false` | Skip CardContent wrapper |
524
524
  | `contentSx` | `SxProps` | — | CardContent styles |
525
525
  | `contentClassName` | `string` | `card-content` | CardContent CSS class |
526
526
 
527
527
  **Children:** Yes — wrapped in CardContent (unless `disableContentWrapper`).
528
528
 
529
+ When `onClick` is present, the card is keyboard accessible: Enter and Space activate it and a focus outline is shown. Actions receive the card name as `sender`; keyboard events from nested interactive controls are ignored.
530
+
529
531
  ```yaml
530
532
  component: card
531
533
  name: summaryCard