@object-ui/types 3.0.2 → 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 +129 -35
  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 +138 -6
  37. package/dist/zod/complex.zod.d.ts.map +1 -1
  38. package/dist/zod/complex.zod.js +65 -2
  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 +368 -43
  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 +131 -31
  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 +67 -2
  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
@@ -16,8 +16,60 @@
16
16
  */
17
17
  import { z } from 'zod';
18
18
  import { BaseSchema } from './base.zod.js';
19
+ // ============================================================================
20
+ // Unified NavigationItem Schema
21
+ // ============================================================================
22
+ /**
23
+ * Navigation Item Type enum
24
+ */
25
+ export const NavigationItemTypeSchema = z.enum([
26
+ 'object', 'dashboard', 'page', 'report', 'url', 'group', 'separator', 'action',
27
+ ]);
28
+ /**
29
+ * Navigation Item Schema — unified model aligned with @objectstack/spec.
30
+ */
31
+ export const NavigationItemSchema = z.lazy(() => z.object({
32
+ id: z.string().describe('Unique identifier'),
33
+ type: NavigationItemTypeSchema.describe('Navigation item type'),
34
+ label: z.string().describe('Display label'),
35
+ icon: z.string().optional().describe('Icon name (Lucide)'),
36
+ // Type-specific target fields
37
+ objectName: z.string().optional().describe('Target object name (type: object)'),
38
+ viewName: z.string().optional().describe('Target view name (type: object) — named list view e.g. calendar, pipeline'),
39
+ dashboardName: z.string().optional().describe('Target dashboard name (type: dashboard)'),
40
+ pageName: z.string().optional().describe('Target page name (type: page)'),
41
+ reportName: z.string().optional().describe('Target report name (type: report)'),
42
+ url: z.string().optional().describe('Target URL (type: url)'),
43
+ target: z.enum(['_blank', '_self']).optional().describe('Link target (type: url)'),
44
+ // Grouping
45
+ children: z.array(z.lazy(() => NavigationItemSchema)).optional().describe('Child items (type: group)'),
46
+ // Visibility & Permissions
47
+ visible: z.union([z.boolean(), z.string()]).optional().describe('Visibility expression'),
48
+ requiredPermissions: z.array(z.string()).optional().describe('Required permissions'),
49
+ // UX Enhancements
50
+ badge: z.union([z.string(), z.number()]).optional().describe('Badge text or count'),
51
+ badgeVariant: z.enum(['default', 'destructive', 'outline']).optional().describe('Badge variant'),
52
+ defaultOpen: z.boolean().optional().describe('Group default expanded state'),
53
+ pinned: z.boolean().optional().describe('Pinned item'),
54
+ order: z.number().optional().describe('Sort order weight'),
55
+ }));
56
+ /**
57
+ * Navigation Area Schema — business-domain partition of navigation.
58
+ */
59
+ export const NavigationAreaSchema = z.object({
60
+ id: z.string().describe('Unique identifier'),
61
+ label: z.string().describe('Display label'),
62
+ icon: z.string().optional().describe('Icon name (Lucide)'),
63
+ navigation: z.array(NavigationItemSchema).describe('Navigation items within area'),
64
+ visible: z.union([z.boolean(), z.string()]).optional().describe('Visibility expression'),
65
+ requiredPermissions: z.array(z.string()).optional().describe('Required permissions'),
66
+ });
67
+ // ============================================================================
68
+ // Legacy MenuItem Schema (backward compat)
69
+ // ============================================================================
19
70
  /**
20
71
  * Menu Item Schema - Navigation menu item
72
+ * @deprecated Use NavigationItemSchema instead.
21
73
  */
