@12ui/design 0.2.82 → 0.2.83

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 (257) hide show
  1. package/README.md +4 -1
  2. package/SKILL.md +1 -1
  3. package/dist/branch-execution.d.ts.map +1 -1
  4. package/dist/branch-execution.js +6 -0
  5. package/dist/branch-execution.js.map +1 -1
  6. package/dist/branch-materialize.d.ts.map +1 -1
  7. package/dist/branch-materialize.js +6 -2
  8. package/dist/branch-materialize.js.map +1 -1
  9. package/dist/cli-capabilities.d.ts +2 -5
  10. package/dist/cli-capabilities.d.ts.map +1 -1
  11. package/dist/cli-capabilities.js +2 -2
  12. package/dist/cli-capabilities.js.map +1 -1
  13. package/dist/cli-help/conversion.d.ts +1 -1
  14. package/dist/cli-help/conversion.js +1 -1
  15. package/dist/cli-help/conversion.js.map +1 -1
  16. package/dist/cli-help/index.d.ts +1 -1
  17. package/dist/cli-image-backend.d.ts +6 -1
  18. package/dist/cli-image-backend.d.ts.map +1 -1
  19. package/dist/cli-image-backend.js +8 -3
  20. package/dist/cli-image-backend.js.map +1 -1
  21. package/dist/cli-local-runtime.d.ts +6 -0
  22. package/dist/cli-local-runtime.d.ts.map +1 -1
  23. package/dist/cli-local-runtime.js +14 -1
  24. package/dist/cli-local-runtime.js.map +1 -1
  25. package/dist/cli-usage.js +3 -3
  26. package/dist/cli-workspace-draw.d.ts.map +1 -1
  27. package/dist/cli-workspace-draw.js +2 -0
  28. package/dist/cli-workspace-draw.js.map +1 -1
  29. package/dist/cli-workspace-runner.d.ts.map +1 -1
  30. package/dist/cli-workspace-runner.js +2 -1
  31. package/dist/cli-workspace-runner.js.map +1 -1
  32. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  33. package/dist/legacy-skill-catalog.js +13 -1
  34. package/dist/legacy-skill-catalog.js.map +1 -1
  35. package/dist/mcp-slate-tool-defs.d.ts.map +1 -1
  36. package/dist/mcp-slate-tool-defs.js +3 -2
  37. package/dist/mcp-slate-tool-defs.js.map +1 -1
  38. package/dist/mcp-slate-ui-copy.d.ts +10 -0
  39. package/dist/mcp-slate-ui-copy.d.ts.map +1 -1
  40. package/dist/mcp-slate-ui-copy.js +9 -0
  41. package/dist/mcp-slate-ui-copy.js.map +1 -1
  42. package/dist/mcp-slate-ui-locales/de-DE.d.ts.map +1 -1
  43. package/dist/mcp-slate-ui-locales/de-DE.js +5 -0
  44. package/dist/mcp-slate-ui-locales/de-DE.js.map +1 -1
  45. package/dist/mcp-slate-ui-locales/es-419.d.ts.map +1 -1
  46. package/dist/mcp-slate-ui-locales/es-419.js +5 -0
  47. package/dist/mcp-slate-ui-locales/es-419.js.map +1 -1
  48. package/dist/mcp-slate-ui-locales/es-ES.d.ts.map +1 -1
  49. package/dist/mcp-slate-ui-locales/es-ES.js +5 -0
  50. package/dist/mcp-slate-ui-locales/es-ES.js.map +1 -1
  51. package/dist/mcp-slate-ui-locales/fr-FR.d.ts.map +1 -1
  52. package/dist/mcp-slate-ui-locales/fr-FR.js +5 -0
  53. package/dist/mcp-slate-ui-locales/fr-FR.js.map +1 -1
  54. package/dist/mcp-slate-ui-locales/hi-IN.d.ts.map +1 -1
  55. package/dist/mcp-slate-ui-locales/hi-IN.js +5 -0
  56. package/dist/mcp-slate-ui-locales/hi-IN.js.map +1 -1
  57. package/dist/mcp-slate-ui-locales/it-IT.d.ts.map +1 -1
  58. package/dist/mcp-slate-ui-locales/it-IT.js +5 -0
  59. package/dist/mcp-slate-ui-locales/it-IT.js.map +1 -1
  60. package/dist/mcp-slate-ui-locales/ja-JP.d.ts.map +1 -1
  61. package/dist/mcp-slate-ui-locales/ja-JP.js +5 -0
  62. package/dist/mcp-slate-ui-locales/ja-JP.js.map +1 -1
  63. package/dist/mcp-slate-ui-locales/ko-KR.d.ts.map +1 -1
  64. package/dist/mcp-slate-ui-locales/ko-KR.js +5 -0
  65. package/dist/mcp-slate-ui-locales/ko-KR.js.map +1 -1
  66. package/dist/mcp-slate-ui-locales/pt-BR.d.ts.map +1 -1
  67. package/dist/mcp-slate-ui-locales/pt-BR.js +5 -0
  68. package/dist/mcp-slate-ui-locales/pt-BR.js.map +1 -1
  69. package/dist/mcp-slate-ui-locales/zh-CN.d.ts.map +1 -1
  70. package/dist/mcp-slate-ui-locales/zh-CN.js +5 -0
  71. package/dist/mcp-slate-ui-locales/zh-CN.js.map +1 -1
  72. package/dist/mcp-slate-ui-locales/zh-TW.d.ts.map +1 -1
  73. package/dist/mcp-slate-ui-locales/zh-TW.js +5 -0
  74. package/dist/mcp-slate-ui-locales/zh-TW.js.map +1 -1
  75. package/dist/mcp-slate-ui-script-board.d.ts +19 -0
  76. package/dist/mcp-slate-ui-script-board.d.ts.map +1 -0
  77. package/dist/mcp-slate-ui-script-board.js +126 -0
  78. package/dist/mcp-slate-ui-script-board.js.map +1 -0
  79. package/dist/mcp-slate-ui-script-designs.d.ts +1 -1
  80. package/dist/mcp-slate-ui-script-designs.d.ts.map +1 -1
  81. package/dist/mcp-slate-ui-script-designs.js +24 -15
  82. package/dist/mcp-slate-ui-script-designs.js.map +1 -1
  83. package/dist/mcp-slate-ui-script-inspiration-collage.d.ts +5 -2
  84. package/dist/mcp-slate-ui-script-inspiration-collage.d.ts.map +1 -1
  85. package/dist/mcp-slate-ui-script-inspiration-collage.js +9 -5
  86. package/dist/mcp-slate-ui-script-inspiration-collage.js.map +1 -1
  87. package/dist/mcp-slate-ui-script-inspiration-gallery.d.ts +7 -4
  88. package/dist/mcp-slate-ui-script-inspiration-gallery.d.ts.map +1 -1
  89. package/dist/mcp-slate-ui-script-inspiration-gallery.js +46 -5
  90. package/dist/mcp-slate-ui-script-inspiration-gallery.js.map +1 -1
  91. package/dist/mcp-slate-ui-script-inspiration-grid.d.ts.map +1 -1
  92. package/dist/mcp-slate-ui-script-inspiration-grid.js +4 -0
  93. package/dist/mcp-slate-ui-script-inspiration-grid.js.map +1 -1
  94. package/dist/mcp-slate-ui-script-pause.d.ts +4 -0
  95. package/dist/mcp-slate-ui-script-pause.d.ts.map +1 -1
  96. package/dist/mcp-slate-ui-script-pause.js +9 -2
  97. package/dist/mcp-slate-ui-script-pause.js.map +1 -1
  98. package/dist/mcp-slate-ui-script-peek.d.ts +16 -0
  99. package/dist/mcp-slate-ui-script-peek.d.ts.map +1 -0
  100. package/dist/mcp-slate-ui-script-peek.js +89 -0
  101. package/dist/mcp-slate-ui-script-peek.js.map +1 -0
  102. package/dist/mcp-slate-ui-script-references.d.ts +4 -2
  103. package/dist/mcp-slate-ui-script-references.d.ts.map +1 -1
  104. package/dist/mcp-slate-ui-script-references.js +39 -7
  105. package/dist/mcp-slate-ui-script-references.js.map +1 -1
  106. package/dist/mcp-slate-ui-script-remote.js +2 -2
  107. package/dist/mcp-slate-ui-script-viewer.d.ts +7 -2
  108. package/dist/mcp-slate-ui-script-viewer.d.ts.map +1 -1
  109. package/dist/mcp-slate-ui-script-viewer.js +183 -50
  110. package/dist/mcp-slate-ui-script-viewer.js.map +1 -1
  111. package/dist/mcp-slate-ui-script.d.ts.map +1 -1
  112. package/dist/mcp-slate-ui-script.js +4 -0
  113. package/dist/mcp-slate-ui-script.js.map +1 -1
  114. package/dist/mcp-slate-ui-styles-board.d.ts +7 -0
  115. package/dist/mcp-slate-ui-styles-board.d.ts.map +1 -0
  116. package/dist/mcp-slate-ui-styles-board.js +30 -0
  117. package/dist/mcp-slate-ui-styles-board.js.map +1 -0
  118. package/dist/mcp-slate-ui-styles-designs.d.ts +2 -1
  119. package/dist/mcp-slate-ui-styles-designs.d.ts.map +1 -1
  120. package/dist/mcp-slate-ui-styles-designs.js +10 -8
  121. package/dist/mcp-slate-ui-styles-designs.js.map +1 -1
  122. package/dist/mcp-slate-ui-styles-inspiration.d.ts.map +1 -1
  123. package/dist/mcp-slate-ui-styles-inspiration.js +13 -2
  124. package/dist/mcp-slate-ui-styles-inspiration.js.map +1 -1
  125. package/dist/mcp-slate-ui-styles-loading.d.ts +18 -0
  126. package/dist/mcp-slate-ui-styles-loading.d.ts.map +1 -0
  127. package/dist/mcp-slate-ui-styles-loading.js +37 -0
  128. package/dist/mcp-slate-ui-styles-loading.js.map +1 -0
  129. package/dist/mcp-slate-ui-styles-peek.d.ts +8 -0
  130. package/dist/mcp-slate-ui-styles-peek.d.ts.map +1 -0
  131. package/dist/mcp-slate-ui-styles-peek.js +13 -0
  132. package/dist/mcp-slate-ui-styles-peek.js.map +1 -0
  133. package/dist/mcp-slate-ui-styles.d.ts.map +1 -1
  134. package/dist/mcp-slate-ui-styles.js +0 -3
  135. package/dist/mcp-slate-ui-styles.js.map +1 -1
  136. package/dist/mcp-slate-ui.d.ts.map +1 -1
  137. package/dist/mcp-slate-ui.js +4 -1
  138. package/dist/mcp-slate-ui.js.map +1 -1
  139. package/dist/prototype-browsers.d.ts +10 -2
  140. package/dist/prototype-browsers.d.ts.map +1 -1
  141. package/dist/prototype-browsers.js +27 -2
  142. package/dist/prototype-browsers.js.map +1 -1
  143. package/dist/server.d.ts.map +1 -1
  144. package/dist/server.js +2 -1
  145. package/dist/server.js.map +1 -1
  146. package/dist/slate-actions.d.ts +6 -7
  147. package/dist/slate-actions.d.ts.map +1 -1
  148. package/dist/slate-actions.js +6 -9
  149. package/dist/slate-actions.js.map +1 -1
  150. package/dist/slate-branch-runner.d.ts +120 -0
  151. package/dist/slate-branch-runner.d.ts.map +1 -0
  152. package/dist/slate-branch-runner.js +312 -0
  153. package/dist/slate-branch-runner.js.map +1 -0
  154. package/dist/slate-captions-local.d.ts +14 -0
  155. package/dist/slate-captions-local.d.ts.map +1 -0
  156. package/dist/slate-captions-local.js +70 -0
  157. package/dist/slate-captions-local.js.map +1 -0
  158. package/dist/slate-captions-remote.d.ts +29 -0
  159. package/dist/slate-captions-remote.d.ts.map +1 -0
  160. package/dist/slate-captions-remote.js +65 -0
  161. package/dist/slate-captions-remote.js.map +1 -0
  162. package/dist/slate-captions.d.ts +41 -0
  163. package/dist/slate-captions.d.ts.map +1 -0
  164. package/dist/slate-captions.js +112 -0
  165. package/dist/slate-captions.js.map +1 -0
  166. package/dist/slate-commit.d.ts.map +1 -1
  167. package/dist/slate-commit.js +8 -6
  168. package/dist/slate-commit.js.map +1 -1
  169. package/dist/slate-image-executor.d.ts +18 -3
  170. package/dist/slate-image-executor.d.ts.map +1 -1
  171. package/dist/slate-image-executor.js +18 -5
  172. package/dist/slate-image-executor.js.map +1 -1
  173. package/dist/slate-paths.d.ts +3 -1
  174. package/dist/slate-paths.d.ts.map +1 -1
  175. package/dist/slate-paths.js +8 -2
  176. package/dist/slate-paths.js.map +1 -1
  177. package/dist/slate-round-prompt.d.ts +0 -12
  178. package/dist/slate-round-prompt.d.ts.map +1 -1
  179. package/dist/slate-round-prompt.js +0 -15
  180. package/dist/slate-round-prompt.js.map +1 -1
  181. package/dist/slate-round-runner.d.ts.map +1 -1
  182. package/dist/slate-round-runner.js +8 -14
  183. package/dist/slate-round-runner.js.map +1 -1
  184. package/dist/slate-runner-context.d.ts +3 -0
  185. package/dist/slate-runner-context.d.ts.map +1 -1
  186. package/dist/slate-runner-context.js.map +1 -1
  187. package/dist/slate-runner-main.d.ts +3 -0
  188. package/dist/slate-runner-main.d.ts.map +1 -1
  189. package/dist/slate-runner-main.js +5 -1
  190. package/dist/slate-runner-main.js.map +1 -1
  191. package/dist/slate-runner-spawn.js +2 -2
  192. package/dist/slate-runner-spawn.js.map +1 -1
  193. package/dist/slate-site-references-capture.d.ts +38 -1
  194. package/dist/slate-site-references-capture.d.ts.map +1 -1
  195. package/dist/slate-site-references-capture.js +25 -7
  196. package/dist/slate-site-references-capture.js.map +1 -1
  197. package/dist/slate-site-references-client.d.ts +13 -1
  198. package/dist/slate-site-references-client.d.ts.map +1 -1
  199. package/dist/slate-site-references-client.js +39 -14
  200. package/dist/slate-site-references-client.js.map +1 -1
  201. package/dist/slate-site-references-local.d.ts +3 -0
  202. package/dist/slate-site-references-local.d.ts.map +1 -1
  203. package/dist/slate-site-references-local.js +20 -1
  204. package/dist/slate-site-references-local.js.map +1 -1
  205. package/dist/slate-site-references-suggest.d.ts +25 -2
  206. package/dist/slate-site-references-suggest.d.ts.map +1 -1
  207. package/dist/slate-site-references-suggest.js +71 -12
  208. package/dist/slate-site-references-suggest.js.map +1 -1
  209. package/dist/slate-site-references.d.ts +11 -0
  210. package/dist/slate-site-references.d.ts.map +1 -1
  211. package/dist/slate-site-references.js +42 -3
  212. package/dist/slate-site-references.js.map +1 -1
  213. package/dist/slate-view-contract.d.ts +39 -1
  214. package/dist/slate-view-contract.d.ts.map +1 -1
  215. package/dist/slate-view.d.ts.map +1 -1
  216. package/dist/slate-view.js +8 -0
  217. package/dist/slate-view.js.map +1 -1
  218. package/dist/slate-workspace-parse.d.ts.map +1 -1
  219. package/dist/slate-workspace-parse.js +35 -0
  220. package/dist/slate-workspace-parse.js.map +1 -1
  221. package/dist/slate-workspace-types.d.ts +31 -2
  222. package/dist/slate-workspace-types.d.ts.map +1 -1
  223. package/dist/workspace-draw-branch.d.ts +27 -0
  224. package/dist/workspace-draw-branch.d.ts.map +1 -0
  225. package/dist/workspace-draw-branch.js +101 -0
  226. package/dist/workspace-draw-branch.js.map +1 -0
  227. package/dist/workspace-draw-client.d.ts +27 -0
  228. package/dist/workspace-draw-client.d.ts.map +1 -1
  229. package/dist/workspace-draw-client.js +30 -0
  230. package/dist/workspace-draw-client.js.map +1 -1
  231. package/dist/workspace-draw-codex.d.ts +5 -5
  232. package/dist/workspace-draw-codex.d.ts.map +1 -1
  233. package/dist/workspace-draw-codex.js +4 -3
  234. package/dist/workspace-draw-codex.js.map +1 -1
  235. package/dist/workspace-draw-run.d.ts +19 -3
  236. package/dist/workspace-draw-run.d.ts.map +1 -1
  237. package/dist/workspace-draw-run.js +44 -4
  238. package/dist/workspace-draw-run.js.map +1 -1
  239. package/dist/workspace-draw-types.d.ts +18 -2
  240. package/dist/workspace-draw-types.d.ts.map +1 -1
  241. package/dist/workspace-draw-types.js.map +1 -1
  242. package/dist/workspace-runner-main.d.ts +9 -2
  243. package/dist/workspace-runner-main.d.ts.map +1 -1
  244. package/dist/workspace-runner-main.js +21 -2
  245. package/dist/workspace-runner-main.js.map +1 -1
  246. package/dist/workspace-runner-spawn.js +1 -1
  247. package/dist/workspace-runner-spawn.js.map +1 -1
  248. package/open-design.json +2 -2
  249. package/package.json +1 -1
  250. package/runtime/codex-conversion/bin/convert.mjs +1 -1
  251. package/runtime/codex-conversion/src/codex/caller-home.mjs +95 -0
  252. package/runtime/codex-conversion/src/codex/home.mjs +8 -2
  253. package/runtime/codex-conversion/src/images/execute.mjs +1 -1
  254. package/runtime/codex-conversion/src/images/native-invoke.mjs +21 -13
  255. package/runtime/codex-conversion/src/images/native.mjs +42 -19
  256. package/runtime/codex-conversion/src/run.mjs +2 -1
  257. package/skills/12ui-design/SKILL.md +6 -6
