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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -2
  3. package/dist/app/copy.d.ts +43 -0
  4. package/dist/app/copy.d.ts.map +1 -0
  5. package/dist/app/copy.js +47 -0
  6. package/dist/app/copy.js.map +1 -0
  7. package/dist/app/define.d.ts +3 -0
  8. package/dist/app/define.d.ts.map +1 -0
  9. package/dist/app/define.js +10 -0
  10. package/dist/app/define.js.map +1 -0
  11. package/dist/app/details.d.ts +22 -0
  12. package/dist/app/details.d.ts.map +1 -0
  13. package/dist/app/details.js +16 -0
  14. package/dist/app/details.js.map +1 -0
  15. package/dist/app/index.d.ts +12 -0
  16. package/dist/app/index.d.ts.map +1 -0
  17. package/dist/app/index.js +9 -0
  18. package/dist/app/index.js.map +1 -0
  19. package/dist/app/routes.d.ts +26 -0
  20. package/dist/app/routes.d.ts.map +1 -0
  21. package/dist/app/routes.js +94 -0
  22. package/dist/app/routes.js.map +1 -0
  23. package/dist/app/search.d.ts +17 -0
  24. package/dist/app/search.d.ts.map +1 -0
  25. package/dist/app/search.js +52 -0
  26. package/dist/app/search.js.map +1 -0
  27. package/dist/app/shell.d.ts +29 -0
  28. package/dist/app/shell.d.ts.map +1 -0
  29. package/dist/app/shell.js +435 -0
  30. package/dist/app/shell.js.map +1 -0
  31. package/dist/app/styles.d.ts +2 -0
  32. package/dist/app/styles.d.ts.map +1 -0
  33. package/dist/app/styles.js +373 -0
  34. package/dist/app/styles.js.map +1 -0
  35. package/dist/app/theme-studio.d.ts +12 -0
  36. package/dist/app/theme-studio.d.ts.map +1 -0
  37. package/dist/app/theme-studio.js +14 -0
  38. package/dist/app/theme-studio.js.map +1 -0
  39. package/dist/app/views.d.ts +34 -0
  40. package/dist/app/views.d.ts.map +1 -0
  41. package/dist/app/views.js +230 -0
  42. package/dist/app/views.js.map +1 -0
  43. package/dist/config/index.d.ts +170 -0
  44. package/dist/config/index.d.ts.map +1 -0
  45. package/dist/config/index.js +148 -0
  46. package/dist/config/index.js.map +1 -0
  47. package/dist/conformance/button.d.ts +2 -0
  48. package/dist/conformance/button.d.ts.map +1 -0
  49. package/dist/conformance/button.js +233 -0
  50. package/dist/conformance/button.js.map +1 -0
  51. package/dist/conformance/index.d.ts +107 -0
  52. package/dist/conformance/index.d.ts.map +1 -0
  53. package/dist/conformance/index.js +60 -0
  54. package/dist/conformance/index.js.map +1 -0
  55. package/dist/data/build.d.ts +36 -0
  56. package/dist/data/build.d.ts.map +1 -0
  57. package/dist/data/build.js +248 -0
  58. package/dist/data/build.js.map +1 -0
  59. package/dist/data/import-map.d.ts +53 -0
  60. package/dist/data/import-map.d.ts.map +1 -0
  61. package/dist/data/import-map.js +160 -0
  62. package/dist/data/import-map.js.map +1 -0
  63. package/dist/data/index.d.ts +14 -0
  64. package/dist/data/index.d.ts.map +1 -0
  65. package/dist/data/index.js +10 -0
  66. package/dist/data/index.js.map +1 -0
  67. package/dist/data/theme-studio.d.ts +21 -0
  68. package/dist/data/theme-studio.d.ts.map +1 -0
  69. package/dist/data/theme-studio.js +116 -0
  70. package/dist/data/theme-studio.js.map +1 -0
  71. package/dist/data/types.d.ts +169 -0
  72. package/dist/data/types.d.ts.map +1 -0
  73. package/dist/data/types.js +4 -0
  74. package/dist/data/types.js.map +1 -0
  75. package/dist/examples/index.d.ts +101 -0
  76. package/dist/examples/index.d.ts.map +1 -0
  77. package/dist/examples/index.js +106 -0
  78. package/dist/examples/index.js.map +1 -0
  79. package/dist/frame/index.d.ts +9 -0
  80. package/dist/frame/index.d.ts.map +1 -0
  81. package/dist/frame/index.js +468 -0
  82. package/dist/frame/index.js.map +1 -0
  83. package/dist/internal/diagnostics.d.ts +17 -0
  84. package/dist/internal/diagnostics.d.ts.map +1 -0
  85. package/dist/internal/diagnostics.js +19 -0
  86. package/dist/internal/diagnostics.js.map +1 -0
  87. package/dist/node/bin.d.ts +3 -0
  88. package/dist/node/bin.d.ts.map +1 -0
  89. package/dist/node/bin.js +12 -0
  90. package/dist/node/bin.js.map +1 -0
  91. package/dist/node/cli.d.ts +17 -0
  92. package/dist/node/cli.d.ts.map +1 -0
  93. package/dist/node/cli.js +198 -0
  94. package/dist/node/cli.js.map +1 -0
  95. package/dist/node/config.d.ts +28 -0
  96. package/dist/node/config.d.ts.map +1 -0
  97. package/dist/node/config.js +80 -0
  98. package/dist/node/config.js.map +1 -0
  99. package/dist/node/generated.d.ts +19 -0
  100. package/dist/node/generated.d.ts.map +1 -0
  101. package/dist/node/generated.js +109 -0
  102. package/dist/node/generated.js.map +1 -0
  103. package/dist/node/html.d.ts +35 -0
  104. package/dist/node/html.d.ts.map +1 -0
  105. package/dist/node/html.js +51 -0
  106. package/dist/node/html.js.map +1 -0
  107. package/dist/node/index.d.ts +24 -0
  108. package/dist/node/index.d.ts.map +1 -0
  109. package/dist/node/index.js +15 -0
  110. package/dist/node/index.js.map +1 -0
  111. package/dist/node/inputs.d.ts +24 -0
  112. package/dist/node/inputs.d.ts.map +1 -0
  113. package/dist/node/inputs.js +259 -0
  114. package/dist/node/inputs.js.map +1 -0
  115. package/dist/node/packages.d.ts +35 -0
  116. package/dist/node/packages.d.ts.map +1 -0
  117. package/dist/node/packages.js +87 -0
  118. package/dist/node/packages.js.map +1 -0
  119. package/dist/node/preload.d.ts +10 -0
  120. package/dist/node/preload.d.ts.map +1 -0
  121. package/dist/node/preload.js +61 -0
  122. package/dist/node/preload.js.map +1 -0
  123. package/dist/node/server.d.ts +42 -0
  124. package/dist/node/server.d.ts.map +1 -0
  125. package/dist/node/server.js +369 -0
  126. package/dist/node/server.js.map +1 -0
  127. package/dist/node/static.d.ts +33 -0
  128. package/dist/node/static.d.ts.map +1 -0
  129. package/dist/node/static.js +141 -0
  130. package/dist/node/static.js.map +1 -0
  131. package/dist/node/workbench.d.ts +43 -0
  132. package/dist/node/workbench.d.ts.map +1 -0
  133. package/dist/node/workbench.js +183 -0
  134. package/dist/node/workbench.js.map +1 -0
  135. package/dist/pages/build.d.ts +22 -0
  136. package/dist/pages/build.d.ts.map +1 -0
  137. package/dist/pages/build.js +363 -0
  138. package/dist/pages/build.js.map +1 -0
  139. package/dist/pages/defaults.d.ts +16 -0
  140. package/dist/pages/defaults.d.ts.map +1 -0
  141. package/dist/pages/defaults.js +88 -0
  142. package/dist/pages/defaults.js.map +1 -0
  143. package/dist/pages/index.d.ts +14 -0
  144. package/dist/pages/index.d.ts.map +1 -0
  145. package/dist/pages/index.js +10 -0
  146. package/dist/pages/index.js.map +1 -0
  147. package/dist/pages/navigation.d.ts +48 -0
  148. package/dist/pages/navigation.d.ts.map +1 -0
  149. package/dist/pages/navigation.js +83 -0
  150. package/dist/pages/navigation.js.map +1 -0
  151. package/dist/pages/types.d.ts +143 -0
  152. package/dist/pages/types.d.ts.map +1 -0
  153. package/dist/pages/types.js +3 -0
  154. package/dist/pages/types.js.map +1 -0
  155. package/dist/panels/catalog-define.d.ts +3 -0
  156. package/dist/panels/catalog-define.d.ts.map +1 -0
  157. package/dist/panels/catalog-define.js +7 -0
  158. package/dist/panels/catalog-define.js.map +1 -0
  159. package/dist/panels/catalog.d.ts +33 -0
  160. package/dist/panels/catalog.d.ts.map +1 -0
  161. package/dist/panels/catalog.js +54 -0
  162. package/dist/panels/catalog.js.map +1 -0
  163. package/dist/panels/component-define.d.ts +3 -0
  164. package/dist/panels/component-define.d.ts.map +1 -0
  165. package/dist/panels/component-define.js +6 -0
  166. package/dist/panels/component-define.js.map +1 -0
  167. package/dist/panels/component-detail.d.ts +46 -0
  168. package/dist/panels/component-detail.d.ts.map +1 -0
  169. package/dist/panels/component-detail.js +1120 -0
  170. package/dist/panels/component-detail.js.map +1 -0
  171. package/dist/panels/component.d.ts +17 -0
  172. package/dist/panels/component.d.ts.map +1 -0
  173. package/dist/panels/component.js +10 -0
  174. package/dist/panels/component.js.map +1 -0
  175. package/dist/panels/foundation-define.d.ts +3 -0
  176. package/dist/panels/foundation-define.d.ts.map +1 -0
  177. package/dist/panels/foundation-define.js +6 -0
  178. package/dist/panels/foundation-define.js.map +1 -0
  179. package/dist/panels/foundation-detail.d.ts +23 -0
  180. package/dist/panels/foundation-detail.d.ts.map +1 -0
  181. package/dist/panels/foundation-detail.js +216 -0
  182. package/dist/panels/foundation-detail.js.map +1 -0
  183. package/dist/panels/foundation.d.ts +15 -0
  184. package/dist/panels/foundation.d.ts.map +1 -0
  185. package/dist/panels/foundation.js +9 -0
  186. package/dist/panels/foundation.js.map +1 -0
  187. package/dist/panels/model.d.ts +173 -0
  188. package/dist/panels/model.d.ts.map +1 -0
  189. package/dist/panels/model.js +462 -0
  190. package/dist/panels/model.js.map +1 -0
  191. package/dist/panels/styles.d.ts +3 -0
  192. package/dist/panels/styles.d.ts.map +1 -0
  193. package/dist/panels/styles.js +316 -0
  194. package/dist/panels/styles.js.map +1 -0
  195. package/dist/panels/theme-model.d.ts +49 -0
  196. package/dist/panels/theme-model.d.ts.map +1 -0
  197. package/dist/panels/theme-model.js +146 -0
  198. package/dist/panels/theme-model.js.map +1 -0
  199. package/dist/panels/theme-studio.d.ts +32 -0
  200. package/dist/panels/theme-studio.d.ts.map +1 -0
  201. package/dist/panels/theme-studio.js +312 -0
  202. package/dist/panels/theme-studio.js.map +1 -0
  203. package/dist/preview/frame.d.ts +44 -0
  204. package/dist/preview/frame.d.ts.map +1 -0
  205. package/dist/preview/frame.js +250 -0
  206. package/dist/preview/frame.js.map +1 -0
  207. package/dist/preview/index.d.ts +26 -0
  208. package/dist/preview/index.d.ts.map +1 -0
  209. package/dist/preview/index.js +58 -0
  210. package/dist/preview/index.js.map +1 -0
  211. package/dist/preview/theme-generation.d.ts +33 -0
  212. package/dist/preview/theme-generation.d.ts.map +1 -0
  213. package/dist/preview/theme-generation.js +48 -0
  214. package/dist/preview/theme-generation.js.map +1 -0
  215. package/dist/protocol/index.d.ts +207 -0
  216. package/dist/protocol/index.d.ts.map +1 -0
  217. package/dist/protocol/index.js +261 -0
  218. package/dist/protocol/index.js.map +1 -0
  219. package/dist/testing/index.d.ts +47 -0
  220. package/dist/testing/index.d.ts.map +1 -0
  221. package/dist/testing/index.js +145 -0
  222. package/dist/testing/index.js.map +1 -0
  223. package/package.json +118 -4
