@object-ui/types 3.0.3 → 3.1.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 (85) hide show
  1. package/dist/app.d.ts +217 -0
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +85 -1
  4. package/dist/complex.d.ts +118 -0
  5. package/dist/complex.d.ts.map +1 -1
  6. package/dist/data-display.d.ts +105 -1
  7. package/dist/data-display.d.ts.map +1 -1
  8. package/dist/data.d.ts +45 -0
  9. package/dist/data.d.ts.map +1 -1
  10. package/dist/designer.d.ts +197 -35
  11. package/dist/designer.d.ts.map +1 -1
  12. package/dist/designer.js +11 -1
  13. package/dist/index.d.ts +21 -10
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -0
  16. package/dist/layout.d.ts +39 -2
  17. package/dist/layout.d.ts.map +1 -1
  18. package/dist/navigation.d.ts +27 -0
  19. package/dist/navigation.d.ts.map +1 -1
  20. package/dist/objectql.d.ts +641 -7
  21. package/dist/objectql.d.ts.map +1 -1
  22. package/dist/record-components.d.ts +160 -0
  23. package/dist/record-components.d.ts.map +1 -0
  24. package/dist/record-components.js +8 -0
  25. package/dist/reports.d.ts +37 -0
  26. package/dist/reports.d.ts.map +1 -1
  27. package/dist/theme.d.ts +5 -0
  28. package/dist/theme.d.ts.map +1 -1
  29. package/dist/views.d.ts +257 -3
  30. package/dist/views.d.ts.map +1 -1
  31. package/dist/workflow.d.ts +198 -0
  32. package/dist/workflow.d.ts.map +1 -1
  33. package/dist/zod/app.zod.d.ts +42 -2
  34. package/dist/zod/app.zod.d.ts.map +1 -1
  35. package/dist/zod/app.zod.js +61 -1
  36. package/dist/zod/complex.zod.d.ts +122 -0
  37. package/dist/zod/complex.zod.d.ts.map +1 -1
  38. package/dist/zod/complex.zod.js +57 -0
  39. package/dist/zod/data-display.zod.d.ts +4 -0
  40. package/dist/zod/data-display.zod.d.ts.map +1 -1
  41. package/dist/zod/data-display.zod.js +2 -0
  42. package/dist/zod/form.zod.d.ts +6 -6
  43. package/dist/zod/index.zod.d.ts +364 -41
  44. package/dist/zod/index.zod.d.ts.map +1 -1
  45. package/dist/zod/index.zod.js +2 -2
  46. package/dist/zod/layout.zod.d.ts +6 -6
  47. package/dist/zod/navigation.zod.d.ts +58 -12
  48. package/dist/zod/navigation.zod.d.ts.map +1 -1
  49. package/dist/zod/navigation.zod.js +21 -9
  50. package/dist/zod/objectql.zod.d.ts +515 -27
  51. package/dist/zod/objectql.zod.d.ts.map +1 -1
  52. package/dist/zod/objectql.zod.js +162 -0
  53. package/dist/zod/reports.zod.d.ts +38 -38
  54. package/dist/zod/views.zod.d.ts +161 -7
  55. package/dist/zod/views.zod.d.ts.map +1 -1
  56. package/dist/zod/views.zod.js +21 -2
  57. package/package.json +2 -2
  58. package/src/__tests__/app-creation-types.test.ts +177 -0
  59. package/src/__tests__/dashboard-config.test.ts +208 -0
  60. package/src/__tests__/examples-metadata-compliance.test.ts +264 -0
  61. package/src/__tests__/navigation-model.test.ts +406 -0
  62. package/src/__tests__/p1-spec-alignment.test.ts +660 -0
  63. package/src/__tests__/p2-spec-exports.test.ts +312 -0
  64. package/src/__tests__/phase2-schemas.test.ts +108 -0
  65. package/src/app.ts +377 -0
  66. package/src/complex.ts +120 -0
  67. package/src/data-display.ts +107 -0
  68. package/src/data.ts +49 -0
  69. package/src/designer.ts +219 -30
  70. package/src/index.ts +192 -3
  71. package/src/layout.ts +55 -2
  72. package/src/navigation.ts +20 -0
  73. package/src/objectql.ts +757 -8
  74. package/src/record-components.ts +188 -0
  75. package/src/reports.ts +43 -0
  76. package/src/theme.ts +6 -0
  77. package/src/views.ts +275 -3
  78. package/src/workflow.ts +226 -0
  79. package/src/zod/app.zod.ts +74 -1
  80. package/src/zod/complex.zod.ts +59 -0
  81. package/src/zod/data-display.zod.ts +2 -0
  82. package/src/zod/index.zod.ts +5 -0
  83. package/src/zod/navigation.zod.ts +22 -10
  84. package/src/zod/objectql.zod.ts +167 -0
  85. package/src/zod/views.zod.ts +21 -2