@@ -8,31 +8,37 @@
8
8
  * - Edit: draw on the design (the scribble layer, mcp-slate-ui-script-scribble.ts; the view fits the design while
9
9
  * drawing) and/or type a change, then Enter. The edit runs at once and the view closes onto the Designs tab, where
10
10
  * the new version is already a loading tile next to its source.
11
- * - Branch: optional page names, comma separated, then Enter. It draws those pages (or four the model chooses) of the
12
- * same product from this design; they land as a branch section of the Designs tab.
11
+ * - Branch: Full page or More pages (page names optional, comma separated), then Enter. It runs the branch pipeline
12
+ * on this design: the full page continued below the fold, or other pages of the same product; each screen lands on
13
+ * the branch's board in the Designs tab (mcp-slate-ui-script-board.ts).
14
+ *
15
+ * Opened from a branch's board, the view shows the screen's whole column as the continuous page it is (a web page flush,
16
+ * app states framed one by one), at the port's width, scrolling down; left and right step across the board's columns.
17
+ * The actions act on the screen at the middle of the port, whose code the bar names as it scrolls.
13
18
  *
14
19
  * Keys: Escape leaves the bar, then the view; left and right step; plus, minus, 0 (fit) and 1 (100 percent) zoom.
15
20
  * In the workspace the view covers the frame; in a card whose host has no fullscreen it opens in the card instead.