22
74
  export const MenuItemSchema = z.lazy(() => z.object({
23
75
  type: z.enum(['item', 'group', 'separator']).optional().describe('Item type'),
@@ -29,6 +81,9 @@ export const MenuItemSchema = z.lazy(() => z.object({
29
81
  badge: z.union([z.string(), z.number()]).optional().describe('Badge or count'),
30
82
  hidden: z.union([z.boolean(), z.string()]).optional().describe('Visibility condition'),
31
83
  }));
84
+ // ============================================================================
85
+ // App Action Schema
86
+ // ============================================================================
32
87
  /**
33
88
  * App Action Schema - Application header/toolbar action
34
89
  */
@@ -44,6 +99,9 @@ export const AppActionSchema = z.object({
44
99
  variant: z.enum(['default', 'destructive', 'outline', 'secondary', 'ghost', 'link']).optional().describe('Button variant'),
45
100
  size: z.enum(['default', 'sm', 'lg', 'icon']).optional().describe('Button size'),
46
101
  });
102
+ // ============================================================================
103
+ // App Schema
104
+ // ============================================================================
47
105
  /**
48
106
  * App Schema - Top-level application configuration
49
107
  */
@@ -55,6 +113,8 @@ export const AppSchema = BaseSchema.extend({
55
113
  logo: z.string().optional().describe('Logo URL or icon name'),
56
114
  favicon: z.string().optional().describe('Favicon URL'),
57
115
  layout: z.enum(['sidebar', 'header', 'empty']).optional().default('sidebar').describe('Global layout strategy'),
58
- menu: z.array(MenuItemSchema).optional().describe('Global navigation menu'),
116
+ menu: z.array(MenuItemSchema).optional().describe('Legacy navigation menu (deprecated, use navigation)'),
117
+ navigation: z.array(NavigationItemSchema).optional().describe('Unified navigation tree'),
118
+ areas: z.array(NavigationAreaSchema).optional().describe('Navigation areas (business-domain partitions)'),
59
119
  actions: z.array(AppActionSchema).optional().describe('Global actions (user profile, settings, etc.)'),
60
120
  });
@@ -424,17 +424,23 @@ export declare const DashboardWidgetLayoutSchema: z.ZodObject<{
424
424
  }, z.core.$strip>;
425
425
  /**
426
426
  * Dashboard Widget Schema
427
+ *
428
+ * Supports two formats:
429
+ * 1. Component format (legacy): `{ id, component: { type, ... }, layout }`
430
+ * 2. Shorthand format (@objectstack/spec): `{ type: 'metric'|'bar'|…, options: {…}, layout }`
427
431
  */
428
432
  export declare const DashboardWidgetSchema: z.ZodObject<{
429
- id: z.ZodString;
433
+ id: z.ZodOptional<z.ZodString>;
430
434
  title: z.ZodOptional<z.ZodString>;
431
- component: z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>;
435
+ component: z.ZodOptional<z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>>;
432
436
  layout: z.ZodOptional<z.ZodObject<{
433
437
  x: z.ZodNumber;
434
438
  y: z.ZodNumber;
435
439
  w: z.ZodNumber;
436
440
  h: z.ZodNumber;
437
441
  }, z.core.$strip>>;
442
+ type: z.ZodOptional<z.ZodString>;
443
+ options: z.ZodOptional<z.ZodUnknown>;
438
444
  }, z.core.$strip>;
439
445
  /**
440
446
  * Dashboard Schema - Dashboard component
@@ -462,17 +468,141 @@ export declare const DashboardSchema: z.ZodObject<{
462
468
  columns: z.ZodOptional<z.ZodNumber>;
463
469
  gap: z.ZodOptional<z.ZodNumber>;
464
470
  widgets: z.ZodArray<z.ZodObject<{
465
- id: z.ZodString;
471
+ id: z.ZodOptional<z.ZodString>;
466
472
  title: z.ZodOptional<z.ZodString>;
467
- component: z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>;
473
+ component: z.ZodOptional<z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>>;
468
474
  layout: z.ZodOptional<z.ZodObject<{
469
475
  x: z.ZodNumber;
470
476
  y: z.ZodNumber;
471
477
  w: z.ZodNumber;
472
478
  h: z.ZodNumber;
473
479
  }, z.core.$strip>>;
480
+ type: z.ZodOptional<z.ZodString>;
481
+ options: z.ZodOptional<z.ZodUnknown>;
474
482
  }, z.core.$strip>>;
475
483
  }, z.core.$loose>;
484
+ /**
485
+ * Dashboard Widget Config Schema (for DashboardConfigPanel)
486
+ */
487
+ export declare const DashboardWidgetConfigSchema: z.ZodObject<{
488
+ id: z.ZodString;
489
+ title: z.ZodOptional<z.ZodString>;
490
+ description: z.ZodOptional<z.ZodString>;
491
+ type: z.ZodOptional<z.ZodEnum<{
492
+ custom: "custom";
493
+ list: "list";
494
+ table: "table";
495
+ line: "line";
496
+ bar: "bar";
497
+ area: "area";
498
+ pie: "pie";
499
+ donut: "donut";
500
+ scatter: "scatter";
501
+ pivot: "pivot";
502
+ metric: "metric";
503
+ }>>;
504
+ object: z.ZodOptional<z.ZodString>;
505
+ filter: z.ZodOptional<z.ZodArray<z.ZodAny>>;
506
+ categoryField: z.ZodOptional<z.ZodString>;
507
+ valueField: z.ZodOptional<z.ZodString>;
508
+ aggregate: z.ZodOptional<z.ZodString>;
509
+ chartConfig: z.ZodOptional<z.ZodAny>;
510
+ colorVariant: z.ZodOptional<z.ZodEnum<{
511
+ warning: "warning";
512
+ success: "success";
513
+ default: "default";
514
+ blue: "blue";
515
+ teal: "teal";
516
+ orange: "orange";
517
+ purple: "purple";
518
+ danger: "danger";
519
+ }>>;
520
+ layout: z.ZodOptional<z.ZodObject<{
521
+ x: z.ZodNumber;
522
+ y: z.ZodNumber;
523
+ w: z.ZodNumber;
524
+ h: z.ZodNumber;
525
+ }, z.core.$strip>>;
526
+ actionUrl: z.ZodOptional<z.ZodString>;
527
+ }, z.core.$strip>;
528
+ /**
529
+ * Dashboard Config Schema — Zod validator for DashboardConfigPanel data model.
530
+ *
531
+ * Validates the unified dashboard configuration used by create/edit workflows.
532
+ */
533
+ export declare const DashboardConfigSchema: z.ZodObject<{
534
+ id: z.ZodOptional<z.ZodString>;
535
+ title: z.ZodOptional<z.ZodString>;
536
+ description: z.ZodOptional<z.ZodString>;
537
+ columns: z.ZodOptional<z.ZodNumber>;
538
+ gap: z.ZodOptional<z.ZodNumber>;
539
+ refreshInterval: z.ZodOptional<z.ZodNumber>;
540
+ widgets: z.ZodOptional<z.ZodArray<z.ZodObject<{
541
+ id: z.ZodString;
542
+ title: z.ZodOptional<z.ZodString>;
543
+ description: z.ZodOptional<z.ZodString>;
544
+ type: z.ZodOptional<z.ZodEnum<{
545
+ custom: "custom";
546
+ list: "list";
547
+ table: "table";
548
+ line: "line";
549
+ bar: "bar";
550
+ area: "area";
551
+ pie: "pie";
552
+ donut: "donut";
553
+ scatter: "scatter";
554
+ pivot: "pivot";
555
+ metric: "metric";
556
+ }>>;
557
+ object: z.ZodOptional<z.ZodString>;
558
+ filter: z.ZodOptional<z.ZodArray<z.ZodAny>>;
559
+ categoryField: z.ZodOptional<z.ZodString>;
560
+ valueField: z.ZodOptional<z.ZodString>;
561
+ aggregate: z.ZodOptional<z.ZodString>;
562
+ chartConfig: z.ZodOptional<z.ZodAny>;
563
+ colorVariant: z.ZodOptional<z.ZodEnum<{
564
+ warning: "warning";
565
+ success: "success";
566
+ default: "default";
567
+ blue: "blue";
568
+ teal: "teal";
569
+ orange: "orange";
570
+ purple: "purple";
571
+ danger: "danger";
572
+ }>>;
573
+ layout: z.ZodOptional<z.ZodObject<{
574
+ x: z.ZodNumber;
575
+ y: z.ZodNumber;
576
+ w: z.ZodNumber;
577
+ h: z.ZodNumber;
578
+ }, z.core.$strip>>;
579
+ actionUrl: z.ZodOptional<z.ZodString>;
580
+ }, z.core.$strip>>>;
581
+ globalFilters: z.ZodOptional<z.ZodArray<z.ZodAny>>;
582
+ dateRange: z.ZodOptional<z.ZodObject<{
583
+ enabled: z.ZodOptional<z.ZodBoolean>;
584
+ field: z.ZodOptional<z.ZodString>;
585
+ presets: z.ZodOptional<z.ZodArray<z.ZodString>>;
586
+ }, z.core.$strip>>;
587
+ userFilters: z.ZodOptional<z.ZodArray<z.ZodObject<{
588
+ field: z.ZodString;
589
+ label: z.ZodOptional<z.ZodString>;
590
+ type: z.ZodOptional<z.ZodString>;
591
+ }, z.core.$strip>>>;
592
+ showHeader: z.ZodOptional<z.ZodBoolean>;
593
+ showFilters: z.ZodOptional<z.ZodBoolean>;
594
+ showDateRange: z.ZodOptional<z.ZodBoolean>;
595
+ headerActions: z.ZodOptional<z.ZodArray<z.ZodObject<{
596
+ label: z.ZodString;
597
+ action: z.ZodOptional<z.ZodString>;
598
+ icon: z.ZodOptional<z.ZodString>;
599
+ variant: z.ZodOptional<z.ZodString>;
600
+ }, z.core.$strip>>>;
601
+ aria: z.ZodOptional<z.ZodObject<{
602
+ label: z.ZodOptional<z.ZodString>;
603
+ description: z.ZodOptional<z.ZodString>;
604
+ }, z.core.$strip>>;
605
+ }, z.core.$strip>;
476
606
  /**
477
607
  * Complex Schema Union - All complex component schemas
478
608
  */
@@ -728,15 +858,17 @@ export declare const ComplexSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
728
858
  columns: z.ZodOptional<z.ZodNumber>;
729
859
  gap: z.ZodOptional<z.ZodNumber>;
730
860
  widgets: z.ZodArray<z.ZodObject<{
731
- id: z.ZodString;
861
+ id: z.ZodOptional<z.ZodString>;
732
862
  title: z.ZodOptional<z.ZodString>;
733
- component: z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>;
863
+ component: z.ZodOptional<z.ZodType<any, unknown, z.core.$ZodTypeInternals<any, unknown>>>;
734
864
  layout: z.ZodOptional<z.ZodObject<{
735
865
  x: z.ZodNumber;
736
866
  y: z.ZodNumber;
737
867
  w: z.ZodNumber;
738
868
  h: z.ZodNumber;
739
869
  }, z.core.$strip>>;
870
+ type: z.ZodOptional<z.ZodString>;
871
+ options: z.ZodOptional<z.ZodUnknown>;
740
872
  }, z.core.$strip>>;
741
873
  }, z.core.$loose>], "type">;
742
874
  //# sourceMappingURL=complex.zod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"complex.zod.d.ts","sourceRoot":"","sources":["../../src/zod/complex.zod.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;iBAU3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;iBAO7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;EAA6C,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;iBAS9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAc7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAe/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAMhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAK5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;iBAM5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWxB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;iBAKtC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;iBAKhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAOxB,CAAC"}
1
+ {"version":3,"file":"complex.zod.d.ts","sourceRoot":"","sources":["../../src/zod/complex.zod.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;iBAU3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;iBAO7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;EAA6C,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;iBAS9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAc7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAe/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAMhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAK5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;iBAM5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWxB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;iBAKtC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;iBAOhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBActC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgChC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAOxB,CAAC"}
@@ -16,6 +16,7 @@
16
16
  */
17
17
  import { z } from 'zod';
18
18
  import { BaseSchema, SchemaNodeSchema } from './base.zod.js';
19
+ import { DASHBOARD_COLOR_VARIANTS, DASHBOARD_WIDGET_TYPES } from '../designer.js';
19
20
  /**
20
21
  * Kanban Card Schema
21
22
  */
@@ -204,12 +205,18 @@ export const DashboardWidgetLayoutSchema = z.object({
204
205
  });
205
206
  /**
206
207
  * Dashboard Widget Schema
208
+ *
209
+ * Supports two formats:
210
+ * 1. Component format (legacy): `{ id, component: { type, ... }, layout }`
211
+ * 2. Shorthand format (@objectstack/spec): `{ type: 'metric'|'bar'|…, options: {…}, layout }`
207
212
  */
208
213
  export const DashboardWidgetSchema = z.object({
209
- id: z.string().describe('Widget ID'),
214
+ id: z.string().optional().describe('Widget ID'),
210
215
  title: z.string().optional().describe('Widget Title'),
211
- component: SchemaNodeSchema.describe('Widget Component'),
216
+ component: SchemaNodeSchema.optional().describe('Widget Component (legacy format)'),
212
217
  layout: DashboardWidgetLayoutSchema.optional().describe('Widget Layout'),
218
+ type: z.string().optional().describe('Widget visualization type (spec shorthand)'),
219
+ options: z.unknown().optional().describe('Widget specific configuration (spec shorthand)'),
213
220
  });
214
221
  /**
215
222
  * Dashboard Schema - Dashboard component
@@ -220,6 +227,62 @@ export const DashboardSchema = BaseSchema.extend({
220
227
  gap: z.number().optional().describe('Grid gap'),
221
228
  widgets: z.array(DashboardWidgetSchema).describe('Dashboard widgets'),
222
229
  });
230
+ /**
231
+ * Dashboard Widget Config Schema (for DashboardConfigPanel)
232
+ */
233
+ export const DashboardWidgetConfigSchema = z.object({
234
+ id: z.string().describe('Widget ID'),
235
+ title: z.string().optional().describe('Widget title'),
236
+ description: z.string().optional().describe('Widget description'),
237
+ type: z.enum(DASHBOARD_WIDGET_TYPES).optional().describe('Widget visualization type'),
238
+ object: z.string().optional().describe('Data source object name'),
239
+ filter: z.array(z.any()).optional().describe('Widget filter conditions'),
240
+ categoryField: z.string().optional().describe('Category/x-axis field'),
241
+ valueField: z.string().optional().describe('Value/y-axis field'),
242
+ aggregate: z.string().optional().describe('Aggregation function'),
243
+ chartConfig: z.any().optional().describe('Chart configuration'),
244
+ colorVariant: z.enum(DASHBOARD_COLOR_VARIANTS).optional().describe('Color variant'),
245
+ layout: DashboardWidgetLayoutSchema.optional().describe('Widget grid layout'),
246
+ actionUrl: z.string().optional().describe('Clickable action URL'),
247
+ });
248
+ /**
249
+ * Dashboard Config Schema — Zod validator for DashboardConfigPanel data model.
250
+ *
251
+ * Validates the unified dashboard configuration used by create/edit workflows.
252
+ */
253
+ export const DashboardConfigSchema = z.object({
254
+ id: z.string().optional().describe('Dashboard identifier'),
255
+ title: z.string().optional().describe('Dashboard title'),
256
+ description: z.string().optional().describe('Dashboard description'),
257
+ columns: z.number().min(1).max(24).optional().describe('Grid columns (1-24)'),
258
+ gap: z.number().min(0).optional().describe('Grid gap in pixels'),
259
+ refreshInterval: z.number().min(0).optional().describe('Auto-refresh interval in seconds'),
260
+ widgets: z.array(DashboardWidgetConfigSchema).optional().describe('Dashboard widgets'),
261
+ globalFilters: z.array(z.any()).optional().describe('Global filter conditions'),
262
+ dateRange: z.object({
263
+ enabled: z.boolean().optional(),
264
+ field: z.string().optional(),
265
+ presets: z.array(z.string()).optional(),
266
+ }).optional().describe('Date range filter'),
267
+ userFilters: z.array(z.object({
268
+ field: z.string(),
269
+ label: z.string().optional(),
270
+ type: z.string().optional(),
271
+ })).optional().describe('User-selectable filters'),
272
+ showHeader: z.boolean().optional().describe('Show dashboard header'),
273
+ showFilters: z.boolean().optional().describe('Show global filter bar'),
274
+ showDateRange: z.boolean().optional().describe('Show date range picker'),
275
+ headerActions: z.array(z.object({
276
+ label: z.string(),
277
+ action: z.string().optional(),
278
+ icon: z.string().optional(),
279
+ variant: z.string().optional(),
280
+ })).optional().describe('Header action buttons'),
281
+ aria: z.object({
282
+ label: z.string().optional(),
283
+ description: z.string().optional(),
284
+ }).optional().describe('ARIA accessibility attributes'),
285
+ });
223
286
  /**
224
287
  * Complex Schema Union - All complex component schemas
225
288
  */
@@ -331,6 +331,8 @@ export declare const DataTableSchema: z.ZodObject<{
331
331
  onRowDelete: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
332
332
  onSelectionChange: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
333
333
  onColumnsReorder: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
334
+ frozenColumns: z.ZodOptional<z.ZodNumber>;
335
+ showRowNumbers: z.ZodOptional<z.ZodBoolean>;
334
336
  }, z.core.$loose>;
335
337
  /**
336
338
  * Markdown Schema - Markdown content renderer
@@ -819,6 +821,8 @@ export declare const DataDisplaySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
819
821
  onRowDelete: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
820
822
  onSelectionChange: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
821
823
  onColumnsReorder: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
824
+ frozenColumns: z.ZodOptional<z.ZodNumber>;
825
+ showRowNumbers: z.ZodOptional<z.ZodBoolean>;
822
826
  }, z.core.$loose>, z.ZodObject<{
823
827
  id: z.ZodOptional<z.ZodString>;
824
828
  name: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"data-display.zod.d.ts","sourceRoot":"","sources":["../../src/zod/data-display.zod.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAStB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;iBASzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;iBAc5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmB1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;iBAKzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAUzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;EAQ1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAatB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;iBAQ9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;iBAIpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAc5B,CAAC"}
1
+ {"version":3,"file":"data-display.zod.d.ts","sourceRoot":"","sources":["../../src/zod/data-display.zod.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAStB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;iBASzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;iBAc5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqB1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;iBAKzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAUzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;EAQ1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAatB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;iBAQ9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;iBAIpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;iBAGrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAc5B,CAAC"}
@@ -136,6 +136,8 @@ export const DataTableSchema = BaseSchema.extend({
136
136
  onRowDelete: z.function().optional().describe('Row delete handler'),
137
137
  onSelectionChange: z.function().optional().describe('Selection change handler'),
138
138
  onColumnsReorder: z.function().optional().describe('Column reorder handler'),
139
+ frozenColumns: z.number().optional().describe('Number of frozen columns'),
140
+ showRowNumbers: z.boolean().optional().describe('Show row numbers'),
139
141
  });
140
142
  /**
141
143
  * Markdown Schema - Markdown content renderer
@@ -113,9 +113,9 @@ export declare const ButtonSchema: z.ZodObject<{
113
113
  }>>>;
114
114
  size: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
115
115
  default: "default";
116
+ icon: "icon";
116
117
  sm: "sm";
117
118
  lg: "lg";
118
- icon: "icon";
119
119
  }>>>;
120
120
  disabled: z.ZodOptional<z.ZodBoolean>;
121
121
  loading: z.ZodOptional<z.ZodBoolean>;
@@ -156,11 +156,11 @@ export declare const InputSchema: z.ZodObject<{
156
156
  inputType: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
157
157
  number: "number";
158
158
  date: "date";
159
+ url: "url";
159
160
  text: "text";
160
161
  email: "email";
161
162
  password: "password";
162
163
  tel: "tel";
163
- url: "url";
164
164
  search: "search";
165
165
  time: "time";
166
166
  "datetime-local": "datetime-local";
@@ -734,8 +734,8 @@ export declare const FormSchema: z.ZodObject<{
734
734
  resetOnSubmit: z.ZodOptional<z.ZodBoolean>;
735
735
  disabled: z.ZodOptional<z.ZodBoolean>;
736
736
  mode: z.ZodOptional<z.ZodEnum<{
737
- view: "view";
738
737
  edit: "edit";
738
+ view: "view";
739
739
  create: "create";
740
740
  }>>;
741
741
  actions: z.ZodOptional<z.ZodArray<z.ZodAny>>;
@@ -775,9 +775,9 @@ export declare const FormComponentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
775
775
  }>>>;
776
776
  size: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
777
777
  default: "default";
778
+ icon: "icon";
778
779
  sm: "sm";
779
780
  lg: "lg";
780
- icon: "icon";
781
781
  }>>>;
782
782
  disabled: z.ZodOptional<z.ZodBoolean>;
783
783
  loading: z.ZodOptional<z.ZodBoolean>;
@@ -814,11 +814,11 @@ export declare const FormComponentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
814
814
  inputType: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
815
815
  number: "number";
816
816
  date: "date";
817
+ url: "url";
817
818
  text: "text";
818
819
  email: "email";
819
820
  password: "password";
820
821
  tel: "tel";
821
- url: "url";
822
822
  search: "search";
823
823
  time: "time";
824
824
  "datetime-local": "datetime-local";
@@ -1295,8 +1295,8 @@ export declare const FormComponentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1295
1295
  resetOnSubmit: z.ZodOptional<z.ZodBoolean>;
1296
1296
  disabled: z.ZodOptional<z.ZodBoolean>;
1297
1297
  mode: z.ZodOptional<z.ZodEnum<{
1298
- view: "view";
1299
1298
  edit: "edit";
1299
+ view: "view";
1300
1300
  create: "create";
1301
1301
  }>>;
1302
1302
  actions: z.ZodOptional<z.ZodArray<z.ZodAny>>;