@widgentic/designer 0.1.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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/action-designer.d.ts +35 -0
  4. package/dist/action-designer.d.ts.map +1 -0
  5. package/dist/action-designer.js +294 -0
  6. package/dist/action-designer.js.map +1 -0
  7. package/dist/action-editor.d.ts +49 -0
  8. package/dist/action-editor.d.ts.map +1 -0
  9. package/dist/action-editor.js +515 -0
  10. package/dist/action-editor.js.map +1 -0
  11. package/dist/browser/widgentic-designer.js +433 -0
  12. package/dist/browser/widgentic-designer.js.map +7 -0
  13. package/dist/browser.d.ts +2 -0
  14. package/dist/browser.d.ts.map +1 -0
  15. package/dist/browser.js +12 -0
  16. package/dist/browser.js.map +1 -0
  17. package/dist/dom.d.ts +37 -0
  18. package/dist/dom.d.ts.map +1 -0
  19. package/dist/dom.js +387 -0
  20. package/dist/dom.js.map +1 -0
  21. package/dist/element.d.ts +12 -0
  22. package/dist/element.d.ts.map +1 -0
  23. package/dist/element.js +131 -0
  24. package/dist/element.js.map +1 -0
  25. package/dist/highlight.d.ts +30 -0
  26. package/dist/highlight.d.ts.map +1 -0
  27. package/dist/highlight.js +123 -0
  28. package/dist/highlight.js.map +1 -0
  29. package/dist/index.d.ts +30 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +21 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/internal.d.ts +6 -0
  34. package/dist/internal.d.ts.map +1 -0
  35. package/dist/internal.js +10 -0
  36. package/dist/internal.js.map +1 -0
  37. package/dist/io.d.ts +32 -0
  38. package/dist/io.d.ts.map +1 -0
  39. package/dist/io.js +155 -0
  40. package/dist/io.js.map +1 -0
  41. package/dist/json-tree-editor.d.ts +8 -0
  42. package/dist/json-tree-editor.d.ts.map +1 -0
  43. package/dist/json-tree-editor.js +186 -0
  44. package/dist/json-tree-editor.js.map +1 -0
  45. package/dist/panels.d.ts +13 -0
  46. package/dist/panels.d.ts.map +1 -0
  47. package/dist/panels.js +414 -0
  48. package/dist/panels.js.map +1 -0
  49. package/dist/preview.d.ts +40 -0
  50. package/dist/preview.d.ts.map +1 -0
  51. package/dist/preview.js +138 -0
  52. package/dist/preview.js.map +1 -0
  53. package/dist/record-editor.d.ts +11 -0
  54. package/dist/record-editor.d.ts.map +1 -0
  55. package/dist/record-editor.js +70 -0
  56. package/dist/record-editor.js.map +1 -0
  57. package/dist/schema-builder.d.ts +8 -0
  58. package/dist/schema-builder.d.ts.map +1 -0
  59. package/dist/schema-builder.js +235 -0
  60. package/dist/schema-builder.js.map +1 -0
  61. package/dist/schema-designer.d.ts +33 -0
  62. package/dist/schema-designer.d.ts.map +1 -0
  63. package/dist/schema-designer.js +251 -0
  64. package/dist/schema-designer.js.map +1 -0
  65. package/dist/schema-form.d.ts +8 -0
  66. package/dist/schema-form.d.ts.map +1 -0
  67. package/dist/schema-form.js +181 -0
  68. package/dist/schema-form.js.map +1 -0
  69. package/dist/schema-paths.d.ts +18 -0
  70. package/dist/schema-paths.d.ts.map +1 -0
  71. package/dist/schema-paths.js +75 -0
  72. package/dist/schema-paths.js.map +1 -0
  73. package/dist/seed.d.ts +18 -0
  74. package/dist/seed.d.ts.map +1 -0
  75. package/dist/seed.js +299 -0
  76. package/dist/seed.js.map +1 -0
  77. package/dist/shell.d.ts +59 -0
  78. package/dist/shell.d.ts.map +1 -0
  79. package/dist/shell.js +102 -0
  80. package/dist/shell.js.map +1 -0
  81. package/dist/store.d.ts +44 -0
  82. package/dist/store.d.ts.map +1 -0
  83. package/dist/store.js +71 -0
  84. package/dist/store.js.map +1 -0
  85. package/dist/styles-editor.d.ts +8 -0
  86. package/dist/styles-editor.d.ts.map +1 -0
  87. package/dist/styles-editor.js +100 -0
  88. package/dist/styles-editor.js.map +1 -0
  89. package/dist/template-panel.d.ts +19 -0
  90. package/dist/template-panel.d.ts.map +1 -0
  91. package/dist/template-panel.js +585 -0
  92. package/dist/template-panel.js.map +1 -0
  93. package/dist/theme-designer.d.ts +35 -0
  94. package/dist/theme-designer.d.ts.map +1 -0
  95. package/dist/theme-designer.js +336 -0
  96. package/dist/theme-designer.js.map +1 -0
  97. package/dist/theme-panel.d.ts +20 -0
  98. package/dist/theme-panel.d.ts.map +1 -0
  99. package/dist/theme-panel.js +96 -0
  100. package/dist/theme-panel.js.map +1 -0
  101. package/dist/validate.d.ts +57 -0
  102. package/dist/validate.d.ts.map +1 -0
  103. package/dist/validate.js +131 -0
  104. package/dist/validate.js.map +1 -0
  105. package/package.json +49 -0