16
21
  */
17
22
  export const SLATE_UI_VIEWER = String.raw `
18
23
  var ZOOM_MAX = 8;
19
- var BRANCH_DEFAULT_PAGES = 4;
20
- var BRANCH_MAX_PAGES = 8;
24
+ var BRANCH_MAX_PAGES = 4;
21
25
  var PAGE_NAME_CHARS = 60;
22
26
 
23
27
  // Open the view on a version, optionally straight onto its edit or branch bar. From the card it asks for the workspace.
24
- function openViewer(versionId, mode) {
28
+ function openViewer(versionId, mode, board) {
25
29
  var v = ver(versionId);
26
30
  if (!v) return;
27
- state.lv = { versionId: versionId, mode: mode || null, scale: 1, x: 0, y: 0, fitted: true, prompt: "", pages: "", strokes: [], current: null, committing: false, error: "", id: uuid4(), els: {} };
31
+ state.lv = { scrollY: state.lv ? state.lv.scrollY : window.scrollY, versionId: versionId, mode: mode || null, board: board || null, focus: true, anchor: null, layout: null, scale: 1, x: 0, y: 0, fitted: true, prompt: "", pages: "", strokes: [], current: null, committing: false, error: "", id: uuid4(), els: {} };
28
32
  if (!isFullscreen() && canFullscreen()) { requestMode("fullscreen"); }
29
33
  renderAll();
30
34
  }
31
35
  function closeViewer() {
32
36
  if (!state.lv || state.lv.committing) return;
37
+ var y = state.lv.scrollY;
33
38
  state.lv = null;
34
39
  viewerHost().textContent = "";
35
40
  renderAll();
41
+ window.scrollTo(0, y);
36
42
  }
37
43
  function viewerHost() {
38
44
  if (isFullscreen()) { if (!stageBuilt) buildStageSkeleton(); return stageEls.viewer; }
@@ -40,9 +46,62 @@ export const SLATE_UI_VIEWER = String.raw `
40
46
  }
41
47
 
42
48
  function lvVersion() { return state.lv ? ver(state.lv.versionId) : null; }
