@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.
Files changed (254) hide show
  1. package/README.md +758 -0
  2. package/dist/blueprint.d.ts +44 -0
  3. package/dist/blueprint.d.ts.map +1 -0
  4. package/dist/blueprint.js +163 -0
  5. package/dist/blueprint.js.map +1 -0
  6. package/dist/component-schemas.d.ts +78 -0
  7. package/dist/component-schemas.d.ts.map +1 -0
  8. package/dist/component-schemas.js +1037 -0
  9. package/dist/component-schemas.js.map +1 -0
  10. package/dist/css-generator.d.ts +42 -0
  11. package/dist/css-generator.d.ts.map +1 -0
  12. package/dist/css-generator.js +339 -0
  13. package/dist/css-generator.js.map +1 -0
  14. package/dist/icon-library.d.ts +109 -0
  15. package/dist/icon-library.d.ts.map +1 -0
  16. package/dist/icon-library.js +204 -0
  17. package/dist/icon-library.js.map +1 -0
  18. package/dist/index.d.ts +36 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +51 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/layout-css-generator.d.ts +158 -0
  23. package/dist/layout-css-generator.d.ts.map +1 -0
  24. package/dist/layout-css-generator.js +901 -0
  25. package/dist/layout-css-generator.js.map +1 -0
  26. package/dist/layout-resolver.d.ts +92 -0
  27. package/dist/layout-resolver.d.ts.map +1 -0
  28. package/dist/layout-resolver.js +275 -0
  29. package/dist/layout-resolver.js.map +1 -0
  30. package/dist/layout-tokens/index.d.ts +16 -0
  31. package/dist/layout-tokens/index.d.ts.map +1 -0
  32. package/dist/layout-tokens/index.js +16 -0
  33. package/dist/layout-tokens/index.js.map +1 -0
  34. package/dist/layout-tokens/keyboard.d.ts +254 -0
  35. package/dist/layout-tokens/keyboard.d.ts.map +1 -0
  36. package/dist/layout-tokens/keyboard.js +407 -0
  37. package/dist/layout-tokens/keyboard.js.map +1 -0
  38. package/dist/layout-tokens/mobile-shells.d.ts +78 -0
  39. package/dist/layout-tokens/mobile-shells.d.ts.map +1 -0
  40. package/dist/layout-tokens/mobile-shells.js +635 -0
  41. package/dist/layout-tokens/mobile-shells.js.map +1 -0
  42. package/dist/layout-tokens/pages.d.ts +100 -0
  43. package/dist/layout-tokens/pages.d.ts.map +1 -0
  44. package/dist/layout-tokens/pages.js +576 -0
  45. package/dist/layout-tokens/pages.js.map +1 -0
  46. package/dist/layout-tokens/responsive.d.ts +109 -0
  47. package/dist/layout-tokens/responsive.d.ts.map +1 -0
  48. package/dist/layout-tokens/responsive.js +167 -0
  49. package/dist/layout-tokens/responsive.js.map +1 -0
  50. package/dist/layout-tokens/safe-area.d.ts +156 -0
  51. package/dist/layout-tokens/safe-area.d.ts.map +1 -0
  52. package/dist/layout-tokens/safe-area.js +316 -0
  53. package/dist/layout-tokens/safe-area.js.map +1 -0
  54. package/dist/layout-tokens/sections-advanced.d.ts +277 -0
  55. package/dist/layout-tokens/sections-advanced.d.ts.map +1 -0
  56. package/dist/layout-tokens/sections-advanced.js +593 -0
  57. package/dist/layout-tokens/sections-advanced.js.map +1 -0
  58. package/dist/layout-tokens/sections.d.ts +137 -0
  59. package/dist/layout-tokens/sections.d.ts.map +1 -0
  60. package/dist/layout-tokens/sections.js +694 -0
  61. package/dist/layout-tokens/sections.js.map +1 -0
  62. package/dist/layout-tokens/shells.d.ts +77 -0
  63. package/dist/layout-tokens/shells.d.ts.map +1 -0
  64. package/dist/layout-tokens/shells.js +408 -0
  65. package/dist/layout-tokens/shells.js.map +1 -0
  66. package/dist/layout-tokens/touch-target.d.ts +119 -0
  67. package/dist/layout-tokens/touch-target.d.ts.map +1 -0
  68. package/dist/layout-tokens/touch-target.js +156 -0
  69. package/dist/layout-tokens/touch-target.js.map +1 -0
  70. package/dist/layout-tokens/types.d.ts +632 -0
  71. package/dist/layout-tokens/types.d.ts.map +1 -0
  72. package/dist/layout-tokens/types.js +49 -0
  73. package/dist/layout-tokens/types.js.map +1 -0
  74. package/dist/layout-validation.d.ts +1547 -0
  75. package/dist/layout-validation.d.ts.map +1 -0
  76. package/dist/layout-validation.js +628 -0
  77. package/dist/layout-validation.js.map +1 -0
  78. package/dist/render.d.ts +23 -0
  79. package/dist/render.d.ts.map +1 -0
  80. package/dist/render.js +244 -0
  81. package/dist/render.js.map +1 -0
  82. package/dist/schema-validation.d.ts +208 -0
  83. package/dist/schema-validation.d.ts.map +1 -0
  84. package/dist/schema-validation.js +205 -0
  85. package/dist/schema-validation.js.map +1 -0
  86. package/dist/screen-generation/generators/css-in-js-generator.d.ts +82 -0
  87. package/dist/screen-generation/generators/css-in-js-generator.d.ts.map +1 -0
  88. package/dist/screen-generation/generators/css-in-js-generator.js +335 -0
  89. package/dist/screen-generation/generators/css-in-js-generator.js.map +1 -0
  90. package/dist/screen-generation/generators/index.d.ts +13 -0
  91. package/dist/screen-generation/generators/index.d.ts.map +1 -0
  92. package/dist/screen-generation/generators/index.js +32 -0
  93. package/dist/screen-generation/generators/index.js.map +1 -0
  94. package/dist/screen-generation/generators/react-generator.d.ts +100 -0
  95. package/dist/screen-generation/generators/react-generator.d.ts.map +1 -0
  96. package/dist/screen-generation/generators/react-generator.js +379 -0
  97. package/dist/screen-generation/generators/react-generator.js.map +1 -0
  98. package/dist/screen-generation/generators/tailwind-generator.d.ts +105 -0
  99. package/dist/screen-generation/generators/tailwind-generator.d.ts.map +1 -0
  100. package/dist/screen-generation/generators/tailwind-generator.js +355 -0
  101. package/dist/screen-generation/generators/tailwind-generator.js.map +1 -0
  102. package/dist/screen-generation/generators/types.d.ts +136 -0
  103. package/dist/screen-generation/generators/types.d.ts.map +1 -0
  104. package/dist/screen-generation/generators/types.js +18 -0
  105. package/dist/screen-generation/generators/types.js.map +1 -0
  106. package/dist/screen-generation/generators/utils.d.ts +187 -0
  107. package/dist/screen-generation/generators/utils.d.ts.map +1 -0
  108. package/dist/screen-generation/generators/utils.js +312 -0
  109. package/dist/screen-generation/generators/utils.js.map +1 -0
  110. package/dist/screen-generation/index.d.ts +14 -0
  111. package/dist/screen-generation/index.d.ts.map +1 -0
  112. package/dist/screen-generation/index.js +33 -0
  113. package/dist/screen-generation/index.js.map +1 -0
  114. package/dist/screen-generation/resolver/component-resolver.d.ts +157 -0
  115. package/dist/screen-generation/resolver/component-resolver.d.ts.map +1 -0
  116. package/dist/screen-generation/resolver/component-resolver.js +295 -0
  117. package/dist/screen-generation/resolver/component-resolver.js.map +1 -0
  118. package/dist/screen-generation/resolver/index.d.ts +10 -0
  119. package/dist/screen-generation/resolver/index.d.ts.map +1 -0
  120. package/dist/screen-generation/resolver/index.js +46 -0
  121. package/dist/screen-generation/resolver/index.js.map +1 -0
  122. package/dist/screen-generation/resolver/layout-resolver.d.ts +155 -0
  123. package/dist/screen-generation/resolver/layout-resolver.d.ts.map +1 -0
  124. package/dist/screen-generation/resolver/layout-resolver.js +193 -0
  125. package/dist/screen-generation/resolver/layout-resolver.js.map +1 -0
  126. package/dist/screen-generation/resolver/screen-resolver.d.ts +174 -0
  127. package/dist/screen-generation/resolver/screen-resolver.d.ts.map +1 -0
  128. package/dist/screen-generation/resolver/screen-resolver.js +373 -0
  129. package/dist/screen-generation/resolver/screen-resolver.js.map +1 -0
  130. package/dist/screen-generation/resolver/token-resolver.d.ts +170 -0
  131. package/dist/screen-generation/resolver/token-resolver.d.ts.map +1 -0
  132. package/dist/screen-generation/resolver/token-resolver.js +260 -0
  133. package/dist/screen-generation/resolver/token-resolver.js.map +1 -0
  134. package/dist/screen-generation/types.d.ts +116 -0
  135. package/dist/screen-generation/types.d.ts.map +1 -0
  136. package/dist/screen-generation/types.js +33 -0
  137. package/dist/screen-generation/types.js.map +1 -0
  138. package/dist/screen-generation/validators.d.ts +286 -0
  139. package/dist/screen-generation/validators.d.ts.map +1 -0
  140. package/dist/screen-generation/validators.js +323 -0
  141. package/dist/screen-generation/validators.js.map +1 -0
  142. package/dist/screen-templates/__tests__/registry.test.d.ts +6 -0
  143. package/dist/screen-templates/__tests__/registry.test.d.ts.map +1 -0
  144. package/dist/screen-templates/__tests__/registry.test.js +247 -0
  145. package/dist/screen-templates/__tests__/registry.test.js.map +1 -0
  146. package/dist/screen-templates/__tests__/templates.test.d.ts +6 -0
  147. package/dist/screen-templates/__tests__/templates.test.d.ts.map +1 -0
  148. package/dist/screen-templates/__tests__/templates.test.js +179 -0
  149. package/dist/screen-templates/__tests__/templates.test.js.map +1 -0
  150. package/dist/screen-templates/index.d.ts +39 -0
  151. package/dist/screen-templates/index.d.ts.map +1 -0
  152. package/dist/screen-templates/index.js +79 -0
  153. package/dist/screen-templates/index.js.map +1 -0
  154. package/dist/screen-templates/registry.d.ts +177 -0
  155. package/dist/screen-templates/registry.d.ts.map +1 -0
  156. package/dist/screen-templates/registry.js +274 -0
  157. package/dist/screen-templates/registry.js.map +1 -0
  158. package/dist/screen-templates/templates/account/index.d.ts +6 -0
  159. package/dist/screen-templates/templates/account/index.d.ts.map +1 -0
  160. package/dist/screen-templates/templates/account/index.js +6 -0
  161. package/dist/screen-templates/templates/account/index.js.map +1 -0
  162. package/dist/screen-templates/templates/account/profile.d.ts +23 -0
  163. package/dist/screen-templates/templates/account/profile.d.ts.map +1 -0
  164. package/dist/screen-templates/templates/account/profile.js +249 -0
  165. package/dist/screen-templates/templates/account/profile.js.map +1 -0
  166. package/dist/screen-templates/templates/auth/forgot-password.d.ts +23 -0
  167. package/dist/screen-templates/templates/auth/forgot-password.d.ts.map +1 -0
  168. package/dist/screen-templates/templates/auth/forgot-password.js +203 -0
  169. package/dist/screen-templates/templates/auth/forgot-password.js.map +1 -0
  170. package/dist/screen-templates/templates/auth/index.d.ts +9 -0
  171. package/dist/screen-templates/templates/auth/index.d.ts.map +1 -0
  172. package/dist/screen-templates/templates/auth/index.js +9 -0
  173. package/dist/screen-templates/templates/auth/index.js.map +1 -0
  174. package/dist/screen-templates/templates/auth/login.d.ts +24 -0
  175. package/dist/screen-templates/templates/auth/login.d.ts.map +1 -0
  176. package/dist/screen-templates/templates/auth/login.js +254 -0
  177. package/dist/screen-templates/templates/auth/login.js.map +1 -0
  178. package/dist/screen-templates/templates/auth/signup.d.ts +24 -0
  179. package/dist/screen-templates/templates/auth/signup.d.ts.map +1 -0
  180. package/dist/screen-templates/templates/auth/signup.js +315 -0
  181. package/dist/screen-templates/templates/auth/signup.js.map +1 -0
  182. package/dist/screen-templates/templates/auth/verification.d.ts +23 -0
  183. package/dist/screen-templates/templates/auth/verification.d.ts.map +1 -0
  184. package/dist/screen-templates/templates/auth/verification.js +239 -0
  185. package/dist/screen-templates/templates/auth/verification.js.map +1 -0
  186. package/dist/screen-templates/templates/feedback/confirmation.d.ts +9 -0
  187. package/dist/screen-templates/templates/feedback/confirmation.d.ts.map +1 -0
  188. package/dist/screen-templates/templates/feedback/confirmation.js +107 -0
  189. package/dist/screen-templates/templates/feedback/confirmation.js.map +1 -0
  190. package/dist/screen-templates/templates/feedback/empty.d.ts +9 -0
  191. package/dist/screen-templates/templates/feedback/empty.d.ts.map +1 -0
  192. package/dist/screen-templates/templates/feedback/empty.js +90 -0
  193. package/dist/screen-templates/templates/feedback/empty.js.map +1 -0
  194. package/dist/screen-templates/templates/feedback/error.d.ts +9 -0
  195. package/dist/screen-templates/templates/feedback/error.d.ts.map +1 -0
  196. package/dist/screen-templates/templates/feedback/error.js +99 -0
  197. package/dist/screen-templates/templates/feedback/error.js.map +1 -0
  198. package/dist/screen-templates/templates/feedback/index.d.ts +10 -0
  199. package/dist/screen-templates/templates/feedback/index.d.ts.map +1 -0
  200. package/dist/screen-templates/templates/feedback/index.js +10 -0
  201. package/dist/screen-templates/templates/feedback/index.js.map +1 -0
  202. package/dist/screen-templates/templates/feedback/loading.d.ts +9 -0
  203. package/dist/screen-templates/templates/feedback/loading.d.ts.map +1 -0
  204. package/dist/screen-templates/templates/feedback/loading.js +77 -0
  205. package/dist/screen-templates/templates/feedback/loading.js.map +1 -0
  206. package/dist/screen-templates/templates/feedback/success.d.ts +9 -0
  207. package/dist/screen-templates/templates/feedback/success.d.ts.map +1 -0
  208. package/dist/screen-templates/templates/feedback/success.js +99 -0
  209. package/dist/screen-templates/templates/feedback/success.js.map +1 -0
  210. package/dist/screen-templates/templates/home/index.d.ts +6 -0
  211. package/dist/screen-templates/templates/home/index.d.ts.map +1 -0
  212. package/dist/screen-templates/templates/home/index.js +6 -0
  213. package/dist/screen-templates/templates/home/index.js.map +1 -0
  214. package/dist/screen-templates/templates/home/landing.d.ts +24 -0
  215. package/dist/screen-templates/templates/home/landing.d.ts.map +1 -0
  216. package/dist/screen-templates/templates/home/landing.js +197 -0
  217. package/dist/screen-templates/templates/home/landing.js.map +1 -0
  218. package/dist/screen-templates/templates/settings/index.d.ts +6 -0
  219. package/dist/screen-templates/templates/settings/index.d.ts.map +1 -0
  220. package/dist/screen-templates/templates/settings/index.js +6 -0
  221. package/dist/screen-templates/templates/settings/index.js.map +1 -0
  222. package/dist/screen-templates/templates/settings/preferences.d.ts +24 -0
  223. package/dist/screen-templates/templates/settings/preferences.d.ts.map +1 -0
  224. package/dist/screen-templates/templates/settings/preferences.js +265 -0
  225. package/dist/screen-templates/templates/settings/preferences.js.map +1 -0
  226. package/dist/screen-templates/types.d.ts +229 -0
  227. package/dist/screen-templates/types.d.ts.map +1 -0
  228. package/dist/screen-templates/types.js +7 -0
  229. package/dist/screen-templates/types.js.map +1 -0
  230. package/dist/theme-v2.d.ts +228 -0
  231. package/dist/theme-v2.d.ts.map +1 -0
  232. package/dist/theme-v2.js +158 -0
  233. package/dist/theme-v2.js.map +1 -0
  234. package/dist/theme.d.ts +60 -0
  235. package/dist/theme.d.ts.map +1 -0
  236. package/dist/theme.js +76 -0
  237. package/dist/theme.js.map +1 -0
  238. package/dist/token-resolver.d.ts +69 -0
  239. package/dist/token-resolver.d.ts.map +1 -0
  240. package/dist/token-resolver.js +122 -0
  241. package/dist/token-resolver.js.map +1 -0
  242. package/dist/token-validation.d.ts +432 -0
  243. package/dist/token-validation.d.ts.map +1 -0
  244. package/dist/token-validation.js +140 -0
  245. package/dist/token-validation.js.map +1 -0
  246. package/dist/tokens.d.ts +158 -0
  247. package/dist/tokens.d.ts.map +1 -0
  248. package/dist/tokens.js +10 -0
  249. package/dist/tokens.js.map +1 -0
  250. package/dist/types.d.ts +77 -0
  251. package/dist/types.d.ts.map +1 -0
  252. package/dist/types.js +7 -0
  253. package/dist/types.js.map +1 -0
  254. package/package.json +53 -0
