@object-ui/types 0.3.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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +304 -0
  3. package/dist/api-types.d.ts +451 -0
  4. package/dist/api-types.d.ts.map +1 -0
  5. package/dist/api-types.js +10 -0
  6. package/dist/app.d.ts +120 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +7 -0
  9. package/dist/base.d.ts +360 -0
  10. package/dist/base.d.ts.map +1 -0
  11. package/dist/base.js +10 -0
  12. package/dist/complex.d.ts +433 -0
  13. package/dist/complex.d.ts.map +1 -0
  14. package/dist/complex.js +9 -0
  15. package/dist/crud.d.ts +457 -0
  16. package/dist/crud.d.ts.map +1 -0
  17. package/dist/crud.js +10 -0
  18. package/dist/data-display.d.ts +599 -0
  19. package/dist/data-display.d.ts.map +1 -0
  20. package/dist/data-display.js +9 -0
  21. package/dist/data.d.ts +295 -0
  22. package/dist/data.d.ts.map +1 -0
  23. package/dist/data.js +10 -0
  24. package/dist/disclosure.d.ts +107 -0
  25. package/dist/disclosure.d.ts.map +1 -0
  26. package/dist/disclosure.js +9 -0
  27. package/dist/feedback.d.ts +159 -0
  28. package/dist/feedback.d.ts.map +1 -0
  29. package/dist/feedback.js +9 -0
  30. package/dist/form.d.ts +932 -0
  31. package/dist/form.d.ts.map +1 -0
  32. package/dist/form.js +9 -0
  33. package/dist/index.d.ts +108 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +48 -0
  36. package/dist/layout.d.ts +418 -0
  37. package/dist/layout.d.ts.map +1 -0
  38. package/dist/layout.js +10 -0
  39. package/dist/navigation.d.ts +224 -0
  40. package/dist/navigation.d.ts.map +1 -0
  41. package/dist/navigation.js +9 -0
  42. package/dist/objectql.d.ts +254 -0
  43. package/dist/objectql.d.ts.map +1 -0
  44. package/dist/objectql.js +10 -0
  45. package/dist/overlay.d.ts +396 -0
  46. package/dist/overlay.d.ts.map +1 -0
  47. package/dist/overlay.js +9 -0
  48. package/dist/registry.d.ts +85 -0
  49. package/dist/registry.d.ts.map +1 -0
  50. package/dist/registry.js +1 -0
  51. package/package.json +82 -0
  52. package/src/api-types.ts +464 -0
  53. package/src/app.ts +138 -0
  54. package/src/base.ts +416 -0
  55. package/src/complex.ts +465 -0
  56. package/src/crud.ts +467 -0
  57. package/src/data-display.ts +630 -0
  58. package/src/data.ts +341 -0
  59. package/src/disclosure.ts +113 -0
  60. package/src/feedback.ts +170 -0
  61. package/src/form.ts +954 -0
  62. package/src/index.ts +350 -0
  63. package/src/layout.ts +451 -0
  64. package/src/navigation.ts +235 -0
  65. package/src/objectql.ts +301 -0
  66. package/src/overlay.ts +418 -0
  67. package/src/registry.ts +182 -0
