added packages to support markdown

added dummy pages for about and contact.
updated tailwind.config.js to include config/*.json to scan for classes.
refactored system basics. Removed component-props, using generic LayoutComponentDefinition and LayoutContext. cleanup component-map. Updated renderer to be more failsafe.

new abstracted components:
 vt-mega-menu,
vt-sidemenu,
vt-banner with 3 variants,
vt-header,
vt-homebutton,
vt-cartbutton,
vt-accountbutton,
vt-linkbutton,
This commit is contained in:
2025-11-25 15:17:18 +01:00
parent 51d6ee2051
commit 39fe0c81e5
30 changed files with 2849 additions and 142 deletions
+18 -6
View File
@@ -1,5 +1,5 @@
import React from "react"
import { LayoutComponentNode, LayoutContext, componentMap } from "./component-map"
import { ComponentName, LayoutComponentDefinition, LayoutComponentNode, LayoutContext, componentMap } from "./component-map"
export interface DynamicLayoutRendererProps {
nodes: LayoutComponentNode[]
@@ -7,10 +7,22 @@ export interface DynamicLayoutRendererProps {
}
export function DynamicLayoutRenderer({ nodes, context } : DynamicLayoutRendererProps) {
return nodes.map((entry, index) => {
const [key, value] = Object.entries(entry)[0] as [string, any]
const component = componentMap[key]
if (!component) return null
return <React.Fragment key={index}>{component.render(value, context)}</React.Fragment>
const nodeArray = Array.isArray(nodes) ? nodes : [nodes];
return nodeArray.map((entry, index) => {
const [key, value] = Object.entries(entry)[0] as [ComponentName, LayoutComponentDefinition]
if (!value) {
console.warn(`[UI-Builder] Component definition is undefined: ${key}`);
return null;
}
const component = componentMap[key];
if (!component) {
console.warn(`[UI-Builder] Unknown component: ${key}`);
return null;
}
return <React.Fragment key={`${key}-${index}`}>{component.render(value, context)}</React.Fragment>
})
}