@@ -0,0 +1,373 @@
1
+ /**
2
+ * @tekton-ui/core - Screen Resolver
3
+ * Main entry point for resolving screen definitions to complete screen structures
4
+ * [SPEC-LAYOUT-002] [PHASE-2]
5
+ */
6
+ import { resolveShell, resolvePage, resolveSection, } from './layout-resolver.js';
7
+ import { resolveComponent, } from './component-resolver.js';
8
+ import { tokenRefToCSSVar } from './token-resolver.js';
9
+ // ============================================================================
10
+ // Cache
11
+ // ============================================================================
12
+ /**
13
+ * Screen resolution cache
14
+ * Key: `${screenId}:${themeId}`
15
+ */
16
+ const screenCache = new Map();
17
+ /**
18
+ * Clear screen resolution cache
19
+ * Useful for testing or when screen definitions change
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * clearScreenCache();
24
+ * ```
25
+ */
26
+ export function clearScreenCache() {
27
+ screenCache.clear();
28
+ }
29
+ // ============================================================================
30
+ // Component Tree Building
31
+ // ============================================================================
32
+ /**
33
+ * Build component tree node from resolved component
34
+ *
35
+ * @param component - Resolved component
36
+ * @returns Component tree node
37
+ */
38
+ function buildComponentTreeNode(component) {
39
+ const node = {
40
+ type: component.type,
41
+ slot: component.slot,
42
+ };
43
+ if (component.children && component.children.length > 0) {
44
+ node.children = component.children
45
+ .filter((child) => typeof child !== 'string')
46
+ .map(child => buildComponentTreeNode(child));
47
+ }
48
+ return node;
49
+ }
50
+ /**
51
+ * Build complete component tree from resolved sections
52
+ *
53
+ * @param sections - Resolved sections with components
54
+ * @returns Component tree structure
55
+ */
56
+ function buildComponentTree(sections) {
57
+ return {
58
+ sections: sections.map(section => ({
59
+ sectionId: section.id,
60
+ components: section.components.map(component => buildComponentTreeNode(component)),
61
+ })),
62
+ };
63
+ }
64
+ // ============================================================================
65
+ // CSS Variables Generation
66
+ // ============================================================================
67
+ /**
68
+ * Merge CSS variables from multiple layouts
69
+ *
70
+ * Combines CSS variables from shell, page, and section layouts
71
+ * into a single global CSS variable map.
72
+ *
73
+ * @param shell - Resolved shell layout
74
+ * @param page - Resolved page layout
75
+ * @param sections - Resolved sections
76
+ * @returns Merged CSS variables
77
+ */
78
+ function mergeCSSVariables(shell, page, sections) {
79
+ const merged = {};
80
+ // Add shell CSS variables
81
+ Object.assign(merged, shell.cssVariables);
82
+ // Add page CSS variables
83
+ Object.assign(merged, page.cssVariables);
84
+ // Add section CSS variables
85
+ for (const section of sections) {
86
+ Object.assign(merged, section.cssVariables);
87
+ }
88
+ return merged;
89
+ }
90
+ /**
91
+ * Generate CSS variables from token references in layout
92
+ *
93
+ * Extracts all token references from layout structure and
94
+ * generates CSS variable declarations.
95
+ *
96
+ * @param layout - Resolved layout
97
+ * @returns CSS variables map
98
+ */
99
+ function generateLayoutCSSVariables(layout) {
100
+ const cssVars = {};
101
+ // Extract token references from layout
102
+ const extractTokens = (obj) => {
103
+ if (typeof obj === 'string' && /^[a-z]+\.[a-z-]+(\.[a-z0-9-]+)*$/.test(obj)) {
104
+ // This is a token reference
105
+ const cssVarName = tokenRefToCSSVar(obj);
106
+ cssVars[cssVarName] = obj;
107
+ }
108
+ else if (typeof obj === 'object' && obj !== null) {
109
+ for (const value of Object.values(obj)) {
110
+ extractTokens(value);
111
+ }
112
+ }
113
+ };
114
+ extractTokens(layout);
115
+ return cssVars;
116
+ }
117
+ // ============================================================================
118
+ // Core Resolution Functions
119
+ // ============================================================================
120
+ /**
121
+ * Resolve section definition to complete resolved section
122
+ *
123
+ * Process:
124
+ * 1. Resolve section pattern layout
125
+ * 2. Resolve all components in section
126
+ * 3. Generate CSS variables
127
+ *
128
+ * @param section - Section definition to resolve
129
+ * @param screenId - Screen ID for error messages
130
+ * @param theme - Theme ID for token resolution
131
+ * @returns Resolved section with layout and components
132
+ */
133
+ function resolveScreenSection(section, screenId, theme) {
134
+ // Create layout context
135
+ const layoutContext = {
136
+ screenId,
137
+ layoutType: 'section',
138
+ meta: {
139
+ sectionId: section.id,
140
+ },
141
+ };
142
+ // Resolve section pattern layout
143
+ let layout;
144
+ try {
145
+ layout = resolveSection(section.pattern, layoutContext);
146
+ }
147
+ catch (error) {
148
+ throw new Error(`Failed to resolve section '${section.id}' (pattern: ${section.pattern}): ${error instanceof Error ? error.message : String(error)}`);
149
+ }
150
+ // Create component context
151
+ const componentContext = {
152
+ theme,
153
+ screenId,
154
+ sectionId: section.id,
155
+ };
156
+ // Resolve all components in section
157
+ const components = [];
158
+ for (let i = 0; i < section.components.length; i++) {
159
+ try {
160
+ const resolved = resolveComponent(section.components[i], componentContext);
161
+ components.push(resolved);
162
+ }
163
+ catch (error) {
164
+ throw new Error(`Failed to resolve component at index ${i} in section '${section.id}': ${error instanceof Error ? error.message : String(error)}`);
165
+ }
166
+ }
167
+ // Generate CSS variables from layout
168
+ const cssVariables = generateLayoutCSSVariables(layout);
169
+ return {
170
+ id: section.id,
171
+ layout,
172
+ components,
173
+ cssVariables,
174
+ };
175
+ }
176
+ /**
177
+ * Resolve screen definition to complete resolved screen structure
178
+ *
179
+ * Main entry point for screen resolution. Performs complete resolution:
180
+ * 1. Validate screen definition
181
+ * 2. Resolve shell layout
182
+ * 3. Resolve page layout
183
+ * 4. Resolve all sections with layouts and components
184
+ * 5. Generate global CSS variables
185
+ * 6. Build component tree
186
+ *
187
+ * Performance: <5ms for typical screen resolution (cached after first call)
188
+ *
189
+ * @param screen - Screen definition to resolve
190
+ * @returns Complete resolved screen structure
191
+ * @throws Error if resolution fails at any stage
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * const screen = {
196
+ * id: 'dashboard-screen',
197
+ * name: 'Dashboard',
198
+ * shell: 'shell.web.dashboard',
199
+ * page: 'page.dashboard',
200
+ * themeId: 'default',
201
+ * sections: [
202
+ * {
203
+ * id: 'stats',
204
+ * pattern: 'section.grid-4',
205
+ * components: [
206
+ * { type: 'Card', props: { children: 'Stats' } }
207
+ * ]
208
+ * }
209
+ * ]
210
+ * };
211
+ *
212
+ * const resolved = resolveScreen(screen);
213
+ * console.log(resolved.shell.shell?.description);
214
+ * console.log(resolved.sections[0].components[0].tokenBindings);
215
+ * ```
216
+ */
217
+ export function resolveScreen(screen) {
218
+ const startTime = performance.now();
219
+ // Use default theme if not specified
220
+ const themeId = screen.themeId || 'default';
221
+ // Check cache
222
+ const cacheKey = `${screen.id}:${themeId}`;
223
+ const cached = screenCache.get(cacheKey);
224
+ if (cached) {
225
+ return cached;
226
+ }
227
+ // Create layout context for shell
228
+ const shellContext = {
229
+ screenId: screen.id,
230
+ layoutType: 'shell',
231
+ };
232
+ // Resolve shell layout
233
+ let shell;
234
+ try {
235
+ shell = resolveShell(screen.shell, shellContext);
236
+ }
237
+ catch (error) {
238
+ throw new Error(`Failed to resolve shell for screen '${screen.id}': ${error instanceof Error ? error.message : String(error)}`);
239
+ }
240
+ // Create layout context for page
241
+ const pageContext = {
242
+ screenId: screen.id,
243
+ layoutType: 'page',
244
+ };
245
+ // Resolve page layout
246
+ let page;
247
+ try {
248
+ page = resolvePage(screen.page, pageContext);
249
+ }
250
+ catch (error) {
251
+ throw new Error(`Failed to resolve page for screen '${screen.id}': ${error instanceof Error ? error.message : String(error)}`);
252
+ }
253
+ // Resolve all sections
254
+ const sections = [];
255
+ for (let i = 0; i < screen.sections.length; i++) {
256
+ try {
257
+ const resolved = resolveScreenSection(screen.sections[i], screen.id, themeId);
258
+ sections.push(resolved);
259
+ }
260
+ catch (error) {
261
+ throw new Error(`Failed to resolve section at index ${i}: ${error instanceof Error ? error.message : String(error)}`);
262
+ }
263
+ }
264
+ // Merge CSS variables from all layouts
265
+ const cssVariables = mergeCSSVariables(shell, page, sections);
266
+ // Build component tree
267
+ const componentTree = buildComponentTree(sections);
268
+ // Create resolved screen
269
+ const resolved = {
270
+ id: screen.id,
271
+ name: screen.name,
272
+ description: screen.description,
273
+ shell,
274
+ page,
275
+ sections,
276
+ cssVariables,
277
+ componentTree,
278
+ meta: screen.meta,
279
+ themeId,
280
+ };
281
+ // Cache result
282
+ screenCache.set(cacheKey, resolved);
283
+ // Performance logging
284
+ const endTime = performance.now();
285
+ const duration = endTime - startTime;
286
+ if (duration > 5) {
287
+ console.warn(`Screen resolution for '${screen.id}' took ${duration.toFixed(2)}ms (target: <5ms). ` +
288
+ `Consider optimizing layout or component complexity.`);
289
+ }
290
+ return resolved;
291
+ }
292
+ // ============================================================================
293
+ // Validation Utilities
294
+ // ============================================================================
295
+ /**
296
+ * Validate resolved screen structure
297
+ *
298
+ * Checks:
299
+ * - Shell layout is present
300
+ * - Page layout is present
301
+ * - All sections have layouts and components
302
+ * - CSS variables are generated
303
+ * - Component tree is built
304
+ *
305
+ * @param resolved - Resolved screen to validate
306
+ * @returns True if valid, false otherwise
307
+ *
308
+ * @example
309
+ * ```typescript
310
+ * const resolved = resolveScreen(screenDefinition);
311
+ * if (isValidResolvedScreen(resolved)) {
312
+ * // Ready to render
313
+ * }
314
+ * ```
315
+ */
316
+ export function isValidResolvedScreen(resolved) {
317
+ if (typeof resolved !== 'object' || resolved === null) {
318
+ return false;
319
+ }
320
+ const obj = resolved;
321
+ // Check required fields
322
+ if (typeof obj.id !== 'string' ||
323
+ typeof obj.name !== 'string' ||
324
+ typeof obj.shell !== 'object' ||
325
+ typeof obj.page !== 'object' ||
326
+ !Array.isArray(obj.sections) ||
327
+ typeof obj.cssVariables !== 'object' ||
328
+ typeof obj.componentTree !== 'object') {
329
+ return false;
330
+ }
331
+ return true;
332
+ }
333
+ /**
334
+ * Get screen resolution statistics
335
+ *
336
+ * Provides insights into resolved screen structure:
337
+ * - Total component count
338
+ * - Component types used
339
+ * - Section count
340
+ * - CSS variable count
341
+ *
342
+ * @param resolved - Resolved screen
343
+ * @returns Statistics object
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * const resolved = resolveScreen(screenDefinition);
348
+ * const stats = getScreenStats(resolved);
349
+ * console.log(`Components: ${stats.componentCount}`);
350
+ * console.log(`CSS Variables: ${stats.cssVariableCount}`);
351
+ * ```
352
+ */
353
+ export function getScreenStats(resolved) {
354
+ let componentCount = 0;
355
+ const componentTypes = new Set();
356
+ const countComponents = (node) => {
357
+ componentCount++;
358
+ componentTypes.add(node.type);
359
+ if (node.children) {
360
+ node.children.forEach(countComponents);
361
+ }
362
+ };
363
+ resolved.componentTree.sections.forEach(section => {
364
+ section.components.forEach(countComponents);
365
+ });
366
+ return {
367
+ componentCount,
368
+ componentTypes,
369
+ sectionCount: resolved.sections.length,
370
+ cssVariableCount: Object.keys(resolved.cssVariables).length,
371
+ };
372
+ }
373
+ //# sourceMappingURL=screen-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-resolver.js","sourceRoot":"","sources":["../../../src/screen-generation/resolver/screen-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @tekton-ui/core - Token Binding Resolver
3
+ * Resolves token bindings with template variable substitution
4
+ * [SPEC-LAYOUT-002] [PHASE-2]
5
+ */
6
+ import type { TokenBindings } from '../../component-schemas.js';
7
+ /**
8
+ * Token binding resolution context
9
+ * Contains component props and theme for template variable substitution
10
+ */
11
+ export interface TokenBindingContext {
12
+ /** Component props for template variable substitution */
13
+ props: Record<string, unknown>;
14
+ /** Theme ID for token resolution */
15
+ theme: string;
16
+ }
17
+ /**
18
+ * Resolved token bindings map
19
+ * Maps property names to CSS variable references
20
+ */
21
+ export type ResolvedTokenBindings = Record<string, string>;
22
+ /**
23
+ * Clear token binding cache
24
+ * Useful for testing or when token definitions change
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * clearBindingCache();
29
+ * ```
30
+ */
31
+ export declare function clearBindingCache(): void;
32
+ /**
33
+ * Substitute template variables in token binding
34
+ *
35
+ * Template syntax: `{variableName}`
36
+ * Variables are resolved from component props
37
+ *
38
+ * @param binding - Token binding with template variables (e.g., "component.button.{variant}.background")
39
+ * @param props - Component props (e.g., { variant: "primary" })
40
+ * @returns Token reference with substituted variables (e.g., "component.button.primary.background")
41
+ * @throws Error if required template variable is missing from props
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * substituteTemplateVariables(
46
+ * 'component.button.{variant}.background',
47
+ * { variant: 'primary' }
48
+ * ); // → 'component.button.primary.background'
49
+ *
50
+ * substituteTemplateVariables(
51
+ * 'atomic.spacing.{size}',
52
+ * { size: 'large' }
53
+ * ); // → 'atomic.spacing.large'
54
+ * ```
55
+ */
56
+ export declare function substituteTemplateVariables(binding: string, props: Record<string, unknown>): string;
57
+ /**
58
+ * Convert token reference to CSS variable reference
59
+ *
60
+ * Converts dot notation to CSS custom property format:
61
+ * - "atomic.spacing.16" → "var(--atomic-spacing-16)"
62
+ * - "semantic.color.primary" → "var(--semantic-color-primary)"
63
+ *
64
+ * @param tokenRef - Token reference in dot notation
65
+ * @returns CSS variable reference in var() format
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * tokenRefToCSSVar('atomic.spacing.16'); // → 'var(--atomic-spacing-16)'
70
+ * tokenRefToCSSVar('semantic.color.primary'); // → 'var(--semantic-color-primary)'
71
+ * ```
72
+ */
73
+ export declare function tokenRefToCSSVar(tokenRef: string): string;
74
+ /**
75
+ * Resolve single token binding with caching
76
+ *
77
+ * Process:
78
+ * 1. Check cache for previously resolved binding
79
+ * 2. Substitute template variables from props
80
+ * 3. Convert to CSS variable reference
81
+ * 4. Cache the result
82
+ *
83
+ * @param binding - Token binding (may contain template variables)
84
+ * @param context - Resolution context with props and theme
85
+ * @returns CSS variable reference
86
+ * @throws Error if template variable substitution fails
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * const context = {
91
+ * props: { variant: 'primary', size: 'medium' },
92
+ * theme: 'default'
93
+ * };
94
+ *
95
+ * resolveBinding('component.button.{variant}.background', context);
96
+ * // → 'var(--component-button-primary-background)'
97
+ *
98
+ * resolveBinding('atomic.spacing.{size}', context);
99
+ * // → 'var(--atomic-spacing-medium)'
100
+ * ```
101
+ */
102
+ export declare function resolveBinding(binding: string, context: TokenBindingContext): string;
103
+ /**
104
+ * Resolve all token bindings for a component
105
+ *
106
+ * Processes all token bindings in the component schema,
107
+ * substituting template variables and converting to CSS variables.
108
+ *
109
+ * @param bindings - Token bindings from component schema
110
+ * @param context - Resolution context with props and theme
111
+ * @returns Resolved token bindings map (property → CSS variable)
112
+ *
113
+ * @example
114
+ * ```typescript
115
+ * const bindings = {
116
+ * background: 'component.button.{variant}.background',
117
+ * foreground: 'component.button.{variant}.foreground',
118
+ * padding: 'atomic.spacing.{size}'
119
+ * };
120
+ *
121
+ * const context = {
122
+ * props: { variant: 'primary', size: 'medium' },
123
+ * theme: 'default'
124
+ * };
125
+ *
126
+ * const resolved = resolveBindings(bindings, context);
127
+ * // {
128
+ * // background: 'var(--component-button-primary-background)',
129
+ * // foreground: 'var(--component-button-primary-foreground)',
130
+ * // padding: 'var(--atomic-spacing-medium)'
131
+ * // }
132
+ * ```
133
+ */
134
+ export declare function resolveBindings(bindings: TokenBindings, context: TokenBindingContext): ResolvedTokenBindings;
135
+ /**
136
+ * Validate token binding format
137
+ *
138
+ * Checks if a token binding string is valid:
139
+ * - Must be in dot notation (e.g., "atomic.spacing.16")
140
+ * - May contain template variables (e.g., "component.button.{variant}.background")
141
+ * - Must start with valid layer (atomic, semantic, component)
142
+ *
143
+ * @param binding - Token binding to validate
144
+ * @returns True if valid, false otherwise
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * isValidTokenBinding('atomic.spacing.16'); // → true
149
+ * isValidTokenBinding('component.button.{variant}.background'); // → true
150
+ * isValidTokenBinding('invalid-format'); // → false
151
+ * ```
152
+ */
153
+ export declare function isValidTokenBinding(binding: string): boolean;
154
+ /**
155
+ * Extract template variable names from binding
156
+ *
157
+ * @param binding - Token binding with template variables
158
+ * @returns Array of template variable names
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * extractTemplateVariables('component.button.{variant}.{size}.background');
163
+ * // → ['variant', 'size']
164
+ *
165
+ * extractTemplateVariables('atomic.spacing.16');
166
+ * // → []
167
+ * ```
168
+ */
169
+ export declare function extractTemplateVariables(binding: string): string[];
170
+ //# sourceMappingURL=token-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-resolver.d.ts","sourceRoot":"","sources":["../../../src/screen-generation/resolver/token-resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAMhE;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAY3D;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAmCR;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOzD;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAoBpF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,mBAAmB,GAC3B,qBAAqB,CAiBvB;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA6B5D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAIlE"}