@stndrds/schema 1.0.0-alpha.281 → 1.0.0-alpha.284

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 (81) hide show
  1. package/dist/all-DanoPxKr.d.ts +879 -0
  2. package/dist/all-bG_ha0VV.d.mts +879 -0
  3. package/dist/{attributes-D8eHv5Kf.d.ts → attributes-CNYwg_Nr.d.ts} +14 -13
  4. package/dist/{attributes--M1ifW8_.d.mts → attributes-CWPLbp7c.d.mts} +14 -13
  5. package/dist/capabilities.d.mts +146 -0
  6. package/dist/capabilities.d.ts +146 -0
  7. package/dist/capabilities.js +77 -0
  8. package/dist/capabilities.mjs +70 -0
  9. package/dist/{chunk-A5PPZ2FM.mjs → chunk-5OBQRDRM.mjs} +7 -3
  10. package/dist/{chunk-ORPCS24B.mjs → chunk-AGRAFDGU.mjs} +72 -16
  11. package/dist/{chunk-LRFLSFIA.js → chunk-BOICAZHR.js} +9 -4
  12. package/dist/{chunk-E47WAI5K.js → chunk-I3EYILYO.js} +5 -5
  13. package/dist/{chunk-OYHBQMC7.js → chunk-K6ET4CXP.js} +3 -3
  14. package/dist/{chunk-MLTXSBOB.mjs → chunk-PNOWKRH2.mjs} +2 -2
  15. package/dist/{chunk-XCLVXM7F.mjs → chunk-R57T4UDX.mjs} +1 -1
  16. package/dist/{chunk-SYQDFZ74.mjs → chunk-RUO25ERR.mjs} +36 -0
  17. package/dist/{chunk-HWZRSXFB.js → chunk-V26R64A4.js} +36 -0
  18. package/dist/{chunk-TU6ECJFZ.js → chunk-YZ5RCMIQ.js} +112 -45
  19. package/dist/exceptions.d.mts +24 -3
  20. package/dist/exceptions.d.ts +24 -3
  21. package/dist/exceptions.js +39 -39
  22. package/dist/exceptions.mjs +1 -1
  23. package/dist/{helpers-DyoPqiSz.d.ts → helpers-CXkVwpsl.d.ts} +3 -3
  24. package/dist/{helpers-BiABdSxK.d.mts → helpers-Dul_r9rJ.d.mts} +3 -3
  25. package/dist/{index-DWoqObyG.d.mts → index-Ca-MzQuU.d.mts} +46 -6
  26. package/dist/{index-TMlrIKAY.d.ts → index-Ns6KGfrZ.d.ts} +46 -6
  27. package/dist/index.d.mts +1508 -357
  28. package/dist/index.d.ts +1508 -357
  29. package/dist/index.js +1396 -363
  30. package/dist/index.mjs +1072 -124
  31. package/dist/{migrations-B1kkIhIX.d.ts → migrations-DaFneOfx.d.ts} +1 -1
  32. package/dist/{migrations-BNlQVzDC.d.mts → migrations-fRvadl6i.d.mts} +1 -1
  33. package/dist/{objects-DmMqHn3L.d.mts → objects-CDwMSnqv.d.mts} +2 -4
  34. package/dist/{objects-DgFojgwH.d.ts → objects-DJv6WrDE.d.ts} +2 -4
  35. package/dist/{types-DHqXzkgW.d.mts → types-CVYiFc69.d.mts} +1 -1
  36. package/dist/{types-DYYFto8d.d.ts → types-NGEww_ln.d.ts} +1 -1
  37. package/dist/utils.js +8 -8
  38. package/dist/utils.mjs +2 -2
  39. package/dist/validation/all.d.mts +7 -7
  40. package/dist/validation/all.d.ts +7 -7
  41. package/dist/validation/all.js +46 -46
  42. package/dist/validation/all.mjs +5 -5
  43. package/dist/validation/complex/currency.d.mts +2 -2
  44. package/dist/validation/complex/currency.d.ts +2 -2
  45. package/dist/validation/complex/location.d.mts +2 -2
  46. package/dist/validation/complex/location.d.ts +2 -2
  47. package/dist/validation/complex/phone.d.mts +2 -2
  48. package/dist/validation/complex/phone.d.ts +2 -2
  49. package/dist/validation/complex/relation.d.mts +2 -2
  50. package/dist/validation/complex/relation.d.ts +2 -2
  51. package/dist/validation/complex/richtext.d.mts +2 -2
  52. package/dist/validation/complex/richtext.d.ts +2 -2
  53. package/dist/validation/complex/select.d.mts +2 -2
  54. package/dist/validation/complex/select.d.ts +2 -2
  55. package/dist/validation/complex/user.d.mts +2 -2
  56. package/dist/validation/complex/user.d.ts +2 -2
  57. package/dist/validation/computed/formula.d.mts +2 -2
  58. package/dist/validation/computed/formula.d.ts +2 -2
  59. package/dist/validation/computed/rollup.d.mts +2 -2
  60. package/dist/validation/computed/rollup.d.ts +2 -2
  61. package/dist/validation/config/index.d.mts +4 -4
  62. package/dist/validation/config/index.d.ts +4 -4
  63. package/dist/validation/config/index.js +15 -11
  64. package/dist/validation/config/index.mjs +2 -2
  65. package/dist/validation/core/index.d.mts +3 -3
  66. package/dist/validation/core/index.d.ts +3 -3
  67. package/dist/validation/object/index.d.mts +5 -5
  68. package/dist/validation/object/index.d.ts +5 -5
  69. package/dist/validation/object/index.js +15 -15
  70. package/dist/validation/object/index.mjs +3 -3
  71. package/dist/validation/primitives/checkbox.d.mts +2 -2
  72. package/dist/validation/primitives/checkbox.d.ts +2 -2
  73. package/dist/validation/primitives/date.d.mts +2 -2
  74. package/dist/validation/primitives/date.d.ts +2 -2
  75. package/dist/validation/primitives/number.d.mts +2 -2
  76. package/dist/validation/primitives/number.d.ts +2 -2
  77. package/dist/validation/primitives/text.d.mts +2 -2
  78. package/dist/validation/primitives/text.d.ts +2 -2
  79. package/package.json +10 -5
  80. package/dist/all-BVp3k9Hi.d.ts +0 -471
  81. package/dist/all-CnIU2anT.d.mts +0 -471
