@object-ui/types 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +19 -11
  2. package/dist/api-types.d.ts +7 -0
  3. package/dist/api-types.d.ts.map +1 -1
  4. package/dist/api-types.js +4 -6
  5. package/dist/app.d.ts +17 -0
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js +4 -3
  8. package/dist/base.d.ts +7 -0
  9. package/dist/base.d.ts.map +1 -1
  10. package/dist/base.js +4 -6
  11. package/dist/blocks.d.ts +332 -0
  12. package/dist/blocks.d.ts.map +1 -0
  13. package/dist/blocks.js +8 -0
  14. package/dist/complex.d.ts +68 -1
  15. package/dist/complex.d.ts.map +1 -1
  16. package/dist/complex.js +4 -5
  17. package/dist/crud.d.ts +181 -3
  18. package/dist/crud.d.ts.map +1 -1
  19. package/dist/crud.js +4 -6
  20. package/dist/data-display.d.ts +54 -2
  21. package/dist/data-display.d.ts.map +1 -1
  22. package/dist/data-display.js +4 -5
  23. package/dist/data-protocol.d.ts +1268 -0
  24. package/dist/data-protocol.d.ts.map +1 -0
  25. package/dist/data-protocol.js +8 -0
  26. package/dist/data.d.ts +22 -1
  27. package/dist/data.d.ts.map +1 -1
  28. package/dist/data.js +4 -6
  29. package/dist/disclosure.d.ts +70 -1
  30. package/dist/disclosure.d.ts.map +1 -1
  31. package/dist/disclosure.js +4 -5
  32. package/dist/feedback.d.ts +68 -1
  33. package/dist/feedback.d.ts.map +1 -1
  34. package/dist/feedback.js +4 -5
  35. package/dist/field-types.d.ts +728 -0
  36. package/dist/field-types.d.ts.map +1 -0
  37. package/dist/field-types.js +8 -0
  38. package/dist/form.d.ts +123 -1
  39. package/dist/form.d.ts.map +1 -1
  40. package/dist/form.js +4 -5
  41. package/dist/index.d.ts +48 -13
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +4 -37
  44. package/dist/layout.d.ts +66 -16
  45. package/dist/layout.d.ts.map +1 -1
  46. package/dist/layout.js +4 -6
  47. package/dist/navigation.d.ts +102 -2
  48. package/dist/navigation.d.ts.map +1 -1
  49. package/dist/navigation.js +4 -5
  50. package/dist/objectql.d.ts +491 -54
  51. package/dist/objectql.d.ts.map +1 -1
  52. package/dist/objectql.js +4 -6
  53. package/dist/overlay.d.ts +31 -1
  54. package/dist/overlay.d.ts.map +1 -1
  55. package/dist/overlay.js +4 -5
  56. package/dist/plugin-scope.d.ts +194 -0
  57. package/dist/plugin-scope.d.ts.map +1 -0
  58. package/dist/plugin-scope.js +8 -0
  59. package/dist/registry.d.ts +7 -0
  60. package/dist/registry.d.ts.map +1 -1
  61. package/dist/registry.js +7 -0
  62. package/dist/reports.d.ts +336 -0
  63. package/dist/reports.d.ts.map +1 -0
  64. package/dist/reports.js +8 -0
  65. package/dist/theme.d.ts +289 -0
  66. package/dist/theme.d.ts.map +1 -0
  67. package/dist/theme.js +8 -0
  68. package/dist/ui-action.d.ts +175 -0
  69. package/dist/ui-action.d.ts.map +1 -0
  70. package/dist/ui-action.js +8 -0
  71. package/dist/views.d.ts +417 -0
  72. package/dist/views.d.ts.map +1 -0
  73. package/dist/views.js +8 -0
  74. package/dist/zod/app.zod.d.ts +120 -0
  75. package/dist/zod/app.zod.d.ts.map +1 -0
  76. package/dist/zod/app.zod.js +60 -0
  77. package/dist/zod/base.zod.d.ts +202 -0
  78. package/dist/zod/base.zod.d.ts.map +1 -0
  79. package/dist/zod/base.zod.js +198 -0
  80. package/dist/zod/blocks.zod.d.ts +834 -0
  81. package/dist/zod/blocks.zod.d.ts.map +1 -0
  82. package/dist/zod/blocks.zod.js +145 -0
  83. package/dist/zod/complex.zod.d.ts +742 -0
  84. package/dist/zod/complex.zod.d.ts.map +1 -0
  85. package/dist/zod/complex.zod.js +233 -0
  86. package/dist/zod/crud.zod.d.ts +598 -0
  87. package/dist/zod/crud.zod.d.ts.map +1 -0
  88. package/dist/zod/crud.zod.js +230 -0
  89. package/dist/zod/data-display.zod.d.ts +996 -0
  90. package/dist/zod/data-display.zod.d.ts.map +1 -0
  91. package/dist/zod/data-display.zod.js +266 -0
  92. package/dist/zod/disclosure.zod.d.ts +267 -0
  93. package/dist/zod/disclosure.zod.d.ts.map +1 -0
  94. package/dist/zod/disclosure.zod.js +84 -0
  95. package/dist/zod/feedback.zod.d.ts +538 -0
  96. package/dist/zod/feedback.zod.d.ts.map +1 -0
  97. package/dist/zod/feedback.zod.js +127 -0
  98. package/dist/zod/form.zod.d.ts +1308 -0
  99. package/dist/zod/form.zod.d.ts.map +1 -0
  100. package/dist/zod/form.zod.js +406 -0
  101. package/dist/zod/index.zod.d.ts +4985 -0
  102. package/dist/zod/index.zod.d.ts.map +1 -0
  103. package/dist/zod/index.zod.js +183 -0
  104. package/dist/zod/layout.zod.d.ts +1048 -0
  105. package/dist/zod/layout.zod.d.ts.map +1 -0
  106. package/dist/zod/layout.zod.js +241 -0
  107. package/dist/zod/navigation.zod.d.ts +486 -0
  108. package/dist/zod/navigation.zod.d.ts.map +1 -0
  109. package/dist/zod/navigation.zod.js +142 -0
  110. package/dist/zod/objectql.zod.d.ts +1261 -0
  111. package/dist/zod/objectql.zod.d.ts.map +1 -0
  112. package/dist/zod/objectql.zod.js +248 -0
  113. package/dist/zod/overlay.zod.d.ts +691 -0
  114. package/dist/zod/overlay.zod.d.ts.map +1 -0
  115. package/dist/zod/overlay.zod.js +179 -0
  116. package/dist/zod/reports.zod.d.ts +1628 -0
  117. package/dist/zod/reports.zod.d.ts.map +1 -0
  118. package/dist/zod/reports.zod.js +152 -0
  119. package/dist/zod/theme.zod.d.ts +611 -0
  120. package/dist/zod/theme.zod.d.ts.map +1 -0
  121. package/dist/zod/theme.zod.js +130 -0
  122. package/dist/zod/views.zod.d.ts +675 -0
  123. package/dist/zod/views.zod.d.ts.map +1 -0
  124. package/dist/zod/views.zod.js +159 -0
  125. package/package.json +9 -1
  126. package/src/__tests__/namespace-exports.test.ts +80 -0
  127. package/src/__tests__/phase2-schemas.test.ts +639 -0
  128. package/src/api-types.ts +8 -0
  129. package/src/app.ts +20 -0
  130. package/src/base.ts +8 -0
  131. package/src/blocks.ts +405 -0
  132. package/src/complex.ts +69 -1
  133. package/src/crud.ts +185 -3
  134. package/src/data-display.ts +60 -2
  135. package/src/data-protocol.ts +1679 -0
  136. package/src/data.ts +21 -1
  137. package/src/disclosure.ts +74 -1
  138. package/src/feedback.ts +76 -2
  139. package/src/field-types.ts +846 -0
  140. package/src/form.ts +131 -1
  141. package/src/index.ts +305 -8
  142. package/src/layout.ts +70 -15
  143. package/src/navigation.ts +109 -2
  144. package/src/objectql.ts +563 -59
  145. package/src/overlay.ts +35 -1
  146. package/src/plugin-scope.ts +210 -0
  147. package/src/registry.ts +8 -0
  148. package/src/reports.ts +408 -0
  149. package/src/theme.ts +351 -0
  150. package/src/ui-action.ts +276 -0
  151. package/src/views.ts +429 -0
  152. package/src/zod/README.md +329 -0
  153. package/src/zod/app.zod.ts +72 -0
  154. package/src/zod/base.zod.ts +229 -0
  155. package/src/zod/blocks.zod.ts +170 -0
  156. package/src/zod/complex.zod.ts +258 -0
  157. package/src/zod/crud.zod.ts +259 -0
  158. package/src/zod/data-display.zod.ts +290 -0
  159. package/src/zod/disclosure.zod.ts +92 -0
  160. package/src/zod/feedback.zod.ts +138 -0
  161. package/src/zod/form.zod.ts +434 -0
  162. package/src/zod/index.zod.ts +425 -0
  163. package/src/zod/layout.zod.ts +262 -0
  164. package/src/zod/navigation.zod.ts +159 -0
  165. package/src/zod/objectql.zod.ts +268 -0
  166. package/src/zod/overlay.zod.ts +196 -0
  167. package/src/zod/reports.zod.ts +183 -0
  168. package/src/zod/theme.zod.ts +155 -0
  169. package/src/zod/views.zod.ts +182 -0
