@jxsuite/studio 10.0.0 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/dist/chunks/{2020-j56903f1.js → 2020-bx702wqa.js} +3 -3
  2. package/dist/chunks/adapter-pp011m5x.js +4 -0
  3. package/dist/chunks/add-new-flow-ecqmzz76.js +4 -0
  4. package/dist/chunks/cf-account-picker-c07znkqt.js +4 -0
  5. package/dist/chunks/cf-settings-0v2bmqy0.js +4 -0
  6. package/dist/chunks/components-yn0dn2pq.js +4 -0
  7. package/dist/chunks/content-source-g0j41yy6.js +4 -0
  8. package/dist/chunks/{convert-to-repeater-fhdwyg14.js → convert-to-repeater-sbjk7tgn.js} +3 -3
  9. package/dist/chunks/editor-xz02jeh1.js +4 -0
  10. package/dist/chunks/entry-commands-kmt02crp.js +4 -0
  11. package/dist/chunks/extension-sections-0rprf12d.js +4 -0
  12. package/dist/chunks/file-ops-mexj5qed.js +4 -0
  13. package/dist/chunks/files-b2tcppdd.js +4 -0
  14. package/dist/chunks/format-host-btsevv0c.js +4 -0
  15. package/dist/chunks/fs-events-r0apejva.js +4 -0
  16. package/dist/chunks/grid-open-n2a8xkht.js +4 -0
  17. package/dist/chunks/{grid-view-ka55z38f.js → grid-view-tghcwrrt.js} +12 -12
  18. package/dist/chunks/iframe-host-gx0ypyh3.js +4 -0
  19. package/dist/chunks/index-bs4k9tr6.js +4 -0
  20. package/dist/chunks/{index-qb98xhse.js → index-vr006kbt.js} +3 -3
  21. package/dist/chunks/{javascript-ces13wny.js → javascript-z1g3s9fd.js} +2 -2
  22. package/dist/chunks/{jsonMode-6md16d4v.js → jsonMode-7szwg8c4.js} +5 -5
  23. package/dist/chunks/jx-validate-ymf10teh.js +4 -0
  24. package/dist/chunks/layers-p9nfya38.js +4 -0
  25. package/dist/chunks/layers-panel-tt1hzhhf.js +4 -0
  26. package/dist/chunks/lit-html-x18n2sfz.js +4 -0
  27. package/dist/chunks/media-library-0n45gv8r.js +4 -0
  28. package/dist/chunks/media-picker-s09at95z.js +4 -0
  29. package/dist/chunks/{monaco-binding-p8j80s4w.js → monaco-binding-v42w9c1v.js} +3 -3
  30. package/dist/chunks/monaco-buffer-een2ea0v.js +4 -0
  31. package/dist/chunks/{monaco-setup-wasktzfg.js → monaco-setup-7bffxd6v.js} +3 -3
  32. package/dist/chunks/notify-qwb8radt.js +4 -0
  33. package/dist/chunks/parse-v77xtwv7.js +4 -0
  34. package/dist/chunks/platform-8jnez0wr.js +4 -0
  35. package/dist/chunks/publish-panel-aysnj611.js +4 -0
  36. package/dist/chunks/{publish-quick-vr695j26.js → publish-quick-kpbqs9mz.js} +3 -3
  37. package/dist/chunks/publish-workspace-nd0a8q99.js +4 -0
  38. package/dist/chunks/quick-search-vg0jkhk2.js +4 -0
  39. package/dist/chunks/references-a7v6a0e2.js +4 -0
  40. package/dist/chunks/right-panel-cvk1vxx5.js +4 -0
  41. package/dist/chunks/source-control-fsqzc6he.js +4 -0
  42. package/dist/chunks/studio-05jfwbmf.js +5 -0
  43. package/dist/chunks/{studio-hy4ye0dx.js → studio-0q5jwddh.js} +7 -7
  44. package/dist/chunks/{studio-jttyqrmh.js → studio-0w2dr0q8.js} +4 -4
  45. package/dist/chunks/{studio-xkxetm65.js → studio-1tzpds97.js} +5 -5
  46. package/dist/chunks/{studio-m48v13s3.js → studio-216b27sv.js} +3 -3
  47. package/dist/chunks/studio-2ejhqns4.js +5 -0
  48. package/dist/chunks/studio-2r90cts3.js +16 -0
  49. package/dist/chunks/{studio-h310mbqm.js → studio-399a25za.js} +4 -4
  50. package/dist/chunks/studio-399xknkb.js +6 -0
  51. package/dist/chunks/{studio-wxhy1yh7.js → studio-43y04qck.js} +4 -4
  52. package/dist/chunks/{studio-06j4en5h.js → studio-4g8yb6jn.js} +2 -2
  53. package/dist/chunks/{studio-jw0q5j6k.js → studio-4jhw38b2.js} +4 -4
  54. package/dist/chunks/{studio-3v5cagy9.js → studio-4ncmwqw5.js} +4 -4
  55. package/dist/chunks/studio-5atwjgkj.js +7 -0
  56. package/dist/chunks/{studio-gr36vnte.js → studio-5frqk7c0.js} +4 -4
  57. package/dist/chunks/{studio-9dz76yqc.js → studio-646nn2ys.js} +5 -5
  58. package/dist/chunks/{studio-tj2s0tks.js → studio-6cwj6xrx.js} +4 -4
  59. package/dist/chunks/studio-6hzdjfv0.js +5 -0
  60. package/dist/chunks/{studio-hcsba201.js → studio-71m92v9s.js} +7 -7
  61. package/dist/chunks/{studio-3c8pp7pb.js → studio-75kcdbsk.js} +4 -4
  62. package/dist/chunks/{studio-gwrhcrss.js → studio-78pywnp2.js} +5 -5
  63. package/dist/chunks/{studio-9cxmp61c.js → studio-86r8hp7r.js} +5 -5
  64. package/dist/chunks/studio-886t6ztg.js +5 -0
  65. package/dist/chunks/studio-8wnvtr4z.js +5 -0
  66. package/dist/chunks/studio-8z66jk4z.js +5 -0
  67. package/dist/chunks/{studio-ajw4k8hp.js → studio-9rbe2xpw.js} +3 -3
  68. package/dist/chunks/{studio-y26hx9re.js → studio-awxwjawq.js} +4 -4
  69. package/dist/chunks/studio-b2qpt0xy.js +14 -0
  70. package/dist/chunks/{studio-dx73md4n.js → studio-bvs9kpst.js} +7 -7
  71. package/dist/chunks/studio-c71806xz.js +7 -0
  72. package/dist/chunks/{studio-7dzyz9n8.js → studio-cbwks69x.js} +144 -144
  73. package/dist/chunks/studio-cg1bfyhf.js +9 -0
  74. package/dist/chunks/studio-cg710sk9.js +5 -0
  75. package/dist/chunks/studio-cw0wb9qk.js +7 -0
  76. package/dist/chunks/studio-cyheys7k.js +5 -0
  77. package/dist/chunks/studio-ea5m9kg5.js +5 -0
  78. package/dist/chunks/{studio-ry81j4q1.js → studio-ea74s8c1.js} +4 -4
  79. package/dist/chunks/{studio-xdpz9rpe.js → studio-efdxjwyp.js} +34 -34
  80. package/dist/chunks/{studio-agyvzfm4.js → studio-egmw2837.js} +4 -4
  81. package/dist/chunks/{studio-5tzgq6fx.js → studio-er5f383a.js} +4 -4
  82. package/dist/chunks/studio-f746039f.js +5 -0
  83. package/dist/chunks/studio-fmdymd9v.js +5 -0
  84. package/dist/chunks/studio-gcm12z00.js +6 -0
  85. package/dist/chunks/{studio-vswcpzk7.js → studio-gj98m8gy.js} +5 -5
  86. package/dist/chunks/{studio-yg3djpnm.js → studio-hasbgjah.js} +4 -4
  87. package/dist/chunks/studio-hhp4x8xf.js +6 -0
  88. package/dist/chunks/{studio-3w35qvay.js → studio-hz5n7x27.js} +4 -4
  89. package/dist/chunks/{studio-7xag4na8.js → studio-j3d2fjqz.js} +4 -4
  90. package/dist/chunks/studio-jeraxdgv.js +7 -0
  91. package/dist/chunks/studio-jvgek9xt.js +5 -0
  92. package/dist/chunks/studio-jws1a87n.js +5 -0
  93. package/dist/chunks/studio-k2sz13zg.js +5 -0
  94. package/dist/chunks/studio-k3m4jkdk.js +5 -0
  95. package/dist/chunks/{studio-r17asgs0.js → studio-kg1abnz0.js} +4 -4
  96. package/dist/chunks/{studio-s0fg2wav.js → studio-kg5ya5r2.js} +4 -4
  97. package/dist/chunks/studio-khwbgrtg.js +5 -0
  98. package/dist/chunks/studio-mx6wzh25.js +5 -0
  99. package/dist/chunks/studio-mxs3ar9t.js +5 -0
  100. package/dist/chunks/studio-nm4szey4.js +5 -0
  101. package/dist/chunks/studio-nqxqf8p2.js +4 -0
  102. package/dist/chunks/{studio-h5tpz5ke.js → studio-pjtntksy.js} +4 -4
  103. package/dist/chunks/studio-qh8berdz.js +5 -0
  104. package/dist/chunks/studio-qn7z4krm.js +5 -0
  105. package/dist/chunks/studio-qyed0ah6.js +5 -0
  106. package/dist/chunks/{studio-x97ay0v4.js → studio-r4bcdwhq.js} +4 -4
  107. package/dist/chunks/{studio-wxdcd42g.js → studio-r7pf0rkv.js} +6 -6
  108. package/dist/chunks/studio-rtfnhrdg.js +5 -0
  109. package/dist/chunks/{studio-fy7jzj9j.js → studio-rzqaz21g.js} +4 -4
  110. package/dist/chunks/studio-s5tzw84t.js +5 -0
  111. package/dist/chunks/{studio-1e8dw2w2.js → studio-sevbc3xv.js} +4 -4
  112. package/dist/chunks/{studio-ewarnzm4.js → studio-sxdb9h3q.js} +6 -6
  113. package/dist/chunks/studio-t51y8v1d.js +5 -0
  114. package/dist/chunks/{studio-k3bcy02e.js → studio-t98vq4r6.js} +4 -4
  115. package/dist/chunks/studio-th7z3fg7.js +5 -0
  116. package/dist/chunks/studio-tsxpqvh0.js +6 -0
  117. package/dist/chunks/{studio-396srjbk.js → studio-v1yascv2.js} +4 -4
  118. package/dist/chunks/{studio-ekgtrndg.js → studio-wc6za3zs.js} +4 -4
  119. package/dist/chunks/{studio-ndskgqef.js → studio-wxq6v5sv.js} +4 -4
  120. package/dist/chunks/{studio-4kzbrr5t.js → studio-y60sts62.js} +3 -3
  121. package/dist/chunks/studio-ybnwymxw.js +5 -0
  122. package/dist/chunks/studio-zndrqawb.js +5 -0
  123. package/dist/chunks/studio-zwaxn5s2.js +5 -0
  124. package/dist/chunks/{tsMode-h6tkz0ea.js → tsMode-f54j66ym.js} +5 -5
  125. package/dist/chunks/workspace-home-x1787wpv.js +4 -0
  126. package/dist/chunks/workspace-zpe1np43.js +4 -0
  127. package/dist/chunks/{ws-client-e951my95.js → ws-client-e8kj684q.js} +3 -3
  128. package/dist/manifest.json +76 -75
  129. package/dist/studio.js +83 -81
  130. package/package.json +4 -4
  131. package/src/browse/library-model.ts +56 -23
  132. package/src/commands/context.ts +1 -0
  133. package/src/editor/shortcuts.ts +3 -0
  134. package/src/panels/data-grid.ts +0 -4
  135. package/src/panels/settings-menu.ts +3 -3
  136. package/src/panels/settings-pane.ts +42 -56
  137. package/src/platform-errors.ts +17 -1
  138. package/src/platforms/cloud.ts +14 -0
  139. package/src/publish/publish-changes.ts +136 -4
  140. package/src/services/ai-import-tools.ts +6 -3
  141. package/src/services/ai-models.ts +65 -11
  142. package/src/services/ai-settings.ts +45 -5
  143. package/src/services/document-assistant.ts +5 -2
  144. package/src/services/settings/definitions.ts +19 -0
  145. package/src/settings/contributed-section.ts +16 -7
  146. package/src/settings/css-vars-editor.ts +4 -4
  147. package/src/settings/general-settings.ts +1 -4
  148. package/src/settings/preferences-accounts.ts +2 -2
  149. package/src/settings/preferences-dialog.ts +4 -2
  150. package/src/settings/project-sections.ts +1 -1
  151. package/src/settings/section-registry.ts +5 -4
  152. package/src/settings/settings-document.ts +33 -24
  153. package/src/settings/settings-workspace.ts +205 -0
  154. package/src/shell.ts +31 -6
  155. package/src/surfaces/ai-credentials-form.json +59 -5
  156. package/src/surfaces/ai-credentials-form.ts +15 -2
  157. package/src/surfaces/commandbar.ts +7 -3
  158. package/src/surfaces/settings-contributed.json +4 -4
  159. package/src/surfaces/settings-contributed.ts +2 -2
  160. package/src/surfaces/settings-pane.json +262 -180
  161. package/src/surfaces/settings-pane.ts +63 -14
  162. package/src/types.ts +14 -0
  163. package/src/ui/ai-credentials-form.ts +128 -11
  164. package/src/ui/regions.ts +5 -5
  165. package/src/workspace/tab-workspace.ts +3 -2
  166. package/src/workspace/workspace-home.ts +18 -4
  167. package/src/workspace/workspace-ids.ts +40 -7
  168. package/dist/chunks/adapter-wc5zvg9a.js +0 -4
  169. package/dist/chunks/add-new-flow-snx1s4b0.js +0 -4
  170. package/dist/chunks/cf-account-picker-xyqw0jex.js +0 -4
  171. package/dist/chunks/cf-settings-hp1pjm0n.js +0 -4
  172. package/dist/chunks/components-nkwphrx3.js +0 -4
  173. package/dist/chunks/content-source-6a253wmk.js +0 -4
  174. package/dist/chunks/editor-wqrc68ca.js +0 -4
  175. package/dist/chunks/entry-commands-nef0wrmp.js +0 -4
  176. package/dist/chunks/extension-sections-8ez2rrk8.js +0 -4
  177. package/dist/chunks/file-ops-y3w71k1n.js +0 -4
  178. package/dist/chunks/files-de90apn9.js +0 -4
  179. package/dist/chunks/format-host-zfjz4rzm.js +0 -4
  180. package/dist/chunks/fs-events-77c0mr0x.js +0 -4
  181. package/dist/chunks/grid-open-4n4fjfpf.js +0 -4
  182. package/dist/chunks/iframe-host-na2mywz4.js +0 -4
  183. package/dist/chunks/index-ewmgdb7c.js +0 -4
  184. package/dist/chunks/jx-validate-b309c020.js +0 -4
  185. package/dist/chunks/layers-8rn8y6qv.js +0 -4
  186. package/dist/chunks/layers-panel-eyah7h9z.js +0 -4
  187. package/dist/chunks/lit-html-wyqw04y2.js +0 -4
  188. package/dist/chunks/media-library-gs3np47y.js +0 -4
  189. package/dist/chunks/media-picker-tt7dk4tb.js +0 -4
  190. package/dist/chunks/monaco-buffer-wsf6cmnq.js +0 -4
  191. package/dist/chunks/notify-qwst108r.js +0 -4
  192. package/dist/chunks/parse-n8dfxnqf.js +0 -4
  193. package/dist/chunks/platform-c16mqvmp.js +0 -4
  194. package/dist/chunks/publish-panel-d34bhvwj.js +0 -4
  195. package/dist/chunks/publish-workspace-2yr60mt4.js +0 -4
  196. package/dist/chunks/quick-search-e6xsdv0d.js +0 -4
  197. package/dist/chunks/references-gsj6trdv.js +0 -4
  198. package/dist/chunks/right-panel-33jv1knc.js +0 -4
  199. package/dist/chunks/source-control-bj9bejjv.js +0 -4
  200. package/dist/chunks/studio-03mqh8ax.js +0 -5
  201. package/dist/chunks/studio-0ydxv2mr.js +0 -7
  202. package/dist/chunks/studio-2hsqbq7b.js +0 -7
  203. package/dist/chunks/studio-2j86y34y.js +0 -6
  204. package/dist/chunks/studio-2ks6ka4g.js +0 -5
  205. package/dist/chunks/studio-34jrz12k.js +0 -5
  206. package/dist/chunks/studio-35vrtpdq.js +0 -5
  207. package/dist/chunks/studio-38g0jdz7.js +0 -5
  208. package/dist/chunks/studio-3zge48z4.js +0 -7
  209. package/dist/chunks/studio-45gyxpcq.js +0 -5
  210. package/dist/chunks/studio-5wzdy1jc.js +0 -16
  211. package/dist/chunks/studio-732mw0g8.js +0 -5
  212. package/dist/chunks/studio-771k2n12.js +0 -5
  213. package/dist/chunks/studio-88bmt9rh.js +0 -5
  214. package/dist/chunks/studio-c1pxszat.js +0 -5
  215. package/dist/chunks/studio-cpkamjdn.js +0 -14
  216. package/dist/chunks/studio-d038kqbs.js +0 -5
  217. package/dist/chunks/studio-d83m0wyq.js +0 -5
  218. package/dist/chunks/studio-dbxv7w4s.js +0 -5
  219. package/dist/chunks/studio-de1s2x9v.js +0 -5
  220. package/dist/chunks/studio-epenqmvk.js +0 -7
  221. package/dist/chunks/studio-et2q4s8n.js +0 -5
  222. package/dist/chunks/studio-h7weqf2q.js +0 -5
  223. package/dist/chunks/studio-hwejq03c.js +0 -5
  224. package/dist/chunks/studio-k3a8rp3d.js +0 -5
  225. package/dist/chunks/studio-p1n2xjda.js +0 -5
  226. package/dist/chunks/studio-pgm83a2f.js +0 -6
  227. package/dist/chunks/studio-pqqq6v85.js +0 -5
  228. package/dist/chunks/studio-psh8mwnw.js +0 -4
  229. package/dist/chunks/studio-rzg8hnkf.js +0 -5
  230. package/dist/chunks/studio-tyw7tk0x.js +0 -5
  231. package/dist/chunks/studio-v9ywz2se.js +0 -6
  232. package/dist/chunks/studio-vzgmyt0v.js +0 -5
  233. package/dist/chunks/studio-x08a3m0a.js +0 -5
  234. package/dist/chunks/studio-x3mjr5cc.js +0 -5
  235. package/dist/chunks/studio-xh683qzy.js +0 -5
  236. package/dist/chunks/studio-yx8hzqja.js +0 -5
  237. package/dist/chunks/studio-zg16eeq1.js +0 -5
  238. package/dist/chunks/studio-zgx7svjd.js +0 -9
  239. package/dist/chunks/studio-zkq3r91p.js +0 -5
  240. package/dist/chunks/workspace-home-zkkrxq3r.js +0 -4
  241. package/dist/chunks/workspace-tdqqjqaa.js +0 -4
  242. package/src/settings/settings-dialog.ts +0 -192
  243. package/src/surfaces/settings-dialog.json +0 -51
  244. package/src/surfaces/settings-dialog.ts +0 -169