package/src/data.ts CHANGED
@@ -237,6 +237,19 @@ export interface DataSource<T = any> {
237
237
  */
238
238
  getView?(objectName: string, viewId: string): Promise<any | null>;
239
239
 
240
+ /**
241
+ * Persist a view configuration to the backend.
242
+ * Called when a user saves view settings (columns, filters, sort, toggles, etc.)
243
+ * from the inline ViewConfigPanel.
244
+ * Optional — implementations that do not support view persistence may omit this.
245
+ *
246
+ * @param objectName - Object name
247
+ * @param viewId - View identifier (e.g., 'all', 'pipeline')
248
+ * @param config - The full view configuration to persist
249
+ * @returns Promise resolving to the persisted config (or void)
250
+ */
251
+ updateViewConfig?(objectName: string, viewId: string, config: Record<string, any>): Promise<Record<string, any> | void>;
252
+
240
253
  /**
241
254
  * Get an application definition by name or ID.
242
255
  * Used by app shells to render server-defined navigation, branding, and layout.
@@ -296,6 +309,42 @@ export interface DataSource<T = any> {
296
309
  onProgress?: (percent: number) => void;
297
310
  },
298
311
  ): Promise<FileUploadResult[]>;
312
+
313
+ /**
314
+ * Perform server-side aggregation on a resource.
315
+ * Used by chart widgets to offload grouping/aggregation to the backend,
316
+ * avoiding large data downloads.
317
+ * Optional — when not implemented, chart components will fall back to
318
+ * fetching all records via `find()` and aggregating client-side.
319
+ *
320
+ * @param resource - Resource name (e.g., 'opportunity')
321
+ * @param params - Aggregation parameters (field, function, groupBy, filter)
322
+ * @returns Promise resolving to aggregated results
323
+ */
324
+ aggregate?(resource: string, params: AggregateParams): Promise<AggregateResult[]>;
325
+ }
326
+
327
+ /**
328
+ * Parameters for server-side aggregation.
329
+ * Describes how to group and aggregate data on the backend.
330
+ */
331
+ export interface AggregateParams {
332
+ /** Field to aggregate (e.g., 'amount') */
333
+ field: string;
334
+ /** Aggregation function (e.g., 'sum', 'count', 'avg', 'min', 'max') */
335
+ function: string;
336
+ /** Field to group by (e.g., 'stage') */
337
+ groupBy: string;
338
+ /** Optional filter to apply before aggregation */
339
+ filter?: any;
340
+ }
341
+
342
+ /**
343
+ * Result of a server-side aggregation.
344
+ * Each entry represents one group with the aggregated value.
345
+ */
346
+ export interface AggregateResult {
347
+ [key: string]: any;
299
348
  }
300
349
 