@@ -1,158 +1,158 @@
1
1
  'use strict';
2
2
 
3
- var chunkHWZRSXFB_js = require('./chunk-HWZRSXFB.js');
3
+ var chunkV26R64A4_js = require('./chunk-V26R64A4.js');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "AccessDeniedError", {
8
8
  enumerable: true,
9
- get: function () { return chunkHWZRSXFB_js.AccessDeniedError; }
9
+ get: function () { return chunkV26R64A4_js.AccessDeniedError; }
10
10
  });
11
11
  Object.defineProperty(exports, "AttributeInUseError", {
12
12
  enumerable: true,
13
- get: function () { return chunkHWZRSXFB_js.AttributeInUseError; }
13
+ get: function () { return chunkV26R64A4_js.AttributeInUseError; }
14
14
  });
15
15
  Object.defineProperty(exports, "AttributeNotFoundError", {
16
16
  enumerable: true,
17
- get: function () { return chunkHWZRSXFB_js.AttributeNotFoundError; }
17
+ get: function () { return chunkV26R64A4_js.AttributeNotFoundError; }
18
18
  });
19
19
  Object.defineProperty(exports, "ChangeTypeNotSupportedError", {
20
20
  enumerable: true,
21
- get: function () { return chunkHWZRSXFB_js.ChangeTypeNotSupportedError; }
21
+ get: function () { return chunkV26R64A4_js.ChangeTypeNotSupportedError; }
22
22
  });
23
23
  Object.defineProperty(exports, "ConcurrentModificationError", {
24
24
  enumerable: true,
25
- get: function () { return chunkHWZRSXFB_js.ConcurrentModificationError; }
25
+ get: function () { return chunkV26R64A4_js.ConcurrentModificationError; }
26
26
  });
