@oddkin/workbench 0.0.0-stage → 1.0.0-beta.1

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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -2
  3. package/dist/app/card-previews.d.ts +14 -0
  4. package/dist/app/card-previews.d.ts.map +1 -0
  5. package/dist/app/card-previews.js +140 -0
  6. package/dist/app/card-previews.js.map +1 -0
  7. package/dist/app/copy.d.ts +48 -0
  8. package/dist/app/copy.d.ts.map +1 -0
  9. package/dist/app/copy.js +52 -0
  10. package/dist/app/copy.js.map +1 -0
  11. package/dist/app/define.d.ts +3 -0
  12. package/dist/app/define.d.ts.map +1 -0
  13. package/dist/app/define.js +10 -0
  14. package/dist/app/define.js.map +1 -0
  15. package/dist/app/details.d.ts +22 -0
  16. package/dist/app/details.d.ts.map +1 -0
  17. package/dist/app/details.js +17 -0
  18. package/dist/app/details.js.map +1 -0
  19. package/dist/app/index.d.ts +12 -0
  20. package/dist/app/index.d.ts.map +1 -0
  21. package/dist/app/index.js +9 -0
  22. package/dist/app/index.js.map +1 -0
  23. package/dist/app/routes.d.ts +26 -0
  24. package/dist/app/routes.d.ts.map +1 -0
  25. package/dist/app/routes.js +96 -0
  26. package/dist/app/routes.js.map +1 -0
  27. package/dist/app/search.d.ts +17 -0
  28. package/dist/app/search.d.ts.map +1 -0
  29. package/dist/app/search.js +52 -0
  30. package/dist/app/search.js.map +1 -0
  31. package/dist/app/shell.d.ts +29 -0
  32. package/dist/app/shell.d.ts.map +1 -0
  33. package/dist/app/shell.js +478 -0
  34. package/dist/app/shell.js.map +1 -0
  35. package/dist/app/styles.d.ts +2 -0
  36. package/dist/app/styles.d.ts.map +1 -0
  37. package/dist/app/styles.js +356 -0
  38. package/dist/app/styles.js.map +1 -0
  39. package/dist/app/theme-studio.d.ts +12 -0
  40. package/dist/app/theme-studio.d.ts.map +1 -0
  41. package/dist/app/theme-studio.js +14 -0
  42. package/dist/app/theme-studio.js.map +1 -0
  43. package/dist/app/views.d.ts +38 -0
  44. package/dist/app/views.d.ts.map +1 -0
  45. package/dist/app/views.js +252 -0
  46. package/dist/app/views.js.map +1 -0
  47. package/dist/config/index.d.ts +170 -0
  48. package/dist/config/index.d.ts.map +1 -0
  49. package/dist/config/index.js +148 -0
  50. package/dist/config/index.js.map +1 -0
  51. package/dist/conformance/button.d.ts +2 -0
  52. package/dist/conformance/button.d.ts.map +1 -0
  53. package/dist/conformance/button.js +233 -0
  54. package/dist/conformance/button.js.map +1 -0
  55. package/dist/conformance/index.d.ts +107 -0
  56. package/dist/conformance/index.d.ts.map +1 -0
  57. package/dist/conformance/index.js +60 -0
  58. package/dist/conformance/index.js.map +1 -0
  59. package/dist/data/build.d.ts +36 -0
  60. package/dist/data/build.d.ts.map +1 -0
  61. package/dist/data/build.js +260 -0
  62. package/dist/data/build.js.map +1 -0
  63. package/dist/data/import-map.d.ts +59 -0
  64. package/dist/data/import-map.d.ts.map +1 -0
  65. package/dist/data/import-map.js +195 -0
  66. package/dist/data/import-map.js.map +1 -0
  67. package/dist/data/index.d.ts +14 -0
  68. package/dist/data/index.d.ts.map +1 -0
  69. package/dist/data/index.js +10 -0
  70. package/dist/data/index.js.map +1 -0
  71. package/dist/data/theme-studio.d.ts +21 -0
  72. package/dist/data/theme-studio.d.ts.map +1 -0
  73. package/dist/data/theme-studio.js +112 -0
  74. package/dist/data/theme-studio.js.map +1 -0
  75. package/dist/data/types.d.ts +187 -0
  76. package/dist/data/types.d.ts.map +1 -0
  77. package/dist/data/types.js +4 -0
  78. package/dist/data/types.js.map +1 -0
  79. package/dist/examples/index.d.ts +101 -0
  80. package/dist/examples/index.d.ts.map +1 -0
  81. package/dist/examples/index.js +106 -0
  82. package/dist/examples/index.js.map +1 -0
  83. package/dist/frame/index.d.ts +9 -0
  84. package/dist/frame/index.d.ts.map +1 -0
  85. package/dist/frame/index.js +482 -0
  86. package/dist/frame/index.js.map +1 -0
  87. package/dist/internal/diagnostics.d.ts +17 -0
  88. package/dist/internal/diagnostics.d.ts.map +1 -0
  89. package/dist/internal/diagnostics.js +19 -0
  90. package/dist/internal/diagnostics.js.map +1 -0
  91. package/dist/node/bin.d.ts +3 -0
  92. package/dist/node/bin.d.ts.map +1 -0
  93. package/dist/node/bin.js +12 -0
  94. package/dist/node/bin.js.map +1 -0
  95. package/dist/node/cli.d.ts +17 -0
  96. package/dist/node/cli.d.ts.map +1 -0
  97. package/dist/node/cli.js +198 -0
  98. package/dist/node/cli.js.map +1 -0
  99. package/dist/node/config.d.ts +28 -0
  100. package/dist/node/config.d.ts.map +1 -0
  101. package/dist/node/config.js +80 -0
  102. package/dist/node/config.js.map +1 -0
  103. package/dist/node/example-modules.d.ts +8 -0
  104. package/dist/node/example-modules.d.ts.map +1 -0
  105. package/dist/node/example-modules.js +28 -0
  106. package/dist/node/example-modules.js.map +1 -0
  107. package/dist/node/generated.d.ts +19 -0
  108. package/dist/node/generated.d.ts.map +1 -0
  109. package/dist/node/generated.js +109 -0
  110. package/dist/node/generated.js.map +1 -0
  111. package/dist/node/html.d.ts +35 -0
  112. package/dist/node/html.d.ts.map +1 -0
  113. package/dist/node/html.js +51 -0
  114. package/dist/node/html.js.map +1 -0
  115. package/dist/node/index.d.ts +24 -0
  116. package/dist/node/index.d.ts.map +1 -0
  117. package/dist/node/index.js +15 -0
  118. package/dist/node/index.js.map +1 -0
  119. package/dist/node/inputs.d.ts +26 -0
  120. package/dist/node/inputs.d.ts.map +1 -0
  121. package/dist/node/inputs.js +282 -0
  122. package/dist/node/inputs.js.map +1 -0
  123. package/dist/node/packages.d.ts +35 -0
  124. package/dist/node/packages.d.ts.map +1 -0
  125. package/dist/node/packages.js +87 -0
  126. package/dist/node/packages.js.map +1 -0
  127. package/dist/node/preload.d.ts +10 -0
  128. package/dist/node/preload.d.ts.map +1 -0
  129. package/dist/node/preload.js +61 -0
  130. package/dist/node/preload.js.map +1 -0
  131. package/dist/node/server.d.ts +42 -0
  132. package/dist/node/server.d.ts.map +1 -0
  133. package/dist/node/server.js +410 -0
  134. package/dist/node/server.js.map +1 -0
  135. package/dist/node/static.d.ts +43 -0
  136. package/dist/node/static.d.ts.map +1 -0
  137. package/dist/node/static.js +157 -0
  138. package/dist/node/static.js.map +1 -0
  139. package/dist/node/workbench.d.ts +43 -0
  140. package/dist/node/workbench.d.ts.map +1 -0
  141. package/dist/node/workbench.js +204 -0
  142. package/dist/node/workbench.js.map +1 -0
  143. package/dist/pages/build.d.ts +22 -0
  144. package/dist/pages/build.d.ts.map +1 -0
  145. package/dist/pages/build.js +363 -0
  146. package/dist/pages/build.js.map +1 -0
  147. package/dist/pages/defaults.d.ts +16 -0
  148. package/dist/pages/defaults.d.ts.map +1 -0
  149. package/dist/pages/defaults.js +88 -0
  150. package/dist/pages/defaults.js.map +1 -0
  151. package/dist/pages/index.d.ts +14 -0
  152. package/dist/pages/index.d.ts.map +1 -0
  153. package/dist/pages/index.js +10 -0
  154. package/dist/pages/index.js.map +1 -0
  155. package/dist/pages/navigation.d.ts +48 -0
  156. package/dist/pages/navigation.d.ts.map +1 -0
  157. package/dist/pages/navigation.js +83 -0
  158. package/dist/pages/navigation.js.map +1 -0
  159. package/dist/pages/types.d.ts +148 -0
  160. package/dist/pages/types.d.ts.map +1 -0
  161. package/dist/pages/types.js +3 -0
  162. package/dist/pages/types.js.map +1 -0
  163. package/dist/panels/catalog-define.d.ts +3 -0
  164. package/dist/panels/catalog-define.d.ts.map +1 -0
  165. package/dist/panels/catalog-define.js +7 -0
  166. package/dist/panels/catalog-define.js.map +1 -0
  167. package/dist/panels/catalog-layout-styles.d.ts +2 -0
  168. package/dist/panels/catalog-layout-styles.d.ts.map +1 -0
  169. package/dist/panels/catalog-layout-styles.js +54 -0
  170. package/dist/panels/catalog-layout-styles.js.map +1 -0
  171. package/dist/panels/catalog-styles.d.ts +2 -0
  172. package/dist/panels/catalog-styles.d.ts.map +1 -0
  173. package/dist/panels/catalog-styles.js +106 -0
  174. package/dist/panels/catalog-styles.js.map +1 -0
  175. package/dist/panels/catalog.d.ts +37 -0
  176. package/dist/panels/catalog.d.ts.map +1 -0
  177. package/dist/panels/catalog.js +74 -0
  178. package/dist/panels/catalog.js.map +1 -0
  179. package/dist/panels/component-define.d.ts +3 -0
  180. package/dist/panels/component-define.d.ts.map +1 -0
  181. package/dist/panels/component-define.js +6 -0
  182. package/dist/panels/component-define.js.map +1 -0
  183. package/dist/panels/component-detail.d.ts +49 -0
  184. package/dist/panels/component-detail.d.ts.map +1 -0
  185. package/dist/panels/component-detail.js +1352 -0
  186. package/dist/panels/component-detail.js.map +1 -0
  187. package/dist/panels/component.d.ts +17 -0
  188. package/dist/panels/component.d.ts.map +1 -0
  189. package/dist/panels/component.js +10 -0
  190. package/dist/panels/component.js.map +1 -0
  191. package/dist/panels/example-styles.d.ts +2 -0
  192. package/dist/panels/example-styles.d.ts.map +1 -0
  193. package/dist/panels/example-styles.js +343 -0
  194. package/dist/panels/example-styles.js.map +1 -0
  195. package/dist/panels/foundation-define.d.ts +3 -0
  196. package/dist/panels/foundation-define.d.ts.map +1 -0
  197. package/dist/panels/foundation-define.js +6 -0
  198. package/dist/panels/foundation-define.js.map +1 -0
  199. package/dist/panels/foundation-detail.d.ts +23 -0
  200. package/dist/panels/foundation-detail.d.ts.map +1 -0
  201. package/dist/panels/foundation-detail.js +216 -0
  202. package/dist/panels/foundation-detail.js.map +1 -0
  203. package/dist/panels/foundation.d.ts +15 -0
  204. package/dist/panels/foundation.d.ts.map +1 -0
  205. package/dist/panels/foundation.js +9 -0
  206. package/dist/panels/foundation.js.map +1 -0
  207. package/dist/panels/model.d.ts +184 -0
  208. package/dist/panels/model.d.ts.map +1 -0
  209. package/dist/panels/model.js +488 -0
  210. package/dist/panels/model.js.map +1 -0
  211. package/dist/panels/styles.d.ts +3 -0
  212. package/dist/panels/styles.d.ts.map +1 -0
  213. package/dist/panels/styles.js +265 -0
  214. package/dist/panels/styles.js.map +1 -0
  215. package/dist/panels/theme-model.d.ts +69 -0
  216. package/dist/panels/theme-model.d.ts.map +1 -0
  217. package/dist/panels/theme-model.js +166 -0
  218. package/dist/panels/theme-model.js.map +1 -0
  219. package/dist/panels/theme-studio.d.ts +32 -0
  220. package/dist/panels/theme-studio.d.ts.map +1 -0
  221. package/dist/panels/theme-studio.js +375 -0
  222. package/dist/panels/theme-studio.js.map +1 -0
  223. package/dist/preview/frame.d.ts +44 -0
  224. package/dist/preview/frame.d.ts.map +1 -0
  225. package/dist/preview/frame.js +260 -0
  226. package/dist/preview/frame.js.map +1 -0
  227. package/dist/preview/index.d.ts +26 -0
  228. package/dist/preview/index.d.ts.map +1 -0
  229. package/dist/preview/index.js +58 -0
  230. package/dist/preview/index.js.map +1 -0
  231. package/dist/preview/theme-generation.d.ts +33 -0
  232. package/dist/preview/theme-generation.d.ts.map +1 -0
  233. package/dist/preview/theme-generation.js +48 -0
  234. package/dist/preview/theme-generation.js.map +1 -0
  235. package/dist/protocol/index.d.ts +222 -0
  236. package/dist/protocol/index.d.ts.map +1 -0
  237. package/dist/protocol/index.js +272 -0
  238. package/dist/protocol/index.js.map +1 -0
  239. package/dist/testing/index.d.ts +47 -0
  240. package/dist/testing/index.d.ts.map +1 -0
  241. package/dist/testing/index.js +145 -0
  242. package/dist/testing/index.js.map +1 -0
  243. package/package.json +118 -4
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Build the Workbench data files from analyzer outputs, configuration, authored content, and the
3
+ * token inspection the foundations reference (workbench.md §2.1). Pure and deterministic: the same
4
+ * inputs give the same files, and no build time enters them.
5
+ */
6
+ import { resolveWorkbenchConfig, } from '../config/index.js';
7
+ import { DiagnosticList, isObject } from '../internal/diagnostics.js';
8
+ import { buildPageRegistry } from '../pages/build.js';
9
+ import { FOUNDATIONS } from '../pages/defaults.js';
10
+ import { registrationOf } from '../panels/model.js';
11
+ import { themeStudioPage } from './theme-studio.js';
12
+ import { DATA_VERSION, INDEX_FORMAT, PAGE_FORMAT, } from './types.js';
13
+ /** Top-level metadata fields that describe one package rather than a record of facts. */
14
+ const PER_PACKAGE = new Set(['schema', 'oddkinVersion', 'library', 'diagnostics']);
15
+ /** The data file of a page, relative to the index: `pages/components/odd-button.json`. */
16
+ export function pageFile(id) {
17
+ return `pages/${id.split('/').map(encodeURIComponent).join('/')}.json`;
18
+ }
19
+ /**
20
+ * One metadata view over several packages. Records (components, examples, foundations, …) are
21
+ * merged by id; the same id with different content in two packages keeps the first and is
22
+ * diagnosed. A prefix shared by every package is kept for page titles.
23
+ */
24
+ function mergeMetadata(libraries, out) {
25
+ const merged = {};
26
+ const owner = new Map();
27
+ const prefixes = new Set();
28
+ for (const library of libraries) {
29
+ const metadata = library.metadata;
30
+ if (!metadata)
31
+ continue;
32
+ const prefix = metadata['library']?.prefix;
33
+ if (typeof prefix === 'string' && prefix)
34
+ prefixes.add(prefix);
35
+ for (const [field, value] of Object.entries(metadata)) {
36
+ if (PER_PACKAGE.has(field) || !isObject(value))
37
+ continue;
38
+ const target = (merged[field] ??= {});
39
+ for (const [id, entry] of Object.entries(value)) {
40
+ if (!(id in target)) {
41
+ target[id] = entry;
42
+ owner.set(`${field}/${id}`, library.name);
43
+ }
44
+ else if (JSON.stringify(target[id]) !== JSON.stringify(entry)) {
45
+ out.warn('data.metadata.conflict', `${library.name} and ${owner.get(`${field}/${id}`)} both describe ${field} "${id}" differently; the first is used.`, `/${field}/${id}`);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ return {
51
+ ...merged,
52
+ ...(prefixes.size === 1 ? { library: { prefix: [...prefixes][0] } } : {}),
53
+ };
54
+ }
55
+ /** Custom-element declarations by tag; the first package that declares a tag wins, as in the registry. */
56
+ function declarations(libraries) {
57
+ const found = new Map();
58
+ for (const library of libraries) {
59
+ for (const module of library.cem?.modules ?? []) {
60
+ for (const declaration of module.declarations ?? []) {
61
+ if (!declaration.customElement || !declaration.tagName || found.has(declaration.tagName))
62
+ continue;
63
+ const registration = library.registrations?.[declaration.tagName];
64
+ found.set(declaration.tagName, {
65
+ declaration,
66
+ module: module.path,
67
+ package: library.name,
68
+ ...(registration ? { registration } : {}),
69
+ });
70
+ }
71
+ }
72
+ }
73
+ return found;
74
+ }
75
+ const tokenName = (id) => id.replace(/^token:/, '');
76
+ /** Authored content by page id, with renamed ids resolved through `aliases`. */
77
+ function authoredPages(docs) {
78
+ const byId = new Map();
79
+ for (const [key, content] of Object.entries(docs?.pages ?? {}))
80
+ byId.set(docs?.aliases?.[key] ?? key, content);
81
+ return byId;
82
+ }
83
+ function componentPage(page, declared, metadata, definitions, inspection, content) {
84
+ const tag = declared.declaration.tagName;
85
+ const enrichment = Object.values(metadata.components ?? {}).find((c) => c.tag === tag);
86
+ const authored = definitions.get(tag) ?? {};
87
+ const listed = Object.entries(metadata.examples ?? {}).filter(([, example]) => example.component === `component:${tag}`);
88
+ const named = new Set(listed.map(([, example]) => example.name));
89
+ const examples = [
90
+ ...listed.map(([id, example]) => {
91
+ const definition = authored[example.name];
92
+ return { id, ...example, ...(definition ? { definition } : {}) };
93
+ }),
94
+ // Examples the metadata does not list yet (no analyzer run since they were authored).
95
+ ...Object.entries(authored)
96
+ .filter(([name]) => !named.has(name))
97
+ .map(([name, definition]) => ({
98
+ id: `example:${tag}/${name}`,
99
+ component: `component:${tag}`,
100
+ name,
101
+ definition,
102
+ })),
103
+ ];
104
+ const reads = enrichment?.tokenReads ?? [];
105
+ const seen = new Set();
106
+ const tokens = reads.flatMap((read) => {
107
+ const name = isObject(read) && typeof read['token'] === 'string' ? read['token'] : undefined;
108
+ if (!name || seen.has(name))
109
+ return [];
110
+ seen.add(name);
111
+ return [inspection?.get(name) ?? { name, missing: true }];
112
+ });
113
+ const guidance = content?.sections?.['guidance']?.guidance?.trim();
114
+ const prose = {
115
+ ...(content?.useFor?.length ? { useFor: content.useFor } : {}),
116
+ ...(content?.notFor?.length ? { notFor: content.notFor } : {}),
117
+ ...(guidance ? { guidance } : {}),
118
+ };
119
+ return {
120
+ format: PAGE_FORMAT,
121
+ version: DATA_VERSION,
122
+ id: page.id,
123
+ kind: 'component',
124
+ tag,
125
+ package: declared.package,
126
+ module: declared.module,
127
+ declaration: declared.declaration,
128
+ ...(enrichment ? { enrichment: enrichment } : {}),
129
+ ...(declared.registration &&
130
+ typeof enrichment?.['registration'] !== 'string'
131
+ ? { registration: declared.registration }
132
+ : {}),
133
+ examples,
134
+ ...(tokens.length ? { tokens } : {}),
135
+ ...(Object.keys(prose).length ? { authored: prose } : {}),
136
+ };
137
+ }
138
+ function foundationPage(page, foundation, inspection, out) {
139
+ const listed = Array.isArray(foundation['tokens']) ? foundation['tokens'] : [];
140
+ const tokens = listed
141
+ .filter((id) => typeof id === 'string')
142
+ .map((id) => {
143
+ const name = tokenName(id);
144
+ const token = inspection?.get(name);
145
+ if (token)
146
+ return token;
147
+ // Without an inspection, one diagnostic covers every page (see buildWorkbenchData).
148
+ if (inspection) {
149
+ out.warn('data.token.missing', `${page.id} lists token "${name}", which the token inspection does not contain; its value is shown as unknown.`, `/pages/${page.id}/tokens/${name}`);
150
+ }
151
+ return { name, missing: true };
152
+ });
153
+ return {
154
+ format: PAGE_FORMAT,
155
+ version: DATA_VERSION,
156
+ id: page.id,
157
+ kind: 'foundation',
158
+ foundation,
159
+ tokens,
160
+ };
161
+ }
162
+ /**
163
+ * Build the index and the visible pages' data. `data` is undefined only when the configuration
164
+ * is invalid; every other problem is a diagnostic and leaves the affected value unknown.
165
+ */
166
+ export function buildWorkbenchData(input) {
167
+ const out = new DiagnosticList();
168
+ const loading = input.diagnostics ?? [];
169
+ const { config, diagnostics: configDiagnostics } = resolveWorkbenchConfig(input.config);
170
+ if (!config)
171
+ return { data: undefined, diagnostics: [...loading, ...configDiagnostics] };
172
+ const metadata = mergeMetadata(input.libraries, out);
173
+ const { registry, diagnostics: registryDiagnostics } = buildPageRegistry({
174
+ config,
175
+ cem: input.libraries.flatMap((library) => (library.cem ? [library.cem] : [])),
176
+ metadata,
177
+ ...(input.docs ? { docs: input.docs } : {}),
178
+ });
179
+ // The registry resolves the same configuration again; its diagnostics include the config's.
180
+ out.items.unshift(...loading, ...registryDiagnostics);
181
+ if (!registry)
182
+ return { data: undefined, diagnostics: out.items };
183
+ const declared = declarations(input.libraries);
184
+ const inspection = input.tokens
185
+ ? new Map(input.tokens.tokens.map((token) => [token.name, token]))
186
+ : undefined;
187
+ if (!inspection && Object.keys(metadata.foundations ?? {}).length > 0) {
188
+ out.warn('data.tokens.missing', 'Foundations reference tokens, but no token inspection was supplied; their values are shown as unknown.', '/foundations');
189
+ }
190
+ const pages = {};
191
+ const files = {};
192
+ const authored = authoredPages(input.docs);
193
+ const definitions = new Map();
194
+ for (const library of input.libraries)
195
+ for (const set of library.examples ?? []) {
196
+ const tag = set.component.replace(/^component:/, '');
197
+ if (!definitions.has(tag))
198
+ definitions.set(tag, set.examples);
199
+ }
200
+ for (const page of registry.pages) {
201
+ if (!page.visible)
202
+ continue;
203
+ let data;
204
+ if (page.kind === 'component') {
205
+ const entry = declared.get(page.id.slice('components/'.length));
206
+ if (!entry)
207
+ continue;
208
+ data = componentPage(page, entry, metadata, definitions, inspection, authored.get(page.id));
209
+ }
210
+ else if (page.kind === 'foundation') {
211
+ const id = FOUNDATIONS.find((f) => `foundations/${f.slug}` === page.id)?.id;
212
+ const foundation = id ? metadata.foundations?.[`foundation:${id}`] : undefined;
213
+ if (!foundation)
214
+ continue;
215
+ data = foundationPage(page, foundation, inspection, out);
216
+ }
217
+ else if (page.id === 'theme-studio') {
218
+ continue;
219
+ }
220
+ else {
221
+ data = { format: PAGE_FORMAT, version: DATA_VERSION, id: page.id, kind: page.kind };
222
+ }
223
+ pages[page.id] = data;
224
+ files[page.id] = pageFile(page.id);
225
+ }
226
+ const studio = registry.pages.find((page) => page.visible && page.id === 'theme-studio');
227
+ if (studio) {
228
+ const components = Object.values(pages).filter((page) => page.kind === 'component');
229
+ pages[studio.id] = themeStudioPage(studio.id, components, config, input.theme ?? {}, out);
230
+ files[studio.id] = pageFile(studio.id);
231
+ }
232
+ const first = input.libraries[0];
233
+ const index = {
234
+ format: INDEX_FORMAT,
235
+ version: DATA_VERSION,
236
+ branding: {
237
+ name: config.branding.name ?? first?.name ?? 'Workbench',
238
+ ...(config.branding.logo ? { logo: config.branding.logo } : {}),
239
+ links: config.branding.links ?? [],
240
+ },
241
+ libraries: input.libraries.map((library) => {
242
+ const prefix = library.metadata?.library?.prefix;
243
+ return {
244
+ name: library.name,
245
+ version: library.version,
246
+ ...(typeof prefix === 'string' && prefix ? { prefix } : {}),
247
+ };
248
+ }),
249
+ registry,
250
+ pages: files,
251
+ previews: Object.values(pages).flatMap((page) => page.kind === 'component' && registrationOf(page) !== undefined ? [page.id] : []),
252
+ diagnostics: out.items,
253
+ };
254
+ return { data: { index, pages }, diagnostics: out.items };
255
+ }
256
+ /** Serialize a data file: two-space JSON with a final newline, so output is byte-stable. */
257
+ export function serializeData(value) {
258
+ return `${JSON.stringify(value, null, 2)}\n`;
259
+ }
260
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/data/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Import maps from package `exports` (workbench.md §2.1): the shell and each preview frame load
3
+ * published package files as they are, without a bundler, and resolve bare specifiers through an
4
+ * import map generated from the packages in their module graph.
5
+ */
6
+ import { type WorkbenchDiagnostic } from '../internal/diagnostics.js';
7
+ /** The `package.json` fields that decide how a package's modules are addressed. */
8
+ export interface PackageManifest {
9
+ readonly name: string;
10
+ readonly version?: string;
11
+ readonly exports?: unknown;
12
+ readonly main?: string;
13
+ readonly module?: string;
14
+ }
15
+ export interface ImportMapOptions {
16
+ /** URL prefix under which every package root is served, as `${base}${name}/`. Ends with `/`. */
17
+ readonly base: string;
18
+ /**
19
+ * Serve each package root as `${base}${name}@${version}/`, so documents that load different
20
+ * copies of one package never share a URL. Default false.
21
+ */
22
+ readonly versioned?: boolean;
23
+ /**
24
+ * Active export conditions. Within each conditions object, keys keep their declared priority
25
+ * (as in Node); `default` always applies. Default: development, browser, import.
26
+ */
27
+ readonly conditions?: readonly string[];
28
+ }
29
+ /** The URL prefix of a package root under `base`. */
30
+ export declare function packageRoot(pkg: PackageManifest, options: Pick<ImportMapOptions, 'base' | 'versioned'>): string;
31
+ export interface ImportMap {
32
+ readonly imports: Readonly<Record<string, string>>;
33
+ }
34
+ /** Development first, so previews and the shell keep their diagnostics. */
35
+ export declare const DEFAULT_CONDITIONS: readonly ['development', 'browser', 'import'];
36
+ /** Resolve one export target: a path, `null` (excluded), or `undefined` (no condition applies). */
37
+ export declare function resolveTarget(target: unknown, conditions: ReadonlySet<string>): string | null | undefined;
38
+ /**
39
+ * The package-relative file (`./dist/x.js`) that an export subpath (`.` or `./x`) resolves to,
40
+ * as Node resolves it: exact keys first, then the pattern with the longest prefix. Without
41
+ * `exports`, every file is reachable and `.` is `module`, `main`, or `./index.js`.
42
+ */
43
+ export declare function resolveExport(pkg: PackageManifest, subpath: string, conditions?: readonly string[]): string | undefined;
44
+ /**
45
+ * The bare specifier that reaches the package-relative `file` (`chip.js`, `./dist/x.js`) through
46
+ * the package's `exports`: an exact subpath first, then a pattern that Node resolves back to the
47
+ * file. Without `exports`, every file is reachable. `undefined` when no export reaches the file.
48
+ */
49
+ export declare function exportedSpecifier(pkg: PackageManifest, file: string, conditions?: readonly string[]): string | undefined;
50
+ /**
51
+ * The import map for `packages`, in the order given: a package name seen again (another copy of
52
+ * the same package) is skipped with a diagnostic, since one document can load one copy per
53
+ * specifier. Subpath patterns become prefix mappings when the prefix mapping is exact.
54
+ */
55
+ export declare function createImportMap(packages: readonly PackageManifest[], options: ImportMapOptions): {
56
+ importMap: ImportMap;
57
+ diagnostics: WorkbenchDiagnostic[];
58
+ };
59
+ //# sourceMappingURL=import-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-map.d.ts","sourceRoot":"","sources":["../../src/data/import-map.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEhG,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CACzB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,WAAW,CAAC,GACpD,MAAM,CAIR;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAED,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,YAAI,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAEhF,mGAAmG;AACnG,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,MAAM,GAAG,IAAI,GAAG,SAAS,CAkB3B;AAiCD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,SAAS,MAAM,EAAuB,GACjD,MAAM,GAAG,SAAS,CA2BpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,SAAS,MAAM,EAAuB,GACjD,MAAM,GAAG,SAAS,CAuBpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,OAAO,EAAE,gBAAgB,GACxB;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAmE9D"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Import maps from package `exports` (workbench.md §2.1): the shell and each preview frame load
3
+ * published package files as they are, without a bundler, and resolve bare specifiers through an
4
+ * import map generated from the packages in their module graph.
5
+ */
6
+ import { DiagnosticList, isObject } from '../internal/diagnostics.js';
7
+ /** The URL prefix of a package root under `base`. */
8
+ export function packageRoot(pkg, options) {
9
+ return options.versioned
10
+ ? `${options.base}${pkg.name}@${pkg.version ?? '0.0.0'}/`
11
+ : `${options.base}${pkg.name}/`;
12
+ }
13
+ /** Development first, so previews and the shell keep their diagnostics. */
14
+ export const DEFAULT_CONDITIONS = ['development', 'browser', 'import'];
15
+ /** Resolve one export target: a path, `null` (excluded), or `undefined` (no condition applies). */
16
+ export function resolveTarget(target, conditions) {
17
+ if (typeof target === 'string')
18
+ return target;
19
+ if (target === null)
20
+ return null;
21
+ if (Array.isArray(target)) {
22
+ for (const item of target) {
23
+ const resolved = resolveTarget(item, conditions);
24
+ if (resolved !== undefined)
25
+ return resolved;
26
+ }
27
+ return undefined;
28
+ }
29
+ if (isObject(target)) {
30
+ for (const [condition, value] of Object.entries(target)) {
31
+ if (condition !== 'default' && !conditions.has(condition))
32
+ continue;
33
+ const resolved = resolveTarget(value, conditions);
34
+ if (resolved !== undefined)
35
+ return resolved;
36
+ }
37
+ }
38
+ return undefined;
39
+ }
40
+ /** `exports` as a subpath map, or `undefined` when the package declares none. */
41
+ function subpaths(pkg, out) {
42
+ const { exports } = pkg;
43
+ if (exports === undefined)
44
+ return undefined;
45
+ if (typeof exports === 'string' || Array.isArray(exports) || exports === null)
46
+ return { '.': exports };
47
+ if (!isObject(exports)) {
48
+ out.warn('data.importMap.exports', `${pkg.name}: "exports" is not a string, array, or object.`, `/${pkg.name}/exports`);
49
+ return {};
50
+ }
51
+ const keys = Object.keys(exports);
52
+ const relative = keys.filter((key) => key.startsWith('.'));
53
+ if (relative.length === 0)
54
+ return { '.': exports };
55
+ if (relative.length !== keys.length) {
56
+ out.warn('data.importMap.exports', `${pkg.name}: "exports" mixes subpaths and conditions; Node rejects it, so it is skipped.`, `/${pkg.name}/exports`);
57
+ return {};
58
+ }
59
+ return exports;
60
+ }
61
+ /**
62
+ * The package-relative file (`./dist/x.js`) that an export subpath (`.` or `./x`) resolves to,
63
+ * as Node resolves it: exact keys first, then the pattern with the longest prefix. Without
64
+ * `exports`, every file is reachable and `.` is `module`, `main`, or `./index.js`.
65
+ */
66
+ export function resolveExport(pkg, subpath, conditions = DEFAULT_CONDITIONS) {
67
+ const map = subpaths(pkg, new DiagnosticList());
68
+ if (map === undefined) {
69
+ if (subpath !== '.')
70
+ return subpath;
71
+ const main = pkg.module ?? pkg.main ?? './index.js';
72
+ return main.startsWith('./') ? main : `./${main}`;
73
+ }
74
+ const active = new Set(conditions);
75
+ const relative = (target) => typeof target === 'string' && target.startsWith('./') ? target : undefined;
76
+ if (Object.hasOwn(map, subpath))
77
+ return relative(resolveTarget(map[subpath], active));
78
+ let best;
79
+ for (const key of Object.keys(map)) {
80
+ const star = key.indexOf('*');
81
+ if (star === -1)
82
+ continue;
83
+ const prefix = key.slice(0, star);
84
+ const suffix = key.slice(star + 1);
85
+ const matches = subpath.length >= prefix.length + suffix.length &&
86
+ subpath.startsWith(prefix) &&
87
+ subpath.endsWith(suffix);
88
+ if (matches && (!best || prefix.length > best.prefix.length))
89
+ best = { key, prefix, suffix };
90
+ }
91
+ if (!best)
92
+ return undefined;
93
+ const target = relative(resolveTarget(map[best.key], active));
94
+ const match = subpath.slice(best.prefix.length, subpath.length - best.suffix.length);
95
+ return target?.replaceAll('*', match);
96
+ }
97
+ /**
98
+ * The bare specifier that reaches the package-relative `file` (`chip.js`, `./dist/x.js`) through
99
+ * the package's `exports`: an exact subpath first, then a pattern that Node resolves back to the
100
+ * file. Without `exports`, every file is reachable. `undefined` when no export reaches the file.
101
+ */
102
+ export function exportedSpecifier(pkg, file, conditions = DEFAULT_CONDITIONS) {
103
+ const path = file.startsWith('./') ? file : `./${file.replace(/^\/+/, '')}`;
104
+ const specifier = (subpath) => subpath === '.' ? pkg.name : `${pkg.name}/${subpath.slice(2)}`;
105
+ const map = subpaths(pkg, new DiagnosticList());
106
+ if (map === undefined)
107
+ return specifier(path);
108
+ const active = new Set(conditions);
109
+ for (const [key, target] of Object.entries(map))
110
+ if (!key.includes('*') && resolveTarget(target, active) === path)
111
+ return specifier(key);
112
+ for (const [key, target] of Object.entries(map)) {
113
+ const resolved = resolveTarget(target, active);
114
+ if (!key.includes('*') || typeof resolved !== 'string')
115
+ continue;
116
+ const star = resolved.indexOf('*');
117
+ if (star === -1)
118
+ continue;
119
+ const prefix = resolved.slice(0, star);
120
+ const suffix = resolved.slice(star + 1);
121
+ if (path.length < prefix.length + suffix.length)
122
+ continue;
123
+ if (!path.startsWith(prefix) || !path.endsWith(suffix))
124
+ continue;
125
+ const subpath = key.replaceAll('*', path.slice(prefix.length, path.length - suffix.length));
126
+ // A more specific key may map the subpath elsewhere or exclude it.
127
+ if (resolveExport(pkg, subpath, conditions) === path)
128
+ return specifier(subpath);
129
+ }
130
+ return undefined;
131
+ }
132
+ /**
133
+ * The import map for `packages`, in the order given: a package name seen again (another copy of
134
+ * the same package) is skipped with a diagnostic, since one document can load one copy per
135
+ * specifier. Subpath patterns become prefix mappings when the prefix mapping is exact.
136
+ */
137
+ export function createImportMap(packages, options) {
138
+ if (!options.base.endsWith('/'))
139
+ throw new TypeError(`createImportMap: base "${options.base}" must end with "/".`);
140
+ const out = new DiagnosticList();
141
+ const conditions = new Set(options.conditions ?? DEFAULT_CONDITIONS);
142
+ const imports = {};
143
+ const seen = new Map();
144
+ for (const pkg of packages) {
145
+ if (seen.has(pkg.name)) {
146
+ const first = seen.get(pkg.name);
147
+ if (first !== pkg.version) {
148
+ out.warn('data.importMap.duplicate', `${pkg.name} is in the module graph as ${first ?? 'an unversioned copy'} and ${pkg.version ?? 'an unversioned copy'}; the document loads ${first ?? 'the first'} only.`, `/${pkg.name}`);
149
+ }
150
+ continue;
151
+ }
152
+ seen.set(pkg.name, pkg.version);
153
+ const root = packageRoot(pkg, options);
154
+ const map = subpaths(pkg, out);
155
+ if (map === undefined) {
156
+ const main = pkg.module ?? pkg.main;
157
+ if (main)
158
+ imports[pkg.name] = root + main.replace(/^\.\//, '');
159
+ imports[`${pkg.name}/`] = root;
160
+ continue;
161
+ }
162
+ for (const [key, target] of Object.entries(map)) {
163
+ if (key === './package.json')
164
+ continue;
165
+ const resolved = resolveTarget(target, conditions);
166
+ if (typeof resolved !== 'string')
167
+ continue;
168
+ if (!resolved.startsWith('./')) {
169
+ out.warn('data.importMap.target', `${pkg.name}: export "${key}" points at "${resolved}", which is not a relative path; skipped.`, `/${pkg.name}/exports/${key}`);
170
+ continue;
171
+ }
172
+ const star = key.indexOf('*');
173
+ if (star === -1) {
174
+ imports[key === '.' ? pkg.name : `${pkg.name}/${key.slice(2)}`] = root + resolved.slice(2);
175
+ continue;
176
+ }
177
+ const keyPrefix = key.slice(0, star);
178
+ const targetStar = resolved.indexOf('*');
179
+ const targetPrefix = resolved.slice(0, targetStar);
180
+ if (targetStar === -1 ||
181
+ !keyPrefix.endsWith('/') ||
182
+ !targetPrefix.endsWith('/') ||
183
+ key.slice(star + 1) !== resolved.slice(targetStar + 1)) {
184
+ out.warn('data.importMap.pattern', `${pkg.name}: export pattern "${key}" → "${resolved}" has no exact import-map prefix; skipped.`, `/${pkg.name}/exports/${key}`);
185
+ continue;
186
+ }
187
+ imports[`${pkg.name}/${keyPrefix.slice(2)}`] = root + targetPrefix.slice(2);
188
+ }
189
+ }
190
+ const sorted = {};
191
+ for (const key of Object.keys(imports).sort())
192
+ sorted[key] = imports[key];
193
+ return { importMap: { imports: sorted }, diagnostics: out.items };
194
+ }
195
+ //# sourceMappingURL=import-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-map.js","sourceRoot":"","sources":["../../src/data/import-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `@oddkin/workbench/data` — the Workbench index and per-page data files built from analyzer
3
+ * outputs, configuration, authored content, and token inspection, plus import maps from package
4
+ * `exports` (workbench.md §2.1). DOM-free; the Node tooling writes these files and the shell
5
+ * reads them.
6
+ */
7
+ export { buildWorkbenchData, pageFile, serializeData } from './build.js';
8
+ export type { WorkbenchDataInput } from './build.js';
9
+ export { createImportMap, DEFAULT_CONDITIONS, packageRoot, resolveExport, resolveTarget, } from './import-map.js';
10
+ export type { ImportMap, ImportMapOptions, PackageManifest } from './import-map.js';
11
+ export { DATA_VERSION, INDEX_FORMAT, PAGE_FORMAT } from './types.js';
12
+ export type { BasicPageData, ComponentPageData, ExampleSetLike, FoundationPageData, InspectedTokenLike, JsonObject, LibraryInput, PageData, TokenInspectionLike, WorkbenchBranding, WorkbenchData, WorkbenchIndex, } from './types.js';
13
+ export type { WorkbenchDiagnostic } from '../internal/diagnostics.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `@oddkin/workbench/data` — the Workbench index and per-page data files built from analyzer
3
+ * outputs, configuration, authored content, and token inspection, plus import maps from package
4
+ * `exports` (workbench.md §2.1). DOM-free; the Node tooling writes these files and the shell
5
+ * reads them.
6
+ */
7
+ export { buildWorkbenchData, pageFile, serializeData } from './build.js';
8
+ export { createImportMap, DEFAULT_CONDITIONS, packageRoot, resolveExport, resolveTarget, } from './import-map.js';
9
+ export { DATA_VERSION, INDEX_FORMAT, PAGE_FORMAT } from './types.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzE,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Theme Studio's page data (workbench.md §6): the baseline theme configuration, the generation
3
+ * worker, and the specimen roles, each mapped to a documented component through an example that
4
+ * claims the role (`previewRoles`) or through `themeStudio.preview.roles`; never by tag name alone.
5
+ */
6
+ import type { ResolvedWorkbenchConfig } from '../config/index.js';
7
+ import type { DiagnosticList } from '../internal/diagnostics.js';
8
+ import { type ComponentPageData, type JsonObject, type ThemeStudioPageData } from './types.js';
9
+ /** The default `theme-specimen` recipe's roles, in display order, with their captions. */
10
+ export declare const SPECIMEN_ROLES: Readonly<Record<string, string>>;
11
+ /** What dev tooling loaded for Theme Studio. */
12
+ export interface ThemeStudioInput {
13
+ /** The baseline configuration's JSON model (`loadConfig`). */
14
+ readonly config?: JsonObject;
15
+ /** Where it came from, as written in the Workbench configuration. */
16
+ readonly source?: string;
17
+ /** URL of the generation worker module. */
18
+ readonly worker?: string;
19
+ }
20
+ export declare function themeStudioPage(id: string, components: readonly ComponentPageData[], config: ResolvedWorkbenchConfig, input: ThemeStudioInput, out: DiagnosticList): ThemeStudioPageData;
21
+ //# sourceMappingURL=theme-studio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-studio.d.ts","sourceRoot":"","sources":["../../src/data/theme-studio.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEf,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAEpB,0FAA0F;AAC1F,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY3D,CAAC;AAEF,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,cAAc,GAClB,mBAAmB,CAsGrB"}