@stndrds/schema 1.0.0-alpha.292 → 1.0.0-alpha.293

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 (35) hide show
  1. package/dist/{all-FGIrc6mI.d.ts → all-CDJSpI46.d.ts} +105 -6
  2. package/dist/{all-DaucFjyz.d.mts → all-Cru_CaSY.d.mts} +105 -6
  3. package/dist/{chunk-5JMQNH2A.js → chunk-5N7OSHVX.js} +4 -4
  4. package/dist/{chunk-KLDZHAGX.mjs → chunk-APRL56F4.mjs} +1 -1
  5. package/dist/{chunk-RDYTVHNN.js → chunk-C32UUQ6D.js} +4 -4
  6. package/dist/{chunk-UW3BOSB6.mjs → chunk-GRUSTQK3.mjs} +1 -1
  7. package/dist/{chunk-D4A6FL67.js → chunk-OASIPLEB.js} +96 -59
  8. package/dist/{chunk-ZHB4VBCX.js → chunk-P4VCAPJT.js} +3 -3
  9. package/dist/{chunk-QYJ532XI.mjs → chunk-ULM2BA5A.mjs} +60 -27
  10. package/dist/{chunk-JSQCTLV5.mjs → chunk-VGGGLTYJ.mjs} +1 -1
  11. package/dist/{chunk-3YCZ5H3H.js → chunk-Y3UPKP2B.js} +4 -0
  12. package/dist/{chunk-7WEOBXXA.mjs → chunk-Z5OPSBMQ.mjs} +4 -0
  13. package/dist/exceptions.d.mts +3 -0
  14. package/dist/exceptions.d.ts +3 -0
  15. package/dist/exceptions.js +39 -39
  16. package/dist/exceptions.mjs +1 -1
  17. package/dist/{index-Eh1tYq3i.d.mts → index-BdVnHL3F.d.mts} +27 -7
  18. package/dist/{index-0VG9u1XW.d.ts → index-CFhPHQaI.d.ts} +27 -7
  19. package/dist/index.d.mts +877 -429
  20. package/dist/index.d.ts +877 -429
  21. package/dist/index.js +654 -334
  22. package/dist/index.mjs +332 -61
  23. package/dist/utils.js +8 -8
  24. package/dist/utils.mjs +2 -2
  25. package/dist/validation/all.d.mts +2 -2
  26. package/dist/validation/all.d.ts +2 -2
  27. package/dist/validation/all.js +29 -29
  28. package/dist/validation/all.mjs +4 -4
  29. package/dist/validation/config/index.d.mts +1 -1
  30. package/dist/validation/config/index.d.ts +1 -1
  31. package/dist/validation/config/index.js +12 -12
  32. package/dist/validation/config/index.mjs +2 -2
  33. package/dist/validation/object/index.js +14 -14
  34. package/dist/validation/object/index.mjs +2 -2
  35. package/package.json +2 -2
@@ -96,10 +96,13 @@ declare const SchemaErrorCode: {
96
96
  readonly AGENT_WORK_MODE_REQUIRED: "AGENT_WORK_MODE_REQUIRED";
97
97
  readonly AGENT_MESSAGE_NOT_FOUND: "AGENT_MESSAGE_NOT_FOUND";
98
98
  readonly AGENT_MESSAGE_NOT_EDITABLE: "AGENT_MESSAGE_NOT_EDITABLE";
99
+ readonly DEVICE_NOT_FOUND: "DEVICE_NOT_FOUND";
100
+ readonly DEVICE_OFFLINE: "DEVICE_OFFLINE";
99
101
  readonly AI_UNKNOWN: "AI_UNKNOWN";
100
102
  readonly AI_USAGE_LIMIT_EXCEEDED: "AI_USAGE_LIMIT_EXCEEDED";
101
103
  readonly AI_INVALID_USAGE: "AI_INVALID_USAGE";
102
104
  readonly AI_INVALID_MODEL: "AI_INVALID_MODEL";
105
+ readonly AI_INVALID_MODEL_INPUT: "AI_INVALID_MODEL_INPUT";
103
106
  readonly AI_REPOSITORY_ERROR: "AI_REPOSITORY_ERROR";
104
107
  readonly AI_GENERATION_FAILED: "AI_GENERATION_FAILED";
105
108
  readonly DOCUMENT_MIME_NOT_ACCEPTED: "DOCUMENT_MIME_NOT_ACCEPTED";
@@ -1,158 +1,158 @@
1
1
  'use strict';
2
2
 
3
- var chunk3YCZ5H3H_js = require('./chunk-3YCZ5H3H.js');
3
+ var chunkY3UPKP2B_js = require('./chunk-Y3UPKP2B.js');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "AccessDeniedError", {
8
8
  enumerable: true,
9
- get: function () { return chunk3YCZ5H3H_js.AccessDeniedError; }
9
+ get: function () { return chunkY3UPKP2B_js.AccessDeniedError; }
10
10
  });