301
350
  /**
package/src/designer.ts CHANGED
@@ -393,11 +393,11 @@ export interface ReportDesignerSchema extends BaseSchema {
393
393
  }
394
394
 
395
395
  // ============================================================================
396
- // View Designer (List View Layout Editor)
396
+ // Unified View Configuration
397
397
  // ============================================================================
398
398
 
399
- /** Column configuration for the view designer */
400
- export interface ViewDesignerColumn {
399
+ /** Column configuration for rich view columns */
400
+ export interface ViewColumnConfig {
401
401
  /** Field name */
402
402
  field: string;
403
403
  /** Display label */
@@ -412,35 +412,224 @@ export interface ViewDesignerColumn {
412
412
  order?: number;
413
413
  }
414
414
 
415
- /** View designer schema */
416
- export interface ViewDesignerSchema extends BaseSchema {
417
- type: 'view-designer';
418
- /** Object name this view is for */
419
- objectName: string;
420
- /** View identifier (for editing existing views) */
421
- viewId?: string;
422
- /** View display label */
423
- viewLabel?: string;
415
+ /** View type union */
416
+ export type UnifiedViewType = 'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map' | 'chart';
417
+
418
+ /**
419
+ * Unified data model for view configuration.
420
+ *
421
+ * Used by ViewConfigPanel (create/edit).
422
+ * Columns may be simple field-name strings or rich ViewColumnConfig objects;
423
+ * consumers should handle both.
424
+ */
425
+ export interface UnifiedViewConfig {
426
+ /** View identifier */
427
+ id?: string;
428
+ /** Display label */
429
+ label?: string;
424
430
  /** View type */
425
- viewType?: 'grid' | 'kanban' | 'gallery' | 'calendar' | 'timeline' | 'gantt' | 'map';
426
- /** Columns / fields to display */
427
- columns?: ViewDesignerColumn[];
428
- /** Filter conditions */
429
- filters?: Array<{ field: string; operator: string; value: any }>;
431
+ type?: UnifiedViewType;
432
+ /** Column configuration simple field names or rich ViewColumnConfig objects */
433
+ columns?: Array<string | ViewColumnConfig>;
434
+ /** Filter conditions in @objectstack/spec JSON-rules array format */
435
+ filter?: any[];
430
436
  /** Sort configuration */
431
- sort?: Array<{ field: string; direction: 'asc' | 'desc' }>;
432
- /** Available fields from the object schema */
433
- availableFields?: Array<{ name: string; label: string; type: string }>;
434
- /** Type-specific options */
435
- options?: Record<string, any>;
436
- /** Read-only mode */
437
- readOnly?: boolean;
438
- /** Callback when view config changes */
439
- onChange?: string;
440
- /** Callback when view is saved */
441
- onSave?: string;
442
- /** Callback when cancelled */
443
- onCancel?: string;
437
+ sort?: Array<{ field: string; order?: string; direction?: string; id?: string }>;
438
+ /** Description */
439
+ description?: string;
440
+ /** Enable search bar */
441
+ showSearch?: boolean;
442
+ /** Enable user filter controls */
443
+ showFilters?: boolean;
444
+ /** Enable user sort controls */
445
+ showSort?: boolean;
446
+ /** Allow data export */
447
+ allowExport?: boolean;
448
+ /** Show view description */
449
+ showDescription?: boolean;
450
+ /** Enable "add record via form" action */
451
+ addRecordViaForm?: boolean;
452
+ /** Export options */
453
+ exportOptions?: any;
454
+
455
+ // -- Type-specific options (nested per @objectstack/spec protocol) ----------
456
+
457
+ /** Kanban-specific options */
458
+ kanban?: {
459
+ groupByField?: string;
460
+ groupField?: string;
461
+ titleField?: string;
462
+ columns?: string[];
463
+ };
464
+ /** Calendar-specific options */
465
+ calendar?: {
466
+ startDateField?: string;
467
+ endDateField?: string;
468
+ titleField?: string;
469
+ colorField?: string;
470
+ allDayField?: string;
471
+ defaultView?: string;
472
+ };
473
+ /** Map-specific options */
474
+ map?: {
475
+ locationField?: string;
476
+ titleField?: string;
477
+ latitudeField?: string;
478
+ longitudeField?: string;
479
+ zoom?: number;
480
+ center?: { lat: number; lng: number };
481
+ };
482
+ /** Gallery-specific options */
483
+ gallery?: {
484
+ imageField?: string;
485
+ titleField?: string;
486
+ subtitleField?: string;
487
+ };
488
+ /** Timeline-specific options */
489
+ timeline?: {
490
+ dateField?: string;
491
+ titleField?: string;
492
+ descriptionField?: string;
493
+ };
494
+ /** Gantt-specific options */
495
+ gantt?: {
496
+ startDateField?: string;
497
+ endDateField?: string;
498
+ titleField?: string;
499
+ progressField?: string;
500
+ dependenciesField?: string;
501
+ colorField?: string;
502
+ };
503
+ /** Chart-specific options */
504
+ chart?: {
505
+ chartType?: string;
506
+ xAxisField?: string;
507
+ yAxisFields?: string[];
508
+ aggregation?: string;
509
+ series?: any[];
510
+ config?: any;
511
+ filter?: any;
512
+ };
513
+
514
+ /** Catch-all for additional properties */
515
+ [key: string]: any;
516
+ }
517
+
518
+ // ============================================================================
519
+ // Dashboard Configuration
520
+ // ============================================================================
521
+
522
+ /** All supported color variants for dashboard widgets */
523
+ export const DASHBOARD_COLOR_VARIANTS = [
524
+ 'default', 'blue', 'teal', 'orange', 'purple', 'success', 'warning', 'danger',
525
+ ] as const;
526
+
527
+ /** Color variant for dashboard widgets */
528
+ export type DashboardColorVariant = (typeof DASHBOARD_COLOR_VARIANTS)[number];
529
+
530
+ /** All supported widget visualization types */
531
+ export const DASHBOARD_WIDGET_TYPES = [
532
+ 'metric', 'bar', 'line', 'pie', 'donut', 'area', 'scatter', 'table', 'pivot', 'list', 'custom',
533
+ ] as const;
534
+
535
+ /** Widget visualization type */
536
+ export type DashboardWidgetType = (typeof DASHBOARD_WIDGET_TYPES)[number];
537
+
538
+ /** Layout position for a single dashboard widget */
539
+ export interface DashboardWidgetConfig {
540
+ /** Widget identifier */
541
+ id: string;
542
+ /** Widget title */
543
+ title?: string;
544
+ /** Widget description */
545
+ description?: string;
546
+ /** Visualization type */
547
+ type?: DashboardWidgetType;
548
+ /** Data source object name */
549
+ object?: string;
550
+ /** Filter conditions applied to widget data */
551
+ filter?: any[];
552
+ /** Category / x-axis field */
553
+ categoryField?: string;
554
+ /** Value / y-axis field */
555
+ valueField?: string;
556
+ /** Aggregation function (count, sum, avg, min, max) */
557
+ aggregate?: string;
558
+ /** Chart-specific configuration */
559
+ chartConfig?: any;
560
+ /** Color variant */
561
+ colorVariant?: DashboardColorVariant;
562
+ /** Grid layout position */
563
+ layout?: { x: number; y: number; w: number; h: number };
564
+ /** Clickable action URL */
565
+ actionUrl?: string;
566
+ }
567
+
568
+ /**
569
+ * Unified data model for dashboard configuration.
570
+ *
571
+ * Used by the DashboardConfigPanel for create/edit workflows.
572
+ * Mirrors the pattern of UnifiedViewConfig for view configuration.
573
+ */
574
+ export interface DashboardConfig {
575
+ /** Dashboard identifier */
576
+ id?: string;
577
+ /** Display title */
578
+ title?: string;
579
+ /** Dashboard description */
580
+ description?: string;
581
+ /** Number of grid columns (default: 12) */
582
+ columns?: number;
583
+ /** Grid gap in pixels */
584
+ gap?: number;
585
+ /** Auto-refresh interval in seconds */
586
+ refreshInterval?: number;
587
+ /** Dashboard widgets */
588
+ widgets?: DashboardWidgetConfig[];
589
+
590
+ // -- Global filters --------------------------------------------------------
591
+
592
+ /** Global filter conditions applied across all widgets */
593
+ globalFilters?: any[];
594
+ /** Date range filter configuration */
595
+ dateRange?: {
596
+ enabled?: boolean;
597
+ field?: string;
598
+ presets?: string[];
599
+ };
600
+ /** User-selectable filter fields */
601
+ userFilters?: Array<{
602
+ field: string;
603
+ label?: string;
604
+ type?: string;
605
+ }>;
606
+
607
+ // -- Appearance ------------------------------------------------------------
608
+
609
+ /** Show dashboard header with title/description */
610
+ showHeader?: boolean;
611
+ /** Show global filter bar */
612
+ showFilters?: boolean;
613
+ /** Show date range picker */
614
+ showDateRange?: boolean;
615
+ /** Action buttons in dashboard header */
616
+ headerActions?: Array<{
617
+ label: string;
618
+ action?: string;
619
+ icon?: string;
620
+ variant?: string;
621
+ }>;
622
+
623
+ // -- Accessibility ---------------------------------------------------------
624
+
625
+ /** ARIA properties */
626
+ aria?: {
627
+ label?: string;
628
+ description?: string;
629
+ };
630
+
631
+ /** Catch-all for additional properties */
632
+ [key: string]: any;
444
633
  }
445
634
 
446
635
  // ============================================================================
package/src/index.ts CHANGED
@@ -53,8 +53,18 @@
53
53
  export type {
54
54
  AppSchema,
55
55
  AppAction,
56
- MenuItem as AppMenuItem
56
+ NavigationItem,
57
+ NavigationItemType,
58
+ NavigationArea,
59
+ MenuItem as AppMenuItem,
60
+ AppWizardStepId,
61
+ AppWizardStep,
62
+ BrandingConfig,
63
+ ObjectSelection,
64
+ AppWizardDraft,
65
+ EditorMode,
57
66
  } from './app';
67
+ export { menuItemToNavigationItem, isValidAppName, wizardDraftToAppSchema } from './app';
58
68
 
59
69
  // ============================================================================
60
70
  // Base Types - The Foundation
@@ -147,6 +157,8 @@ export type {
147
157
  ChartType,
148
158
  ChartSeries,
149
159
  ChartSchema,
160
+ PivotAggregation,
161
+ PivotTableSchema,
150
162
  TimelineEvent,
151
163
  TimelineSchema,
152
164
  KbdSchema,
@@ -254,6 +266,8 @@ export type {
254
266
  ValidationError,
255
267
  APIError,
256
268
  FileUploadResult,
269
+ AggregateParams,
270
+ AggregateResult,
257
271
  } from './data';
258
272
 
259
273
  // ============================================================================
@@ -285,12 +299,23 @@ export type {
285
299
  KanbanConfig,
286
300
  CalendarConfig,
287
301
  GanttConfig,
302
+ ListViewGalleryConfig,
303
+ ListViewTimelineConfig,
288
304
  SortConfig,
305
+ // QuickFilter dual-format types
306
+ ObjectUIQuickFilterItem,
307
+ SpecQuickFilterItem,
308
+ QuickFilterItem,
309
+ // ConditionalFormatting dual-format types
310
+ ObjectUIConditionalFormattingRule,
311
+ SpecConditionalFormattingRule,
312
+ ConditionalFormattingRule,
289
313
  // Component schemas
290
314
  ObjectMapSchema,
291
315
  ObjectGanttSchema,
292
316
  ObjectCalendarSchema,
293
317
  ObjectKanbanSchema,
318
+ KanbanConditionalFormattingRule,
294
319
  ObjectChartSchema,
295
320
  ListViewSchema,
296
321
  ObjectGridSchema,
@@ -299,9 +324,23 @@ export type {
299
324
  ObjectViewSchema,
300
325
  NamedListView,
301
326
  ViewNavigationConfig,
327
+ ViewTabBarConfig,
302
328
  ObjectQLComponentSchema,
303
329
  } from './objectql';
304
330
 
331
+ // ============================================================================
332
+ // Record Components - Spec-aligned record:* page component props
333
+ // ============================================================================
334
+ export type {
335
+ RecordComponentAriaProps,
336
+ RecordDetailsComponentProps,
337
+ RecordHighlightsComponentProps,
338
+ RecordRelatedListComponentProps,
339
+ RecordActivityComponentProps,
340
+ RecordChatterComponentProps,
341
+ RecordPathComponentProps,
342
+ } from './record-components';
343
+
305
344
  // ============================================================================
306
345
  // Field Types - ObjectQL Field Type System
307
346
  // ============================================================================
@@ -519,8 +558,18 @@ export type {
519
558
  CollaborationPresence,
520
559
  CollaborationOperation,
521
560
  CollaborationConfig,
522
- ViewDesignerColumn,
523
- ViewDesignerSchema,
561
+ ViewColumnConfig,
562
+ UnifiedViewType,
563
+ UnifiedViewConfig,
564
+ DashboardColorVariant,
565
+ DashboardWidgetType,
566
+ DashboardWidgetConfig,
567
+ DashboardConfig,
568
+ } from './designer';
569
+
570
+ export {
571
+ DASHBOARD_COLOR_VARIANTS,
572
+ DASHBOARD_WIDGET_TYPES,
524
573
  } from './designer';
525
574
 
526
575
  // ============================================================================
@@ -583,6 +632,7 @@ export type {
583
632
  export type {
584
633
  // Report System
585
634
  ReportSchema,
635
+ ReportType,
586
636
  ReportExportFormat,
587
637
  ReportScheduleFrequency,
588
638
  ReportAggregationType,
@@ -611,6 +661,20 @@ export type {
611
661
  ApprovalHistoryItem,
612
662
  ApprovalProcessSchema,
613
663
  WorkflowInstanceSchema,
664
+ // Flow Designer (spec v3.0.9)
665
+ FlowNodeType,
666
+ FlowWaitEventType,
667
+ FlowNodeExecutionStatus,
668
+ FlowNodeExecutorDescriptor,
669
+ FlowBoundaryConfig,
670
+ FlowNode,
671
+ FlowEdgeType,
672
+ FlowEdge,
673
+ FlowVersionEntry,
674
+ FlowConcurrencyPolicy,
675
+ FlowBpmnInteropResult,
676
+ FlowExecutionStep,
677
+ FlowDesignerSchema,
614
678
  } from './workflow';
615
679
 
616
680
  export type {
@@ -651,6 +715,17 @@ export type {
651
715
  FilterUISchema,
652
716
  SortUISchema,
653
717
  ViewComponentSchema,
718
+ CommentEntry,
719
+ MentionNotification,
720
+ CommentSearchResult,
721
+ ActivityEntry,
722
+ // Feed / Chatter Protocol Types
723
+ FeedItemType,
724
+ FeedItem,
725
+ FieldChangeEntry,
726
+ Mention,
727
+ Reaction,
728
+ RecordSubscription,
654
729
  } from './views';
655
730
 
656
731
  export type {
@@ -962,10 +1037,123 @@ export type {
962
1037
  RowHeight,
963
1038
  RowHeightSchema,
964
1039
  DensityMode,
1040
+ DensityModeSchema,
1041
+ TimelineConfig,
1042
+ TimelineConfigSchema,
1043
+ NavigationConfig,
1044
+ NavigationConfigSchema,
965
1045
  ViewSharing,
966
1046
  ViewSharingSchema,
967
1047
  } from '@objectstack/spec/ui';
968
1048
 
1049
+ // ============================================================================
1050
+ // v3.0.8 Spec UI Types — Dashboard (P1.3)
1051
+ // ============================================================================
1052
+ export type {
1053
+ Dashboard as SpecDashboard,
1054
+ DashboardSchema as SpecDashboardSchema,
1055
+ DashboardWidget as SpecDashboardWidget,
1056
+ DashboardWidgetSchema as SpecDashboardWidgetSchema,
1057
+ DashboardHeader as SpecDashboardHeader,
1058
+ DashboardHeaderSchema as SpecDashboardHeaderSchema,
1059
+ DashboardHeaderAction as SpecDashboardHeaderAction,
1060
+ DashboardHeaderActionSchema as SpecDashboardHeaderActionSchema,
1061
+ GlobalFilter as SpecGlobalFilter,
1062
+ GlobalFilterSchema as SpecGlobalFilterSchema,
1063
+ GlobalFilterOptionsFrom,
1064
+ GlobalFilterOptionsFromSchema,
1065
+ WidgetMeasure,
1066
+ WidgetMeasureSchema,
1067
+ WidgetColorVariant,
1068
+ WidgetColorVariantSchema,
1069
+ } from '@objectstack/spec/ui';
1070
+
1071
+ // ============================================================================
1072
+ // v3.0.8 Spec UI Types — Sharing & Embedding (P2.3)
1073
+ // ============================================================================
1074
+ export type {
1075
+ SharingConfig,
1076
+ SharingConfigSchema,
1077
+ EmbedConfig,
1078
+ EmbedConfigSchema,
1079
+ } from '@objectstack/spec/ui';
1080
+
1081
+ // ============================================================================
1082
+ // v3.0.8 Spec UI Types — View Configuration (P2.4)
1083
+ // ============================================================================
1084
+ export type {
1085
+ AddRecordConfig,
1086
+ AddRecordConfigSchema,
1087
+ AppearanceConfig,
1088
+ AppearanceConfigSchema,
1089
+ UserActionsConfig,
1090
+ UserActionsConfigSchema,
1091
+ ViewTab,
1092
+ ViewTabSchema,
1093
+ } from '@objectstack/spec/ui';
1094
+
1095
+ // ============================================================================
1096
+ // v3.0.10 Spec UI Types — View Filter Rules
1097
+ // ============================================================================
1098
+ export type {
1099
+ ViewFilterRule,
1100
+ ViewFilterRuleSchema,
1101
+ } from '@objectstack/spec/ui';
1102
+
1103
+ // ============================================================================
1104
+ // v3.0.8 Spec UI Types — Form View (P1.2)
1105
+ // ============================================================================
1106
+ export type {
1107
+ FormView as SpecFormView,
1108
+ FormViewSchema as SpecFormViewSchema,
1109
+ FormSection as SpecFormSection,
1110
+ FormSectionSchema as SpecFormSectionSchema,
1111
+ FormField as SpecFormField,
1112
+ FormFieldSchema as SpecFormFieldSchema,
1113
+ } from '@objectstack/spec/ui';
1114
+
1115
+ // ============================================================================
1116
+ // v3.0.8 Spec UI Types — ListView (P1.1)
1117
+ // ============================================================================
1118
+ export type {
1119
+ ListView as SpecListView,
1120
+ ListViewSchema as SpecListViewSchema,
1121
+ ListColumn as SpecListColumn,
1122
+ ListColumnSchema as SpecListColumnSchema,
1123
+ } from '@objectstack/spec/ui';
1124
+
1125
+ // ============================================================================
1126
+ // v3.0.8 Spec UI Types — Record Components (P1.5)
1127
+ // ============================================================================
1128
+ export type {
1129
+ RecordDetailsProps as SpecRecordDetailsProps,
1130
+ RecordHighlightsProps as SpecRecordHighlightsProps,
1131
+ RecordRelatedListProps as SpecRecordRelatedListProps,
1132
+ RecordActivityProps as SpecRecordActivityProps,
1133
+ RecordChatterProps as SpecRecordChatterProps,
1134
+ RecordPathProps as SpecRecordPathProps,
1135
+ } from '@objectstack/spec/ui';
1136
+
1137
+ // ============================================================================
1138
+ // v3.0.8 Spec UI Types — Page (P1.4)
1139
+ // ============================================================================
1140
+ export type {
1141
+ Page as SpecPage,
1142
+ PageSchema as SpecPageSchema,
1143
+ PageComponent as SpecPageComponent,
1144
+ PageComponentSchema as SpecPageComponentSchema,
1145
+ PageRegion as SpecPageRegion,
1146
+ PageRegionSchema as SpecPageRegionSchema,
1147
+ PageType as SpecPageType,
1148
+ PageTypeSchema as SpecPageTypeSchema,
1149
+ PageVariable as SpecPageVariable,
1150
+ PageVariableSchema as SpecPageVariableSchema,
1151
+ BlankPageLayout,
1152
+ BlankPageLayoutSchema,
1153
+ BlankPageLayoutItem,
1154
+ BlankPageLayoutItemSchema,
1155
+ } from '@objectstack/spec/ui';
1156
+
969
1157
  // ============================================================================
970
1158
  // v2.0.7 Spec UI Types — Performance & Page Transitions
971
1159
  // ============================================================================
@@ -984,6 +1172,7 @@ export type {
984
1172
  AriaProps,
985
1173
  AriaPropsSchema,
986
1174
  WcagContrastLevel,
1175
+ WcagContrastLevelSchema,
987
1176
  } from '@objectstack/spec/ui';
988
1177
 
989
1178
  // ============================================================================
package/src/layout.ts CHANGED
@@ -429,7 +429,23 @@ export interface AspectRatioSchema extends BaseSchema {
429
429
  * Determines page behavior and default layout template.
430
430
  * Aligned with @objectstack/spec Page.type
431
431
  */
432
- export type PageType = 'record' | 'home' | 'app' | 'utility';
432
+ export type PageType =
433
+ | 'record'
434
+ | 'home'
435
+ | 'app'
436
+ | 'utility'
437
+ | 'dashboard'
438
+ | 'grid'
439
+ | 'list'
440
+ | 'gallery'
441
+ | 'kanban'
442
+ | 'calendar'
443
+ | 'timeline'
444
+ | 'form'
445
+ | 'record_detail'
446
+ | 'record_review'
447
+ | 'overview'
448
+ | 'blank';
433
449
 
434
450
  /**
435
451
  * Page Variable
@@ -440,9 +456,11 @@ export interface PageVariable {
440
456
  /** Variable name */
441
457
  name: string;
442
458
  /** Variable type @default 'string' */
443
- type?: 'string' | 'number' | 'boolean' | 'object' | 'array';
459
+ type?: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'record_id';
444
460
  /** Default value for initialization */
445
461
  defaultValue?: any;
462
+ /** Variable data source (e.g. URL param, context, expression) */
463
+ source?: string;
446
464
  }
447
465
 
448
466
  /**
@@ -522,6 +540,32 @@ export interface PageSchema extends BaseSchema {
522
540
  * (Aligned with @objectstack/spec Page.regions)
523
541
  */
524
542
  regions?: PageRegion[];
543
+ /**
544
+ * Blank page grid layout
545
+ * Used when pageType is 'blank' for free-form grid canvas.
546
+ * Aligned with @objectstack/spec BlankPageLayoutSchema.
547
+ */
548
+ blankLayout?: {
549
+ /** Number of grid columns */
550
+ columns?: number;
551
+ /** Row height in pixels */
552
+ rowHeight?: number;
553
+ /** Gap between grid items in pixels */
554
+ gap?: number;
555
+ /** Items placed on the grid */
556
+ items?: Array<{
557
+ /** Component ID reference */
558
+ componentId: string;
559
+ /** Grid column position */
560
+ x: number;
561
+ /** Grid row position */
562
+ y: number;
563
+ /** Width in grid columns */
564
+ width: number;
565
+ /** Height in grid rows */
566
+ height: number;
567
+ }>;
568
+ };
525
569
  /**
526
570
  * Main content array (Legacy/Simple mode)
527
571
  */
@@ -539,6 +583,15 @@ export interface PageSchema extends BaseSchema {
539
583
  * Profiles that can access this page
540
584
  */
541
585
  assignedProfiles?: string[];
586
+ /**
587
+ * ARIA accessibility attributes.
588
+ * Aligned with @objectstack/spec AriaPropsSchema.
589
+ */
590
+ aria?: {
591
+ ariaLabel?: string;
592
+ ariaDescribedBy?: string;
593
+ role?: string;
594
+ };
542
595
  }
543
596
 
544
597
  /**