@ramme-io/kernel 1.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 (124) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/LICENSE +21 -0
  3. package/dist/components/AutoForm.d.ts +24 -0
  4. package/dist/components/AutoForm.d.ts.map +1 -0
  5. package/dist/components/AutoForm.js +78 -0
  6. package/dist/components/AutoForm.js.map +1 -0
  7. package/dist/components/SmartTable.d.ts +14 -0
  8. package/dist/components/SmartTable.d.ts.map +1 -0
  9. package/dist/components/SmartTable.js +128 -0
  10. package/dist/components/SmartTable.js.map +1 -0
  11. package/dist/config/app.manifest.d.ts +7 -0
  12. package/dist/config/app.manifest.d.ts.map +1 -0
  13. package/dist/config/app.manifest.js +8 -0
  14. package/dist/config/app.manifest.js.map +1 -0
  15. package/dist/engine/renderers/DynamicBlock.d.ts +9 -0
  16. package/dist/engine/renderers/DynamicBlock.d.ts.map +1 -0
  17. package/dist/engine/renderers/DynamicBlock.js +67 -0
  18. package/dist/engine/renderers/DynamicBlock.js.map +1 -0
  19. package/dist/engine/renderers/DynamicPage.d.ts +11 -0
  20. package/dist/engine/renderers/DynamicPage.d.ts.map +1 -0
  21. package/dist/engine/renderers/DynamicPage.js +91 -0
  22. package/dist/engine/renderers/DynamicPage.js.map +1 -0
  23. package/dist/engine/renderers/route-generator.d.ts +16 -0
  24. package/dist/engine/renderers/route-generator.d.ts.map +1 -0
  25. package/dist/engine/renderers/route-generator.js +30 -0
  26. package/dist/engine/renderers/route-generator.js.map +1 -0
  27. package/dist/engine/renderers/sitemap-entry.d.ts +7 -0
  28. package/dist/engine/renderers/sitemap-entry.d.ts.map +1 -0
  29. package/dist/engine/renderers/sitemap-entry.js +2 -0
  30. package/dist/engine/renderers/sitemap-entry.js.map +1 -0
  31. package/dist/engine/runtime/ManifestContext.d.ts +115 -0
  32. package/dist/engine/runtime/ManifestContext.d.ts.map +1 -0
  33. package/dist/engine/runtime/ManifestContext.js +56 -0
  34. package/dist/engine/runtime/ManifestContext.js.map +1 -0
  35. package/dist/engine/runtime/MqttContext.d.ts +14 -0
  36. package/dist/engine/runtime/MqttContext.d.ts.map +1 -0
  37. package/dist/engine/runtime/MqttContext.js +70 -0
  38. package/dist/engine/runtime/MqttContext.js.map +1 -0
  39. package/dist/engine/runtime/SitemapContext.d.ts +31 -0
  40. package/dist/engine/runtime/SitemapContext.d.ts.map +1 -0
  41. package/dist/engine/runtime/SitemapContext.js +54 -0
  42. package/dist/engine/runtime/SitemapContext.js.map +1 -0
  43. package/dist/engine/runtime/data-seeder.d.ts +10 -0
  44. package/dist/engine/runtime/data-seeder.d.ts.map +1 -0
  45. package/dist/engine/runtime/data-seeder.js +35 -0
  46. package/dist/engine/runtime/data-seeder.js.map +1 -0
  47. package/dist/engine/runtime/useAction.d.ts +4 -0
  48. package/dist/engine/runtime/useAction.d.ts.map +1 -0
  49. package/dist/engine/runtime/useAction.js +55 -0
  50. package/dist/engine/runtime/useAction.js.map +1 -0
  51. package/dist/engine/runtime/useCrudLocalStorage.d.ts +19 -0
  52. package/dist/engine/runtime/useCrudLocalStorage.d.ts.map +1 -0
  53. package/dist/engine/runtime/useCrudLocalStorage.js +73 -0
  54. package/dist/engine/runtime/useCrudLocalStorage.js.map +1 -0
  55. package/dist/engine/runtime/useDataQuery.d.ts +39 -0
  56. package/dist/engine/runtime/useDataQuery.d.ts.map +1 -0
  57. package/dist/engine/runtime/useDataQuery.js +50 -0
  58. package/dist/engine/runtime/useDataQuery.js.map +1 -0
  59. package/dist/engine/runtime/useDynamicSitemap.d.ts +9 -0
  60. package/dist/engine/runtime/useDynamicSitemap.d.ts.map +1 -0
  61. package/dist/engine/runtime/useDynamicSitemap.js +38 -0
  62. package/dist/engine/runtime/useDynamicSitemap.js.map +1 -0
  63. package/dist/engine/runtime/useJustInTimeSeeder.d.ts +11 -0
  64. package/dist/engine/runtime/useJustInTimeSeeder.d.ts.map +1 -0
  65. package/dist/engine/runtime/useJustInTimeSeeder.js +88 -0
  66. package/dist/engine/runtime/useJustInTimeSeeder.js.map +1 -0
  67. package/dist/engine/runtime/useLiveBridge.d.ts +109 -0
  68. package/dist/engine/runtime/useLiveBridge.d.ts.map +1 -0
  69. package/dist/engine/runtime/useLiveBridge.js +21 -0
  70. package/dist/engine/runtime/useLiveBridge.js.map +1 -0
  71. package/dist/engine/runtime/useSignal.d.ts +11 -0
  72. package/dist/engine/runtime/useSignal.d.ts.map +1 -0
  73. package/dist/engine/runtime/useSignal.js +26 -0
  74. package/dist/engine/runtime/useSignal.js.map +1 -0
  75. package/dist/engine/runtime/useSignalStore.d.ts +31 -0
  76. package/dist/engine/runtime/useSignalStore.d.ts.map +1 -0
  77. package/dist/engine/runtime/useSignalStore.js +60 -0
  78. package/dist/engine/runtime/useSignalStore.js.map +1 -0
  79. package/dist/engine/runtime/useWorkflowEngine.d.ts +4 -0
  80. package/dist/engine/runtime/useWorkflowEngine.d.ts.map +1 -0
  81. package/dist/engine/runtime/useWorkflowEngine.js +85 -0
  82. package/dist/engine/runtime/useWorkflowEngine.js.map +1 -0
  83. package/dist/engine/types/manifest-types.d.ts +38 -0
  84. package/dist/engine/types/manifest-types.d.ts.map +1 -0
  85. package/dist/engine/types/manifest-types.js +5 -0
  86. package/dist/engine/types/manifest-types.js.map +1 -0
  87. package/dist/engine/types/sitemap-entry.d.ts +58 -0
  88. package/dist/engine/types/sitemap-entry.d.ts.map +1 -0
  89. package/dist/engine/types/sitemap-entry.js +19 -0
  90. package/dist/engine/types/sitemap-entry.js.map +1 -0
  91. package/dist/engine/validation/schema.d.ts +383 -0
  92. package/dist/engine/validation/schema.d.ts.map +1 -0
  93. package/dist/engine/validation/schema.js +156 -0
  94. package/dist/engine/validation/schema.js.map +1 -0
  95. package/dist/index.d.ts +22 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +24 -0
  98. package/dist/index.js.map +1 -0
  99. package/package.json +36 -0
  100. package/src/components/AutoForm.tsx +141 -0
  101. package/src/components/SmartTable.tsx +316 -0
  102. package/src/config/app.manifest.ts +7 -0
  103. package/src/engine/renderers/DynamicBlock.tsx +84 -0
  104. package/src/engine/renderers/DynamicPage.tsx +196 -0
  105. package/src/engine/renderers/route-generator.tsx +47 -0
  106. package/src/engine/renderers/sitemap-entry.ts +6 -0
  107. package/src/engine/runtime/ManifestContext.tsx +81 -0
  108. package/src/engine/runtime/MqttContext.tsx +94 -0
  109. package/src/engine/runtime/SitemapContext.tsx +61 -0
  110. package/src/engine/runtime/data-seeder.ts +39 -0
  111. package/src/engine/runtime/useAction.ts +64 -0
  112. package/src/engine/runtime/useCrudLocalStorage.ts +82 -0
  113. package/src/engine/runtime/useDataQuery.ts +98 -0
  114. package/src/engine/runtime/useDynamicSitemap.tsx +43 -0
  115. package/src/engine/runtime/useJustInTimeSeeder.ts +101 -0
  116. package/src/engine/runtime/useLiveBridge.ts +24 -0
  117. package/src/engine/runtime/useSignal.ts +40 -0
  118. package/src/engine/runtime/useSignalStore.ts +94 -0
  119. package/src/engine/runtime/useWorkflowEngine.ts +89 -0
  120. package/src/engine/types/manifest-types.ts +45 -0
  121. package/src/engine/types/sitemap-entry.ts +66 -0
  122. package/src/engine/validation/schema.ts +189 -0
  123. package/src/index.ts +27 -0
  124. package/tsconfig.json +28 -0