49
+
50
+ function lvColumn() {
51
+ var lv = state.lv;
52
+ return lv && lv.board && !lv.mode ? boardColumn(lv.board.from, lv.board.column) : null;
53
+ }
54
+ function lvColumns() {
55
+ var lv = state.lv;
56
+ return lv && lv.board ? boardColumns(lv.board.from).filter(function (col) { return col.screens.some(boardScreenVersion); }) : [];
57
+ }
58
+ function columnLayout(col) {
59
+ var first = col.screens.map(boardScreenVersion).filter(sized)[0];
60
+ var w = first ? first.width : 1536;
61
+ var gap = col.flow === "states" ? Math.round(w * 0.03) : 0;
62
+ var bottom = 0;
63
+ var shots = col.screens.filter(function (s) { return boardScreenVersion(s) || !s.c || drawing(s.c); }).map(function (s, i) {
64
+ var v = boardScreenVersion(s);
65
+ var h = Math.round(w / (sized(v) ? v.width / v.height : boardRatio(state.lv.board.from)));
66
+ var shot = { s: s, v: v, top: bottom + (i ? gap : 0), height: h };
67
+ bottom = shot.top + h;
68
+ return shot;
69
+ });
70
+ return { w: w, h: bottom, flow: col.flow, shots: shots };
71
+ }
72
+ function stageSize() {
73
+ var lv = state.lv;
74
+ if (lv && lv.layout && !lv.mode) return { w: lv.layout.w, h: lv.layout.h };
75
+ var v = lvVersion();
76
+ return v ? { w: v.width, h: v.height } : null;
77
+ }
78
+ function scrolls() { var lv = state.lv; return !!(lv && lv.layout && !lv.mode && lv.layout.shots.length > 1); }
79
+ function followScroll() {
80
+ var lv = state.lv;
81
+ var size = portSize();
82
+ if (!lv || !lv.layout || lv.mode || !size) return;
83
+ var mid = (size.h / 2 - lv.y) / lv.scale;
84
+ var shown = lv.layout.shots.filter(function (sh) { return sh.v; });
85
+ var at = shown.filter(function (sh) { return sh.top <= mid; }).pop() || shown[0];
86
+ if (at && at.v.versionId !== lv.versionId) { lv.versionId = at.v.versionId; syncViewerTarget(); }
87
+ }
88
+
43
89
  function stepViewer(delta) {
44
90
  var lv = state.lv;
45
91
  if (!lv || lv.mode) return;
92
+ if (lv.board) {
93
+ var cols = lvColumns();
94
+ var col = cols[cols.findIndex(function (x) { return x.index === lv.board.column; }) + delta];
95
+ if (!col) return;
96
+ lv.board = { from: lv.board.from, column: col.index };
97
+ lv.versionId = col.screens.map(boardScreenVersion).filter(Boolean)[0].versionId;
98
+ lv.fitted = true;
99
+ lv.anchor = 0;
100
+ lv.error = "";
101
+ lv.built = null;
102
+ renderViewer();
103
+ return;
104
+ }
46
105
  var order = viewerOrder();
47
106
  var at = order.findIndex(function (x) { return x.versionId === lv.versionId; });
48
107
  var next = order[at + delta];
@@ -63,8 +122,12 @@ export const SLATE_UI_VIEWER = String.raw `
63
122
  var v = lvVersion();
64
123
  if (!v) { state.lv = null; host.textContent = ""; return; }
65
124
  var c = cand(v.candidateId);
66
- var sig = JSON.stringify([v.versionId, v.sha256, lv.mode, samePick(v), state.busy, v.editable, localImage().ready, moreBusy(), viewerOrder().map(function (x) { return x.versionId; })]);
67
- if (lv.built === sig && host.firstChild) { syncViewerForm(); return; }
125
+ var col = lvColumn();
126
+ lv.layout = col ? columnLayout(col) : null;
127
+ var sig = lv.layout
128
+ ? JSON.stringify([lv.board, lv.layout.flow, lv.layout.shots.map(function (sh) { return sh.v ? sh.v.sha256 : sh.height; }), lvColumns().length])
129
+ : JSON.stringify([v.versionId, v.sha256, lv.mode, lv.scope, samePick(v), state.busy, v.editable, localImage().ready, moreBusy(), viewerOrder().map(function (x) { return x.versionId; })]);
130
+ if (lv.built === sig && host.firstChild) { syncViewerTarget(); syncViewerForm(); return; }
68
131
  lv.built = sig;
69
132
  host.textContent = "";
70
133
  var box = el("div", "lv");
@@ -73,17 +136,13 @@ export const SLATE_UI_VIEWER = String.raw `
73
136
  box.setAttribute("aria-label", tileName(c, v));
74
137
 
75
138
  var bar = el("div", "lvbar");
76
- var tag = el("span", "dtag");
77
- tag.appendChild(el("b", "code", v.label));
78
- var from = parentLabel(v);
79
- if (from) tag.appendChild(el("span", "dfrom", t("fromLabel", { label: from })));
80
- var page = pageName(c);
81
- if (page) tag.appendChild(el("span", "dpage", page));
82
- if (samePick(v)) { var chosen = el("span", "dchosen inline"); chosen.innerHTML = svgIcon(ICON.choose, 13); chosen.appendChild(el("span", "sr", t("chosen"))); tag.appendChild(chosen); }
83
- bar.appendChild(tag);
139
+ lv.els.tag = viewerTag(v);
140
+ bar.appendChild(lv.els.tag);
84
141
  bar.appendChild(el("span", "spacer"));
85
- var order = viewerOrder();
86
- var at = order.findIndex(function (x) { return x.versionId === v.versionId; });
142
+ var order = lv.board ? lvColumns() : viewerOrder();
143
+ var at = lv.board
144
+ ? order.findIndex(function (x) { return x.index === lv.board.column; })
145
+ : order.findIndex(function (x) { return x.versionId === v.versionId; });
87
146
  var prev = iconAction(t("previous"), ICON.left, function () { stepViewer(-1); });
88
147
  prev.disabled = at <= 0 || !!lv.mode;
89
148
  var next = iconAction(t("next"), ICON.right, function () { stepViewer(1); });
@@ -95,17 +154,30 @@ export const SLATE_UI_VIEWER = String.raw `
95
154
  box.appendChild(bar);
96
155
 
97
156
  var port = el("div", "lvport" + (lv.mode === "edit" ? " drawing" : ""));
98
- port.style.setProperty("--ar", String(v.width / v.height));
157
+ var size = stageSize();
158
+ port.style.setProperty("--ar", String(lv.layout ? lv.layout.w / lv.layout.shots[0].height : v.width / v.height));
99
159
  var stageBox = el("div", "lvstage");
100
- stageBox.style.width = v.width + "px";
101
- stageBox.style.height = v.height + "px";
102
- var img = el("img", "lvimg empty");
103
- img.alt = tileName(c, v);
104
- img.setAttribute("draggable", "false");
105
- var cached = state.fulls[imageKey(v, "full")] || state.thumbs[imageKey(v, "thumb")];
106
- if (cached) { img.src = cached; img.classList.remove("empty"); }
107
- bindImage(img, v, "full", true);
108
- stageBox.appendChild(img);
160
+ stageBox.style.width = size.w + "px";
161
+ stageBox.style.height = size.h + "px";
162
+ if (lv.layout) {
163
+ stageBox.classList.add("column");
164
+ stageBox.setAttribute("data-flow", lv.layout.flow);
165
+ lv.layout.shots.forEach(function (sh) {
166
+ var part = el("div", "lvshot" + (sh.v ? "" : " loading shimmer"));
167
+ part.style.top = sh.top + "px";
168
+ part.style.height = sh.height + "px";
169
+ if (sh.v) part.appendChild(viewerImage(sh.v, sh.s.c ? tileName(sh.s.c, sh.v) : t("versionName", { label: sh.v.label })));
170
+ else part.appendChild(el("span", "spin"));
171
+ stageBox.appendChild(part);
172
+ });
173
+ if (lv.focus) {
174
+ var shot = lv.layout.shots.filter(function (sh) { return sh.v && sh.v.versionId === lv.versionId; })[0];
175
+ lv.anchor = shot ? shot.top : 0;
176
+ lv.focus = false;
177
+ }
178
+ } else {
179
+ stageBox.appendChild(viewerImage(v, tileName(c, v)));
180
+ }
109
181
  port.appendChild(stageBox);
110
182
  if (lv.mode === "edit") scribbleAttach(stageBox, lv);
111
183
  var zoom = el("div", "lvzoom");
@@ -125,7 +197,8 @@ export const SLATE_UI_VIEWER = String.raw `
125
197
  var foot = el("div", "lvfoot");
126
198
  if (lv.mode === "edit") foot.appendChild(editForm(v));
127
199
  else if (lv.mode === "branch") foot.appendChild(branchForm(v));
128
- else foot.appendChild(viewerActions(v));
200
+ else { lv.els.acts = viewerActions(v); foot.appendChild(lv.els.acts); }
201
+ lv.els.target = targetSig(v);
129
202
  lv.els.alert = el("p", "alert");
130
203
  lv.els.alert.setAttribute("role", "alert");
131
204
  foot.appendChild(lv.els.alert);
@@ -137,6 +210,40 @@ export const SLATE_UI_VIEWER = String.raw `
137
210
  if (first && first.focus && lv.mode) first.focus();
138
211
  }
139
212
 
213
+ function viewerImage(v, alt) {
214
+ var img = el("img", "lvimg empty");
215
+ img.alt = alt;
216
+ img.setAttribute("draggable", "false");
217
+ var cached = state.fulls[imageKey(v, "full")] || state.thumbs[imageKey(v, "thumb")];
218
+ if (cached) { img.src = cached; img.classList.remove("empty"); }
219
+ bindImage(img, v, "full", true);
220
+ return img;
221
+ }
222
+ function viewerTag(v) {
223
+ var tag = el("span", "dtag");
224
+ tag.appendChild(el("b", "code", v.label));
225
+ var from = parentLabel(v);
226
+ if (from) tag.appendChild(el("span", "dfrom", t("fromLabel", { label: from })));
227
+ var c = cand(v.candidateId);
228
+ var page = c ? pageName(c) : "";
229
+ if (page) tag.appendChild(el("span", "dpage", page));
230
+ if (samePick(v)) { var chosen = el("span", "dchosen inline"); chosen.innerHTML = svgIcon(ICON.choose, 13); chosen.appendChild(el("span", "sr", t("chosen"))); tag.appendChild(chosen); }
231
+ return tag;
232
+ }
233
+ function targetSig(v) { return JSON.stringify([v.versionId, samePick(v), state.busy, v.editable, localImage().ready]); }
234
+ function syncViewerTarget() {
235
+ var lv = state.lv;
236
+ var v = lvVersion();
237
+ if (!lv || !v || lv.mode || !lv.els.tag || !lv.els.acts || lv.els.target === targetSig(v)) return;
238
+ lv.els.target = targetSig(v);
239
+ var tag = viewerTag(v);
240
+ lv.els.tag.replaceWith(tag);
241
+ lv.els.tag = tag;
242
+ var acts = viewerActions(v);
243
+ lv.els.acts.replaceWith(acts);
244
+ lv.els.acts = acts;
245
+ }
246
+
140
247
  function viewerActions(v) {
141
248
  var row = el("div", "lvacts");
142
249
  row.setAttribute("role", "toolbar");
@@ -162,6 +269,7 @@ export const SLATE_UI_VIEWER = String.raw `
162
269
  lv.current = null;
163
270
  lv.fitted = true;
164
271
  lv.built = null;
272
+ if (!mode && lv.board) lv.focus = true;
165
273
  renderViewer();
166
274
  }
