@objectstack/spec 0.1.0 → 0.1.1

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 (231) hide show
  1. package/README.md +66 -125
  2. package/dist/ai/agent.zod.d.ts +164 -0
  3. package/dist/ai/agent.zod.d.ts.map +1 -0
  4. package/dist/ai/agent.zod.js +51 -0
  5. package/dist/data/dataset.zod.d.ts +60 -0
  6. package/dist/data/dataset.zod.d.ts.map +1 -0
  7. package/dist/data/dataset.zod.js +54 -0
  8. package/dist/data/field.zod.d.ts +170 -0
  9. package/dist/data/field.zod.d.ts.map +1 -0
  10. package/dist/data/field.zod.js +81 -0
  11. package/dist/data/flow.zod.d.ts +242 -0
  12. package/dist/data/flow.zod.d.ts.map +1 -0
  13. package/dist/data/flow.zod.js +77 -0
  14. package/dist/data/mapping.zod.d.ts +257 -0
  15. package/dist/data/mapping.zod.d.ts.map +1 -0
  16. package/dist/data/mapping.zod.js +65 -0
  17. package/dist/data/object.zod.d.ts +364 -0
  18. package/dist/data/object.zod.d.ts.map +1 -0
  19. package/dist/data/object.zod.js +54 -0
  20. package/dist/data/permission.zod.d.ts +163 -0
  21. package/dist/data/permission.zod.d.ts.map +1 -0
  22. package/dist/data/permission.zod.js +62 -0
  23. package/dist/data/query.zod.d.ts +89 -0
  24. package/dist/data/query.zod.d.ts.map +1 -0
  25. package/dist/data/query.zod.js +71 -0
  26. package/dist/data/sharing.zod.d.ts +63 -0
  27. package/dist/data/sharing.zod.d.ts.map +1 -0
  28. package/dist/data/sharing.zod.js +57 -0
  29. package/dist/data/validation.zod.d.ts +236 -0
  30. package/dist/data/validation.zod.d.ts.map +1 -0
  31. package/dist/data/validation.zod.js +59 -0
  32. package/dist/data/workflow.zod.d.ts +195 -0
  33. package/dist/data/workflow.zod.d.ts.map +1 -0
  34. package/dist/data/workflow.zod.js +64 -0
  35. package/dist/index.d.ts +33 -5
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +53 -5
  38. package/dist/system/api.zod.d.ts +168 -0
  39. package/dist/system/api.zod.d.ts.map +1 -0
  40. package/dist/system/api.zod.js +53 -0
  41. package/dist/system/constants/index.d.ts +11 -0
  42. package/dist/system/constants/index.d.ts.map +1 -0
  43. package/dist/system/constants/index.js +26 -0
  44. package/dist/system/constants/paths.d.ts +71 -0
  45. package/dist/system/constants/paths.d.ts.map +1 -0
  46. package/dist/system/constants/paths.js +65 -0
  47. package/dist/system/datasource.zod.d.ts +127 -0
  48. package/dist/system/datasource.zod.d.ts.map +1 -0
  49. package/dist/system/datasource.zod.js +62 -0
  50. package/dist/system/identity.zod.d.ts +204 -0
  51. package/dist/system/identity.zod.d.ts.map +1 -0
  52. package/dist/system/identity.zod.js +68 -0
  53. package/dist/system/license.zod.d.ts +110 -0
  54. package/dist/system/license.zod.d.ts.map +1 -0
  55. package/dist/system/license.zod.js +63 -0
  56. package/dist/system/manifest.zod.d.ts +126 -0
  57. package/dist/system/manifest.zod.d.ts.map +1 -0
  58. package/dist/system/manifest.zod.js +68 -0
  59. package/dist/system/policy.zod.d.ts +209 -0
  60. package/dist/system/policy.zod.d.ts.map +1 -0
  61. package/dist/system/policy.zod.js +54 -0
  62. package/dist/system/role.zod.d.ts +34 -0
  63. package/dist/system/role.zod.d.ts.map +1 -0
  64. package/dist/system/role.zod.js +25 -0
  65. package/dist/system/territory.zod.d.ts +91 -0
  66. package/dist/system/territory.zod.d.ts.map +1 -0
  67. package/dist/system/territory.zod.js +64 -0
  68. package/dist/system/translation.zod.d.ts +171 -0
  69. package/dist/system/translation.zod.d.ts.map +1 -0
  70. package/dist/system/translation.zod.js +34 -0
  71. package/dist/system/types/index.d.ts +7 -0
  72. package/dist/system/types/index.d.ts.map +1 -0
  73. package/dist/system/types/index.js +22 -0
  74. package/dist/system/types/plugin.d.ts +113 -0
  75. package/dist/system/types/plugin.d.ts.map +1 -0
  76. package/dist/system/types/plugin.js +6 -0
  77. package/dist/system/webhook.zod.d.ts +106 -0
  78. package/dist/system/webhook.zod.d.ts.map +1 -0
  79. package/dist/system/webhook.zod.js +56 -0
  80. package/dist/ui/action.zod.d.ts +148 -0
  81. package/dist/ui/action.zod.d.ts.map +1 -0
  82. package/dist/ui/action.zod.js +48 -0
  83. package/dist/ui/app.zod.d.ts +299 -0
  84. package/dist/ui/app.zod.d.ts.map +1 -0
  85. package/dist/ui/app.zod.js +127 -0
  86. package/dist/ui/dashboard.zod.d.ts +207 -0
  87. package/dist/ui/dashboard.zod.d.ts.map +1 -0
  88. package/dist/ui/dashboard.zod.js +66 -0
  89. package/dist/ui/page.zod.d.ts +187 -0
  90. package/dist/ui/page.zod.d.ts.map +1 -0
  91. package/dist/ui/page.zod.js +48 -0
  92. package/dist/ui/report.zod.d.ts +224 -0
  93. package/dist/ui/report.zod.d.ts.map +1 -0
  94. package/dist/ui/report.zod.js +68 -0
  95. package/dist/ui/view.zod.d.ts +887 -0
  96. package/dist/ui/view.zod.d.ts.map +1 -0
  97. package/dist/ui/view.zod.js +83 -0
  98. package/json-schema/AIKnowledge.json +30 -0
  99. package/json-schema/AIModelConfig.json +41 -0
  100. package/json-schema/AITool.json +33 -0
  101. package/json-schema/Action.json +156 -0
  102. package/json-schema/ActionParam.json +76 -0
  103. package/json-schema/Agent.json +140 -0
  104. package/json-schema/ApiEndpoint.json +162 -0
  105. package/json-schema/ApiMapping.json +28 -0
  106. package/json-schema/App.json +286 -0
  107. package/json-schema/AppBranding.json +24 -0
  108. package/json-schema/AuditPolicy.json +31 -0
  109. package/json-schema/AuthProtocol.json +17 -0
  110. package/json-schema/AuthProvider.json +171 -0
  111. package/json-schema/CalendarConfig.json +28 -0
  112. package/json-schema/ChartType.json +19 -0
  113. package/json-schema/Dashboard.json +117 -0
  114. package/json-schema/DashboardNavItem.json +42 -0
  115. package/json-schema/DashboardWidget.json +89 -0
  116. package/json-schema/Dataset.json +63 -0
  117. package/json-schema/DatasetMode.json +16 -0
  118. package/json-schema/Datasource.json +93 -0
  119. package/json-schema/DatasourceCapabilities.json +36 -0
  120. package/json-schema/DriverType.json +27 -0
  121. package/json-schema/EmailAlertAction.json +37 -0
  122. package/json-schema/Feature.json +51 -0
  123. package/json-schema/Field.json +219 -0
  124. package/json-schema/FieldMapping.json +83 -0
  125. package/json-schema/FieldNode.json +32 -0
  126. package/json-schema/FieldPermission.json +22 -0
  127. package/json-schema/FieldType.json +36 -0
  128. package/json-schema/FieldUpdateAction.json +32 -0
  129. package/json-schema/FilterNode.json +52 -0
  130. package/json-schema/FilterOperator.json +26 -0
  131. package/json-schema/Flow.json +186 -0
  132. package/json-schema/FlowEdge.json +37 -0
  133. package/json-schema/FlowNode.json +65 -0
  134. package/json-schema/FlowNodeAction.json +24 -0
  135. package/json-schema/FlowVariable.json +34 -0
  136. package/json-schema/FormSection.json +42 -0
  137. package/json-schema/FormView.json +99 -0
  138. package/json-schema/FormatValidation.json +59 -0
  139. package/json-schema/GanttConfig.json +32 -0
  140. package/json-schema/GroupNavItem.json +42 -0
  141. package/json-schema/HttpMethod.json +16 -0
  142. package/json-schema/Index.json +30 -0
  143. package/json-schema/KanbanConfig.json +31 -0
  144. package/json-schema/LDAPConfig.json +39 -0
  145. package/json-schema/License.json +57 -0
  146. package/json-schema/ListView.json +153 -0
  147. package/json-schema/Locale.json +10 -0
  148. package/json-schema/LogicOperator.json +14 -0
  149. package/json-schema/Manifest.json +90 -0
  150. package/json-schema/Mapping.json +270 -0
  151. package/json-schema/MenuItem.json +28 -0
  152. package/json-schema/MetricType.json +14 -0
  153. package/json-schema/NavigationItem.json +214 -0
  154. package/json-schema/NetworkPolicy.json +31 -0
  155. package/json-schema/OIDCConfig.json +46 -0
  156. package/json-schema/OWDModel.json +14 -0
  157. package/json-schema/Object.json +331 -0
  158. package/json-schema/ObjectCapabilities.json +36 -0
  159. package/json-schema/ObjectNavItem.json +46 -0
  160. package/json-schema/ObjectPermission.json +42 -0
  161. package/json-schema/Page.json +117 -0
  162. package/json-schema/PageComponent.json +36 -0
  163. package/json-schema/PageNavItem.json +47 -0
  164. package/json-schema/PageRegion.json +63 -0
  165. package/json-schema/PasswordPolicy.json +41 -0
  166. package/json-schema/PermissionSet.json +96 -0
  167. package/json-schema/Plan.json +53 -0
  168. package/json-schema/Policy.json +138 -0
  169. package/json-schema/Query.json +128 -0
  170. package/json-schema/RateLimit.json +26 -0
  171. package/json-schema/Report.json +219 -0
  172. package/json-schema/ReportChart.json +45 -0
  173. package/json-schema/ReportColumn.json +35 -0
  174. package/json-schema/ReportGrouping.json +38 -0
  175. package/json-schema/ReportType.json +15 -0
  176. package/json-schema/Role.json +32 -0
  177. package/json-schema/SAMLConfig.json +44 -0
  178. package/json-schema/ScriptValidation.json +48 -0
  179. package/json-schema/SelectOption.json +32 -0
  180. package/json-schema/SessionPolicy.json +27 -0
  181. package/json-schema/SharingLevel.json +13 -0
  182. package/json-schema/SharingRule.json +58 -0
  183. package/json-schema/SharingRuleType.json +15 -0
  184. package/json-schema/SortNode.json +26 -0
  185. package/json-schema/StateMachineValidation.json +59 -0
  186. package/json-schema/Territory.json +77 -0
  187. package/json-schema/TerritoryModel.json +34 -0
  188. package/json-schema/TerritoryType.json +15 -0
  189. package/json-schema/TransformType.json +18 -0
  190. package/json-schema/TranslationBundle.json +78 -0
  191. package/json-schema/TranslationData.json +75 -0
  192. package/json-schema/UniquenessValidation.json +59 -0
  193. package/json-schema/UrlNavItem.json +51 -0
  194. package/json-schema/ValidationRule.json +211 -0
  195. package/json-schema/View.json +500 -0
  196. package/json-schema/Webhook.json +88 -0
  197. package/json-schema/WebhookReceiver.json +66 -0
  198. package/json-schema/WebhookTriggerType.json +16 -0
  199. package/json-schema/WorkflowAction.json +84 -0
  200. package/json-schema/WorkflowRule.json +128 -0
  201. package/json-schema/WorkflowTriggerType.json +16 -0
  202. package/package.json +28 -19
  203. package/dist/examples.d.ts +0 -28
  204. package/dist/examples.d.ts.map +0 -1
  205. package/dist/examples.js +0 -250
  206. package/dist/types/index.d.ts +0 -9
  207. package/dist/types/index.d.ts.map +0 -1
  208. package/dist/types/index.js +0 -8
  209. package/dist/types/meta/field-type.d.ts +0 -54
  210. package/dist/types/meta/field-type.d.ts.map +0 -1
  211. package/dist/types/meta/field-type.js +0 -42
  212. package/dist/types/meta/index.d.ts +0 -13
  213. package/dist/types/meta/index.d.ts.map +0 -1
  214. package/dist/types/meta/index.js +0 -12
  215. package/dist/types/meta/object-entity.d.ts +0 -246
  216. package/dist/types/meta/object-entity.d.ts.map +0 -1
  217. package/dist/types/meta/object-entity.js +0 -9
  218. package/dist/types/meta/object-field.d.ts +0 -199
  219. package/dist/types/meta/object-field.d.ts.map +0 -1
  220. package/dist/types/meta/object-field.js +0 -9
  221. package/dist/types/meta/object-view.d.ts +0 -430
  222. package/dist/types/meta/object-view.d.ts.map +0 -1
  223. package/dist/types/meta/object-view.js +0 -9
  224. package/src/examples.ts +0 -257
  225. package/src/index.ts +0 -10
  226. package/src/types/index.ts +0 -9
  227. package/src/types/meta/field-type.ts +0 -91
  228. package/src/types/meta/index.ts +0 -13
  229. package/src/types/meta/object-entity.ts +0 -265
  230. package/src/types/meta/object-field.ts +0 -218
  231. package/src/types/meta/object-view.ts +0 -475