27
27
  Object.defineProperty(exports, "DestructiveSyncNotAllowedError", {
28
28
  enumerable: true,
29
- get: function () { return chunkHWZRSXFB_js.DestructiveSyncNotAllowedError; }
29
+ get: function () { return chunkV26R64A4_js.DestructiveSyncNotAllowedError; }
30
30
  });
31
31
  Object.defineProperty(exports, "DuplicateError", {
32
32
  enumerable: true,
33
- get: function () { return chunkHWZRSXFB_js.DuplicateError; }
33
+ get: function () { return chunkV26R64A4_js.DuplicateError; }
34
34
  });
35
35
  Object.defineProperty(exports, "ForbiddenError", {
36
36
  enumerable: true,
37
- get: function () { return chunkHWZRSXFB_js.ForbiddenError; }
37
+ get: function () { return chunkV26R64A4_js.ForbiddenError; }
38
38
  });
39
39
  Object.defineProperty(exports, "MemoryNotFoundError", {
40
40
  enumerable: true,
41
- get: function () { return chunkHWZRSXFB_js.MemoryNotFoundError; }
41
+ get: function () { return chunkV26R64A4_js.MemoryNotFoundError; }
42
42
  });
43
43
  Object.defineProperty(exports, "MigrationTimeoutError", {
44
44
  enumerable: true,
45
- get: function () { return chunkHWZRSXFB_js.MigrationTimeoutError; }
45
+ get: function () { return chunkV26R64A4_js.MigrationTimeoutError; }
46
46
  });
47
47
  Object.defineProperty(exports, "NotFoundError", {
48
48
  enumerable: true,
49
- get: function () { return chunkHWZRSXFB_js.NotFoundError; }
49
+ get: function () { return chunkV26R64A4_js.NotFoundError; }
50
50
  });
51
51
  Object.defineProperty(exports, "NotImplementedError", {
52
52
  enumerable: true,
53
- get: function () { return chunkHWZRSXFB_js.NotImplementedError; }
53
+ get: function () { return chunkV26R64A4_js.NotImplementedError; }
54
54
  });
55
55
  Object.defineProperty(exports, "ObjectNotFoundError", {
56
56
  enumerable: true,
57
- get: function () { return chunkHWZRSXFB_js.ObjectNotFoundError; }
57
+ get: function () { return chunkV26R64A4_js.ObjectNotFoundError; }
58
58
  });
59
59
  Object.defineProperty(exports, "ObjectReferencedError", {
60
60
  enumerable: true,
61
- get: function () { return chunkHWZRSXFB_js.ObjectReferencedError; }
61
+ get: function () { return chunkV26R64A4_js.ObjectReferencedError; }
62
62
  });
63
63
  Object.defineProperty(exports, "OrphanSystemAttributeError", {
64
64
  enumerable: true,
65
- get: function () { return chunkHWZRSXFB_js.OrphanSystemAttributeError; }
65
+ get: function () { return chunkV26R64A4_js.OrphanSystemAttributeError; }
66
66
  });
67
67
  Object.defineProperty(exports, "ProtectedResourceError", {
68
68
  enumerable: true,
69
- get: function () { return chunkHWZRSXFB_js.ProtectedResourceError; }
69
+ get: function () { return chunkV26R64A4_js.ProtectedResourceError; }
70
70
  });
71
71
  Object.defineProperty(exports, "ProtectedRoleError", {
72
72
  enumerable: true,
73
- get: function () { return chunkHWZRSXFB_js.ProtectedRoleError; }
73
+ get: function () { return chunkV26R64A4_js.ProtectedRoleError; }
74
74
  });
75
75
  Object.defineProperty(exports, "RecordNotFoundError", {
76
76
  enumerable: true,
77
- get: function () { return chunkHWZRSXFB_js.RecordNotFoundError; }
77
+ get: function () { return chunkV26R64A4_js.RecordNotFoundError; }
78
78
  });