@@ -24,7 +24,7 @@
24
24
  "marginBottom": "12px"
25
25
  },
26
26
  "& [part=\"columns\"]": {
27
- "$description": "The 1px gap over the border colour is the divider between the two columns: two panels on `--bg-panel` with `--border` showing through the gap, so nothing draws a rule of its own.",
27
+ "$description": "The 1px gap over the border colour is the divider between the two columns: two panels on the page's own `--bg` with `--border` showing through the gap, so nothing draws a rule of its own. The panels are `--bg`, not `--bg-panel`, because the section is drawn on the Settings home, whose background is `--bg`: a second shade under one section of the form reads as a box nobody asked for.",
28
28
  "display": "flex",
29
29
  "height": "100%",
30
30
  "gap": "1px",
@@ -37,7 +37,7 @@
37
37
  "padding": "12px",
38
38
  "width": "200px",
39
39
  "minWidth": "200px",
40
- "background": "var(--bg-panel)",
40
+ "background": "var(--bg)",
41
41
  "overflowY": "auto"
42
42
  },
43
43
  "& [part=\"entry\"], & [part=\"new-open\"]": {
@@ -62,7 +62,7 @@
62
62
  "display": "flex",
63
63
  "alignItems": "center",
64
64
  "justifyContent": "center",
65
- "background": "var(--bg-panel)",
65
+ "background": "var(--bg)",
66
66
  "color": "var(--fg-dim)",
67
67
  "fontSize": "13px"
68
68
  },