11
11
  Object.defineProperty(exports, "AttributeInUseError", {
12
12
  enumerable: true,
13
- get: function () { return chunk3YCZ5H3H_js.AttributeInUseError; }
13
+ get: function () { return chunkY3UPKP2B_js.AttributeInUseError; }
14
14
  });
15
15
  Object.defineProperty(exports, "AttributeNotFoundError", {
16
16
  enumerable: true,
17
- get: function () { return chunk3YCZ5H3H_js.AttributeNotFoundError; }
17
+ get: function () { return chunkY3UPKP2B_js.AttributeNotFoundError; }
18
18
  });
19
19
  Object.defineProperty(exports, "ChangeTypeNotSupportedError", {
20
20
  enumerable: true,
21
- get: function () { return chunk3YCZ5H3H_js.ChangeTypeNotSupportedError; }
21
+ get: function () { return chunkY3UPKP2B_js.ChangeTypeNotSupportedError; }
22
22
  });
23
23
  Object.defineProperty(exports, "ConcurrentModificationError", {
24
24
  enumerable: true,
25
- get: function () { return chunk3YCZ5H3H_js.ConcurrentModificationError; }
25
+ get: function () { return chunkY3UPKP2B_js.ConcurrentModificationError; }
26
26
  });
27
27
  Object.defineProperty(exports, "DestructiveSyncNotAllowedError", {
28
28
  enumerable: true,
29
- get: function () { return chunk3YCZ5H3H_js.DestructiveSyncNotAllowedError; }
29
+ get: function () { return chunkY3UPKP2B_js.DestructiveSyncNotAllowedError; }
30
30
  });
31
31
  Object.defineProperty(exports, "DuplicateError", {
32
32
  enumerable: true,
33
- get: function () { return chunk3YCZ5H3H_js.DuplicateError; }
33
+ get: function () { return chunkY3UPKP2B_js.DuplicateError; }
34
34
  });
35
35
  Object.defineProperty(exports, "ForbiddenError", {
36
36
  enumerable: true,
37
- get: function () { return chunk3YCZ5H3H_js.ForbiddenError; }
37
+ get: function () { return chunkY3UPKP2B_js.ForbiddenError; }
38
38
  });
39
39
  Object.defineProperty(exports, "MemoryNotFoundError", {
40
40
  enumerable: true,
41
- get: function () { return chunk3YCZ5H3H_js.MemoryNotFoundError; }
41
+ get: function () { return chunkY3UPKP2B_js.MemoryNotFoundError; }
42
42
  });
43
43
  Object.defineProperty(exports, "MigrationTimeoutError", {
44
44
  enumerable: true,
45
- get: function () { return chunk3YCZ5H3H_js.MigrationTimeoutError; }
45
+ get: function () { return chunkY3UPKP2B_js.MigrationTimeoutError; }
46
46
  });
47
47
  Object.defineProperty(exports, "NotFoundError", {
48
48
  enumerable: true,
49
- get: function () { return chunk3YCZ5H3H_js.NotFoundError; }
49
+ get: function () { return chunkY3UPKP2B_js.NotFoundError; }
50
50
  });
51
51
  Object.defineProperty(exports, "NotImplementedError", {
52
52
  enumerable: true,
53
- get: function () { return chunk3YCZ5H3H_js.NotImplementedError; }
53
+ get: function () { return chunkY3UPKP2B_js.NotImplementedError; }
54
54
  });
55
55
  Object.defineProperty(exports, "ObjectNotFoundError", {
56
56
  enumerable: true,
57
- get: function () { return chunk3YCZ5H3H_js.ObjectNotFoundError; }
57
+ get: function () { return chunkY3UPKP2B_js.ObjectNotFoundError; }
58
58
  });
59
59
  Object.defineProperty(exports, "ObjectReferencedError", {
60
60
  enumerable: true,
61
- get: function () { return chunk3YCZ5H3H_js.ObjectReferencedError; }
61
+ get: function () { return chunkY3UPKP2B_js.ObjectReferencedError; }
62
62
  });