79
79
  Object.defineProperty(exports, "RecordReferencedError", {
80
80
  enumerable: true,
81
- get: function () { return chunkHWZRSXFB_js.RecordReferencedError; }
81
+ get: function () { return chunkV26R64A4_js.RecordReferencedError; }
82
82
  });
83
83
  Object.defineProperty(exports, "RepositoryError", {
84
84
  enumerable: true,
85
- get: function () { return chunkHWZRSXFB_js.RepositoryError; }
85
+ get: function () { return chunkV26R64A4_js.RepositoryError; }
86
86
  });
87
87
  Object.defineProperty(exports, "RoleNotFoundError", {
88
88
  enumerable: true,
89
- get: function () { return chunkHWZRSXFB_js.RoleNotFoundError; }
89
+ get: function () { return chunkV26R64A4_js.RoleNotFoundError; }
90
90
  });
91
91
  Object.defineProperty(exports, "SchemaError", {
92
92
  enumerable: true,
93
- get: function () { return chunkHWZRSXFB_js.SchemaError; }
93
+ get: function () { return chunkV26R64A4_js.SchemaError; }
94
94
  });
95
95
  Object.defineProperty(exports, "SchemaErrorCode", {
96
96
  enumerable: true,
97
- get: function () { return chunkHWZRSXFB_js.SchemaErrorCode; }
97
+ get: function () { return chunkV26R64A4_js.SchemaErrorCode; }
98
98
  });
99
99
  Object.defineProperty(exports, "SchemaPlanNotFoundError", {
100
100
  enumerable: true,
101
- get: function () { return chunkHWZRSXFB_js.SchemaPlanNotFoundError; }
101
+ get: function () { return chunkV26R64A4_js.SchemaPlanNotFoundError; }
102
102
  });
103
103
  Object.defineProperty(exports, "SearchBackendError", {
104
104
  enumerable: true,
105
- get: function () { return chunkHWZRSXFB_js.SearchBackendError; }
105
+ get: function () { return chunkV26R64A4_js.SearchBackendError; }
106
106
  });
107
107
  Object.defineProperty(exports, "StorageError", {
108
108
  enumerable: true,
109
- get: function () { return chunkHWZRSXFB_js.StorageError; }
109
+ get: function () { return chunkV26R64A4_js.StorageError; }
110
110
  });
111
111
  Object.defineProperty(exports, "SyncCascadeError", {
112
112
  enumerable: true,
113
- get: function () { return chunkHWZRSXFB_js.SyncCascadeError; }
113
+ get: function () { return chunkV26R64A4_js.SyncCascadeError; }
114
114
  });
115
115
  Object.defineProperty(exports, "SyncConflictError", {
116
116
  enumerable: true,
117
- get: function () { return chunkHWZRSXFB_js.SyncConflictError; }
117
+ get: function () { return chunkV26R64A4_js.SyncConflictError; }
118
118
  });
119
119
  Object.defineProperty(exports, "SyncError", {
120
120
  enumerable: true,
121
- get: function () { return chunkHWZRSXFB_js.SyncError; }
121
+ get: function () { return chunkV26R64A4_js.SyncError; }
122
122
  });
123
123
  Object.defineProperty(exports, "SystemEntityImmutableError", {
124
124
  enumerable: true,
125
- get: function () { return chunkHWZRSXFB_js.SystemEntityImmutableError; }
125
+ get: function () { return chunkV26R64A4_js.SystemEntityImmutableError; }
126
126
  });
127
127
  Object.defineProperty(exports, "ValidationError", {
128
128
  enumerable: true,
129
- get: function () { return chunkHWZRSXFB_js.ValidationError; }
129
+ get: function () { return chunkV26R64A4_js.ValidationError; }
130
130
  });
131
131
  Object.defineProperty(exports, "isAttributeInUseError", {
132
132
  enumerable: true,
133
- get: function () { return chunkHWZRSXFB_js.isAttributeInUseError; }
133
+ get: function () { return chunkV26R64A4_js.isAttributeInUseError; }
134
134
  });