@@ -0,0 +1,468 @@
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
+ const script = runtime.document.createElement('script');
77
+ script.type = 'module';
78
+ script.textContent = `try {
79
+ await import(${JSON.stringify(registration)});
80
+ document.dispatchEvent(new CustomEvent('oddkin:registration', {
81
+ detail: { registration: ${JSON.stringify(registration)}, ok: true }
82
+ }));
83
+ } catch (error) {
84
+ document.dispatchEvent(new CustomEvent('oddkin:registration', {
85
+ detail: { registration: ${JSON.stringify(registration)}, ok: false, message: String(error) }
86
+ }));
87
+ }`;
88
+ const releaseScript = scope.add(() => script.remove(), 'registration module');
89
+ return new Promise((resolve, reject) => {
90
+ let complete = false;
91
+ let releaseLoad = () => { };
92
+ let releaseError = () => { };
93
+ const finish = (error) => {
94
+ if (complete)
95
+ return;
96
+ complete = true;
97
+ releaseLoad();
98
+ releaseError();
99
+ releaseAbort();
100
+ releaseScript();
101
+ if (error)
102
+ reject(error);
103
+ else
104
+ resolve();
105
+ };
106
+ releaseLoad = scope.listen(runtime.document, 'oddkin:registration', (event) => {
107
+ if (event.detail.registration !== registration)
108
+ return;
109
+ finish(event.detail.ok
110
+ ? undefined
111
+ : new Error(event.detail.message ?? `Could not load registration "${registration}".`));
112
+ });
113
+ releaseError = scope.listen(script, 'error', () => finish(new Error(`Could not execute registration "${registration}".`)));
114
+ const releaseAbort = scope.add(() => {
115
+ if (!complete)
116
+ finish(new Error('The preview frame was disposed.'));
117
+ });
118
+ runtime.document.head.append(script);
119
+ });
120
+ }
121
+ /** Load a component's registration once per frame and create it with its initial state. */
122
+ async function createPreviewElement(runtime, config) {
123
+ const existing = runtime.registrations.get(config.tag);
124
+ if (existing && existing !== config.registration)
125
+ throw new RegistrationIncompatibleError(`The <${config.tag}> registration changed; replace this frame before mounting it again.`);
126
+ await loadRegistration(runtime, config.registration);
127
+ const constructor = runtime.window.customElements.get(config.tag);
128
+ if (!constructor)
129
+ throw new Error(`Registration did not define <${config.tag}>.`);
130
+ runtime.registrations.set(config.tag, config.registration);
131
+ const element = runtime.document.createElement(config.tag);
132
+ for (const [name, value] of Object.entries(config.properties ?? {}))
133
+ Reflect.set(element, name, value);
134
+ for (const [name, value] of Object.entries(config.attributes ?? {})) {
135
+ if (value === null)
136
+ element.removeAttribute(name);
137
+ else
138
+ element.setAttribute(name, value);
139
+ }
140
+ for (const [name, text] of Object.entries(config.slots ?? {})) {
141
+ const slot = runtime.document.createElement('span');
142
+ if (name)
143
+ slot.slot = name;
144
+ slot.textContent = text;
145
+ element.append(slot);
146
+ }
147
+ return element;
148
+ }
149
+ async function mount(runtime, config) {
150
+ clearElement(runtime);
151
+ runtime.wrapper.replaceChildren();
152
+ applySettings(runtime, config.settings);
153
+ const element = await createPreviewElement(runtime, config);
154
+ runtime.element = element;
155
+ runtime.wrapper.append(element);
156
+ runtime.mount = config;
157
+ runtime.mountScope = runtime.scope?.child({ name: `preview-example:${config.example}` });
158
+ }
159
+ /** Every role's element in one frame, each captioned with its role. */
160
+ async function specimen(runtime, config) {
161
+ clearElement(runtime);
162
+ runtime.mount = undefined;
163
+ runtime.wrapper.replaceChildren();
164
+ applySettings(runtime, config.settings);
165
+ const list = runtime.document.createElement('div');
166
+ list.dataset['oddkinSpecimen'] = '';
167
+ for (const item of config.items) {
168
+ const figure = runtime.document.createElement('figure');
169
+ figure.dataset['role'] = item.role;
170
+ const caption = runtime.document.createElement('figcaption');
171
+ caption.textContent = item.label;
172
+ figure.append(caption, await createPreviewElement(runtime, item));
173
+ list.append(figure);
174
+ }
175
+ runtime.wrapper.append(list);
176
+ }
177
+ function replaceTheme(runtime, cssText) {
178
+ if (runtime.theme) {
179
+ runtime.theme.replaceSync(cssText);
180
+ return;
181
+ }
182
+ const Sheet = runtime.window.CSSStyleSheet;
183
+ if (!Sheet || !('adoptedStyleSheets' in runtime.document))
184
+ throw new Error('Constructable stylesheets are unavailable in the preview frame.');
185
+ const sheet = new Sheet();
186
+ sheet.replaceSync(cssText);
187
+ runtime.document.adoptedStyleSheets = [...runtime.document.adoptedStyleSheets, sheet];
188
+ runtime.theme = sheet;
189
+ }
190
+ const DETAIL_LIMIT = 2000;
191
+ /**
192
+ * A plain-JSON summary of an event detail: cycles, DOM nodes, functions, `Map`/`Set`, errors,
193
+ * and class instances are described rather than transferred, and the result is size-capped.
194
+ */
195
+ export function summarizeDetail(value) {
196
+ const seen = new WeakSet();
197
+ const walk = (current, depth) => {
198
+ if (current === null || typeof current === 'boolean' || typeof current === 'string')
199
+ return current;
200
+ if (typeof current === 'number')
201
+ return Number.isFinite(current) ? current : String(current);
202
+ if (current === undefined)
203
+ return '[undefined]';
204
+ if (typeof current === 'bigint')
205
+ return `${current}n`;
206
+ if (typeof current === 'symbol')
207
+ return String(current);
208
+ if (typeof current === 'function')
209
+ return `[Function ${current.name || 'anonymous'}]`;
210
+ const object = current;
211
+ if (seen.has(object))
212
+ return '[Circular]';
213
+ if (depth > 4)
214
+ return '[…]';
215
+ if (typeof object.nodeType === 'number' && 'nodeName' in object) {
216
+ const node = object;
217
+ return node.nodeType === 1
218
+ ? `<${node.localName}${node.id ? `#${node.id}` : ''}>`
219
+ : `[${node.nodeName}]`;
220
+ }
221
+ if (object instanceof Error)
222
+ return `[${object.name}: ${object.message}]`;
223
+ seen.add(object);
224
+ try {
225
+ if (object instanceof Map)
226
+ return {
227
+ '[Map]': object.size,
228
+ entries: [...object]
229
+ .slice(0, 20)
230
+ .map(([k, v]) => [walk(k, depth + 1), walk(v, depth + 1)]),
231
+ };
232
+ if (object instanceof Set)
233
+ return {
234
+ '[Set]': object.size,
235
+ values: [...object].slice(0, 20).map((v) => walk(v, depth + 1)),
236
+ };
237
+ if (Array.isArray(object)) {
238
+ const items = object.slice(0, 20).map((v) => walk(v, depth + 1));
239
+ if (object.length > 20)
240
+ items.push(`[${object.length - 20} more]`);
241
+ return items;
242
+ }
243
+ const prototype = Object.getPrototypeOf(object);
244
+ if (prototype !== Object.prototype && prototype !== null)
245
+ return `[${prototype.constructor?.name || 'Object'}]`;
246
+ const out = {};
247
+ const keys = Object.keys(object);
248
+ for (const key of keys.slice(0, 20))
249
+ out[key] = walk(object[key], depth + 1);
250
+ if (keys.length > 20)
251
+ out['[more]'] = keys.length - 20;
252
+ return out;
253
+ }
254
+ finally {
255
+ seen.delete(object);
256
+ }
257
+ };
258
+ const summary = walk(value, 0);
259
+ const text = JSON.stringify(summary);
260
+ return text.length > DETAIL_LIMIT ? `[Truncated: ${text.slice(0, DETAIL_LIMIT)}…]` : summary;
261
+ }
262
+ function listenToElement(runtime, scope) {
263
+ const element = runtime.element;
264
+ if (!element)
265
+ return;
266
+ const tag = runtime.mount?.tag ?? element.localName;
267
+ for (const name of runtime.mount?.events ?? [])
268
+ scope.listen(runtime.wrapper, name, (event) => {
269
+ const payload = {
270
+ id: `event:${tag}#${name}`,
271
+ name,
272
+ time: runtime.window.performance.now(),
273
+ bubbles: event.bubbles,
274
+ composed: event.composed,
275
+ cancelable: event.cancelable,
276
+ target: event.target?.localName ?? element.localName,
277
+ };
278
+ const detail = event.detail;
279
+ if (detail !== undefined && detail !== null)
280
+ payload['detail'] = summarizeDetail(detail);
281
+ post(runtime, 'event', payload);
282
+ }, true);
283
+ // On the element itself, after the component's own handlers have updated the property.
284
+ for (const pair of runtime.mount?.sync ?? [])
285
+ scope.listen(element, pair.event, () => {
286
+ const value = Reflect.get(element, pair.property);
287
+ post(runtime, 'state', {
288
+ property: pair.property,
289
+ value: isJsonValue(value) ? value : summarizeDetail(value),
290
+ });
291
+ });
292
+ }
293
+ async function handle(runtime, scope, request) {
294
+ try {
295
+ switch (request.kind) {
296
+ case 'mount':
297
+ if (!isFrameMountPayload(request.payload))
298
+ throw new TypeError('mount requires a valid example payload.');
299
+ await mount(runtime, request.payload);
300
+ if (runtime.mountScope)
301
+ listenToElement(runtime, runtime.mountScope);
302
+ post(runtime, 'state', { scopeStats: scopeStats() });
303
+ return { mounted: true };
304
+ case 'specimen':
305
+ if (!isFrameSpecimenPayload(request.payload))
306
+ throw new TypeError('specimen requires valid role items.');
307
+ await specimen(runtime, request.payload);
308
+ return { mounted: request.payload.items.length };
309
+ case 'set': {
310
+ if (!runtime.element)
311
+ throw new Error('There is no mounted component to update.');
312
+ if (request.payload.property !== undefined) {
313
+ if (request.payload.unset === true)
314
+ Reflect.deleteProperty(runtime.element, request.payload.property);
315
+ else if (Object.hasOwn(request.payload, 'value'))
316
+ Reflect.set(runtime.element, request.payload.property, request.payload.value);
317
+ else
318
+ throw new TypeError('A property update needs a value or unset: true.');
319
+ }
320
+ else {
321
+ const value = request.payload.attributeValue;
322
+ if (request.payload.attribute === undefined)
323
+ throw new TypeError('A set request needs a property or attribute name.');
324
+ if (value === null)
325
+ runtime.element.removeAttribute(request.payload.attribute);
326
+ else if (typeof value === 'string')
327
+ runtime.element.setAttribute(request.payload.attribute, value);
328
+ else
329
+ throw new TypeError('An attribute update needs a string or null value.');
330
+ }
331
+ return { updated: true };
332
+ }
333
+ case 'slot': {
334
+ if (!runtime.element)
335
+ throw new Error('There is no mounted component to update.');
336
+ for (const child of [...runtime.element.children])
337
+ if ((child.getAttribute('slot') ?? '') === request.payload.name)
338
+ child.remove();
339
+ const slot = runtime.document.createElement('span');
340
+ if (request.payload.name)
341
+ slot.slot = request.payload.name;
342
+ slot.textContent = request.payload.text;
343
+ runtime.element.append(slot);
344
+ return { updated: true };
345
+ }
346
+ case 'reset':
347
+ if (!runtime.mount)
348
+ throw new Error('There is no mounted example to reset.');
349
+ await mount(runtime, runtime.mount);
350
+ if (runtime.mountScope)
351
+ listenToElement(runtime, runtime.mountScope);
352
+ post(runtime, 'state', { scopeStats: scopeStats() });
353
+ return { reset: true };
354
+ case 'theme': {
355
+ replaceTheme(runtime, request.payload.cssText);
356
+ return { updated: true };
357
+ }
358
+ case 'settings': {
359
+ applySettings(runtime, request.payload);
360
+ return { updated: true };
361
+ }
362
+ case 'inspect':
363
+ throw new Error('inspectPreview types are available; frame inspection is not implemented yet.');
364
+ case 'dispose':
365
+ return { disposed: true };
366
+ }
367
+ }
368
+ catch (error) {
369
+ fail(runtime, request.kind, error);
370
+ throw error;
371
+ }
372
+ }
373
+ /** Install the runtime on a frame's own Window. Exported for controlled browser tests. */
374
+ export function installFrameRuntime(win = window) {
375
+ const doc = win.document;
376
+ const identity = readIdentity(win);
377
+ const wrapper = doc.querySelector('[data-oddkin-preview]');
378
+ if (!wrapper)
379
+ throw new Error('Preview frame document is missing its preview container.');
380
+ const runtime = {
381
+ identity,
382
+ window: win,
383
+ document: doc,
384
+ scope: undefined,
385
+ mountScope: undefined,
386
+ port: undefined,
387
+ lastRequest: 0,
388
+ mount: undefined,
389
+ element: undefined,
390
+ theme: undefined,
391
+ wrapper,
392
+ registrations: new Map(),
393
+ rejectedRequests: 0,
394
+ staleRequests: 0,
395
+ };
396
+ const hello = frameEnvelope(identity, 'hello');
397
+ win.parent.postMessage(hello, win.location.origin);
398
+ win.addEventListener('message', (event) => {
399
+ if (event.source !== win.parent ||
400
+ event.origin !== win.location.origin ||
401
+ event.ports.length !== 1)
402
+ return;
403
+ const message = event.data;
404
+ if (!isCompatibleFrameMessage(message) ||
405
+ message.kind !== 'connect' ||
406
+ message.frame !== identity.frame ||
407
+ message.generation !== identity.generation ||
408
+ runtime.scope)
409
+ return;
410
+ const port = event.ports[0];
411
+ if (!port)
412
+ return;
413
+ runtime.port = port;
414
+ const scope = createScope({ name: `preview-frame:${identity.frame}:${identity.generation}` });
415
+ runtime.scope = scope;
416
+ scope.add(() => port.close(), 'message port');
417
+ scope.listen(port, 'message', (portEvent) => {
418
+ const request = portEvent.data;
419
+ if (!isFrameRequest(request)) {
420
+ runtime.rejectedRequests++;
421
+ post(runtime, 'state', { rejectedRequests: runtime.rejectedRequests });
422
+ return;
423
+ }
424
+ if (request.frame !== identity.frame ||
425
+ request.generation !== identity.generation ||
426
+ request.id <= runtime.lastRequest) {
427
+ runtime.staleRequests++;
428
+ post(runtime, 'state', { staleRequests: runtime.staleRequests });
429
+ return;
430
+ }
431
+ runtime.lastRequest = request.id;
432
+ void handle(runtime, scope, request).then((payload) => {
433
+ if (scope.disposed)
434
+ return;
435
+ const reply = {
436
+ ...frameEnvelope(identity, 'reply'),
437
+ replyTo: request.id,
438
+ ...(payload && isJsonValue(payload) ? { payload } : {}),
439
+ };
440
+ port.postMessage(reply);
441
+ if (request.kind === 'dispose')
442
+ scope.dispose();
443
+ }, (error) => {
444
+ if (scope.disposed)
445
+ return;
446
+ port.postMessage({
447
+ ...frameEnvelope(identity, 'reply'),
448
+ replyTo: request.id,
449
+ error: { code: errorCode(error, request.kind), message: errorMessage(error) },
450
+ });
451
+ });
452
+ });
453
+ port.start();
454
+ scope.listen(win, 'error', (event) => fail(runtime, 'runtime', event.error ?? event.message));
455
+ scope.listen(win, 'unhandledrejection', (event) => fail(runtime, 'runtime', event.reason));
456
+ const observer = new win.ResizeObserver((entries) => {
457
+ const size = entries[0]?.contentRect;
458
+ if (size)
459
+ post(runtime, 'size', { width: size.width, height: size.height });
460
+ });
461
+ observer.observe(wrapper);
462
+ scope.add(() => observer.disconnect(), 'resize observer');
463
+ post(runtime, 'state', { connected: true, scopeStats: scopeStats() });
464
+ });
465
+ }
466
+ if (typeof window !== 'undefined' && window.parent !== window)
467
+ installFrameRuntime(window);
468
+ //# 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"}