@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.
- package/.turbo/turbo-build.log +5 -0
- package/LICENSE +21 -0
- package/dist/components/AutoForm.d.ts +24 -0
- package/dist/components/AutoForm.d.ts.map +1 -0
- package/dist/components/AutoForm.js +78 -0
- package/dist/components/AutoForm.js.map +1 -0
- package/dist/components/SmartTable.d.ts +14 -0
- package/dist/components/SmartTable.d.ts.map +1 -0
- package/dist/components/SmartTable.js +128 -0
- package/dist/components/SmartTable.js.map +1 -0
- package/dist/config/app.manifest.d.ts +7 -0
- package/dist/config/app.manifest.d.ts.map +1 -0
- package/dist/config/app.manifest.js +8 -0
- package/dist/config/app.manifest.js.map +1 -0
- package/dist/engine/renderers/DynamicBlock.d.ts +9 -0
- package/dist/engine/renderers/DynamicBlock.d.ts.map +1 -0
- package/dist/engine/renderers/DynamicBlock.js +67 -0
- package/dist/engine/renderers/DynamicBlock.js.map +1 -0
- package/dist/engine/renderers/DynamicPage.d.ts +11 -0
- package/dist/engine/renderers/DynamicPage.d.ts.map +1 -0
- package/dist/engine/renderers/DynamicPage.js +91 -0
- package/dist/engine/renderers/DynamicPage.js.map +1 -0
- package/dist/engine/renderers/route-generator.d.ts +16 -0
- package/dist/engine/renderers/route-generator.d.ts.map +1 -0
- package/dist/engine/renderers/route-generator.js +30 -0
- package/dist/engine/renderers/route-generator.js.map +1 -0
- package/dist/engine/renderers/sitemap-entry.d.ts +7 -0
- package/dist/engine/renderers/sitemap-entry.d.ts.map +1 -0
- package/dist/engine/renderers/sitemap-entry.js +2 -0
- package/dist/engine/renderers/sitemap-entry.js.map +1 -0
- package/dist/engine/runtime/ManifestContext.d.ts +115 -0
- package/dist/engine/runtime/ManifestContext.d.ts.map +1 -0
- package/dist/engine/runtime/ManifestContext.js +56 -0
- package/dist/engine/runtime/ManifestContext.js.map +1 -0
- package/dist/engine/runtime/MqttContext.d.ts +14 -0
- package/dist/engine/runtime/MqttContext.d.ts.map +1 -0
- package/dist/engine/runtime/MqttContext.js +70 -0
- package/dist/engine/runtime/MqttContext.js.map +1 -0
- package/dist/engine/runtime/SitemapContext.d.ts +31 -0
- package/dist/engine/runtime/SitemapContext.d.ts.map +1 -0
- package/dist/engine/runtime/SitemapContext.js +54 -0
- package/dist/engine/runtime/SitemapContext.js.map +1 -0
- package/dist/engine/runtime/data-seeder.d.ts +10 -0
- package/dist/engine/runtime/data-seeder.d.ts.map +1 -0
- package/dist/engine/runtime/data-seeder.js +35 -0
- package/dist/engine/runtime/data-seeder.js.map +1 -0
- package/dist/engine/runtime/useAction.d.ts +4 -0
- package/dist/engine/runtime/useAction.d.ts.map +1 -0
- package/dist/engine/runtime/useAction.js +55 -0
- package/dist/engine/runtime/useAction.js.map +1 -0
- package/dist/engine/runtime/useCrudLocalStorage.d.ts +19 -0
- package/dist/engine/runtime/useCrudLocalStorage.d.ts.map +1 -0
- package/dist/engine/runtime/useCrudLocalStorage.js +73 -0
- package/dist/engine/runtime/useCrudLocalStorage.js.map +1 -0
- package/dist/engine/runtime/useDataQuery.d.ts +39 -0
- package/dist/engine/runtime/useDataQuery.d.ts.map +1 -0
- package/dist/engine/runtime/useDataQuery.js +50 -0
- package/dist/engine/runtime/useDataQuery.js.map +1 -0
- package/dist/engine/runtime/useDynamicSitemap.d.ts +9 -0
- package/dist/engine/runtime/useDynamicSitemap.d.ts.map +1 -0
- package/dist/engine/runtime/useDynamicSitemap.js +38 -0
- package/dist/engine/runtime/useDynamicSitemap.js.map +1 -0
- package/dist/engine/runtime/useJustInTimeSeeder.d.ts +11 -0
- package/dist/engine/runtime/useJustInTimeSeeder.d.ts.map +1 -0
- package/dist/engine/runtime/useJustInTimeSeeder.js +88 -0
- package/dist/engine/runtime/useJustInTimeSeeder.js.map +1 -0
- package/dist/engine/runtime/useLiveBridge.d.ts +109 -0
- package/dist/engine/runtime/useLiveBridge.d.ts.map +1 -0
- package/dist/engine/runtime/useLiveBridge.js +21 -0
- package/dist/engine/runtime/useLiveBridge.js.map +1 -0
- package/dist/engine/runtime/useSignal.d.ts +11 -0
- package/dist/engine/runtime/useSignal.d.ts.map +1 -0
- package/dist/engine/runtime/useSignal.js +26 -0
- package/dist/engine/runtime/useSignal.js.map +1 -0
- package/dist/engine/runtime/useSignalStore.d.ts +31 -0
- package/dist/engine/runtime/useSignalStore.d.ts.map +1 -0
- package/dist/engine/runtime/useSignalStore.js +60 -0
- package/dist/engine/runtime/useSignalStore.js.map +1 -0
- package/dist/engine/runtime/useWorkflowEngine.d.ts +4 -0
- package/dist/engine/runtime/useWorkflowEngine.d.ts.map +1 -0
- package/dist/engine/runtime/useWorkflowEngine.js +85 -0
- package/dist/engine/runtime/useWorkflowEngine.js.map +1 -0
- package/dist/engine/types/manifest-types.d.ts +38 -0
- package/dist/engine/types/manifest-types.d.ts.map +1 -0
- package/dist/engine/types/manifest-types.js +5 -0
- package/dist/engine/types/manifest-types.js.map +1 -0
- package/dist/engine/types/sitemap-entry.d.ts +58 -0
- package/dist/engine/types/sitemap-entry.d.ts.map +1 -0
- package/dist/engine/types/sitemap-entry.js +19 -0
- package/dist/engine/types/sitemap-entry.js.map +1 -0
- package/dist/engine/validation/schema.d.ts +383 -0
- package/dist/engine/validation/schema.d.ts.map +1 -0
- package/dist/engine/validation/schema.js +156 -0
- package/dist/engine/validation/schema.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/package.json +36 -0
- package/src/components/AutoForm.tsx +141 -0
- package/src/components/SmartTable.tsx +316 -0
- package/src/config/app.manifest.ts +7 -0
- package/src/engine/renderers/DynamicBlock.tsx +84 -0
- package/src/engine/renderers/DynamicPage.tsx +196 -0
- package/src/engine/renderers/route-generator.tsx +47 -0
- package/src/engine/renderers/sitemap-entry.ts +6 -0
- package/src/engine/runtime/ManifestContext.tsx +81 -0
- package/src/engine/runtime/MqttContext.tsx +94 -0
- package/src/engine/runtime/SitemapContext.tsx +61 -0
- package/src/engine/runtime/data-seeder.ts +39 -0
- package/src/engine/runtime/useAction.ts +64 -0
- package/src/engine/runtime/useCrudLocalStorage.ts +82 -0
- package/src/engine/runtime/useDataQuery.ts +98 -0
- package/src/engine/runtime/useDynamicSitemap.tsx +43 -0
- package/src/engine/runtime/useJustInTimeSeeder.ts +101 -0
- package/src/engine/runtime/useLiveBridge.ts +24 -0
- package/src/engine/runtime/useSignal.ts +40 -0
- package/src/engine/runtime/useSignalStore.ts +94 -0
- package/src/engine/runtime/useWorkflowEngine.ts +89 -0
- package/src/engine/types/manifest-types.ts +45 -0
- package/src/engine/types/sitemap-entry.ts +66 -0
- package/src/engine/validation/schema.ts +189 -0
- package/src/index.ts +27 -0
- package/tsconfig.json +28 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Excesspool Limited Liability Company
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* @file AutoForm.tsx
|
|
4
|
+
* @description The "Zero-Boilerplate" Form Engine.
|
|
5
|
+
* * ARCHITECTURAL ROLE:
|
|
6
|
+
* This component acts as the bridge between your data schema (JSON) and the UI.
|
|
7
|
+
* Instead of writing manual form code for every resource (Users, Products, Orders),
|
|
8
|
+
* this component dynamically generates the correct inputs based on the field type.
|
|
9
|
+
* * KEY FEATURES:
|
|
10
|
+
* 1. **Smart Mapping:** Automatically converts 'boolean' -> Toggle, 'date' -> DatePicker, etc.
|
|
11
|
+
* 2. **Context Aware:** Auto-detects "Create" vs "Edit" mode based on `initialData`.
|
|
12
|
+
* 3. **Safety Logic:** Automatically hides primary keys during creation and locks them during editing.
|
|
13
|
+
*/
|
|
14
|
+
interface AutoFormProps {
|
|
15
|
+
isOpen: boolean;
|
|
16
|
+
onClose: () => void;
|
|
17
|
+
onSubmit: (data: any) => void;
|
|
18
|
+
title: string;
|
|
19
|
+
fields: any[];
|
|
20
|
+
initialData?: any;
|
|
21
|
+
}
|
|
22
|
+
export declare const AutoForm: React.FC<AutoFormProps>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=AutoForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoForm.d.ts","sourceRoot":"","sources":["../../src/components/AutoForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC;;;;;;;;;;;GAWG;AAEH,UAAU,aAAa;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmH5C,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { Drawer, FormTemplate, Button } from '@ramme-io/ui';
|
|
4
|
+
export const AutoForm = ({ isOpen, onClose, onSubmit, title, fields, initialData }) => {
|
|
5
|
+
// 1. Safe Data Handling
|
|
6
|
+
const safeData = initialData || {};
|
|
7
|
+
const isEditMode = !!safeData.id;
|
|
8
|
+
// 2. Schema-to-UI Mapping Engine
|
|
9
|
+
const formFields = useMemo(() => {
|
|
10
|
+
return fields
|
|
11
|
+
// 🛑 RULE 1: Hide ID field during creation (System handles it)
|
|
12
|
+
.filter((f) => !(f.key === 'id' && !isEditMode))
|
|
13
|
+
.map((f) => {
|
|
14
|
+
const isIdField = f.key === 'id';
|
|
15
|
+
// Base Configuration for all fields
|
|
16
|
+
const baseConfig = {
|
|
17
|
+
name: f.key,
|
|
18
|
+
label: f.label,
|
|
19
|
+
required: f.required,
|
|
20
|
+
placeholder: f.description || `Enter ${f.label.toLowerCase()}`,
|
|
21
|
+
// Pre-fill data if editing, or use default from schema
|
|
22
|
+
value: safeData[f.key] !== undefined ? safeData[f.key] : (f.defaultValue || ''),
|
|
23
|
+
colSpan: 1,
|
|
24
|
+
// 🛑 RULE 2: If it's the ID field, force it to be disabled (View Only)
|
|
25
|
+
disabled: isIdField
|
|
26
|
+
};
|
|
27
|
+
// Intelligent Type Switching
|
|
28
|
+
switch (f.type) {
|
|
29
|
+
case 'number':
|
|
30
|
+
case 'integer':
|
|
31
|
+
case 'currency':
|
|
32
|
+
return {
|
|
33
|
+
...baseConfig,
|
|
34
|
+
type: 'number',
|
|
35
|
+
value: Number(baseConfig.value) || 0
|
|
36
|
+
};
|
|
37
|
+
case 'boolean':
|
|
38
|
+
return {
|
|
39
|
+
...baseConfig,
|
|
40
|
+
type: 'toggle',
|
|
41
|
+
checked: !!baseConfig.value
|
|
42
|
+
};
|
|
43
|
+
case 'date':
|
|
44
|
+
return {
|
|
45
|
+
...baseConfig,
|
|
46
|
+
type: 'datepicker',
|
|
47
|
+
value: baseConfig.value ? new Date(baseConfig.value) : null
|
|
48
|
+
};
|
|
49
|
+
case 'status':
|
|
50
|
+
return {
|
|
51
|
+
...baseConfig,
|
|
52
|
+
type: 'select',
|
|
53
|
+
options: [
|
|
54
|
+
{ value: 'Active', label: 'Active' },
|
|
55
|
+
{ value: 'Pending', label: 'Pending' },
|
|
56
|
+
{ value: 'Inactive', label: 'Inactive' },
|
|
57
|
+
{ value: 'Archived', label: 'Archived' }
|
|
58
|
+
]
|
|
59
|
+
};
|
|
60
|
+
case 'textarea':
|
|
61
|
+
return {
|
|
62
|
+
...baseConfig,
|
|
63
|
+
type: 'textarea',
|
|
64
|
+
colSpan: 2
|
|
65
|
+
};
|
|
66
|
+
case 'email':
|
|
67
|
+
return { ...baseConfig, type: 'email' };
|
|
68
|
+
default:
|
|
69
|
+
return { ...baseConfig, type: 'text' };
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}, [fields, safeData, isEditMode]);
|
|
73
|
+
return (_jsx(Drawer, { isOpen: isOpen, onClose: onClose, title: `${isEditMode ? 'Edit' : 'New'} ${title}`, size: "500px", children: _jsx("div", { className: "p-6", children: _jsx(FormTemplate, { fields: formFields, onSubmit: (formData) => {
|
|
74
|
+
// Merge original ID to ensure we update the correct record
|
|
75
|
+
onSubmit({ ...safeData, ...formData });
|
|
76
|
+
}, children: _jsxs("div", { className: "flex justify-end gap-2 mt-8 pt-4 border-t border-border", children: [_jsx(Button, { variant: "outline", onClick: onClose, type: "button", children: "Cancel" }), _jsx(Button, { type: "submit", variant: "primary", children: isEditMode ? 'Save Changes' : 'Create Record' })] }) }) }) }));
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=AutoForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoForm.js","sourceRoot":"","sources":["../../src/components/AutoForm.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAkB,MAAM,cAAc,CAAC;AAwB5E,MAAM,CAAC,MAAM,QAAQ,GAA4B,CAAC,EAChD,MAAM,EACN,OAAO,EACP,QAAQ,EACR,KAAK,EACL,MAAM,EACN,WAAW,EACZ,EAAE,EAAE;IAEH,wBAAwB;IACxB,MAAM,QAAQ,GAAG,WAAW,IAAI,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IAEjC,iCAAiC;IACjC,MAAM,UAAU,GAAG,OAAO,CAAc,GAAG,EAAE;QAC3C,OAAO,MAAM;YACX,+DAA+D;aAC9D,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;aACpD,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;YAEhB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;YAEjC,oCAAoC;YACpC,MAAM,UAAU,GAAG;gBACjB,IAAI,EAAE,CAAC,CAAC,GAAG;gBACX,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE;gBAC9D,uDAAuD;gBACvD,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC/E,OAAO,EAAE,CAAC;gBACV,uEAAuE;gBACvE,QAAQ,EAAE,SAAS;aACpB,CAAC;YAEF,6BAA6B;YAC7B,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,QAAQ,CAAC;gBACd,KAAK,SAAS,CAAC;gBACf,KAAK,UAAU;oBACb,OAAO;wBACL,GAAG,UAAU;wBACb,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;qBACrC,CAAC;gBAEJ,KAAK,SAAS;oBACZ,OAAO;wBACL,GAAG,UAAU;wBACb,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK;qBAC5B,CAAC;gBAEJ,KAAK,MAAM;oBACT,OAAO;wBACL,GAAG,UAAU;wBACb,IAAI,EAAE,YAAY;wBAClB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;qBAC5D,CAAC;gBAEJ,KAAK,QAAQ;oBACX,OAAO;wBACL,GAAG,UAAU;wBACb,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE;4BACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;4BACpC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;4BACtC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;4BACxC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;yBACzC;qBACF,CAAC;gBAEJ,KAAK,UAAU;oBACb,OAAO;wBACL,GAAG,UAAU;wBACb,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,CAAC;qBACX,CAAC;gBAEJ,KAAK,OAAO;oBACV,OAAO,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAE1C;oBACE,OAAO,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAEnC,OAAO,CACL,KAAC,MAAM,IACL,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE,EAChD,IAAI,EAAC,OAAO,YAEZ,cAAK,SAAS,EAAC,KAAK,YAClB,KAAC,YAAY,IACX,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACrB,2DAA2D;oBAC3D,QAAQ,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;gBACzC,CAAC,YAEC,eAAK,SAAS,EAAC,yDAAyD,aACpE,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,QAAQ,uBAEhD,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,YACpC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,GACvC,IACP,GACK,GACX,GACC,CACV,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FieldDefinition } from '../engine/validation/schema';
|
|
3
|
+
interface SmartTableProps {
|
|
4
|
+
dataId: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
initialFilter?: Record<string, any>;
|
|
7
|
+
getResourceMeta?: (id: string) => {
|
|
8
|
+
name: string;
|
|
9
|
+
fields: FieldDefinition[];
|
|
10
|
+
} | null;
|
|
11
|
+
}
|
|
12
|
+
export declare const SmartTable: React.FC<SmartTableProps>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=SmartTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartTable.d.ts","sourceRoot":"","sources":["../../src/components/SmartTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAiB9D,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEvF,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CACtF;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAgShD,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useCallback } from 'react';
|
|
3
|
+
import { DataTable, Button, Icon, Card, Badge, useToast, SearchInput } from '@ramme-io/ui';
|
|
4
|
+
import { useJustInTimeSeeder } from '../engine/runtime/useJustInTimeSeeder';
|
|
5
|
+
import { useCrudLocalStorage } from '../engine/runtime/useCrudLocalStorage';
|
|
6
|
+
import { useManifest } from '../engine/runtime/ManifestContext';
|
|
7
|
+
import { AutoForm } from './AutoForm';
|
|
8
|
+
export const SmartTable = ({ dataId, title, getResourceMeta }) => {
|
|
9
|
+
const { addToast } = useToast();
|
|
10
|
+
const manifest = useManifest();
|
|
11
|
+
// --- 1. METADATA RESOLUTION ---
|
|
12
|
+
const meta = useMemo(() => {
|
|
13
|
+
const dynamicResource = manifest.resources?.find((r) => r.id === dataId);
|
|
14
|
+
if (dynamicResource)
|
|
15
|
+
return dynamicResource;
|
|
16
|
+
const staticMeta = getResourceMeta?.(dataId);
|
|
17
|
+
if (staticMeta) {
|
|
18
|
+
return {
|
|
19
|
+
...staticMeta,
|
|
20
|
+
id: dataId,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}, [manifest, dataId]);
|
|
25
|
+
// --- 2. DATA HYDRATION ---
|
|
26
|
+
const seedData = useJustInTimeSeeder(dataId, meta);
|
|
27
|
+
const { data: rowData, createItem, updateItem, deleteItem } = useCrudLocalStorage(`ramme_db_${dataId}`, seedData);
|
|
28
|
+
// --- 3. UI STATE ---
|
|
29
|
+
const [isEditOpen, setIsEditOpen] = useState(false);
|
|
30
|
+
const [currentRecord, setCurrentRecord] = useState(null);
|
|
31
|
+
const [gridApi, setGridApi] = useState(null);
|
|
32
|
+
const [selectedRows, setSelectedRows] = useState([]);
|
|
33
|
+
const [quickFilterText, setQuickFilterText] = useState('');
|
|
34
|
+
// --- 4. COLUMN DEFINITIONS (Desktop) ---
|
|
35
|
+
const columns = useMemo(() => {
|
|
36
|
+
if (!meta?.fields)
|
|
37
|
+
return [];
|
|
38
|
+
const generatedCols = meta.fields.map((f) => {
|
|
39
|
+
const col = {
|
|
40
|
+
field: f.key,
|
|
41
|
+
headerName: f.label,
|
|
42
|
+
filter: true,
|
|
43
|
+
sortable: true,
|
|
44
|
+
resizable: true,
|
|
45
|
+
flex: 1,
|
|
46
|
+
};
|
|
47
|
+
if (f.type === 'currency') {
|
|
48
|
+
col.valueFormatter = (p) => p.value ? `$${Number(p.value).toLocaleString()}` : '';
|
|
49
|
+
}
|
|
50
|
+
if (f.type === 'date') {
|
|
51
|
+
col.valueFormatter = (p) => p.value ? new Date(p.value).toLocaleDateString() : '';
|
|
52
|
+
}
|
|
53
|
+
if (f.type === 'status') {
|
|
54
|
+
col.cellRenderer = (p) => {
|
|
55
|
+
const statusColors = {
|
|
56
|
+
active: 'bg-green-100 text-green-800',
|
|
57
|
+
paid: 'bg-green-100 text-green-800',
|
|
58
|
+
pending: 'bg-yellow-100 text-yellow-800',
|
|
59
|
+
inactive: 'bg-slate-100 text-slate-600',
|
|
60
|
+
overdue: 'bg-red-100 text-red-800'
|
|
61
|
+
};
|
|
62
|
+
const colorClass = statusColors[String(p.value).toLowerCase()] || 'bg-slate-100 text-slate-800';
|
|
63
|
+
return (_jsx("span", { className: `px-2 py-0.5 rounded-full text-xs font-medium ${colorClass}`, children: p.value }));
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return col;
|
|
67
|
+
});
|
|
68
|
+
if (generatedCols.length > 0) {
|
|
69
|
+
generatedCols[0].headerCheckboxSelection = true;
|
|
70
|
+
generatedCols[0].checkboxSelection = true;
|
|
71
|
+
generatedCols[0].minWidth = 180;
|
|
72
|
+
}
|
|
73
|
+
generatedCols.push({
|
|
74
|
+
headerName: "Actions",
|
|
75
|
+
field: "id",
|
|
76
|
+
width: 100,
|
|
77
|
+
pinned: 'right',
|
|
78
|
+
cellRenderer: (params) => (_jsx("div", { className: "flex items-center gap-1", children: _jsx(Button, { variant: "ghost", size: "icon", className: "h-8 w-8", onClick: (e) => { e.stopPropagation(); setCurrentRecord(params.data); setIsEditOpen(true); }, children: _jsx(Icon, { name: "edit-2", size: 14, className: "text-slate-500" }) }) }))
|
|
79
|
+
});
|
|
80
|
+
return generatedCols;
|
|
81
|
+
}, [meta]);
|
|
82
|
+
// --- 5. FIELD HELPERS (Mobile) ---
|
|
83
|
+
// ✅ FIXED: Explicit FieldDefinition type for 'f'
|
|
84
|
+
const titleField = useMemo(() => meta?.fields.find((f) => f.type === 'text' && f.key !== 'id') || meta?.fields[0], [meta]);
|
|
85
|
+
const statusField = useMemo(() => meta?.fields.find((f) => f.type === 'status'), [meta]);
|
|
86
|
+
// --- 6. HANDLERS ---
|
|
87
|
+
const onGridReady = useCallback((params) => {
|
|
88
|
+
setGridApi(params.api);
|
|
89
|
+
}, []);
|
|
90
|
+
const onSelectionChanged = useCallback(() => {
|
|
91
|
+
if (gridApi) {
|
|
92
|
+
setSelectedRows(gridApi.getSelectedRows());
|
|
93
|
+
}
|
|
94
|
+
}, [gridApi]);
|
|
95
|
+
const handleBulkDelete = () => {
|
|
96
|
+
if (confirm(`Delete ${selectedRows.length} items?`)) {
|
|
97
|
+
selectedRows.forEach(row => deleteItem(row.id));
|
|
98
|
+
setSelectedRows([]);
|
|
99
|
+
addToast(`${selectedRows.length} items deleted`, 'success');
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const handleSave = (record) => {
|
|
103
|
+
if (record.id && currentRecord?.id) {
|
|
104
|
+
updateItem(record);
|
|
105
|
+
addToast('Item updated', 'success');
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const { id, ...newItem } = record;
|
|
109
|
+
createItem(newItem);
|
|
110
|
+
addToast('Item created', 'success');
|
|
111
|
+
}
|
|
112
|
+
setIsEditOpen(false);
|
|
113
|
+
};
|
|
114
|
+
return (_jsxs(Card, { className: "flex flex-col h-[600px] border border-border shadow-sm overflow-hidden bg-card", children: [_jsxs("div", { className: "p-4 border-b border-border flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 bg-muted/5", children: [selectedRows.length > 0 ? (_jsxs("div", { className: "flex items-center gap-3 animate-in fade-in slide-in-from-left-2 duration-200", children: [_jsxs("span", { className: "bg-primary text-primary-foreground text-xs font-bold px-2 py-1 rounded-md", children: [selectedRows.length, " Selected"] }), _jsx(Button, { size: "sm", variant: "danger", onClick: handleBulkDelete, iconLeft: "trash-2", children: "Delete" })] })) : (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "p-2 bg-primary/10 rounded-md text-primary", children: _jsx(Icon, { name: "table", size: 18 }) }), _jsxs("div", { children: [_jsx("h3", { className: "text-base font-bold text-foreground leading-tight", children: title || meta?.name || dataId }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [rowData.length, " records found"] })] })] })), _jsxs("div", { className: "flex items-center gap-2 w-full sm:w-auto", children: [_jsx("div", { className: "w-full sm:w-64", children: _jsx(SearchInput, { placeholder: "Quick search...", value: quickFilterText,
|
|
115
|
+
// ✅ FIXED: Explicit ChangeEvent type
|
|
116
|
+
onChange: (e) => {
|
|
117
|
+
setQuickFilterText(e.target.value);
|
|
118
|
+
gridApi?.updateGridOptions({ quickFilterText: e.target.value });
|
|
119
|
+
} }) }), _jsx("div", { className: "h-6 w-px bg-border mx-1 hidden sm:block" }), _jsx(Button, { size: "sm", variant: "primary", iconLeft: "plus", onClick: () => { setCurrentRecord({}); setIsEditOpen(true); }, children: "Add" })] })] }), _jsxs("div", { className: "flex-1 w-full bg-card relative overflow-hidden", children: [_jsx("div", { className: "hidden md:block h-full", children: _jsx(DataTable, { rowData: rowData, columnDefs: columns, onGridReady: onGridReady, onSelectionChanged: onSelectionChanged, rowSelection: "multiple", pagination: true, paginationPageSize: 10, headerHeight: 48, rowHeight: 48, enableCellTextSelection: true }) }), _jsxs("div", { className: "block md:hidden h-full overflow-y-auto p-4 space-y-3 bg-muted/5", children: [rowData.map((row) => (_jsxs("div", { className: "bg-background border border-border rounded-lg p-4 shadow-sm relative group", children: [_jsxs("div", { className: "flex justify-between items-start mb-2", children: [_jsxs("div", { children: [_jsx("h4", { className: "font-semibold text-foreground", children: titleField ? row[titleField.key] : row.id }), _jsx("p", { className: "text-xs text-muted-foreground font-mono mt-0.5 opacity-70", children: row.id })] }), statusField && (_jsx(Badge, { variant: ['active', 'paid'].includes(String(row[statusField.key]).toLowerCase()) ? 'success' :
|
|
120
|
+
['pending'].includes(String(row[statusField.key]).toLowerCase()) ? 'warning' : 'secondary', children: row[statusField.key] }))] }), _jsx("div", { className: "space-y-1 text-sm text-muted-foreground mb-4", children: meta?.fields
|
|
121
|
+
// ✅ FIXED: Explicit FieldDefinition type for 'f'
|
|
122
|
+
.filter((f) => f.key !== titleField?.key && f.key !== statusField?.key && f.key !== 'id')
|
|
123
|
+
.slice(0, 3)
|
|
124
|
+
.map((f) => (_jsxs("div", { className: "flex justify-between border-b border-dashed border-border/50 pb-1 last:border-0", children: [_jsxs("span", { className: "opacity-70", children: [f.label, ":"] }), _jsx("span", { className: "font-medium text-foreground", children: f.type === 'currency' ? `$${Number(row[f.key]).toLocaleString()}` :
|
|
125
|
+
f.type === 'date' ? new Date(row[f.key]).toLocaleDateString() : row[f.key] })] }, f.key))) }), _jsxs("div", { className: "flex gap-2 pt-2 border-t border-border/50", children: [_jsxs(Button, { size: "sm", variant: "outline", className: "flex-1 h-8 text-xs", onClick: () => { setCurrentRecord(row); setIsEditOpen(true); }, children: [_jsx(Icon, { name: "edit-2", size: 12, className: "mr-2" }), " Edit"] }), _jsx(Button, { size: "sm", variant: "ghost", className: "text-destructive hover:bg-destructive/10 px-3 h-8", onClick: () => { if (confirm('Delete?'))
|
|
126
|
+
deleteItem(row.id); }, children: _jsx(Icon, { name: "trash-2", size: 14 }) })] })] }, row.id))), rowData.length === 0 && (_jsx("div", { className: "text-center p-8 text-muted-foreground", children: "No records found." }))] })] }), _jsx(AutoForm, { isOpen: isEditOpen, onClose: () => setIsEditOpen(false), onSubmit: handleSave, title: meta?.name || 'Item', fields: meta?.fields || [], initialData: currentRecord })] }));
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=SmartTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartTable.js","sourceRoot":"","sources":["../../src/components/SmartTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.manifest.d.ts","sourceRoot":"","sources":["../../src/config/app.manifest.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW;;;;;CAKrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.manifest.js","sourceRoot":"","sources":["../../src/config/app.manifest.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC;IAClC,UAAU,EAAE,EAAE;CACf,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DynamicBlockProps {
|
|
3
|
+
block: any;
|
|
4
|
+
getComponent: (name: string) => React.FC<any>;
|
|
5
|
+
getMockData: (id: string) => any[];
|
|
6
|
+
}
|
|
7
|
+
export declare const DynamicBlock: React.FC<DynamicBlockProps>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=DynamicBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicBlock.d.ts","sourceRoot":"","sources":["../../../src/engine/renderers/DynamicBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,iBAAiB;IACzB,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC9C,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;CACpC;AA2BD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgDpD,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// @ts-ignore
|
|
3
|
+
import { useGeneratedSignals } from '../runtime/useSignalStore';
|
|
4
|
+
/**
|
|
5
|
+
* @file DynamicBlock.tsx
|
|
6
|
+
* @description The "Runtime Hydrator" for the application.
|
|
7
|
+
*
|
|
8
|
+
* ARCHITECTURAL ROLE:
|
|
9
|
+
* This component acts as the bridge between the Abstract Syntax Tree (JSON Manifest)
|
|
10
|
+
* and the concrete React UI.
|
|
11
|
+
*
|
|
12
|
+
* KEY RESPONSIBILITIES:
|
|
13
|
+
* 1. **Component Lookup:** Resolves string types ('StatCard') to actual React components.
|
|
14
|
+
* 2. **Signal Injection:** Subscribes to the real-time Signal Engine and feeds live values to props.
|
|
15
|
+
* 3. **Data Hydration:** Fetches static or async data (users, logs) based on `dataId`.
|
|
16
|
+
* 4. **Status Normalization:** Translates system-level signal states into UI-friendly status colors.
|
|
17
|
+
*/
|
|
18
|
+
const mapSignalStatus = (status) => {
|
|
19
|
+
switch (status) {
|
|
20
|
+
case 'fresh': return 'online';
|
|
21
|
+
case 'stale': return 'warning';
|
|
22
|
+
case 'disconnected': return 'offline';
|
|
23
|
+
case 'error': return 'error';
|
|
24
|
+
default: return 'offline';
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
export const DynamicBlock = ({ block, getComponent, getMockData }) => {
|
|
28
|
+
const Component = getComponent(block.type);
|
|
29
|
+
const signals = useGeneratedSignals();
|
|
30
|
+
const { signalId, dataId, ...staticProps } = block.props;
|
|
31
|
+
const dynamicProps = {
|
|
32
|
+
...staticProps,
|
|
33
|
+
dataId,
|
|
34
|
+
signalId
|
|
35
|
+
};
|
|
36
|
+
// --- DATA INJECTION ---
|
|
37
|
+
if (dataId) {
|
|
38
|
+
const resolvedData = getMockData(dataId);
|
|
39
|
+
dynamicProps.data = resolvedData || [];
|
|
40
|
+
dynamicProps.rowData = resolvedData || [];
|
|
41
|
+
}
|
|
42
|
+
// --- SIGNAL INJECTION ---
|
|
43
|
+
if (signalId && signals && signalId in signals) {
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
const signalState = signals[signalId];
|
|
46
|
+
if (signalState) {
|
|
47
|
+
// ✅ FIX: Check for null and handle objects vs raw values
|
|
48
|
+
const isSignalObject = typeof signalState === 'object' && signalState !== null;
|
|
49
|
+
// Extract Value
|
|
50
|
+
const rawValue = (isSignalObject && 'value' in signalState)
|
|
51
|
+
? signalState.value
|
|
52
|
+
: signalState;
|
|
53
|
+
// Extract Status
|
|
54
|
+
const rawStatus = (isSignalObject && 'status' in signalState)
|
|
55
|
+
? signalState.status
|
|
56
|
+
: 'fresh'; // Default for raw values
|
|
57
|
+
dynamicProps.value = typeof rawValue === 'number' ? rawValue : String(rawValue);
|
|
58
|
+
// ✅ FIX: Explicitly cast to String to satisfy TypeScript
|
|
59
|
+
dynamicProps.status = mapSignalStatus(String(rawStatus));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
dynamicProps.status = mapSignalStatus('disconnected');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return _jsx(Component, { ...dynamicProps }, block.id);
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=DynamicBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicBlock.js","sourceRoot":"","sources":["../../../src/engine/renderers/DynamicBlock.tsx"],"names":[],"mappings":";AACA,aAAa;AACb,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAQhE;;;;;;;;;;;;;GAaG;AAEH,MAAM,eAAe,GAAG,CAAC,MAAc,EAAU,EAAE;IACjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC9B,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC/B,KAAK,cAAc,CAAC,CAAC,OAAO,SAAS,CAAC;QACtC,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC7B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE;IAChG,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IAEtC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;IAEzD,MAAM,YAAY,GAAwB;QACxC,GAAG,WAAW;QACd,MAAM;QACN,QAAQ;KACT,CAAC;IAEF,yBAAyB;IACzB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACzC,YAAY,CAAC,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QACvC,YAAY,CAAC,OAAO,GAAG,YAAY,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,2BAA2B;IAC3B,IAAI,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/C,aAAa;QACb,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,WAAW,EAAE,CAAC;YAChB,yDAAyD;YACzD,MAAM,cAAc,GAAG,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,CAAC;YAE/E,gBAAgB;YAChB,MAAM,QAAQ,GAAG,CAAC,cAAc,IAAI,OAAO,IAAI,WAAW,CAAC;gBACzD,CAAC,CAAC,WAAW,CAAC,KAAK;gBACnB,CAAC,CAAC,WAAW,CAAC;YAEhB,iBAAiB;YACjB,MAAM,SAAS,GAAG,CAAC,cAAc,IAAI,QAAQ,IAAI,WAAW,CAAC;gBAC3D,CAAC,CAAC,WAAW,CAAC,MAAM;gBACpB,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB;YAEtC,YAAY,CAAC,KAAK,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEhF,yDAAyD;YACzD,YAAY,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,KAAC,SAAS,OAAoB,YAAY,IAA1B,KAAK,CAAC,EAAE,CAAsB,CAAC;AACxD,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file packages/kernel/src/engine/renderers/DynamicPage.tsx
|
|
3
|
+
* @description The main page renderer for the dashboard.
|
|
4
|
+
* * ARCHITECTURAL ROLE:
|
|
5
|
+
* This component is the "Engine Room" of the dashboard.
|
|
6
|
+
* It orchestrates the layout and delegates rendering to DynamicBlock.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DynamicPage: ({ pageId }: {
|
|
9
|
+
pageId: string;
|
|
10
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=DynamicPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicPage.d.ts","sourceRoot":"","sources":["../../../src/engine/renderers/DynamicPage.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoIH,eAAO,MAAM,WAAW,GAAI,YAAY;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,4CAyDzD,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @file packages/kernel/src/engine/renderers/DynamicPage.tsx
|
|
4
|
+
* @description The main page renderer for the dashboard.
|
|
5
|
+
* * ARCHITECTURAL ROLE:
|
|
6
|
+
* This component is the "Engine Room" of the dashboard.
|
|
7
|
+
* It orchestrates the layout and delegates rendering to DynamicBlock.
|
|
8
|
+
*/
|
|
9
|
+
import React, { useMemo } from 'react';
|
|
10
|
+
import { Badge, StatCard, DeviceCard, BarChart, LineChart, Button } from '@ramme-io/ui';
|
|
11
|
+
// ✅ INTERNAL: Import your SmartTable (Logic Component)
|
|
12
|
+
import { SmartTable } from '../../components/SmartTable';
|
|
13
|
+
// ❌ DELETED: No more static data dependency
|
|
14
|
+
// import { DATA_REGISTRY } from '../../data/mockData';
|
|
15
|
+
// ✅ NEW: Import the unified Data Hook
|
|
16
|
+
import { useJustInTimeSeeder } from '../runtime/useJustInTimeSeeder';
|
|
17
|
+
import { useManifest, useBridgeStatus } from '../runtime/ManifestContext';
|
|
18
|
+
import { Wifi, WifiOff, AlertTriangle, Loader2, Database, Wand2, LayoutTemplate } from 'lucide-react';
|
|
19
|
+
// ------------------------------------------------------------------
|
|
20
|
+
// 1. THE SAFETY REGISTRY
|
|
21
|
+
// ------------------------------------------------------------------
|
|
22
|
+
const COMPONENT_REGISTRY = {
|
|
23
|
+
'SmartTable': SmartTable,
|
|
24
|
+
'DataTable': SmartTable,
|
|
25
|
+
'StatCard': StatCard,
|
|
26
|
+
'DeviceCard': DeviceCard,
|
|
27
|
+
'BarChart': BarChart,
|
|
28
|
+
'LineChart': LineChart,
|
|
29
|
+
'Button': Button,
|
|
30
|
+
'Unknown': ({ type }) => (_jsxs("div", { className: "h-24 w-full border-2 border-dashed border-amber-300 bg-amber-50 rounded-lg flex flex-col items-center justify-center text-amber-700 text-sm", children: [_jsx(LayoutTemplate, { className: "mb-2 opacity-50", size: 20 }), _jsxs("span", { children: ["Unknown Component: ", _jsx("strong", { children: type })] })] }))
|
|
31
|
+
};
|
|
32
|
+
const getComponent = (name) => {
|
|
33
|
+
return COMPONENT_REGISTRY[name] || COMPONENT_REGISTRY['Unknown'];
|
|
34
|
+
};
|
|
35
|
+
class BlockErrorBoundary extends React.Component {
|
|
36
|
+
constructor(props) {
|
|
37
|
+
super(props);
|
|
38
|
+
this.state = { hasError: false, error: '' };
|
|
39
|
+
}
|
|
40
|
+
static getDerivedStateFromError(error) {
|
|
41
|
+
return { hasError: true, error: error.message };
|
|
42
|
+
}
|
|
43
|
+
render() {
|
|
44
|
+
if (this.state.hasError) {
|
|
45
|
+
return (_jsxs("div", { className: "h-full min-h-[100px] p-4 border-2 border-dashed border-red-300 bg-red-50/50 rounded-lg flex flex-col items-center justify-center text-red-600 text-xs", children: [_jsx(AlertTriangle, { size: 16, className: "mb-2 opacity-80" }), _jsx("span", { className: "font-bold", children: "Render Error" }), _jsx("span", { className: "opacity-75 text-center truncate max-w-[200px]", children: this.state.error })] }));
|
|
46
|
+
}
|
|
47
|
+
return this.props.children;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ------------------------------------------------------------------
|
|
51
|
+
// 3. DYNAMIC BLOCK (New Sub-Component)
|
|
52
|
+
// ------------------------------------------------------------------
|
|
53
|
+
// We extracted this so we can use hooks (useJustInTimeSeeder) inside.
|
|
54
|
+
const DynamicBlock = ({ block, manifest }) => {
|
|
55
|
+
const Component = getComponent(block.type);
|
|
56
|
+
const safeDataId = block.props.dataId?.toLowerCase();
|
|
57
|
+
// 1. Find the Schema (Resource Definition)
|
|
58
|
+
const resourceDef = useMemo(() => manifest.resources?.find((r) => r.id.toLowerCase() === safeDataId), [manifest, safeDataId]);
|
|
59
|
+
// 2. Fetch Data (Using the Hook!)
|
|
60
|
+
// This automatically checks LocalStorage first, then falls back to JIT generation.
|
|
61
|
+
const resolvedData = useJustInTimeSeeder(safeDataId, resourceDef);
|
|
62
|
+
// 3. Detect if Data is JIT Generated (for the UI badge)
|
|
63
|
+
// Our JIT seeder prefixes IDs with 'jit_', so we can check that.
|
|
64
|
+
const isGenerated = resolvedData?.[0]?.id?.toString().startsWith('jit_');
|
|
65
|
+
// 4. Auto-Generate Columns (for SmartTable)
|
|
66
|
+
const autoColumns = useMemo(() => {
|
|
67
|
+
if (safeDataId && block.type === 'SmartTable' && !block.props.columnDefs && resourceDef) {
|
|
68
|
+
return resourceDef.fields.map((f) => ({
|
|
69
|
+
field: f.key, headerName: f.label, filter: true, flex: 1,
|
|
70
|
+
cellRenderer: f.type === 'status' ? (p) => _jsx(Badge, { variant: "secondary", children: p.value }) : undefined
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
}, [safeDataId, block.type, resourceDef, block.props.columnDefs]);
|
|
75
|
+
return (_jsx("div", { style: { gridColumn: `span ${block.layout?.colSpan || 1}`, gridRow: `span ${block.layout?.rowSpan || 1}` }, className: "relative group", children: _jsxs(BlockErrorBoundary, { children: [_jsx("div", { className: "absolute -top-3 right-0 opacity-0 group-hover:opacity-100 transition-opacity z-20 pointer-events-none translate-y-2 group-hover:translate-y-0 duration-200", children: _jsxs("div", { className: `text-[10px] px-2 py-1 rounded-md shadow-lg border border-white/10 flex items-center gap-1.5 font-mono ${isGenerated ? 'bg-amber-600 text-white' : 'bg-slate-800 text-slate-200'}`, children: [_jsx("span", { className: "font-bold", children: block.type }), safeDataId && _jsxs(_Fragment, { children: [" ", _jsx("span", { className: "opacity-40", children: "|" }), " ", isGenerated ? _jsx(Wand2, { size: 10, className: "animate-pulse" }) : _jsx(Database, { size: 10 }), " ", safeDataId] })] }) }), _jsx(Component, { ...block.props, rowData: block.type === 'SmartTable' ? undefined : resolvedData, columnDefs: block.props.columnDefs || autoColumns, className: "w-full h-full" })] }) }));
|
|
76
|
+
};
|
|
77
|
+
// ------------------------------------------------------------------
|
|
78
|
+
// 4. THE MAIN PAGE COMPONENT
|
|
79
|
+
// ------------------------------------------------------------------
|
|
80
|
+
export const DynamicPage = ({ pageId }) => {
|
|
81
|
+
const manifest = useManifest();
|
|
82
|
+
const status = useBridgeStatus();
|
|
83
|
+
const isLive = status === 'live';
|
|
84
|
+
const page = useMemo(() => manifest.pages?.find((p) => p.id === pageId), [manifest, pageId]);
|
|
85
|
+
if (!page) {
|
|
86
|
+
return (_jsxs("div", { className: "p-8 space-y-4 flex flex-col items-center justify-center h-[50vh]", children: [_jsx(Loader2, { className: "animate-spin text-primary mb-4", size: 32 }), _jsx("p", { className: "text-muted-foreground", children: "Loading Blueprint..." })] }));
|
|
87
|
+
}
|
|
88
|
+
const statusBadge = (_jsxs("div", { className: `flex items-center gap-2 px-3 py-1.5 rounded-full text-xs font-bold border transition-colors duration-300 ${isLive ? 'bg-green-100 text-green-700 border-green-200' : 'bg-slate-100 text-slate-500 border-slate-200'}`, children: [isLive ? _jsx(Wifi, { size: 14, className: "text-green-600 animate-pulse" }) : _jsx(WifiOff, { size: 14 }), isLive ? 'LIVE BRIDGE' : 'STATIC MODE'] }));
|
|
89
|
+
return (_jsxs("div", { className: "p-6 md:p-8 max-w-7xl mx-auto w-full space-y-8", children: [_jsxs("header", { className: "flex flex-col md:flex-row md:items-center justify-between gap-4 border-b border-border/40 pb-6", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("h1", { className: "text-3xl font-bold tracking-tight text-foreground", children: page.title }), page.description && _jsx("p", { className: "text-muted-foreground", children: page.description })] }), _jsx("div", { className: "flex items-center gap-2", children: statusBadge })] }), _jsx("div", { className: "grid gap-8 pb-20", children: page.sections?.map((section) => (_jsxs("section", { className: "space-y-6", children: [section.title && (_jsx("div", { className: "flex items-center gap-2 pb-2 border-b border-border/60", children: _jsx("h3", { className: "text-sm font-bold uppercase tracking-wider text-muted-foreground/80", children: section.title }) })), _jsx("div", { className: "grid gap-6", style: { gridTemplateColumns: `repeat(${section.layout?.columns || 1}, minmax(0, 1fr))` }, children: section.blocks.map((block) => (_jsx(DynamicBlock, { block: block, manifest: manifest }, block.id))) })] }, section.id))) })] }));
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=DynamicPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicPage.js","sourceRoot":"","sources":["../../../src/engine/renderers/DynamicPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file route-generator.tsx
|
|
3
|
+
* @description This file is the core engine of the Sitemap-Driven Architecture.
|
|
4
|
+
* Its purpose is to dynamically generate all application routes by reading directly
|
|
5
|
+
* from a designer-friendly `sitemap` array. This abstracts all routing logic
|
|
6
|
+
* away from our designers, empowering them to manage the app's structure from
|
|
7
|
+
* a single, simple configuration file.
|
|
8
|
+
*/
|
|
9
|
+
import type { SitemapEntry } from './sitemap-entry';
|
|
10
|
+
/**
|
|
11
|
+
* Recursively generates React Router `<Route>` components from a sitemap array.
|
|
12
|
+
* @param {SitemapEntry[]} routes - The array of sitemap entries to process.
|
|
13
|
+
* @returns {JSX.Element[]} An array of React Router `<Route>` components.
|
|
14
|
+
*/
|
|
15
|
+
export declare const generateRoutes: (routes: SitemapEntry[]) => import("react/jsx-runtime").JSX.Element[];
|
|
16
|
+
//# sourceMappingURL=route-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-generator.d.ts","sourceRoot":"","sources":["../../../src/engine/renderers/route-generator.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;GAIG;AAEH,eAAO,MAAM,cAAc,GAAI,QAAQ,YAAY,EAAE,8CA2BpD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @file route-generator.tsx
|
|
4
|
+
* @description This file is the core engine of the Sitemap-Driven Architecture.
|
|
5
|
+
* Its purpose is to dynamically generate all application routes by reading directly
|
|
6
|
+
* from a designer-friendly `sitemap` array. This abstracts all routing logic
|
|
7
|
+
* away from our designers, empowering them to manage the app's structure from
|
|
8
|
+
* a single, simple configuration file.
|
|
9
|
+
*/
|
|
10
|
+
import { Route, Navigate } from 'react-router-dom';
|
|
11
|
+
/**
|
|
12
|
+
* Recursively generates React Router `<Route>` components from a sitemap array.
|
|
13
|
+
* @param {SitemapEntry[]} routes - The array of sitemap entries to process.
|
|
14
|
+
* @returns {JSX.Element[]} An array of React Router `<Route>` components.
|
|
15
|
+
*/
|
|
16
|
+
export const generateRoutes = (routes) => {
|
|
17
|
+
return routes.map((route) => {
|
|
18
|
+
// Check if the current route is a "parent" route with children
|
|
19
|
+
if (route.children && route.children.length > 0) {
|
|
20
|
+
// Get the path of the first child to use for redirection
|
|
21
|
+
const firstChildPath = route.children[0].path;
|
|
22
|
+
return (
|
|
23
|
+
// Create the parent <Route> (e.g., /data)
|
|
24
|
+
_jsxs(Route, { path: route.path, element: _jsx(route.component, {}), children: [_jsx(Route, { index: true, element: _jsx(Navigate, { to: firstChildPath, replace: true }) }), generateRoutes(route.children)] }, route.id));
|
|
25
|
+
}
|
|
26
|
+
// Standard case: This is a simple route with no children.
|
|
27
|
+
return _jsx(Route, { path: route.path, element: _jsx(route.component, {}) }, route.id);
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=route-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-generator.js","sourceRoot":"","sources":["../../../src/engine/renderers/route-generator.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAInD;;;;GAIG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAsB,EAAE,EAAE;IACvD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,+DAA+D;QAC/D,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,yDAAyD;YACzD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAE9C,OAAO;YACL,0CAA0C;YAC1C,MAAC,KAAK,IAAgB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAC,KAAK,CAAC,SAAS,KAAG,aAOlE,KAAC,KAAK,IAAC,KAAK,QAAC,OAAO,EAAE,KAAC,QAAQ,IAAC,EAAE,EAAE,cAAc,EAAE,OAAO,SAAG,GAAI,EAGjE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,KAVrB,KAAK,CAAC,EAAE,CAWZ,CACT,CAAC;QACJ,CAAC;QAED,0DAA0D;QAC1D,OAAO,KAAC,KAAK,IAAgB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAC,KAAK,CAAC,SAAS,KAAG,IAAxD,KAAK,CAAC,EAAE,CAAoD,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|