@@ -0,0 +1,585 @@
1
+ /**
2
+ * Template editing: a structured node tree and a JSON source pane — two
3
+ * projections of one canonical model (the draft's template). The JSON
4
+ * pane is parse-gated (invalid JSON never reaches the store; last valid
5
+ * wins); structural edits from either side may still fail
6
+ * `validateTemplate`, which surfaces as diagnostics pinned to the node
7
+ * path without ever losing the draft.
8
+ */
9
+ import { errorMessage } from "./internal.js";
10
+ import { collectActionRefs } from "@widgentic/core";
11
+ import { isPlainObject } from "@widgentic/core";
12
+ import { createBindingEditor } from "./action-editor.js";
13
+ import { collectPaths, schemaType } from "./schema-paths.js";
14
+ import { effectiveDataSchema } from "./validate.js";
15
+ import { diagnosticLine, fitSelect, h, menuButton } from "./dom.js";
16
+ import { createRecordEditor } from "./record-editor.js";
17
+ import { attachJsonHighlight, repaintHighlight } from "./highlight.js";
18
+ /** Paths worth offering for a given use. */
19
+ function pathOptions(scope, use) {
20
+ const entries = [];
21
+ collectPaths(scope, "", entries);
22
+ const scalars = new Set([
23
+ "string",
24
+ "number",
25
+ "integer",
26
+ "boolean",
27
+ "null",
28
+ undefined
29
+ ]);
30
+ const filtered = entries.filter(({ schema }) => {
31
+ const type = schemaType(schema);
32
+ if (use === "each")
33
+ return type === "array";
34
+ if (use === "bind")
35
+ return scalars.has(type);
36
+ return true; // `when` tests truthiness of anything
37
+ });
38
+ const paths = filtered.map((entry) => entry.path);
39
+ // "." is the scope itself — the item inside an each over scalars.
40
+ if (use !== "each" && scalars.has(schemaType(scope)))
41
+ paths.unshift(".");
42
+ return paths;
43
+ }
44
+ /** Schema in effect inside `each: <path>` — the array's item schema. */
45
+ function itemScope(scope, eachPath) {
46
+ if (!isPlainObject(scope) || eachPath === ".")
47
+ return undefined;
48
+ let current = scope;
49
+ for (const segment of eachPath.split(".")) {
50
+ if (!isPlainObject(current) || !isPlainObject(current.properties))
51
+ return undefined;
52
+ current = current.properties[segment];
53
+ }
54
+ return isPlainObject(current) && schemaType(current) === "array"
55
+ ? current.items
56
+ : undefined;
57
+ }
58
+ const REMOVE = Symbol("remove");
59
+ function pathString(path) {
60
+ let out = "";
61
+ for (const step of path) {
62
+ const segment = typeof step === "number" ? `children.${step}` : step;
63
+ out = out === "" ? segment : `${out}.${segment}`;
64
+ }
65
+ return out;
66
+ }
67
+ /** Immutable set/remove at a node path (numbers index `children`). */
68
+ function setNode(node, path, next) {
69
+ if (path.length === 0)
70
+ return next === REMOVE ? undefined : next;
71
+ const [step, ...rest] = path;
72
+ if (typeof step === "number") {
73
+ if (!isPlainObject(node) || !Array.isArray(node.children))
74
+ return node;
75
+ const children = [...node.children];
76
+ if (rest.length === 0 && next === REMOVE) {
77
+ children.splice(step, 1);
78
+ }
79
+ else {
80
+ children[step] = setNode(children[step], rest, next);
81
+ }
82
+ return { ...node, children };
83
+ }
84
+ if (!isPlainObject(node))
85
+ return node;
86
+ if (rest.length === 0 && next === REMOVE) {
87
+ const { [step]: _removed, ...remaining } = node;
88
+ return remaining;
89
+ }
90
+ return { ...node, [step]: setNode(node[step], rest, next) };
91
+ }
92
+ function swapChildren(root, parent, a, b) {
93
+ const holder = parent.length === 0 ? root : getNode(root, parent);
94
+ if (!isPlainObject(holder) || !Array.isArray(holder.children))
95
+ return root;
96
+ const children = [...holder.children];
97
+ if (a < 0 || b < 0 || a >= children.length || b >= children.length)
98
+ return root;
99
+ const [x, y] = [children[a], children[b]];
100
+ children[a] = y;
101
+ children[b] = x;
102
+ const swapped = { ...holder, children };
103
+ return parent.length === 0 ? swapped : setNode(root, parent, swapped);
104
+ }
105
+ function getNode(node, path) {
106
+ let current = node;
107
+ for (const step of path) {
108
+ if (!isPlainObject(current))
109
+ return undefined;
110
+ current =
111
+ typeof step === "number"
112
+ ? Array.isArray(current.children)
113
+ ? current.children[step]
114
+ : undefined
115
+ : current[step];
116
+ }
117
+ return current;
118
+ }
119
+ const NODE_PRESETS = {
120
+ text: () => "text",
121
+ bind: () => ({ bind: "." }),
122
+ element: () => ({ tag: "div", children: [] }),
123
+ each: () => ({ each: ".", template: "item" }),
124
+ when: () => ({ when: ".", template: "shown" })
125
+ };
126
+ export function mountTemplatePanel(store, refreshers, options = {}) {
127
+ const actionContext = options.actionContext ?? { actions: [], secretNames: [], schemas: [] };
128
+ // Shared refs the draft binds that no supplied action answers to.
129
+ let unknownRefs = new Set();
130
+ const treeHost = h("div", { class: "wgd-tree" });
131
+ const jsonError = diagnosticLine(undefined);
132
+ const jsonArea = h("textarea", {
133
+ class: "wgd-textarea wgd-template-json",
134
+ rows: "14",
135
+ spellcheck: "false"
136
+ });
137
+ const jsonWrap = h("div", undefined, [jsonArea, jsonError]);
138
+ attachJsonHighlight(jsonArea);
139
+ jsonWrap.hidden = true;
140
+ const treeTab = h("button", { class: "wgd-button", type: "button" }, ["Tree"]);
141
+ const jsonTab = h("button", { class: "wgd-button", type: "button" }, ["JSON"]);
142
+ treeTab.addEventListener("click", () => {
143
+ treeHost.hidden = false;
144
+ jsonWrap.hidden = true;
145
+ });
146
+ jsonTab.addEventListener("click", () => {
147
+ treeHost.hidden = true;
148
+ jsonWrap.hidden = false;
149
+ });
150
+ const templateDiag = diagnosticLine(undefined);
151
+ const element = h("details", { class: "wgd-section", open: "" }, [
152
+ h("summary", { class: "wgd-section-title" }, ["Template"]),
153
+ h("div", { class: "wgd-section-body" }, [
154
+ h("div", { class: "wgd-row" }, [treeTab, jsonTab]),
155
+ templateDiag,
156
+ treeHost,
157
+ jsonWrap
158
+ ])
159
+ ]);
160
+ function commit(next) {
161
+ store.update((draft) => ({ ...draft, template: next }));
162
+ }
163
+ function commitAt(path, next) {
164
+ commit(setNode(store.get().template, path, next));
165
+ }
166
+ // --- JSON pane: parse-gated projection --------------------------------
167
+ jsonArea.addEventListener("input", () => {
168
+ try {
169
+ const parsed = JSON.parse(jsonArea.value);
170
+ jsonError.hidden = true;
171
+ jsonError.textContent = "";
172
+ commit(parsed);
173
+ }
174
+ catch (error) {
175
+ jsonError.hidden = false;
176
+ jsonError.textContent = `Invalid JSON (template keeps the last valid value): ${String(errorMessage(error))}`;
177
+ }
178
+ });
179
+ // --- Tree editor -------------------------------------------------------
180
+ function changeInput(value, onCommit, className = "wgd-input wgd-node-value") {
181
+ const input = h("input", { type: "text", class: className });
182
+ input.value = value;
183
+ input.addEventListener("change", () => onCommit(input.value));
184
+ return input;
185
+ }
186
+ /**
187
+ * Collapse state, keyed by node path so it survives the full re-render
188
+ * every draft edit triggers. Paths shift when siblings move or vanish —
189
+ * an accepted approximation, exactly like text-editor fold markers.
190
+ */
191
+ const collapsedPaths = new Set();
192
+ /**
193
+ * One node = one header row: chevron, badge, the node's own value
194
+ * control(s), then add/move/remove icons (revealed on hover). Sub-
195
+ * structure (attrs, children, slots) nests below and folds away when
196
+ * the node is collapsed; a muted summary keeps the hidden shape legible.
197
+ */
198
+ function nodeShell(
199
+ /** Omitted for elements — their tag select already names the node. */
200
+ badge, path, inline, body, errorText, removable, moves, extras) {
201
+ const key = pathString(path);
202
+ const collapsible = body.length > 0;
203
+ const isCollapsed = collapsible && collapsedPaths.has(key);
204
+ let chevron;
205
+ if (collapsible) {
206
+ chevron = h("button", {
207
+ class: "wgd-chevron",
208
+ type: "button",
209
+ title: isCollapsed ? "Expand" : "Collapse"
210
+ }, [isCollapsed ? "▸" : "▾"]);
211
+ chevron.addEventListener("click", () => {
212
+ if (isCollapsed)
213
+ collapsedPaths.delete(key);
214
+ else
215
+ collapsedPaths.add(key);
216
+ renderTree();
217
+ });
218
+ }
219
+ else {
220
+ // Every row reserves the chevron column so values align.
221
+ chevron = h("span", { class: "wgd-chevron wgd-chevron-none" });
222
+ }
223
+ const header = badge === undefined
224
+ ? [chevron, ...inline]
225
+ : [chevron, h("span", { class: "wgd-node-badge" }, [badge]), ...inline];
226
+ if (isCollapsed && extras?.summary !== undefined) {
227
+ header.push(h("span", { class: "wgd-node-summary" }, [extras.summary]));
228
+ }
229
+ const icons = [...(extras?.icons ?? [])];
230
+ if (moves && moves.count > 1) {
231
+ if (moves.index > 0) {
232
+ const up = h("button", { class: "wgd-icon", type: "button", title: "Move up" }, ["↑"]);
233
+ up.addEventListener("click", () => commit(swapChildren(store.get().template, moves.parent, moves.index, moves.index - 1)));
234
+ icons.push(up);
235
+ }
236
+ if (moves.index < moves.count - 1) {
237
+ const down = h("button", { class: "wgd-icon", type: "button", title: "Move down" }, ["↓"]);
238
+ down.addEventListener("click", () => commit(swapChildren(store.get().template, moves.parent, moves.index, moves.index + 1)));
239
+ icons.push(down);
240
+ }
241
+ }
242
+ if (removable) {
243
+ const remove = h("button", { class: "wgd-icon", type: "button", title: "Remove" }, ["✕"]);
244
+ remove.addEventListener("click", () => path.length === 0 ? commit("") : commitAt(path, REMOVE));
245
+ icons.push(remove);
246
+ }
247
+ if (icons.length > 0) {
248
+ header.push(h("span", { class: "wgd-node-icons" }, icons));
249
+ }
250
+ const children = [h("div", { class: "wgd-node-row" }, header)];
251
+ // Diagnostics stay visible even on a collapsed node — folding must
252
+ // never hide an error.
253
+ if (errorText !== undefined)
254
+ children.push(diagnosticLine(errorText));
255
+ if (!isCollapsed)
256
+ children.push(...body);
257
+ return h("div", { class: "wgd-node", "data-path": key }, children);
258
+ }
259
+ /** Tags the built-in styles and typical widget markup actually use. */
260
+ const TAG_OPTIONS = [
261
+ "div", "span", "p", "section", "article", "header", "footer",
262
+ "h1", "h2", "h3", "h4", "strong", "em", "small", "code", "pre",
263
+ "ul", "ol", "li", "dl", "dt", "dd",
264
+ "table", "thead", "tbody", "tr", "th", "td",
265
+ "img", "a", "figure", "figcaption", "hr", "br", "label"
266
+ ];
267
+ /**
268
+ * Data-path control. With a schema in scope it is a select of the paths
269
+ * that scope actually offers (plus the current value if it is off-schema,
270
+ * and a custom escape); without one it stays a free-text input.
271
+ */
272
+ function pathControl(value, scope, use, onCommit, className = "wgd-input wgd-node-value") {
273
+ const options = isPlainObject(scope) ? pathOptions(scope, use) : [];
274
+ if (options.length === 0) {
275
+ return changeInput(value, onCommit, className);
276
+ }
277
+ const select = h("select", { class: "wgd-select wgd-path" });
278
+ const known = options.includes(value);
279
+ for (const option of known ? options : [value, ...options]) {
280
+ select.append(h("option", { value: option }, [
281
+ option === value && !known ? `${option} (off-schema)` : option
282
+ ]));
283
+ }
284
+ select.append(h("option", { value: "__custom__" }, ["custom…"]));
285
+ select.value = value;
286
+ fitSelect(select);
287
+ const custom = changeInput(value, onCommit, className);
288
+ custom.hidden = true;
289
+ select.addEventListener("change", () => {
290
+ if (select.value === "__custom__") {
291
+ custom.hidden = false;
292
+ custom.focus();
293
+ return;
294
+ }
295
+ custom.hidden = true;
296
+ onCommit(select.value);
297
+ });
298
+ // The wrap carries the row-shape marker (e.g. wgd-attr-value) so rows
299
+ // read the same whether the value is a select or free text.
300
+ const marker = className.includes("wgd-attr-value") ? " wgd-attr-value" : "";
301
+ return h("span", { class: `wgd-pathwrap${marker}` }, [select, custom]);
302
+ }
303
+ function tagControl(tag, onCommit) {
304
+ const select = h("select", { class: "wgd-select wgd-tag" });
305
+ const options = TAG_OPTIONS.includes(tag) ? TAG_OPTIONS : [tag, ...TAG_OPTIONS];
306
+ for (const option of options) {
307
+ select.append(h("option", { value: option }, [option]));
308
+ }
309
+ select.append(h("option", { value: "__custom__" }, ["custom…"]));
310
+ select.value = tag;
311
+ fitSelect(select);
312
+ const custom = changeInput(tag, onCommit, "wgd-input wgd-tag-custom");
313
+ custom.hidden = true;
314
+ select.addEventListener("change", () => {
315
+ if (select.value === "__custom__") {
316
+ custom.hidden = false;
317
+ custom.focus();
318
+ return;
319
+ }
320
+ custom.hidden = true;
321
+ onCommit(select.value);
322
+ });
323
+ return h("span", { class: "wgd-tagwrap" }, [select, custom]);
324
+ }
325
+ function slotEditor(label, parentPath, slot, node, required, errorPath, scope) {
326
+ const slotPath = [...parentPath, slot];
327
+ if (node === undefined) {
328
+ const menu = menuButton(`+ ${label}`, `Set '${label}' to a node`, Object.keys(NODE_PRESETS), (name) => {
329
+ const preset = NODE_PRESETS[name];
330
+ if (preset)
331
+ commitAt(slotPath, preset());
332
+ });
333
+ return required
334
+ ? h("div", { class: "wgd-slot" }, [
335
+ diagnosticLine(`Missing required '${label}'.`),
336
+ menu
337
+ ])
338
+ : h("div", { class: "wgd-slot wgd-slot-unset" }, [menu]);
339
+ }
340
+ return h("div", { class: "wgd-slot" }, [
341
+ h("span", { class: "wgd-slot-label" }, [label]),
342
+ renderNode(node, slotPath, errorPath, !required, undefined, scope)
343
+ ]);
344
+ }
345
+ function renderNode(node, path, errorPath, removable = true, moves, scope) {
346
+ const here = pathString(path);
347
+ const errorHere = errorPath !== undefined &&
348
+ (errorPath === here ||
349
+ ((errorPath.startsWith(here === "" ? "attrs." : `${here}.attrs.`) ||
350
+ errorPath.startsWith(here === "" ? "action" : `${here}.action`)) &&
351
+ isPlainObject(node) &&
352
+ typeof node.tag === "string"))
353
+ ? currentError
354
+ : undefined;
355
+ if (typeof node === "string") {
356
+ return nodeShell("text", path, [changeInput(node, (value) => commitAt(path, value))], [], errorHere, removable, moves);
357
+ }
358
+ if (!isPlainObject(node)) {
359
+ return nodeShell("invalid", path, [h("code", undefined, [JSON.stringify(node)])], [], errorHere ?? "Not a template node.", removable, moves);
360
+ }
361
+ if (typeof node.bind === "string") {
362
+ return nodeShell("bind", path, [
363
+ pathControl(node.bind, scope, "bind", (value) => commitAt(path, { bind: value }))
364
+ ], [], errorHere, removable, moves);
365
+ }
366
+ if (typeof node.each === "string") {
367
+ return nodeShell("each", path, [
368
+ pathControl(node.each, scope, "each", (value) => commitAt(path, { ...node, each: value }))
369
+ ], [
370
+ // Inside an each, the scope becomes the array's item schema.
371
+ slotEditor("template", path, "template", node.template, true, errorPath, itemScope(scope, node.each)),
372
+ slotEditor("empty", path, "empty", node.empty, false, errorPath, scope)
373
+ ], errorHere, removable, moves, { summary: node.empty !== undefined ? "template · empty" : "template" });
374
+ }
375
+ if (typeof node.when === "string") {
376
+ return nodeShell("when", path, [
377
+ pathControl(node.when, scope, "when", (value) => commitAt(path, { ...node, when: value }))
378
+ ], [
379
+ slotEditor("template", path, "template", node.template, true, errorPath, scope),
380
+ slotEditor("else", path, "else", node.else, false, errorPath, scope)
381
+ ], errorHere, removable, moves, { summary: node.else !== undefined ? "template · else" : "template" });
382
+ }
383
+ if (typeof node.tag === "string") {
384
+ const attrs = isPlainObject(node.attrs) ? node.attrs : {};
385
+ const binding = isPlainObject(node.action) ? node.action : undefined;
386
+ const attrRows = Object.entries(attrs).map(([name, value]) => {
387
+ // The bind's transform fields, when present. Every write goes
388
+ // through rebuild() so editing one field never drops the others.
389
+ // `bound` is meaningful only while `isBind`; narrowed once here.
390
+ const bound = isPlainObject(value) && typeof value.bind === "string" ? value : { bind: "" };
391
+ const isBind = isPlainObject(value) && typeof value.bind === "string";
392
+ const bindValue = isBind ? bound : undefined;
393
+ const rebuild = (fields) => {
394
+ const out = { bind: fields.bind };
395
+ if (fields.map !== undefined) {
396
+ out.map = fields.map;
397
+ if (fields.default !== undefined && fields.default !== "") {
398
+ out.default = fields.default;
399
+ }
400
+ }
401
+ else if (fields.prefix !== undefined && fields.prefix !== "") {
402
+ out.prefix = fields.prefix;
403
+ }
404
+ return out;
405
+ };
406
+ const setAttr = (nextValue) => {
407
+ commitAt(path, { ...node, attrs: { ...attrs, [name]: nextValue } });
408
+ };
409
+ const nameInput = changeInput(name, (nextName) => {
410
+ const entries = Object.entries(attrs).map(([k, v]) => k === name ? [nextName, v] : [k, v]);
411
+ commitAt(path, { ...node, attrs: Object.fromEntries(entries) });
412
+ }, "wgd-input wgd-attr-name");
413
+ const mode = h("select", { class: "wgd-select wgd-attr-mode" });
414
+ mode.append(h("option", { value: "literal" }, ["literal"]));
415
+ mode.append(h("option", { value: "bind" }, ["bind"]));
416
+ mode.value = isBind ? "bind" : "literal";
417
+ fitSelect(mode);
418
+ // Literal: free text. Bind: the same path dropdown the bind/each/when nodes use.
419
+ const literalInput = changeInput(String(isBind ? "" : value), (next) => setAttr(next), "wgd-input wgd-attr-value");
420
+ const valueInput = isBind
421
+ ? pathControl(bound.bind, scope, "bind", (next) => setAttr(rebuild({ ...bound, bind: next })), "wgd-input wgd-attr-value")
422
+ : literalInput;
423
+ mode.addEventListener("change", () => {
424
+ // Switching modes carries the current text across as a starting point.
425
+ const current = isBind ? bound.bind : literalInput.value;
426
+ setAttr(mode.value === "bind" ? { bind: current || "." } : current);
427
+ });
428
+ const removeAttr = h("button", { class: "wgd-icon", type: "button", title: "Remove attribute" }, ["✕"]);
429
+ removeAttr.addEventListener("click", () => {
430
+ const { [name]: _gone, ...rest } = attrs;
431
+ commitAt(path, { ...node, attrs: rest });
432
+ });
433
+ const row = [nameInput, mode, valueInput];
434
+ const hasMap = bindValue?.map !== undefined;
435
+ const hasPrefix = bindValue?.prefix !== undefined && bindValue.prefix !== "";
436
+ if (isBind && !hasMap) {
437
+ // Literal prefix (mailto:/tel: links). Hidden while a map is
438
+ // active — one transform per value, mirroring the validator.
439
+ const prefixInput = changeInput(bindValue?.prefix ?? "", (next) => setAttr(rebuild({ ...bound, map: undefined, prefix: next })), "wgd-input wgd-attr-prefix");
440
+ prefixInput.placeholder = "prefix";
441
+ prefixInput.title = "Literal prefix, e.g. mailto: — emitted only when the bound value is non-empty";
442
+ row.push(prefixInput);
443
+ }
444
+ if (isBind && !hasMap && !hasPrefix) {
445
+ const addMap = h("button", { class: "wgd-icon", type: "button", title: "Map values to authored literals (e.g. status → class)" }, ["map"]);
446
+ addMap.addEventListener("click", () => setAttr(rebuild({ ...bound, prefix: undefined, map: {} })));
447
+ row.push(h("span", { class: "wgd-node-icons" }, [addMap, removeAttr]));
448
+ }
449
+ else {
450
+ row.push(removeAttr);
451
+ }
452
+ const attrRow = h("div", { class: "wgd-attr-row" }, row);
453
+ const parts = [attrRow];
454
+ if (isBind && hasMap) {
455
+ // The map block: data value → authored literal rows, plus the
456
+ // miss default. Emptying the record drops the transform.
457
+ const mapEditor = createRecordEditor(bound.map, { key: "data value", value: "authored literal", add: "+ mapping" }, (nextMap) => {
458
+ setAttr(nextMap === undefined
459
+ ? { bind: bound.bind }
460
+ : rebuild({ ...bound, map: nextMap }));
461
+ });
462
+ const defaultInput = changeInput(bound.default ?? "", (next) => setAttr(rebuild({ ...bound, default: next })), "wgd-input wgd-attr-map-default");
463
+ defaultInput.placeholder = "default (on miss)";
464
+ parts.push(h("div", { class: "wgd-attr-map" }, [
465
+ mapEditor.element,
466
+ h("div", { class: "wgd-rec-row" }, [
467
+ h("span", { class: "wgd-st-colon" }, ["↳"]),
468
+ defaultInput
469
+ ])
470
+ ]));
471
+ }
472
+ return parts.length === 1
473
+ ? attrRow
474
+ : h("div", { class: "wgd-attr" }, parts);
475
+ });
476
+ const childNodes = Array.isArray(node.children) ? node.children : [];
477
+ // One add menu per element covers attributes and every child form —
478
+ // the tree carries no persistent per-form button rows.
479
+ const addMenu = menuButton("+", "Add attribute or child node",
480
+ // Actions belong on activatable elements: buttons and links.
481
+ [
482
+ "attribute",
483
+ ...(binding === undefined && (node.tag === "button" || node.tag === "a") ? ["action"] : []),
484
+ ...Object.keys(NODE_PRESETS)
485
+ ], (choice) => {
486
+ collapsedPaths.delete(pathString(path)); // never add into a fold
487
+ const preset = NODE_PRESETS[choice];
488
+ if (choice === "attribute") {
489
+ commitAt(path, { ...node, attrs: { ...attrs, "": "" } });
490
+ }
491
+ else if (choice === "action") {
492
+ const first = actionContext.actions[0];
493
+ commitAt(path, {
494
+ ...node,
495
+ action: first !== undefined ? { ref: first.name } : { definition: { kind: "prompt", text: ["Tell me more"] } }
496
+ });
497
+ }
498
+ else if (preset) {
499
+ commitAt([...path, childNodes.length], preset());
500
+ }
501
+ });
502
+ const body = [];
503
+ if (attrRows.length > 0)
504
+ body.push(h("div", { class: "wgd-attrs" }, attrRows));
505
+ // Action binding: the element becomes activatable in Apps hosts. The
506
+ // editor commits the whole binding; `undefined` drops the key.
507
+ if (binding !== undefined) {
508
+ const scopePaths = isPlainObject(scope) ? pathOptions(scope, "when") : [];
509
+ const bindingEditor = createBindingEditor(binding, {
510
+ ...actionContext,
511
+ scopePaths,
512
+ // The widget's effective data schema drives output-map targets.
513
+ getDataSchema: () => effectiveDataSchema(store.get(), actionContext.schemas)
514
+ }, (next) => {
515
+ if (next === undefined) {
516
+ const { action: _gone, ...rest } = node;
517
+ commitAt(path, rest);
518
+ }
519
+ else {
520
+ commitAt(path, { ...node, action: next });
521
+ }
522
+ });
523
+ const actionParts = [h("span", { class: "wgd-slot-label" }, ["action"]), bindingEditor.element];
524
+ // An unknown shared ref is flagged at the element carrying it.
525
+ const ref = "ref" in binding && typeof binding.ref === "string" ? binding.ref : undefined;
526
+ if (ref !== undefined && unknownRefs.has(ref)) {
527
+ actionParts.push(diagnosticLine(`Unknown shared action '${ref}' — this element renders disabled.`));
528
+ }
529
+ body.push(h("div", { class: "wgd-attrs wgd-node-action" }, actionParts));
530
+ }
531
+ if (childNodes.length > 0) {
532
+ body.push(h("div", { class: "wgd-children" }, childNodes.map((child, index) => renderNode(child, [...path, index], errorPath, true, { parent: path, index, count: childNodes.length }, scope))));
533
+ }
534
+ const summaryParts = [];
535
+ if (attrRows.length > 0) {
536
+ summaryParts.push(`${attrRows.length} attr${attrRows.length === 1 ? "" : "s"}`);
537
+ }
538
+ if (binding !== undefined)
539
+ summaryParts.push("action");
540
+ if (childNodes.length > 0) {
541
+ summaryParts.push(`${childNodes.length} ${childNodes.length === 1 ? "child" : "children"}`);
542
+ }
543
+ return nodeShell(undefined, // the tag select is the node's label
544
+ path, [tagControl(node.tag, (value) => commitAt(path, { ...node, tag: value }))], body, errorHere, removable, moves, { icons: [addMenu], summary: summaryParts.join(" · ") });
545
+ }
546
+ return nodeShell("unknown", path, [h("code", undefined, [JSON.stringify(node)])], [], errorHere ?? "Unknown template node form.", removable, moves);
547
+ }
548
+ let currentError;
549
+ let lastDraft;
550
+ let lastErrorPath;
551
+ /** Rebuild the tree from the last refresh inputs (collapse toggles). */
552
+ function renderTree() {
553
+ if (lastDraft === undefined)
554
+ return;
555
+ // Shared refs resolve like inline schemas — a ref-based widget gets the same path completions.
556
+ treeHost.replaceChildren(renderNode(lastDraft.template, [], lastErrorPath, true, undefined, effectiveDataSchema(lastDraft, actionContext.schemas)));
557
+ }
558
+ function refresh(draft, diagnostics) {
559
+ currentError = diagnostics.template
560
+ ? `${diagnostics.template.code}: ${diagnostics.template.message}`
561
+ : undefined;
562
+ lastDraft = draft;
563
+ lastErrorPath = diagnostics.template?.path;
564
+ const known = new Set(actionContext.actions.map((action) => action.name));
565
+ unknownRefs = new Set(collectActionRefs(draft.template, draft.load).filter((ref) => !known.has(ref)));
566
+ const templateMessage = diagnostics.template
567
+ ? `${diagnostics.template.code}: ${diagnostics.template.message}` +
568
+ (diagnostics.template.path !== undefined && diagnostics.template.path !== ""
569
+ ? ` (at ${diagnostics.template.path})`
570
+ : "")
571
+ : diagnostics.actionRefs;
572
+ templateDiag.hidden = templateMessage === undefined;
573
+ templateDiag.textContent = templateMessage ?? "";
574
+ if (!treeHost.hidden || treeHost.childNodes.length === 0) {
575
+ renderTree();
576
+ }
577
+ if (document.activeElement !== jsonArea) {
578
+ jsonArea.value = JSON.stringify(draft.template, null, 2);
579
+ repaintHighlight(jsonArea);
580
+ }
581
+ }
582
+ refreshers.push(() => undefined); // template refresh runs via refresh() below
583
+ return { element, refresh, dispose: () => element.remove() };
584
+ }
585
+ //# sourceMappingURL=template-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-panel.js","sourceRoot":"","sources":["../src/template-panel.ts"],"names":[],"mappings":"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"}