@12ui/design 0.2.73 → 0.2.75

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 (142) hide show
  1. package/SKILL.md +1 -1
  2. package/dist/cli-codex-readiness.d.ts +19 -6
  3. package/dist/cli-codex-readiness.d.ts.map +1 -1
  4. package/dist/cli-codex-readiness.js +36 -16
  5. package/dist/cli-codex-readiness.js.map +1 -1
  6. package/dist/cli-help/design.d.ts +9 -2
  7. package/dist/cli-help/design.d.ts.map +1 -1
  8. package/dist/cli-help/design.js +17 -2
  9. package/dist/cli-help/design.js.map +1 -1
  10. package/dist/cli-help/index.d.ts +9 -2
  11. package/dist/cli-help/index.d.ts.map +1 -1
  12. package/dist/cli-run.d.ts.map +1 -1
  13. package/dist/cli-run.js +6 -0
  14. package/dist/cli-run.js.map +1 -1
  15. package/dist/cli-usage.d.ts.map +1 -1
  16. package/dist/cli-usage.js +1 -0
  17. package/dist/cli-usage.js.map +1 -1
  18. package/dist/cli-workspace-command.js +1 -1
  19. package/dist/cli-workspace-command.js.map +1 -1
  20. package/dist/cli-workspace-draw.d.ts +23 -0
  21. package/dist/cli-workspace-draw.d.ts.map +1 -0
  22. package/dist/cli-workspace-draw.js +97 -0
  23. package/dist/cli-workspace-draw.js.map +1 -0
  24. package/dist/codex-binary.d.ts +20 -0
  25. package/dist/codex-binary.d.ts.map +1 -0
  26. package/dist/codex-binary.js +46 -0
  27. package/dist/codex-binary.js.map +1 -0
  28. package/dist/mcp-slate-command.d.ts.map +1 -1
  29. package/dist/mcp-slate-command.js +6 -1
  30. package/dist/mcp-slate-command.js.map +1 -1
  31. package/dist/mcp-slate-tool-defs.js +3 -3
  32. package/dist/mcp-slate-tool-defs.js.map +1 -1
  33. package/dist/mcp-slate-ui-copy.d.ts +30 -19
  34. package/dist/mcp-slate-ui-copy.d.ts.map +1 -1
  35. package/dist/mcp-slate-ui-copy.js +51 -23
  36. package/dist/mcp-slate-ui-copy.js.map +1 -1
  37. package/dist/mcp-slate-ui-script-dialog.d.ts +15 -14
  38. package/dist/mcp-slate-ui-script-dialog.d.ts.map +1 -1
  39. package/dist/mcp-slate-ui-script-dialog.js +61 -72
  40. package/dist/mcp-slate-ui-script-dialog.js.map +1 -1
  41. package/dist/mcp-slate-ui-script-inline.d.ts.map +1 -1
  42. package/dist/mcp-slate-ui-script-inline.js +9 -6
  43. package/dist/mcp-slate-ui-script-inline.js.map +1 -1
  44. package/dist/mcp-slate-ui-script-inspiration.d.ts +3 -2
  45. package/dist/mcp-slate-ui-script-inspiration.d.ts.map +1 -1
  46. package/dist/mcp-slate-ui-script-inspiration.js +29 -9
  47. package/dist/mcp-slate-ui-script-inspiration.js.map +1 -1
  48. package/dist/mcp-slate-ui-script-more.d.ts +16 -14
  49. package/dist/mcp-slate-ui-script-more.d.ts.map +1 -1
  50. package/dist/mcp-slate-ui-script-more.js +120 -56
  51. package/dist/mcp-slate-ui-script-more.js.map +1 -1
  52. package/dist/mcp-slate-ui-script-remote.d.ts +2 -2
  53. package/dist/mcp-slate-ui-script-remote.js +2 -2
  54. package/dist/mcp-slate-ui-script-scribble.js +1 -1
  55. package/dist/mcp-slate-ui-script-stage.d.ts +3 -2
  56. package/dist/mcp-slate-ui-script-stage.d.ts.map +1 -1
  57. package/dist/mcp-slate-ui-script-stage.js +7 -8
  58. package/dist/mcp-slate-ui-script-stage.js.map +1 -1
  59. package/dist/mcp-slate-ui-script-state.js +3 -3
  60. package/dist/mcp-slate-ui-script.d.ts +1 -2
  61. package/dist/mcp-slate-ui-script.d.ts.map +1 -1
  62. package/dist/mcp-slate-ui-script.js +6 -4
  63. package/dist/mcp-slate-ui-script.js.map +1 -1
  64. package/dist/mcp-slate-ui-styles-dialog.d.ts +12 -9
  65. package/dist/mcp-slate-ui-styles-dialog.d.ts.map +1 -1
  66. package/dist/mcp-slate-ui-styles-dialog.js +48 -26
  67. package/dist/mcp-slate-ui-styles-dialog.js.map +1 -1
  68. package/dist/mcp-slate-ui-styles-stage.d.ts +15 -8
  69. package/dist/mcp-slate-ui-styles-stage.d.ts.map +1 -1
  70. package/dist/mcp-slate-ui-styles-stage.js +32 -18
  71. package/dist/mcp-slate-ui-styles-stage.js.map +1 -1
  72. package/dist/mcp-slate-ui-styles.d.ts +5 -0
  73. package/dist/mcp-slate-ui-styles.d.ts.map +1 -1
  74. package/dist/mcp-slate-ui-styles.js +21 -6
  75. package/dist/mcp-slate-ui-styles.js.map +1 -1
  76. package/dist/mcp-slate-ui.d.ts.map +1 -1
  77. package/dist/mcp-slate-ui.js +4 -3
  78. package/dist/mcp-slate-ui.js.map +1 -1
  79. package/dist/slate-actions.d.ts +7 -2
  80. package/dist/slate-actions.d.ts.map +1 -1
  81. package/dist/slate-actions.js +14 -8
  82. package/dist/slate-actions.js.map +1 -1
  83. package/dist/slate-handoff-options.d.ts +1 -1
  84. package/dist/slate-handoff-options.d.ts.map +1 -1
  85. package/dist/slate-handoff-options.js +8 -18
  86. package/dist/slate-handoff-options.js.map +1 -1
  87. package/dist/slate-image-executor.js +1 -1
  88. package/dist/slate-image-executor.js.map +1 -1
  89. package/dist/slate-inspiration.d.ts +1 -1
  90. package/dist/slate-inspiration.js +1 -1
  91. package/dist/slate-local-image.d.ts +3 -6
  92. package/dist/slate-local-image.d.ts.map +1 -1
  93. package/dist/slate-local-image.js +2 -18
  94. package/dist/slate-local-image.js.map +1 -1
  95. package/dist/slate-view-contract.d.ts +2 -3
  96. package/dist/slate-view-contract.d.ts.map +1 -1
  97. package/dist/slate-workspace-parse.d.ts.map +1 -1
  98. package/dist/slate-workspace-parse.js +6 -1
  99. package/dist/slate-workspace-parse.js.map +1 -1
  100. package/dist/workspace-draw-client.d.ts +69 -0
  101. package/dist/workspace-draw-client.d.ts.map +1 -0
  102. package/dist/workspace-draw-client.js +193 -0
  103. package/dist/workspace-draw-client.js.map +1 -0
  104. package/dist/workspace-draw-codex.d.ts +49 -0
  105. package/dist/workspace-draw-codex.d.ts.map +1 -0
  106. package/dist/workspace-draw-codex.js +89 -0
  107. package/dist/workspace-draw-codex.js.map +1 -0
  108. package/dist/workspace-draw-engine.d.ts +39 -0
  109. package/dist/workspace-draw-engine.d.ts.map +1 -0
  110. package/dist/workspace-draw-engine.js +72 -0
  111. package/dist/workspace-draw-engine.js.map +1 -0
  112. package/dist/workspace-draw-messages.d.ts +45 -0
  113. package/dist/workspace-draw-messages.d.ts.map +1 -0
  114. package/dist/workspace-draw-messages.js +48 -0
  115. package/dist/workspace-draw-messages.js.map +1 -0
  116. package/dist/workspace-draw-run.d.ts +43 -0
  117. package/dist/workspace-draw-run.d.ts.map +1 -0
  118. package/dist/workspace-draw-run.js +328 -0
  119. package/dist/workspace-draw-run.js.map +1 -0
  120. package/dist/workspace-draw-store.d.ts +23 -0
  121. package/dist/workspace-draw-store.d.ts.map +1 -0
  122. package/dist/workspace-draw-store.js +65 -0
  123. package/dist/workspace-draw-store.js.map +1 -0
  124. package/dist/workspace-draw-types.d.ts +121 -0
  125. package/dist/workspace-draw-types.d.ts.map +1 -0
  126. package/dist/workspace-draw-types.js +21 -0
  127. package/dist/workspace-draw-types.js.map +1 -0
  128. package/open-design.json +2 -2
  129. package/package.json +1 -1
  130. package/runtime/codex-conversion/src/codex/home.mjs +43 -14
  131. package/runtime/codex-conversion/src/images/native-files.mjs +20 -0
  132. package/runtime/codex-conversion/src/images/native-invoke.mjs +5 -2
  133. package/runtime/codex-conversion/src/images/native-records.mjs +75 -3
  134. package/runtime/codex-conversion/src/images/native.mjs +7 -4
  135. package/dist/mcp-slate-ui-script-thumbtools.d.ts +0 -23
  136. package/dist/mcp-slate-ui-script-thumbtools.d.ts.map +0 -1
  137. package/dist/mcp-slate-ui-script-thumbtools.js +0 -103
  138. package/dist/mcp-slate-ui-script-thumbtools.js.map +0 -1
  139. package/dist/mcp-slate-ui-styles-thumbtools.d.ts +0 -10
  140. package/dist/mcp-slate-ui-styles-thumbtools.d.ts.map +0 -1
  141. package/dist/mcp-slate-ui-styles-thumbtools.js +0 -25
  142. package/dist/mcp-slate-ui-styles-thumbtools.js.map +0 -1