167
275
 
@@ -199,25 +307,44 @@ export const SLATE_UI_VIEWER = String.raw `
199
307
  form.addEventListener("submit", function (e) { e.preventDefault(); commitViewer(); });
200
308
  return form;
201
309
  }
202
- // ---- branch: optional page names ----
310
+ // ---- branch: the full page, or more pages (names optional) ----
203
311
  function branchPages(text) {
204
312
  return String(text || "").split(/[,\n;]/).map(function (p) { return p.replace(/\s+/g, " ").trim().slice(0, PAGE_NAME_CHARS); }).filter(Boolean).slice(0, BRANCH_MAX_PAGES);
205
313
  }
314
+ function branchScope() { var lv = state.lv; return lv && lv.scope === "site" ? "site" : "page"; }
206
315
  function branchForm(v) {
207
316
  var lv = state.lv;
208
317
  var form = el("form", "lvform");
209
318
  form.setAttribute("aria-label", t("branch"));
210
319
  form.appendChild(modeMark(ICON.branch));
211
- var input = el("input");
212
- input.type = "text";
213
- input.className = "lvinput";
214
- input.placeholder = t("branchPages");
215
- input.setAttribute("aria-label", t("branchPages"));
216
- input.value = lv.pages;
217
- input.addEventListener("input", function () { lv.pages = input.value; });
218
- enterApplies(input);
320
+ var seg = el("div", "seg lvscope");
321
+ seg.setAttribute("role", "radiogroup");
322
+ seg.setAttribute("aria-label", t("branch"));
323
+ [["page", t("fullPage")], ["site", t("morePages")]].forEach(function (choice) {
324
+ var b = button(choice[1], "segbtn", function () {
325
+ if (branchScope() === choice[0]) return;
326
+ lv.scope = choice[0];
327
+ renderViewer();
328
+ });
329
+ b.setAttribute("role", "radio");
330
+ b.setAttribute("aria-checked", branchScope() === choice[0] ? "true" : "false");
331
+ seg.appendChild(b);
332
+ });
333
+ form.appendChild(seg);
334
+ if (branchScope() === "site") {
335
+ var input = el("input");
336
+ input.type = "text";
337
+ input.className = "lvinput";
338
+ input.placeholder = t("branchPages");
339
+ input.setAttribute("aria-label", t("branchPages"));
340
+ input.value = lv.pages;
341
+ input.addEventListener("input", function () { lv.pages = input.value; });
342
+ enterApplies(input);
343
+ form.appendChild(input);
344
+ } else {
345
+ form.appendChild(el("span", "spacer"));
346
+ }
219
347
  lv.els.apply = iconAction(t("branch"), ICON.send, function () { commitViewer(); }, "go");
220
- form.appendChild(input);
221
348
  form.appendChild(lv.els.apply);
222
349
  form.appendChild(iconAction(t("cancel"), ICON.close, function () { setViewerMode(null); }));
223
350
  form.addEventListener("submit", function (e) { e.preventDefault(); commitViewer(); });
@@ -258,9 +385,9 @@ export const SLATE_UI_VIEWER = String.raw `
258
385
  var d = { versionId: v.versionId, prompt: lv.prompt, strokes: lv.strokes };
259
386
  work = editActionFor(d, v).then(function (action) { return runAction(action, lv.id); });
260
387
  } else {
261
- var pages = branchPages(lv.pages);
262
- var action = { kind: "round", mode: "branch", fromVersionId: v.versionId };
263
- if (pages.length) action.pages = pages; else action.count = BRANCH_DEFAULT_PAGES;
388
+ var action = { kind: "round", mode: "branch", fromVersionId: v.versionId, scope: branchScope() };
389
+ var pages = action.scope === "site" ? branchPages(lv.pages) : [];
390
+ if (pages.length) action.pages = pages;
264
391
  work = runAction(action, lv.id);
265
392
  }