135
135
  Object.defineProperty(exports, "isNotFoundError", {
136
136
  enumerable: true,
137
- get: function () { return chunkHWZRSXFB_js.isNotFoundError; }
137
+ get: function () { return chunkV26R64A4_js.isNotFoundError; }
138
138
  });
139
139
  Object.defineProperty(exports, "isObjectReferencedError", {
140
140
  enumerable: true,
141
- get: function () { return chunkHWZRSXFB_js.isObjectReferencedError; }
141
+ get: function () { return chunkV26R64A4_js.isObjectReferencedError; }
142
142
  });
143
143
  Object.defineProperty(exports, "isProtectedResourceError", {
144
144
  enumerable: true,
145
- get: function () { return chunkHWZRSXFB_js.isProtectedResourceError; }
145
+ get: function () { return chunkV26R64A4_js.isProtectedResourceError; }
146
146
  });
147
147
  Object.defineProperty(exports, "isRecordReferencedError", {
148
148
  enumerable: true,
149
- get: function () { return chunkHWZRSXFB_js.isRecordReferencedError; }
149
+ get: function () { return chunkV26R64A4_js.isRecordReferencedError; }
150
150
  });
151
151
  Object.defineProperty(exports, "isSchemaError", {
152
152
  enumerable: true,
153
- get: function () { return chunkHWZRSXFB_js.isSchemaError; }
153
+ get: function () { return chunkV26R64A4_js.isSchemaError; }
154
154
  });
