@framingui/mcp-server 0.5.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 (206) hide show
  1. package/README.md +1027 -0
  2. package/dist/auth/cache.d.ts +28 -0
  3. package/dist/auth/cache.d.ts.map +1 -0
  4. package/dist/auth/cache.js +48 -0
  5. package/dist/auth/cache.js.map +1 -0
  6. package/dist/auth/guard.d.ts +22 -0
  7. package/dist/auth/guard.d.ts.map +1 -0
  8. package/dist/auth/guard.js +37 -0
  9. package/dist/auth/guard.js.map +1 -0
  10. package/dist/auth/state.d.ts +42 -0
  11. package/dist/auth/state.d.ts.map +1 -0
  12. package/dist/auth/state.js +96 -0
  13. package/dist/auth/state.js.map +1 -0
  14. package/dist/auth/theme-access.d.ts +21 -0
  15. package/dist/auth/theme-access.d.ts.map +1 -0
  16. package/dist/auth/theme-access.js +30 -0
  17. package/dist/auth/theme-access.js.map +1 -0
  18. package/dist/auth/verify.d.ts +44 -0
  19. package/dist/auth/verify.d.ts.map +1 -0
  20. package/dist/auth/verify.js +77 -0
  21. package/dist/auth/verify.js.map +1 -0
  22. package/dist/cli/agent-md-templates.d.ts +16 -0
  23. package/dist/cli/agent-md-templates.d.ts.map +1 -0
  24. package/dist/cli/agent-md-templates.js +311 -0
  25. package/dist/cli/agent-md-templates.js.map +1 -0
  26. package/dist/cli/credentials.d.ts +29 -0
  27. package/dist/cli/credentials.d.ts.map +1 -0
  28. package/dist/cli/credentials.js +66 -0
  29. package/dist/cli/credentials.js.map +1 -0
  30. package/dist/cli/guide-template.d.ts +10 -0
  31. package/dist/cli/guide-template.d.ts.map +1 -0
  32. package/dist/cli/guide-template.js +195 -0
  33. package/dist/cli/guide-template.js.map +1 -0
  34. package/dist/cli/index.d.ts +7 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +41 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/cli/init.d.ts +6 -0
  39. package/dist/cli/init.d.ts.map +1 -0
  40. package/dist/cli/init.js +319 -0
  41. package/dist/cli/init.js.map +1 -0
  42. package/dist/cli/login.d.ts +9 -0
  43. package/dist/cli/login.d.ts.map +1 -0
  44. package/dist/cli/login.js +121 -0
  45. package/dist/cli/login.js.map +1 -0
  46. package/dist/cli/logout.d.ts +9 -0
  47. package/dist/cli/logout.d.ts.map +1 -0
  48. package/dist/cli/logout.js +18 -0
  49. package/dist/cli/logout.js.map +1 -0
  50. package/dist/cli/status.d.ts +9 -0
  51. package/dist/cli/status.d.ts.map +1 -0
  52. package/dist/cli/status.js +31 -0
  53. package/dist/cli/status.js.map +1 -0
  54. package/dist/data/component-props.d.ts +30 -0
  55. package/dist/data/component-props.d.ts.map +1 -0
  56. package/dist/data/component-props.js +537 -0
  57. package/dist/data/component-props.js.map +1 -0
  58. package/dist/data/component-registry.d.ts +30 -0
  59. package/dist/data/component-registry.d.ts.map +1 -0
  60. package/dist/data/component-registry.js +320 -0
  61. package/dist/data/component-registry.js.map +1 -0
  62. package/dist/data/examples/screen-examples.d.ts +38 -0
  63. package/dist/data/examples/screen-examples.d.ts.map +1 -0
  64. package/dist/data/examples/screen-examples.js +500 -0
  65. package/dist/data/examples/screen-examples.js.map +1 -0
  66. package/dist/data/hint-generator.d.ts +16 -0
  67. package/dist/data/hint-generator.d.ts.map +1 -0
  68. package/dist/data/hint-generator.js +298 -0
  69. package/dist/data/hint-generator.js.map +1 -0
  70. package/dist/data/recipe-resolver.d.ts +48 -0
  71. package/dist/data/recipe-resolver.d.ts.map +1 -0
  72. package/dist/data/recipe-resolver.js +226 -0
  73. package/dist/data/recipe-resolver.js.map +1 -0
  74. package/dist/data/template-matcher.d.ts +50 -0
  75. package/dist/data/template-matcher.d.ts.map +1 -0
  76. package/dist/data/template-matcher.js +240 -0
  77. package/dist/data/template-matcher.js.map +1 -0
  78. package/dist/generators/core-resolver.d.ts +56 -0
  79. package/dist/generators/core-resolver.d.ts.map +1 -0
  80. package/dist/generators/core-resolver.js +490 -0
  81. package/dist/generators/core-resolver.js.map +1 -0
  82. package/dist/generators/css-generator.d.ts +49 -0
  83. package/dist/generators/css-generator.d.ts.map +1 -0
  84. package/dist/generators/css-generator.js +294 -0
  85. package/dist/generators/css-generator.js.map +1 -0
  86. package/dist/generators/index.d.ts +13 -0
  87. package/dist/generators/index.d.ts.map +1 -0
  88. package/dist/generators/index.js +16 -0
  89. package/dist/generators/index.js.map +1 -0
  90. package/dist/generators/llm-generator.d.ts +96 -0
  91. package/dist/generators/llm-generator.d.ts.map +1 -0
  92. package/dist/generators/llm-generator.js +296 -0
  93. package/dist/generators/llm-generator.js.map +1 -0
  94. package/dist/index.d.ts +3 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +965 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/prompts/getting-started.d.ts +18 -0
  99. package/dist/prompts/getting-started.d.ts.map +1 -0
  100. package/dist/prompts/getting-started.js +112 -0
  101. package/dist/prompts/getting-started.js.map +1 -0
  102. package/dist/prompts/screen-workflow.d.ts +17 -0
  103. package/dist/prompts/screen-workflow.d.ts.map +1 -0
  104. package/dist/prompts/screen-workflow.js +246 -0
  105. package/dist/prompts/screen-workflow.js.map +1 -0
  106. package/dist/schemas/mcp-schemas.d.ts +4342 -0
  107. package/dist/schemas/mcp-schemas.d.ts.map +1 -0
  108. package/dist/schemas/mcp-schemas.js +989 -0
  109. package/dist/schemas/mcp-schemas.js.map +1 -0
  110. package/dist/storage/blueprint-storage.d.ts +68 -0
  111. package/dist/storage/blueprint-storage.d.ts.map +1 -0
  112. package/dist/storage/blueprint-storage.js +135 -0
  113. package/dist/storage/blueprint-storage.js.map +1 -0
  114. package/dist/storage/timestamp-manager.d.ts +32 -0
  115. package/dist/storage/timestamp-manager.d.ts.map +1 -0
  116. package/dist/storage/timestamp-manager.js +59 -0
  117. package/dist/storage/timestamp-manager.js.map +1 -0
  118. package/dist/tools/export-screen.d.ts +34 -0
  119. package/dist/tools/export-screen.d.ts.map +1 -0
  120. package/dist/tools/export-screen.js +344 -0
  121. package/dist/tools/export-screen.js.map +1 -0
  122. package/dist/tools/generate-blueprint.d.ts +15 -0
  123. package/dist/tools/generate-blueprint.d.ts.map +1 -0
  124. package/dist/tools/generate-blueprint.js +165 -0
  125. package/dist/tools/generate-blueprint.js.map +1 -0
  126. package/dist/tools/generate-screen.d.ts +13 -0
  127. package/dist/tools/generate-screen.d.ts.map +1 -0
  128. package/dist/tools/generate-screen.js +82 -0
  129. package/dist/tools/generate-screen.js.map +1 -0
  130. package/dist/tools/get-screen-generation-context.d.ts +11 -0
  131. package/dist/tools/get-screen-generation-context.d.ts.map +1 -0
  132. package/dist/tools/get-screen-generation-context.js +325 -0
  133. package/dist/tools/get-screen-generation-context.js.map +1 -0
  134. package/dist/tools/list-components.d.ts +15 -0
  135. package/dist/tools/list-components.d.ts.map +1 -0
  136. package/dist/tools/list-components.js +46 -0
  137. package/dist/tools/list-components.js.map +1 -0
  138. package/dist/tools/list-icon-libraries.d.ts +12 -0
  139. package/dist/tools/list-icon-libraries.d.ts.map +1 -0
  140. package/dist/tools/list-icon-libraries.js +48 -0
  141. package/dist/tools/list-icon-libraries.js.map +1 -0
  142. package/dist/tools/list-screen-templates.d.ts +15 -0
  143. package/dist/tools/list-screen-templates.d.ts.map +1 -0
  144. package/dist/tools/list-screen-templates.js +61 -0
  145. package/dist/tools/list-screen-templates.js.map +1 -0
  146. package/dist/tools/list-themes.d.ts +13 -0
  147. package/dist/tools/list-themes.d.ts.map +1 -0
  148. package/dist/tools/list-themes.js +42 -0
  149. package/dist/tools/list-themes.js.map +1 -0
  150. package/dist/tools/list-tokens.d.ts +13 -0
  151. package/dist/tools/list-tokens.d.ts.map +1 -0
  152. package/dist/tools/list-tokens.js +92 -0
  153. package/dist/tools/list-tokens.js.map +1 -0
  154. package/dist/tools/preview-component.d.ts +18 -0
  155. package/dist/tools/preview-component.d.ts.map +1 -0
  156. package/dist/tools/preview-component.js +63 -0
  157. package/dist/tools/preview-component.js.map +1 -0
  158. package/dist/tools/preview-icon-library.d.ts +13 -0
  159. package/dist/tools/preview-icon-library.d.ts.map +1 -0
  160. package/dist/tools/preview-icon-library.js +63 -0
  161. package/dist/tools/preview-icon-library.js.map +1 -0
  162. package/dist/tools/preview-screen-template.d.ts +18 -0
  163. package/dist/tools/preview-screen-template.d.ts.map +1 -0
  164. package/dist/tools/preview-screen-template.js +99 -0
  165. package/dist/tools/preview-screen-template.js.map +1 -0
  166. package/dist/tools/preview-theme.d.ts +15 -0
  167. package/dist/tools/preview-theme.d.ts.map +1 -0
  168. package/dist/tools/preview-theme.js +172 -0
  169. package/dist/tools/preview-theme.js.map +1 -0
  170. package/dist/tools/validate-environment.d.ts +37 -0
  171. package/dist/tools/validate-environment.d.ts.map +1 -0
  172. package/dist/tools/validate-environment.js +153 -0
  173. package/dist/tools/validate-environment.js.map +1 -0
  174. package/dist/tools/validate-screen-definition.d.ts +10 -0
  175. package/dist/tools/validate-screen-definition.d.ts.map +1 -0
  176. package/dist/tools/validate-screen-definition.js +559 -0
  177. package/dist/tools/validate-screen-definition.js.map +1 -0
  178. package/dist/tools/validate-screen.d.ts +13 -0
  179. package/dist/tools/validate-screen.d.ts.map +1 -0
  180. package/dist/tools/validate-screen.js +106 -0
  181. package/dist/tools/validate-screen.js.map +1 -0
  182. package/dist/tools/whoami.d.ts +17 -0
  183. package/dist/tools/whoami.d.ts.map +1 -0
  184. package/dist/tools/whoami.js +65 -0
  185. package/dist/tools/whoami.js.map +1 -0
  186. package/dist/utils/dependency-extractor.d.ts +13 -0
  187. package/dist/utils/dependency-extractor.d.ts.map +1 -0
  188. package/dist/utils/dependency-extractor.js +232 -0
  189. package/dist/utils/dependency-extractor.js.map +1 -0
  190. package/dist/utils/error-handler.d.ts +29 -0
  191. package/dist/utils/error-handler.d.ts.map +1 -0
  192. package/dist/utils/error-handler.js +48 -0
  193. package/dist/utils/error-handler.js.map +1 -0
  194. package/dist/utils/logger.d.ts +8 -0
  195. package/dist/utils/logger.d.ts.map +1 -0
  196. package/dist/utils/logger.js +14 -0
  197. package/dist/utils/logger.js.map +1 -0
  198. package/dist/utils/package-json-reader.d.ts +37 -0
  199. package/dist/utils/package-json-reader.d.ts.map +1 -0
  200. package/dist/utils/package-json-reader.js +108 -0
  201. package/dist/utils/package-json-reader.js.map +1 -0
  202. package/dist/utils/tailwind-config-reader.d.ts +23 -0
  203. package/dist/utils/tailwind-config-reader.d.ts.map +1 -0
  204. package/dist/utils/tailwind-config-reader.js +81 -0
  205. package/dist/utils/tailwind-config-reader.js.map +1 -0
  206. package/package.json +103 -0
