@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,482 @@
1
+ /** Runtime entry loaded only by a Workbench preview document. */
2
+ import { createScope, scopeStats } from '@oddkin/core/scope';
3
+ import { frameEnvelope, isCompatibleFrameMessage, isFrameMountPayload, isFrameRequest, isFrameSpecimenPayload, isJsonValue, } from '../protocol/index.js';
4
+ const errorMessage = (error) => (error instanceof Error ? error.message : String(error));
5
+ const errorCode = (error, kind) => error instanceof RegistrationIncompatibleError ? error.code : `frame.${kind}.failed`;
6
+ class RegistrationIncompatibleError extends Error {
7
+ code = 'frame.registration.incompatible';
8
+ }
9
+ function readIdentity(win) {
10
+ const params = new URLSearchParams(win.location.search);
11
+ const frame = params.get('frame');
12
+ const generation = Number(params.get('generation'));
13
+ if (!frame || !Number.isSafeInteger(generation) || generation < 1)
14
+ throw new Error('Preview frame URL must include a frame id and positive generation.');
15
+ return { frame, generation };
16
+ }
17
+ function post(runtime, kind, payload) {
18
+ const port = runtime.port;
19
+ if (!port)
20
+ return;
21
+ port.postMessage({ ...frameEnvelope(runtime.identity, kind), payload });
22
+ }
23
+ function fail(runtime, phase, error) {
24
+ const message = errorMessage(error);
25
+ clearElement(runtime);
26
+ runtime.mount = undefined;
27
+ runtime.wrapper.replaceChildren();
28
+ const alert = runtime.document.createElement('p');
29
+ alert.setAttribute('role', 'alert');
30
+ alert.textContent = `Preview ${phase} failed: ${message}`;
31
+ runtime.wrapper.append(alert);
32
+ post(runtime, 'error', { phase, message });
33
+ }
34
+ function applySettings(runtime, settings) {
35
+ const root = runtime.document.documentElement;
36
+ const container = runtime.wrapper;
37
+ if (settings?.container) {
38
+ container.style.inlineSize = `${settings.container.width}px`;
39
+ container.style.blockSize =
40
+ settings.container.height === undefined ? 'auto' : `${settings.container.height}px`;
41
+ }
42
+ else {
43
+ container.style.inlineSize = '';
44
+ container.style.blockSize = '';
45
+ }
46
+ if (settings?.direction)
47
+ container.dir = settings.direction;
48
+ else
49
+ container.removeAttribute('dir');
50
+ const attributes = ['oddMode', 'oddDensity', 'oddProduct', 'oddProfile'];
51
+ const values = [settings?.mode, settings?.density, settings?.product, settings?.profile];
52
+ attributes.forEach((key, index) => {
53
+ const value = values[index];
54
+ if (value === undefined)
55
+ delete container.dataset[key];
56
+ else
57
+ container.dataset[key] = value;
58
+ });
59
+ if (settings?.mode)
60
+ root.dataset['oddMode'] = settings.mode;
61
+ else
62
+ delete root.dataset['oddMode'];
63
+ }
64
+ function clearElement(runtime) {
65
+ runtime.mountScope?.dispose();
66
+ runtime.mountScope = undefined;
67
+ runtime.element?.remove();
68
+ runtime.element = undefined;
69
+ }
70
+ function loadRegistration(runtime, registration) {
71
+ if (runtime.registrations.has(registration))
72
+ return Promise.resolve();
73
+ const scope = runtime.scope;
74
+ if (!scope || scope.disposed)
75
+ return Promise.reject(new Error('The preview frame was disposed.'));
76
+ // The runtime lives in the frame's realm, so its import loads into the frame's registry; a
77
+ // strict Content-Security-Policy (no inline script, Trusted Types) allows it.
78
+ return import(/* @vite-ignore */ registration).then(() => {
79
+ if (scope.disposed)
80
+ throw new Error('The preview frame was disposed.');
81
+ }, (error) => {
82
+ throw new Error(String(error));
83
+ });
84
+ }
85
+ /** Load a component's registration once per frame and create it with its initial state. */
86
+ async function createPreviewElement(runtime, config) {
87
+ const existing = runtime.registrations.get(config.tag);
88
+ if (existing && existing !== config.registration)
89
+ throw new RegistrationIncompatibleError(`The <${config.tag}> registration changed; replace this frame before mounting it again.`);
90
+ await loadRegistration(runtime, config.registration);
91
+ const constructor = runtime.window.customElements.get(config.tag);
92
+ if (!constructor)
93
+ throw new Error(`Registration did not define <${config.tag}>.`);
94
+ runtime.registrations.set(config.tag, config.registration);
95
+ const element = runtime.document.createElement(config.tag);
96
+ for (const [name, value] of Object.entries(config.properties ?? {}))
97
+ Reflect.set(element, name, value);
98
+ for (const [name, value] of Object.entries(config.attributes ?? {})) {
99
+ if (value === null)
100
+ element.removeAttribute(name);
101
+ else
102
+ element.setAttribute(name, value);
103
+ }
104
+ // Through the CSSOM: a strict style-src allows it, unlike a style attribute.
105
+ for (const [name, value] of Object.entries(config.styles ?? {}))
106
+ element.style.setProperty(name, value);
107
+ for (const [name, text] of Object.entries(config.slots ?? {})) {
108
+ const slot = runtime.document.createElement('span');
109
+ if (name)
110
+ slot.slot = name;
111
+ slot.textContent = text;
112
+ element.append(slot);
113
+ }
114
+ return element;
115
+ }
116
+ async function mount(runtime, config) {
117
+ clearElement(runtime);
118
+ runtime.wrapper.replaceChildren();
119
+ applySettings(runtime, config.settings);
120
+ const element = await createPreviewElement(runtime, config);
121
+ runtime.element = element;
122
+ runtime.wrapper.append(element);
123
+ runtime.mount = config;
124
+ runtime.mountScope = runtime.scope?.child({ name: `preview-example:${config.example}` });
125
+ if (!config.fixture)
126
+ return;
127
+ try {
128
+ await runFixture(runtime, config.fixture, config.example, element);
129
+ }
130
+ catch (error) {
131
+ // The element stays: only the example's setup is missing (a module the host does not serve,
132
+ // or a fixture the page's policy stops).
133
+ post(runtime, 'error', { phase: 'fixture', message: errorMessage(error) });
134
+ }
135
+ }
136
+ /** Run the example's fixture once its element is connected, as `mountExample` does in tests. */
137
+ async function runFixture(runtime, url, example, element) {
138
+ const module = (await import(/* @vite-ignore */ url));
139
+ const fixture = module.default?.examples?.[example.slice(example.indexOf('/') + 1)]?.fixture;
140
+ const scope = runtime.mountScope;
141
+ if (typeof fixture !== 'function' || !scope)
142
+ return;
143
+ await fixture({
144
+ scope,
145
+ element,
146
+ mount(content) {
147
+ const host = runtime.document.createElement('div');
148
+ runtime.wrapper.append(host);
149
+ if (content instanceof runtime.window.Node)
150
+ host.append(content);
151
+ else if (module.oddkinFrameRender) {
152
+ const part = module.oddkinFrameRender(content, host);
153
+ scope.add(() => part.dispose(), 'fixture template');
154
+ }
155
+ else
156
+ host.textContent = String(content);
157
+ return host.firstElementChild ?? host;
158
+ },
159
+ });
160
+ await element.updateComplete;
161
+ }
162
+ /** Every role's element in one frame, each captioned with its role. */
163
+ async function specimen(runtime, config) {
164
+ clearElement(runtime);
165
+ runtime.mount = undefined;
166
+ runtime.wrapper.replaceChildren();
167
+ applySettings(runtime, config.settings);
168
+ const list = runtime.document.createElement('div');
169
+ list.dataset['oddkinSpecimen'] = '';
170
+ for (const item of config.items) {
171
+ const figure = runtime.document.createElement('figure');
172
+ figure.dataset['role'] = item.role;
173
+ const caption = runtime.document.createElement('figcaption');
174
+ caption.textContent = item.label;
175
+ figure.append(caption, await createPreviewElement(runtime, item));
176
+ list.append(figure);
177
+ }
178
+ runtime.wrapper.append(list);
179
+ }
180
+ function replaceTheme(runtime, cssText) {
181
+ if (runtime.theme) {
182
+ runtime.theme.replaceSync(cssText);
183
+ return;
184
+ }
185
+ const Sheet = runtime.window.CSSStyleSheet;
186
+ if (!Sheet || !('adoptedStyleSheets' in runtime.document))
187
+ throw new Error('Constructable stylesheets are unavailable in the preview frame.');
188
+ const sheet = new Sheet();
189
+ sheet.replaceSync(cssText);
190
+ runtime.document.adoptedStyleSheets = [...runtime.document.adoptedStyleSheets, sheet];
191
+ runtime.theme = sheet;
192
+ }
193
+ const DETAIL_LIMIT = 2000;
194
+ /**
195
+ * A plain-JSON summary of an event detail: cycles, DOM nodes, functions, `Map`/`Set`, errors,
196
+ * and class instances are described rather than transferred, and the result is size-capped.
197
+ */
198
+ export function summarizeDetail(value) {
199
+ const seen = new WeakSet();
200
+ const walk = (current, depth) => {
201
+ if (current === null || typeof current === 'boolean' || typeof current === 'string')
202
+ return current;
203
+ if (typeof current === 'number')
204
+ return Number.isFinite(current) ? current : String(current);
205
+ if (current === undefined)
206
+ return '[undefined]';
207
+ if (typeof current === 'bigint')
208
+ return `${current}n`;
209
+ if (typeof current === 'symbol')
210
+ return String(current);
211
+ if (typeof current === 'function')
212
+ return `[Function ${current.name || 'anonymous'}]`;
213
+ const object = current;
214
+ if (seen.has(object))
215
+ return '[Circular]';
216
+ if (depth > 4)
217
+ return '[…]';
218
+ if (typeof object.nodeType === 'number' && 'nodeName' in object) {
219
+ const node = object;
220
+ return node.nodeType === 1
221
+ ? `<${node.localName}${node.id ? `#${node.id}` : ''}>`
222
+ : `[${node.nodeName}]`;
223
+ }
224
+ if (object instanceof Error)
225
+ return `[${object.name}: ${object.message}]`;
226
+ seen.add(object);
227
+ try {
228
+ if (object instanceof Map)
229
+ return {
230
+ '[Map]': object.size,
231
+ entries: [...object]
232
+ .slice(0, 20)
233
+ .map(([k, v]) => [walk(k, depth + 1), walk(v, depth + 1)]),
234
+ };
235
+ if (object instanceof Set)
236
+ return {
237
+ '[Set]': object.size,
238
+ values: [...object].slice(0, 20).map((v) => walk(v, depth + 1)),
239
+ };
240
+ if (Array.isArray(object)) {
241
+ const items = object.slice(0, 20).map((v) => walk(v, depth + 1));
242
+ if (object.length > 20)
243
+ items.push(`[${object.length - 20} more]`);
244
+ return items;
245
+ }
246
+ const prototype = Object.getPrototypeOf(object);
247
+ if (prototype !== Object.prototype && prototype !== null)
248
+ return `[${prototype.constructor?.name || 'Object'}]`;
249
+ const out = {};
250
+ const keys = Object.keys(object);
251
+ for (const key of keys.slice(0, 20))
252
+ out[key] = walk(object[key], depth + 1);
253
+ if (keys.length > 20)
254
+ out['[more]'] = keys.length - 20;
255
+ return out;
256
+ }
257
+ finally {
258
+ seen.delete(object);
259
+ }
260
+ };
261
+ const summary = walk(value, 0);
262
+ const text = JSON.stringify(summary);
263
+ return text.length > DETAIL_LIMIT ? `[Truncated: ${text.slice(0, DETAIL_LIMIT)}…]` : summary;
264
+ }
265
+ function listenToElement(runtime, scope) {
266
+ const element = runtime.element;
267
+ if (!element)
268
+ return;
269
+ const tag = runtime.mount?.tag ?? element.localName;
270
+ for (const name of runtime.mount?.events ?? [])
271
+ scope.listen(runtime.wrapper, name, (event) => {
272
+ const payload = {
273
+ id: `event:${tag}#${name}`,
274
+ name,
275
+ time: runtime.window.performance.now(),
276
+ bubbles: event.bubbles,
277
+ composed: event.composed,
278
+ cancelable: event.cancelable,
279
+ target: event.target?.localName ?? element.localName,
280
+ };
281
+ const detail = event.detail;
282
+ if (detail !== undefined && detail !== null)
283
+ payload['detail'] = summarizeDetail(detail);
284
+ post(runtime, 'event', payload);
285
+ }, true);
286
+ // On the element itself, after the component's own handlers have updated the property.
287
+ for (const pair of runtime.mount?.sync ?? [])
288
+ scope.listen(element, pair.event, () => {
289
+ const value = Reflect.get(element, pair.property);
290
+ post(runtime, 'state', {
291
+ property: pair.property,
292
+ value: isJsonValue(value) ? value : summarizeDetail(value),
293
+ });
294
+ });
295
+ }
296
+ async function handle(runtime, scope, request) {
297
+ try {
298
+ switch (request.kind) {
299
+ case 'mount':
300
+ if (!isFrameMountPayload(request.payload))
301
+ throw new TypeError('mount requires a valid example payload.');
302
+ await mount(runtime, request.payload);
303
+ if (runtime.mountScope)
304
+ listenToElement(runtime, runtime.mountScope);
305
+ post(runtime, 'state', { scopeStats: scopeStats() });
306
+ return { mounted: true };
307
+ case 'specimen':
308
+ if (!isFrameSpecimenPayload(request.payload))
309
+ throw new TypeError('specimen requires valid role items.');
310
+ await specimen(runtime, request.payload);
311
+ return { mounted: request.payload.items.length };
312
+ case 'set': {
313
+ if (!runtime.element)
314
+ throw new Error('There is no mounted component to update.');
315
+ if (request.payload.cssProperty !== undefined) {
316
+ const value = request.payload.cssValue;
317
+ if (value === null || value === undefined)
318
+ runtime.element.style.removeProperty(request.payload.cssProperty);
319
+ else
320
+ runtime.element.style.setProperty(request.payload.cssProperty, value);
321
+ }
322
+ else if (request.payload.property !== undefined) {
323
+ if (request.payload.unset === true)
324
+ Reflect.deleteProperty(runtime.element, request.payload.property);
325
+ else if (Object.hasOwn(request.payload, 'value'))
326
+ Reflect.set(runtime.element, request.payload.property, request.payload.value);
327
+ else
328
+ throw new TypeError('A property update needs a value or unset: true.');
329
+ }
330
+ else {
331
+ const value = request.payload.attributeValue;
332
+ if (request.payload.attribute === undefined)
333
+ throw new TypeError('A set request needs a property or attribute name.');
334
+ if (value === null)
335
+ runtime.element.removeAttribute(request.payload.attribute);
336
+ else if (typeof value === 'string')
337
+ runtime.element.setAttribute(request.payload.attribute, value);
338
+ else
339
+ throw new TypeError('An attribute update needs a string or null value.');
340
+ }
341
+ return { updated: true };
342
+ }
343
+ case 'slot': {
344
+ if (!runtime.element)
345
+ throw new Error('There is no mounted component to update.');
346
+ for (const child of [...runtime.element.children])
347
+ if ((child.getAttribute('slot') ?? '') === request.payload.name)
348
+ child.remove();
349
+ const slot = runtime.document.createElement('span');
350
+ if (request.payload.name)
351
+ slot.slot = request.payload.name;
352
+ slot.textContent = request.payload.text;
353
+ runtime.element.append(slot);
354
+ return { updated: true };
355
+ }
356
+ case 'reset':
357
+ if (!runtime.mount)
358
+ throw new Error('There is no mounted example to reset.');
359
+ await mount(runtime, runtime.mount);
360
+ if (runtime.mountScope)
361
+ listenToElement(runtime, runtime.mountScope);
362
+ post(runtime, 'state', { scopeStats: scopeStats() });
363
+ return { reset: true };
364
+ case 'theme': {
365
+ replaceTheme(runtime, request.payload.cssText);
366
+ return { updated: true };
367
+ }
368
+ case 'settings': {
369
+ applySettings(runtime, request.payload);
370
+ return { updated: true };
371
+ }
372
+ case 'inspect':
373
+ throw new Error('inspectPreview types are available; frame inspection is not implemented yet.');
374
+ case 'dispose':
375
+ return { disposed: true };
376
+ }
377
+ }
378
+ catch (error) {
379
+ fail(runtime, request.kind, error);
380
+ throw error;
381
+ }
382
+ }
383
+ /** Install the runtime on a frame's own Window. Exported for controlled browser tests. */
384
+ export function installFrameRuntime(win = window) {
385
+ const doc = win.document;
386
+ const identity = readIdentity(win);
387
+ const wrapper = doc.querySelector('[data-oddkin-preview]');
388
+ if (!wrapper)
389
+ throw new Error('Preview frame document is missing its preview container.');
390
+ const runtime = {
391
+ identity,
392
+ window: win,
393
+ document: doc,
394
+ scope: undefined,
395
+ mountScope: undefined,
396
+ port: undefined,
397
+ lastRequest: 0,
398
+ mount: undefined,
399
+ element: undefined,
400
+ theme: undefined,
401
+ wrapper,
402
+ registrations: new Map(),
403
+ rejectedRequests: 0,
404
+ staleRequests: 0,
405
+ };
406
+ const hello = frameEnvelope(identity, 'hello');
407
+ win.parent.postMessage(hello, win.location.origin);
408
+ win.addEventListener('message', (event) => {
409
+ if (event.source !== win.parent ||
410
+ event.origin !== win.location.origin ||
411
+ event.ports.length !== 1)
412
+ return;
413
+ const message = event.data;
414
+ if (!isCompatibleFrameMessage(message) ||
415
+ message.kind !== 'connect' ||
416
+ message.frame !== identity.frame ||
417
+ message.generation !== identity.generation ||
418
+ runtime.scope)
419
+ return;
420
+ const port = event.ports[0];
421
+ if (!port)
422
+ return;
423
+ runtime.port = port;
424
+ const scope = createScope({ name: `preview-frame:${identity.frame}:${identity.generation}` });
425
+ runtime.scope = scope;
426
+ scope.add(() => port.close(), 'message port');
427
+ // Requests run one at a time, in their order: a change that arrives while a mount is still
428
+ // loading its module graph applies to the element that mount creates.
429
+ let queue = Promise.resolve();
430
+ const run = (request) => handle(runtime, scope, request).then((payload) => {
431
+ if (scope.disposed)
432
+ return;
433
+ const reply = {
434
+ ...frameEnvelope(identity, 'reply'),
435
+ replyTo: request.id,
436
+ ...(payload && isJsonValue(payload) ? { payload } : {}),
437
+ };
438
+ port.postMessage(reply);
439
+ if (request.kind === 'dispose')
440
+ scope.dispose();
441
+ }, (error) => {
442
+ if (scope.disposed)
443
+ return;
444
+ port.postMessage({
445
+ ...frameEnvelope(identity, 'reply'),
446
+ replyTo: request.id,
447
+ error: { code: errorCode(error, request.kind), message: errorMessage(error) },
448
+ });
449
+ });
450
+ scope.listen(port, 'message', (portEvent) => {
451
+ const request = portEvent.data;
452
+ if (!isFrameRequest(request)) {
453
+ runtime.rejectedRequests++;
454
+ post(runtime, 'state', { rejectedRequests: runtime.rejectedRequests });
455
+ return;
456
+ }
457
+ if (request.frame !== identity.frame ||
458
+ request.generation !== identity.generation ||
459
+ request.id <= runtime.lastRequest) {
460
+ runtime.staleRequests++;
461
+ post(runtime, 'state', { staleRequests: runtime.staleRequests });
462
+ return;
463
+ }
464
+ runtime.lastRequest = request.id;
465
+ queue = queue.then(() => run(request)).catch(() => undefined);
466
+ });
467
+ port.start();
468
+ scope.listen(win, 'error', (event) => fail(runtime, 'runtime', event.error ?? event.message));
469
+ scope.listen(win, 'unhandledrejection', (event) => fail(runtime, 'runtime', event.reason));
470
+ const observer = new win.ResizeObserver((entries) => {
471
+ const size = entries[0]?.contentRect;
472
+ if (size)
473
+ post(runtime, 'size', { width: size.width, height: size.height });
474
+ });
475
+ observer.observe(wrapper);
476
+ scope.add(() => observer.disconnect(), 'resize observer');
477
+ post(runtime, 'state', { connected: true, scopeStats: scopeStats() });
478
+ });
479
+ }
480
+ if (typeof window !== 'undefined' && window.parent !== window)
481
+ installFrameRuntime(window);
482
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/frame/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** Diagnostics shared by the DOM-free Workbench entries. */
2
+ export interface WorkbenchDiagnostic {
3
+ /** Stable code, e.g. `config.key.unknown`. */
4
+ readonly code: string;
5
+ readonly severity: 'error' | 'warning' | 'info';
6
+ readonly message: string;
7
+ /** JSON pointer or id the diagnostic is about. */
8
+ readonly path?: string;
9
+ }
10
+ export declare class DiagnosticList {
11
+ readonly items: WorkbenchDiagnostic[];
12
+ error(code: string, message: string, path?: string): void;
13
+ warn(code: string, message: string, path?: string): void;
14
+ get hasErrors(): boolean;
15
+ }
16
+ export declare const isObject: (value: unknown) => value is Record<string, unknown>;
17
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/internal/diagnostics.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,EAAE,CAAM;IAC3C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAExD;IACD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAOvD;IACD,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ export class DiagnosticList {
2
+ items = [];
3
+ error(code, message, path) {
4
+ this.items.push({ code, severity: 'error', message, ...(path === undefined ? {} : { path }) });
5
+ }
6
+ warn(code, message, path) {
7
+ this.items.push({
8
+ code,
9
+ severity: 'warning',
10
+ message,
11
+ ...(path === undefined ? {} : { path }),
12
+ });
13
+ }
14
+ get hasErrors() {
15
+ return this.items.some((d) => d.severity === 'error');
16
+ }
17
+ }
18
+ export const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
19
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/internal/diagnostics.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,cAAc;IAChB,KAAK,GAA0B,EAAE,CAAC;IAC3C,KAAK,CAAC,IAAY,EAAE,OAAe,EAAE,IAAa;QAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,CAAC,IAAY,EAAE,OAAe,EAAE,IAAa;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI;YACJ,QAAQ,EAAE,SAAS;YACnB,OAAO;YACP,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAC3E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/node/bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import { run } from './cli.js';
3
+ const controller = new AbortController();
4
+ for (const signal of ['SIGINT', 'SIGTERM'])
5
+ process.once(signal, () => controller.abort());
6
+ process.exitCode = await run(process.argv.slice(2), {
7
+ out: (text) => console.log(text),
8
+ err: (text) => console.error(text),
9
+ signal: controller.signal,
10
+ inherit: true,
11
+ });
12
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/node/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;AACzC,KAAK,MAAM,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU;IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;AACpG,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAClD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,OAAO,EAAE,IAAI;CACd,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type DevServer } from './server.js';
2
+ export interface CliIO {
3
+ readonly out: (text: string) => void;
4
+ readonly err: (text: string) => void;
5
+ /** Ends a long-running command (`workbench dev`); the bin aborts it on SIGINT and SIGTERM. */
6
+ readonly signal?: AbortSignal;
7
+ /** Let delegated commands write to this process's terminal directly (the bin sets it). */
8
+ readonly inherit?: boolean;
9
+ /** Receives the dev server once it listens. */
10
+ readonly onServer?: (server: DevServer) => void;
11
+ }
12
+ export declare const USAGE = "Usage:\n oddkin analyze <tsconfig.json> [options] Analyze a component library with @oddkin/analyzer\n (the options of oddkin-analyze; \"oddkin analyze --help\")\n oddkin workbench dev [--config <file or directory>] [--port <number>] [--host <name>] [--no-watch]\n Serve the Workbench with live updates (port 4175)\n oddkin workbench build [--config <file or directory>] [--out <directory>] [--base <path>] [--routing history|hash]\n Write the Workbench as a static app (default .oddkin/workbench-build)\n oddkin --help | --version";
13
+ /** The analyzer's command, resolved from this package like any dependency. */
14
+ export declare function analyzerBin(): string;
15
+ /** Run `oddkin` with `args`; resolves with the exit code. */
16
+ export declare function run(args: readonly string[], io: CliIO): Promise<number>;
17
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/node/cli.ts"],"names":[],"mappings":"AAYA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAI3F,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,KAAK,iqBAOU,CAAC;AAM7B,8EAA8E;AAC9E,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAmJD,6DAA6D;AAC7D,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB7E"}