@@ -1,22 +1,24 @@
1
1
  /**
2
2
  * Generate more: the last tile of the thumbnails (the card's strip, the
3
3
  * workspace's selection) and the panel it opens directly below them. The tile
4
- * is an empty, very light thumbnail-sized box with a plus and no words; the
5
- * panel is the heading, an optional note, how many (a segmented control) and
6
- * Generate or Cancel. Clicking the tile again, Cancel or Escape collapses it.
4
+ * is a dashed, thumbnail-sized box with a plus and the words Generate more, pinned outside any scroll so it is always in view; the
5
+ * panel is the only way to start a round, and it says what it will do:
7
6
  *
8
- * Generate starts a round through startRound, the very function the Design
9
- * dialog uses for New options, so the run tool, the mode, the note and the
10
- * selected inspiration are the same; the panel only adds the count.
7
+ * - a heading and one helper line that follows the state (fresh references,
8
+ * the selected inspiration, or close to the shown design);
9
+ * - a switch, with a picture of the design at its left, "Based on <code>", off by default: off draws new options, on
10
+ * draws options close to the design that is shown (mode "like" from the
11
+ * shown version at the moment of Generate);
12
+ * - the selected inspiration as small chips, each with a remove button that is
13
+ * the same selection write as the Inspiration tab's toggle (adding is done
14
+ * in that tab);
15
+ * - an optional note, how many (1, 2, 4, 8 or 12, default 4) and Cancel and
16
+ * Generate.
11
17
  *
12
- * The same panel serves a thumbnail's plus (mcp-slate-ui-script-thumbtools.ts):
13
- * "More like E2", with a tiny picture of that design, starts a round in mode
14
- * "like" from that design's latest version. The tile opens the plain panel
15
- * (mode "new"); opening either replaces the other, so neither carries the
16
- * other's reference. While a
17
- * round runs (or the request is in flight) the tile is off; the new round's
18
- * pending options are already in the thumbnails, because the returned view
19
- * carries them.
18
+ * Clicking the tile again, Cancel or Escape collapses it. While a round runs
19
+ * (or the request is in flight) the tile is off; the new round's pending
20
+ * options are already in the thumbnails, because the returned view carries
21
+ * them.
20
22
  *
21
23
  * In the card the panel takes its room from the large image rather than
22
24
  * growing the frame. The host grows the frame downward and does not scroll
@@ -42,31 +44,21 @@ export const SLATE_UI_MORE = String.raw `
42
44
  b.setAttribute("aria-expanded", "false");
43
45
  b.setAttribute("aria-controls", "morepanel");
44
46
  b.title = COPY.generateMore;
45
- b.innerHTML = '<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><path d="' + ICON_PLUS + '"/></svg>';
47
+ b.innerHTML = '<svg viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><path d="' + ICON_PLUS + '"/></svg>';
48
+ b.appendChild(el("span", "", COPY.generateMore));
46
49
  return b;
47
50
  }
48
51
  function moreTiles() { return Array.prototype.slice.call(document.querySelectorAll(".moretile")); }
49
52
  function moreHosts() { return [$("more"), stageEls && stageEls.more].filter(Boolean); }
50
53
 
51
- // The dashed tile opens the plain panel (new options). It closes that panel again; when a thumbnail's plus had the panel
52
- // open for one design, the tile replaces it with the plain one, so neither carries the other's reference.
53
54
  function toggleMore() {
54
- if (state.more && state.more.mode === "new") { closeMore(true); return; }
55
- openMore({ mode: "new" });
55
+ if (state.more) { closeMore(true); return; }
56
+ openMore();
56
57
  }
57
- // A thumbnail's plus: the same panel, for variations of that design's latest version.
58
- function openMoreLike(candidateId) {
59
- var c = cand(candidateId);
60
- var v = latestVersion(c);
61
- if (!c || !v || !pickable(v)) return;
62
- var m = state.more;
63
- if (m && m.mode === "like" && m.fromVersionId === v.versionId && !m.committing) { m.els.note.focus(); return; }
64
- openMore({ mode: "like", fromVersionId: v.versionId, fromCandidateId: c.candidateId, fromLabel: v.label });
65
- }
66
- function openMore(reference) {
58
+ function openMore() {
67
59
  if (!state.view || state.view.candidates.length === 0 || moreBusy()) return;
68
60
  if (state.more) resetMore();
69
- state.more = { id: uuid4(), mode: reference.mode, fromVersionId: reference.fromVersionId, fromCandidateId: reference.fromCandidateId, fromLabel: reference.fromLabel, note: "", count: MORE.initial, committing: false, error: "", els: {} };
61
+ state.more = { id: uuid4(), like: false, note: "", count: MORE.initial, committing: false, error: "", sig: "", els: {} };
70
62
  buildMore();
71
63
  syncMore();
72
64
  state.more.els.note.focus();
@@ -96,7 +88,7 @@ export const SLATE_UI_MORE = String.raw `
96
88
  syncMore();
97
89
  fitMore();
98
90
  if (refocus) {
99
- var back = (m.mode === "like" && thumbToolFor("more", m.fromCandidateId)) || moreTiles().filter(function (t) { return !t.disabled && !isHiddenNode(t); })[0];
91
+ var back = moreTiles().filter(function (t) { return !t.disabled && !isHiddenNode(t); })[0];
100
92
  if (back) back.focus();
101
93
  }
102
94
  reportSize();
@@ -112,28 +104,42 @@ export const SLATE_UI_MORE = String.raw `
112
104
  return false;
113
105
  }
114
106
 
107
+ // The design the switch is about: the one that is shown when Generate is clicked, so it follows the selection.
108
+ function moreBase() { var v = selectedVersion(); return pickable(v) ? v : null; }
109
+
115
110
  function buildMore() {
116
111
  var m = state.more;
117
112
  var box = el("div", "morepanel");
118
113
  box.id = "morepanel";
119
114
  box.setAttribute("role", "group");
120
- var like = m.mode === "like";
121
- var title = el("h2", "morehead", like ? tpl(COPY.moreLike, { label: m.fromLabel }) : COPY.generateMore);
115
+ var title = el("h2", "morehead", COPY.generateMore);
122
116
  title.id = "morehead";
123
117
  box.setAttribute("aria-labelledby", "morehead");
124
- if (like) {
125
- // The reference: a tiny picture of the design the variations are made from.
126
- var head = el("div", "moreheadrow");
127
- var ref = ver(m.fromVersionId);
128
- var mini = el("img", "morethumb empty");
129
- mini.alt = "";
130
- var cached = ref && state.thumbs[imageKey(ref, "thumb")];
131
- if (cached) { mini.src = cached; mini.classList.remove("empty"); }
132
- else bindImage(mini, ref, "thumb", false);
133
- head.appendChild(mini);
134
- head.appendChild(title);
135
- box.appendChild(head);
136
- } else box.appendChild(title);
118
+ box.appendChild(title);
119
+ m.els.help = el("p", "help");
120
+ box.appendChild(m.els.help);
121
+
122
+ // The switch: a native checkbox that reads as a switch, with a picture of the design it is about.
123
+ var label = el("label", "moreswitch");
124
+ m.els.toggle = el("input");
125
+ m.els.toggle.type = "checkbox";
126
+ m.els.toggle.setAttribute("role", "switch");
127
+ m.els.toggle.addEventListener("change", function () { m.like = m.els.toggle.checked; syncMore(); });
128
+ m.els.thumb = el("img", "morethumb empty");
129
+ m.els.thumb.alt = "";
130
+ m.els.switchText = el("span", "moreswitchtext");
131
+ label.appendChild(m.els.thumb);
132
+ label.appendChild(m.els.switchText);
133
+ label.appendChild(m.els.toggle);
134
+ box.appendChild(label);
135
+
136
+ // The inspiration that is selected, read back from the view; removing one is the tab's own selection write.
137
+ m.els.chipsWrap = el("div", "morechips hidden");
138
+ m.els.chipsWrap.appendChild(el("span", "lbl", COPY.moreInspirationLabel));
139
+ m.els.chips = el("div", "refchips");
140
+ m.els.chipsWrap.appendChild(m.els.chips);
141
+ box.appendChild(m.els.chipsWrap);
142
+
137
143
  var note = el("textarea");
138
144
  note.setAttribute("rows", "2");
139
145
  note.setAttribute("maxlength", "600");
@@ -146,16 +152,16 @@ export const SLATE_UI_MORE = String.raw `
146
152
  seg.setAttribute("role", "radiogroup");
147
153
  seg.setAttribute("aria-label", COPY.moreCountLabel);
148
154
  MORE.choices.forEach(function (n) {
149
- var label = el("label", "segopt");
155
+ var option = el("label", "segopt");
150
156
  var input = el("input");
151
157
  input.type = "radio";
152
158
  input.name = "morecount";
153
159
  input.value = String(n);
154
160
  input.checked = n === m.count;
155
161
  input.addEventListener("change", function () { m.count = n; });
156
- label.appendChild(input);
157
- label.appendChild(el("span", "", String(n)));
158
- seg.appendChild(label);
162
+ option.appendChild(input);
163
+ option.appendChild(el("span", "", String(n)));
164
+ seg.appendChild(option);
159
165
  });
160
166
  row.appendChild(seg);
161
167
  // Cancel and Generate stay together: on a narrow card they drop to the next line as a pair, at the right.
@@ -172,13 +178,71 @@ export const SLATE_UI_MORE = String.raw `
172
178
  m.els.note = note;
173
179
  }
174
180
 
181
+ // The chips follow the selection, the switch follows the shown design; each is rebuilt only when what it shows changed.
182
+ function syncMoreBody(m) {
183
+ var base = moreBase();
184
+ var likeOn = m.like && !!base;
185
+ var selected = currentSelected().slice(0, MAX_SELECTED);
186
+ m.els.toggle.checked = likeOn;
187
+ m.els.toggle.disabled = !base || m.committing;
188
+ m.els.switchText.textContent = tpl(COPY.moreBasedOn, { label: base ? base.label : (selectedVersion() ? selectedVersion().label : "") });
189
+ m.els.switchText.parentNode.title = base ? "" : COPY.moreLikeUnavailable;
190
+ m.els.help.textContent = likeOn ? tpl(COPY.moreHelpLike, { label: base.label }) : selected.length > 0 ? COPY.moreHelpSelected : COPY.moreHelpFresh;
191
+ var shown = base || selectedVersion();
192
+ var thumbSig = shown ? shown.versionId + ":" + shown.sha256 : "";
193
+ if (m.thumbSig !== thumbSig) {
194
+ m.thumbSig = thumbSig;
195
+ var fresh = el("img", "morethumb empty");
196
+ fresh.alt = "";
197
+ m.els.thumb.parentNode.replaceChild(fresh, m.els.thumb);
198
+ m.els.thumb = fresh;
199
+ if (shown) {
200
+ var cached = state.thumbs[imageKey(shown, "thumb")];
201
+ if (cached) { fresh.src = cached; fresh.classList.remove("empty"); }
202
+ else bindImage(fresh, shown, "thumb", false);
203
+ }
204
+ }
205
+ var chipSig = JSON.stringify(selected);
206
+ if (m.chipSig !== chipSig) {
207
+ m.chipSig = chipSig;
208
+ m.els.chips.textContent = "";
209
+ selected.forEach(function (id) {
210
+ var chip = el("span", "refchip");
211
+ var img = el("img", "refchipimg empty shimmer");
212
+ img.alt = "";
213
+ chip.appendChild(img);
214
+ bindReference(img, id, "thumb");
215
+ var remove = button("", "refchipx", function () { toggleRef(id); });
216
+ remove.setAttribute("aria-label", tpl(COPY.removeReference, { name: refDescription(id) }));
217
+ remove.title = tpl(COPY.removeReference, { name: refDescription(id) });
218
+ remove.innerHTML = '<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>';
219
+ chip.appendChild(remove);
220
+ m.els.chips.appendChild(chip);
221
+ });
222
+ }
223
+ m.els.chipsWrap.classList.toggle("hidden", selected.length === 0);
224
+ }
225
+
226
+ // The one way a round starts: the selection is committed first, so the round uses the inspiration the person sees.
227
+ function roundAction(request) {
228
+ var action = { kind: "round", mode: request.mode, count: request.count };
229
+ var note = (request.note || "").trim();
230
+ if (note) action.note = note;
231
+ if (request.mode === "like") action.fromVersionId = request.fromVersionId;
232
+ return action;
233
+ }
234
+ function startRound(opId, request) {
235
+ return whenSelectionSettled().then(function () { return runAction(roundAction(request), opId); });
236
+ }
237
+
175
238
  function commitMore() {
176
239
  var m = state.more;
177
- if (!m || m.committing || moreBusy() || !localImage().ready || (m.mode === "like" && !pickable(ver(m.fromVersionId)))) return;
240
+ if (!m || m.committing || moreBusy() || !localImage().ready) return;
241
+ var base = m.like ? moreBase() : null;
178
242
  m.committing = true;
179
243
  m.error = "";
180
244
  syncMore();
181
- startRound(m.id, { mode: m.mode, note: m.note, count: m.count, fromVersionId: m.fromVersionId }).then(function () {
245
+ startRound(m.id, { mode: base ? "like" : "new", note: m.note, count: m.count, fromVersionId: base ? base.versionId : undefined }).then(function () {
182
246
  m.committing = false;
183
247
  if (state.more === m) closeMore(false);
184
248
  syncMore();
@@ -190,7 +254,7 @@ export const SLATE_UI_MORE = String.raw `
190
254
  });
191
255
  }
192
256
 
193
- // The tiles follow the view; the panel sits in the host of the current mode, and keeps what was typed across modes and polls.
257
+ // The tiles follow the view; the panel sits in the host of the current mode, and keeps what was typed across polls and modes.
194
258
  function syncMore() {
195
259
  if (!state.view) return;
196
260
  var m = state.more;
@@ -198,17 +262,17 @@ export const SLATE_UI_MORE = String.raw `
198
262
  var busy = moreBusy();
199
263
  moreTiles().forEach(function (t) {
200
264
  t.disabled = busy;
201
- t.setAttribute("aria-expanded", m && m.mode === "new" ? "true" : "false");
265
+ t.setAttribute("aria-expanded", m ? "true" : "false");
202
266
  });
203
- syncThumbTools();
204
267
  if (!m) return;
205
268
  var host = isFullscreen() ? stageEls.more : $("more");
206
269
  if (host && m.els.box.parentNode !== host) {
207
270
  moreHosts().forEach(function (h) { if (h !== host) h.textContent = ""; });
208
271
  host.appendChild(m.els.box);
209
272
  }
273
+ syncMoreBody(m);
210
274
  var local = localImage();
211
- m.els.primary.disabled = m.committing || busy || !local.ready || (m.mode === "like" && !pickable(ver(m.fromVersionId)));
275
+ m.els.primary.disabled = m.committing || busy || !local.ready;
212
276
  m.els.alert.textContent = m.error || (!local.ready && local.reason ? local.reason : "");
213
277
  m.els.alert.classList.toggle("hidden", !m.els.alert.textContent);
214
278
  // Fitted before the size report, so the host never sees the taller card.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-script-more.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-more.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmMtC,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-script-more.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-more.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiQtC,CAAC"}
@@ -6,8 +6,8 @@
6
6
  * names what happened and carries no command, flag, path, price or credit word;
7
7
  * the agent confirms through the model-visible data tool, which returns the
8
8
  * server's own trusted text. Six messages exist, one per click (spec v2 9.2):
9
- * New options and Generate more, More like this, Edit, Select, Branch and
10
- * Convert. The user's own words (a steer note, an edit instruction, the Branch
9
+ * Generate more with new options, Generate more based on a design, Edit,
10
+ * Select, Branch and Convert. The user's own words (a steer note, an edit instruction, the Branch
11
11
  * explanation) are never put in a message; the agent reads them from the data
12
12
  * tool, quoted. `runDir` is named in each because the tools take it and a
13
13
  * thread may hold several workspaces.
@@ -6,8 +6,8 @@
6
6
  * names what happened and carries no command, flag, path, price or credit word;
7
7
  * the agent confirms through the model-visible data tool, which returns the
8
8
  * server's own trusted text. Six messages exist, one per click (spec v2 9.2):
9
- * New options and Generate more, More like this, Edit, Select, Branch and
10
- * Convert. The user's own words (a steer note, an edit instruction, the Branch
9
+ * Generate more with new options, Generate more based on a design, Edit,
10
+ * Select, Branch and Convert. The user's own words (a steer note, an edit instruction, the Branch
11
11
  * explanation) are never put in a message; the agent reads them from the data
12
12
  * tool, quoted. `runDir` is named in each because the tools take it and a
13
13
  * thread may hold several workspaces.
@@ -69,7 +69,7 @@ export const SLATE_UI_SCRIBBLE = String.raw `
69
69
  function scribbleAttach(wrap, d) {
70
70
  var canvas = document.createElement("canvas");
71
71
  canvas.className = "scribble";
72
- canvas.setAttribute("aria-label", COPY.scribbleLabel);
72
+ canvas.setAttribute("aria-label", COPY.scribbleHint);
73
73
  d.canvas = canvas;
74
74
  wrap.appendChild(canvas);
75
75
  // The bitmap follows the size the image is shown at; the strokes repaint from their permille points.
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * The fullscreen workspace: on the left the selection (compact thumbnails
3
3
  * grouped by round, each option with its versions as chips), in the middle one
4
- * large image, and under it one row of actions: Select, Design, Edit, Branch
5
- * and Convert. Nothing else shows until a button is clicked; the dialogs live
4
+ * large image, and under it one row of actions at the right: Edit, Branch and
5
+ * Convert, then Select (primary) at the far right. Nothing else shows until a
6
+ * button is clicked; the dialogs live
6
7
  * in mcp-slate-ui-script-dialog.ts. One band above the image says what is
7
8
  * running, stopped or failed, with Resume when the work can resume. Mounted
8
9
  * only in fullscreen.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-script-stage.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,QA0K1B,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-script-stage.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QAwK1B,CAAC"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * The fullscreen workspace: on the left the selection (compact thumbnails
3
3
  * grouped by round, each option with its versions as chips), in the middle one
4
- * large image, and under it one row of actions: Select, Design, Edit, Branch
5
- * and Convert. Nothing else shows until a button is clicked; the dialogs live
4
+ * large image, and under it one row of actions at the right: Edit, Branch and
5
+ * Convert, then Select (primary) at the far right. Nothing else shows until a
6
+ * button is clicked; the dialogs live
6
7
  * in mcp-slate-ui-script-dialog.ts. One band above the image says what is
7
8
  * running, stopped or failed, with Resume when the work can resume. Mounted
8
9
  * only in fullscreen.
@@ -38,14 +39,14 @@ export const SLATE_UI_STAGE = String.raw `
38
39
  stageEls.band.setAttribute("role", "status");
39
40
  stageEls.hero = el("div", "hero");
40
41
  var row = el("div", "actionrow");
41
- stageEls.select = button(COPY.select, "primary", function () { doSelect(selectedVersion()); });
42
- stageEls.design = button(COPY.design, "", function () { openDialog("design", stageEls.design); });
43
42
  stageEls.edit = button(COPY.edit, "", function () { openDialog("edit", stageEls.edit); });
44
43
  stageEls.branch = button(COPY.branch, "", function () { openDialog("branch", stageEls.branch); });
45
44
  stageEls.convert = button(COPY.convert, "", function () { openDialog("convert", stageEls.convert); });
45
+ stageEls.select = button(COPY.select, "primary", function () { doSelect(selectedVersion()); });
46
46
  stageEls.editWhy = el("span", "sr");
47
47
  stageEls.editWhy.id = "edit-why";
48
- [stageEls.select, stageEls.design, stageEls.edit, stageEls.branch, stageEls.convert, stageEls.editWhy].forEach(function (b) { row.appendChild(b); });
48
+ // Select is last: the row is right-aligned, so it ends at the picture's right edge.
49
+ [stageEls.edit, stageEls.branch, stageEls.convert, stageEls.select, stageEls.editWhy].forEach(function (b) { row.appendChild(b); });
49
50
  stageEls.status = el("p", "status");
50
51
  stageEls.status.setAttribute("data-status", "");
51
52
  stageEls.status.setAttribute("role", "status");
@@ -87,7 +88,7 @@ export const SLATE_UI_STAGE = String.raw `
87
88
  var list = el("ul", "options");
88
89
  orderedCandidates().filter(function (c) { return c.roundId === round.roundId; }).sort(byLabel).forEach(function (c) {
89
90
  var item = el("li", "option");
90
- item.appendChild(thumbCell(c, "opt"));
91
+ item.appendChild(thumbButton(c, "opt"));
91
92
  var versions = versionsOf(c);
92
93
  if (versions.length > 1) {
93
94
  var chips = el("div", "chips");
@@ -132,9 +133,7 @@ export const SLATE_UI_STAGE = String.raw `
132
133
  function syncStageControls(selectLabel, selectDisabled) {
133
134
  if (!stageBuilt || !isFullscreen()) return;
134
135
  var v = selectedVersion();
135
- var any = !!state.view && state.view.candidates.length > 0;
136
136
  if (selectLabel !== undefined) { stageEls.select.textContent = selectLabel; stageEls.select.disabled = selectDisabled; }
137
- stageEls.design.disabled = !any;
138
137
  // Edit is off when the shown version cannot be edited; the reason is its accessible description, not a tooltip.
139
138
  var blocked = !v || !v.editable;
140
139
  stageEls.edit.disabled = blocked;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-script-stage.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0KvC,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-script-stage.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwKvC,CAAC"}
@@ -13,10 +13,10 @@ export const SLATE_UI_STATE = String.raw `
13
13
  var state = {
14
14
  host: {}, view: null,
15
15
  sel: { candidateId: null, versionId: null, followLatest: true },
16
- tab: "designs", query: "", dialog: null, more: null, wantEdit: null,
16
+ tab: "designs", query: "", dialog: null, more: null,
17
17
  busy: false, status: { text: "", kind: "", source: "", phase: "" }, lastOpText: "", lastBandOp: "",
18
18
  thumbs: {}, fulls: {}, refs: {}, lastOpStates: {}, opBusy: {}, awaitEdit: null,
19
- insp: { local: null, writing: false, dirty: false, searching: false, waiters: [] }
19
+ insp: { local: null, writing: false, dirty: false, searching: false, noMatch: "", waiters: [] }
20
20
  };
21
21
 
22
22
  // ---- small helpers ----
@@ -161,7 +161,7 @@ export const SLATE_UI_STATE = String.raw `
161
161
  promise.then(function (src) {
162
162
  if (img.isConnected === false) return;
163
163
  img.src = src;
164
- img.classList.remove("empty");
164
+ img.classList.remove("empty", "shimmer");
165
165
  }, function (err) {
166
166
  // An error is shown in place of the picture, never thrown.
167
167
  img.alt = errText(err);
@@ -3,8 +3,7 @@
3
3
  * share one scope: bridge (host protocol), state (view state, picture queue,
4
4
  * polling, what the ops say), progress, inline (the card), select (Select and
5
5
  * the hand-offs), inspiration (the tabs and the Inspiration tab), stage
6
- * (fullscreen), dialog (Design, Edit, Branch and Convert), more (the Generate more tile and panel), thumbtools (the
7
- * plus and the pencil on a thumbnail), scribble (the drawing layer of Edit), the hosted and browser targets' words, then the handshake, last, so every function and
6
+ * (fullscreen), dialog (Edit, Branch and Convert), more (the Generate more tile and its panel), scribble (the drawing layer of Edit), the hosted and browser targets' words, then the handshake, last, so every function and
8
7
  * variable exists before the first message can arrive. The tool names come
9
8
  * from the view contract (SLATE_UI_TOOLS), not from the server's own module.
10
9
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-script.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAgB3D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,KAAG,MAsB/C,CAAC;AAEb,eAAO,MAAM,eAAe,QAA8B,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-script.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAgB3D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,KAAG,MAyB/C,CAAC;AAEb,eAAO,MAAM,eAAe,QAA8B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { SLATE_CONVERT_CHOICES, SLATE_CONVERT_MAX_WIDTH, SLATE_MORE_COUNTS, SLATE_REMOTE_CONVERT_CHOICES, SLATE_UI_COPY } from './mcp-slate-ui-copy.js';
1
+ import { SLATE_CONVERT_CHOICES, SLATE_CONVERT_DESCRIPTIONS, SLATE_CONVERT_MAX_WIDTH, SLATE_MORE_COUNTS, SLATE_REMOTE_CONVERT_CHOICES, SLATE_REMOTE_CONVERT_DESCRIPTIONS, SLATE_UI_COPY } from './mcp-slate-ui-copy.js';
2
2
  import { SLATE_UI_TOOLS } from './slate-view-contract.js';
3
3
  import { SLATE_UI_BRIDGE } from './mcp-slate-ui-script-bridge.js';
4
4
  import { SLATE_UI_BROWSER } from './mcp-slate-ui-script-browser.js';
@@ -12,7 +12,6 @@ import { SLATE_UI_SCRIBBLE } from './mcp-slate-ui-script-scribble.js';
12
12
  import { SLATE_UI_SELECT } from './mcp-slate-ui-script-select.js';
13
13
  import { SLATE_UI_STAGE } from './mcp-slate-ui-script-stage.js';
14
14
  import { SLATE_UI_STATE } from './mcp-slate-ui-script-state.js';
15
- import { SLATE_UI_THUMBTOOLS } from './mcp-slate-ui-script-thumbtools.js';
16
15
  const HANDSHAKE = String.raw `
17
16
  // ---- connect: handlers are registered above, before the handshake ----
18
17
  if (window.parent === window) {
@@ -38,7 +37,11 @@ export const buildSlateUiScript = (target) => [
38
37
  .replace('__TOOLS__', () => JSON.stringify(SLATE_UI_TOOLS))
39
38
  .replace('__COPY__', () => JSON.stringify(SLATE_UI_COPY))
40
39
  .replace('__TARGET__', () => JSON.stringify(target))
41
- .replace('__CONVERT__', () => JSON.stringify({ choices: target === 'remote' ? SLATE_REMOTE_CONVERT_CHOICES : SLATE_CONVERT_CHOICES, maxWidth: SLATE_CONVERT_MAX_WIDTH })),
40
+ .replace('__CONVERT__', () => JSON.stringify({
41
+ choices: target === 'remote' ? SLATE_REMOTE_CONVERT_CHOICES : SLATE_CONVERT_CHOICES,
42
+ descriptions: target === 'remote' ? SLATE_REMOTE_CONVERT_DESCRIPTIONS : SLATE_CONVERT_DESCRIPTIONS,
43
+ maxWidth: SLATE_CONVERT_MAX_WIDTH,
44
+ })),
42
45
  SLATE_UI_STATE,
43
46
  SLATE_UI_PROGRESS,
44
47
  SLATE_UI_INLINE,
@@ -47,7 +50,6 @@ export const buildSlateUiScript = (target) => [
47
50
  SLATE_UI_STAGE,
48
51
  SLATE_UI_DIALOG,
49
52
  SLATE_UI_MORE.replace('__MORE__', () => JSON.stringify(SLATE_MORE_COUNTS)),
50
- SLATE_UI_THUMBTOOLS,
51
53
  SLATE_UI_SCRIBBLE,
52
54
  SLATE_UI_REMOTE,
53
55
  SLATE_UI_BROWSER,
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-script.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxJ,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAwB1E,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;CAY3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAU,EAAE,CAAC;IACnE,eAAe;IACf,gBAAgB;IAChB,eAAe;SACZ,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;SAC1D,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;SACxD,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACnD,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,qBAAqB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC3K,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,cAAc;IACd,eAAe;IACf,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1E,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,SAAS;IACT,OAAO;CACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-script.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,iCAAiC,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvN,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAuBhE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;CAY3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAU,EAAE,CAAC;IACnE,eAAe;IACf,gBAAgB;IAChB,eAAe;SACZ,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;SAC1D,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;SACxD,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACnD,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3C,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,qBAAqB;QACnF,YAAY,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,0BAA0B;QAClG,QAAQ,EAAE,uBAAuB;KAClC,CAAC,CAAC;IACL,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,cAAc;IACd,eAAe;IACf,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1E,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,SAAS;IACT,OAAO;CACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC"}
@@ -1,17 +1,20 @@
1
1
  /**
2
- * The dialogs (Design, Edit, Branch, Convert), the scribble layer of Edit and
3
- * the Inspiration tab. A dialog is a centred box over a dimmed workspace; it
2
+ * The dialogs (Edit, Branch, Convert), the scribble layer of Edit and the
3
+ * Inspiration tab. A dialog is a centred box over a dimmed workspace; it
4
4
  * scrolls inside itself when the window is short, and fills the width on a
5
- * phone.
5
+ * phone. The reference tiles are square and fluid: at least 192 px across in
6
+ * the card and 256 px in the workspace (--ref-min), two across under 420 px.
6
7
  */