63
63
  Object.defineProperty(exports, "OrphanSystemAttributeError", {
64
64
  enumerable: true,
65
- get: function () { return chunk3YCZ5H3H_js.OrphanSystemAttributeError; }
65
+ get: function () { return chunkY3UPKP2B_js.OrphanSystemAttributeError; }
66
66
  });
67
67
  Object.defineProperty(exports, "ProtectedResourceError", {
68
68
  enumerable: true,
69
- get: function () { return chunk3YCZ5H3H_js.ProtectedResourceError; }
69
+ get: function () { return chunkY3UPKP2B_js.ProtectedResourceError; }
70
70
  });
71
71
  Object.defineProperty(exports, "ProtectedRoleError", {
72
72
  enumerable: true,
73
- get: function () { return chunk3YCZ5H3H_js.ProtectedRoleError; }
73
+ get: function () { return chunkY3UPKP2B_js.ProtectedRoleError; }
74
74
  });
75
75
  Object.defineProperty(exports, "RecordNotFoundError", {
76
76
  enumerable: true,
77
- get: function () { return chunk3YCZ5H3H_js.RecordNotFoundError; }
77
+ get: function () { return chunkY3UPKP2B_js.RecordNotFoundError; }
78
78
  });
79
79
  Object.defineProperty(exports, "RecordReferencedError", {
80
80
  enumerable: true,
81
- get: function () { return chunk3YCZ5H3H_js.RecordReferencedError; }
81
+ get: function () { return chunkY3UPKP2B_js.RecordReferencedError; }
82
82
  });
83
83
  Object.defineProperty(exports, "RepositoryError", {
84
84
  enumerable: true,
85
- get: function () { return chunk3YCZ5H3H_js.RepositoryError; }
85
+ get: function () { return chunkY3UPKP2B_js.RepositoryError; }
86
86
  });
87
87
  Object.defineProperty(exports, "RoleNotFoundError", {
88
88
  enumerable: true,
89
- get: function () { return chunk3YCZ5H3H_js.RoleNotFoundError; }
89
+ get: function () { return chunkY3UPKP2B_js.RoleNotFoundError; }
90
90
  });
91
91
  Object.defineProperty(exports, "SchemaError", {
92
92
  enumerable: true,
93
- get: function () { return chunk3YCZ5H3H_js.SchemaError; }
93
+ get: function () { return chunkY3UPKP2B_js.SchemaError; }
94
94
  });
95
95
  Object.defineProperty(exports, "SchemaErrorCode", {
96
96
  enumerable: true,
97
- get: function () { return chunk3YCZ5H3H_js.SchemaErrorCode; }
97
+ get: function () { return chunkY3UPKP2B_js.SchemaErrorCode; }
98
98
  });
99
99
  Object.defineProperty(exports, "SchemaPlanNotFoundError", {
100
100
  enumerable: true,
101
- get: function () { return chunk3YCZ5H3H_js.SchemaPlanNotFoundError; }
101
+ get: function () { return chunkY3UPKP2B_js.SchemaPlanNotFoundError; }
102
102
  });
103
103
  Object.defineProperty(exports, "SearchBackendError", {
104
104
  enumerable: true,
105
- get: function () { return chunk3YCZ5H3H_js.SearchBackendError; }
105
+ get: function () { return chunkY3UPKP2B_js.SearchBackendError; }
106
106
  });
107
107
  Object.defineProperty(exports, "StorageError", {
108
108
  enumerable: true,
109
- get: function () { return chunk3YCZ5H3H_js.StorageError; }
109
+ get: function () { return chunkY3UPKP2B_js.StorageError; }
110
110
  });
111
111
  Object.defineProperty(exports, "SyncCascadeError", {
112
112
  enumerable: true,
113
- get: function () { return chunk3YCZ5H3H_js.SyncCascadeError; }
113
+ get: function () { return chunkY3UPKP2B_js.SyncCascadeError; }
114
114
  });
115
115
  Object.defineProperty(exports, "SyncConflictError", {
116
116
  enumerable: true,
117
- get: function () { return chunk3YCZ5H3H_js.SyncConflictError; }
117
+ get: function () { return chunkY3UPKP2B_js.SyncConflictError; }
118
118
  });
119
119
  Object.defineProperty(exports, "SyncError", {
120
120
  enumerable: true,
121
- get: function () { return chunk3YCZ5H3H_js.SyncError; }
121
+ get: function () { return chunkY3UPKP2B_js.SyncError; }
122
122
  });