@@ -0,0 +1,846 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ /**
10
+ * @object-ui/types - Field Type Definitions
11
+ *
12
+ * Comprehensive field type system for ObjectQL protocol.
13
+ * Defines all field types supported in ObjectTable and ObjectForm components.
14
+ *
15
+ * @module field-types
16
+ * @packageDocumentation
17
+ */
18
+
19
+ /**
20
+ * Base field metadata interface
21
+ * Common properties shared by all field types
22
+ */
23
+ export interface BaseFieldMetadata {
24
+ /**
25
+ * Field name/identifier
26
+ */
27
+ name: string;
28
+
29
+ /**
30
+ * Display label
31
+ */
32
+ label?: string;
33
+
34
+ /**
35
+ * Field type identifier
36
+ */
37
+ type: string;
38
+
39
+ /**
40
+ * Help text or description
41
+ */
42
+ help?: string;
43
+
44
+ /**
45
+ * Description text
46
+ */
47
+ description?: string;
48
+
49
+ /**
50
+ * Whether field is required
51
+ */
52
+ required?: boolean;
53
+
54
+ /**
55
+ * Whether field is read-only
56
+ */
57
+ readonly?: boolean;
58
+
59
+ /**
60
+ * Placeholder text
61
+ */
62
+ placeholder?: string;
63
+
64
+ /**
65
+ * Default value
66
+ */
67
+ defaultValue?: any;
68
+
69
+ /**
70
+ * Field permissions (Phase 3.2.6)
71
+ */
72
+ permissions?: {
73
+ read?: boolean;
74
+ write?: boolean;
75
+ edit?: boolean;
76
+ };
77
+
78
+ /**
79
+ * Whether field is sortable
80
+ */
81
+ sortable?: boolean;
82
+
83
+ /**
84
+ * Whether field is filterable
85
+ */
86
+ filterable?: boolean;
87
+
88
+ /**
89
+ * Conditional visibility expression
90
+ */
91
+ visible_on?: VisibilityCondition;
92
+
93
+ /**
94
+ * Custom validation function or rules
95
+ */
96
+ validate?: ValidationFunction | ValidationRule;
97
+
98
+ /**
99
+ * Field dependencies (Phase 3.2.3)
100
+ * List of fields that this field depends on
101
+ */
102
+ depends_on?: string[];
103
+
104
+ /**
105
+ * Field index for database optimization
106
+ */
107
+ indexed?: boolean;
108
+
109
+ /**
110
+ * Field is unique constraint
111
+ */
112
+ unique?: boolean;
113
+ }
114
+
115
+ /**
116
+ * Visibility condition type
117
+ */
118
+ export type VisibilityCondition = {
119
+ field: string;
120
+ operator?: '=' | '!=' | '>' | '>=' | '<' | '<=' | 'in';
121
+ value?: any;
122
+ and?: VisibilityCondition[];
123
+ or?: VisibilityCondition[];
124
+ };
125
+
126
+ /**
127
+ * Validation function type
128
+ */
129
+ export type ValidationFunction = (value: any) => boolean | string | Promise<boolean | string>;
130
+
131
+ /**
132
+ * Validation rule type
133
+ */
134
+ export type ValidationRule = {
135
+ required?: boolean | string;
136
+ minLength?: number;
137
+ maxLength?: number;
138
+ min?: number;
139
+ max?: number;
140
+ pattern?: string | RegExp;
141
+ custom?: ValidationFunction;
142
+ };
143
+
144
+ /**
145
+ * Text field metadata
146
+ */
147
+ export interface TextFieldMetadata extends BaseFieldMetadata {
148
+ type: 'text';
149
+ min_length?: number;
150
+ max_length?: number;
151
+ pattern?: string | RegExp;
152
+ pattern_message?: string;
153
+ }
154
+
155
+ /**
156
+ * Long text/textarea field metadata
157
+ */
158
+ export interface TextareaFieldMetadata extends BaseFieldMetadata {
159
+ type: 'textarea';
160
+ min_length?: number;
161
+ max_length?: number;
162
+ rows?: number;
163
+ }
164
+
165
+ /**
166
+ * Markdown field metadata
167
+ */
168
+ export interface MarkdownFieldMetadata extends BaseFieldMetadata {
169
+ type: 'markdown';
170
+ max_length?: number;
171
+ }
172
+
173
+ /**
174
+ * HTML/Rich text field metadata
175
+ */
176
+ export interface HtmlFieldMetadata extends BaseFieldMetadata {
177
+ type: 'html';
178
+ max_length?: number;
179
+ }
180
+
181
+ /**
182
+ * Number field metadata
183
+ */
184
+ export interface NumberFieldMetadata extends BaseFieldMetadata {
185
+ type: 'number';
186
+ min?: number;
187
+ max?: number;
188
+ precision?: number;
189
+ step?: number;
190
+ }
191
+
192
+ /**
193
+ * Currency field metadata
194
+ */
195
+ export interface CurrencyFieldMetadata extends BaseFieldMetadata {
196
+ type: 'currency';
197
+ currency?: string;
198
+ precision?: number;
199
+ min?: number;
200
+ max?: number;
201
+ }
202
+
203
+ /**
204
+ * Percent field metadata
205
+ */
206
+ export interface PercentFieldMetadata extends BaseFieldMetadata {
207
+ type: 'percent';
208
+ precision?: number;
209
+ min?: number;
210
+ max?: number;
211
+ }
212
+
213
+ /**
214
+ * Boolean field metadata
215
+ */
216
+ export interface BooleanFieldMetadata extends BaseFieldMetadata {
217
+ type: 'boolean';
218
+ }
219
+
220
+ /**
221
+ * Date field metadata
222
+ */
223
+ export interface DateFieldMetadata extends BaseFieldMetadata {
224
+ type: 'date';
225
+ format?: string;
226
+ min_date?: string | Date;
227
+ max_date?: string | Date;
228
+ }
229
+
230
+ /**
231
+ * DateTime field metadata
232
+ */
233
+ export interface DateTimeFieldMetadata extends BaseFieldMetadata {
234
+ type: 'datetime';
235
+ format?: string;
236
+ min_date?: string | Date;
237
+ max_date?: string | Date;
238
+ }
239
+
240
+ /**
241
+ * Time field metadata
242
+ */
243
+ export interface TimeFieldMetadata extends BaseFieldMetadata {
244
+ type: 'time';
245
+ format?: string;
246
+ }
247
+
248
+ /**
249
+ * Select option
250
+ */
251
+ export interface SelectOptionMetadata {
252
+ label: string;
253
+ value: string;
254
+ color?: string;
255
+ icon?: string;
256
+ disabled?: boolean;
257
+ }
258
+
259
+ /**
260
+ * Select field metadata
261
+ */
262
+ export interface SelectFieldMetadata extends BaseFieldMetadata {
263
+ type: 'select';
264
+ options?: SelectOptionMetadata[];
265
+ multiple?: boolean;
266
+ searchable?: boolean;
267
+ }
268
+
269
+ /**
270
+ * Email field metadata
271
+ */
272
+ export interface EmailFieldMetadata extends BaseFieldMetadata {
273
+ type: 'email';
274
+ max_length?: number;
275
+ }
276
+
277
+ /**
278
+ * Phone field metadata
279
+ */
280
+ export interface PhoneFieldMetadata extends BaseFieldMetadata {
281
+ type: 'phone';
282
+ format?: string;
283
+ }
284
+
285
+ /**
286
+ * URL field metadata
287
+ */
288
+ export interface UrlFieldMetadata extends BaseFieldMetadata {
289
+ type: 'url';
290
+ max_length?: number;
291
+ }
292
+
293
+ /**
294
+ * Password field metadata
295
+ */
296
+ export interface PasswordFieldMetadata extends BaseFieldMetadata {
297
+ type: 'password';
298
+ min_length?: number;
299
+ max_length?: number;
300
+ }
301
+
302
+ /**
303
+ * File metadata
304
+ */
305
+ export interface FileMetadata {
306
+ name: string;
307
+ original_name?: string;
308
+ size?: number;
309
+ mime_type?: string;
310
+ url?: string;
311
+ }
312
+
313
+ /**
314
+ * File field metadata
315
+ */
316
+ export interface FileFieldMetadata extends BaseFieldMetadata {
317
+ type: 'file';
318
+ multiple?: boolean;
319
+ accept?: string[];
320
+ max_size?: number;
321
+ max_files?: number;
322
+ }
323
+
324
+ /**
325
+ * Image field metadata
326
+ */
327
+ export interface ImageFieldMetadata extends BaseFieldMetadata {
328
+ type: 'image';
329
+ multiple?: boolean;
330
+ accept?: string[];
331
+ max_size?: number;
332
+ max_files?: number;
333
+ max_width?: number;
334
+ max_height?: number;
335
+ }
336
+
337
+ /**
338
+ * Location field metadata
339
+ */
340
+ export interface LocationFieldMetadata extends BaseFieldMetadata {
341
+ type: 'location';
342
+ default_zoom?: number;
343
+ }
344
+
345
+ /**
346
+ * Lookup/Master-Detail field metadata
347
+ */
348
+ export interface LookupFieldMetadata extends BaseFieldMetadata {
349
+ type: 'lookup' | 'master_detail';
350
+ reference_to?: string;
351
+ reference_field?: string;
352
+ multiple?: boolean;
353
+ searchable?: boolean;
354
+ options?: SelectOptionMetadata[];
355
+ }
356
+
357
+ /**
358
+ * Formula field metadata (read-only computed field)
359
+ * Phase 3.2.4: Enhanced formula field with real-time computation
360
+ */
361
+ export interface FormulaFieldMetadata extends BaseFieldMetadata {
362
+ type: 'formula';
363
+ /**
364
+ * Formula expression
365
+ * Supports JavaScript-like expressions with field references
366
+ * @example "${amount} * ${tax_rate}"
367
+ * @example "${firstName} + ' ' + ${lastName}"
368
+ */
369
+ formula?: string;
370
+ /**
371
+ * Return type of the formula
372
+ */
373
+ return_type?: 'text' | 'number' | 'boolean' | 'date' | 'datetime';
374
+ /**
375
+ * Whether to recompute on dependency changes
376
+ */
377
+ auto_compute?: boolean;
378
+ }
379
+
380
+ /**
381
+ * Summary/Rollup field metadata (aggregation)
382
+ * Phase 3.2.5: Enhanced summary field implementation
383
+ */
384
+ export interface SummaryFieldMetadata extends BaseFieldMetadata {
385
+ type: 'summary';
386
+ /**
387
+ * Related object to summarize from
388
+ */
389
+ summary_object?: string;
390
+ /**
391
+ * Field to aggregate in the related object
392
+ */
393
+ summary_field?: string;
394
+ /**
395
+ * Aggregation type
396
+ */
397
+ summary_type?: 'count' | 'sum' | 'avg' | 'min' | 'max' | 'first' | 'last';
398
+ /**
399
+ * Filter condition for summarized records
400
+ */
401
+ summary_filter?: Record<string, any>;
402
+ /**
403
+ * Whether to auto-update on related record changes
404
+ */
405
+ auto_update?: boolean;
406
+ }
407
+
408
+ /**
409
+ * Auto-number field metadata
410
+ */
411
+ export interface AutoNumberFieldMetadata extends BaseFieldMetadata {
412
+ type: 'auto_number';
413
+ format?: string;
414
+ starting_number?: number;
415
+ }
416
+
417
+ /**
418
+ * User/Owner field metadata
419
+ */
420
+ export interface UserFieldMetadata extends BaseFieldMetadata {
421
+ type: 'user' | 'owner';
422
+ multiple?: boolean;
423
+ }
424
+
425
+ /**
426
+ * Object field metadata (JSON object)
427
+ */
428
+ export interface ObjectFieldMetadata extends BaseFieldMetadata {
429
+ type: 'object';
430
+ schema?: Record<string, any>;
431
+ }
432
+
433
+ /**
434
+ * Vector field metadata (embeddings)
435
+ * Phase 3.2.1: Complete vector field implementation
436
+ */
437
+ export interface VectorFieldMetadata extends BaseFieldMetadata {
438
+ type: 'vector';
439
+ /**
440
+ * Vector dimensions (e.g., 768 for BERT, 1536 for OpenAI)
441
+ */
442
+ dimensions?: number;
443
+ /**
444
+ * Distance metric for similarity search
445
+ */
446
+ distance_metric?: 'cosine' | 'euclidean' | 'dot_product';
447
+ /**
448
+ * Whether to index for similarity search
449
+ */
450
+ indexed?: boolean;
451
+ /**
452
+ * Normalization strategy
453
+ */
454
+ normalize?: boolean;
455
+ }
456
+
457
+ /**
458
+ * Grid field metadata (sub-table)
459
+ * Phase 3.2.2: Complete grid field implementation
460
+ */
461
+ export interface GridFieldMetadata extends BaseFieldMetadata {
462
+ type: 'grid';
463
+ /**
464
+ * Column definitions for the grid
465
+ */
466
+ columns?: GridColumnDefinition[];
467
+ /**
468
+ * Minimum number of rows
469
+ */
470
+ min_rows?: number;
471
+ /**
472
+ * Maximum number of rows
473
+ */
474
+ max_rows?: number;
475
+ /**
476
+ * Whether to allow adding rows
477
+ */
478
+ allow_add?: boolean;
479
+ /**
480
+ * Whether to allow deleting rows
481
+ */
482
+ allow_delete?: boolean;
483
+ /**
484
+ * Whether to allow reordering rows
485
+ */
486
+ allow_reorder?: boolean;
487
+ }
488
+
489
+ /**
490
+ * Grid column definition
491
+ */
492
+ export interface GridColumnDefinition {
493
+ /**
494
+ * Column field name
495
+ */
496
+ name: string;
497
+ /**
498
+ * Column label
499
+ */
500
+ label?: string;
501
+ /**
502
+ * Field type
503
+ */
504
+ type: string;
505
+ /**
506
+ * Whether column is required
507
+ */
508
+ required?: boolean;
509
+ /**
510
+ * Default value for new rows
511
+ */
512
+ defaultValue?: any;
513
+ /**
514
+ * Column width
515
+ */
516
+ width?: number;
517
+ /**
518
+ * Validation rules
519
+ */
520
+ validate?: ValidationRule;
521
+ }
522
+
523
+ export interface ColorFieldMetadata extends BaseFieldMetadata {
524
+ type: 'color';
525
+ }
526
+
527
+ export interface CodeFieldMetadata extends BaseFieldMetadata {
528
+ type: 'code';
529
+ }
530
+
531
+ export interface AvatarFieldMetadata extends BaseFieldMetadata {
532
+ type: 'avatar';
533
+ }
534
+
535
+ export interface SignatureFieldMetadata extends BaseFieldMetadata {
536
+ type: 'signature';
537
+ }
538
+
539
+ export interface QRCodeFieldMetadata extends BaseFieldMetadata {
540
+ type: 'qrcode';
541
+ }
542
+
543
+ export interface AddressFieldMetadata extends BaseFieldMetadata {
544
+ type: 'address';
545
+ }
546
+
547
+ export interface GeolocationFieldMetadata extends BaseFieldMetadata {
548
+ type: 'geolocation';
549
+ }
550
+
551
+ export interface SliderFieldMetadata extends BaseFieldMetadata {
552
+ type: 'slider';
553
+ min?: number;
554
+ max?: number;
555
+ }
556
+
557
+ export interface RatingFieldMetadata extends BaseFieldMetadata {
558
+ type: 'rating';
559
+ max?: number;
560
+ }
561
+
562
+ export interface MasterDetailFieldMetadata extends BaseFieldMetadata {
563
+ type: 'master_detail';
564
+ reference_to?: string;
565
+ }
566
+
567
+ /**
568
+ * Union type of all field metadata types
569
+ */
570
+ export type FieldMetadata =
571
+ | TextFieldMetadata
572
+ | TextareaFieldMetadata
573
+ | MarkdownFieldMetadata
574
+ | HtmlFieldMetadata
575
+ | NumberFieldMetadata
576
+ | CurrencyFieldMetadata
577
+ | PercentFieldMetadata
578
+ | BooleanFieldMetadata
579
+ | DateFieldMetadata
580
+ | DateTimeFieldMetadata
581
+ | TimeFieldMetadata
582
+ | SelectFieldMetadata
583
+ | EmailFieldMetadata
584
+ | PhoneFieldMetadata
585
+ | UrlFieldMetadata
586
+ | PasswordFieldMetadata
587
+ | FileFieldMetadata
588
+ | ImageFieldMetadata
589
+ | LocationFieldMetadata
590
+ | LookupFieldMetadata
591
+ | FormulaFieldMetadata
592
+ | SummaryFieldMetadata
593
+ | AutoNumberFieldMetadata
594
+ | UserFieldMetadata
595
+ | ObjectFieldMetadata
596
+ | VectorFieldMetadata
597
+ | GridFieldMetadata
598
+ | ColorFieldMetadata
599
+ | CodeFieldMetadata
600
+ | AvatarFieldMetadata
601
+ | SignatureFieldMetadata
602
+ | QRCodeFieldMetadata
603
+ | AddressFieldMetadata
604
+ | GeolocationFieldMetadata
605
+ | SliderFieldMetadata
606
+ | RatingFieldMetadata
607
+ | MasterDetailFieldMetadata;
608
+
609
+ /**
610
+ * Object trigger configuration (Phase 3.1.3)
611
+ */
612
+ export interface ObjectTrigger {
613
+ /**
614
+ * Trigger name
615
+ */
616
+ name: string;
617
+ /**
618
+ * When to execute the trigger
619
+ */
620
+ when: 'before' | 'after';
621
+ /**
622
+ * Which operation triggers this
623
+ */
624
+ on: 'create' | 'update' | 'delete' | 'read';
625
+ /**
626
+ * Trigger condition (optional)
627
+ */
628
+ condition?: string;
629
+ /**
630
+ * Action to execute
631
+ */
632
+ action: 'validation' | 'workflow' | 'notification' | 'calculation' | 'custom';
633
+ /**
634
+ * Action configuration
635
+ */
636
+ config?: Record<string, any>;
637
+ }
638
+
639
+ /**
640
+ * Object permission configuration (Phase 3.1.4)
641
+ */
642
+ export interface ObjectPermission {
643
+ /**
644
+ * Permission profile name
645
+ */
646
+ profile?: string;
647
+ /**
648
+ * Role-based permissions
649
+ */
650
+ roles?: string[];
651
+ /**
652
+ * CRUD permissions
653
+ */
654
+ create?: boolean;
655
+ read?: boolean;
656
+ update?: boolean;
657
+ delete?: boolean;
658
+ /**
659
+ * Record-level permissions
660
+ */
661
+ record_level?: {
662
+ /**
663
+ * User can only access own records
664
+ */
665
+ own_records_only?: boolean;
666
+ /**
667
+ * Sharing rules
668
+ */
669
+ sharing_rules?: SharingRule[];
670
+ };
671
+ /**
672
+ * Field-level permissions
673
+ */
674
+ field_permissions?: Record<string, {
675
+ read?: boolean;
676
+ edit?: boolean;
677
+ }>;
678
+ }
679
+
680
+ /**
681
+ * Sharing rule configuration
682
+ */
683
+ export interface SharingRule {
684
+ /**
685
+ * Rule name
686
+ */
687
+ name: string;
688
+ /**
689
+ * Criteria for sharing
690
+ */
691
+ criteria?: Record<string, any>;
692
+ /**
693
+ * Access level granted
694
+ */
695
+ access_level: 'read' | 'edit' | 'full';
696
+ /**
697
+ * Share with users/roles
698
+ */
699
+ share_with?: {
700
+ users?: string[];
701
+ roles?: string[];
702
+ groups?: string[];
703
+ };
704
+ }
705
+
706
+ /**
707
+ * Object schema definition
708
+ * Phase 3.1: Enhanced with inheritance, triggers, permissions, and caching
709
+ */
710
+ export interface ObjectSchemaMetadata {
711
+ /**
712
+ * Object name
713
+ */
714
+ name: string;
715
+
716
+ /**
717
+ * Display label
718
+ */
719
+ label?: string;
720
+
721
+ /**
722
+ * Object description
723
+ */
724
+ description?: string;
725
+
726
+ /**
727
+ * Fields definition
728
+ */
729
+ fields: Record<string, FieldMetadata>;
730
+
731
+ /**
732
+ * Permissions (Phase 3.1.4: Enhanced permissions)
733
+ */
734
+ permissions?: ObjectPermission;
735
+
736
+ /**
737
+ * Parent object to inherit from (Phase 3.1.2)
738
+ */
739
+ extends?: string;
740
+
741
+ /**
742
+ * Triggers configuration (Phase 3.1.3)
743
+ */
744
+ triggers?: ObjectTrigger[];
745
+
746
+ /**
747
+ * Primary key field
748
+ */
749
+ primary_key?: string;
750
+
751
+ /**
752
+ * Indexes for optimization
753
+ */
754
+ indexes?: ObjectIndex[];
755
+
756
+ /**
757
+ * Relationships with other objects
758
+ */
759
+ relationships?: ObjectRelationship[];
760
+
761
+ /**
762
+ * Record naming pattern
763
+ */
764
+ name_field?: string;
765
+
766
+ /**
767
+ * Soft delete configuration
768
+ */
769
+ soft_delete?: boolean;
770
+
771
+ /**
772
+ * Audit trail configuration
773
+ */
774
+ audit_trail?: boolean;
775
+
776
+ /**
777
+ * Schema version
778
+ */
779
+ version?: string;
780
+
781
+ /**
782
+ * Cache configuration (Phase 3.1.5)
783
+ */
784
+ cache?: {
785
+ /**
786
+ * Enable metadata caching
787
+ */
788
+ enabled?: boolean;
789
+ /**
790
+ * Cache TTL in seconds
791
+ */
792
+ ttl?: number;
793
+ /**
794
+ * Cache invalidation strategy
795
+ */
796
+ invalidation?: 'time' | 'event' | 'manual';
797
+ };
798
+ }
799
+
800
+ /**
801
+ * Object index configuration
802
+ */
803
+ export interface ObjectIndex {
804
+ /**
805
+ * Index name
806
+ */
807
+ name: string;
808
+ /**
809
+ * Fields to index
810
+ */
811
+ fields: string[];
812
+ /**
813
+ * Whether index is unique
814
+ */
815
+ unique?: boolean;
816
+ /**
817
+ * Index type
818
+ */
819
+ type?: 'btree' | 'hash' | 'gist' | 'gin';
820
+ }
821
+
822
+ /**
823
+ * Object relationship configuration
824
+ */
825
+ export interface ObjectRelationship {
826
+ /**
827
+ * Relationship name
828
+ */
829
+ name: string;
830
+ /**
831
+ * Related object
832
+ */
833
+ object: string;
834
+ /**
835
+ * Relationship type
836
+ */
837
+ type: 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many';
838
+ /**
839
+ * Foreign key field
840
+ */
841
+ foreign_key?: string;
842
+ /**
843
+ * Cascade delete
844
+ */
845
+ cascade_delete?: boolean;
846
+ }