7
8
  export declare const SLATE_UI_DIALOG_STYLES: string;
8
9
  /**
9
- * The Generate more tile and its panel. The tile is deliberately quiet: a
10
- * hairline dashed border, a muted plus, no fill, no words; it takes the size
11
- * of the thumbnails around it (56 px in the card's strip, 72 px in the
12
- * selection). The panel is one bordered block under the thumbnails. In the
13
- * card, the script shortens the large image by the panel's height while it is
14
- * open (an inline --cap), or folds it when too little would be left.
10
+ * The Generate more tile and its panel. The tile is quiet but findable: a
11
+ * dashed border in the secondary text colour, a plus and the words "Generate
12
+ * more", no fill; it takes the size of the thumbnails around it (--thumb-card
13
+ * beside the card's strip, --thumb-rail in the selection). The panel is one bordered block under the thumbnails:
14
+ * heading, one helper line, the "Based on" switch, the selected inspiration as
15
+ * small chips, a note, the count and the two buttons. In the card, the script
16
+ * shortens the large image by the panel's height while it is open (an inline
17
+ * --cap), or folds it when too little would be left.
15
18
  */
16
19
  export declare const SLATE_UI_MORE_STYLES: string;
17
20
  //# sourceMappingURL=mcp-slate-ui-styles-dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-styles-dialog.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-dialog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAgClC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,QAwBhC,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-styles-dialog.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-dialog.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAoClC,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,QAuChC,CAAC"}