266
393
  work.then(function () {
@@ -284,18 +411,19 @@ export const SLATE_UI_VIEWER = String.raw `
284
411
  return r && r.width > 0 && r.height > 0 ? { w: r.width, h: r.height } : null;
285
412
  }
286
413
  function fitScale() {
287
- var v = lvVersion();
414
+ var stage = stageSize();
288
415
  var size = portSize();
289
- if (!v || !size) return 1;
290
- return Math.min(size.w / v.width, size.h / v.height);
416
+ if (!stage || !size) return 1;
417
+ if (scrolls()) return Math.min(size.w / stage.w, 1);
418
+ return Math.min(size.w / stage.w, size.h / stage.h);
291
419
  }
292
420
  function clampPan() {
293
421
  var lv = state.lv;
294
- var v = lvVersion();
422
+ var stage = stageSize();
295
423
  var size = portSize();
296
- if (!v || !size) return;
297
- var w = v.width * lv.scale;
298
- var h = v.height * lv.scale;
424
+ if (!stage || !size) return;
425
+ var w = stage.w * lv.scale;
426
+ var h = stage.h * lv.scale;
299
427
  // Smaller than the port: centred on that axis. Larger: no gap at either edge.
300
428
  lv.x = w <= size.w ? (size.w - w) / 2 : Math.min(0, Math.max(size.w - w, lv.x));
301
429
  lv.y = h <= size.h ? (size.h - h) / 2 : Math.min(0, Math.max(size.h - h, lv.y));
@@ -304,9 +432,11 @@ export const SLATE_UI_VIEWER = String.raw `
304
432
  var lv = state.lv;
305
433
  if (!lv || !lv.els.stage) return;
306
434
  if (lv.fitted) lv.scale = fitScale();
435
+ if (lv.anchor !== null && lv.layout && !lv.mode) lv.y = -lv.anchor * lv.scale;
307
436
  clampPan();
308
437
  lv.els.stage.style.transform = "translate(" + lv.x + "px, " + lv.y + "px) scale(" + lv.scale + ")";
309
438
  if (lv.els.level) lv.els.level.textContent = Math.round(lv.scale * 100) + "%";
439
+ followScroll();
310
440
  }
311
441
  function fitViewer() { var lv = state.lv; if (!lv) return; lv.fitted = true; applyZoom(); }
312
442
  function zoomAround(next, cx, cy) {
@@ -322,6 +452,7 @@ export const SLATE_UI_VIEWER = String.raw `
322
452
  lv.y = py - (py - lv.y) * (scale / lv.scale);
323
453
  lv.scale = scale;
324
454
  lv.fitted = false;
455
+ lv.anchor = null;
325
456
  applyZoom();
326
457
  }
327
458
  function zoomBy(factor, cx, cy) { var lv = state.lv; if (lv) zoomAround(lv.scale * factor, cx, cy); }
@@ -339,7 +470,8 @@ export const SLATE_UI_VIEWER = String.raw `
339
470
  var dy = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY;
340
471
  // A trackpad pinch arrives as a wheel with ctrlKey; vertical zooms around the pointer; horizontal and Shift pan.
341
472
  if (e.ctrlKey) { zoomBy(Math.exp(-dy * 0.01), p.x, p.y); return; }
342
- if (e.shiftKey || Math.abs(dx) > Math.abs(dy)) { lv.x -= e.shiftKey && !dx ? 0 : dx; lv.y -= e.shiftKey ? dy : 0; lv.fitted = false; applyZoom(); return; }
473
+ if (scrolls() && !e.shiftKey && Math.abs(dy) >= Math.abs(dx)) { lv.anchor = null; lv.y -= dy; applyZoom(); return; }
474
+ if (e.shiftKey || Math.abs(dx) > Math.abs(dy)) { lv.anchor = null; lv.x -= e.shiftKey && !dx ? 0 : dx; lv.y -= e.shiftKey ? dy : 0; lv.fitted = false; applyZoom(); return; }
343
475
  zoomBy(Math.exp(-dy * 0.002), p.x, p.y);
344
476
  }, { passive: false });