@@ -70,7 +70,7 @@
70
70
  "$description": "`min-width: 0` is the one line `.settings-editor-panel` did not have and needed: a flex child's floor is its content, and the schema form inside this one is a whole form rather than the short cards Data Shapes puts here — so a long pointer or a wide row pushed the column past the right edge of the pane instead of scrolling inside it.",
71
71
  "flex": "1",
72
72
  "padding": "16px",
73
- "background": "var(--bg-panel)",
73
+ "background": "var(--bg)",
74
74
  "overflowY": "auto",
75
75
  "minWidth": "0"
76
76
  },
@@ -41,7 +41,7 @@ export interface ContributedEntryView {
41
41
  /** The key in the section's map on disk — the row's identity and its `data-entry`. */
42
42
  key: string;
43
43
  selected: boolean;
44
- /** `overlay.dialog:settings/entry:<key>`, so a shot can name the row without a selector. */
44
+ /** `pane.<id>/settings/entry:<key>`, so a shot can name the row without a selector. */
45
45
  region: string;
46
46
  }
47
47
 
@@ -61,7 +61,7 @@ export interface ContributedView {
61
61
  editorState: "empty" | "editing";
62
62
  /** What the rename field holds — the key on disk, or what the reader has just typed. */
63
63
  entryName: string;
64
- /** `overlay.dialog:settings/editor`. */
64
+ /** `pane.<id>/settings/editor`. */
65
65
  editorRegion: string;
66
66
  /** The new-entry button: "New content type", or "New entry" when the section names none. */
67
67
  newLabel: string;
@@ -1,28 +1,52 @@
1
1
  {
2
2
  "$schema": "https://jxsuite.com/schema/v1",
3
3
  "$id": "StudioSettingsPane",
4
- "$description": "The Project Settings dialog's two columns: the grouped section list and the section body (§17.1). It draws no section: `panels/settings-pane.ts` keeps the registry, decides which section is current, and renders whichever one that is into the one empty `[part=\"section-host\"]` island this document leaves for it (studio-ui-guidelines.md §9.4), because a section renderer may be a lit template or a mounted document and neither can share a container with this one. The list is three vertical `tablist`s, one per group (General, Integrations, Advanced), each named by its group heading: a tablist may own only tabs, so a heading between two runs of rows has to END one list rather than sit inside it. Each group is one tab stop and the arrow keys move within it. Under the groups, a Moved footnote names what left Project Settings for a workspace, each with a button that goes there.",
4
+ "$description": "Project Settings' home (§17.1, §22.9): the Settings workspace's surface, filling a pane's stage. A head names the workspace and carries the Back control, which says where it goes; under it, the settings editor's two columns, the grouped section list and the section body. It draws no section: `panels/settings-pane.ts` keeps the registry, decides which section is current, and renders whichever one that is into the one empty `[part=\"section-host\"]` island this document leaves for it (studio-ui-guidelines.md §9.4), because a section renderer may be a lit template or a mounted document and neither can share a container with this one. The list is three vertical `tablist`s, one per group (General, Integrations, Advanced), each named by its group heading: a tablist may own only tabs, so a heading between two runs of rows has to END one list rather than sit inside it. Each group is one tab stop and the arrow keys move within it. Under the groups, a Moved footnote names what left Project Settings for a workspace, each with a button that goes there.",
5
5
  "tagName": "div",
6
6
  "attributes": {
7
- "part": "doc"
7
+ "part": "settings",
8
+ "data-jx-region": "${state.region}",
9
+ "role": "region",
10
+ "aria-labelledby": "settings-pane-heading"
8
11
  },
9
12
  "style": {
10
- "$description": "No part below is named `body`, `field`, `label`, `error`, `text` or `actions`: this document is mounted inside a `jx-dialog`, the kit is light DOM, and the dialog draws its own `[part=\"body\"]` around this one, so a rule keyed on that name here would also be a rule the dialog's own styles reach.",
13
+ "$description": "Fills the pane's stage by its own geometry, as the Publish and Media homes do: the stage is `position: relative`, so the home takes the whole of it, and each column scrolls itself. No part below is named `body`, `field`, `label`, `error`, `text` or `actions`: sections mount kit controls and documents of their own inside this one, the kit is light DOM, and a rule keyed on one of their part names here would reach into them.",
14
+ "position": "absolute",
15
+ "inset": "0",
11
16
  "display": "flex",
12
- "height": "min(68vh, 640px)",
17
+ "flexDirection": "column",
18
+ "boxSizing": "border-box",
13
19
  "minHeight": "0",
14
20
  "background": "var(--bg)",
15
21
  "color": "var(--fg)",
16
22
  "fontFamily": "var(--jx-font-sans)",
17
23
  "textAlign": "initial",
24
+ "& [part=\"head\"]": {
25
+ "display": "flex",
26
+ "alignItems": "center",
27
+ "gap": "var(--jx-space-3)",
28
+ "padding": "var(--jx-space-3) var(--jx-space-5)",
29
+ "borderBottom": "1px solid var(--border)"
30
+ },
31
+ "& [part=\"heading\"]": {
32
+ "flex": "1",
33
+ "margin": "0",
34
+ "fontSize": "var(--jx-text-lg)",
35
+ "fontWeight": "600"
36
+ },
37
+ "& [part=\"columns\"]": {
38
+ "display": "flex",
39
+ "flex": "1",
40
+ "minHeight": "0"
41
+ },
18
42
  "& [part=\"nav\"]": {
19
43
  "display": "flex",
20
44
  "flexDirection": "column",
21
45
  "gap": "var(--jx-space-4)",
22
- "width": "200px",
23
- "minWidth": "200px",
46
+ "width": "220px",
47
+ "minWidth": "220px",
24
48
  "flexShrink": "0",
25
- "padding": "var(--jx-space-2) var(--jx-space-3) var(--jx-space-2) 0",
49
+ "padding": "var(--jx-space-3) var(--jx-space-3) var(--jx-space-3) var(--jx-space-2)",
26
50
  "borderRight": "1px solid var(--border)",
27
51
  "overflowY": "auto",
28
52
  "fontSize": "13px"
@@ -88,22 +112,25 @@
88
112
  "flex": "1",
89
113
  "minWidth": "0",
90
114
  "overflowY": "auto",
91
- "padding": "var(--jx-space-2) var(--jx-space-5)"
115
+ "padding": "var(--jx-space-4) var(--jx-space-5) var(--jx-space-6)"
92
116
  },
93
117
  "& [part=\"group-intro\"]": {
94
118
  "margin": "0 0 var(--jx-space-3)",
95
119
  "color": "var(--fg-dim)",
96
- "fontSize": "13px"
120
+ "fontSize": "13px",
121
+ "maxWidth": "1200px"
97
122
  },
98
123
  "& [part=\"group-intro\"]:empty": {
99
124
  "display": "none"
100
125
  },
101
126
  "& [part=\"section-host\"]": {
127
+ "$description": "Wide enough for a map-layout section's list and editor side by side, and no wider: on a large monitor a form stretched to the stage's full width is a line too long to read.",
102
128
  "display": "block",
103
- "minWidth": "0"
129
+ "minWidth": "0",
130
+ "maxWidth": "1200px"
104
131
  },
105
132
  "& [part=\"empty\"]": {
106
- "$description": "What the body says when the active section is registered by nobody: every section unregistering at once, which is a project closing while the dialog is open. A blank column beside a list reads as a broken dialog, so it says which it is.",
133
+ "$description": "What the body says when the active section is registered by nobody: every section unregistering at once, which is a project closing while Settings is on screen. A blank column beside a list reads as a broken surface, so it says which it is.",
107
134
  "display": "flex",
108
135
  "alignItems": "center",
109
136
  "justifyContent": "center",
@@ -126,158 +153,122 @@
126
153
  {
127
154
  "tagName": "div",
128
155
  "attributes": {
129
- "part": "nav",
130
- "role": "none"
156
+ "part": "head"
131
157
  },
132
158
  "children": [
133
159
  {
134
- "$prototype": "Array",
135
- "items": {
136
- "$ref": "#/state/groups"
160
+ "tagName": "jx-action-button",
161
+ "attributes": {
162
+ "part": "back"
137
163
  },
138
- "key": {
139
- "$ref": "$map/item/id"
164
+ "$props": {
165
+ "size": "sm",
166
+ "quiet": true,
167
+ "icon": "arrow-left"
140
168
  },
141
- "map": {
142
- "tagName": "div",
143
- "attributes": {
144
- "part": "group",
145
- "role": "none",
146
- "data-group": "${$map.item.id}"
147
- },
148
- "children": [
149
- {
150
- "tagName": "h3",
151
- "attributes": {
152
- "part": "group-title",
153
- "id": "${$map.item.titleId}"
154
- },
155
- "children": [
156
- {
157
- "tagName": "span",
158
- "textContent": "${$map.item.label}"
159
- },
160
- {
161
- "tagName": "span",
162
- "attributes": {
163
- "part": "group-note"
164
- },
165
- "textContent": "${$map.item.note}"
166
- }
167
- ]
168
- },
169
+ "onclick": {
170
+ "$prototype": "Function",
171
+ "body": [
169
172
  {
170
- "tagName": "jx-tabs",
171
- "attributes": {
172
- "part": "group-tabs",
173
- "selected": "${state.active}",
174
- "orientation": "vertical"
173
+ "operator": "call",
174
+ "target": {
175
+ "$ref": "#/state/back"
175
176
  },
176
- "$props": {
177
- "label": {
178
- "$ref": "$map/item/tabsLabel"
179
- }
180
- },
181
- "onchange": {
182
- "$prototype": "Function",
183
- "body": [
184
- {
185
- "operator": "call",
186
- "target": {
187
- "$ref": "#/state/selectSection"
188
- },
189
- "value": [
190
- {
191
- "$ref": "event#/detail"
192
- }
193
- ]
194
- }
195
- ]
196
- },
197
- "children": [
198
- {
199
- "$prototype": "Array",
200
- "items": {
201
- "$ref": "$map/item/sections"
202
- },
203
- "key": {
204
- "$ref": "$map/item/key"
205
- },
206
- "map": {
207
- "tagName": "jx-tab",
208
- "attributes": {
209
- "part": "nav-item",
210
- "id": "${$map.item.tabId}",
211
- "data-section": "${$map.item.key}",
212
- "value": "${$map.item.key}",
213
- "label": "${$map.item.label}",
214
- "panel": "settings-pane-panel"
215
- }
216
- }
217
- }
218
- ]
177
+ "value": []
219
178
  }
220
179
  ]
221
- }
180
+ },
181
+ "children": [
182
+ {
183
+ "tagName": "span",
184
+ "textContent": "${state.backLabel}"
185
+ }
186
+ ],
187
+ "$description": "Back to the workspace Settings was opened from, named, as the pane context bar's Back is in a workspace with no tab strip (§22.1): the top bar draws no tab for Settings, so nothing else on screen says where the author came from."
222
188
  },
189
+ {
190
+ "tagName": "h2",
191
+ "attributes": {
192
+ "part": "heading",
193
+ "id": "settings-pane-heading"
194
+ },
195
+ "textContent": "${state.heading}"
196
+ }
197
+ ]
198
+ },
199
+ {
200
+ "tagName": "div",
201
+ "attributes": {
202
+ "part": "columns",
203
+ "role": "none"
204
+ },
205
+ "children": [
223
206
  {
224
207
  "tagName": "div",
225
208
  "attributes": {
226
- "part": "moved",
227
- "role": "group",
228
- "aria-labelledby": "settings-pane-moved"
209
+ "part": "nav",
210
+ "role": "none"
229
211
  },
230
212
  "children": [
231
- {
232
- "tagName": "p",
233
- "attributes": {
234
- "part": "moved-title",
235
- "id": "settings-pane-moved"
236
- },
237
- "textContent": "Moved"
238
- },
239
213
  {
240
214
  "$prototype": "Array",
241
215
  "items": {
242
- "$ref": "#/state/moved"
216
+ "$ref": "#/state/groups"
243
217
  },
244
218
  "key": {
245
- "$ref": "$map/item/workspace"
219
+ "$ref": "$map/item/id"
246
220
  },
247
221
  "map": {
248
222
  "tagName": "div",
249
223
  "attributes": {
250
- "part": "moved-row",
251
- "data-moved": "${$map.item.workspace}"
224
+ "part": "group",
225
+ "role": "none",
226
+ "data-group": "${$map.item.id}"
252
227
  },
253
228
  "children": [
254
229
  {
255
- "tagName": "span",
256
- "textContent": "${$map.item.what} →"
230
+ "tagName": "h3",
231
+ "attributes": {
232
+ "part": "group-title",
233
+ "id": "${$map.item.titleId}"
234
+ },
235
+ "children": [
236
+ {
237
+ "tagName": "span",
238
+ "textContent": "${$map.item.label}"
239
+ },
240
+ {
241
+ "tagName": "span",
242
+ "attributes": {
243
+ "part": "group-note"
244
+ },
245
+ "textContent": "${$map.item.note}"
246
+ }
247
+ ]
257
248
  },
258
249
  {
259
- "tagName": "jx-button",
250
+ "tagName": "jx-tabs",
260
251
  "attributes": {
261
- "part": "moved-link"
252
+ "part": "group-tabs",
253
+ "selected": "${state.active}",
254
+ "orientation": "vertical"
262
255
  },
263
256
  "$props": {
264
- "size": "sm",
265
- "quiet": true,
266
257
  "label": {
267
- "$ref": "$map/item/linkLabel"
258
+ "$ref": "$map/item/tabsLabel"
268
259
  }
269
260
  },
270
- "onclick": {
261
+ "onchange": {
271
262
  "$prototype": "Function",
272
263
  "body": [
273
264
  {
274
265
  "operator": "call",
275
266
  "target": {
276
- "$ref": "#/state/openMoved"
267
+ "$ref": "#/state/selectSection"
277
268
  },
278
269
  "value": [
279
270
  {
280
- "$ref": "$map/item/workspace"
271
+ "$ref": "event#/detail"
281
272
  }
282
273
  ]
283
274
  }
@@ -285,84 +276,175 @@
285
276
  },
286
277
  "children": [
287
278
  {
288
- "tagName": "span",
289
- "textContent": "${$map.item.place}"
279
+ "$prototype": "Array",
280
+ "items": {
281
+ "$ref": "$map/item/sections"
282
+ },
283
+ "key": {
284
+ "$ref": "$map/item/key"
285
+ },
286
+ "map": {
287
+ "tagName": "jx-tab",
288
+ "attributes": {
289
+ "part": "nav-item",
290
+ "id": "${$map.item.tabId}",
291
+ "data-section": "${$map.item.key}",
292
+ "value": "${$map.item.key}",
293
+ "label": "${$map.item.label}",
294
+ "panel": "settings-pane-panel"
295
+ }
296
+ }
290
297
  }
291
298
  ]
292
299
  }
293
300
  ]
294
301
  }
302
+ },
303
+ {
304
+ "tagName": "div",
305
+ "attributes": {
306
+ "part": "moved",
307
+ "role": "group",
308
+ "aria-labelledby": "settings-pane-moved"
309
+ },
310
+ "children": [
311
+ {
312
+ "tagName": "p",
313
+ "attributes": {
314
+ "part": "moved-title",
315
+ "id": "settings-pane-moved"
316
+ },
317
+ "textContent": "Moved"
318
+ },
319
+ {
320
+ "$prototype": "Array",
321
+ "items": {
322
+ "$ref": "#/state/moved"
323
+ },
324
+ "key": {
325
+ "$ref": "$map/item/workspace"
326
+ },
327
+ "map": {
328
+ "tagName": "div",
329
+ "attributes": {
330
+ "part": "moved-row",
331
+ "data-moved": "${$map.item.workspace}"
332
+ },
333
+ "children": [
334
+ {
335
+ "tagName": "span",
336
+ "textContent": "${$map.item.what} →"
337
+ },
338
+ {
339
+ "tagName": "jx-button",
340
+ "attributes": {
341
+ "part": "moved-link"
342
+ },
343
+ "$props": {
344
+ "size": "sm",
345
+ "quiet": true,
346
+ "label": {
347
+ "$ref": "$map/item/linkLabel"
348
+ }
349
+ },
350
+ "onclick": {
351
+ "$prototype": "Function",
352
+ "body": [
353
+ {
354
+ "operator": "call",
355
+ "target": {
356
+ "$ref": "#/state/openMoved"
357
+ },
358
+ "value": [
359
+ {
360
+ "$ref": "$map/item/workspace"
361
+ }
362
+ ]
363
+ }
364
+ ]
365
+ },
366
+ "children": [
367
+ {
368
+ "tagName": "span",
369
+ "textContent": "${$map.item.place}"
370
+ }
371
+ ]
372
+ }
373
+ ]
374
+ }
375
+ }
376
+ ]
295
377
  }
296
378
  ]
297
- }
298
- ]
299
- },
300
- {
301
- "tagName": "jx-tab-panel",
302
- "attributes": {
303
- "part": "content",
304
- "id": "settings-pane-panel"
305
- },
306
- "$props": {
307
- "active": true,
308
- "labelledby": {
309
- "$ref": "#/state/activeTabId"
310
- }
311
- },
312
- "children": [
313
- {
314
- "$description": "The current group's intro (\"Changes here affect every page. Most sites never need them.\"), above whichever of its sections is showing. General has none, and an empty sentence draws nothing.",
315
- "tagName": "p",
316
- "attributes": {
317
- "part": "group-intro"
318
- },
319
- "textContent": "${state.intro}"
320
379
  },
321
380
  {
322
- "$description": "The island, and it stays empty: a settings section renders itself, into a host this document never writes into and never reads back (studio-ui-guidelines.md §9.4).",
323
- "tagName": "div",
324
- "attributes": {
325
- "part": "section-host"
326
- }
327
- },
328
- {
329
- "tagName": "div",
381
+ "tagName": "jx-tab-panel",
330
382
  "attributes": {
331
- "part": "empty-slot",
332
- "role": "none"
383
+ "part": "content",
384
+ "id": "settings-pane-panel"
333
385
  },
334
- "$switch": {
335
- "$ref": "#/state/hasSection"
386
+ "$props": {
387
+ "active": true,
388
+ "labelledby": {
389
+ "$ref": "#/state/activeTabId"
390
+ }
336
391
  },
337
- "cases": {
338
- "false": {
392
+ "children": [
393
+ {
394
+ "$description": "The current group's intro (\"Changes here affect every page. Most sites never need them.\"), above whichever of its sections is showing. General has none, and an empty sentence draws nothing.",
339
395
  "tagName": "p",
340
396
  "attributes": {
341
- "part": "empty"
397
+ "part": "group-intro"
342
398
  },
343
- "textContent": "${state.empty}"
344
- }
345
- }
346
- },
347
- {
348
- "tagName": "div",
349
- "attributes": {
350
- "part": "failure-slot",
351
- "role": "none"
352
- },
353
- "$switch": {
354
- "$ref": "#/state/failureState"
355
- },
356
- "cases": {
357
- "failed": {
358
- "tagName": "p",
399
+ "textContent": "${state.intro}"
400
+ },
401
+ {
402
+ "$description": "The island, and it stays empty: a settings section renders itself, into a host this document never writes into and never reads back (studio-ui-guidelines.md §9.4).",
403
+ "tagName": "div",
359
404
  "attributes": {
360
- "part": "failure",
361
- "role": "alert"
405
+ "part": "section-host"
406
+ }
407
+ },
408
+ {
409
+ "tagName": "div",
410
+ "attributes": {
411
+ "part": "empty-slot",
412
+ "role": "none"
413
+ },
414
+ "$switch": {
415
+ "$ref": "#/state/hasSection"
362
416
  },
363
- "textContent": "${state.failure}"
417
+ "cases": {
418
+ "false": {
419
+ "tagName": "p",
420
+ "attributes": {
421
+ "part": "empty"
422
+ },
423
+ "textContent": "${state.empty}"
424
+ }
425
+ }
426
+ },
427
+ {
428
+ "tagName": "div",
429
+ "attributes": {
430
+ "part": "failure-slot",
431
+ "role": "none"
432
+ },
433
+ "$switch": {
434
+ "$ref": "#/state/failureState"
435
+ },
436
+ "cases": {
437
+ "failed": {
438
+ "tagName": "p",
439
+ "attributes": {
440
+ "part": "failure",
441
+ "role": "alert"
442
+ },
443
+ "textContent": "${state.failure}"
444
+ }
445
+ }
364
446
  }
365
- }
447
+ ]
366
448
  }
367
449
  ]
368
450
  }