@@ -0,0 +1,559 @@
1
+ /**
2
+ * Validate Screen Definition MCP Tool
3
+ * SPEC-MCP-004 Phase 3.5: Validates screen definitions with helpful feedback
4
+ */
5
+ import { COMPONENT_CATALOG } from '@framingui/core';
6
+ import { ScreenDefinitionSchema } from '../schemas/mcp-schemas.js';
7
+ import { extractErrorMessage } from '../utils/error-handler.js';
8
+ import { getComponentPropsData } from '../data/component-props.js';
9
+ /**
10
+ * Valid shell tokens from SPEC-LAYOUT-001 and SPEC-LAYOUT-004
11
+ */
12
+ const VALID_SHELLS = [
13
+ // Web shells
14
+ 'shell.web.app',
15
+ 'shell.web.dashboard',
16
+ 'shell.web.auth',
17
+ 'shell.web.marketing',
18
+ 'shell.web.minimal',
19
+ // Mobile shells (SPEC-LAYOUT-004)
20
+ 'shell.mobile.app',
21
+ 'shell.mobile.fullscreen',
22
+ 'shell.mobile.modal',
23
+ 'shell.mobile.tab',
24
+ 'shell.mobile.drawer',
25
+ 'shell.mobile.detail',
26
+ ];
27
+ /**
28
+ * Valid page tokens from SPEC-LAYOUT-001
29
+ */
30
+ const VALID_PAGES = ['page.dashboard', 'page.detail', 'page.wizard', 'page.resource', 'page.empty'];
31
+ /**
32
+ * Valid section patterns from SPEC-LAYOUT-001
33
+ */
34
+ const VALID_SECTION_PATTERNS = [
35
+ 'section.container',
36
+ 'section.centered',
37
+ 'section.grid-2',
38
+ 'section.grid-3',
39
+ 'section.grid-4',
40
+ 'section.split-50-50',
41
+ 'section.split-60-40',
42
+ 'section.split-70-30',
43
+ 'section.hero',
44
+ 'section.feature',
45
+ ];
46
+ /**
47
+ * Valid slot names
48
+ */
49
+ const VALID_SLOTS = ['header', 'main', 'sidebar', 'footer'];
50
+ /**
51
+ * Get similar values for suggestions (Levenshtein distance based)
52
+ */
53
+ function getSimilarValues(value, validValues) {
54
+ const similar = [];
55
+ for (const valid of validValues) {
56
+ const distance = levenshteinDistance(value.toLowerCase(), valid.toLowerCase());
57
+ if (distance <= 3) {
58
+ similar.push({ value: valid, distance });
59
+ }
60
+ }
61
+ return similar
62
+ .sort((a, b) => a.distance - b.distance)
63
+ .slice(0, 3)
64
+ .map(s => s.value);
65
+ }
66
+ /**
67
+ * Simple Levenshtein distance implementation
68
+ */
69
+ function levenshteinDistance(a, b) {
70
+ const matrix = [];
71
+ for (let i = 0; i <= b.length; i++) {
72
+ matrix[i] = [i];
73
+ }
74
+ for (let j = 0; j <= a.length; j++) {
75
+ matrix[0][j] = j;
76
+ }
77
+ for (let i = 1; i <= b.length; i++) {
78
+ for (let j = 1; j <= a.length; j++) {
79
+ const cost = b.charAt(i - 1) === a.charAt(j - 1) ? 0 : 1;
80
+ matrix[i][j] = Math.min((matrix[i - 1]?.[j] ?? 0) + 1, (matrix[i]?.[j - 1] ?? 0) + 1, (matrix[i - 1]?.[j - 1] ?? 0) + cost);
81
+ }
82
+ }
83
+ return matrix[b.length]?.[a.length] ?? 0;
84
+ }
85
+ /**
86
+ * Validate shell token
87
+ */
88
+ function validateShell(shell, path) {
89
+ const errors = [];
90
+ const warnings = [];
91
+ if (!shell.startsWith('shell.')) {
92
+ errors.push({
93
+ path,
94
+ code: 'INVALID_SHELL_FORMAT',
95
+ message: 'Shell token must start with "shell."',
96
+ expected: 'shell.{platform}.{name}',
97
+ received: shell,
98
+ suggestion: `Use format: shell.web.app or shell.mobile.app`,
99
+ });
100
+ return { errors, warnings };
101
+ }
102
+ if (!VALID_SHELLS.includes(shell)) {
103
+ const similar = getSimilarValues(shell, VALID_SHELLS);
104
+ errors.push({
105
+ path,
106
+ code: 'UNKNOWN_SHELL',
107
+ message: `Unknown shell token: "${shell}"`,
108
+ expected: VALID_SHELLS.slice(0, 5).join(', ') + '...',
109
+ received: shell,
110
+ suggestion: similar.length > 0
111
+ ? `Did you mean: ${similar.join(', ')}?`
112
+ : `Valid shells: ${VALID_SHELLS.join(', ')}`,
113
+ autoFix: similar.length > 0
114
+ ? [{ op: 'replace', path: `/${path}`, value: similar[0] }]
115
+ : undefined,
116
+ });
117
+ }
118
+ return { errors, warnings };
119
+ }
120
+ /**
121
+ * Validate page token
122
+ */
123
+ function validatePage(page, path) {
124
+ const errors = [];
125
+ const warnings = [];
126
+ if (!page.startsWith('page.')) {
127
+ errors.push({
128
+ path,
129
+ code: 'INVALID_PAGE_FORMAT',
130
+ message: 'Page token must start with "page."',
131
+ expected: 'page.{name}',
132
+ received: page,
133
+ suggestion: 'Use format: page.dashboard, page.detail, etc.',
134
+ });
135
+ return { errors, warnings };
136
+ }
137
+ if (!VALID_PAGES.includes(page)) {
138
+ const similar = getSimilarValues(page, VALID_PAGES);
139
+ errors.push({
140
+ path,
141
+ code: 'UNKNOWN_PAGE',
142
+ message: `Unknown page token: "${page}"`,
143
+ expected: VALID_PAGES.join(', '),
144
+ received: page,
145
+ suggestion: similar.length > 0
146
+ ? `Did you mean: ${similar.join(', ')}?`
147
+ : `Valid pages: ${VALID_PAGES.join(', ')}`,
148
+ autoFix: similar.length > 0
149
+ ? [{ op: 'replace', path: `/${path}`, value: similar[0] }]
150
+ : undefined,
151
+ });
152
+ }
153
+ return { errors, warnings };
154
+ }
155
+ /**
156
+ * Validate section pattern
157
+ */
158
+ function validateSectionPattern(pattern, path, strict) {
159
+ const errors = [];
160
+ const warnings = [];
161
+ if (!pattern.startsWith('section.')) {
162
+ errors.push({
163
+ path,
164
+ code: 'INVALID_SECTION_FORMAT',
165
+ message: 'Section pattern must start with "section."',
166
+ expected: 'section.{name}',
167
+ received: pattern,
168
+ suggestion: 'Use format: section.container, section.grid-4, etc.',
169
+ });
170
+ return { errors, warnings };
171
+ }
172
+ if (!VALID_SECTION_PATTERNS.includes(pattern)) {
173
+ if (strict) {
174
+ const similar = getSimilarValues(pattern, VALID_SECTION_PATTERNS);
175
+ errors.push({
176
+ path,
177
+ code: 'UNKNOWN_SECTION_PATTERN',
178
+ message: `Unknown section pattern: "${pattern}"`,
179
+ expected: VALID_SECTION_PATTERNS.slice(0, 5).join(', ') + '...',
180
+ received: pattern,
181
+ suggestion: similar.length > 0
182
+ ? `Did you mean: ${similar.join(', ')}?`
183
+ : `Valid patterns: ${VALID_SECTION_PATTERNS.join(', ')}`,
184
+ });
185
+ }
186
+ else {
187
+ warnings.push({
188
+ path,
189
+ code: 'CUSTOM_SECTION_PATTERN',
190
+ message: `Custom section pattern "${pattern}" - ensure it's defined in your layout system`,
191
+ recommendation: `Consider using standard patterns: ${VALID_SECTION_PATTERNS.slice(0, 5).join(', ')}`,
192
+ });
193
+ }
194
+ }
195
+ return { errors, warnings };
196
+ }
197
+ /**
198
+ * Validate component type
199
+ */
200
+ function validateComponentType(type, path, strict) {
201
+ const errors = [];
202
+ const warnings = [];
203
+ // Check if component type exists in catalog (case-insensitive comparison)
204
+ const catalogLower = COMPONENT_CATALOG.map(c => c.toLowerCase());
205
+ const typeLower = type.toLowerCase();
206
+ if (!catalogLower.includes(typeLower)) {
207
+ const similar = getSimilarValues(type, COMPONENT_CATALOG);
208
+ if (strict) {
209
+ errors.push({
210
+ path,
211
+ code: 'UNKNOWN_COMPONENT',
212
+ message: `Unknown component type: "${type}"`,
213
+ expected: 'A component from @framingui/ui catalog',
214
+ received: type,
215
+ suggestion: similar.length > 0
216
+ ? `Did you mean: ${similar.join(', ')}?`
217
+ : 'Use list-components tool to see available components',
218
+ });
219
+ }
220
+ else {
221
+ warnings.push({
222
+ path,
223
+ code: 'CUSTOM_COMPONENT',
224
+ message: `Component "${type}" not found in catalog - ensure it's a valid custom component`,
225
+ recommendation: similar.length > 0
226
+ ? `Did you mean: ${similar.join(', ')}?`
227
+ : 'Use list-components tool to see available components',
228
+ });
229
+ }
230
+ }
231
+ else {
232
+ // Check casing
233
+ const correctCase = COMPONENT_CATALOG.find(c => c.toLowerCase() === typeLower);
234
+ if (correctCase && correctCase !== type) {
235
+ warnings.push({
236
+ path,
237
+ code: 'COMPONENT_CASE',
238
+ message: `Component type "${type}" has incorrect casing`,
239
+ recommendation: `Use "${correctCase}" instead`,
240
+ });
241
+ }
242
+ }
243
+ return { errors, warnings };
244
+ }
245
+ /**
246
+ * Validate component props against known prop definitions
247
+ */
248
+ function validateComponentProps(component, path) {
249
+ const errors = [];
250
+ const warnings = [];
251
+ if (!component.type) {
252
+ return { errors, warnings };
253
+ }
254
+ // props 데이터가 없는 컴포넌트는 스킵 (하위 호환성)
255
+ const propsData = getComponentPropsData(component.type.toLowerCase());
256
+ if (!propsData) {
257
+ return { errors, warnings };
258
+ }
259
+ const componentProps = component.props || {};
260
+ // 1. 필수 props 존재 여부 검증
261
+ for (const propDef of propsData.props) {
262
+ if (propDef.required && !(propDef.name in componentProps)) {
263
+ errors.push({
264
+ path: `${path}.props.${propDef.name}`,
265
+ code: 'MISSING_REQUIRED_PROP',
266
+ message: `Required prop "${propDef.name}" is missing on ${component.type}`,
267
+ expected: propDef.type,
268
+ suggestion: propDef.defaultValue
269
+ ? `Add "${propDef.name}" prop (default: ${propDef.defaultValue})`
270
+ : `Add "${propDef.name}" prop of type ${propDef.type}`,
271
+ autoFix: propDef.defaultValue
272
+ ? [
273
+ {
274
+ op: 'add',
275
+ path: `/${path.replace(/\./g, '/')}/props/${propDef.name}`,
276
+ value: propDef.defaultValue,
277
+ },
278
+ ]
279
+ : undefined,
280
+ });
281
+ }
282
+ }
283
+ // 2. variant 값 유효성 검증
284
+ if (propsData.variants && propsData.variants.length > 0) {
285
+ // variant prop 그룹별로 체크
286
+ const variantGroups = new Map();
287
+ for (const v of propsData.variants) {
288
+ if (!variantGroups.has(v.name)) {
289
+ variantGroups.set(v.name, []);
290
+ }
291
+ variantGroups.get(v.name).push(v.value);
292
+ }
293
+ for (const [variantName, validValues] of variantGroups) {
294
+ const propValue = componentProps[variantName];
295
+ if (propValue !== undefined && typeof propValue === 'string') {
296
+ if (!validValues.includes(propValue)) {
297
+ warnings.push({
298
+ path: `${path}.props.${variantName}`,
299
+ code: 'INVALID_VARIANT',
300
+ message: `Invalid ${variantName} value "${propValue}" on ${component.type}`,
301
+ recommendation: `Valid values: ${validValues.join(', ')}`,
302
+ });
303
+ }
304
+ }
305
+ }
306
+ }
307
+ return { errors, warnings };
308
+ }
309
+ /**
310
+ * Validate slot value
311
+ */
312
+ function validateSlot(slot, path) {
313
+ const errors = [];
314
+ const warnings = [];
315
+ if (!VALID_SLOTS.includes(slot)) {
316
+ const similar = getSimilarValues(slot, VALID_SLOTS);
317
+ errors.push({
318
+ path,
319
+ code: 'INVALID_SLOT',
320
+ message: `Invalid slot value: "${slot}"`,
321
+ expected: VALID_SLOTS.join(', '),
322
+ received: slot,
323
+ suggestion: similar.length > 0
324
+ ? `Did you mean: ${similar.join(', ')}?`
325
+ : `Valid slots: ${VALID_SLOTS.join(', ')}`,
326
+ });
327
+ }
328
+ return { errors, warnings };
329
+ }
330
+ /**
331
+ * Generate improvement suggestions
332
+ */
333
+ function generateSuggestions(definition) {
334
+ const suggestions = [];
335
+ // Handle null/undefined definition
336
+ if (!definition || typeof definition !== 'object') {
337
+ return suggestions;
338
+ }
339
+ // Check for missing name/description
340
+ if (!definition.name) {
341
+ const autoFixName = definition.id
342
+ ? definition.id.replace(/[-_]/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase())
343
+ : undefined;
344
+ suggestions.push({
345
+ category: 'maintainability',
346
+ message: 'Consider adding a human-readable name for better documentation',
347
+ affectedPath: 'name',
348
+ suggestedChange: 'Add a descriptive name property',
349
+ autoFix: autoFixName
350
+ ? [{ op: 'add', path: '/name', value: autoFixName }]
351
+ : undefined,
352
+ });
353
+ }
354
+ if (!definition.description) {
355
+ suggestions.push({
356
+ category: 'maintainability',
357
+ message: 'Consider adding a description for documentation purposes',
358
+ affectedPath: 'description',
359
+ suggestedChange: 'Add a brief description of the screen purpose',
360
+ });
361
+ }
362
+ // Check for missing themeId
363
+ if (!definition.themeId) {
364
+ suggestions.push({
365
+ category: 'consistency',
366
+ message: 'Consider specifying a themeId for consistent styling',
367
+ affectedPath: 'themeId',
368
+ suggestedChange: 'Add themeId to enable theme recipe application',
369
+ });
370
+ }
371
+ // Check sections
372
+ if (definition.sections && Array.isArray(definition.sections)) {
373
+ // Check for empty sections
374
+ for (let i = 0; i < definition.sections.length; i++) {
375
+ const section = definition.sections[i];
376
+ if (!section.components || section.components.length === 0) {
377
+ suggestions.push({
378
+ category: 'maintainability',
379
+ message: `Section "${section.id || i}" has no components`,
380
+ affectedPath: `sections[${i}].components`,
381
+ suggestedChange: 'Add components or remove empty section',
382
+ });
383
+ }
384
+ // Check for missing slot
385
+ if (!section.slot) {
386
+ suggestions.push({
387
+ category: 'consistency',
388
+ message: `Section "${section.id || i}" has no slot assigned`,
389
+ affectedPath: `sections[${i}].slot`,
390
+ suggestedChange: 'Assign to a slot (header, main, sidebar, footer) for proper layout positioning',
391
+ });
392
+ }
393
+ // Check components for accessibility
394
+ if (section.components && Array.isArray(section.components)) {
395
+ for (let j = 0; j < section.components.length; j++) {
396
+ const component = section.components[j];
397
+ // Check images for alt text
398
+ if ((component.type === 'Image' || component.type === 'Avatar') &&
399
+ (!component.props || !component.props.alt)) {
400
+ suggestions.push({
401
+ category: 'accessibility',
402
+ message: `${component.type} component is missing alt text`,
403
+ affectedPath: `sections[${i}].components[${j}].props.alt`,
404
+ suggestedChange: 'Add descriptive alt text for screen readers',
405
+ });
406
+ }
407
+ // Check inputs for labels
408
+ if (component.type === 'Input' &&
409
+ component.props &&
410
+ !component.props.label &&
411
+ !component.props['aria-label']) {
412
+ suggestions.push({
413
+ category: 'accessibility',
414
+ message: 'Input component is missing a label',
415
+ affectedPath: `sections[${i}].components[${j}].props.label`,
416
+ suggestedChange: 'Add a label prop or aria-label for accessibility',
417
+ });
418
+ }
419
+ }
420
+ }
421
+ }
422
+ // Check for no main slot
423
+ const hasMainSlot = definition.sections.some((s) => s.slot === 'main' || !s.slot);
424
+ if (!hasMainSlot) {
425
+ suggestions.push({
426
+ category: 'consistency',
427
+ message: 'No section assigned to main slot',
428
+ affectedPath: 'sections',
429
+ suggestedChange: 'Assign at least one section to the main slot',
430
+ });
431
+ }
432
+ }
433
+ return suggestions;
434
+ }
435
+ /**
436
+ * Validate Screen Definition tool implementation
437
+ */
438
+ export async function validateScreenDefinitionTool(input) {
439
+ try {
440
+ const errors = [];
441
+ const warnings = [];
442
+ const strict = input.strict !== false; // Default to strict
443
+ const definition = input.definition;
444
+ // 1. Validate with Zod schema first
445
+ const zodResult = ScreenDefinitionSchema.safeParse(definition);
446
+ if (!zodResult.success) {
447
+ for (const issue of zodResult.error.issues) {
448
+ errors.push({
449
+ path: issue.path.join('.'),
450
+ code: issue.code,
451
+ message: issue.message,
452
+ suggestion: getZodSuggestion(issue),
453
+ });
454
+ }
455
+ }
456
+ // 2. Additional semantic validation (only if basic structure is valid)
457
+ if (definition && typeof definition === 'object') {
458
+ // Validate shell
459
+ if (definition.shell) {
460
+ const shellResult = validateShell(definition.shell, 'shell');
461
+ errors.push(...shellResult.errors);
462
+ warnings.push(...shellResult.warnings);
463
+ }
464
+ // Validate page
465
+ if (definition.page) {
466
+ const pageResult = validatePage(definition.page, 'page');
467
+ errors.push(...pageResult.errors);
468
+ warnings.push(...pageResult.warnings);
469
+ }
470
+ // Validate sections
471
+ if (definition.sections && Array.isArray(definition.sections)) {
472
+ for (let i = 0; i < definition.sections.length; i++) {
473
+ const section = definition.sections[i];
474
+ // Validate pattern
475
+ if (section.pattern) {
476
+ const patternResult = validateSectionPattern(section.pattern, `sections[${i}].pattern`, strict);
477
+ errors.push(...patternResult.errors);
478
+ warnings.push(...patternResult.warnings);
479
+ }
480
+ // Validate slot
481
+ if (section.slot) {
482
+ const slotResult = validateSlot(section.slot, `sections[${i}].slot`);
483
+ errors.push(...slotResult.errors);
484
+ warnings.push(...slotResult.warnings);
485
+ }
486
+ // Validate components
487
+ if (section.components && Array.isArray(section.components)) {
488
+ for (let j = 0; j < section.components.length; j++) {
489
+ const component = section.components[j];
490
+ if (component.type) {
491
+ const typeResult = validateComponentType(component.type, `sections[${i}].components[${j}].type`, strict);
492
+ errors.push(...typeResult.errors);
493
+ warnings.push(...typeResult.warnings);
494
+ // Props 검증 (타입이 유효한 경우에만)
495
+ if (typeResult.errors.length === 0) {
496
+ const propsResult = validateComponentProps(component, `sections[${i}].components[${j}]`);
497
+ errors.push(...propsResult.errors);
498
+ warnings.push(...propsResult.warnings);
499
+ }
500
+ }
501
+ }
502
+ }
503
+ }
504
+ }
505
+ }
506
+ // 3. Generate improvement suggestions
507
+ const suggestions = generateSuggestions(definition);
508
+ // 4. Aggregate all auto-fix patches
509
+ const allPatches = [];
510
+ for (const err of errors) {
511
+ if (err.autoFix) {
512
+ allPatches.push(...err.autoFix);
513
+ }
514
+ }
515
+ for (const sug of suggestions) {
516
+ if (sug.autoFix) {
517
+ allPatches.push(...sug.autoFix);
518
+ }
519
+ }
520
+ const isValid = errors.length === 0;
521
+ return {
522
+ success: true,
523
+ valid: isValid,
524
+ errors: errors.length > 0 ? errors : undefined,
525
+ warnings: warnings.length > 0 ? warnings : undefined,
526
+ suggestions: suggestions.length > 0 ? suggestions : undefined,
527
+ autoFixPatches: allPatches.length > 0 ? allPatches : undefined,
528
+ };
529
+ }
530
+ catch (error) {
531
+ return {
532
+ success: false,
533
+ error: extractErrorMessage(error),
534
+ };
535
+ }
536
+ }
537
+ /**
538
+ * Get suggestion for Zod validation issue
539
+ */
540
+ function getZodSuggestion(issue) {
541
+ switch (issue.code) {
542
+ case 'invalid_type':
543
+ return `Expected ${issue.expected}, but received ${issue.received}`;
544
+ case 'invalid_string':
545
+ if (issue.validation === 'regex') {
546
+ return 'Check the format - see the pattern in error message';
547
+ }
548
+ return 'Provide a valid string value';
549
+ case 'too_small':
550
+ return `Minimum ${issue.minimum} ${issue.type} required`;
551
+ case 'too_big':
552
+ return `Maximum ${issue.maximum} ${issue.type} allowed`;
553
+ case 'invalid_enum_value':
554
+ return `Valid values: ${issue.options.join(', ')}`;
555
+ default:
556
+ return 'Check the value format and try again';
557
+ }
558
+ }
559
+ //# sourceMappingURL=validate-screen-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-screen-definition.js","sourceRoot":"","sources":["../../src/tools/validate-screen-definition.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AASpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,eAAe;IACf,qBAAqB;IACrB,gBAAgB;IAChB,qBAAqB;IACrB,mBAAmB;IACnB,kCAAkC;IAClC,kBAAkB;IAClB,yBAAyB;IACzB,oBAAoB;IACpB,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,GAAG,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;AAEpG;;GAEG;AACH,MAAM,sBAAsB,GAAG;IAC7B,mBAAmB;IACnB,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,cAAc;IACd,iBAAiB;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAE5D;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAa,EAAE,WAAqB;IAC5D,MAAM,OAAO,GAA0C,EAAE,CAAC;IAE1D,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/E,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,OAAO;SACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SACvC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,CAAS,EAAE,CAAS;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACtB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAC7B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAC7B,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CACrC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,KAAa,EACb,IAAY;IAEZ,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,sCAAsC;YAC/C,QAAQ,EAAE,yBAAyB;YACnC,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,+CAA+C;SAC5D,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,yBAAyB,KAAK,GAAG;YAC1C,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;YACrD,QAAQ,EAAE,KAAK;YACf,UAAU,EACR,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACxC,CAAC,CAAC,iBAAiB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAChD,OAAO,EACL,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAkB,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,CAAC,CAAC,SAAS;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACnB,IAAY,EACZ,IAAY;IAEZ,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,oCAAoC;YAC7C,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,+CAA+C;SAC5D,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,wBAAwB,IAAI,GAAG;YACxC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,IAAI;YACd,UAAU,EACR,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACxC,CAAC,CAAC,gBAAgB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC9C,OAAO,EACL,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAkB,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,CAAC,CAAC,SAAS;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,OAAe,EACf,IAAY,EACZ,MAAe;IAEf,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,4CAA4C;YACrD,QAAQ,EAAE,gBAAgB;YAC1B,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,qDAAqD;SAClE,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,6BAA6B,OAAO,GAAG;gBAChD,QAAQ,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;gBAC/D,QAAQ,EAAE,OAAO;gBACjB,UAAU,EACR,OAAO,CAAC,MAAM,GAAG,CAAC;oBAChB,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBACxC,CAAC,CAAC,mBAAmB,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC7D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,2BAA2B,OAAO,+CAA+C;gBAC1F,cAAc,EAAE,qCAAqC,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACrG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,IAAY,EACZ,IAAY,EACZ,MAAe;IAEf,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,0EAA0E;IAC1E,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAErC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,iBAAwC,CAAC,CAAC;QAEjF,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,4BAA4B,IAAI,GAAG;gBAC5C,QAAQ,EAAE,wCAAwC;gBAClD,QAAQ,EAAE,IAAI;gBACd,UAAU,EACR,OAAO,CAAC,MAAM,GAAG,CAAC;oBAChB,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBACxC,CAAC,CAAC,sDAAsD;aAC7D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,cAAc,IAAI,+DAA+D;gBAC1F,cAAc,EACZ,OAAO,CAAC,MAAM,GAAG,CAAC;oBAChB,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBACxC,CAAC,CAAC,sDAAsD;aAC7D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,eAAe;QACf,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC;QAC/E,IAAI,WAAW,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,mBAAmB,IAAI,wBAAwB;gBACxD,cAAc,EAAE,QAAQ,WAAW,WAAW;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,SAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;IAE7C,uBAAuB;IACvB,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,cAAc,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,GAAG,IAAI,UAAU,OAAO,CAAC,IAAI,EAAE;gBACrC,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,kBAAkB,OAAO,CAAC,IAAI,mBAAmB,SAAS,CAAC,IAAI,EAAE;gBAC1E,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,UAAU,EAAE,OAAO,CAAC,YAAY;oBAC9B,CAAC,CAAC,QAAQ,OAAO,CAAC,IAAI,oBAAoB,OAAO,CAAC,YAAY,GAAG;oBACjE,CAAC,CAAC,QAAQ,OAAO,CAAC,IAAI,kBAAkB,OAAO,CAAC,IAAI,EAAE;gBACxD,OAAO,EAAE,OAAO,CAAC,YAAY;oBAC3B,CAAC,CAAC;wBACE;4BACE,EAAE,EAAE,KAAc;4BAClB,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,OAAO,CAAC,IAAI,EAAE;4BAC1D,KAAK,EAAE,OAAO,CAAC,YAAY;yBAC5B;qBACF;oBACH,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,uBAAuB;QACvB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,aAAa,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC7D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACrC,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,GAAG,IAAI,UAAU,WAAW,EAAE;wBACpC,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,WAAW,WAAW,WAAW,SAAS,QAAQ,SAAS,CAAC,IAAI,EAAE;wBAC3E,cAAc,EAAE,iBAAiB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC1D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACnB,IAAY,EACZ,IAAY;IAEZ,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,wBAAwB,IAAI,GAAG;YACxC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,QAAQ,EAAE,IAAI;YACd,UAAU,EACR,OAAO,CAAC,MAAM,GAAG,CAAC;gBAChB,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACxC,CAAC,CAAC,gBAAgB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,UAAe;IAC1C,MAAM,WAAW,GAA4B,EAAE,CAAC;IAEhD,mCAAmC;IACnC,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,UAAU,CAAC,EAAE;YAC/B,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACtF,CAAC,CAAC,SAAS,CAAC;QACd,WAAW,CAAC,IAAI,CAAC;YACf,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EAAE,gEAAgE;YACzE,YAAY,EAAE,MAAM;YACpB,eAAe,EAAE,iCAAiC;YAClD,OAAO,EAAE,WAAW;gBAClB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAc,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;gBAC7D,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5B,WAAW,CAAC,IAAI,CAAC;YACf,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EAAE,0DAA0D;YACnE,YAAY,EAAE,aAAa;YAC3B,eAAe,EAAE,+CAA+C;SACjE,CAAC,CAAC;IACL,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC;YACf,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,sDAAsD;YAC/D,YAAY,EAAE,SAAS;YACvB,eAAe,EAAE,gDAAgD;SAClE,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB;IACjB,IAAI,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9D,2BAA2B;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3D,WAAW,CAAC,IAAI,CAAC;oBACf,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE,YAAY,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB;oBACzD,YAAY,EAAE,YAAY,CAAC,cAAc;oBACzC,eAAe,EAAE,wCAAwC;iBAC1D,CAAC,CAAC;YACL,CAAC;YAED,yBAAyB;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClB,WAAW,CAAC,IAAI,CAAC;oBACf,QAAQ,EAAE,aAAa;oBACvB,OAAO,EAAE,YAAY,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB;oBAC5D,YAAY,EAAE,YAAY,CAAC,QAAQ;oBACnC,eAAe,EACb,gFAAgF;iBACnF,CAAC,CAAC;YACL,CAAC;YAED,qCAAqC;YACrC,IAAI,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAExC,4BAA4B;oBAC5B,IACE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC;wBAC3D,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAC1C,CAAC;wBACD,WAAW,CAAC,IAAI,CAAC;4BACf,QAAQ,EAAE,eAAe;4BACzB,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,gCAAgC;4BAC1D,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,aAAa;4BACzD,eAAe,EAAE,6CAA6C;yBAC/D,CAAC,CAAC;oBACL,CAAC;oBAED,0BAA0B;oBAC1B,IACE,SAAS,CAAC,IAAI,KAAK,OAAO;wBAC1B,SAAS,CAAC,KAAK;wBACf,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK;wBACtB,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAC9B,CAAC;wBACD,WAAW,CAAC,IAAI,CAAC;4BACf,QAAQ,EAAE,eAAe;4BACzB,OAAO,EAAE,oCAAoC;4BAC7C,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,eAAe;4BAC3D,eAAe,EAAE,kDAAkD;yBACpE,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,kCAAkC;gBAC3C,YAAY,EAAE,UAAU;gBACxB,eAAe,EAAE,8CAA8C;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,KAAoC;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAwB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,oBAAoB;QAE3D,MAAM,UAAU,GAAG,KAAK,CAAC,UAAiB,CAAC;QAE3C,oCAAoC;QACpC,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE/D,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC;iBACpC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACjD,iBAAiB;YACjB,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAED,gBAAgB;YAChB,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC;YAED,oBAAoB;YACpB,IAAI,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACpD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAEvC,mBAAmB;oBACnB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM,aAAa,GAAG,sBAAsB,CAC1C,OAAO,CAAC,OAAO,EACf,YAAY,CAAC,WAAW,EACxB,MAAM,CACP,CAAC;wBACF,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;wBACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAC3C,CAAC;oBAED,gBAAgB;oBAChB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACjB,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;wBACrE,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;wBAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACxC,CAAC;oBAED,sBAAsB;oBACtB,IAAI,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BACnD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BACxC,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gCACnB,MAAM,UAAU,GAAG,qBAAqB,CACtC,SAAS,CAAC,IAAI,EACd,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EACtC,MAAM,CACP,CAAC;gCACF,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gCAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;gCAEtC,0BAA0B;gCAC1B,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oCACnC,MAAM,WAAW,GAAG,sBAAsB,CACxC,SAAS,EACT,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAClC,CAAC;oCACF,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;oCACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;gCACzC,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAEpD,oCAAoC;QACpC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QAEpC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC9C,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACpD,WAAW,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC7D,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;SAClC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAU;IAClC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,cAAc;YACjB,OAAO,YAAY,KAAK,CAAC,QAAQ,kBAAkB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACtE,KAAK,gBAAgB;YACnB,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;gBACjC,OAAO,qDAAqD,CAAC;YAC/D,CAAC;YACD,OAAO,8BAA8B,CAAC;QACxC,KAAK,WAAW;YACd,OAAO,WAAW,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC;QAC3D,KAAK,SAAS;YACZ,OAAO,WAAW,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC;QAC1D,KAAK,oBAAoB;YACvB,OAAO,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD;YACE,OAAO,sCAAsC,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Validate Screen MCP Tool
3
+ * SPEC-LAYOUT-002 Phase 4: Validate JSON screen definition with helpful feedback
4
+ */
5
+ import type { ValidateScreenInput, ValidateScreenOutput } from '../schemas/mcp-schemas.js';
6
+ /**
7
+ * Validate JSON screen definition with helpful feedback
8
+ *
9
+ * @param input - Screen definition and validation options
10
+ * @returns Validation result with errors, warnings, and suggestions
11
+ */
12
+ export declare function validateScreenTool(input: ValidateScreenInput): Promise<ValidateScreenOutput>;
13
+ //# sourceMappingURL=validate-screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-screen.d.ts","sourceRoot":"","sources":["../../src/tools/validate-screen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAErB,MAAM,2BAA2B,CAAC;AAqEnC;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}