123
123
  Object.defineProperty(exports, "SystemEntityImmutableError", {
124
124
  enumerable: true,
125
- get: function () { return chunk3YCZ5H3H_js.SystemEntityImmutableError; }
125
+ get: function () { return chunkY3UPKP2B_js.SystemEntityImmutableError; }
126
126
  });
127
127
  Object.defineProperty(exports, "ValidationError", {
128
128
  enumerable: true,
129
- get: function () { return chunk3YCZ5H3H_js.ValidationError; }
129
+ get: function () { return chunkY3UPKP2B_js.ValidationError; }
130
130
  });
131
131
  Object.defineProperty(exports, "isAttributeInUseError", {
132
132
  enumerable: true,
133
- get: function () { return chunk3YCZ5H3H_js.isAttributeInUseError; }
133
+ get: function () { return chunkY3UPKP2B_js.isAttributeInUseError; }
134
134
  });
135
135
  Object.defineProperty(exports, "isNotFoundError", {
136
136
  enumerable: true,
137
- get: function () { return chunk3YCZ5H3H_js.isNotFoundError; }
137
+ get: function () { return chunkY3UPKP2B_js.isNotFoundError; }
138
138
  });
139
139
  Object.defineProperty(exports, "isObjectReferencedError", {
140
140
  enumerable: true,
141
- get: function () { return chunk3YCZ5H3H_js.isObjectReferencedError; }
141
+ get: function () { return chunkY3UPKP2B_js.isObjectReferencedError; }
142
142
  });
143
143
  Object.defineProperty(exports, "isProtectedResourceError", {
144
144
  enumerable: true,
145
- get: function () { return chunk3YCZ5H3H_js.isProtectedResourceError; }
145
+ get: function () { return chunkY3UPKP2B_js.isProtectedResourceError; }
146
146
  });
147
147
  Object.defineProperty(exports, "isRecordReferencedError", {
148
148
  enumerable: true,
149
- get: function () { return chunk3YCZ5H3H_js.isRecordReferencedError; }
149
+ get: function () { return chunkY3UPKP2B_js.isRecordReferencedError; }
150
150
  });
151
151
  Object.defineProperty(exports, "isSchemaError", {
152
152
  enumerable: true,
153
- get: function () { return chunk3YCZ5H3H_js.isSchemaError; }
153
+ get: function () { return chunkY3UPKP2B_js.isSchemaError; }
154
154
  });
155
155
  Object.defineProperty(exports, "isValidationError", {
156
156
  enumerable: true,
157
- get: function () { return chunk3YCZ5H3H_js.isValidationError; }
157
+ get: function () { return chunkY3UPKP2B_js.isValidationError; }
158
158
  });