@@ -1,218 +0,0 @@
1
- /**
2
- * Object Field Interface
3
- *
4
- * Defines the structure of a field within an ObjectEntity.
5
- * Fields represent individual data attributes and their metadata.
6
- *
7
- * @module types/meta/object-field
8
- */
9
-
10
- import { FieldType } from './field-type';
11
-
12
- /**
13
- * Represents a field definition within an ObjectEntity
14
- *
15
- * @remarks
16
- * ObjectField defines the complete metadata for a single field/attribute
17
- * in an entity. This includes its type, validation rules, UI hints, and
18
- * relationships to other entities (in the case of lookup fields).
19
- *
20
- * @example
21
- * ```typescript
22
- * const nameField: ObjectField = {
23
- * name: 'name',
24
- * label: 'Full Name',
25
- * type: 'text',
26
- * required: true,
27
- * maxLength: 100
28
- * };
29
- *
30
- * const ownerField: ObjectField = {
31
- * name: 'owner',
32
- * label: 'Owner',
33
- * type: 'lookup',
34
- * required: true,
35
- * lookupEntity: 'User',
36
- * lookupDisplayField: 'name'
37
- * };
38
- * ```
39
- */
40
- export interface ObjectField {
41
- /**
42
- * Technical name of the field (used in code and database)
43
- *
44
- * @remarks
45
- * Should be in camelCase or snake_case format.
46
- * Must be unique within the entity.
47
- *
48
- * @example 'firstName', 'email', 'created_at'
49
- */
50
- name: string;
51
-
52
- /**
53
- * Human-readable label for the field
54
- *
55
- * @remarks
56
- * Used in UI forms, tables, and documentation.
57
- *
58
- * @example 'First Name', 'Email Address', 'Created At'
59
- */
60
- label: string;
61
-
62
- /**
63
- * Data type of the field
64
- *
65
- * @see FieldType
66
- */
67
- type: FieldType;
68
-
69
- /**
70
- * Detailed description of the field's purpose and usage
71
- *
72
- * @remarks
73
- * Used for tooltips, help text, and documentation.
74
- */
75
- description?: string;
76
-
77
- /**
78
- * Whether the field is required (cannot be null/empty)
79
- *
80
- * @defaultValue false
81
- */
82
- required?: boolean;
83
-
84
- /**
85
- * Whether the field value must be unique across all records
86
- *
87
- * @defaultValue false
88
- */
89
- unique?: boolean;
90
-
91
- /**
92
- * Default value when creating new records
93
- *
94
- * @remarks
95
- * Can be a static value or a function reference (e.g., 'NOW()' for timestamps)
96
- */
97
- defaultValue?: unknown;
98
-
99
- /**
100
- * Maximum length for text fields
101
- *
102
- * @remarks
103
- * Only applicable to 'text', 'textarea', 'email', 'url' field types
104
- */
105
- maxLength?: number;
106
-
107
- /**
108
- * Minimum length for text fields
109
- *
110
- * @remarks
111
- * Only applicable to 'text', 'textarea', 'email', 'url' field types
112
- */
113
- minLength?: number;
114
-
115
- /**
116
- * Minimum value for numeric fields
117
- *
118
- * @remarks
119
- * Only applicable to 'number', 'currency', 'percentage' field types
120
- */
121
- min?: number;
122
-
123
- /**
124
- * Maximum value for numeric fields
125
- *
126
- * @remarks
127
- * Only applicable to 'number', 'currency', 'percentage' field types
128
- */
129
- max?: number;
130
-
131
- /**
132
- * Regular expression pattern for validation
133
- *
134
- * @remarks
135
- * Applied to text-based field types for custom validation rules
136
- *
137
- * @example '^[A-Z]{2}-\\d{4}$' for pattern like 'AB-1234'
138
- */
139
- pattern?: string;
140
-
141
- /**
142
- * Target entity name for lookup fields
143
- *
144
- * @remarks
145
- * Required when type is 'lookup'. Specifies which entity this field references.
146
- *
147
- * @example 'User', 'Account', 'Product'
148
- */
149
- lookupEntity?: string;
150
-
151
- /**
152
- * Field name in the lookup entity to display
153
- *
154
- * @remarks
155
- * Used to show human-readable text instead of IDs.
156
- * Common values: 'name', 'title', 'label'
157
- *
158
- * @defaultValue 'name'
159
- */
160
- lookupDisplayField?: string;
161
-
162
- /**
163
- * Available options for select/multiselect fields
164
- *
165
- * @remarks
166
- * Only applicable to 'select' and 'multiselect' field types
167
- *
168
- * @example
169
- * ```typescript
170
- * options: [
171
- * { value: 'draft', label: 'Draft' },
172
- * { value: 'published', label: 'Published' }
173
- * ]
174
- * ```
175
- */
176
- options?: Array<{
177
- /** Internal value stored in database */
178
- value: string | number;
179
- /** Human-readable label shown in UI */
180
- label: string;
181
- }>;
182
-
183
- /**
184
- * Whether the field is indexed for faster queries
185
- *
186
- * @defaultValue false
187
- */
188
- indexed?: boolean;
189
-
190
- /**
191
- * Whether the field is read-only
192
- *
193
- * @remarks
194
- * Read-only fields can only be set by the system, not by users
195
- *
196
- * @defaultValue false
197
- */
198
- readonly?: boolean;
199
-
200
- /**
201
- * Whether the field is hidden from UI by default
202
- *
203
- * @remarks
204
- * Hidden fields are still stored and queryable but not shown in standard forms/views
205
- *
206
- * @defaultValue false
207
- */
208
- hidden?: boolean;
209
-
210
- /**
211
- * Custom metadata for extensions and plugins
212
- *
213
- * @remarks
214
- * Allows third-party code to attach arbitrary metadata to fields
215
- * without modifying the core interface
216
- */
217
- metadata?: Record<string, unknown>;
218
- }
@@ -1,475 +0,0 @@
1
- /**
2
- * Object View Interface
3
- *
4
- * Defines the structure of a view in the ObjectStack metamodel.
5
- * Views represent different UI presentations of entity data (list, form, detail, etc.).
6
- *
7
- * @module types/meta/object-view
8
- */
9
-
10
- /**
11
- * Available view types in the ObjectStack metamodel
12
- *
13
- * @remarks
14
- * Each view type corresponds to a different UI presentation pattern:
15
- *
16
- * - `list`: Tabular list view (grid/table)
17
- * - `detail`: Single record detail view (read-only)
18
- * - `form`: Single record form view (editable)
19
- * - `card`: Card-based list view
20
- * - `kanban`: Kanban board view
21
- * - `calendar`: Calendar view (for date-based records)
22
- * - `chart`: Chart/graph visualization
23
- * - `map`: Geographic map view
24
- * - `timeline`: Timeline view for chronological data
25
- * - `custom`: Custom view implementation
26
- */
27
- export type ViewType =
28
- | 'list'
29
- | 'detail'
30
- | 'form'
31
- | 'card'
32
- | 'kanban'
33
- | 'calendar'
34
- | 'chart'
35
- | 'map'
36
- | 'timeline'
37
- | 'custom';
38
-
39
- /**
40
- * Layout configuration for a view
41
- *
42
- * @remarks
43
- * Defines how fields are organized visually in the view
44
- */
45
- export interface ViewLayout {
46
- /**
47
- * Layout type/strategy
48
- *
49
- * @remarks
50
- * - `single-column`: One field per row
51
- * - `two-column`: Two fields per row
52
- * - `grid`: Flexible grid layout
53
- * - `tabs`: Fields organized in tabs
54
- * - `sections`: Fields grouped in named sections
55
- *
56
- * @defaultValue 'single-column'
57
- */
58
- type?: 'single-column' | 'two-column' | 'grid' | 'tabs' | 'sections';
59
-
60
- /**
61
- * Sections for organizing fields
62
- *
63
- * @remarks
64
- * Only applicable when layout type is 'sections' or 'tabs'
65
- */
66
- sections?: Array<{
67
- /** Section identifier */
68
- id: string;
69
- /** Section title */
70
- title: string;
71
- /** Field names to include in this section */
72
- fields: string[];
73
- /** Whether section is collapsed by default */
74
- collapsed?: boolean;
75
- }>;
76
- }
77
-
78
- /**
79
- * Filter configuration for a view
80
- *
81
- * @remarks
82
- * Defines how records are filtered in the view
83
- */
84
- export interface ViewFilter {
85
- /**
86
- * Field name to filter on
87
- *
88
- * @example 'status', 'createdAt', 'owner'
89
- */
90
- field: string;
91
-
92
- /**
93
- * Filter operator
94
- *
95
- * @remarks
96
- * Available operators depend on the field type:
97
- * - Text: equals, contains, startsWith, endsWith
98
- * - Number: equals, gt, gte, lt, lte, between
99
- * - Boolean: equals
100
- * - Date: equals, before, after, between
101
- * - Lookup: equals, in
102
- */
103
- operator: 'equals' | 'contains' | 'startsWith' | 'endsWith' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'before' | 'after' | 'in' | 'notIn';
104
-
105
- /**
106
- * Filter value(s)
107
- *
108
- * @remarks
109
- * Type depends on operator and field type.
110
- * For 'between' operator, should be an array of two values.
111
- */
112
- value: unknown;
113
- }
114
-
115
- /**
116
- * Sort configuration for a view
117
- *
118
- * @remarks
119
- * Defines how records are sorted in the view
120
- */
121
- export interface ViewSort {
122
- /**
123
- * Field name to sort by
124
- *
125
- * @example 'name', 'createdAt', 'priority'
126
- */
127
- field: string;
128
-
129
- /**
130
- * Sort direction
131
- *
132
- * @defaultValue 'asc'
133
- */
134
- direction: 'asc' | 'desc';
135
- }
136
-
137
- /**
138
- * Column configuration for list views
139
- *
140
- * @remarks
141
- * Defines how a field is displayed as a column in a list/table view
142
- */
143
- export interface ViewColumn {
144
- /**
145
- * Field name to display
146
- *
147
- * @remarks
148
- * Must be a valid field name from the entity
149
- */
150
- field: string;
151
-
152
- /**
153
- * Column header label
154
- *
155
- * @remarks
156
- * If not provided, uses the field's label
157
- */
158
- label?: string;
159
-
160
- /**
161
- * Column width
162
- *
163
- * @remarks
164
- * Can be in pixels (e.g., 100) or percentage (e.g., '20%')
165
- */
166
- width?: number | string;
167
-
168
- /**
169
- * Whether the column is sortable
170
- *
171
- * @defaultValue true
172
- */
173
- sortable?: boolean;
174
-
175
- /**
176
- * Whether the column is visible by default
177
- *
178
- * @defaultValue true
179
- */
180
- visible?: boolean;
181
-
182
- /**
183
- * Text alignment in the column
184
- *
185
- * @defaultValue 'left'
186
- */
187
- align?: 'left' | 'center' | 'right';
188
-
189
- /**
190
- * Custom formatting function name
191
- *
192
- * @remarks
193
- * Reference to a formatting function (e.g., 'currency', 'date', 'percentage')
194
- *
195
- * @example 'currency', 'date:MM/DD/YYYY', 'number:2' (2 decimal places)
196
- */
197
- format?: string;
198
- }
199
-
200
- /**
201
- * Represents a view definition for an ObjectEntity
202
- *
203
- * @remarks
204
- * ObjectView defines how an entity's data is presented in the UI.
205
- * Multiple views can exist for the same entity, each tailored for
206
- * different use cases (e.g., "All Users", "Active Users", "Admin Users").
207
- *
208
- * Views are used by ObjectUI to:
209
- * - Render lists with specific columns and filters
210
- * - Display forms with specific field layouts
211
- * - Show detailed records with custom presentations
212
- *
213
- * @example
214
- * ```typescript
215
- * const allUsersView: ObjectView = {
216
- * name: 'all_users',
217
- * label: 'All Users',
218
- * entityName: 'User',
219
- * type: 'list',
220
- * columns: [
221
- * { field: 'name', width: '30%' },
222
- * { field: 'email', width: '30%' },
223
- * { field: 'status', width: '20%' },
224
- * { field: 'createdAt', width: '20%', format: 'date:MM/DD/YYYY' }
225
- * ],
226
- * sort: [
227
- * { field: 'name', direction: 'asc' }
228
- * ]
229
- * };
230
- *
231
- * const userFormView: ObjectView = {
232
- * name: 'user_form',
233
- * label: 'User Form',
234
- * entityName: 'User',
235
- * type: 'form',
236
- * fields: ['name', 'email', 'role', 'status'],
237
- * layout: {
238
- * type: 'sections',
239
- * sections: [
240
- * {
241
- * id: 'basic',
242
- * title: 'Basic Information',
243
- * fields: ['name', 'email']
244
- * },
245
- * {
246
- * id: 'settings',
247
- * title: 'Settings',
248
- * fields: ['role', 'status']
249
- * }
250
- * ]
251
- * }
252
- * };
253
- * ```
254
- */
255
- export interface ObjectView {
256
- /**
257
- * Technical name of the view
258
- *
259
- * @remarks
260
- * Used in code and URLs.
261
- * Should be in snake_case format.
262
- * Must be unique within the entity's views.
263
- *
264
- * @example 'all_users', 'active_orders', 'recent_products'
265
- */
266
- name: string;
267
-
268
- /**
269
- * Human-readable label for the view
270
- *
271
- * @remarks
272
- * Used in UI menus, tabs, and headers.
273
- *
274
- * @example 'All Users', 'Active Orders', 'Recent Products'
275
- */
276
- label: string;
277
-
278
- /**
279
- * Name of the entity this view is for
280
- *
281
- * @remarks
282
- * Must be a valid entity name in the system.
283
- *
284
- * @example 'User', 'SalesOrder', 'Product'
285
- */
286
- entityName: string;
287
-
288
- /**
289
- * Type of view presentation
290
- *
291
- * @see ViewType
292
- */
293
- type: ViewType;
294
-
295
- /**
296
- * Detailed description of the view's purpose
297
- *
298
- * @remarks
299
- * Used for tooltips and documentation
300
- */
301
- description?: string;
302
-
303
- /**
304
- * Field names to display in the view
305
- *
306
- * @remarks
307
- * For form/detail views: determines which fields to show and in what order.
308
- * For list views: used if columns are not specified.
309
- * Must be valid field names from the entity.
310
- */
311
- fields?: string[];
312
-
313
- /**
314
- * Column configurations for list views
315
- *
316
- * @remarks
317
- * Only applicable to 'list', 'card', 'kanban' view types.
318
- * Defines how each field is rendered as a column.
319
- *
320
- * @see ViewColumn
321
- */
322
- columns?: ViewColumn[];
323
-
324
- /**
325
- * Layout configuration for the view
326
- *
327
- * @remarks
328
- * Only applicable to 'form' and 'detail' view types.
329
- *
330
- * @see ViewLayout
331
- */
332
- layout?: ViewLayout;
333
-
334
- /**
335
- * Default filters to apply to the view
336
- *
337
- * @remarks
338
- * Filters are applied when the view is loaded.
339
- * Users can typically modify or remove these filters.
340
- *
341
- * @see ViewFilter
342
- */
343
- filters?: ViewFilter[];
344
-
345
- /**
346
- * Default sort order for the view
347
- *
348
- * @remarks
349
- * Can specify multiple sort levels (first by field1, then by field2, etc.)
350
- *
351
- * @see ViewSort
352
- */
353
- sort?: ViewSort[];
354
-
355
- /**
356
- * Number of records to display per page
357
- *
358
- * @remarks
359
- * Only applicable to list-based views.
360
- *
361
- * @defaultValue 25
362
- */
363
- pageSize?: number;
364
-
365
- /**
366
- * Icon identifier for the view
367
- *
368
- * @remarks
369
- * Used in view switchers, menus, and tabs.
370
- *
371
- * @example 'list', 'grid', 'calendar'
372
- */
373
- icon?: string;
374
-
375
- /**
376
- * Whether this is the default view for the entity
377
- *
378
- * @remarks
379
- * The default view is shown when navigating to the entity
380
- * without specifying a view.
381
- *
382
- * @defaultValue false
383
- */
384
- default?: boolean;
385
-
386
- /**
387
- * Whether the view is visible in navigation menus
388
- *
389
- * @remarks
390
- * Hidden views can still be accessed directly via URL
391
- *
392
- * @defaultValue true
393
- */
394
- visible?: boolean;
395
-
396
- /**
397
- * Permission required to access this view
398
- *
399
- * @remarks
400
- * Users without this permission cannot see or access the view.
401
- *
402
- * @example 'user.read', 'sales.order.view.active'
403
- */
404
- permission?: string;
405
-
406
- /**
407
- * Query string for advanced filtering
408
- *
409
- * @remarks
410
- * Alternative to the filters array for complex queries.
411
- * Uses the ObjectQL query syntax.
412
- *
413
- * @example 'status = "active" AND createdAt > NOW() - 30d'
414
- */
415
- query?: string;
416
-
417
- /**
418
- * Field name for grouping records (kanban view)
419
- *
420
- * @remarks
421
- * Only applicable to 'kanban' view type.
422
- * The field should have predefined options (select/lookup).
423
- *
424
- * @example 'status', 'priority', 'assignedTo'
425
- */
426
- groupBy?: string;
427
-
428
- /**
429
- * Date field name for calendar/timeline views
430
- *
431
- * @remarks
432
- * Only applicable to 'calendar' and 'timeline' view types.
433
- * Must be a date or datetime field.
434
- *
435
- * @example 'dueDate', 'scheduledAt', 'eventDate'
436
- */
437
- dateField?: string;
438
-
439
- /**
440
- * Chart configuration for chart views
441
- *
442
- * @remarks
443
- * Only applicable to 'chart' view type.
444
- */
445
- chartConfig?: {
446
- /** Chart type (bar, line, pie, etc.) */
447
- type: 'bar' | 'line' | 'pie' | 'donut' | 'area' | 'scatter';
448
- /** Field for x-axis */
449
- xAxis?: string;
450
- /** Field for y-axis */
451
- yAxis?: string;
452
- /** Aggregation function (count, sum, avg, etc.) */
453
- aggregation?: 'count' | 'sum' | 'avg' | 'min' | 'max';
454
- };
455
-
456
- /**
457
- * Custom component reference for custom views
458
- *
459
- * @remarks
460
- * Only applicable to 'custom' view type.
461
- * References a registered custom component.
462
- *
463
- * @example 'MyCustomDashboard', 'AnalyticsView'
464
- */
465
- customComponent?: string;
466
-
467
- /**
468
- * Custom metadata for extensions and plugins
469
- *
470
- * @remarks
471
- * Allows third-party code to attach arbitrary metadata to views
472
- * without modifying the core interface
473
- */
474
- metadata?: Record<string, unknown>;
475
- }