package/src/data.ts ADDED
@@ -0,0 +1,341 @@
1
+ /**
2
+ * @object-ui/types - Data Source Types
3
+ *
4
+ * Type definitions for data fetching and management.
5
+ * These interfaces define the universal adapter pattern for data access.
6
+ *
7
+ * @module data
8
+ * @packageDocumentation
9
+ */
10
+
11
+ /**
12
+ * Query parameters for data fetching.
13
+ * Follows OData/REST conventions for universal compatibility.
14
+ */
15
+ export interface QueryParams {
16
+ /**
17
+ * Fields to select (projection)
18
+ * @example ['id', 'name', 'email']
19
+ */
20
+ $select?: string[];
21
+
22
+ /**
23
+ * Filter expression
24
+ * @example { age: { $gt: 18 }, status: 'active' }
25
+ */
26
+ $filter?: Record<string, any>;
27
+
28
+ /**
29
+ * Sort order
30
+ * @example { createdAt: 'desc', name: 'asc' }
31
+ */
32
+ $orderby?: Record<string, 'asc' | 'desc'>;
33
+
34
+ /**
35
+ * Number of records to skip (for pagination)
36
+ */
37
+ $skip?: number;
38
+
39
+ /**
40
+ * Maximum number of records to return
41
+ */
42
+ $top?: number;
43
+
44
+ /**
45
+ * Related entities to expand/include
46
+ * @example ['author', 'comments']
47
+ */
48
+ $expand?: string[];
49
+
50
+ /**
51
+ * Search query (full-text search)
52
+ */
53
+ $search?: string;
54
+
55
+ /**
56
+ * Total count of records (for pagination)
57
+ */
58
+ $count?: boolean;
59
+
60
+ /**
61
+ * Additional custom parameters
62
+ */
63
+ [key: string]: any;
64
+ }
65
+
66
+ /**
67
+ * Query result with pagination metadata
68
+ */
69
+ export interface QueryResult<T = any> {
70
+ /**
71
+ * Result data array
72
+ */
73
+ data: T[];
74
+
75
+ /**
76
+ * Total number of records (if requested)
77
+ */
78
+ total?: number;
79
+
80
+ /**
81
+ * Current page number (1-indexed)
82
+ */
83
+ page?: number;
84
+
85
+ /**
86
+ * Page size
87
+ */
88
+ pageSize?: number;
89
+
90
+ /**
91
+ * Whether there are more records
92
+ */
93
+ hasMore?: boolean;
94
+
95
+ /**
96
+ * Cursor for cursor-based pagination
97
+ */
98
+ cursor?: string;
99
+
100
+ /**
101
+ * Additional metadata
102
+ */
103
+ metadata?: Record<string, any>;
104
+ }
105
+
106
+ /**
107
+ * Universal data source interface.
108
+ * This is the core abstraction that makes Object UI backend-agnostic.
109
+ *
110
+ * Implementations can connect to:
111
+ * - REST APIs
112
+ * - GraphQL endpoints
113
+ * - ObjectQL servers
114
+ * - Firebase/Supabase
115
+ * - Local arrays/JSON
116
+ * - Any data source
117
+ *
118
+ * @template T - The data type
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * class RestDataSource implements DataSource<User> {
123
+ * async find(resource, params) {
124
+ * const response = await fetch(`/api/${resource}?${buildQuery(params)}`);
125
+ * return response.json();
126
+ * }
127
+ * // ... other methods
128
+ * }
129
+ * ```
130
+ */
131
+ export interface DataSource<T = any> {
132
+ /**
133
+ * Fetch multiple records.
134
+ *
135
+ * @param resource - Resource name (e.g., 'users', 'posts')
136
+ * @param params - Query parameters
137
+ * @returns Promise resolving to query result
138
+ */
139
+ find(resource: string, params?: QueryParams): Promise<QueryResult<T>>;
140
+
141
+ /**
142
+ * Fetch a single record by ID.
143
+ *
144
+ * @param resource - Resource name
145
+ * @param id - Record identifier
146
+ * @param params - Additional query parameters
147
+ * @returns Promise resolving to the record or null
148
+ */
149
+ findOne(resource: string, id: string | number, params?: QueryParams): Promise<T | null>;
150
+
151
+ /**
152
+ * Create a new record.
153
+ *
154
+ * @param resource - Resource name
155
+ * @param data - Record data
156
+ * @returns Promise resolving to the created record
157
+ */
158
+ create(resource: string, data: Partial<T>): Promise<T>;
159
+
160
+ /**
161
+ * Update an existing record.
162
+ *
163
+ * @param resource - Resource name
164
+ * @param id - Record identifier
165
+ * @param data - Updated data (partial)
166
+ * @returns Promise resolving to the updated record
167
+ */
168
+ update(resource: string, id: string | number, data: Partial<T>): Promise<T>;
169
+
170
+ /**
171
+ * Delete a record.
172
+ *
173
+ * @param resource - Resource name
174
+ * @param id - Record identifier
175
+ * @returns Promise resolving to true if successful
176
+ */
177
+ delete(resource: string, id: string | number): Promise<boolean>;
178
+
179
+ /**
180
+ * Execute a bulk operation (optional).
181
+ *
182
+ * @param resource - Resource name
183
+ * @param operation - Operation type
184
+ * @param data - Bulk data
185
+ * @returns Promise resolving to operation result
186
+ */
187
+ bulk?(resource: string, operation: 'create' | 'update' | 'delete', data: Partial<T>[]): Promise<T[]>;
188
+ }
189
+
190
+ /**
191
+ * Data scope context for managing data state.
192
+ * Provides reactive data management within the UI.
193
+ */
194
+ export interface DataScope {
195
+ /**
196
+ * Data source instance
197
+ */
198
+ dataSource?: DataSource;
199
+
200
+ /**
201
+ * Current data
202
+ */
203
+ data?: any;
204
+
205
+ /**
206
+ * Loading state
207
+ */
208
+ loading?: boolean;
209
+
210
+ /**
211
+ * Error state
212
+ */
213
+ error?: Error | string | null;
214
+
215
+ /**
216
+ * Refresh data
217
+ */
218
+ refresh?: () => Promise<void>;
219
+
220
+ /**
221
+ * Set data
222
+ */
223
+ setData?: (data: any) => void;
224
+ }
225
+
226
+ /**
227
+ * Data context for component trees.
228
+ * Allows components to access and share data.
229
+ */
230
+ export interface DataContext {
231
+ /**
232
+ * Named data scopes
233
+ */
234
+ scopes: Record<string, DataScope>;
235
+
236
+ /**
237
+ * Register a data scope
238
+ */
239
+ registerScope: (name: string, scope: DataScope) => void;
240
+
241
+ /**
242
+ * Get a data scope by name
243
+ */
244
+ getScope: (name: string) => DataScope | undefined;
245
+
246
+ /**
247
+ * Remove a data scope
248
+ */
249
+ removeScope: (name: string) => void;
250
+ }
251
+
252
+ /**
253
+ * Data binding configuration.
254
+ * Defines how a component's data is sourced and updated.
255
+ */
256
+ export interface DataBinding {
257
+ /**
258
+ * Data source name
259
+ */
260
+ source?: string;
261
+
262
+ /**
263
+ * Resource name
264
+ */
265
+ resource?: string;
266
+
267
+ /**
268
+ * Query parameters
269
+ */
270
+ params?: QueryParams;
271
+
272
+ /**
273
+ * Transform function for data
274
+ */
275
+ transform?: (data: any) => any;
276
+
277
+ /**
278
+ * Auto-refresh interval (ms)
279
+ */
280
+ refreshInterval?: number;
281
+
282
+ /**
283
+ * Cache data
284
+ */
285
+ cache?: boolean;
286
+
287
+ /**
288
+ * Cache TTL (ms)
289
+ */
290
+ cacheTTL?: number;
291
+ }
292
+
293
+ /**
294
+ * Validation error
295
+ */
296
+ export interface ValidationError {
297
+ /**
298
+ * Field name
299
+ */
300
+ field: string;
301
+
302
+ /**
303
+ * Error message
304
+ */
305
+ message: string;
306
+
307
+ /**
308
+ * Error code
309
+ */
310
+ code?: string;
311
+ }
312
+
313
+ /**
314
+ * API error response
315
+ */
316
+ export interface APIError {
317
+ /**
318
+ * Error message
319
+ */
320
+ message: string;
321
+
322
+ /**
323
+ * HTTP status code
324
+ */
325
+ status?: number;
326
+
327
+ /**
328
+ * Error code
329
+ */
330
+ code?: string;
331
+
332
+ /**
333
+ * Validation errors
334
+ */
335
+ errors?: ValidationError[];
336
+
337
+ /**
338
+ * Additional error data
339
+ */
340
+ data?: any;
341
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @object-ui/types - Disclosure Component Schemas
3
+ *
4
+ * Type definitions for collapsible and expandable components.
5
+ *
6
+ * @module disclosure
7
+ * @packageDocumentation
8
+ */
9
+
10
+ import type { BaseSchema, SchemaNode } from './base';
11
+
12
+ /**
13
+ * Accordion item
14
+ */
15
+ export interface AccordionItem {
16
+ /**
17
+ * Unique item identifier
18
+ */
19
+ value: string;
20
+ /**
21
+ * Item title/trigger
22
+ */
23
+ title: string;
24
+ /**
25
+ * Item content
26
+ */
27
+ content: SchemaNode | SchemaNode[];
28
+ /**
29
+ * Whether item is disabled
30
+ */
31
+ disabled?: boolean;
32
+ /**
33
+ * Item icon
34
+ */
35
+ icon?: string;
36
+ }
37
+
38
+ /**
39
+ * Accordion component
40
+ */
41
+ export interface AccordionSchema extends BaseSchema {
42
+ type: 'accordion';
43
+ /**
44
+ * Accordion items
45
+ */
46
+ items: AccordionItem[];
47
+ /**
48
+ * Accordion type
49
+ * @default 'single'
50
+ */
51
+ accordionType?: 'single' | 'multiple';
52
+ /**
53
+ * Whether items are collapsible
54
+ * @default true
55
+ */
56
+ collapsible?: boolean;
57
+ /**
58
+ * Default expanded item values
59
+ */
60
+ defaultValue?: string | string[];
61
+ /**
62
+ * Controlled expanded item values
63
+ */
64
+ value?: string | string[];
65
+ /**
66
+ * Change handler
67
+ */
68
+ onValueChange?: (value: string | string[]) => void;
69
+ /**
70
+ * Accordion variant
71
+ * @default 'default'
72
+ */
73
+ variant?: 'default' | 'bordered' | 'separated';
74
+ }
75
+
76
+ /**
77
+ * Collapsible component
78
+ */
79
+ export interface CollapsibleSchema extends BaseSchema {
80
+ type: 'collapsible';
81
+ /**
82
+ * Trigger content/label
83
+ */
84
+ trigger: string | SchemaNode;
85
+ /**
86
+ * Collapsible content
87
+ */
88
+ content: SchemaNode | SchemaNode[];
89
+ /**
90
+ * Default open state
91
+ * @default false
92
+ */
93
+ defaultOpen?: boolean;
94
+ /**
95
+ * Controlled open state
96
+ */
97
+ open?: boolean;
98
+ /**
99
+ * Whether collapsible is disabled
100
+ */
101
+ disabled?: boolean;
102
+ /**
103
+ * Open state change handler
104
+ */
105
+ onOpenChange?: (open: boolean) => void;
106
+ }
107
+
108
+ /**
109
+ * Union type of all disclosure schemas
110
+ */
111
+ export type DisclosureSchema =
112
+ | AccordionSchema
113
+ | CollapsibleSchema;
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @object-ui/types - Feedback Component Schemas
3
+ *
4
+ * Type definitions for feedback and status indication components.
5
+ *
6
+ * @module feedback
7
+ * @packageDocumentation
8
+ */
9
+
10
+ import type { BaseSchema, SchemaNode } from './base';
11
+
12
+ /**
13
+ * Loading/Spinner component
14
+ */
15
+ export interface LoadingSchema extends BaseSchema {
16
+ type: 'loading';
17
+ /**
18
+ * Loading text/message
19
+ */
20
+ label?: string;
21
+ /**
22
+ * Spinner size
23
+ * @default 'default'
24
+ */
25
+ size?: 'sm' | 'default' | 'lg';
26
+ /**
27
+ * Spinner variant
28
+ * @default 'spinner'
29
+ */
30
+ variant?: 'spinner' | 'dots' | 'pulse';
31
+ /**
32
+ * Whether to show fullscreen overlay
33
+ * @default false
34
+ */
35
+ fullscreen?: boolean;
36
+ }
37
+
38
+ /**
39
+ * Progress bar component
40
+ */
41
+ export interface ProgressSchema extends BaseSchema {
42
+ type: 'progress';
43
+ /**
44
+ * Progress value (0-100)
45
+ */
46
+ value?: number;
47
+ /**
48
+ * Maximum value
49
+ * @default 100
50
+ */
51
+ max?: number;
52
+ /**
53
+ * Progress bar variant
54
+ * @default 'default'
55
+ */
56
+ variant?: 'default' | 'success' | 'warning' | 'error';
57
+ /**
58
+ * Show percentage label
59
+ * @default false
60
+ */
61
+ showLabel?: boolean;
62
+ /**
63
+ * Progress bar size
64
+ * @default 'default'
65
+ */
66
+ size?: 'sm' | 'default' | 'lg';
67
+ /**
68
+ * Indeterminate/loading state
69
+ * @default false
70
+ */
71
+ indeterminate?: boolean;
72
+ }
73
+
74
+ /**
75
+ * Skeleton loading placeholder
76
+ */
77
+ export interface SkeletonSchema extends BaseSchema {
78
+ type: 'skeleton';
79
+ /**
80
+ * Skeleton variant
81
+ * @default 'text'
82
+ */
83
+ variant?: 'text' | 'circular' | 'rectangular';
84
+ /**
85
+ * Width
86
+ */
87
+ width?: string | number;
88
+ /**
89
+ * Height
90
+ */
91
+ height?: string | number;
92
+ /**
93
+ * Number of lines (for text variant)
94
+ * @default 1
95
+ */
96
+ lines?: number;
97
+ /**
98
+ * Enable animation
99
+ * @default true
100
+ */
101
+ animate?: boolean;
102
+ }
103
+
104
+ /**
105
+ * Toast notification (declarative schema)
106
+ */
107
+ export interface ToastSchema extends BaseSchema {
108
+ type: 'toast';
109
+ /**
110
+ * Toast title
111
+ */
112
+ title?: string;
113
+ /**
114
+ * Toast description
115
+ */
116
+ description?: string;
117
+ /**
118
+ * Toast variant
119
+ * @default 'default'
120
+ */
121
+ variant?: 'default' | 'success' | 'warning' | 'error' | 'info';
122
+ /**
123
+ * Auto-dismiss duration in milliseconds
124
+ * @default 5000
125
+ */
126
+ duration?: number;
127
+ /**
128
+ * Toast position
129
+ * @default 'bottom-right'
130
+ */
131
+ position?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
132
+ /**
133
+ * Action button
134
+ */
135
+ action?: {
136
+ label: string;
137
+ onClick: () => void;
138
+ };
139
+ /**
140
+ * Dismiss handler
141
+ */
142
+ onDismiss?: () => void;
143
+ }
144
+
145
+ /**
146
+ * Toaster container (for toast management)
147
+ */
148
+ export interface ToasterSchema extends BaseSchema {
149
+ type: 'toaster';
150
+ /**
151
+ * Toast position
152
+ * @default 'bottom-right'
153
+ */
154
+ position?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
155
+ /**
156
+ * Maximum number of toasts to show
157
+ * @default 5
158
+ */
159
+ limit?: number;
160
+ }
161
+
162
+ /**
163
+ * Union type of all feedback schemas
164
+ */
165
+ export type FeedbackSchema =
166
+ | LoadingSchema
167
+ | ProgressSchema
168
+ | SkeletonSchema
169
+ | ToastSchema
170
+ | ToasterSchema;