@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
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tekton-ui/core - Token Binding Resolver
|
|
3
|
+
* Resolves token bindings with template variable substitution
|
|
4
|
+
* [SPEC-LAYOUT-002] [PHASE-2]
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Cache
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Token binding cache for performance optimization
|
|
11
|
+
* Key: `${binding}:${JSON.stringify(props)}:${theme}`
|
|
12
|
+
*/
|
|
13
|
+
const bindingCache = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Clear token binding cache
|
|
16
|
+
* Useful for testing or when token definitions change
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* clearBindingCache();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function clearBindingCache() {
|
|
24
|
+
bindingCache.clear();
|
|
25
|
+
}
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Template Variable Substitution
|
|
28
|
+
// ============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* Substitute template variables in token binding
|
|
31
|
+
*
|
|
32
|
+
* Template syntax: `{variableName}`
|
|
33
|
+
* Variables are resolved from component props
|
|
34
|
+
*
|
|
35
|
+
* @param binding - Token binding with template variables (e.g., "component.button.{variant}.background")
|
|
36
|
+
* @param props - Component props (e.g., { variant: "primary" })
|
|
37
|
+
* @returns Token reference with substituted variables (e.g., "component.button.primary.background")
|
|
38
|
+
* @throws Error if required template variable is missing from props
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* substituteTemplateVariables(
|
|
43
|
+
* 'component.button.{variant}.background',
|
|
44
|
+
* { variant: 'primary' }
|
|
45
|
+
* ); // → 'component.button.primary.background'
|
|
46
|
+
*
|
|
47
|
+
* substituteTemplateVariables(
|
|
48
|
+
* 'atomic.spacing.{size}',
|
|
49
|
+
* { size: 'large' }
|
|
50
|
+
* ); // → 'atomic.spacing.large'
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function substituteTemplateVariables(binding, props) {
|
|
54
|
+
// Match template variables: {variableName}
|
|
55
|
+
const templateVarRegex = /\{([^}]+)\}/g;
|
|
56
|
+
const matches = [...binding.matchAll(templateVarRegex)];
|
|
57
|
+
if (matches.length === 0) {
|
|
58
|
+
// No template variables, return as-is
|
|
59
|
+
return binding;
|
|
60
|
+
}
|
|
61
|
+
let result = binding;
|
|
62
|
+
for (const match of matches) {
|
|
63
|
+
const variableName = match[1];
|
|
64
|
+
const variableValue = props[variableName];
|
|
65
|
+
if (variableValue === undefined) {
|
|
66
|
+
throw new Error(`Template variable '${variableName}' not found in props. ` +
|
|
67
|
+
`Available props: ${Object.keys(props).join(', ')}`);
|
|
68
|
+
}
|
|
69
|
+
if (typeof variableValue !== 'string' && typeof variableValue !== 'number') {
|
|
70
|
+
throw new Error(`Template variable '${variableName}' must be string or number, ` +
|
|
71
|
+
`got ${typeof variableValue}`);
|
|
72
|
+
}
|
|
73
|
+
// Replace template variable with prop value
|
|
74
|
+
result = result.replace(`{${variableName}}`, String(variableValue));
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// Token Reference to CSS Variable Conversion
|
|
80
|
+
// ============================================================================
|
|
81
|
+
/**
|
|
82
|
+
* Convert token reference to CSS variable reference
|
|
83
|
+
*
|
|
84
|
+
* Converts dot notation to CSS custom property format:
|
|
85
|
+
* - "atomic.spacing.16" → "var(--atomic-spacing-16)"
|
|
86
|
+
* - "semantic.color.primary" → "var(--semantic-color-primary)"
|
|
87
|
+
*
|
|
88
|
+
* @param tokenRef - Token reference in dot notation
|
|
89
|
+
* @returns CSS variable reference in var() format
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* tokenRefToCSSVar('atomic.spacing.16'); // → 'var(--atomic-spacing-16)'
|
|
94
|
+
* tokenRefToCSSVar('semantic.color.primary'); // → 'var(--semantic-color-primary)'
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export function tokenRefToCSSVar(tokenRef) {
|
|
98
|
+
// Convert dot notation to CSS variable format
|
|
99
|
+
// "atomic.spacing.16" → "--atomic-spacing-16"
|
|
100
|
+
const cssVarName = `--${tokenRef.replace(/\./g, '-')}`;
|
|
101
|
+
// Wrap in var() function
|
|
102
|
+
return `var(${cssVarName})`;
|
|
103
|
+
}
|
|
104
|
+
// ============================================================================
|
|
105
|
+
// Core Resolution Functions
|
|
106
|
+
// ============================================================================
|
|
107
|
+
/**
|
|
108
|
+
* Resolve single token binding with caching
|
|
109
|
+
*
|
|
110
|
+
* Process:
|
|
111
|
+
* 1. Check cache for previously resolved binding
|
|
112
|
+
* 2. Substitute template variables from props
|
|
113
|
+
* 3. Convert to CSS variable reference
|
|
114
|
+
* 4. Cache the result
|
|
115
|
+
*
|
|
116
|
+
* @param binding - Token binding (may contain template variables)
|
|
117
|
+
* @param context - Resolution context with props and theme
|
|
118
|
+
* @returns CSS variable reference
|
|
119
|
+
* @throws Error if template variable substitution fails
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const context = {
|
|
124
|
+
* props: { variant: 'primary', size: 'medium' },
|
|
125
|
+
* theme: 'default'
|
|
126
|
+
* };
|
|
127
|
+
*
|
|
128
|
+
* resolveBinding('component.button.{variant}.background', context);
|
|
129
|
+
* // → 'var(--component-button-primary-background)'
|
|
130
|
+
*
|
|
131
|
+
* resolveBinding('atomic.spacing.{size}', context);
|
|
132
|
+
* // → 'var(--atomic-spacing-medium)'
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export function resolveBinding(binding, context) {
|
|
136
|
+
// Generate cache key
|
|
137
|
+
const cacheKey = `${binding}:${JSON.stringify(context.props)}:${context.theme}`;
|
|
138
|
+
// Check cache
|
|
139
|
+
const cached = bindingCache.get(cacheKey);
|
|
140
|
+
if (cached) {
|
|
141
|
+
return cached;
|
|
142
|
+
}
|
|
143
|
+
// Substitute template variables
|
|
144
|
+
const tokenRef = substituteTemplateVariables(binding, context.props);
|
|
145
|
+
// Convert to CSS variable
|
|
146
|
+
const cssVar = tokenRefToCSSVar(tokenRef);
|
|
147
|
+
// Cache result
|
|
148
|
+
bindingCache.set(cacheKey, cssVar);
|
|
149
|
+
return cssVar;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Resolve all token bindings for a component
|
|
153
|
+
*
|
|
154
|
+
* Processes all token bindings in the component schema,
|
|
155
|
+
* substituting template variables and converting to CSS variables.
|
|
156
|
+
*
|
|
157
|
+
* @param bindings - Token bindings from component schema
|
|
158
|
+
* @param context - Resolution context with props and theme
|
|
159
|
+
* @returns Resolved token bindings map (property → CSS variable)
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* const bindings = {
|
|
164
|
+
* background: 'component.button.{variant}.background',
|
|
165
|
+
* foreground: 'component.button.{variant}.foreground',
|
|
166
|
+
* padding: 'atomic.spacing.{size}'
|
|
167
|
+
* };
|
|
168
|
+
*
|
|
169
|
+
* const context = {
|
|
170
|
+
* props: { variant: 'primary', size: 'medium' },
|
|
171
|
+
* theme: 'default'
|
|
172
|
+
* };
|
|
173
|
+
*
|
|
174
|
+
* const resolved = resolveBindings(bindings, context);
|
|
175
|
+
* // {
|
|
176
|
+
* // background: 'var(--component-button-primary-background)',
|
|
177
|
+
* // foreground: 'var(--component-button-primary-foreground)',
|
|
178
|
+
* // padding: 'var(--atomic-spacing-medium)'
|
|
179
|
+
* // }
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
export function resolveBindings(bindings, context) {
|
|
183
|
+
const resolved = {};
|
|
184
|
+
for (const [propName, binding] of Object.entries(bindings)) {
|
|
185
|
+
try {
|
|
186
|
+
resolved[propName] = resolveBinding(binding, context);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
// Provide helpful error message with context
|
|
190
|
+
throw new Error(`Failed to resolve token binding for property '${propName}': ${error instanceof Error ? error.message : String(error)}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return resolved;
|
|
194
|
+
}
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// Validation Utilities
|
|
197
|
+
// ============================================================================
|
|
198
|
+
/**
|
|
199
|
+
* Validate token binding format
|
|
200
|
+
*
|
|
201
|
+
* Checks if a token binding string is valid:
|
|
202
|
+
* - Must be in dot notation (e.g., "atomic.spacing.16")
|
|
203
|
+
* - May contain template variables (e.g., "component.button.{variant}.background")
|
|
204
|
+
* - Must start with valid layer (atomic, semantic, component)
|
|
205
|
+
*
|
|
206
|
+
* @param binding - Token binding to validate
|
|
207
|
+
* @returns True if valid, false otherwise
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* ```typescript
|
|
211
|
+
* isValidTokenBinding('atomic.spacing.16'); // → true
|
|
212
|
+
* isValidTokenBinding('component.button.{variant}.background'); // → true
|
|
213
|
+
* isValidTokenBinding('invalid-format'); // → false
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
export function isValidTokenBinding(binding) {
|
|
217
|
+
// Check if binding starts with valid layer
|
|
218
|
+
const startsWithLayer = binding.startsWith('atomic.') ||
|
|
219
|
+
binding.startsWith('semantic.') ||
|
|
220
|
+
binding.startsWith('component.');
|
|
221
|
+
if (!startsWithLayer) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
// Check if binding contains at least one dot
|
|
225
|
+
if (!binding.includes('.')) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
// Check if template variables are properly formatted
|
|
229
|
+
const templateVarRegex = /\{([^}]+)\}/g;
|
|
230
|
+
const matches = [...binding.matchAll(templateVarRegex)];
|
|
231
|
+
for (const match of matches) {
|
|
232
|
+
const variableName = match[1];
|
|
233
|
+
// Variable name should be alphanumeric with underscores
|
|
234
|
+
if (!/^[a-zA-Z0-9_]+$/.test(variableName)) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Extract template variable names from binding
|
|
242
|
+
*
|
|
243
|
+
* @param binding - Token binding with template variables
|
|
244
|
+
* @returns Array of template variable names
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```typescript
|
|
248
|
+
* extractTemplateVariables('component.button.{variant}.{size}.background');
|
|
249
|
+
* // → ['variant', 'size']
|
|
250
|
+
*
|
|
251
|
+
* extractTemplateVariables('atomic.spacing.16');
|
|
252
|
+
* // → []
|
|
253
|
+
* ```
|
|
254
|
+
*/
|
|
255
|
+
export function extractTemplateVariables(binding) {
|
|
256
|
+
const templateVarRegex = /\{([^}]+)\}/g;
|
|
257
|
+
const matches = [...binding.matchAll(templateVarRegex)];
|
|
258
|
+
return matches.map(match => match[1]);
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=token-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-resolver.js","sourceRoot":"","sources":["../../../src/screen-generation/resolver/token-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tekton-ui/core - Screen Definition Type Definitions
|
|
3
|
+
* Type-safe screen definition interfaces for declarative screen generation
|
|
4
|
+
* [SPEC-LAYOUT-002] [PHASE-1]
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Component type enum - 20 component types from SPEC-COMPONENT-001-B
|
|
8
|
+
* Primitive: Button, Input, Text, Heading, Checkbox, Radio, Switch, Slider, Badge, Avatar
|
|
9
|
+
* Composed: Card, Modal, Tabs, Table, Link, List, Image, Form, Dropdown, Progress
|
|
10
|
+
*/
|
|
11
|
+
export type ComponentType = 'Button' | 'Input' | 'Text' | 'Heading' | 'Checkbox' | 'Radio' | 'Switch' | 'Slider' | 'Badge' | 'Avatar' | 'Card' | 'Modal' | 'Tabs' | 'Table' | 'Link' | 'List' | 'Image' | 'Form' | 'Dropdown' | 'Progress';
|
|
12
|
+
/**
|
|
13
|
+
* Component Definition - Specifies a component instance
|
|
14
|
+
* Supports nested children and slot-based layout assignment
|
|
15
|
+
*/
|
|
16
|
+
export interface ComponentDefinition {
|
|
17
|
+
/** Component type from the 20 available component types */
|
|
18
|
+
type: ComponentType;
|
|
19
|
+
/** Component props (key-value pairs) */
|
|
20
|
+
props: Record<string, unknown>;
|
|
21
|
+
/** Child components or text content */
|
|
22
|
+
children?: (ComponentDefinition | string)[];
|
|
23
|
+
/** Layout slot assignment for positioning within section */
|
|
24
|
+
slot?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Responsive Overrides - Section-level responsive configuration
|
|
28
|
+
* Allows breakpoint-specific layout adjustments
|
|
29
|
+
*/
|
|
30
|
+
export interface ResponsiveOverrides {
|
|
31
|
+
/** Small devices override (640px+) */
|
|
32
|
+
sm?: Record<string, unknown>;
|
|
33
|
+
/** Medium devices override (768px+) */
|
|
34
|
+
md?: Record<string, unknown>;
|
|
35
|
+
/** Large devices override (1024px+) */
|
|
36
|
+
lg?: Record<string, unknown>;
|
|
37
|
+
/** Extra large devices override (1280px+) */
|
|
38
|
+
xl?: Record<string, unknown>;
|
|
39
|
+
/** 2X large devices override (1536px+) */
|
|
40
|
+
'2xl'?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Section Definition - Layout section with components
|
|
44
|
+
* Represents a section pattern instance with components
|
|
45
|
+
*/
|
|
46
|
+
export interface SectionDefinition {
|
|
47
|
+
/** Section identifier (unique within screen) */
|
|
48
|
+
id: string;
|
|
49
|
+
/** Section pattern token ID (e.g., "section.grid-4") */
|
|
50
|
+
pattern: string;
|
|
51
|
+
/** Components within this section */
|
|
52
|
+
components: ComponentDefinition[];
|
|
53
|
+
/** Responsive overrides for this section */
|
|
54
|
+
responsive?: ResponsiveOverrides;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Screen Metadata - Optional metadata for screen definition
|
|
58
|
+
* Tracks authorship, versioning, and categorization
|
|
59
|
+
*/
|
|
60
|
+
export interface ScreenMeta {
|
|
61
|
+
/** Screen author */
|
|
62
|
+
author?: string;
|
|
63
|
+
/** Creation timestamp (ISO 8601) */
|
|
64
|
+
createdAt?: string;
|
|
65
|
+
/** Screen version (semver) */
|
|
66
|
+
version?: string;
|
|
67
|
+
/** Categorization tags */
|
|
68
|
+
tags?: string[];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Screen Definition - Complete declarative screen specification
|
|
72
|
+
* Defines a screen using layout tokens and component definitions
|
|
73
|
+
*/
|
|
74
|
+
export interface ScreenDefinition {
|
|
75
|
+
/** Unique screen identifier (kebab-case) */
|
|
76
|
+
id: string;
|
|
77
|
+
/** Human-readable screen name */
|
|
78
|
+
name: string;
|
|
79
|
+
/** Optional screen description */
|
|
80
|
+
description?: string;
|
|
81
|
+
/** Shell token ID (e.g., "shell.web.dashboard") */
|
|
82
|
+
shell: string;
|
|
83
|
+
/** Page layout token ID (e.g., "page.dashboard") */
|
|
84
|
+
page: string;
|
|
85
|
+
/** Theme ID for token resolution (default: "default") */
|
|
86
|
+
themeId?: string;
|
|
87
|
+
/** Section definitions that make up the screen */
|
|
88
|
+
sections: SectionDefinition[];
|
|
89
|
+
/** Optional metadata */
|
|
90
|
+
meta?: ScreenMeta;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Type guard to check if value is a ComponentDefinition
|
|
94
|
+
*/
|
|
95
|
+
export declare function isComponentDefinition(value: unknown): value is ComponentDefinition;
|
|
96
|
+
/**
|
|
97
|
+
* Type guard to check if value is a ScreenDefinition
|
|
98
|
+
*/
|
|
99
|
+
export declare function isScreenDefinition(value: unknown): value is ScreenDefinition;
|
|
100
|
+
/**
|
|
101
|
+
* Validation context for screen definitions
|
|
102
|
+
* Used during validation to provide additional context
|
|
103
|
+
*/
|
|
104
|
+
export interface ValidationContext {
|
|
105
|
+
/** Available shell token IDs */
|
|
106
|
+
availableShells?: string[];
|
|
107
|
+
/** Available page token IDs */
|
|
108
|
+
availablePages?: string[];
|
|
109
|
+
/** Available section pattern token IDs */
|
|
110
|
+
availableSections?: string[];
|
|
111
|
+
/** Available theme IDs */
|
|
112
|
+
availableThemes?: string[];
|
|
113
|
+
/** Strict mode - fail on warnings */
|
|
114
|
+
strict?: boolean;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/screen-generation/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @tekton-ui/core - Screen Definition Type Definitions
|
|
3
|
+
* Type-safe screen definition interfaces for declarative screen generation
|
|
4
|
+
* [SPEC-LAYOUT-002] [PHASE-1]
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Type Guards
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Type guard to check if value is a ComponentDefinition
|
|
11
|
+
*/
|
|
12
|
+
export function isComponentDefinition(value) {
|
|
13
|
+
if (typeof value !== 'object' || value === null) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const obj = value;
|
|
17
|
+
return typeof obj.type === 'string' && typeof obj.props === 'object';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Type guard to check if value is a ScreenDefinition
|
|
21
|
+
*/
|
|
22
|
+
export function isScreenDefinition(value) {
|
|
23
|
+
if (typeof value !== 'object' || value === null) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
const obj = value;
|
|
27
|
+
return (typeof obj.id === 'string' &&
|
|
28
|
+
typeof obj.name === 'string' &&
|
|
29
|
+
typeof obj.shell === 'string' &&
|
|
30
|
+
typeof obj.page === 'string' &&
|
|
31
|
+
Array.isArray(obj.sections));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/screen-generation/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4IH,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;QAC1B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC7B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAC5B,CAAC;AACJ,CAAC"}
|