@tekton-ui/core 0.2.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/README.md +758 -0
- package/dist/blueprint.d.ts +44 -0
- package/dist/blueprint.d.ts.map +1 -0
- package/dist/blueprint.js +163 -0
- package/dist/blueprint.js.map +1 -0
- package/dist/component-schemas.d.ts +78 -0
- package/dist/component-schemas.d.ts.map +1 -0
- package/dist/component-schemas.js +1037 -0
- package/dist/component-schemas.js.map +1 -0
- package/dist/css-generator.d.ts +42 -0
- package/dist/css-generator.d.ts.map +1 -0
- package/dist/css-generator.js +339 -0
- package/dist/css-generator.js.map +1 -0
- package/dist/icon-library.d.ts +109 -0
- package/dist/icon-library.d.ts.map +1 -0
- package/dist/icon-library.js +204 -0
- package/dist/icon-library.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/layout-css-generator.d.ts +158 -0
- package/dist/layout-css-generator.d.ts.map +1 -0
- package/dist/layout-css-generator.js +901 -0
- package/dist/layout-css-generator.js.map +1 -0
- package/dist/layout-resolver.d.ts +92 -0
- package/dist/layout-resolver.d.ts.map +1 -0
- package/dist/layout-resolver.js +275 -0
- package/dist/layout-resolver.js.map +1 -0
- package/dist/layout-tokens/index.d.ts +16 -0
- package/dist/layout-tokens/index.d.ts.map +1 -0
- package/dist/layout-tokens/index.js +16 -0
- package/dist/layout-tokens/index.js.map +1 -0
- package/dist/layout-tokens/keyboard.d.ts +254 -0
- package/dist/layout-tokens/keyboard.d.ts.map +1 -0
- package/dist/layout-tokens/keyboard.js +407 -0
- package/dist/layout-tokens/keyboard.js.map +1 -0
- package/dist/layout-tokens/mobile-shells.d.ts +78 -0
- package/dist/layout-tokens/mobile-shells.d.ts.map +1 -0
- package/dist/layout-tokens/mobile-shells.js +635 -0
- package/dist/layout-tokens/mobile-shells.js.map +1 -0
- package/dist/layout-tokens/pages.d.ts +100 -0
- package/dist/layout-tokens/pages.d.ts.map +1 -0
- package/dist/layout-tokens/pages.js +576 -0
- package/dist/layout-tokens/pages.js.map +1 -0
- package/dist/layout-tokens/responsive.d.ts +109 -0
- package/dist/layout-tokens/responsive.d.ts.map +1 -0
- package/dist/layout-tokens/responsive.js +167 -0
- package/dist/layout-tokens/responsive.js.map +1 -0
- package/dist/layout-tokens/safe-area.d.ts +156 -0
- package/dist/layout-tokens/safe-area.d.ts.map +1 -0
- package/dist/layout-tokens/safe-area.js +316 -0
- package/dist/layout-tokens/safe-area.js.map +1 -0
- package/dist/layout-tokens/sections-advanced.d.ts +277 -0
- package/dist/layout-tokens/sections-advanced.d.ts.map +1 -0
- package/dist/layout-tokens/sections-advanced.js +593 -0
- package/dist/layout-tokens/sections-advanced.js.map +1 -0
- package/dist/layout-tokens/sections.d.ts +137 -0
- package/dist/layout-tokens/sections.d.ts.map +1 -0
- package/dist/layout-tokens/sections.js +694 -0
- package/dist/layout-tokens/sections.js.map +1 -0
- package/dist/layout-tokens/shells.d.ts +77 -0
- package/dist/layout-tokens/shells.d.ts.map +1 -0
- package/dist/layout-tokens/shells.js +408 -0
- package/dist/layout-tokens/shells.js.map +1 -0
- package/dist/layout-tokens/touch-target.d.ts +119 -0
- package/dist/layout-tokens/touch-target.d.ts.map +1 -0
- package/dist/layout-tokens/touch-target.js +156 -0
- package/dist/layout-tokens/touch-target.js.map +1 -0
- package/dist/layout-tokens/types.d.ts +632 -0
- package/dist/layout-tokens/types.d.ts.map +1 -0
- package/dist/layout-tokens/types.js +49 -0
- package/dist/layout-tokens/types.js.map +1 -0
- package/dist/layout-validation.d.ts +1547 -0
- package/dist/layout-validation.d.ts.map +1 -0
- package/dist/layout-validation.js +628 -0
- package/dist/layout-validation.js.map +1 -0
- package/dist/render.d.ts +23 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +244 -0
- package/dist/render.js.map +1 -0
- package/dist/schema-validation.d.ts +208 -0
- package/dist/schema-validation.d.ts.map +1 -0
- package/dist/schema-validation.js +205 -0
- package/dist/schema-validation.js.map +1 -0
- package/dist/screen-generation/generators/css-in-js-generator.d.ts +82 -0
- package/dist/screen-generation/generators/css-in-js-generator.d.ts.map +1 -0
- package/dist/screen-generation/generators/css-in-js-generator.js +335 -0
- package/dist/screen-generation/generators/css-in-js-generator.js.map +1 -0
- package/dist/screen-generation/generators/index.d.ts +13 -0
- package/dist/screen-generation/generators/index.d.ts.map +1 -0
- package/dist/screen-generation/generators/index.js +32 -0
- package/dist/screen-generation/generators/index.js.map +1 -0
- package/dist/screen-generation/generators/react-generator.d.ts +100 -0
- package/dist/screen-generation/generators/react-generator.d.ts.map +1 -0
- package/dist/screen-generation/generators/react-generator.js +379 -0
- package/dist/screen-generation/generators/react-generator.js.map +1 -0
- package/dist/screen-generation/generators/tailwind-generator.d.ts +105 -0
- package/dist/screen-generation/generators/tailwind-generator.d.ts.map +1 -0
- package/dist/screen-generation/generators/tailwind-generator.js +355 -0
- package/dist/screen-generation/generators/tailwind-generator.js.map +1 -0
- package/dist/screen-generation/generators/types.d.ts +136 -0
- package/dist/screen-generation/generators/types.d.ts.map +1 -0
- package/dist/screen-generation/generators/types.js +18 -0
- package/dist/screen-generation/generators/types.js.map +1 -0
- package/dist/screen-generation/generators/utils.d.ts +187 -0
- package/dist/screen-generation/generators/utils.d.ts.map +1 -0
- package/dist/screen-generation/generators/utils.js +312 -0
- package/dist/screen-generation/generators/utils.js.map +1 -0
- package/dist/screen-generation/index.d.ts +14 -0
- package/dist/screen-generation/index.d.ts.map +1 -0
- package/dist/screen-generation/index.js +33 -0
- package/dist/screen-generation/index.js.map +1 -0
- package/dist/screen-generation/resolver/component-resolver.d.ts +157 -0
- package/dist/screen-generation/resolver/component-resolver.d.ts.map +1 -0
- package/dist/screen-generation/resolver/component-resolver.js +295 -0
- package/dist/screen-generation/resolver/component-resolver.js.map +1 -0
- package/dist/screen-generation/resolver/index.d.ts +10 -0
- package/dist/screen-generation/resolver/index.d.ts.map +1 -0
- package/dist/screen-generation/resolver/index.js +46 -0
- package/dist/screen-generation/resolver/index.js.map +1 -0
- package/dist/screen-generation/resolver/layout-resolver.d.ts +155 -0
- package/dist/screen-generation/resolver/layout-resolver.d.ts.map +1 -0
- package/dist/screen-generation/resolver/layout-resolver.js +193 -0
- package/dist/screen-generation/resolver/layout-resolver.js.map +1 -0
- package/dist/screen-generation/resolver/screen-resolver.d.ts +174 -0
- package/dist/screen-generation/resolver/screen-resolver.d.ts.map +1 -0
- package/dist/screen-generation/resolver/screen-resolver.js +373 -0
- package/dist/screen-generation/resolver/screen-resolver.js.map +1 -0
- package/dist/screen-generation/resolver/token-resolver.d.ts +170 -0
- package/dist/screen-generation/resolver/token-resolver.d.ts.map +1 -0
- package/dist/screen-generation/resolver/token-resolver.js +260 -0
- package/dist/screen-generation/resolver/token-resolver.js.map +1 -0
- package/dist/screen-generation/types.d.ts +116 -0
- package/dist/screen-generation/types.d.ts.map +1 -0
- package/dist/screen-generation/types.js +33 -0
- package/dist/screen-generation/types.js.map +1 -0
- package/dist/screen-generation/validators.d.ts +286 -0
- package/dist/screen-generation/validators.d.ts.map +1 -0
- package/dist/screen-generation/validators.js +323 -0
- package/dist/screen-generation/validators.js.map +1 -0
- package/dist/screen-templates/__tests__/registry.test.d.ts +6 -0
- package/dist/screen-templates/__tests__/registry.test.d.ts.map +1 -0
- package/dist/screen-templates/__tests__/registry.test.js +247 -0
- package/dist/screen-templates/__tests__/registry.test.js.map +1 -0
- package/dist/screen-templates/__tests__/templates.test.d.ts +6 -0
- package/dist/screen-templates/__tests__/templates.test.d.ts.map +1 -0
- package/dist/screen-templates/__tests__/templates.test.js +179 -0
- package/dist/screen-templates/__tests__/templates.test.js.map +1 -0
- package/dist/screen-templates/index.d.ts +39 -0
- package/dist/screen-templates/index.d.ts.map +1 -0
- package/dist/screen-templates/index.js +79 -0
- package/dist/screen-templates/index.js.map +1 -0
- package/dist/screen-templates/registry.d.ts +177 -0
- package/dist/screen-templates/registry.d.ts.map +1 -0
- package/dist/screen-templates/registry.js +274 -0
- package/dist/screen-templates/registry.js.map +1 -0
- package/dist/screen-templates/templates/account/index.d.ts +6 -0
- package/dist/screen-templates/templates/account/index.d.ts.map +1 -0
- package/dist/screen-templates/templates/account/index.js +6 -0
- package/dist/screen-templates/templates/account/index.js.map +1 -0
- package/dist/screen-templates/templates/account/profile.d.ts +23 -0
- package/dist/screen-templates/templates/account/profile.d.ts.map +1 -0
- package/dist/screen-templates/templates/account/profile.js +249 -0
- package/dist/screen-templates/templates/account/profile.js.map +1 -0
- package/dist/screen-templates/templates/auth/forgot-password.d.ts +23 -0
- package/dist/screen-templates/templates/auth/forgot-password.d.ts.map +1 -0
- package/dist/screen-templates/templates/auth/forgot-password.js +203 -0
- package/dist/screen-templates/templates/auth/forgot-password.js.map +1 -0
- package/dist/screen-templates/templates/auth/index.d.ts +9 -0
- package/dist/screen-templates/templates/auth/index.d.ts.map +1 -0
- package/dist/screen-templates/templates/auth/index.js +9 -0
- package/dist/screen-templates/templates/auth/index.js.map +1 -0
- package/dist/screen-templates/templates/auth/login.d.ts +24 -0
- package/dist/screen-templates/templates/auth/login.d.ts.map +1 -0
- package/dist/screen-templates/templates/auth/login.js +254 -0
- package/dist/screen-templates/templates/auth/login.js.map +1 -0
- package/dist/screen-templates/templates/auth/signup.d.ts +24 -0
- package/dist/screen-templates/templates/auth/signup.d.ts.map +1 -0
- package/dist/screen-templates/templates/auth/signup.js +315 -0
- package/dist/screen-templates/templates/auth/signup.js.map +1 -0
- package/dist/screen-templates/templates/auth/verification.d.ts +23 -0
- package/dist/screen-templates/templates/auth/verification.d.ts.map +1 -0
- package/dist/screen-templates/templates/auth/verification.js +239 -0
- package/dist/screen-templates/templates/auth/verification.js.map +1 -0
- package/dist/screen-templates/templates/feedback/confirmation.d.ts +9 -0
- package/dist/screen-templates/templates/feedback/confirmation.d.ts.map +1 -0
- package/dist/screen-templates/templates/feedback/confirmation.js +107 -0
- package/dist/screen-templates/templates/feedback/confirmation.js.map +1 -0
- package/dist/screen-templates/templates/feedback/empty.d.ts +9 -0
- package/dist/screen-templates/templates/feedback/empty.d.ts.map +1 -0
- package/dist/screen-templates/templates/feedback/empty.js +90 -0
- package/dist/screen-templates/templates/feedback/empty.js.map +1 -0
- package/dist/screen-templates/templates/feedback/error.d.ts +9 -0
- package/dist/screen-templates/templates/feedback/error.d.ts.map +1 -0
- package/dist/screen-templates/templates/feedback/error.js +99 -0
- package/dist/screen-templates/templates/feedback/error.js.map +1 -0
- package/dist/screen-templates/templates/feedback/index.d.ts +10 -0
- package/dist/screen-templates/templates/feedback/index.d.ts.map +1 -0
- package/dist/screen-templates/templates/feedback/index.js +10 -0
- package/dist/screen-templates/templates/feedback/index.js.map +1 -0
- package/dist/screen-templates/templates/feedback/loading.d.ts +9 -0
- package/dist/screen-templates/templates/feedback/loading.d.ts.map +1 -0
- package/dist/screen-templates/templates/feedback/loading.js +77 -0
- package/dist/screen-templates/templates/feedback/loading.js.map +1 -0
- package/dist/screen-templates/templates/feedback/success.d.ts +9 -0
- package/dist/screen-templates/templates/feedback/success.d.ts.map +1 -0
- package/dist/screen-templates/templates/feedback/success.js +99 -0
- package/dist/screen-templates/templates/feedback/success.js.map +1 -0
- package/dist/screen-templates/templates/home/index.d.ts +6 -0
- package/dist/screen-templates/templates/home/index.d.ts.map +1 -0
- package/dist/screen-templates/templates/home/index.js +6 -0
- package/dist/screen-templates/templates/home/index.js.map +1 -0
- package/dist/screen-templates/templates/home/landing.d.ts +24 -0
- package/dist/screen-templates/templates/home/landing.d.ts.map +1 -0
- package/dist/screen-templates/templates/home/landing.js +197 -0
- package/dist/screen-templates/templates/home/landing.js.map +1 -0
- package/dist/screen-templates/templates/settings/index.d.ts +6 -0
- package/dist/screen-templates/templates/settings/index.d.ts.map +1 -0
- package/dist/screen-templates/templates/settings/index.js +6 -0
- package/dist/screen-templates/templates/settings/index.js.map +1 -0
- package/dist/screen-templates/templates/settings/preferences.d.ts +24 -0
- package/dist/screen-templates/templates/settings/preferences.d.ts.map +1 -0
- package/dist/screen-templates/templates/settings/preferences.js +265 -0
- package/dist/screen-templates/templates/settings/preferences.js.map +1 -0
- package/dist/screen-templates/types.d.ts +229 -0
- package/dist/screen-templates/types.d.ts.map +1 -0
- package/dist/screen-templates/types.js +7 -0
- package/dist/screen-templates/types.js.map +1 -0
- package/dist/theme-v2.d.ts +228 -0
- package/dist/theme-v2.d.ts.map +1 -0
- package/dist/theme-v2.js +158 -0
- package/dist/theme-v2.js.map +1 -0
- package/dist/theme.d.ts +60 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +76 -0
- package/dist/theme.js.map +1 -0
- package/dist/token-resolver.d.ts +69 -0
- package/dist/token-resolver.d.ts.map +1 -0
- package/dist/token-resolver.js +122 -0
- package/dist/token-resolver.js.map +1 -0
- package/dist/token-validation.d.ts +432 -0
- package/dist/token-validation.d.ts.map +1 -0
- package/dist/token-validation.js +140 -0
- package/dist/token-validation.js.map +1 -0
- package/dist/tokens.d.ts +158 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +10 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +77 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
package/dist/render.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tekton-ui/core - Render Module
|
|
3
|
+
* Template-based JSX generation (no AST dependencies)
|
|
4
|
+
* Target: 300 LOC
|
|
5
|
+
*/
|
|
6
|
+
import type { Blueprint, ComponentNode, RenderResult, RenderOptions } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Render blueprint to JSX code
|
|
9
|
+
*/
|
|
10
|
+
export declare function render(blueprint: Blueprint, options?: RenderOptions): RenderResult;
|
|
11
|
+
/**
|
|
12
|
+
* Render blueprint with theme applied
|
|
13
|
+
*/
|
|
14
|
+
export declare function renderWithTheme(blueprint: Blueprint, options?: RenderOptions): RenderResult;
|
|
15
|
+
/**
|
|
16
|
+
* Quick render a single component
|
|
17
|
+
*/
|
|
18
|
+
export declare function renderSingleComponent(node: ComponentNode): string;
|
|
19
|
+
/**
|
|
20
|
+
* Render multiple components without layout wrapper
|
|
21
|
+
*/
|
|
22
|
+
export declare function renderComponents(nodes: ComponentNode[], indent?: string): string;
|
|
23
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyKxF;;GAEG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CAqClF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CAqB3F;AA+CD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAEpF"}
|
package/dist/render.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tekton-ui/core - Render Module
|
|
3
|
+
* Template-based JSX generation (no AST dependencies)
|
|
4
|
+
* Target: 300 LOC
|
|
5
|
+
*/
|
|
6
|
+
import { loadTheme, generateCSSVariables } from './theme.js';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Default Options
|
|
9
|
+
// ============================================================================
|
|
10
|
+
const DEFAULT_OPTIONS = {
|
|
11
|
+
typescript: true,
|
|
12
|
+
indent: 2,
|
|
13
|
+
semicolons: true,
|
|
14
|
+
};
|
|
15
|
+
const COMPONENT_RENDERERS = {
|
|
16
|
+
Button: (node, indent) => {
|
|
17
|
+
const variant = node.props?.variant || 'default';
|
|
18
|
+
const children = renderChildren(node.children, indent);
|
|
19
|
+
return `${indent}<Button variant="${variant}">${children}</Button>`;
|
|
20
|
+
},
|
|
21
|
+
Input: (node, indent) => {
|
|
22
|
+
const placeholder = node.props?.placeholder || '';
|
|
23
|
+
const type = node.props?.type || 'text';
|
|
24
|
+
return `${indent}<Input type="${type}" placeholder="${placeholder}" />`;
|
|
25
|
+
},
|
|
26
|
+
Card: (node, indent) => {
|
|
27
|
+
const children = renderChildren(node.children, indent + ' ');
|
|
28
|
+
return `${indent}<Card>\n${children}\n${indent}</Card>`;
|
|
29
|
+
},
|
|
30
|
+
Text: (node, indent) => {
|
|
31
|
+
const children = renderChildren(node.children, indent);
|
|
32
|
+
return `${indent}<Text>${children}</Text>`;
|
|
33
|
+
},
|
|
34
|
+
Heading: (node, indent) => {
|
|
35
|
+
const level = node.props?.level || 1;
|
|
36
|
+
const children = renderChildren(node.children, indent);
|
|
37
|
+
return `${indent}<Heading level={${level}}>${children}</Heading>`;
|
|
38
|
+
},
|
|
39
|
+
Image: (node, indent) => {
|
|
40
|
+
const src = node.props?.src || '';
|
|
41
|
+
const alt = node.props?.alt || '';
|
|
42
|
+
return `${indent}<Image src="${src}" alt="${alt}" />`;
|
|
43
|
+
},
|
|
44
|
+
Link: (node, indent) => {
|
|
45
|
+
const href = node.props?.href || '#';
|
|
46
|
+
const children = renderChildren(node.children, indent);
|
|
47
|
+
return `${indent}<Link href="${href}">${children}</Link>`;
|
|
48
|
+
},
|
|
49
|
+
List: (node, indent) => {
|
|
50
|
+
const children = renderChildren(node.children, indent + ' ');
|
|
51
|
+
return `${indent}<List>\n${children}\n${indent}</List>`;
|
|
52
|
+
},
|
|
53
|
+
Form: (node, indent) => {
|
|
54
|
+
const children = renderChildren(node.children, indent + ' ');
|
|
55
|
+
return `${indent}<Form>\n${children}\n${indent}</Form>`;
|
|
56
|
+
},
|
|
57
|
+
Modal: (node, indent) => {
|
|
58
|
+
const title = node.props?.title || '';
|
|
59
|
+
const children = renderChildren(node.children, indent + ' ');
|
|
60
|
+
return `${indent}<Modal title="${title}">\n${children}\n${indent}</Modal>`;
|
|
61
|
+
},
|
|
62
|
+
// Default fallback for unknown components
|
|
63
|
+
Default: (node, indent) => {
|
|
64
|
+
const props = renderProps(node.props);
|
|
65
|
+
const children = node.children ? renderChildren(node.children, indent + ' ') : '';
|
|
66
|
+
const hasChildren = children.trim().length > 0;
|
|
67
|
+
if (hasChildren) {
|
|
68
|
+
return `${indent}<${node.type}${props}>\n${children}\n${indent}</${node.type}>`;
|
|
69
|
+
}
|
|
70
|
+
return `${indent}<${node.type}${props} />`;
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
// ============================================================================
|
|
74
|
+
// Helper Functions
|
|
75
|
+
// ============================================================================
|
|
76
|
+
function renderProps(props) {
|
|
77
|
+
if (!props || Object.keys(props).length === 0) {
|
|
78
|
+
return '';
|
|
79
|
+
}
|
|
80
|
+
const parts = [];
|
|
81
|
+
for (const [key, value] of Object.entries(props)) {
|
|
82
|
+
if (typeof value === 'string') {
|
|
83
|
+
parts.push(`${key}="${value}"`);
|
|
84
|
+
}
|
|
85
|
+
else if (typeof value === 'number' || typeof value === 'boolean') {
|
|
86
|
+
parts.push(`${key}={${value}}`);
|
|
87
|
+
}
|
|
88
|
+
else if (value !== undefined && value !== null) {
|
|
89
|
+
parts.push(`${key}={${JSON.stringify(value)}}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return parts.length > 0 ? ' ' + parts.join(' ') : '';
|
|
93
|
+
}
|
|
94
|
+
function renderChildren(children, indent) {
|
|
95
|
+
if (!children || children.length === 0) {
|
|
96
|
+
return '';
|
|
97
|
+
}
|
|
98
|
+
return children
|
|
99
|
+
.map(child => {
|
|
100
|
+
if (typeof child === 'string') {
|
|
101
|
+
return `${indent}${child}`;
|
|
102
|
+
}
|
|
103
|
+
return renderNode(child, indent);
|
|
104
|
+
})
|
|
105
|
+
.join('\n');
|
|
106
|
+
}
|
|
107
|
+
function renderNode(node, indent = '') {
|
|
108
|
+
const renderer = COMPONENT_RENDERERS[node.type] || COMPONENT_RENDERERS.Default;
|
|
109
|
+
return renderer(node, indent);
|
|
110
|
+
}
|
|
111
|
+
// ============================================================================
|
|
112
|
+
// Layout Templates
|
|
113
|
+
// ============================================================================
|
|
114
|
+
function renderLayout(blueprint, components, indent) {
|
|
115
|
+
const layout = blueprint.layout;
|
|
116
|
+
const i = indent;
|
|
117
|
+
const i2 = indent + ' ';
|
|
118
|
+
switch (layout) {
|
|
119
|
+
case 'single-column':
|
|
120
|
+
return `${i}<main className="container mx-auto px-4">\n${components}\n${i}</main>`;
|
|
121
|
+
case 'two-column':
|
|
122
|
+
return `${i}<div className="grid grid-cols-2 gap-4">\n${i2}<div className="col-span-1">\n${components}\n${i2}</div>\n${i2}<div className="col-span-1">\n${i2}</div>\n${i}</div>`;
|
|
123
|
+
case 'sidebar-left':
|
|
124
|
+
return `${i}<div className="flex">\n${i2}<aside className="w-64 shrink-0">\n${i2}</aside>\n${i2}<main className="flex-1">\n${components}\n${i2}</main>\n${i}</div>`;
|
|
125
|
+
case 'sidebar-right':
|
|
126
|
+
return `${i}<div className="flex">\n${i2}<main className="flex-1">\n${components}\n${i2}</main>\n${i2}<aside className="w-64 shrink-0">\n${i2}</aside>\n${i}</div>`;
|
|
127
|
+
case 'dashboard':
|
|
128
|
+
return `${i}<div className="flex h-screen">\n${i2}<aside className="w-64 shrink-0 border-r">\n${i2}</aside>\n${i2}<div className="flex-1 flex flex-col">\n${i2} <header className="h-16 border-b">\n${i2} </header>\n${i2} <main className="flex-1 p-4">\n${components}\n${i2} </main>\n${i2}</div>\n${i}</div>`;
|
|
129
|
+
case 'landing':
|
|
130
|
+
return `${i}<div className="min-h-screen">\n${i2}<section className="hero py-20">\n${components}\n${i2}</section>\n${i}</div>`;
|
|
131
|
+
default:
|
|
132
|
+
return `${i}<div>\n${components}\n${i}</div>`;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ============================================================================
|
|
136
|
+
// Main Render Functions
|
|
137
|
+
// ============================================================================
|
|
138
|
+
/**
|
|
139
|
+
* Render blueprint to JSX code
|
|
140
|
+
*/
|
|
141
|
+
export function render(blueprint, options) {
|
|
142
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
143
|
+
const indent = ' '.repeat(opts.indent);
|
|
144
|
+
try {
|
|
145
|
+
// Render components
|
|
146
|
+
const componentsJsx = blueprint.components
|
|
147
|
+
.map(comp => renderNode(comp, indent + indent))
|
|
148
|
+
.join('\n');
|
|
149
|
+
// Wrap in layout
|
|
150
|
+
const layoutJsx = renderLayout(blueprint, componentsJsx, indent);
|
|
151
|
+
// Generate imports
|
|
152
|
+
const componentTypes = extractComponentTypes(blueprint.components);
|
|
153
|
+
const imports = generateImports(componentTypes, opts.typescript);
|
|
154
|
+
// Generate component function
|
|
155
|
+
const componentName = toPascalCase(blueprint.name);
|
|
156
|
+
const semi = opts.semicolons ? ';' : '';
|
|
157
|
+
const code = `${imports}
|
|
158
|
+
|
|
159
|
+
export default function ${componentName}() {
|
|
160
|
+
return (
|
|
161
|
+
${layoutJsx}
|
|
162
|
+
)${semi}
|
|
163
|
+
}
|
|
164
|
+
`;
|
|
165
|
+
return { success: true, code };
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
return {
|
|
169
|
+
success: false,
|
|
170
|
+
error: error instanceof Error ? error.message : 'Unknown render error',
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Render blueprint with theme applied
|
|
176
|
+
*/
|
|
177
|
+
export function renderWithTheme(blueprint, options) {
|
|
178
|
+
const theme = loadTheme(blueprint.themeId);
|
|
179
|
+
if (!theme) {
|
|
180
|
+
return { success: false, error: `Theme not found: ${blueprint.themeId}` };
|
|
181
|
+
}
|
|
182
|
+
// Generate CSS variables comment
|
|
183
|
+
const cssVars = generateCSSVariables(theme);
|
|
184
|
+
const cssComment = `/* Theme: ${theme.name} */\n/* CSS Variables:\n${Object.entries(cssVars)
|
|
185
|
+
.map(([k, v]) => ` ${k}: ${v};`)
|
|
186
|
+
.join('\n')}\n*/\n`;
|
|
187
|
+
const result = render(blueprint, options);
|
|
188
|
+
if (!result.success) {
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
success: true,
|
|
193
|
+
code: cssComment + result.code,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// ============================================================================
|
|
197
|
+
// Utility Functions
|
|
198
|
+
// ============================================================================
|
|
199
|
+
function extractComponentTypes(nodes) {
|
|
200
|
+
const types = new Set();
|
|
201
|
+
function traverse(node) {
|
|
202
|
+
types.add(node.type);
|
|
203
|
+
if (node.children) {
|
|
204
|
+
for (const child of node.children) {
|
|
205
|
+
if (typeof child !== 'string') {
|
|
206
|
+
traverse(child);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
for (const node of nodes) {
|
|
212
|
+
traverse(node);
|
|
213
|
+
}
|
|
214
|
+
return Array.from(types).sort();
|
|
215
|
+
}
|
|
216
|
+
function generateImports(componentTypes, typescript) {
|
|
217
|
+
if (componentTypes.length === 0) {
|
|
218
|
+
return '';
|
|
219
|
+
}
|
|
220
|
+
const ext = typescript ? '' : '';
|
|
221
|
+
return `import { ${componentTypes.join(', ')} } from '@/components/ui'${ext};`;
|
|
222
|
+
}
|
|
223
|
+
function toPascalCase(str) {
|
|
224
|
+
return str
|
|
225
|
+
.split(/[-_\s]+/)
|
|
226
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
227
|
+
.join('');
|
|
228
|
+
}
|
|
229
|
+
// ============================================================================
|
|
230
|
+
// Quick Render API
|
|
231
|
+
// ============================================================================
|
|
232
|
+
/**
|
|
233
|
+
* Quick render a single component
|
|
234
|
+
*/
|
|
235
|
+
export function renderSingleComponent(node) {
|
|
236
|
+
return renderNode(node, '');
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Render multiple components without layout wrapper
|
|
240
|
+
*/
|
|
241
|
+
export function renderComponents(nodes, indent = '') {
|
|
242
|
+
return nodes.map(n => renderNode(n, indent)).join('\n');
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tekton-ui/core - Schema Validation Utilities
|
|
3
|
+
* Zod-based runtime validation for component schemas
|
|
4
|
+
* [SPEC-COMPONENT-001-B] [TAG-004]
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import type { ComponentSchema, PropDefinition, A11yRequirements } from './component-schemas.js';
|
|
8
|
+
/**
|
|
9
|
+
* PropDefinition Zod Schema
|
|
10
|
+
*/
|
|
11
|
+
export declare const PropDefinitionSchema: z.ZodObject<{
|
|
12
|
+
name: z.ZodString;
|
|
13
|
+
type: z.ZodString;
|
|
14
|
+
required: z.ZodBoolean;
|
|
15
|
+
description: z.ZodString;
|
|
16
|
+
defaultValue: z.ZodOptional<z.ZodUnknown>;
|
|
17
|
+
options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
name: string;
|
|
20
|
+
type: string;
|
|
21
|
+
required: boolean;
|
|
22
|
+
description: string;
|
|
23
|
+
defaultValue?: unknown;
|
|
24
|
+
options?: string[] | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
name: string;
|
|
27
|
+
type: string;
|
|
28
|
+
required: boolean;
|
|
29
|
+
description: string;
|
|
30
|
+
defaultValue?: unknown;
|
|
31
|
+
options?: string[] | undefined;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* A11yRequirements Zod Schema
|
|
35
|
+
*/
|
|
36
|
+
export declare const A11yRequirementsSchema: z.ZodObject<{
|
|
37
|
+
role: z.ZodString;
|
|
38
|
+
wcag: z.ZodString;
|
|
39
|
+
ariaAttributes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
40
|
+
keyboard: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
41
|
+
focus: z.ZodOptional<z.ZodString>;
|
|
42
|
+
screenReader: z.ZodOptional<z.ZodString>;
|
|
43
|
+
}, "strip", z.ZodTypeAny, {
|
|
44
|
+
role: string;
|
|
45
|
+
wcag: string;
|
|
46
|
+
ariaAttributes?: string[] | undefined;
|
|
47
|
+
keyboard?: string[] | undefined;
|
|
48
|
+
focus?: string | undefined;
|
|
49
|
+
screenReader?: string | undefined;
|
|
50
|
+
}, {
|
|
51
|
+
role: string;
|
|
52
|
+
wcag: string;
|
|
53
|
+
ariaAttributes?: string[] | undefined;
|
|
54
|
+
keyboard?: string[] | undefined;
|
|
55
|
+
focus?: string | undefined;
|
|
56
|
+
screenReader?: string | undefined;
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* TokenBindings Zod Schema
|
|
60
|
+
*/
|
|
61
|
+
export declare const TokenBindingsSchema: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodString>, Record<string, string>, Record<string, string>>;
|
|
62
|
+
/**
|
|
63
|
+
* ComponentSchema Zod Schema
|
|
64
|
+
*/
|
|
65
|
+
export declare const ComponentSchemaZod: z.ZodObject<{
|
|
66
|
+
type: z.ZodString;
|
|
67
|
+
category: z.ZodEnum<["primitive", "composed"]>;
|
|
68
|
+
props: z.ZodArray<z.ZodObject<{
|
|
69
|
+
name: z.ZodString;
|
|
70
|
+
type: z.ZodString;
|
|
71
|
+
required: z.ZodBoolean;
|
|
72
|
+
description: z.ZodString;
|
|
73
|
+
defaultValue: z.ZodOptional<z.ZodUnknown>;
|
|
74
|
+
options: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
75
|
+
}, "strip", z.ZodTypeAny, {
|
|
76
|
+
name: string;
|
|
77
|
+
type: string;
|
|
78
|
+
required: boolean;
|
|
79
|
+
description: string;
|
|
80
|
+
defaultValue?: unknown;
|
|
81
|
+
options?: string[] | undefined;
|
|
82
|
+
}, {
|
|
83
|
+
name: string;
|
|
84
|
+
type: string;
|
|
85
|
+
required: boolean;
|
|
86
|
+
description: string;
|
|
87
|
+
defaultValue?: unknown;
|
|
88
|
+
options?: string[] | undefined;
|
|
89
|
+
}>, "many">;
|
|
90
|
+
tokenBindings: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodString>, Record<string, string>, Record<string, string>>;
|
|
91
|
+
a11y: z.ZodObject<{
|
|
92
|
+
role: z.ZodString;
|
|
93
|
+
wcag: z.ZodString;
|
|
94
|
+
ariaAttributes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
95
|
+
keyboard: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
96
|
+
focus: z.ZodOptional<z.ZodString>;
|
|
97
|
+
screenReader: z.ZodOptional<z.ZodString>;
|
|
98
|
+
}, "strip", z.ZodTypeAny, {
|
|
99
|
+
role: string;
|
|
100
|
+
wcag: string;
|
|
101
|
+
ariaAttributes?: string[] | undefined;
|
|
102
|
+
keyboard?: string[] | undefined;
|
|
103
|
+
focus?: string | undefined;
|
|
104
|
+
screenReader?: string | undefined;
|
|
105
|
+
}, {
|
|
106
|
+
role: string;
|
|
107
|
+
wcag: string;
|
|
108
|
+
ariaAttributes?: string[] | undefined;
|
|
109
|
+
keyboard?: string[] | undefined;
|
|
110
|
+
focus?: string | undefined;
|
|
111
|
+
screenReader?: string | undefined;
|
|
112
|
+
}>;
|
|
113
|
+
description: z.ZodOptional<z.ZodString>;
|
|
114
|
+
}, "strip", z.ZodTypeAny, {
|
|
115
|
+
type: string;
|
|
116
|
+
category: "primitive" | "composed";
|
|
117
|
+
props: {
|
|
118
|
+
name: string;
|
|
119
|
+
type: string;
|
|
120
|
+
required: boolean;
|
|
121
|
+
description: string;
|
|
122
|
+
defaultValue?: unknown;
|
|
123
|
+
options?: string[] | undefined;
|
|
124
|
+
}[];
|
|
125
|
+
tokenBindings: Record<string, string>;
|
|
126
|
+
a11y: {
|
|
127
|
+
role: string;
|
|
128
|
+
wcag: string;
|
|
129
|
+
ariaAttributes?: string[] | undefined;
|
|
130
|
+
keyboard?: string[] | undefined;
|
|
131
|
+
focus?: string | undefined;
|
|
132
|
+
screenReader?: string | undefined;
|
|
133
|
+
};
|
|
134
|
+
description?: string | undefined;
|
|
135
|
+
}, {
|
|
136
|
+
type: string;
|
|
137
|
+
category: "primitive" | "composed";
|
|
138
|
+
props: {
|
|
139
|
+
name: string;
|
|
140
|
+
type: string;
|
|
141
|
+
required: boolean;
|
|
142
|
+
description: string;
|
|
143
|
+
defaultValue?: unknown;
|
|
144
|
+
options?: string[] | undefined;
|
|
145
|
+
}[];
|
|
146
|
+
tokenBindings: Record<string, string>;
|
|
147
|
+
a11y: {
|
|
148
|
+
role: string;
|
|
149
|
+
wcag: string;
|
|
150
|
+
ariaAttributes?: string[] | undefined;
|
|
151
|
+
keyboard?: string[] | undefined;
|
|
152
|
+
focus?: string | undefined;
|
|
153
|
+
screenReader?: string | undefined;
|
|
154
|
+
};
|
|
155
|
+
description?: string | undefined;
|
|
156
|
+
}>;
|
|
157
|
+
/**
|
|
158
|
+
* Validation result type
|
|
159
|
+
*/
|
|
160
|
+
export interface ValidationResult {
|
|
161
|
+
valid: boolean;
|
|
162
|
+
errors?: string[];
|
|
163
|
+
warnings?: string[];
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Validate a single component schema
|
|
167
|
+
*/
|
|
168
|
+
export declare function validateComponentSchema(schema: ComponentSchema): ValidationResult;
|
|
169
|
+
/**
|
|
170
|
+
* Validate all component schemas
|
|
171
|
+
*/
|
|
172
|
+
export declare function validateAllSchemas(): ValidationResult;
|
|
173
|
+
/**
|
|
174
|
+
* Validate prop definition
|
|
175
|
+
*/
|
|
176
|
+
export declare function validateProp(prop: PropDefinition): ValidationResult;
|
|
177
|
+
/**
|
|
178
|
+
* Validate accessibility requirements
|
|
179
|
+
*/
|
|
180
|
+
export declare function validateA11y(a11y: A11yRequirements): ValidationResult;
|
|
181
|
+
/**
|
|
182
|
+
* Validate token bindings format
|
|
183
|
+
*/
|
|
184
|
+
export declare function validateTokenBindings(bindings: Record<string, string>): ValidationResult;
|
|
185
|
+
/**
|
|
186
|
+
* Get component schema validation summary
|
|
187
|
+
*/
|
|
188
|
+
export declare function getValidationSummary(): {
|
|
189
|
+
totalComponents: number;
|
|
190
|
+
primitiveComponents: number;
|
|
191
|
+
composedComponents: number;
|
|
192
|
+
validSchemas: number;
|
|
193
|
+
invalidSchemas: number;
|
|
194
|
+
validationResults: Array<{
|
|
195
|
+
type: string;
|
|
196
|
+
valid: boolean;
|
|
197
|
+
errors?: string[];
|
|
198
|
+
}>;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Assert component schema is valid (throws on invalid)
|
|
202
|
+
*/
|
|
203
|
+
export declare function assertValidSchema(schema: ComponentSchema): void;
|
|
204
|
+
/**
|
|
205
|
+
* Assert all schemas are valid (throws on invalid)
|
|
206
|
+
*/
|
|
207
|
+
export declare function assertAllSchemasValid(): void;
|
|
208
|
+
//# sourceMappingURL=schema-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validation.d.ts","sourceRoot":"","sources":["../src/schema-validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAOhG;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAO/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB,qGAI5B,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS7B,CAAC;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAWjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,gBAAgB,CAsCrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAWnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,CAWrE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAkCxF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC,CAAC;CACJ,CAiBA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAK/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C"}
|