345
477
  port.addEventListener("dblclick", function (e) {
@@ -375,6 +507,7 @@ export const SLATE_UI_VIEWER = String.raw `
375
507
  }
376
508
  lv.x += p.x - last.x;
377
509
  lv.y += p.y - last.y;
510
+ lv.anchor = null;
378
511
  lv.fitted = false;
379
512
  applyZoom();
380
513
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-script-viewer.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-viewer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmYxC,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-script-viewer.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-viewer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmgBxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-script.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AA2B3D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,KAAG,MAuB/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":"AAsBA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AA2B3D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,KAAG,MAyB/C,CAAC;AAEb,eAAO,MAAM,eAAe,QAA8B,CAAC"}
@@ -3,12 +3,14 @@ import { SLATE_UI_LOCALES } from './mcp-slate-ui-locales/index.js';
3
3
  import { SLATE_EDIT_PROMPT_MAX_BYTES, SLATE_UI_TOOLS } from './slate-view-contract.js';
4
4
  import { SLATE_UI_BRIDGE } from './mcp-slate-ui-script-bridge.js';
5
5
  import { SLATE_UI_BROWSER } from './mcp-slate-ui-script-browser.js';
6
+ import { SLATE_UI_BOARD } from './mcp-slate-ui-script-board.js';
6
7
  import { SLATE_UI_DESIGNS } from './mcp-slate-ui-script-designs.js';
7
8
  import { SLATE_UI_EDIT } from './mcp-slate-ui-script-edit.js';
8
9
  import { SLATE_UI_INLINE } from './mcp-slate-ui-script-inline.js';
9
10
  import { SLATE_UI_INSPIRATION } from './mcp-slate-ui-script-inspiration.js';
10
11
  import { buildSlateUiL10n } from './mcp-slate-ui-script-l10n.js';
11
12
  import { SLATE_UI_MORE } from './mcp-slate-ui-script-more.js';
13
+ import { SLATE_UI_PEEK } from './mcp-slate-ui-script-peek.js';
12
14
  import { SLATE_UI_NO_PAUSE, SLATE_UI_PAUSE } from './mcp-slate-ui-script-pause.js';
13
15
  import { SLATE_UI_REFERENCES } from './mcp-slate-ui-script-references.js';
14
16
  import { SLATE_UI_REMOTE } from './mcp-slate-ui-script-remote.js';
@@ -59,6 +61,7 @@ export const buildSlateUiScript = (target) => [
59
61
  SLATE_UI_REFERENCES,
60
62
  target === 'remote' ? SLATE_UI_PAUSE : SLATE_UI_NO_PAUSE,
61
63
  SLATE_UI_DESIGNS,
64
+ SLATE_UI_BOARD,
62
65
  SLATE_UI_VIEWER,
63
66
  SLATE_UI_STAGE,
64
67
  SLATE_UI_EDIT.replace('__EDIT_PROMPT_MAX_BYTES__', () => JSON.stringify(SLATE_EDIT_PROMPT_MAX_BYTES)),
@@ -66,6 +69,7 @@ export const buildSlateUiScript = (target) => [
66
69
  SLATE_UI_SCRIBBLE,
67
70
  SLATE_UI_REMOTE,
68
71
  SLATE_UI_BROWSER,
72
+ SLATE_UI_PEEK,
69
73
  HANDSHAKE,
70
74
  '})();',
71
75
  ].join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-script.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-slate-ui-script.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * A branch's board (mcp-slate-ui-script-board.ts) and its column in the large view. Columns run across and scroll when
3
+ * the board is wider than the frame: about two at the Codex inline width, four at 1440 px, one and a bit on a phone. A
4
+ * web page's column is one frame with its screens flush (no gap, no seam); an app's column frames each state on its own.
5
+ */
6
+ export declare const SLATE_UI_BOARD_STYLES: string;
7
+ //# sourceMappingURL=mcp-slate-ui-styles-board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-styles-board.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-board.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAuBjC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * A branch's board (mcp-slate-ui-script-board.ts) and its column in the large view. Columns run across and scroll when
3
+ * the board is wider than the frame: about two at the Codex inline width, four at 1440 px, one and a bit on a phone. A
4
+ * web page's column is one frame with its screens flush (no gap, no seam); an app's column frames each state on its own.
5
+ */
6
+ export const SLATE_UI_BOARD_STYLES = String.raw `
7
+ .dboard { display: flex; align-items: flex-start; gap: 20px; min-width: 0; overflow-x: auto; padding: 2px 2px 10px; scrollbar-width: thin; }
8
+ .bcol { flex: none; width: max(min(340px, 44%), min(260px, 80%)); min-width: 0; }
9
+ .bchead { display: flex; align-items: center; gap: 6px; min-width: 0; min-height: 24px; margin-bottom: 8px; }
10
+ .bctitle { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; font-weight: 600; }
11
+ .bctitle.waiting { width: 45%; height: 12px; border-radius: 6px; background: var(--fill); }
12
+ .bstack { position: relative; display: flex; flex-direction: column; border-radius: var(--radius); overflow: hidden; background: var(--fill); }
13
+ .bstack::after, .bcol[data-flow="states"] .bshot::after { content: ""; position: absolute; inset: 0; border-radius: inherit; box-shadow: inset 0 0 0 1px var(--border2); pointer-events: none; }
14
+ .bcol[data-flow="states"] .bstack { gap: 10px; border-radius: 0; overflow: visible; background: none; }
15
+ .bcol[data-flow="states"] .bstack::after { display: none; }
16
+ .bcol[data-flow="states"] .bshot { border-radius: var(--radius); overflow: hidden; background: var(--fill); }
17
+
18
+ .bshot { position: relative; min-width: 0; }
19
+ button.bface { position: relative; display: block; width: 100%; aspect-ratio: var(--ar, 1.5); padding: 0; border: 0; border-radius: 0; background: var(--fill); overflow: hidden; cursor: zoom-in; }
20
+ button.bface:disabled { opacity: 1; cursor: default; }
21
+ .bface .thumb { display: block; width: 100%; height: 100%; object-fit: cover; }
22
+ .bface .thumb:not([src]) { visibility: hidden; }
23
+ .bshot.chosen::before { content: ""; position: absolute; inset: 0; z-index: 1; box-shadow: inset 0 0 0 3px var(--ring); pointer-events: none; }
24
+ .bshot:hover .dpick, .bshot:focus-within .dpick { opacity: 1; }
25
+ .lvstage.column { box-shadow: none; }
26
+ .lvstage.column[data-flow="page"] { box-shadow: var(--elev-lg); }
27
+ .lvshot { position: absolute; left: 0; width: 100%; overflow: hidden; background: var(--bg); }
28
+ .lvstage.column[data-flow="states"] .lvshot { box-shadow: var(--elev-lg); }
29
+ `;
30
+ //# sourceMappingURL=mcp-slate-ui-styles-board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-styles-board.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-board.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;CAuB9C,CAAC"}
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * The Designs tab and the large view. Tiles are large and keep the frame's shape (`--ar` per tile); a grid's columns
3
3
  * are no narrower than `--tile` times the square root of its ratio (`--shape`), so a 3:2 design is about 160 px wide on
4
- * a phone (two across), 220 px in a card (three across) and 300 px in the workspace (four across at 1440 px). Under
4
+ * a phone (two across), 300 px in a card (two across in Codex's inline frame) and 400 px in the workspace (three across
5
+ * at 1440 px). A slot being drawn is the loading surface (mcp-slate-ui-styles-loading.ts). Under
5
6
  * each picture is one row: the code (and where it came from, or its page) at the left, the four icon actions at the
6
7
  * right, so nothing covers the design. The chosen design has the selection's own language: a thick ring in the host's
7
8
  * accent and a filled check on the picture.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-styles-designs.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-designs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,QA+GnC,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-styles-designs.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-designs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,QAgHnC,CAAC"}
@@ -1,15 +1,16 @@
1
1
  /**
2
2
  * The Designs tab and the large view. Tiles are large and keep the frame's shape (`--ar` per tile); a grid's columns
3
3
  * are no narrower than `--tile` times the square root of its ratio (`--shape`), so a 3:2 design is about 160 px wide on
4
- * a phone (two across), 220 px in a card (three across) and 300 px in the workspace (four across at 1440 px). Under
4
+ * a phone (two across), 300 px in a card (two across in Codex's inline frame) and 400 px in the workspace (three across
5
+ * at 1440 px). A slot being drawn is the loading surface (mcp-slate-ui-styles-loading.ts). Under
5
6
  * each picture is one row: the code (and where it came from, or its page) at the left, the four icon actions at the
6
7
  * right, so nothing covers the design. The chosen design has the selection's own language: a thick ring in the host's
7
8
  * accent and a filled check on the picture.
8
9
  */
9
10
  export const SLATE_UI_DESIGNS_STYLES = String.raw `
10
11
  .designs { --tile: 130px; display: flex; flex-direction: column; gap: 22px; min-width: 0; }
11
- @container (min-width: 480px) { .designs { --tile: 180px; } }
12
- #stage .designs { --tile: 245px; }
12
+ @container (min-width: 480px) { .designs { --tile: 250px; } }
13
+ #stage .designs { --tile: 330px; }
13
14
  @media (max-width: 639px) { #stage .designs { --tile: 130px; } }
14
15
 
15
16
  /* The bar: how many a round draws, and More. */
@@ -32,13 +33,14 @@ export const SLATE_UI_DESIGNS_STYLES = String.raw `
32
33
  .feedimg:not([src]) { visibility: hidden; }
33
34
  .feedmore { flex: none; font-size: 11px; color: var(--text2); padding-left: 2px; }
34
35
  .dnote { min-width: 0; flex: 0 1 auto; font-size: 12px; color: var(--text2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
36
+ .dcaption { min-width: 0; flex: 1 1 0; font-size: 12px; color: var(--text2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
37
+ .dcaption + .spacer { display: none; }
35
38
  .dstat { display: inline-flex; align-items: center; gap: 6px; flex: none; font-size: 12px; color: var(--text2); font-variant-numeric: tabular-nums; }
36
39
  .dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; }
37
40
  .dot.run { background: var(--ring); animation: pulse 1.2s ease-in-out infinite; }
38
41
  .dot.err { background: var(--danger); }
39
42
  @keyframes pulse { 50% { opacity: .3; } }
40
43
  .earlier { align-self: center; color: var(--text2); }
41
- .dsec.branch .dgrid { padding-left: 14px; border-left: 2px solid var(--ring); margin-left: 10px; }
42
44
 
43
45
  .dgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, calc(var(--tile) * var(--shape, 1.22))), 1fr)); gap: 14px 12px; align-items: start; min-width: 0; }
44
46
  #stage .dgrid { gap: 20px 16px; }
@@ -57,11 +59,9 @@ export const SLATE_UI_DESIGNS_STYLES = String.raw `
57
59
  /* Under the picture: its letter and, where there is one, where it came from; the words shorten with an ellipsis (the full words are the tag's title). */
58
60
  .dmeta { display: flex; flex-wrap: nowrap; align-items: center; gap: 0 4px; min-width: 0; min-height: 28px; margin-top: 4px; }
59
61
  .dtag { display: inline-flex; align-items: baseline; gap: 6px; min-width: 0; max-width: 100%; flex: 1 1 auto; overflow: hidden; white-space: nowrap; }
60
- .dtag .code { position: static; flex: none; padding: 0 7px; border-radius: 999px; background: var(--fill); color: var(--text); font-size: 12px; font-weight: 600; line-height: 20px; }
62
+ .dtag .code, .bchead .code { position: static; flex: none; padding: 0 7px; border-radius: 999px; background: var(--fill); color: var(--text); font-size: 12px; font-weight: 600; line-height: 20px; }
61
63
  .dfrom { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; font-size: 12px; color: var(--text2); }
62
64
  .dpage { min-width: 0; font-size: 12px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; }
63
- .spin { position: absolute; left: 50%; top: 50%; width: 26px; height: 26px; margin: -13px 0 0 -13px; border: 2.5px solid var(--border); border-top-color: var(--text2); border-radius: 50%; animation: spin .9s linear infinite; }
64
- @keyframes spin { to { transform: rotate(360deg); } }
65
65
  .dtile.loading .dtag .code { background: transparent; box-shadow: inset 0 0 0 1px var(--border); color: var(--text2); }
66
66
  /* The tile's one action: a labelled pill over the picture's top right, on hover or keyboard focus, always on a touch screen. */
67
67
  .dpick { position: absolute; right: 8px; top: 8px; z-index: 2; padding: 5px 12px; border: 0; border-radius: 999px; background: var(--bg); color: var(--text); font-size: 12px; font-weight: 600; box-shadow: var(--elev); opacity: 0; transition: opacity .12s; }
@@ -111,10 +111,12 @@ export const SLATE_UI_DESIGNS_STYLES = String.raw `
111
111
  .lvacts { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; }
112
112
  .lvform { display: flex; align-items: center; gap: 4px; width: min(720px, 100%); padding: 4px 4px 4px 6px; border: 1px solid var(--border); border-radius: 999px; background: var(--bg); }
113
113
  .lvform:focus-within { border-color: var(--ring); }
114
+ .seg.lvscope { display: inline-flex; flex: none; padding: 2px; border-radius: 999px; background: var(--fill); }
115
+ .lvscope button.segbtn { white-space: nowrap; }
114
116
  .lvmode { display: inline-grid; place-items: center; flex: none; width: 30px; height: 30px; border-radius: 50%; background: var(--accent-solid); color: var(--inverse-text); }
115
117
  input.lvinput { flex: 1 1 auto; min-width: 0; padding: 8px 6px; border: 0; background: transparent; color: var(--text); font: inherit; }
116
118
  input.lvinput:focus-visible { outline: none; }
117
- @media (prefers-reduced-motion: reduce) { .dot.run { animation: none; } button.dface { transition: none; } .dpick { transition: none; } .spin { animation-duration: 2.4s; } }
119
+ @media (prefers-reduced-motion: reduce) { .dot.run { animation: none; } button.dface { transition: none; } .dpick { transition: none; } }
118
120
  /* The scribble layer of the large view's edit lies exactly over the picture. */
119
121
  .scribble { position: absolute; inset: 0; width: 100%; height: 100%; cursor: crosshair; touch-action: none; }
120
122
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-styles-designs.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-designs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GhD,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-styles-designs.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-designs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHhD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-styles-inspiration.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-inspiration.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B,QA2DvC,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-styles-inspiration.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-inspiration.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B,QAsEvC,CAAC"}
@@ -18,6 +18,8 @@ export const SLATE_UI_INSPIRATION_STYLES = String.raw `
18
18
  .insp { container-type: inline-size; }
19
19
  .refs { container-type: inline-size; }
20
20
  .insp > .status { margin: 0 0 10px; }
21
+ /* One quiet sentence on what the tab is doing for this brief: no icon, no box. */
22
+ .tabcaption { margin: 0 0 8px; font-size: var(--fs-sm); line-height: 1.35; color: var(--text2); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
21
23
  .results { min-width: 0; }
22
24
  /* The gutter is kept, so the scroll bar coming and going never changes the collage's width. */
23
25
  .insp.card .results { max-height: max(360px, 72cqw); overflow-y: auto; scrollbar-gutter: stable; padding: 2px; }
@@ -40,8 +42,17 @@ export const SLATE_UI_INSPIRATION_STYLES = String.raw `
40
42
  .zoombtn svg { width: 15px; height: 15px; }
41
43
  @media (hover: hover) { .gtile .zoombtn { opacity: 0; transition: opacity .12s; } .gtile:hover .zoombtn, .gtile .zoombtn:focus-visible { opacity: 1; } }
42
44
  .skelgrid:empty { display: none; }
43
- .skelgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr)); gap: 16px; }
44
- .skelgrid > .skeleton { height: 160px; border-radius: var(--radius); }
45
+ .skelgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 16px; }
46
+ .skelgrid > .skeleton { height: 200px; border-radius: var(--radius); }
47
+ /* A captioned grid (References): the picture, then its name and its site's domain (a link) in the reserved strip. */
48
+ .captioned .refbtn { bottom: auto; height: calc(100% - 42px); }
49
+ .gcap { position: absolute; left: 2px; right: 2px; bottom: 0; height: 42px; display: flex; flex-direction: column; justify-content: center; gap: 1px; min-width: 0; line-height: 16px; }
50
+ .gname { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--fs-sm); font-weight: 600; color: var(--text); }
51
+ .gdomain { align-self: flex-start; max-width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--fs-sm); color: var(--text2); text-decoration: none; }
52
+ .gdomain:hover { color: var(--ring); text-decoration: underline; }
53
+ .gdomain:focus-visible { outline: 2px solid var(--ring); outline-offset: 1px; border-radius: 3px; }
54
+ .gtile.pending .refbtn { cursor: default; background: var(--fill); }
55
+ .gtile.pending .refbtn:disabled { opacity: 1; }
45
56
  .placeholder { display: grid; place-items: center; min-height: 160px; border-radius: var(--radius); background: var(--fill); color: var(--text2); padding: 16px; text-align: center; font-size: var(--fs-sm); }
46
57
  /* The tray: the picks, the countdown while a round waits, and the one action. */
47
58
  .tray { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--border2); background: var(--bg); min-width: 0; }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-styles-inspiration.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-inspiration.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DpD,CAAC"}
1
+ {"version":3,"file":"mcp-slate-ui-styles-inspiration.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-inspiration.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEpD,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The loading surface, everywhere a picture is on its way (`.shimmer`): an Inspiration or References tile until its
3
+ * picture lands, the skeleton tiles of a first search, a reference site whose screenshot is still being captured, and a
4
+ * design slot while it is drawn.
5
+ *
6
+ * A field of fine dots in the host's ink whose brightness ripples across the frame: one soft crest with a faint echo,
7
+ * travelling diagonally. The wave is fixed to the frame (`background-attachment: fixed`), so every loading tile on
8
+ * screen is a window onto the same wave and a grid of them reads as one calm surface rather than many blinking boxes.
9
+ *
10
+ * - On a picture (`img.shimmer`, no pixels yet) the dots are the picture's own mask, so its tile's ground shows between
11
+ * them; on anything else they are an overlay (`::before`) over the element's own ground, under its content.
12
+ * - The colours are the host's ink (`--text`) mixed into transparency, so Codex's light and dark themes drive it.
13
+ * - Reduced motion: still dots, no wave.
14
+ * - Chosen over the web's light band (apps/web generatedDesignPromptEdit.css) side by side in light and dark (evidence
15
+ * 12ui/slate-ui-polish/loading): the band must stay faint not to glare in light, and then all but vanishes on dark.
16
+ */
17
+ export declare const SLATE_UI_LOADING_STYLES: string;
18
+ //# sourceMappingURL=mcp-slate-ui-styles-loading.d.ts.map