@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,177 @@
1
+ /**
2
+ * @tekton-ui/core - Template Registry
3
+ * Singleton pattern for managing screen templates
4
+ * [SPEC-UI-002] [TAG-UI002-004]
5
+ */
6
+ import type { ScreenTemplate, ScreenCategory, TemplateValidationResult } from './types.js';
7
+ /**
8
+ * TemplateRegistry - Singleton registry for screen templates
9
+ * 화면 템플릿을 관리하는 싱글톤 레지스트리
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const registry = TemplateRegistry.getInstance();
14
+ * registry.register(loginTemplate);
15
+ *
16
+ * const template = registry.get('auth.login');
17
+ * const authTemplates = registry.getByCategory('auth');
18
+ * ```
19
+ */
20
+ export declare class TemplateRegistry {
21
+ private static instance;
22
+ private templates;
23
+ /**
24
+ * Private constructor to enforce singleton pattern
25
+ * 싱글톤 패턴을 위한 private 생성자
26
+ */
27
+ private constructor();
28
+ /**
29
+ * Get singleton instance
30
+ * 싱글톤 인스턴스 반환
31
+ *
32
+ * @returns TemplateRegistry instance
33
+ */
34
+ static getInstance(): TemplateRegistry;
35
+ /**
36
+ * Register a screen template
37
+ * 화면 템플릿 등록
38
+ *
39
+ * [TAG-UI002-004] - 필수 컴포넌트 검증
40
+ * [TAG-UI002-007] - 템플릿 로드 시 필수 컴포넌트 검증
41
+ *
42
+ * @param template - ScreenTemplate to register
43
+ * @throws Error if template validation fails
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * registry.register(loginTemplate);
48
+ * ```
49
+ */
50
+ register(template: ScreenTemplate): void;
51
+ /**
52
+ * Register multiple templates at once
53
+ * 여러 템플릿을 한 번에 등록
54
+ *
55
+ * @param templates - Array of ScreenTemplates to register
56
+ * @throws Error if any template validation fails
57
+ */
58
+ registerAll(templates: ScreenTemplate[]): void;
59
+ /**
60
+ * Get a template by ID
61
+ * ID로 템플릿 조회
62
+ *
63
+ * @param id - Template ID (e.g., 'auth.login')
64
+ * @returns ScreenTemplate if found, undefined otherwise
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const loginTemplate = registry.get('auth.login');
69
+ * ```
70
+ */
71
+ get(id: string): ScreenTemplate | undefined;
72
+ /**
73
+ * Get templates by category
74
+ * 카테고리별 템플릿 조회
75
+ *
76
+ * @param category - ScreenCategory
77
+ * @returns Array of templates in the category
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * const authTemplates = registry.getByCategory('auth');
82
+ * ```
83
+ */
84
+ getByCategory(category: ScreenCategory): ScreenTemplate[];
85
+ /**
86
+ * Get all registered templates
87
+ * 등록된 모든 템플릿 조회
88
+ *
89
+ * @returns Array of all templates
90
+ */
91
+ getAll(): ScreenTemplate[];
92
+ /**
93
+ * Find templates by required components
94
+ * 필수 컴포넌트로 템플릿 검색
95
+ *
96
+ * @param components - Array of required component names
97
+ * @returns Array of templates that require all specified components
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const templatesNeedingButton = registry.findByRequiredComponents(['Button', 'Form']);
102
+ * ```
103
+ */
104
+ findByRequiredComponents(components: string[]): ScreenTemplate[];
105
+ /**
106
+ * Check if a template is registered
107
+ * 템플릿 등록 여부 확인
108
+ *
109
+ * @param id - Template ID
110
+ * @returns true if template is registered, false otherwise
111
+ */
112
+ has(id: string): boolean;
113
+ /**
114
+ * Unregister a template
115
+ * 템플릿 등록 해제
116
+ *
117
+ * @param id - Template ID to unregister
118
+ * @returns true if template was found and removed, false otherwise
119
+ */
120
+ unregister(id: string): boolean;
121
+ /**
122
+ * Clear all registered templates
123
+ * 모든 등록된 템플릿 삭제
124
+ */
125
+ clear(): void;
126
+ /**
127
+ * Get total number of registered templates
128
+ * 등록된 템플릿 총 개수 조회
129
+ *
130
+ * @returns Number of registered templates
131
+ */
132
+ count(): number;
133
+ /**
134
+ * Validate a template
135
+ * 템플릿 검증
136
+ *
137
+ * [TAG-UI002-004] - 필수 컴포넌트 검증
138
+ * [TAG-UI002-019] - 필수 컴포넌트 없이 렌더링 금지
139
+ *
140
+ * @param template - ScreenTemplate to validate
141
+ * @returns TemplateValidationResult
142
+ */
143
+ validateTemplate(template: ScreenTemplate): TemplateValidationResult;
144
+ /**
145
+ * Get template IDs by category
146
+ * 카테고리별 템플릿 ID 목록 조회
147
+ *
148
+ * @param category - ScreenCategory
149
+ * @returns Array of template IDs
150
+ */
151
+ getIdsByCategory(category: ScreenCategory): string[];
152
+ /**
153
+ * Export all templates as JSON
154
+ * 모든 템플릿을 JSON으로 내보내기
155
+ *
156
+ * Note: This does not export the Component field
157
+ *
158
+ * @returns JSON string of all templates (without Component field)
159
+ */
160
+ exportToJSON(): string;
161
+ /**
162
+ * Get template metadata (without Component)
163
+ * 템플릿 메타데이터 조회 (Component 제외)
164
+ *
165
+ * @param id - Template ID
166
+ * @returns Template metadata without Component field
167
+ */
168
+ getMetadata(id: string): Omit<ScreenTemplate, 'Component'> | undefined;
169
+ }
170
+ /**
171
+ * Get default registry instance
172
+ * 기본 레지스트리 인스턴스 반환
173
+ *
174
+ * @returns TemplateRegistry singleton instance
175
+ */
176
+ export declare function getRegistry(): TemplateRegistry;
177
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/screen-templates/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,SAAS,CAA0C;IAE3D;;;OAGG;IACH,OAAO;IAEP;;;;;OAKG;IACH,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAOtC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAWxC;;;;;;OAMG;IACH,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI;IAI9C;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI3C;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,EAAE;IAIzD;;;;;OAKG;IACH,MAAM,IAAI,cAAc,EAAE;IAI1B;;;;;;;;;;;OAWG;IACH,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE;IAMhE;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;OAKG;IACH,KAAK,IAAI,MAAM;IAIf;;;;;;;;;OASG;IACH,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,wBAAwB;IAwDpE;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE;IAIpD;;;;;;;OAOG;IACH,YAAY,IAAI,MAAM;IAQtB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,SAAS;CASvE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,gBAAgB,CAE9C"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * @tekton-ui/core - Template Registry
3
+ * Singleton pattern for managing screen templates
4
+ * [SPEC-UI-002] [TAG-UI002-004]
5
+ */
6
+ /**
7
+ * TemplateRegistry - Singleton registry for screen templates
8
+ * 화면 템플릿을 관리하는 싱글톤 레지스트리
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const registry = TemplateRegistry.getInstance();
13
+ * registry.register(loginTemplate);
14
+ *
15
+ * const template = registry.get('auth.login');
16
+ * const authTemplates = registry.getByCategory('auth');
17
+ * ```
18
+ */
19
+ export class TemplateRegistry {
20
+ static instance;
21
+ templates = new Map();
22
+ /**
23
+ * Private constructor to enforce singleton pattern
24
+ * 싱글톤 패턴을 위한 private 생성자
25
+ */
26
+ constructor() { }
27
+ /**
28
+ * Get singleton instance
29
+ * 싱글톤 인스턴스 반환
30
+ *
31
+ * @returns TemplateRegistry instance
32
+ */
33
+ static getInstance() {
34
+ if (!TemplateRegistry.instance) {
35
+ TemplateRegistry.instance = new TemplateRegistry();
36
+ }
37
+ return TemplateRegistry.instance;
38
+ }
39
+ /**
40
+ * Register a screen template
41
+ * 화면 템플릿 등록
42
+ *
43
+ * [TAG-UI002-004] - 필수 컴포넌트 검증
44
+ * [TAG-UI002-007] - 템플릿 로드 시 필수 컴포넌트 검증
45
+ *
46
+ * @param template - ScreenTemplate to register
47
+ * @throws Error if template validation fails
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * registry.register(loginTemplate);
52
+ * ```
53
+ */
54
+ register(template) {
55
+ // Validate template before registration
56
+ const validationResult = this.validateTemplate(template);
57
+ if (!validationResult.valid) {
58
+ const errors = validationResult.errors?.map(e => e.message).join(', ');
59
+ throw new Error(`Template validation failed for ${template.id}: ${errors}`);
60
+ }
61
+ this.templates.set(template.id, template);
62
+ }
63
+ /**
64
+ * Register multiple templates at once
65
+ * 여러 템플릿을 한 번에 등록
66
+ *
67
+ * @param templates - Array of ScreenTemplates to register
68
+ * @throws Error if any template validation fails
69
+ */
70
+ registerAll(templates) {
71
+ templates.forEach(template => this.register(template));
72
+ }
73
+ /**
74
+ * Get a template by ID
75
+ * ID로 템플릿 조회
76
+ *
77
+ * @param id - Template ID (e.g., 'auth.login')
78
+ * @returns ScreenTemplate if found, undefined otherwise
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * const loginTemplate = registry.get('auth.login');
83
+ * ```
84
+ */
85
+ get(id) {
86
+ return this.templates.get(id);
87
+ }
88
+ /**
89
+ * Get templates by category
90
+ * 카테고리별 템플릿 조회
91
+ *
92
+ * @param category - ScreenCategory
93
+ * @returns Array of templates in the category
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const authTemplates = registry.getByCategory('auth');
98
+ * ```
99
+ */
100
+ getByCategory(category) {
101
+ return Array.from(this.templates.values()).filter(template => template.category === category);
102
+ }
103
+ /**
104
+ * Get all registered templates
105
+ * 등록된 모든 템플릿 조회
106
+ *
107
+ * @returns Array of all templates
108
+ */
109
+ getAll() {
110
+ return Array.from(this.templates.values());
111
+ }
112
+ /**
113
+ * Find templates by required components
114
+ * 필수 컴포넌트로 템플릿 검색
115
+ *
116
+ * @param components - Array of required component names
117
+ * @returns Array of templates that require all specified components
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const templatesNeedingButton = registry.findByRequiredComponents(['Button', 'Form']);
122
+ * ```
123
+ */
124
+ findByRequiredComponents(components) {
125
+ return Array.from(this.templates.values()).filter(template => components.every(comp => template.requiredComponents.includes(comp)));
126
+ }
127
+ /**
128
+ * Check if a template is registered
129
+ * 템플릿 등록 여부 확인
130
+ *
131
+ * @param id - Template ID
132
+ * @returns true if template is registered, false otherwise
133
+ */
134
+ has(id) {
135
+ return this.templates.has(id);
136
+ }
137
+ /**
138
+ * Unregister a template
139
+ * 템플릿 등록 해제
140
+ *
141
+ * @param id - Template ID to unregister
142
+ * @returns true if template was found and removed, false otherwise
143
+ */
144
+ unregister(id) {
145
+ return this.templates.delete(id);
146
+ }
147
+ /**
148
+ * Clear all registered templates
149
+ * 모든 등록된 템플릿 삭제
150
+ */
151
+ clear() {
152
+ this.templates.clear();
153
+ }
154
+ /**
155
+ * Get total number of registered templates
156
+ * 등록된 템플릿 총 개수 조회
157
+ *
158
+ * @returns Number of registered templates
159
+ */
160
+ count() {
161
+ return this.templates.size;
162
+ }
163
+ /**
164
+ * Validate a template
165
+ * 템플릿 검증
166
+ *
167
+ * [TAG-UI002-004] - 필수 컴포넌트 검증
168
+ * [TAG-UI002-019] - 필수 컴포넌트 없이 렌더링 금지
169
+ *
170
+ * @param template - ScreenTemplate to validate
171
+ * @returns TemplateValidationResult
172
+ */
173
+ validateTemplate(template) {
174
+ const errors = [];
175
+ // Validate required components
176
+ if (!template.requiredComponents || template.requiredComponents.length === 0) {
177
+ errors.push({
178
+ type: 'missing_component',
179
+ message: 'Template must specify at least one required component',
180
+ field: 'requiredComponents',
181
+ });
182
+ }
183
+ // Validate skeleton sections
184
+ if (!template.skeleton.sections || template.skeleton.sections.length === 0) {
185
+ errors.push({
186
+ type: 'missing_section',
187
+ message: 'Template must have at least one section',
188
+ field: 'skeleton.sections',
189
+ });
190
+ }
191
+ // Validate required sections
192
+ const requiredSections = template.skeleton.sections.filter(s => s.required);
193
+ if (requiredSections.length === 0) {
194
+ errors.push({
195
+ type: 'missing_section',
196
+ message: 'Template must have at least one required section',
197
+ field: 'skeleton.sections',
198
+ });
199
+ }
200
+ // Validate layout responsive configuration
201
+ if (!template.layout.responsive) {
202
+ errors.push({
203
+ type: 'invalid_layout',
204
+ message: 'Template must have responsive layout configuration',
205
+ field: 'layout.responsive',
206
+ });
207
+ }
208
+ else {
209
+ // Validate all breakpoints are present
210
+ const { desktop, tablet, mobile } = template.layout.responsive;
211
+ if (!desktop || !tablet || !mobile) {
212
+ errors.push({
213
+ type: 'invalid_layout',
214
+ message: 'Template must have desktop, tablet, and mobile responsive layouts',
215
+ field: 'layout.responsive',
216
+ });
217
+ }
218
+ }
219
+ return {
220
+ valid: errors.length === 0,
221
+ errors: errors.length > 0 ? errors : undefined,
222
+ };
223
+ }
224
+ /**
225
+ * Get template IDs by category
226
+ * 카테고리별 템플릿 ID 목록 조회
227
+ *
228
+ * @param category - ScreenCategory
229
+ * @returns Array of template IDs
230
+ */
231
+ getIdsByCategory(category) {
232
+ return this.getByCategory(category).map(t => t.id);
233
+ }
234
+ /**
235
+ * Export all templates as JSON
236
+ * 모든 템플릿을 JSON으로 내보내기
237
+ *
238
+ * Note: This does not export the Component field
239
+ *
240
+ * @returns JSON string of all templates (without Component field)
241
+ */
242
+ exportToJSON() {
243
+ const exportData = this.getAll().map(template => {
244
+ const { Component: _Component, ...rest } = template;
245
+ return rest;
246
+ });
247
+ return JSON.stringify(exportData, null, 2);
248
+ }
249
+ /**
250
+ * Get template metadata (without Component)
251
+ * 템플릿 메타데이터 조회 (Component 제외)
252
+ *
253
+ * @param id - Template ID
254
+ * @returns Template metadata without Component field
255
+ */
256
+ getMetadata(id) {
257
+ const template = this.get(id);
258
+ if (!template) {
259
+ return undefined;
260
+ }
261
+ const { Component: _Component, ...metadata } = template;
262
+ return metadata;
263
+ }
264
+ }
265
+ /**
266
+ * Get default registry instance
267
+ * 기본 레지스트리 인스턴스 반환
268
+ *
269
+ * @returns TemplateRegistry singleton instance
270
+ */
271
+ export function getRegistry() {
272
+ return TemplateRegistry.getInstance();
273
+ }
274
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/screen-templates/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @tekton-ui/core - Account Templates Export
3
+ * [SPEC-UI-002] Account Screen Templates (1)
4
+ */
5
+ export * from './profile.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/screen-templates/templates/account/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @tekton-ui/core - Account Templates Export
3
+ * [SPEC-UI-002] Account Screen Templates (1)
4
+ */
5
+ export * from './profile.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/screen-templates/templates/account/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,cAAc,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @tekton-ui/core - Account/Profile Screen Template
3
+ * [SPEC-UI-002] [TAG-UI002-030] account.profile
4
+ *
5
+ * Design Reference: Claude.ai Profile Page (Claude Web 155.png)
6
+ * - 프로필 이미지 + 기본 정보
7
+ * - 편집 가능한 필드 명확히 표시
8
+ */
9
+ import type { ScreenTemplate, ScreenTemplateProps } from '../../types.js';
10
+ import type { FC } from '../../types.js';
11
+ /**
12
+ * Profile Component
13
+ * 프로필/내 계정 화면 컴포넌트
14
+ *
15
+ * Required Components: Avatar, Button, Input, Form, Card
16
+ */
17
+ export declare const ProfileComponent: FC<ScreenTemplateProps>;
18
+ /**
19
+ * Account/Profile Screen Template
20
+ * 프로필/내 계정 화면 템플릿 정의
21
+ */
22
+ export declare const profileTemplate: ScreenTemplate;
23
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../../src/screen-templates/templates/account/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,mBAAmB,CA8KpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,cAoE7B,CAAC"}