@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,363 @@
1
+ /**
2
+ * Build the page registry from standard CEM, optional Oddkin enrichment, authored content, and
3
+ * configuration. Pure and deterministic; no build time enters the output.
4
+ */
5
+ import { resolveWorkbenchConfig, } from '../config/index.js';
6
+ import { DiagnosticList } from '../internal/diagnostics.js';
7
+ import { FOUNDATIONS, humanize, sectionTitle } from './defaults.js';
8
+ import { PAGE_REGISTRY_SCHEMA, } from './types.js';
9
+ const DATE = /^\d{4}-\d{2}-\d{2}$/;
10
+ function resolveConfig(config, out) {
11
+ const { config: resolved, diagnostics } = resolveWorkbenchConfig(config);
12
+ out.items.push(...diagnostics);
13
+ return resolved;
14
+ }
15
+ function customElements(cem) {
16
+ const packages = cem === undefined ? [] : Array.isArray(cem) ? cem : [cem];
17
+ const found = new Map();
18
+ for (const pkg of packages) {
19
+ for (const module of pkg.modules) {
20
+ for (const declaration of module.declarations ?? []) {
21
+ if (declaration.customElement && declaration.tagName && !found.has(declaration.tagName)) {
22
+ found.set(declaration.tagName, { declaration, module: module.path });
23
+ }
24
+ }
25
+ }
26
+ }
27
+ return [...found.values()];
28
+ }
29
+ const firstSentence = (text) => {
30
+ if (!text)
31
+ return undefined;
32
+ const flat = text.replace(/\s+/g, ' ').trim();
33
+ const end = flat.search(/[.!?](\s|$)/);
34
+ return end === -1 ? flat : flat.slice(0, end + 1);
35
+ };
36
+ /** Build the registry. `registry` is undefined only when the configuration is invalid. */
37
+ export function buildPageRegistry(input) {
38
+ const out = new DiagnosticList();
39
+ const config = resolveConfig(input.config, out);
40
+ if (!config)
41
+ return { registry: undefined, diagnostics: out.items };
42
+ const metadata = input.metadata ?? {};
43
+ const drafts = [];
44
+ // Home (optional).
45
+ if (config.navigation.home) {
46
+ drafts.push({
47
+ id: 'home',
48
+ route: '/',
49
+ section: 'home',
50
+ kind: 'home',
51
+ title: config.branding.name ?? 'Overview',
52
+ available: 'full',
53
+ nav: { search: true },
54
+ sections: [],
55
+ });
56
+ }
57
+ // Foundations: only those the enrichment declares, with sections from data.
58
+ const foundationDrafts = [];
59
+ FOUNDATIONS.forEach(({ id, slug, title }, index) => {
60
+ const meta = metadata.foundations?.[`foundation:${id}`];
61
+ if (!meta)
62
+ return;
63
+ const sections = meta.sections.map((s) => ({
64
+ id: s.id,
65
+ title: sectionTitle(s.id),
66
+ visible: s.available,
67
+ source: 'generated',
68
+ }));
69
+ const visibleCount = sections.filter((s) => s.visible).length;
70
+ foundationDrafts.push({
71
+ id: `foundations/${slug}`,
72
+ route: `/foundations/${slug}`,
73
+ section: 'foundations',
74
+ kind: 'foundation',
75
+ eyebrow: 'Foundations',
76
+ title,
77
+ order: index,
78
+ available: visibleCount === 0 ? 'unavailable' : visibleCount === sections.length ? 'full' : 'partial',
79
+ nav: { sidebar: true, card: true, search: true },
80
+ sections,
81
+ ...(visibleCount === 0 ? { hidden: true } : {}),
82
+ });
83
+ });
84
+ for (const key of Object.keys(metadata.foundations ?? {})) {
85
+ if (!FOUNDATIONS.some((f) => `foundation:${f.id}` === key)) {
86
+ out.warn('pages.foundation.unknown', `Enrichment declares unknown foundation "${key}".`, `/foundations/${key}`);
87
+ }
88
+ }
89
+ const anyFoundation = foundationDrafts.some((d) => !d.hidden);
90
+ drafts.push({
91
+ id: 'foundations',
92
+ route: '/foundations',
93
+ section: 'foundations',
94
+ kind: 'overview',
95
+ title: 'Foundations',
96
+ // With no foundation data the destination stays, explaining what to supply (§11).
97
+ available: anyFoundation ? 'full' : 'unavailable',
98
+ nav: { search: true },
99
+ sections: [],
100
+ });
101
+ drafts.push(...foundationDrafts);
102
+ // Components.
103
+ const categoryLabels = new Map();
104
+ config.categories.definitions.forEach((d, i) => categoryLabels.set(d.id, { label: d.label, order: d.order ?? i }));
105
+ Object.entries(metadata.categories ?? {}).forEach(([key, c], i) => {
106
+ const id = key.replace(/^category:/, '');
107
+ if (!categoryLabels.has(id))
108
+ categoryLabels.set(id, { label: c.label, order: c.order ?? 1000 + i });
109
+ });
110
+ const enrichedByTag = new Map(Object.values(metadata.components ?? {}).map((c) => [c.tag, c]));
111
+ const rawPrefix = metadata.library?.prefix;
112
+ const prefix = rawPrefix ? (rawPrefix.endsWith('-') ? rawPrefix : `${rawPrefix}-`) : undefined;
113
+ const elements = customElements(input.cem);
114
+ const componentDrafts = elements.map(({ declaration }) => {
115
+ const tag = declaration.tagName;
116
+ const enriched = enrichedByTag.get(tag);
117
+ const categoryId = config.categories.assign[tag] ?? enriched?.category?.replace(/^category:/, '');
118
+ const category = categoryId ? categoryLabels.get(categoryId) : undefined;
119
+ if (categoryId && !category) {
120
+ out.warn('pages.category.unknown', `<${tag}> is assigned to unknown category "${categoryId}".`, `/components/${tag}`);
121
+ }
122
+ const group = category?.label ?? config.categories.fallback;
123
+ const section = (id, visible, source = 'generated') => ({
124
+ id,
125
+ title: sectionTitle(id),
126
+ visible,
127
+ source,
128
+ });
129
+ const summary = firstSentence(declaration.summary ?? declaration.description);
130
+ return {
131
+ id: `components/${tag}`,
132
+ route: `/components/${tag}`,
133
+ section: 'components',
134
+ kind: 'component',
135
+ eyebrow: `Components · ${group}`,
136
+ title: prefix && tag.startsWith(prefix)
137
+ ? humanize(tag.slice(prefix.length))
138
+ : humanize(declaration.name),
139
+ ...(summary ? { summary } : {}),
140
+ group,
141
+ groupOrder: category?.order ?? Number.MAX_SAFE_INTEGER,
142
+ // Full Oddkin support needs enrichment; standard CEM alone is the documented baseline.
143
+ available: enriched ? 'full' : 'partial',
144
+ nav: { sidebar: true, card: true, search: true },
145
+ sections: [
146
+ section('overview', true, 'built-in'),
147
+ // Every section is shown; the panel labels what the library does not supply (§7.1).
148
+ section('interactive-example', true),
149
+ { ...section('source', true), title: 'Source and package' },
150
+ section('examples', true),
151
+ section('api', true),
152
+ section('tokens', true),
153
+ section('behavior-and-accessibility', true),
154
+ section('guidance', true),
155
+ section('known-limitations', true),
156
+ ],
157
+ };
158
+ });
159
+ componentDrafts.sort((a, b) => a.groupOrder - b.groupOrder ||
160
+ a.group.localeCompare(b.group) ||
161
+ a.title.localeCompare(b.title));
162
+ for (const tag of enrichedByTag.keys()) {
163
+ if (!elements.some((e) => e.declaration.tagName === tag)) {
164
+ out.warn('pages.component.noCem', `Enrichment describes <${tag}>, which is not in the CEM input.`, `/components/component:${tag}`);
165
+ }
166
+ }
167
+ drafts.push({
168
+ id: 'components',
169
+ route: '/components',
170
+ section: 'components',
171
+ kind: 'overview',
172
+ title: 'Components',
173
+ available: componentDrafts.length ? 'full' : 'unavailable',
174
+ nav: { search: true },
175
+ sections: [],
176
+ ...(config.navigation.legacyRedirects ? { legacyRoutes: ['/playground'] } : {}),
177
+ });
178
+ drafts.push(...componentDrafts);
179
+ // Theme Studio: a primary destination, never a Foundations card or sidebar entry.
180
+ const studioRoute = config.themeStudio.route;
181
+ drafts.push({
182
+ id: 'theme-studio',
183
+ route: studioRoute,
184
+ section: 'theme-studio',
185
+ kind: 'tool',
186
+ title: 'Theme Studio',
187
+ // Without a theme config or token data, only declared CSS custom properties can be edited.
188
+ available: config.themeStudio.themeConfig || metadata.tokens ? 'full' : 'partial',
189
+ nav: { card: false, sidebar: false, search: true },
190
+ sections: [],
191
+ ...(config.navigation.legacyRedirects && studioRoute !== '/foundations/theme-studio'
192
+ ? { legacyRoutes: ['/foundations/theme-studio'] }
193
+ : {}),
194
+ ...(config.themeStudio.enabled ? {} : { hidden: true }),
195
+ });
196
+ // Products and modes: absent unless enabled (§9).
197
+ if (config.products.enabled) {
198
+ const inFoundations = config.products.placement.includes('foundations');
199
+ const inPrimary = config.products.placement.includes('primary');
200
+ const route = inPrimary ? '/products' : '/foundations/products';
201
+ const count = metadata.products
202
+ ? Object.keys(metadata.products).length
203
+ : config.products.sources.length;
204
+ if (count === 0) {
205
+ out.warn('pages.products.empty', 'Products and modes is enabled but no product sources resolved; the page is hidden.', '/products');
206
+ }
207
+ drafts.push({
208
+ id: 'products',
209
+ route,
210
+ section: inFoundations ? 'foundations' : 'products',
211
+ kind: 'products',
212
+ ...(inFoundations ? { eyebrow: 'Foundations' } : {}),
213
+ title: 'Products and modes',
214
+ order: FOUNDATIONS.length,
215
+ available: count ? 'full' : 'unavailable',
216
+ nav: { sidebar: inFoundations, card: inFoundations, search: true },
217
+ sections: [],
218
+ ...(config.navigation.legacyRedirects && route !== '/foundations/products'
219
+ ? { legacyRoutes: ['/foundations/products'] }
220
+ : {}),
221
+ ...(count ? {} : { hidden: true }),
222
+ });
223
+ }
224
+ applyContent(drafts, metadata, input.docs, out);
225
+ // Primary navigation: configured sections that have a visible page.
226
+ const visibleIds = new Set(drafts.filter((d) => !d.hidden).map((d) => d.id));
227
+ const primary = [];
228
+ if (config.navigation.home && !config.navigation.primary.includes('home'))
229
+ primary.push('home');
230
+ for (const section of config.navigation.primary) {
231
+ if (visibleIds.has(section) && !primary.includes(section))
232
+ primary.push(section);
233
+ }
234
+ if (config.products.placement.includes('primary') &&
235
+ visibleIds.has('products') &&
236
+ !primary.includes('products')) {
237
+ primary.push('products');
238
+ }
239
+ const pages = drafts.map((d) => {
240
+ const visible = !d.hidden;
241
+ const nav = visible
242
+ ? { ...d.nav, ...(primary.includes(d.id) ? { primary: true } : {}) }
243
+ : { primary: false, sidebar: false, card: false, search: false };
244
+ return {
245
+ id: d.id,
246
+ route: d.route,
247
+ section: d.section,
248
+ kind: d.kind,
249
+ ...(d.eyebrow ? { eyebrow: d.eyebrow } : {}),
250
+ title: d.title,
251
+ ...(d.summary ? { summary: d.summary } : {}),
252
+ ...(d.group ? { group: d.group } : {}),
253
+ ...(d.tags?.length ? { tags: d.tags } : {}),
254
+ ...(d.updated ? { updated: d.updated } : {}),
255
+ ...(d.order === undefined ? {} : { order: d.order }),
256
+ visible,
257
+ availability: d.available,
258
+ nav,
259
+ sections: d.sections,
260
+ ...(d.legacyRoutes?.length ? { legacyRoutes: d.legacyRoutes } : {}),
261
+ };
262
+ });
263
+ return {
264
+ registry: {
265
+ schema: PAGE_REGISTRY_SCHEMA,
266
+ basePath: config.hosting.basePath,
267
+ routing: config.hosting.routing,
268
+ primaryNav: primary,
269
+ pages,
270
+ },
271
+ diagnostics: out.items,
272
+ };
273
+ }
274
+ /** Layer 3 (authored) and enrichment `docs` facts over built-in and generated values (ADR 0024). */
275
+ function applyContent(drafts, metadata, docs, out) {
276
+ const byId = new Map(drafts.map((d) => [d.id, d]));
277
+ for (const [id, meta] of Object.entries(metadata.docs ?? {})) {
278
+ const draft = byId.get(id);
279
+ if (!draft) {
280
+ out.warn('content.page.unknown', `Enrichment docs refer to unknown page "${id}".`, `/docs/${id}`);
281
+ continue;
282
+ }
283
+ if (meta.title?.value)
284
+ draft.title = meta.title.value;
285
+ if (meta.summary?.value)
286
+ draft.summary = meta.summary.value;
287
+ if (meta.tags?.length)
288
+ draft.tags = meta.tags;
289
+ if (meta.order !== undefined)
290
+ draft.order = meta.order;
291
+ if (meta.visible === false)
292
+ draft.hidden = true;
293
+ // Dates only from authored metadata or source history; unknown dates are omitted.
294
+ if (meta.updated?.known !== false && typeof meta.updated?.value === 'string') {
295
+ if (DATE.test(meta.updated.value))
296
+ draft.updated = meta.updated.value;
297
+ else
298
+ out.warn('content.updated.invalid', `Updated date "${meta.updated.value}" is not YYYY-MM-DD; omitted.`, `/docs/${id}/updated`);
299
+ }
300
+ }
301
+ if (!docs)
302
+ return;
303
+ const aliases = docs.aliases ?? {};
304
+ for (const [key, content] of Object.entries(docs.pages)) {
305
+ const id = aliases[key] ?? key;
306
+ const draft = byId.get(id);
307
+ if (!draft) {
308
+ out.warn('content.page.unknown', `Authored content refers to unknown page "${key}".`, `/pages/${key}`);
309
+ continue;
310
+ }
311
+ applyPage(draft, content, key, out);
312
+ }
313
+ }
314
+ function applyPage(draft, content, key, out) {
315
+ if (content.title)
316
+ draft.title = content.title;
317
+ if (content.eyebrow)
318
+ draft.eyebrow = content.eyebrow;
319
+ if (content.summary)
320
+ draft.summary = content.summary;
321
+ if (content.tags)
322
+ draft.tags = content.tags;
323
+ if (content.order !== undefined)
324
+ draft.order = content.order;
325
+ if (content.updated !== undefined) {
326
+ if (DATE.test(content.updated))
327
+ draft.updated = content.updated;
328
+ else
329
+ out.warn('content.updated.invalid', `Updated date "${content.updated}" is not YYYY-MM-DD; omitted.`, `/pages/${key}/updated`);
330
+ }
331
+ if (content.visible === false)
332
+ draft.hidden = true;
333
+ if (content.visible === true && draft.available === 'unavailable') {
334
+ out.warn('content.visible.unavailable', `"${draft.id}" has no data to show; authored visible: true is ignored.`, `/pages/${key}/visible`);
335
+ }
336
+ for (const [sectionId, section] of Object.entries(content.sections ?? {})) {
337
+ const index = draft.sections.findIndex((s) => s.id === sectionId);
338
+ if (index === -1) {
339
+ out.warn('content.section.unknown', `Page "${draft.id}" has no section "${sectionId}".`, `/pages/${key}/sections/${sectionId}`);
340
+ continue;
341
+ }
342
+ const current = draft.sections[index];
343
+ const authoredOnly = current.source === 'authored';
344
+ draft.sections[index] = {
345
+ ...current,
346
+ ...(section.title ? { title: section.title } : {}),
347
+ // Authored content can hide a section, show an authored-only section, but cannot show
348
+ // a generated section whose data is missing.
349
+ visible: section.visible === false
350
+ ? false
351
+ : authoredOnly
352
+ ? Boolean(section.guidance || section.examples?.length || section.visible)
353
+ : current.visible,
354
+ };
355
+ }
356
+ if (content.sections) {
357
+ const order = (id) => content.sections?.[id]?.order;
358
+ const positioned = draft.sections.map((s, i) => ({ s, key: order(s.id) ?? i }));
359
+ positioned.sort((a, b) => a.key - b.key);
360
+ draft.sections = positioned.map((p) => p.s);
361
+ }
362
+ }
363
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/pages/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Built-in titles for pages and sections (workbench-pages.md §4–§8). Generic structure only:
3
+ * no library facts. Moves to the localizable `./content` catalog with the shell (M5).
4
+ */
5
+ /** Foundation ids (oddkin-metadata v1) → page slug and title, in default order. */
6
+ export declare const FOUNDATIONS: readonly {
7
+ id: string;
8
+ slug: string;
9
+ title: string;
10
+ }[];
11
+ export declare const SECTION_TITLES: Readonly<Record<string, string>>;
12
+ /** `contrast-pairs` → `Contrast pairs` for ids without a built-in title. */
13
+ export declare function sectionTitle(id: string): string;
14
+ /** `DemoCounter` → `Demo counter`; `side-nav` → `Side nav`. */
15
+ export declare function humanize(name: string): string;
16
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/pages/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mFAAmF;AACnF,eAAO,MAAM,WAAW,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAU7E,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqD3D,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO7C"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Built-in titles for pages and sections (workbench-pages.md §4–§8). Generic structure only:
3
+ * no library facts. Moves to the localizable `./content` catalog with the shell (M5).
4
+ */
5
+ /** Foundation ids (oddkin-metadata v1) → page slug and title, in default order. */
6
+ export const FOUNDATIONS = [
7
+ { id: 'tokens', slug: 'token-architecture', title: 'Token architecture' },
8
+ { id: 'color', slug: 'color', title: 'Color' },
9
+ { id: 'typography', slug: 'typography', title: 'Typography' },
10
+ { id: 'spacing', slug: 'spacing', title: 'Spacing' },
11
+ { id: 'borders-and-radii', slug: 'borders-and-radii', title: 'Borders and radii' },
12
+ { id: 'elevation', slug: 'elevation', title: 'Elevation' },
13
+ { id: 'motion', slug: 'motion', title: 'Motion' },
14
+ { id: 'themes', slug: 'themes', title: 'Themes' },
15
+ { id: 'responsive', slug: 'responsive-behavior', title: 'Responsive behavior' },
16
+ ];
17
+ export const SECTION_TITLES = {
18
+ // Foundations
19
+ 'tiers-and-naming': 'Tiers and naming',
20
+ pipeline: 'Source-to-output pipeline',
21
+ 'trace-a-token': 'Trace a token',
22
+ consumption: 'Consumption',
23
+ 'aliases-and-overrides': 'Aliases and overrides',
24
+ 'dependency-policy': 'Dependency policy and direct reads',
25
+ 'every-token': 'Every token',
26
+ palettes: 'Palettes and ramps',
27
+ 'semantic-roles': 'Semantic roles',
28
+ 'interactive-states': 'Interactive states',
29
+ 'product-variations': 'Product variations',
30
+ 'contrast-pairs': 'Contrast pairs',
31
+ families: 'Families',
32
+ scale: 'Scale',
33
+ 'composite-styles': 'Composite styles',
34
+ specimens: 'Specimens',
35
+ vocabulary: 'Semantic vocabulary',
36
+ precedence: 'Precedence and layout behavior',
37
+ 'border-widths': 'Border widths and styles',
38
+ 'border-colors': 'Border colour roles',
39
+ radii: 'Radii',
40
+ 'component-mappings': 'Component mappings',
41
+ samples: 'Samples',
42
+ levels: 'Levels',
43
+ 'theme-variations': 'Theme variations',
44
+ 'durations-and-easing': 'Durations and easing',
45
+ roles: 'Roles',
46
+ 'try-a-duration': 'Try a duration',
47
+ 'reduced-motion': 'Reduced motion',
48
+ 'themes-and-modes': 'Available themes and modes',
49
+ 'scope-contract': 'Scope contract',
50
+ composition: 'Composition and precedence',
51
+ comparisons: 'Comparisons',
52
+ usage: 'Usage snippets',
53
+ 'which-query': 'Which query to use',
54
+ conditions: 'Conditions and thresholds',
55
+ profiles: 'Profiles',
56
+ 'responsive-roles': 'Responsive roles',
57
+ recipes: 'Recipes',
58
+ 'resize-a-container': 'Resize a container',
59
+ reflow: 'Reflow and overflow',
60
+ source: 'Source',
61
+ // Components
62
+ overview: 'Overview',
63
+ 'interactive-example': 'Interactive example',
64
+ api: 'Reference',
65
+ examples: 'States and examples',
66
+ tokens: 'Tokens',
67
+ 'behavior-and-accessibility': 'Accessibility',
68
+ guidance: 'Guidance',
69
+ 'known-limitations': 'Known limitations',
70
+ };
71
+ /** `contrast-pairs` → `Contrast pairs` for ids without a built-in title. */
72
+ export function sectionTitle(id) {
73
+ const known = SECTION_TITLES[id];
74
+ if (known)
75
+ return known;
76
+ const words = id.replace(/-/g, ' ');
77
+ return words.charAt(0).toUpperCase() + words.slice(1);
78
+ }
79
+ /** `DemoCounter` → `Demo counter`; `side-nav` → `Side nav`. */
80
+ export function humanize(name) {
81
+ const words = name
82
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
83
+ .replace(/[-_]+/g, ' ')
84
+ .trim()
85
+ .toLowerCase();
86
+ return words.charAt(0).toUpperCase() + words.slice(1);
87
+ }
88
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/pages/defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `@oddkin/workbench/pages` — the page registry (ADR 0023): one build-time source for routes,
3
+ * primary navigation, sidebars, overview cards, search, visibility, and legacy redirects.
4
+ * DOM-free; the M5 shell renders from it.
5
+ */
6
+ export { buildPageRegistry } from './build.js';
7
+ export type { RegistryInput } from './build.js';
8
+ export { cards, href, onThisPage, primaryNavigation, resolveLegacyRoute, searchEntries, sidebar, staticRedirects, } from './navigation.js';
9
+ export type { RedirectResult } from './navigation.js';
10
+ export { FOUNDATIONS } from './defaults.js';
11
+ export { PAGE_REGISTRY_SCHEMA } from './types.js';
12
+ export type { Availability, CemDeclaration, CemPackage, DocMetaLike, FactLike, FoundationMetaLike, OddkinMetadataLike, PageEntry, PageKind, PageRegistry, SectionEntry, } 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/pages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EACL,KAAK,EACL,IAAI,EACJ,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,OAAO,EACP,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `@oddkin/workbench/pages` — the page registry (ADR 0023): one build-time source for routes,
3
+ * primary navigation, sidebars, overview cards, search, visibility, and legacy redirects.
4
+ * DOM-free; the M5 shell renders from it.
5
+ */
6
+ export { buildPageRegistry } from './build.js';
7
+ export { cards, href, onThisPage, primaryNavigation, resolveLegacyRoute, searchEntries, sidebar, staticRedirects, } from './navigation.js';
8
+ export { FOUNDATIONS } from './defaults.js';
9
+ export { PAGE_REGISTRY_SCHEMA } from './types.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EACL,KAAK,EACL,IAAI,EACJ,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,OAAO,EACP,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Projections of the registry. Every navigation surface reads from the same registry, so
3
+ * routes, primary navigation, sidebars, cards, and search cannot drift apart.
4
+ */
5
+ import type { PageEntry, PageRegistry } from './types.js';
6
+ /** Visible primary navigation entries in configured order. */
7
+ export declare function primaryNavigation(registry: PageRegistry): PageEntry[];
8
+ /** Contextual sidebar for a section, grouped when the section has groups. */
9
+ export declare function sidebar(registry: PageRegistry, section: string): {
10
+ group: string | undefined;
11
+ pages: PageEntry[];
12
+ }[];
13
+ /** Overview cards for a section (never Theme Studio). */
14
+ export declare function cards(registry: PageRegistry, section: string): PageEntry[];
15
+ /** Search entries: every visible page that opts into search. */
16
+ export declare function searchEntries(registry: PageRegistry): {
17
+ id: string;
18
+ title: string;
19
+ summary?: string;
20
+ tags: readonly string[];
21
+ route: string;
22
+ }[];
23
+ /** "On this page" entries: visible sections, only when there are at least two. */
24
+ export declare function onThisPage(page: PageEntry): {
25
+ id: string;
26
+ title: string;
27
+ }[];
28
+ /** URL for a route under the base path, in history or hash mode. */
29
+ export declare function href(registry: PageRegistry, route: string): string;
30
+ export type RedirectResult = {
31
+ readonly kind: 'redirect';
32
+ readonly to: string;
33
+ } | {
34
+ readonly kind: 'notice';
35
+ readonly code: 'products.disabled';
36
+ };
37
+ /**
38
+ * Resolve a legacy route (relative to the base path). `/playground?component=<tag>` goes to
39
+ * that component when it exists, keeping other parameters; `/foundations/products` without
40
+ * Products and modes gives a notice instead of a redirect.
41
+ */
42
+ export declare function resolveLegacyRoute(registry: PageRegistry, path: string, search?: string): RedirectResult | undefined;
43
+ /** Static redirect stubs for history-mode builds (meta refresh + canonical link). */
44
+ export declare function staticRedirects(registry: PageRegistry): {
45
+ from: string;
46
+ to: string;
47
+ }[];
48
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/pages/navigation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ1D,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,CAMrE;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CACrB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,MAAM,GACd;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,EAAE,CAKrD;AAED,yDAAyD;AACzD,wBAAgB,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAE1E;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,YAAY,GACrB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAU3F;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAG3E;AAED,oEAAoE;AACpE,wBAAgB,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,SAAK,GACV,cAAc,GAAG,SAAS,CAsB5B;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,CAKtF"}