@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.
- package/README.md +19 -11
- package/dist/api-types.d.ts +7 -0
- package/dist/api-types.d.ts.map +1 -1
- package/dist/api-types.js +4 -6
- package/dist/app.d.ts +17 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +4 -3
- package/dist/base.d.ts +7 -0
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +4 -6
- package/dist/blocks.d.ts +332 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +8 -0
- package/dist/complex.d.ts +68 -1
- package/dist/complex.d.ts.map +1 -1
- package/dist/complex.js +4 -5
- package/dist/crud.d.ts +181 -3
- package/dist/crud.d.ts.map +1 -1
- package/dist/crud.js +4 -6
- package/dist/data-display.d.ts +54 -2
- package/dist/data-display.d.ts.map +1 -1
- package/dist/data-display.js +4 -5
- package/dist/data-protocol.d.ts +1268 -0
- package/dist/data-protocol.d.ts.map +1 -0
- package/dist/data-protocol.js +8 -0
- package/dist/data.d.ts +22 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +4 -6
- package/dist/disclosure.d.ts +70 -1
- package/dist/disclosure.d.ts.map +1 -1
- package/dist/disclosure.js +4 -5
- package/dist/feedback.d.ts +68 -1
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +4 -5
- package/dist/field-types.d.ts +728 -0
- package/dist/field-types.d.ts.map +1 -0
- package/dist/field-types.js +8 -0
- package/dist/form.d.ts +123 -1
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +4 -5
- package/dist/index.d.ts +48 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -37
- package/dist/layout.d.ts +66 -16
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +4 -6
- package/dist/navigation.d.ts +102 -2
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +4 -5
- package/dist/objectql.d.ts +491 -54
- package/dist/objectql.d.ts.map +1 -1
- package/dist/objectql.js +4 -6
- package/dist/overlay.d.ts +31 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +4 -5
- package/dist/plugin-scope.d.ts +194 -0
- package/dist/plugin-scope.d.ts.map +1 -0
- package/dist/plugin-scope.js +8 -0
- package/dist/registry.d.ts +7 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +7 -0
- package/dist/reports.d.ts +336 -0
- package/dist/reports.d.ts.map +1 -0
- package/dist/reports.js +8 -0
- package/dist/theme.d.ts +289 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +8 -0
- package/dist/ui-action.d.ts +175 -0
- package/dist/ui-action.d.ts.map +1 -0
- package/dist/ui-action.js +8 -0
- package/dist/views.d.ts +417 -0
- package/dist/views.d.ts.map +1 -0
- package/dist/views.js +8 -0
- package/dist/zod/app.zod.d.ts +120 -0
- package/dist/zod/app.zod.d.ts.map +1 -0
- package/dist/zod/app.zod.js +60 -0
- package/dist/zod/base.zod.d.ts +202 -0
- package/dist/zod/base.zod.d.ts.map +1 -0
- package/dist/zod/base.zod.js +198 -0
- package/dist/zod/blocks.zod.d.ts +834 -0
- package/dist/zod/blocks.zod.d.ts.map +1 -0
- package/dist/zod/blocks.zod.js +145 -0
- package/dist/zod/complex.zod.d.ts +742 -0
- package/dist/zod/complex.zod.d.ts.map +1 -0
- package/dist/zod/complex.zod.js +233 -0
- package/dist/zod/crud.zod.d.ts +598 -0
- package/dist/zod/crud.zod.d.ts.map +1 -0
- package/dist/zod/crud.zod.js +230 -0
- package/dist/zod/data-display.zod.d.ts +996 -0
- package/dist/zod/data-display.zod.d.ts.map +1 -0
- package/dist/zod/data-display.zod.js +266 -0
- package/dist/zod/disclosure.zod.d.ts +267 -0
- package/dist/zod/disclosure.zod.d.ts.map +1 -0
- package/dist/zod/disclosure.zod.js +84 -0
- package/dist/zod/feedback.zod.d.ts +538 -0
- package/dist/zod/feedback.zod.d.ts.map +1 -0
- package/dist/zod/feedback.zod.js +127 -0
- package/dist/zod/form.zod.d.ts +1308 -0
- package/dist/zod/form.zod.d.ts.map +1 -0
- package/dist/zod/form.zod.js +406 -0
- package/dist/zod/index.zod.d.ts +4985 -0
- package/dist/zod/index.zod.d.ts.map +1 -0
- package/dist/zod/index.zod.js +183 -0
- package/dist/zod/layout.zod.d.ts +1048 -0
- package/dist/zod/layout.zod.d.ts.map +1 -0
- package/dist/zod/layout.zod.js +241 -0
- package/dist/zod/navigation.zod.d.ts +486 -0
- package/dist/zod/navigation.zod.d.ts.map +1 -0
- package/dist/zod/navigation.zod.js +142 -0
- package/dist/zod/objectql.zod.d.ts +1261 -0
- package/dist/zod/objectql.zod.d.ts.map +1 -0
- package/dist/zod/objectql.zod.js +248 -0
- package/dist/zod/overlay.zod.d.ts +691 -0
- package/dist/zod/overlay.zod.d.ts.map +1 -0
- package/dist/zod/overlay.zod.js +179 -0
- package/dist/zod/reports.zod.d.ts +1628 -0
- package/dist/zod/reports.zod.d.ts.map +1 -0
- package/dist/zod/reports.zod.js +152 -0
- package/dist/zod/theme.zod.d.ts +611 -0
- package/dist/zod/theme.zod.d.ts.map +1 -0
- package/dist/zod/theme.zod.js +130 -0
- package/dist/zod/views.zod.d.ts +675 -0
- package/dist/zod/views.zod.d.ts.map +1 -0
- package/dist/zod/views.zod.js +159 -0
- package/package.json +9 -1
- package/src/__tests__/namespace-exports.test.ts +80 -0
- package/src/__tests__/phase2-schemas.test.ts +639 -0
- package/src/api-types.ts +8 -0
- package/src/app.ts +20 -0
- package/src/base.ts +8 -0
- package/src/blocks.ts +405 -0
- package/src/complex.ts +69 -1
- package/src/crud.ts +185 -3
- package/src/data-display.ts +60 -2
- package/src/data-protocol.ts +1679 -0
- package/src/data.ts +21 -1
- package/src/disclosure.ts +74 -1
- package/src/feedback.ts +76 -2
- package/src/field-types.ts +846 -0
- package/src/form.ts +131 -1
- package/src/index.ts +305 -8
- package/src/layout.ts +70 -15
- package/src/navigation.ts +109 -2
- package/src/objectql.ts +563 -59
- package/src/overlay.ts +35 -1
- package/src/plugin-scope.ts +210 -0
- package/src/registry.ts +8 -0
- package/src/reports.ts +408 -0
- package/src/theme.ts +351 -0
- package/src/ui-action.ts +276 -0
- package/src/views.ts +429 -0
- package/src/zod/README.md +329 -0
- package/src/zod/app.zod.ts +72 -0
- package/src/zod/base.zod.ts +229 -0
- package/src/zod/blocks.zod.ts +170 -0
- package/src/zod/complex.zod.ts +258 -0
- package/src/zod/crud.zod.ts +259 -0
- package/src/zod/data-display.zod.ts +290 -0
- package/src/zod/disclosure.zod.ts +92 -0
- package/src/zod/feedback.zod.ts +138 -0
- package/src/zod/form.zod.ts +434 -0
- package/src/zod/index.zod.ts +425 -0
- package/src/zod/layout.zod.ts +262 -0
- package/src/zod/navigation.zod.ts +159 -0
- package/src/zod/objectql.zod.ts +268 -0
- package/src/zod/overlay.zod.ts +196 -0
- package/src/zod/reports.zod.ts +183 -0
- package/src/zod/theme.zod.ts +155 -0
- 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
|
+
}
|