@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,216 @@
1
+ /**
2
+ * Foundation detail content (workbench-pages.md §5). The Spacing page is the reference slice
3
+ * (§5.3): an introduction derived from the library's own spacing tokens, the scale with
4
+ * proportional samples, and the semantic vocabulary only where declared. Every value is the
5
+ * generated baseline; nothing is copied from another library.
6
+ */
7
+ import { OddkinElement, prop } from '@oddkin/core/element';
8
+ import { styleMap } from '@oddkin/core/helpers/style-map';
9
+ import { html, nothing, repeat } from '@oddkin/core/template';
10
+ import { contentStyles, panelHostStyles } from './styles.js';
11
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
12
+ const ROOT_PX = 16;
13
+ /** A dimension's size in CSS pixels at a 16px root, for ordering and min/max only. */
14
+ export function dimensionPx(value) {
15
+ if (typeof value === 'number')
16
+ return value;
17
+ if (typeof value !== 'string')
18
+ return undefined;
19
+ const match = /^(-?\d*\.?\d+)(px|rem|em)?$/.exec(value.trim());
20
+ if (!match)
21
+ return undefined;
22
+ const amount = Number(match[1]);
23
+ return match[2] === 'rem' || match[2] === 'em' ? amount * ROOT_PX : amount;
24
+ }
25
+ const valueText = (token) => token && !token.missing && token.value !== undefined ? String(token.value) : undefined;
26
+ function vocabularies(foundation) {
27
+ const list = Array.isArray(foundation['vocabularies']) ? foundation['vocabularies'] : [];
28
+ return list.filter(isRecord).flatMap((v) => {
29
+ if (typeof v['id'] !== 'string' || !Array.isArray(v['entries']))
30
+ return [];
31
+ const entries = v['entries'].filter((e) => isRecord(e) && typeof e['name'] === 'string' && typeof e['token'] === 'string');
32
+ return [{ id: v['id'], entries }];
33
+ });
34
+ }
35
+ export class FoundationDetailElement extends OddkinElement.with({
36
+ page: prop.object({ description: 'The foundation page data.' }),
37
+ index: prop.object({ description: 'The Workbench index.' }),
38
+ href: prop.custom({
39
+ default: () => (route) => route,
40
+ coerce: (value) => typeof value === 'function'
41
+ ? { ok: true, value: value }
42
+ : { ok: false, reason: 'expected a function' },
43
+ description: 'Maps a Workbench route to a URL.',
44
+ }),
45
+ }) {
46
+ static styles = [panelHostStyles, contentStyles];
47
+ render() {
48
+ const page = this.page;
49
+ const index = this.index;
50
+ if (!page || !index)
51
+ return html `<div class="wb-content"></div>`;
52
+ const entry = index.registry.pages.find((p) => p.id === page.id);
53
+ const sections = (entry?.sections ?? []).filter((s) => s.visible);
54
+ const handled = new Set();
55
+ return html `<div class="wb-content">
56
+ ${this.#context(page)}
57
+ ${repeat(sections, (section) => section.id, (section) => html `<section id=${section.id} aria-labelledby=${`${section.id}-title`}>
58
+ <h2 id=${`${section.id}-title`}>${section.title}</h2>
59
+ ${this.#section(section.id, page, handled)}
60
+ </section>`)}
61
+ </div>`;
62
+ }
63
+ /** The context every value-bearing section shows (§5.1): the generated baseline. */
64
+ #context(page) {
65
+ const generation = isRecord(page.foundation['generation'])
66
+ ? page.foundation['generation']['value']
67
+ : undefined;
68
+ const theme = isRecord(generation) && typeof generation['theme'] === 'string'
69
+ ? generation['theme']
70
+ : undefined;
71
+ return html `<p class="wb-meta wb-context" role="note">
72
+ Showing the saved baseline${theme ? html ` (theme <code>${theme}</code>)` : nothing}, as
73
+ generated from source configuration. Values keep their source units.
74
+ </p>`;
75
+ }
76
+ #section(id, page, handled) {
77
+ const vocab = vocabularies(page.foundation);
78
+ if (id === 'scale')
79
+ return this.#scale(page);
80
+ if (id === 'semantic-vocabulary' || id === 'vocabulary')
81
+ return this.#vocabulary(page, vocab.find((v) => v.id === 'semantic'), true);
82
+ if (id === 'component-mappings')
83
+ return this.#vocabulary(page, vocab.find((v) => v.id === 'component-mappings'), false);
84
+ if (!handled.has('tokens')) {
85
+ handled.add('tokens');
86
+ return this.#tokenTable(page.tokens, 'Tokens this foundation lists.');
87
+ }
88
+ return html `<p class="wb-muted">
89
+ This section's generated view is not available yet; its tokens are listed above.
90
+ </p>`;
91
+ }
92
+ #scale(page) {
93
+ const steps = page.tokens
94
+ .map((token) => ({ token, px: dimensionPx(token.value) }))
95
+ .sort((a, b) => (a.px ?? Infinity) - (b.px ?? Infinity) || a.token.name.localeCompare(b.token.name));
96
+ const sized = steps.filter((s) => s.px !== undefined && s.px > 0);
97
+ const min = sized[0];
98
+ const max = sized.at(-1);
99
+ const generation = isRecord(page.foundation['generation'])
100
+ ? page.foundation['generation']['value']
101
+ : undefined;
102
+ const origins = isRecord(generation) && Array.isArray(generation['origins'])
103
+ ? generation['origins'].filter((o) => typeof o === 'string')
104
+ : [];
105
+ const density = page.tokens.some((t) => t.density === true);
106
+ const maxPx = max?.px ?? 0;
107
+ return html `<p class="wb-intro">
108
+ ${steps.length}
109
+ steps${min && max
110
+ ? html ` from <code>${valueText(min.token)}</code> to
111
+ <code>${valueText(max.token)}</code>`
112
+ : nothing}${origins.length
113
+ ? html `, generated from the theme's ${origins.join(' and ')} values`
114
+ : nothing}.${density ? html ` Steps scale with density (<code>data-odd-density</code>).` : nothing}
115
+ </p>
116
+ <div class="wb-table-wrap">
117
+ <table class="wb-stack" data-table="scale">
118
+ <caption>
119
+ Samples are drawn at this page's root font size; widths are proportional to each value.
120
+ </caption>
121
+ <thead>
122
+ <tr>
123
+ <th scope="col">Token</th>
124
+ <th scope="col">Value</th>
125
+ <th scope="col">Sample</th>
126
+ <th scope="col">Origin</th>
127
+ </tr>
128
+ </thead>
129
+ <tbody>
130
+ ${steps.map(({ token, px }) => {
131
+ const value = valueText(token);
132
+ return html `<tr data-token=${token.name}>
133
+ <th scope="row" data-label="Token">
134
+ <code>${token.name}</code>
135
+ ${token.cssVariable ? html `<small><code>${token.cssVariable}</code></small>` : nothing}
136
+ </th>
137
+ <td data-label="Value">${value ? html `<code>${value}</code>` : 'Unknown'}</td>
138
+ <td data-label="Sample">
139
+ ${value && px !== undefined && px > 0
140
+ ? html `<span
141
+ class="wb-bar"
142
+ role="img"
143
+ aria-label=${`${value}${maxPx ? `, ${Math.round((px / maxPx) * 100)}% of the largest step` : ''}`}
144
+ style=${styleMap({ inlineSize: value })}
145
+ ></span>`
146
+ : html `<span class="wb-muted">${value ? 'none' : 'Unknown'}</span>`}
147
+ </td>
148
+ <td data-label="Origin">${token.origin ?? 'Unknown'}</td>
149
+ </tr>`;
150
+ })}
151
+ </tbody>
152
+ </table>
153
+ </div>`;
154
+ }
155
+ #vocabulary(page, vocabulary, semantic) {
156
+ if (!vocabulary?.entries.length)
157
+ return html `<p class="wb-muted">
158
+ The library declares no ${semantic ? 'semantic vocabulary' : 'component mappings'}.
159
+ </p>`;
160
+ const byName = new Map(page.tokens.map((t) => [t.name, t]));
161
+ return html `<div class="wb-table-wrap">
162
+ <table class="wb-stack" data-table=${vocabulary.id}>
163
+ <thead>
164
+ <tr>
165
+ <th scope="col">${semantic ? 'Semantic token' : 'Component token'}</th>
166
+ <th scope="col">Reference step</th>
167
+ <th scope="col">Value</th>
168
+ </tr>
169
+ </thead>
170
+ <tbody>
171
+ ${vocabulary.entries.map((entry) => {
172
+ const value = valueText(byName.get(entry.token));
173
+ return html `<tr>
174
+ <th scope="row" data-label=${semantic ? 'Semantic token' : 'Component token'}>
175
+ <code>${entry.name}</code>
176
+ </th>
177
+ <td data-label="Reference step"><code>${entry.token}</code></td>
178
+ <td data-label="Value">${value ? html `<code>${value}</code>` : 'Unknown'}</td>
179
+ </tr>`;
180
+ })}
181
+ </tbody>
182
+ </table>
183
+ </div>`;
184
+ }
185
+ #tokenTable(tokens, caption) {
186
+ if (!tokens.length)
187
+ return html `<p class="wb-muted">No tokens are listed.</p>`;
188
+ return html `<div class="wb-table-wrap">
189
+ <table class="wb-stack" data-table="tokens">
190
+ <caption>
191
+ ${caption}
192
+ </caption>
193
+ <thead>
194
+ <tr>
195
+ <th scope="col">Token</th>
196
+ <th scope="col">Value</th>
197
+ <th scope="col">Origin</th>
198
+ </tr>
199
+ </thead>
200
+ <tbody>
201
+ ${tokens.map((token) => html `<tr>
202
+ <th scope="row" data-label="Token">
203
+ <code>${token.name}</code>
204
+ ${token.cssVariable ? html `<small><code>${token.cssVariable}</code></small>` : nothing}
205
+ </th>
206
+ <td data-label="Value">
207
+ ${valueText(token) ? html `<code>${valueText(token)}</code>` : 'Unknown'}
208
+ </td>
209
+ <td data-label="Origin">${token.origin ?? 'Unknown'}</td>
210
+ </tr>`)}
211
+ </tbody>
212
+ </table>
213
+ </div>`;
214
+ }
215
+ }
216
+ //# sourceMappingURL=foundation-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foundation-detail.js","sourceRoot":"","sources":["../../src/panels/foundation-detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `@oddkin/workbench/panels/foundation` — `<oddkin-foundation-panel>`: a foundation page's
3
+ * generated sections (the Spacing scale and vocabularies, token tables) in an open shadow root.
4
+ * Inputs are properties: `page`, `index`, and `href`. Register with `./panels/foundation/define`.
5
+ */
6
+ import { FoundationDetailElement } from './foundation-detail.js';
7
+ export declare class OddkinFoundationPanel extends FoundationDetailElement {
8
+ }
9
+ export type { FoundationPageData, WorkbenchIndex } from '../data/types.js';
10
+ declare global {
11
+ interface HTMLElementTagNameMap {
12
+ 'oddkin-foundation-panel': OddkinFoundationPanel;
13
+ }
14
+ }
15
+ //# sourceMappingURL=foundation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foundation.d.ts","sourceRoot":"","sources":["../../src/panels/foundation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,qBAAsB,SAAQ,uBAAuB;CAAG;AAErE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,qBAAqB,CAAC;KAClD;CACF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `@oddkin/workbench/panels/foundation` — `<oddkin-foundation-panel>`: a foundation page's
3
+ * generated sections (the Spacing scale and vocabularies, token tables) in an open shadow root.
4
+ * Inputs are properties: `page`, `index`, and `href`. Register with `./panels/foundation/define`.
5
+ */
6
+ import { FoundationDetailElement } from './foundation-detail.js';
7
+ export class OddkinFoundationPanel extends FoundationDetailElement {
8
+ }
9
+ //# sourceMappingURL=foundation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foundation.js","sourceRoot":"","sources":["../../src/panels/foundation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,OAAO,qBAAsB,SAAQ,uBAAuB;CAAG"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * DOM-free projection of a component page's published facts into the detail page's API table,
3
+ * presets, generated snippets, and share links (workbench-pages.md §7, workbench.md §4).
4
+ * Nothing here is inferred beyond the manifest: a type the table cannot edit generically is
5
+ * labelled "requires fixture", never guessed.
6
+ */
7
+ import type { ComponentPageData } from '../data/types.js';
8
+ import { type FrameSettings, type JsonValue } from '../protocol/index.js';
9
+ export type ControlKind = 'boolean' | 'enum' | 'string' | 'number' | 'json' | 'readonly' | 'fixture';
10
+ /** How a value reaches the element: a property assignment or a serialized attribute. */
11
+ export type WriteMode = 'property' | 'attribute';
12
+ export interface ApiRow {
13
+ /** Stable id shared with metadata: `property:<tag>#<name>` (attribute-only rows use the attribute). */
14
+ readonly id: string;
15
+ /** Property name; undefined for an attribute without a property. */
16
+ readonly property?: string;
17
+ readonly attribute?: string;
18
+ readonly reflects: boolean;
19
+ readonly type: string;
20
+ readonly control: ControlKind;
21
+ /** Allowed values of a literal union, in declared order. */
22
+ readonly values?: readonly string[];
23
+ /** The union includes `null`. */
24
+ readonly nullable: boolean;
25
+ /** The declared default as written in the manifest, or undefined when unknown. */
26
+ readonly default?: string;
27
+ readonly description?: string;
28
+ /** The library declares the property as property-only (no attribute by design). */
29
+ readonly propertyOnly: boolean;
30
+ }
31
+ export interface NamedEntry {
32
+ readonly name: string;
33
+ readonly description?: string;
34
+ /** The CEM type text, or a CSS custom property's `syntax`. */
35
+ readonly type?: string;
36
+ /** The CEM `default` (CSS custom properties). */
37
+ readonly default?: string;
38
+ }
39
+ export interface ComponentFacts {
40
+ readonly rows: readonly ApiRow[];
41
+ readonly events: readonly NamedEntry[];
42
+ readonly slots: readonly NamedEntry[];
43
+ readonly methods: readonly NamedEntry[];
44
+ readonly parts: readonly NamedEntry[];
45
+ readonly cssProperties: readonly NamedEntry[];
46
+ readonly cssStates: readonly NamedEntry[];
47
+ /** Declared property ↔ event pairs that keep a control in sync (`value` + `input`). */
48
+ readonly syncPairs: readonly {
49
+ readonly property: string;
50
+ readonly event: string;
51
+ }[];
52
+ }
53
+ /** The configuration a preview shows; also what share links and snippets encode. */
54
+ export interface PreviewState {
55
+ /** Authored example the state started from (`default` when none was chosen). */
56
+ readonly preset: string;
57
+ readonly attributes: Readonly<Record<string, string>>;
58
+ readonly properties: Readonly<Record<string, JsonValue>>;
59
+ readonly slots: Readonly<Record<string, string>>;
60
+ /** CSS custom property values on the element, by name (`--odd-button-background`). */
61
+ readonly styles?: Readonly<Record<string, string>>;
62
+ }
63
+ export interface PresetEntry {
64
+ readonly name: string;
65
+ readonly id: string;
66
+ readonly label: string;
67
+ /** Authored values; undefined when the example's values were not published. */
68
+ readonly state?: PreviewState;
69
+ readonly preset: boolean;
70
+ readonly requiresFixture: boolean;
71
+ /** The example has setup code (`fixture`), which frames run from the page's example module. */
72
+ readonly fixture: boolean;
73
+ readonly guidance?: string;
74
+ readonly incorrect?: {
75
+ readonly explanation?: string;
76
+ readonly correct?: string;
77
+ };
78
+ }
79
+ /** Split a type at top-level `|`, ignoring separators inside brackets, braces, and quotes. */
80
+ export declare function unionMembers(type: string): string[];
81
+ /** The control a declared type supports (workbench.md §4); unknown shapes require a fixture. */
82
+ export declare function classifyType(type: string): {
83
+ control: ControlKind;
84
+ values?: string[];
85
+ nullable: boolean;
86
+ };
87
+ /** Columns and controls of the editable API table, from the CEM declaration and enrichment. */
88
+ export declare function componentFacts(page: ComponentPageData): ComponentFacts;
89
+ /** The write a row's control uses by default: the attribute when one exists, unless property-only. */
90
+ export declare function defaultWriteMode(row: ApiRow): WriteMode;
91
+ /**
92
+ * Presets from authored examples (`defineExamples`). Values come from the published example
93
+ * definition (`definition`); without it the example is listed but cannot be applied.
94
+ */
95
+ export declare function presets(page: ComponentPageData): PresetEntry[];
96
+ /** The state a page starts from: its `default` example when published, otherwise nothing set. */
97
+ export declare function initialState(page: ComponentPageData): PreviewState;
98
+ /** Authored metadata values (`{ value, provenance }` records or plain strings) as text. */
99
+ export declare const authoredValues: (value: unknown) => string[];
100
+ /** Intended use: authored content (`oddkin.docs.ts`) over the enrichment's `@useFor`/`@notFor`. */
101
+ export declare function intendedUse(page: ComponentPageData): {
102
+ useFor: readonly string[];
103
+ notFor: readonly string[];
104
+ };
105
+ /** An explained mistake and the correct example it names (by name or example id). */
106
+ export interface UsagePair {
107
+ readonly incorrect: PresetEntry;
108
+ readonly correct?: PresetEntry;
109
+ }
110
+ export declare function usagePairs(page: ComponentPageData): UsagePair[];
111
+ /**
112
+ * How a detail-page item is shown: with content (`documented`), as declared empty (`none`: the
113
+ * component has none of these), or labelled as missing (`missing`: "Not documented", naming the
114
+ * input that would supply it). A page has no unlabelled gap when every item is one of these.
115
+ */
116
+ export type CoverageState = 'documented' | 'none' | 'missing';
117
+ export interface CoverageItem {
118
+ /** Stable `<section>/<item>` id; the panel marks the item's element with `data-coverage`. */
119
+ readonly id: string;
120
+ readonly section: string;
121
+ readonly state: CoverageState;
122
+ /** What the item is, for labels shown without a heading (`Preview: not documented…`). */
123
+ readonly subject?: string;
124
+ /** The `none` label. */
125
+ readonly empty?: string;
126
+ /** The `missing` label's source: the input that would supply the item. */
127
+ readonly source?: string;
128
+ /** Entries listed without a description; their rows say "Not documented". */
129
+ readonly undocumented?: readonly string[];
130
+ }
131
+ /** The module that registers the element: the Oddkin enrichment's, else the standard CEM's. */
132
+ export declare function registrationOf(page: ComponentPageData): string | undefined;
133
+ /**
134
+ * Every item a component's detail page shows, in page order, and how it is shown. The panel
135
+ * renders from this, and the coverage check walks it for every component (workbench-pages.md §7).
136
+ */
137
+ export declare function pageCoverage(page: ComponentPageData): CoverageItem[];
138
+ /**
139
+ * Plain HTML and JavaScript that reproduce a state: the public registration entry, attributes,
140
+ * property assignments by script, slot content, declared-event listeners, and preview scopes.
141
+ */
142
+ export declare function snippet(page: ComponentPageData, state: PreviewState, options?: {
143
+ readonly events?: readonly string[];
144
+ readonly settings?: FrameSettings;
145
+ }): string;
146
+ export declare const SHARE_VERSION = 1;
147
+ export declare const SHARE_PARAM = "preview";
148
+ /** Narrowest numeric preview width a share link carries (share-payload.v1). */
149
+ export declare const MIN_SHARE_WIDTH = 160;
150
+ export declare const MAX_SHARE_WIDTH = 4096;
151
+ /** Preview settings in a share link (`preview` in share-payload.v1). */
152
+ export interface SharePreview {
153
+ readonly mode?: 'light' | 'dark';
154
+ readonly direction?: 'ltr' | 'rtl';
155
+ readonly width?: number | 'fill';
156
+ readonly sameAsSite?: boolean;
157
+ }
158
+ /** The decoded form of a component share link: docs/schemas/share-payload.v1.schema.json. */
159
+ export interface SharePayload {
160
+ readonly v: typeof SHARE_VERSION;
161
+ readonly kind: 'component';
162
+ readonly component: string;
163
+ readonly preset?: string;
164
+ readonly props?: Readonly<Record<string, JsonValue>>;
165
+ readonly attributes?: Readonly<Record<string, string>>;
166
+ /** Slot text by slot name; the default slot is `default`. */
167
+ readonly slots?: Readonly<Record<string, string>>;
168
+ /** CSS custom property values by name. */
169
+ readonly styles?: Readonly<Record<string, string>>;
170
+ readonly preview?: SharePreview;
171
+ }
172
+ /** The share payload for a component's preview state. */
173
+ export declare function sharePayload(tag: string, state: PreviewState, preview?: SharePreview): SharePayload;
174
+ export declare function encodeShare(payload: SharePayload): string;
175
+ /**
176
+ * Decode and validate a share link against the page's contract. Names the component does not
177
+ * declare are dropped and reported, so a stale link never writes undeclared properties.
178
+ */
179
+ export declare function decodeShare(page: ComponentPageData, encoded: string): {
180
+ state?: PreviewState;
181
+ preview?: SharePreview;
182
+ problems: string[];
183
+ };
184
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/panels/model.ts"],"names":[],"mappings":"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"}