@@ -1 +1 @@
1
- export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, SchemaPlanNotFoundError, SearchBackendError, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from './chunk-7WEOBXXA.mjs';
1
+ export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, SchemaPlanNotFoundError, SearchBackendError, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError } from './chunk-Z5OPSBMQ.mjs';
@@ -87,6 +87,9 @@ interface FilterRule {
87
87
  * If set, this rule filters on a qualified edge property.
88
88
  * Requires `attribute` to be a reference attribute (today: `relation` or `document`) that has `.qualifyWith()`.
89
89
  * The `operator` must be valid for the property's type, not the root attribute's type.
90
+ * On a `location` attribute it names one of the location's parts instead
91
+ * (`city` | `postalCode` | `country`), compared as text; `quantifier` is
92
+ * invalid there — one location is not a set of edges (#3118).
90
93
  */
91
94
  property?: string;
92
95
  /**
@@ -410,9 +413,10 @@ type Tab = FormTab | TableTab | CustomTab | ActivityTab | RichtextTab | Document
410
413
  /**
411
414
  * List view layout mode
412
415
  * - `table`: Table/grid layout
416
+ * - `list`: Rows with a description and ordered attributes
413
417
  * - `kanban`: Kanban board layout (grouped by attribute)
414
418
  */
415
- type ListViewLayout = "table" | "kanban";
419
+ type ListViewLayout = "table" | "list" | "kanban";
416
420
  /**
417
421
  * Tab within a list view — each tab carries its own full display configuration.
418
422
  *
@@ -446,19 +450,23 @@ interface ListViewTab {
446
450
  columns: string[];
447
451
  /** Column widths in pixels */
448
452
  columnSizing?: Record<string, number>;
453
+ /** Text/richtext attribute below the record label in List and Kanban. */
454
+ descriptionAttribute?: string;
455
+ /** Ordered attributes below List rows and Kanban cards. An explicit [] hides all. */
456
+ displayAttributes?: string[];
449
457
  /** Filters applied to this tab */
450
458
  filters?: FilterGroup;
451
459
  /** Sort rules for this tab */
452
460
  sorts?: SortRule[];
453
- /** Attribute to group by (required when layout is "kanban") */
461
+ /** Required for Kanban; an inert code grouping hint on customized native List/Table tabs. */
454
462
  groupByAttribute?: string;
455
463
  /** When true, the tab is read-only: no cell editing, no create, no delete */
456
464
  readOnly?: boolean;
457
465
  /** Creation behavior when clicking "+". Default: "redirect" */
458
466
  createMode?: CreateMode;
459
- /** User attribute to display on kanban cards (bottom-left) */
467
+ /** @deprecated Use displayAttributes. Legacy user attribute on Kanban cards. */
460
468
  cardUserAttribute?: string;
461
- /** Date attribute to display on kanban cards (bottom-right) */
469
+ /** @deprecated Use displayAttributes. Legacy date attribute on Kanban cards. */
462
470
  cardDateAttribute?: string;
463
471
  /** Order of kanban columns (by option value) - for kanban layout only */
464
472
  kanbanColumnOrder?: string[];
@@ -528,6 +536,8 @@ interface DetailViewConfig {
528
536
  * The view only holds shared base filters applied to ALL tabs.
529
537
  */
530
538
  interface ListViewConfig {
539
+ /** Allow Architect presentation-only overrides on this system list view. */
540
+ allowPresentationCustomization?: boolean;
531
541
  /** Base filters applied to ALL tabs (scoping, tenant, etc.) */
532
542
  defaultFilters?: FilterGroup;
533
543
  /** Tabs — at least one required. Each carries its own full config. */
@@ -559,8 +569,8 @@ interface BaseViewDefinition {
559
569
  metadata?: Record<string, unknown>;
560
570
  /**
561
571
  * Framework-native view: locked at runtime, force-seeded on every boot,
562
- * never composed with overlays. Set only by the native registry — there is
563
- * deliberately no public builder API for it.
572
+ * composed only with explicitly opted-in presentation overrides. Set only by
573
+ * the native registry — there is deliberately no public builder API for it.
564
574
  */
565
575
  system?: boolean;
566
576
  }
@@ -582,11 +592,21 @@ interface ListViewDefinition extends BaseViewDefinition {
582
592
  * Unified view definition - discriminated union by type
583
593
  */
584
594
  type ViewDefinition = DetailViewDefinition | ListViewDefinition;
595
+ /** Workspace presentation patch for an existing code-owned list tab. */
596
+ type ListViewPresentationTabOverrides = Partial<Pick<ListViewTab, "layout" | "columns" | "columnSizing" | "displayAttributes" | "kanbanColumnOrder" | "kanbanColumnVisibility" | "kanbanPinnedColumns">> & {
597
+ descriptionAttribute?: string | null;
598
+ };
599
+ interface ListViewPresentationOverrides {
600
+ /** Patches keyed by stable tab ID. Null description explicitly clears the code default. */
601
+ tabs: Record<string, ListViewPresentationTabOverrides>;
602
+ }
585
603
  /**
586
604
  * Configuration overrides for user customizations
587
605
  * Only stores the delta from the source view
588
606
  */
589
607
  interface ConfigOverrides {
608
+ /** Allowlisted workspace presentation overrides for opted-in system list views. */
609
+ presentation?: ListViewPresentationOverrides;
590
610
  tabs?: ListViewTab[];
591
611
  hiddenTabIds?: string[];
592
612
  detailTabs?: Tab[];
@@ -830,4 +850,4 @@ declare function parseAttributeConfigForCreate(type: AttributeType, input: unkno
830
850
  */
831
851
  declare function parseAttributeConfigForUpdate(stored: Attribute, patch: Partial<AddAttributeInput>): Record<string, unknown>;
832
852
 
833
- export { type SidePanelPane as $, type AttributeGroupField as A, type FilterGroup as B, type ConfigOverrides as C, type DetailViewConfig as D, type EmailsTab as E, type FilterState as F, type Group as G, type FormDensity as H, type FormTab as I, type FormsTab as J, type InverseSource as K, type ListViewConfig as L, type MeetingsTab as M, type ListViewLayout as N, NO_VALUE_OPERATORS as O, type NoValueOperator as P, OPERATORS_BY_TYPE as Q, type RelativeDateValue as R, type SortRule as S, type TableTab as T, type PhoneFilterValue as U, type ViewType as V, type QueryState as W, type RelationOption as X, type RelationOptionsResponse as Y, type RelationSource as Z, type RichtextTab as _, type ViewConfig as a, type SortDirection as a0, type TabType as a1, type TableSource as a2, type UpdateObjectInput as a3, type UpdateViewInput as a4, type ViewOverlay as a5, getRollupFilterOperators as a6, isDetailView as a7, isFieldGroup as a8, isListView as a9, isNoValueOperator as aa, multiselectOptionWriteSchema as ab, parseAttributeConfig as ac, parseAttributeConfigForCreate as ad, parseAttributeConfigForUpdate as ae, selectOptionWriteSchema as af, statusGroupSchema as ag, statusOptionWriteSchema as ah, attributeConfigSchemas as ai, getAttributeConfigSchema as aj, getAttributeConfigWriteSchema as ak, type FilterOperator as b, type DetailViewDefinition as c, type SidePanelConfig as d, type Field as e, type FieldGroup as f, type CreateMode as g, type Tab as h, type ListViewDefinition as i, type ViewDefinition as j, type ListViewTab as k, type FilterValue as l, type FilterRule as m, type DynamicValue as n, type ActivityTab as o, type AddAttributeInput as p, type AdvancedFilterState as q, type CreateCustomObjectInput as r, type CreateViewInput as s, type CurrencyFilterValue as t, type CustomTab as u, type DayMonthValue as v, type DocumentsTab as w, type EdgeQuantifier as x, type ExtendedFilterRule as y, type FilterCombinator as z };
853
+ export { type RelationSource as $, type AttributeGroupField as A, type FilterCombinator as B, type ConfigOverrides as C, type DetailViewConfig as D, type EmailsTab as E, type FilterState as F, type Group as G, type FilterGroup as H, type FormDensity as I, type FormTab as J, type FormsTab as K, type ListViewTab as L, type MeetingsTab as M, type InverseSource as N, type ListViewPresentationOverrides as O, type ListViewPresentationTabOverrides as P, NO_VALUE_OPERATORS as Q, type RelativeDateValue as R, type SortRule as S, type TableTab as T, type NoValueOperator as U, type ViewType as V, OPERATORS_BY_TYPE as W, type PhoneFilterValue as X, type QueryState as Y, type RelationOption as Z, type RelationOptionsResponse as _, type ViewConfig as a, type RichtextTab as a0, type SidePanelPane as a1, type SortDirection as a2, type TabType as a3, type TableSource as a4, type UpdateObjectInput as a5, type UpdateViewInput as a6, type ViewOverlay as a7, getRollupFilterOperators as a8, isDetailView as a9, isFieldGroup as aa, isListView as ab, isNoValueOperator as ac, multiselectOptionWriteSchema as ad, parseAttributeConfig as ae, parseAttributeConfigForCreate as af, parseAttributeConfigForUpdate as ag, selectOptionWriteSchema as ah, statusGroupSchema as ai, statusOptionWriteSchema as aj, attributeConfigSchemas as ak, getAttributeConfigSchema as al, getAttributeConfigWriteSchema as am, type FilterOperator as b, type DetailViewDefinition as c, type SidePanelConfig as d, type Field as e, type FieldGroup as f, type CreateMode as g, type Tab as h, type ListViewConfig as i, type ListViewDefinition as j, type ListViewLayout as k, type ViewDefinition as l, type FilterValue as m, type FilterRule as n, type DynamicValue as o, type ActivityTab as p, type AddAttributeInput as q, type AdvancedFilterState as r, type CreateCustomObjectInput as s, type CreateViewInput as t, type CurrencyFilterValue as u, type CustomTab as v, type DayMonthValue as w, type DocumentsTab as x, type EdgeQuantifier as y, type ExtendedFilterRule as z };
@@ -87,6 +87,9 @@ interface FilterRule {
87
87
  * If set, this rule filters on a qualified edge property.
88
88
  * Requires `attribute` to be a reference attribute (today: `relation` or `document`) that has `.qualifyWith()`.
89
89
  * The `operator` must be valid for the property's type, not the root attribute's type.
90
+ * On a `location` attribute it names one of the location's parts instead
91
+ * (`city` | `postalCode` | `country`), compared as text; `quantifier` is
92
+ * invalid there — one location is not a set of edges (#3118).
90
93
  */
91
94
  property?: string;
92
95
  /**
@@ -410,9 +413,10 @@ type Tab = FormTab | TableTab | CustomTab | ActivityTab | RichtextTab | Document
410
413
  /**
411
414
  * List view layout mode
412
415
  * - `table`: Table/grid layout
416
+ * - `list`: Rows with a description and ordered attributes
413
417
  * - `kanban`: Kanban board layout (grouped by attribute)
414
418
  */
415
- type ListViewLayout = "table" | "kanban";
419
+ type ListViewLayout = "table" | "list" | "kanban";
416
420
  /**
417
421
  * Tab within a list view — each tab carries its own full display configuration.
418
422
  *
@@ -446,19 +450,23 @@ interface ListViewTab {
446
450
  columns: string[];
447
451
  /** Column widths in pixels */
448
452
  columnSizing?: Record<string, number>;
453
+ /** Text/richtext attribute below the record label in List and Kanban. */
454
+ descriptionAttribute?: string;
455
+ /** Ordered attributes below List rows and Kanban cards. An explicit [] hides all. */
456
+ displayAttributes?: string[];
449
457
  /** Filters applied to this tab */
450
458
  filters?: FilterGroup;
451
459
  /** Sort rules for this tab */
452
460
  sorts?: SortRule[];
453
- /** Attribute to group by (required when layout is "kanban") */
461
+ /** Required for Kanban; an inert code grouping hint on customized native List/Table tabs. */
454
462
  groupByAttribute?: string;
455
463
  /** When true, the tab is read-only: no cell editing, no create, no delete */
456
464
  readOnly?: boolean;
457
465
  /** Creation behavior when clicking "+". Default: "redirect" */
458
466
  createMode?: CreateMode;
459
- /** User attribute to display on kanban cards (bottom-left) */
467
+ /** @deprecated Use displayAttributes. Legacy user attribute on Kanban cards. */
460
468
  cardUserAttribute?: string;
461
- /** Date attribute to display on kanban cards (bottom-right) */
469
+ /** @deprecated Use displayAttributes. Legacy date attribute on Kanban cards. */
462
470
  cardDateAttribute?: string;
463
471
  /** Order of kanban columns (by option value) - for kanban layout only */
464
472
  kanbanColumnOrder?: string[];
@@ -528,6 +536,8 @@ interface DetailViewConfig {
528
536
  * The view only holds shared base filters applied to ALL tabs.
529
537
  */
530
538
  interface ListViewConfig {
539
+ /** Allow Architect presentation-only overrides on this system list view. */
540
+ allowPresentationCustomization?: boolean;
531
541
  /** Base filters applied to ALL tabs (scoping, tenant, etc.) */
532
542
  defaultFilters?: FilterGroup;
533
543
  /** Tabs — at least one required. Each carries its own full config. */
@@ -559,8 +569,8 @@ interface BaseViewDefinition {
559
569
  metadata?: Record<string, unknown>;
560
570
  /**
561
571
  * Framework-native view: locked at runtime, force-seeded on every boot,
562
- * never composed with overlays. Set only by the native registry — there is
563
- * deliberately no public builder API for it.
572
+ * composed only with explicitly opted-in presentation overrides. Set only by
573
+ * the native registry — there is deliberately no public builder API for it.
564
574
  */
565
575
  system?: boolean;
566
576
  }
@@ -582,11 +592,21 @@ interface ListViewDefinition extends BaseViewDefinition {
582
592
  * Unified view definition - discriminated union by type
583
593
  */
584
594
  type ViewDefinition = DetailViewDefinition | ListViewDefinition;
595
+ /** Workspace presentation patch for an existing code-owned list tab. */
596
+ type ListViewPresentationTabOverrides = Partial<Pick<ListViewTab, "layout" | "columns" | "columnSizing" | "displayAttributes" | "kanbanColumnOrder" | "kanbanColumnVisibility" | "kanbanPinnedColumns">> & {
597
+ descriptionAttribute?: string | null;
598
+ };
599
+ interface ListViewPresentationOverrides {
600
+ /** Patches keyed by stable tab ID. Null description explicitly clears the code default. */
601
+ tabs: Record<string, ListViewPresentationTabOverrides>;
602
+ }
585
603
  /**
586
604
  * Configuration overrides for user customizations
587
605
  * Only stores the delta from the source view
588
606
  */
589
607
  interface ConfigOverrides {
608
+ /** Allowlisted workspace presentation overrides for opted-in system list views. */
609
+ presentation?: ListViewPresentationOverrides;
590
610
  tabs?: ListViewTab[];
591
611
  hiddenTabIds?: string[];
592
612
  detailTabs?: Tab[];
@@ -830,4 +850,4 @@ declare function parseAttributeConfigForCreate(type: AttributeType, input: unkno
830
850
  */
831
851
  declare function parseAttributeConfigForUpdate(stored: Attribute, patch: Partial<AddAttributeInput>): Record<string, unknown>;
832
852
 
833
- export { type SidePanelPane as $, type AttributeGroupField as A, type FilterGroup as B, type ConfigOverrides as C, type DetailViewConfig as D, type EmailsTab as E, type FilterState as F, type Group as G, type FormDensity as H, type FormTab as I, type FormsTab as J, type InverseSource as K, type ListViewConfig as L, type MeetingsTab as M, type ListViewLayout as N, NO_VALUE_OPERATORS as O, type NoValueOperator as P, OPERATORS_BY_TYPE as Q, type RelativeDateValue as R, type SortRule as S, type TableTab as T, type PhoneFilterValue as U, type ViewType as V, type QueryState as W, type RelationOption as X, type RelationOptionsResponse as Y, type RelationSource as Z, type RichtextTab as _, type ViewConfig as a, type SortDirection as a0, type TabType as a1, type TableSource as a2, type UpdateObjectInput as a3, type UpdateViewInput as a4, type ViewOverlay as a5, getRollupFilterOperators as a6, isDetailView as a7, isFieldGroup as a8, isListView as a9, isNoValueOperator as aa, multiselectOptionWriteSchema as ab, parseAttributeConfig as ac, parseAttributeConfigForCreate as ad, parseAttributeConfigForUpdate as ae, selectOptionWriteSchema as af, statusGroupSchema as ag, statusOptionWriteSchema as ah, attributeConfigSchemas as ai, getAttributeConfigSchema as aj, getAttributeConfigWriteSchema as ak, type FilterOperator as b, type DetailViewDefinition as c, type SidePanelConfig as d, type Field as e, type FieldGroup as f, type CreateMode as g, type Tab as h, type ListViewDefinition as i, type ViewDefinition as j, type ListViewTab as k, type FilterValue as l, type FilterRule as m, type DynamicValue as n, type ActivityTab as o, type AddAttributeInput as p, type AdvancedFilterState as q, type CreateCustomObjectInput as r, type CreateViewInput as s, type CurrencyFilterValue as t, type CustomTab as u, type DayMonthValue as v, type DocumentsTab as w, type EdgeQuantifier as x, type ExtendedFilterRule as y, type FilterCombinator as z };
853
+ export { type RelationSource as $, type AttributeGroupField as A, type FilterCombinator as B, type ConfigOverrides as C, type DetailViewConfig as D, type EmailsTab as E, type FilterState as F, type Group as G, type FilterGroup as H, type FormDensity as I, type FormTab as J, type FormsTab as K, type ListViewTab as L, type MeetingsTab as M, type InverseSource as N, type ListViewPresentationOverrides as O, type ListViewPresentationTabOverrides as P, NO_VALUE_OPERATORS as Q, type RelativeDateValue as R, type SortRule as S, type TableTab as T, type NoValueOperator as U, type ViewType as V, OPERATORS_BY_TYPE as W, type PhoneFilterValue as X, type QueryState as Y, type RelationOption as Z, type RelationOptionsResponse as _, type ViewConfig as a, type RichtextTab as a0, type SidePanelPane as a1, type SortDirection as a2, type TabType as a3, type TableSource as a4, type UpdateObjectInput as a5, type UpdateViewInput as a6, type ViewOverlay as a7, getRollupFilterOperators as a8, isDetailView as a9, isFieldGroup as aa, isListView as ab, isNoValueOperator as ac, multiselectOptionWriteSchema as ad, parseAttributeConfig as ae, parseAttributeConfigForCreate as af, parseAttributeConfigForUpdate as ag, selectOptionWriteSchema as ah, statusGroupSchema as ai, statusOptionWriteSchema as aj, attributeConfigSchemas as ak, getAttributeConfigSchema as al, getAttributeConfigWriteSchema as am, type FilterOperator as b, type DetailViewDefinition as c, type SidePanelConfig as d, type Field as e, type FieldGroup as f, type CreateMode as g, type Tab as h, type ListViewConfig as i, type ListViewDefinition as j, type ListViewLayout as k, type ViewDefinition as l, type FilterValue as m, type FilterRule as n, type DynamicValue as o, type ActivityTab as p, type AddAttributeInput as q, type AdvancedFilterState as r, type CreateCustomObjectInput as s, type CreateViewInput as t, type CurrencyFilterValue as u, type CustomTab as v, type DayMonthValue as w, type DocumentsTab as x, type EdgeQuantifier as y, type ExtendedFilterRule as z };