155
155
  Object.defineProperty(exports, "isValidationError", {
156
156
  enumerable: true,
157
- get: function () { return chunkHWZRSXFB_js.isValidationError; }
157
+ get: function () { return chunkV26R64A4_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-SYQDFZ74.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-RUO25ERR.mjs';
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
- import { A as Attribute } from './attributes-D8eHv5Kf.js';
3
- import { V as ValidationMessages, a as ValidationResult } from './types-DYYFto8d.js';
4
- import { O as ObjectDefinition } from './objects-DgFojgwH.js';
2
+ import { A as Attribute } from './attributes-CNYwg_Nr.js';
3
+ import { V as ValidationMessages, a as ValidationResult } from './types-NGEww_ln.js';
4
+ import { O as ObjectDefinition } from './objects-DJv6WrDE.js';
5
5
 
6
6
  /**
7
7
  * Create a Zod schema for any attribute type.
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
- import { A as Attribute } from './attributes--M1ifW8_.mjs';
3
- import { V as ValidationMessages, a as ValidationResult } from './types-DHqXzkgW.mjs';
4
- import { O as ObjectDefinition } from './objects-DmMqHn3L.mjs';
2
+ import { A as Attribute } from './attributes-CWPLbp7c.mjs';
3
+ import { V as ValidationMessages, a as ValidationResult } from './types-CVYiFc69.mjs';
4
+ import { O as ObjectDefinition } from './objects-CDwMSnqv.mjs';
5
5
 
6
6
  /**
7
7
  * Create a Zod schema for any attribute type.
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
- import { A as Attribute, f as AttributeType, e as RollupAttribute } from './attributes--M1ifW8_.mjs';
2
+ import { A as Attribute, f as AttributeType, e as RollupAttribute } from './attributes-CWPLbp7c.mjs';
3
3
  import { IconName } from '@stndrds/constants';
4
- import { L as ListViewTabVisibility } from './objects-DmMqHn3L.mjs';
4
+ import { L as ListViewTabVisibility } from './objects-CDwMSnqv.mjs';
5
5
 
6
6
  /** Operators for text-based attributes */
7
7
  type TextFilterOperator = "is" | "is_not" | "contains" | "not_contains" | "starts_with" | "ends_with" | "is_empty" | "is_not_empty";
@@ -467,14 +467,49 @@ interface ListViewTab {
467
467
  /** Pinned kanban columns (by option value) - for kanban layout only */
468
468
  kanbanPinnedColumns?: string[];
469
469
  }
470
+ /**
471
+ * One stacked section of the detail side panel.
472
+ *
473
+ * The panel is a column beside the main tabs, so its sections stack — a second
474
+ * tab row inside it would compete with the first. Only the three kinds below
475
+ * exist in v1; `table`, `custom`, `richtext`, `forms`, `emails` and `meetings`
476
+ * stay out until width and UX prove out, and their absence from this union is
477
+ * what enforces that.
478
+ */
479
+ type SidePanelPane = {
480
+ kind: "fields";
481
+ id?: string;
482
+ label?: string;
483
+ attributes: string[];
484
+ } | {
485
+ kind: "activity";
486
+ id?: string;
487
+ label?: string;
488
+ } | {
489
+ kind: "documents";
490
+ /**
491
+ * Required, unlike the other kinds: `DocumentsTabContent` keys its
492
+ * sort-mode persistence on it, so a pane without one would share the
493
+ * main-column documents tab's stored sort.
494
+ */
495
+ id: string;
496
+ label?: string;
497
+ allowUpload?: boolean;
498
+ allowRemove?: boolean;
499
+ };
470
500
  /**
471
501
  * Configuration for the side panel displayed alongside tab content.
472
502
  * When present, a right-side panel shows the configured attributes as flat fields.
473
503
  */
474
504
  interface SidePanelConfig {
475
- /** Attribute names to display as flat fields in the panel */
476
- attributes: string[];
477
- /** Width in pixels. @default 320 */
505
+ /**
506
+ * Flat fields, the original shape. Equivalent to a single `fields` pane and
507
+ * still supported unchanged; supply this or `panes`, not both.
508
+ */
509
+ attributes?: string[];
510
+ /** Ordered stacked sections, rendered top to bottom. */
511
+ panes?: SidePanelPane[];
512
+ /** Width in pixels. @default 480 */
478
513
  width?: number;
479
514
  }
480
515
  /**
@@ -761,6 +796,11 @@ declare function getAttributeConfigSchema(type: AttributeType): z.ZodObject<z.Zo
761
796
  * This ensures only allowed properties are stored in the database
762
797
  */
763
798
  declare function parseAttributeConfig(type: AttributeType, config: Record<string, unknown>): Record<string, unknown>;
799
+ /**
800
+ * The config contract as a WRITE applies it: the stored schema plus the
801
+ * stricter option and icon rules newly written values must satisfy.
802
+ */
803
+ declare function getAttributeConfigWriteSchema(type: AttributeType): z.ZodObject<z.ZodRawShape>;
764
804
  /**
765
805
  * Strict parser for newly created attribute definitions.
766
806
  *
@@ -778,4 +818,4 @@ declare function parseAttributeConfigForCreate(type: AttributeType, input: unkno
778
818
  */
779
819
  declare function parseAttributeConfigForUpdate(stored: Attribute, patch: Partial<AddAttributeInput>): Record<string, unknown>;
780
820
 
781
- export { type SortDirection 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 TabType as a0, type TableSource as a1, type UpdateObjectInput as a2, type UpdateViewInput as a3, type ViewOverlay as a4, getRollupFilterOperators as a5, isDetailView as a6, isFieldGroup as a7, isListView as a8, isNoValueOperator as a9, multiselectOptionWriteSchema as aa, parseAttributeConfig as ab, parseAttributeConfigForCreate as ac, parseAttributeConfigForUpdate as ad, selectOptionWriteSchema as ae, statusGroupSchema as af, statusOptionWriteSchema as ag, attributeConfigSchemas as ah, getAttributeConfigSchema as ai, 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 };
821
+ 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 };
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
- import { A as Attribute, f as AttributeType, e as RollupAttribute } from './attributes-D8eHv5Kf.js';
2
+ import { A as Attribute, f as AttributeType, e as RollupAttribute } from './attributes-CNYwg_Nr.js';
3
3
  import { IconName } from '@stndrds/constants';
4
- import { L as ListViewTabVisibility } from './objects-DgFojgwH.js';
4
+ import { L as ListViewTabVisibility } from './objects-DJv6WrDE.js';
5
5
 
6
6
  /** Operators for text-based attributes */
7
7
  type TextFilterOperator = "is" | "is_not" | "contains" | "not_contains" | "starts_with" | "ends_with" | "is_empty" | "is_not_empty";
@@ -467,14 +467,49 @@ interface ListViewTab {
467
467
  /** Pinned kanban columns (by option value) - for kanban layout only */
468
468
  kanbanPinnedColumns?: string[];
469
469
  }
470
+ /**
471
+ * One stacked section of the detail side panel.
472
+ *
473
+ * The panel is a column beside the main tabs, so its sections stack — a second
474
+ * tab row inside it would compete with the first. Only the three kinds below
475
+ * exist in v1; `table`, `custom`, `richtext`, `forms`, `emails` and `meetings`
476
+ * stay out until width and UX prove out, and their absence from this union is
477
+ * what enforces that.
478
+ */
479
+ type SidePanelPane = {
480
+ kind: "fields";
481
+ id?: string;
482
+ label?: string;
483
+ attributes: string[];
484
+ } | {
485
+ kind: "activity";
486
+ id?: string;
487
+ label?: string;
488
+ } | {
489
+ kind: "documents";
490
+ /**
491
+ * Required, unlike the other kinds: `DocumentsTabContent` keys its
492
+ * sort-mode persistence on it, so a pane without one would share the
493
+ * main-column documents tab's stored sort.
494
+ */
495
+ id: string;
496
+ label?: string;
497
+ allowUpload?: boolean;
498
+ allowRemove?: boolean;
499
+ };
470
500
  /**
471
501
  * Configuration for the side panel displayed alongside tab content.
472
502
  * When present, a right-side panel shows the configured attributes as flat fields.
473
503
  */
474
504
  interface SidePanelConfig {
475
- /** Attribute names to display as flat fields in the panel */
476
- attributes: string[];
477
- /** Width in pixels. @default 320 */
505
+ /**
506
+ * Flat fields, the original shape. Equivalent to a single `fields` pane and
507
+ * still supported unchanged; supply this or `panes`, not both.
508
+ */
509
+ attributes?: string[];
510
+ /** Ordered stacked sections, rendered top to bottom. */
511
+ panes?: SidePanelPane[];
512
+ /** Width in pixels. @default 480 */
478
513
  width?: number;
479
514
  }
480
515
  /**
@@ -761,6 +796,11 @@ declare function getAttributeConfigSchema(type: AttributeType): z.ZodObject<z.Zo
761
796
  * This ensures only allowed properties are stored in the database
762
797
  */
763
798
  declare function parseAttributeConfig(type: AttributeType, config: Record<string, unknown>): Record<string, unknown>;
799
+ /**
800
+ * The config contract as a WRITE applies it: the stored schema plus the
801
+ * stricter option and icon rules newly written values must satisfy.
802
+ */
803
+ declare function getAttributeConfigWriteSchema(type: AttributeType): z.ZodObject<z.ZodRawShape>;
764
804
  /**
765
805
  * Strict parser for newly created attribute definitions.
766
806
  *
@@ -778,4 +818,4 @@ declare function parseAttributeConfigForCreate(type: AttributeType, input: unkno
778
818
  */
779
819
  declare function parseAttributeConfigForUpdate(stored: Attribute, patch: Partial<AddAttributeInput>): Record<string, unknown>;
780
820
 
781
- export { type SortDirection 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 TabType as a0, type TableSource as a1, type UpdateObjectInput as a2, type UpdateViewInput as a3, type ViewOverlay as a4, getRollupFilterOperators as a5, isDetailView as a6, isFieldGroup as a7, isListView as a8, isNoValueOperator as a9, multiselectOptionWriteSchema as aa, parseAttributeConfig as ab, parseAttributeConfigForCreate as ac, parseAttributeConfigForUpdate as ad, selectOptionWriteSchema as ae, statusGroupSchema as af, statusOptionWriteSchema as ag, attributeConfigSchemas as ah, getAttributeConfigSchema as ai, 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 };
821
+ 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 };