@@ -0,0 +1,156 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * @file schema.ts
4
+ * @description The "Application Constitution".
5
+ *
6
+ * ARCHITECTURAL ROLE:
7
+ * This file uses Zod to define the strict runtime validation rules for the
8
+ * App Manifest. While `manifest-types.ts` handles compile-time TypeScript checks,
9
+ * this file handles runtime validation, ensuring that any JSON loaded into the
10
+ * engine (whether from a file, API, or user input) is structurally sound.
11
+ *
12
+ * LAYERS DEFINED:
13
+ * 1. **SaaS Layer:** Data resources, fields, and tables.
14
+ * 2. **Physical Layer:** IoT signals, sensors, and entities.
15
+ * 3. **Logic Layer:** Workflows, triggers, and automated actions.
16
+ * 4. **Presentation Layer:** Pages, sections, and UI blocks.
17
+ */
18
+ // ------------------------------------------------------------------
19
+ // 1. DATA RESOURCE DEFINITIONS (SaaS Layer)
20
+ // ------------------------------------------------------------------
21
+ export const FieldSchema = z.object({
22
+ key: z.string(),
23
+ label: z.string(),
24
+ type: z.enum(['text', 'number', 'currency', 'date', 'boolean', 'status', 'email', 'image', 'textarea']),
25
+ required: z.boolean().optional(),
26
+ description: z.string().optional(),
27
+ defaultValue: z.any().optional(),
28
+ });
29
+ export const ResourceSchema = z.object({
30
+ id: z.string(),
31
+ name: z.string(),
32
+ fields: z.array(FieldSchema),
33
+ defaultView: z.enum(['table', 'grid', 'list']).optional(),
34
+ features: z.object({
35
+ searchable: z.boolean().optional(),
36
+ creatable: z.boolean().optional(),
37
+ editable: z.boolean().optional(),
38
+ deletable: z.boolean().optional(),
39
+ exportable: z.boolean().optional(),
40
+ }).optional(),
41
+ });
42
+ // ------------------------------------------------------------------
43
+ // 2. SIGNAL & IOT DEFINITIONS (Physical Layer)
44
+ // ------------------------------------------------------------------
45
+ export const SignalSchema = z.object({
46
+ id: z.string().min(1, "Signal ID is required"),
47
+ label: z.string(),
48
+ description: z.string().optional(),
49
+ kind: z.enum(['sensor', 'actuator', 'setpoint', 'metric', 'status', 'kpi']),
50
+ source: z.enum(['mock', 'mqtt', 'http', 'derived', 'local']),
51
+ // Connectivity
52
+ topic: z.string().optional(),
53
+ endpoint: z.string().optional(),
54
+ jsonPath: z.string().optional(),
55
+ refreshRate: z.number().optional().default(1000),
56
+ // Values
57
+ defaultValue: z.any().optional(),
58
+ unit: z.string().optional(),
59
+ min: z.number().optional(),
60
+ max: z.number().optional(),
61
+ });
62
+ export const EntitySchema = z.object({
63
+ id: z.string(),
64
+ name: z.string(),
65
+ description: z.string().optional(),
66
+ type: z.string(),
67
+ category: z.string().default('logical'),
68
+ signals: z.array(z.string()),
69
+ ui: z.object({
70
+ icon: z.string().optional(),
71
+ color: z.string().optional(),
72
+ dashboardComponent: z.string().optional(),
73
+ }).optional(),
74
+ });
75
+ // ------------------------------------------------------------------
76
+ // ✅ NEW: LOGIC & WORKFLOW DEFINITIONS
77
+ // ------------------------------------------------------------------
78
+ export const TriggerSchema = z.object({
79
+ id: z.string(),
80
+ type: z.enum(['signal_change', 'manual_action', 'schedule', 'webhook']),
81
+ config: z.record(z.string(), z.any()),
82
+ });
83
+ export const ActionSchema = z.object({
84
+ id: z.string(),
85
+ type: z.enum([
86
+ 'update_resource',
87
+ 'send_notification',
88
+ 'mqtt_publish',
89
+ 'api_call',
90
+ 'navigate',
91
+ 'agent_task'
92
+ ]),
93
+ config: z.record(z.string(), z.any()),
94
+ });
95
+ export const WorkflowSchema = z.object({
96
+ id: z.string(),
97
+ name: z.string(),
98
+ active: z.boolean().default(true),
99
+ trigger: TriggerSchema,
100
+ actions: z.array(ActionSchema),
101
+ });
102
+ // ------------------------------------------------------------------
103
+ // 3. UI LAYOUT DEFINITIONS (Presentation Layer)
104
+ // ------------------------------------------------------------------
105
+ export const BlockSchema = z.object({
106
+ id: z.string(),
107
+ type: z.string(),
108
+ props: z.record(z.string(), z.any()),
109
+ layout: z.object({
110
+ colSpan: z.number().optional(),
111
+ rowSpan: z.number().optional(),
112
+ }).optional(),
113
+ });
114
+ export const PageSectionSchema = z.object({
115
+ id: z.string(),
116
+ title: z.string().optional(),
117
+ description: z.string().optional(),
118
+ layout: z.object({
119
+ columns: z.number().optional(),
120
+ variant: z.enum(['grid', 'stack', 'split']).optional()
121
+ }).optional(),
122
+ blocks: z.array(BlockSchema),
123
+ });
124
+ export const PageSchema = z.object({
125
+ id: z.string(),
126
+ slug: z.string(),
127
+ title: z.string(),
128
+ description: z.string().optional(),
129
+ icon: z.string().optional(),
130
+ sections: z.array(PageSectionSchema),
131
+ });
132
+ // MASTER APP SPECIFICATION
133
+ export const AppSpecificationSchema = z.object({
134
+ meta: z.object({
135
+ name: z.string(),
136
+ version: z.string(),
137
+ description: z.string().optional(),
138
+ author: z.string().optional(),
139
+ createdAt: z.string().optional(),
140
+ }),
141
+ config: z.object({
142
+ theme: z.enum(['light', 'dark', 'system', 'corporate', 'midnight', 'blueprint']).default('system'),
143
+ mockMode: z.boolean().default(true),
144
+ brokerUrl: z.string().optional(),
145
+ }),
146
+ modules: z.array(z.string()).optional(),
147
+ resources: z.array(ResourceSchema).optional(),
148
+ domain: z.object({
149
+ signals: z.array(SignalSchema),
150
+ entities: z.array(EntitySchema),
151
+ // ✅ ADDED WORKFLOWS HERE
152
+ workflows: z.array(WorkflowSchema).optional(),
153
+ }),
154
+ pages: z.array(PageSchema).optional(),
155
+ });
156
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/engine/validation/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export * from './engine/runtime/ManifestContext';
2
+ export * from './engine/runtime/MqttContext';
3
+ export * from './engine/runtime/SitemapContext';
4
+ export * from './engine/runtime/useAction';
5
+ export * from './engine/runtime/useCrudLocalStorage';
6
+ export * from './engine/runtime/useDataQuery';
7
+ export * from './engine/runtime/useDynamicSitemap';
8
+ export * from './engine/runtime/useJustInTimeSeeder';
9
+ export * from './engine/runtime/useLiveBridge';
10
+ export * from './engine/runtime/useSignal';
11
+ export * from './engine/runtime/useSignalStore';
12
+ export * from './engine/runtime/useWorkflowEngine';
13
+ export * from './engine/runtime/data-seeder';
14
+ export * from './engine/renderers/DynamicBlock';
15
+ export * from './engine/renderers/DynamicPage';
16
+ export * from './engine/renderers/route-generator';
17
+ export * from './engine/types/manifest-types';
18
+ export * from './engine/types/sitemap-entry';
19
+ export * from './engine/validation/schema';
20
+ export { SmartTable } from './components/SmartTable';
21
+ export { AutoForm } from './components/AutoForm';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAE7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AAEnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ // Engine exports
2
+ export * from './engine/runtime/ManifestContext';
3
+ export * from './engine/runtime/MqttContext';
4
+ export * from './engine/runtime/SitemapContext';
5
+ export * from './engine/runtime/useAction';
6
+ export * from './engine/runtime/useCrudLocalStorage';
7
+ export * from './engine/runtime/useDataQuery';
8
+ export * from './engine/runtime/useDynamicSitemap';
9
+ export * from './engine/runtime/useJustInTimeSeeder';
10
+ export * from './engine/runtime/useLiveBridge';
11
+ export * from './engine/runtime/useSignal';
12
+ export * from './engine/runtime/useSignalStore';
13
+ export * from './engine/runtime/useWorkflowEngine';
14
+ export * from './engine/runtime/data-seeder';
15
+ export * from './engine/renderers/DynamicBlock';
16
+ export * from './engine/renderers/DynamicPage';
17
+ export * from './engine/renderers/route-generator';
18
+ export * from './engine/types/manifest-types';
19
+ export * from './engine/types/sitemap-entry';
20
+ export * from './engine/validation/schema';
21
+ // Component exports
22
+ export { SmartTable } from './components/SmartTable';
23
+ export { AutoForm } from './components/AutoForm';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAE7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AAEnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,4BAA4B,CAAC;AAE3C,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@ramme-io/kernel",
3
+ "version": "1.3.0",
4
+ "description": "Core engine",
5
+ "private": false,
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "default": "./dist/index.js"
16
+ }
17
+ },
18
+ "dependencies": {
19
+ "mqtt": "^5.14.1",
20
+ "zustand": "^5.0.3",
21
+ "@ramme-io/ui": "1.2.3"
22
+ },
23
+ "peerDependencies": {
24
+ "react": ">=18.2.0",
25
+ "react-dom": ">=18.2.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/react": "^18.2.0",
29
+ "@types/react-dom": "^18.2.0",
30
+ "typescript": "^5.0.0"
31
+ },
32
+ "scripts": {
33
+ "dev": "tsc --watch",
34
+ "build": "tsc"
35
+ }
36
+ }
@@ -0,0 +1,141 @@
1
+ import React, { useMemo } from 'react';
2
+ import { Drawer, FormTemplate, Button, type FormField } from '@ramme-io/ui';
3
+
4
+ /**
5
+ * @file AutoForm.tsx
6
+ * @description The "Zero-Boilerplate" Form Engine.
7
+ * * ARCHITECTURAL ROLE:
8
+ * This component acts as the bridge between your data schema (JSON) and the UI.
9
+ * Instead of writing manual form code for every resource (Users, Products, Orders),
10
+ * this component dynamically generates the correct inputs based on the field type.
11
+ * * KEY FEATURES:
12
+ * 1. **Smart Mapping:** Automatically converts 'boolean' -> Toggle, 'date' -> DatePicker, etc.
13
+ * 2. **Context Aware:** Auto-detects "Create" vs "Edit" mode based on `initialData`.
14
+ * 3. **Safety Logic:** Automatically hides primary keys during creation and locks them during editing.
15
+ */
16
+
17
+ interface AutoFormProps {
18
+ isOpen: boolean;
19
+ onClose: () => void;
20
+ onSubmit: (data: any) => void;
21
+ title: string;
22
+ fields: any[]; // The raw metadata from app.manifest.ts
23
+ initialData?: any;
24
+ }
25
+
26
+ export const AutoForm: React.FC<AutoFormProps> = ({
27
+ isOpen,
28
+ onClose,
29
+ onSubmit,
30
+ title,
31
+ fields,
32
+ initialData
33
+ }) => {
34
+
35
+ // 1. Safe Data Handling
36
+ const safeData = initialData || {};
37
+ const isEditMode = !!safeData.id;
38
+
39
+ // 2. Schema-to-UI Mapping Engine
40
+ const formFields = useMemo<FormField[]>(() => {
41
+ return fields
42
+ // 🛑 RULE 1: Hide ID field during creation (System handles it)
43
+ .filter((f: any) => !(f.key === 'id' && !isEditMode))
44
+ .map((f: any) => {
45
+
46
+ const isIdField = f.key === 'id';
47
+
48
+ // Base Configuration for all fields
49
+ const baseConfig = {
50
+ name: f.key,
51
+ label: f.label,
52
+ required: f.required,
53
+ placeholder: f.description || `Enter ${f.label.toLowerCase()}`,
54
+ // Pre-fill data if editing, or use default from schema
55
+ value: safeData[f.key] !== undefined ? safeData[f.key] : (f.defaultValue || ''),
56
+ colSpan: 1,
57
+ // 🛑 RULE 2: If it's the ID field, force it to be disabled (View Only)
58
+ disabled: isIdField
59
+ };
60
+
61
+ // Intelligent Type Switching
62
+ switch (f.type) {
63
+ case 'number':
64
+ case 'integer':
65
+ case 'currency':
66
+ return {
67
+ ...baseConfig,
68
+ type: 'number',
69
+ value: Number(baseConfig.value) || 0
70
+ };
71
+
72
+ case 'boolean':
73
+ return {
74
+ ...baseConfig,
75
+ type: 'toggle',
76
+ checked: !!baseConfig.value
77
+ };
78
+
79
+ case 'date':
80
+ return {
81
+ ...baseConfig,
82
+ type: 'datepicker',
83
+ value: baseConfig.value ? new Date(baseConfig.value) : null
84
+ };
85
+
86
+ case 'status':
87
+ return {
88
+ ...baseConfig,
89
+ type: 'select',
90
+ options: [
91
+ { value: 'Active', label: 'Active' },
92
+ { value: 'Pending', label: 'Pending' },
93
+ { value: 'Inactive', label: 'Inactive' },
94
+ { value: 'Archived', label: 'Archived' }
95
+ ]
96
+ };
97
+
98
+ case 'textarea':
99
+ return {
100
+ ...baseConfig,
101
+ type: 'textarea',
102
+ colSpan: 2
103
+ };
104
+
105
+ case 'email':
106
+ return { ...baseConfig, type: 'email' };
107
+
108
+ default:
109
+ return { ...baseConfig, type: 'text' };
110
+ }
111
+ });
112
+ }, [fields, safeData, isEditMode]);
113
+
114
+ return (
115
+ <Drawer
116
+ isOpen={isOpen}
117
+ onClose={onClose}
118
+ title={`${isEditMode ? 'Edit' : 'New'} ${title}`}
119
+ size="500px"
120
+ >
121
+ <div className="p-6">
122
+ <FormTemplate
123
+ fields={formFields}
124
+ onSubmit={(formData) => {
125
+ // Merge original ID to ensure we update the correct record
126
+ onSubmit({ ...safeData, ...formData });
127
+ }}
128
+ >
129
+ <div className="flex justify-end gap-2 mt-8 pt-4 border-t border-border">
130
+ <Button variant="outline" onClick={onClose} type="button">
131
+ Cancel
132
+ </Button>
133
+ <Button type="submit" variant="primary">
134
+ {isEditMode ? 'Save Changes' : 'Create Record'}
135
+ </Button>
136
+ </div>
137
+ </FormTemplate>
138
+ </div>
139
+ </Drawer>
140
+ );
141
+ };