@jxsuite/studio 6.1.1 → 8.0.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 (785) hide show
  1. package/README.md +5 -5
  2. package/dist/chunks/2020-5wtzce5g.js +4 -0
  3. package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
  4. package/dist/chunks/adapter-5tphg7xe.js +4 -0
  5. package/dist/chunks/add-new-flow-psym14sn.js +4 -0
  6. package/dist/chunks/cf-account-picker-haqazq5r.js +4 -0
  7. package/dist/chunks/cf-settings-h2wrh6hq.js +4 -0
  8. package/dist/chunks/color-area-6rbra5dy.js +4 -0
  9. package/dist/chunks/color-field-gy56c94g.js +4 -0
  10. package/dist/chunks/color-m7r1vk54.js +4 -0
  11. package/dist/chunks/color-slider-sqqdyf6c.js +4 -0
  12. package/dist/chunks/combobox-72h32ejk.js +4 -0
  13. package/dist/chunks/components-r22xca09.js +4 -0
  14. package/dist/chunks/content-source-mmppmcyg.js +4 -0
  15. package/dist/chunks/convert-to-repeater-he70fc2b.js +4 -0
  16. package/dist/chunks/dialog-c4x05vyx.js +4 -0
  17. package/dist/chunks/editor-ccd9jwsa.js +4 -0
  18. package/dist/chunks/entry-commands-6qxz9e8p.js +4 -0
  19. package/dist/chunks/extension-sections-0egb88dm.js +4 -0
  20. package/dist/chunks/file-ops-qnab36ek.js +4 -0
  21. package/dist/chunks/files-rcn56qvm.js +4 -0
  22. package/dist/chunks/format-host-yxz0kjjs.js +4 -0
  23. package/dist/chunks/fs-events-d1qxq4z4.js +4 -0
  24. package/dist/chunks/grid-open-4z1g062t.js +4 -0
  25. package/dist/chunks/grid-view-qg1b5eqx.js +51 -0
  26. package/dist/chunks/icons-63bjtbs7.js +4 -0
  27. package/dist/chunks/iframe-entry-2zggzajv.js +5 -0
  28. package/dist/chunks/iframe-entry-76j8vwwx.js +5 -0
  29. package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
  30. package/dist/chunks/iframe-entry-pkgmcgp0.js +5 -0
  31. package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
  32. package/dist/chunks/{index-2veqmnhr.js → index-32eqzv1k.js} +3 -3
  33. package/dist/chunks/index-f0jn7nnp.js +4 -0
  34. package/dist/chunks/{javascript-8nbvs12s.js → javascript-pjp734q4.js} +3 -3
  35. package/dist/chunks/jsonMode-njkvsa02.js +13 -0
  36. package/dist/chunks/jx-validate-ttasrbh7.js +4 -0
  37. package/dist/chunks/layers-bgyr11tr.js +4 -0
  38. package/dist/chunks/layers-panel-7ez66zeq.js +4 -0
  39. package/dist/chunks/listbox-c421cf8c.js +4 -0
  40. package/dist/chunks/lit-html-v9gh687x.js +4 -0
  41. package/dist/chunks/media-library-sq468wts.js +4 -0
  42. package/dist/chunks/media-picker-shfe59pt.js +4 -0
  43. package/dist/chunks/menu-bdpzbfvs.js +4 -0
  44. package/dist/chunks/monaco-binding-vq1hgnn0.js +4 -0
  45. package/dist/chunks/monaco-buffer-3afgwvbp.js +4 -0
  46. package/dist/chunks/monaco-setup-xrd2cbkp.js +4 -0
  47. package/dist/chunks/notify-kzrjr3fv.js +4 -0
  48. package/dist/chunks/number-field-y62xq0ty.js +4 -0
  49. package/dist/chunks/parse-v77xtwv7.js +4 -0
  50. package/dist/chunks/platform-7v4rtd7m.js +4 -0
  51. package/dist/chunks/popover-b89sfej7.js +4 -0
  52. package/dist/chunks/publish-panel-2z9gw8ee.js +4 -0
  53. package/dist/chunks/publish-quick-qx2455cj.js +4 -0
  54. package/dist/chunks/publish-workspace-wrc1dgwx.js +4 -0
  55. package/dist/chunks/quick-search-n0t0eqxb.js +4 -0
  56. package/dist/chunks/references-9547rg5s.js +4 -0
  57. package/dist/chunks/right-panel-wsgnr9pn.js +4 -0
  58. package/dist/chunks/select-rzds841e.js +4 -0
  59. package/dist/chunks/source-control-kwktr9y6.js +4 -0
  60. package/dist/chunks/split-c9zfdgxf.js +4 -0
  61. package/dist/chunks/studio-03ct6yfv.js +9 -0
  62. package/dist/chunks/studio-07rcfje3.js +5 -0
  63. package/dist/chunks/studio-3e54qh39.js +7 -0
  64. package/dist/chunks/studio-3exxhz5g.js +5 -0
  65. package/dist/chunks/studio-3q40e3rj.js +5 -0
  66. package/dist/chunks/studio-3qeh9t0h.js +6 -0
  67. package/dist/chunks/studio-3qqjeep5.js +6 -0
  68. package/dist/chunks/studio-43sd2mam.js +4 -0
  69. package/dist/chunks/studio-4hp8pkyt.js +5 -0
  70. package/dist/chunks/studio-58xg6j2q.js +9 -0
  71. package/dist/chunks/studio-5g0rprdt.js +7 -0
  72. package/dist/chunks/studio-6m380wp7.js +5 -0
  73. package/dist/chunks/studio-80jyh1xh.js +4 -0
  74. package/dist/chunks/studio-83mk4bgg.js +9 -0
  75. package/dist/chunks/{studio-kggey1jt.js → studio-881z1xrx.js} +4 -4
  76. package/dist/chunks/studio-8m0y2qe7.js +5 -0
  77. package/dist/chunks/studio-8tr6cfrc.js +5 -0
  78. package/dist/chunks/studio-8vcvfs7r.js +6 -0
  79. package/dist/chunks/studio-9tmebf0s.js +5 -0
  80. package/dist/chunks/studio-a2bvaptz.js +5 -0
  81. package/dist/chunks/studio-b7y5mr30.js +5 -0
  82. package/dist/chunks/studio-bavb31r0.js +5 -0
  83. package/dist/chunks/studio-bbe4c90a.js +5 -0
  84. package/dist/chunks/studio-c05wdnt3.js +5 -0
  85. package/dist/chunks/studio-ccv2svc6.js +5 -0
  86. package/dist/chunks/studio-d5grtb9e.js +16 -0
  87. package/dist/chunks/studio-df0baea9.js +5 -0
  88. package/dist/chunks/studio-dgk4dqtx.js +7 -0
  89. package/dist/chunks/studio-e1g64q43.js +5 -0
  90. package/dist/chunks/studio-ed1hp6zf.js +6 -0
  91. package/dist/chunks/studio-ed3xx40h.js +7 -0
  92. package/dist/chunks/studio-f14e1zdj.js +5 -0
  93. package/dist/chunks/studio-fbhxxc5f.js +5 -0
  94. package/dist/chunks/studio-fyh0jc96.js +5 -0
  95. package/dist/chunks/studio-gcxk20n7.js +5 -0
  96. package/dist/chunks/studio-jaaz8ce9.js +5 -0
  97. package/dist/chunks/{studio-8grwxtqk.js → studio-jcnsdaep.js} +4 -4
  98. package/dist/chunks/studio-jsgf2q5k.js +7 -0
  99. package/dist/chunks/{studio-1q1sh2ax.js → studio-k3xxbagr.js} +3 -3
  100. package/dist/chunks/studio-k7evxqh4.js +5 -0
  101. package/dist/chunks/studio-kt3pjkwd.js +5 -0
  102. package/dist/chunks/studio-m8g16bgz.js +5 -0
  103. package/dist/chunks/studio-mn0476ag.js +5 -0
  104. package/dist/chunks/studio-mx1smyq0.js +5 -0
  105. package/dist/chunks/studio-n0c5h6mf.js +5 -0
  106. package/dist/chunks/{studio-rv11kfwa.js → studio-nh6d342n.js} +7 -7
  107. package/dist/chunks/studio-nqxqf8p2.js +4 -0
  108. package/dist/chunks/studio-p4nrkvqr.js +5 -0
  109. package/dist/chunks/{studio-h46vtzk8.js → studio-pbxa5fpc.js} +4 -4
  110. package/dist/chunks/studio-pgmvdv7z.js +7 -0
  111. package/dist/chunks/studio-ph84avkf.js +5 -0
  112. package/dist/chunks/{studio-wszjyh0j.js → studio-q0mvbaq6.js} +4 -4
  113. package/dist/chunks/studio-q0tccd43.js +5 -0
  114. package/dist/chunks/studio-q7rtx6zq.js +14 -0
  115. package/dist/chunks/{studio-pre0skq6.js → studio-qgh13jtz.js} +4 -4
  116. package/dist/chunks/studio-qmn1xc24.js +5 -0
  117. package/dist/chunks/studio-qwdqwkj0.js +5 -0
  118. package/dist/chunks/{studio-t6b6qe31.js → studio-r5qy30vx.js} +4 -4
  119. package/dist/chunks/studio-rj9eamf8.js +5 -0
  120. package/dist/chunks/studio-rptgsk96.js +5 -0
  121. package/dist/chunks/studio-rthyg42z.js +928 -0
  122. package/dist/chunks/studio-s19tp1xr.js +5 -0
  123. package/dist/chunks/studio-s32578pn.js +5 -0
  124. package/dist/chunks/studio-svb7yyve.js +5 -0
  125. package/dist/chunks/studio-syreb644.js +5 -0
  126. package/dist/chunks/studio-tf9jryb1.js +10 -0
  127. package/dist/chunks/studio-tfkznv39.js +5 -0
  128. package/dist/chunks/studio-tft6r105.js +5 -0
  129. package/dist/chunks/studio-txf2kysx.js +5 -0
  130. package/dist/chunks/studio-v8867ddv.js +12 -0
  131. package/dist/chunks/studio-vxq7fcvv.js +5 -0
  132. package/dist/chunks/studio-w4rz9hdk.js +5 -0
  133. package/dist/chunks/studio-wbcjbhy1.js +9 -0
  134. package/dist/chunks/studio-wc649wss.js +5 -0
  135. package/dist/chunks/studio-wys23mxz.js +5 -0
  136. package/dist/chunks/studio-x1x167jh.js +5 -0
  137. package/dist/chunks/studio-x9hsze61.js +5 -0
  138. package/dist/chunks/studio-y0n7yxea.js +9 -0
  139. package/dist/chunks/studio-y3ahhdpx.js +5 -0
  140. package/dist/chunks/studio-z97c48fk.js +5 -0
  141. package/dist/chunks/studio-zat62m0c.js +5 -0
  142. package/dist/chunks/studio-zcd2e7yz.js +5 -0
  143. package/dist/chunks/studio-zz9qe3rw.js +64 -0
  144. package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
  145. package/dist/chunks/tabs-f5cw3tgp.js +4 -0
  146. package/dist/chunks/textfield-wewc8rq2.js +4 -0
  147. package/dist/chunks/toast-1gv0h53h.js +4 -0
  148. package/dist/chunks/toast-host-1yg5ar8d.js +4 -0
  149. package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
  150. package/dist/chunks/tooltip-yypz28gq.js +4 -0
  151. package/dist/chunks/tree-9xa4hm7n.js +4 -0
  152. package/dist/chunks/tsMode-epyfz1hv.js +14 -0
  153. package/dist/chunks/workspace-dz7nxfhv.js +4 -0
  154. package/dist/chunks/workspace-home-xsd7hkjw.js +4 -0
  155. package/dist/chunks/ws-client-bv552sfx.js +4 -0
  156. package/dist/iframe-entry.js +20 -16
  157. package/dist/manifest.json +77 -63
  158. package/dist/studio.js +106 -107
  159. package/dist/workers/ts.worker.js +3 -3
  160. package/package.json +17 -16
  161. package/src/about/about-modal.ts +4 -3
  162. package/src/account/action-flow.ts +45 -38
  163. package/src/account-status.ts +7 -2
  164. package/src/browse/component-examples.ts +272 -0
  165. package/src/browse/library-commands.ts +64 -104
  166. package/src/browse/library-layouts.ts +270 -53
  167. package/src/browse/library-model.ts +194 -134
  168. package/src/browse/library-pane.ts +748 -440
  169. package/src/browse/library-preview.ts +161 -26
  170. package/src/browse/library-source.ts +308 -41
  171. package/src/browse/preview-root.ts +78 -0
  172. package/src/browse/preview-style.ts +155 -0
  173. package/src/canvas/asset-refs.ts +40 -10
  174. package/src/canvas/asset-resolve.ts +19 -23
  175. package/src/canvas/canvas-helpers.ts +7 -6
  176. package/src/canvas/canvas-live-render.ts +260 -77
  177. package/src/canvas/canvas-origin.ts +37 -12
  178. package/src/canvas/canvas-page-context.ts +112 -0
  179. package/src/canvas/canvas-patcher.ts +30 -30
  180. package/src/canvas/canvas-perf.ts +11 -5
  181. package/src/canvas/canvas-render.ts +175 -148
  182. package/src/canvas/canvas-surface.ts +5 -3
  183. package/src/canvas/canvas-utils.ts +147 -61
  184. package/src/canvas/dialog-path.ts +9 -4
  185. package/src/canvas/dialog-state.ts +1 -2
  186. package/src/canvas/diff-marks.ts +9 -16
  187. package/src/canvas/diff-toolbar.ts +8 -7
  188. package/src/canvas/edit-width-drag.ts +4 -1
  189. package/src/canvas/edit-width.ts +1 -3
  190. package/src/canvas/iframe-channel.ts +27 -13
  191. package/src/canvas/iframe-drop.ts +120 -12
  192. package/src/canvas/iframe-editable-root.ts +29 -16
  193. package/src/canvas/iframe-entry.ts +104 -75
  194. package/src/canvas/iframe-eval.ts +73 -49
  195. package/src/canvas/iframe-host.ts +269 -158
  196. package/src/canvas/iframe-inline-edit.ts +49 -30
  197. package/src/canvas/iframe-insert.ts +5 -4
  198. package/src/canvas/iframe-interaction.ts +30 -25
  199. package/src/canvas/iframe-keys.ts +11 -0
  200. package/src/canvas/iframe-overlay.ts +1 -1
  201. package/src/canvas/iframe-patch.ts +25 -21
  202. package/src/canvas/iframe-position.ts +12 -6
  203. package/src/canvas/iframe-protocol.ts +36 -21
  204. package/src/canvas/iframe-render.ts +84 -35
  205. package/src/canvas/iframe-slash.ts +24 -11
  206. package/src/canvas/iframe-subtree.ts +10 -3
  207. package/src/canvas/npm-modules.ts +22 -0
  208. package/src/canvas/path-mapping.ts +19 -12
  209. package/src/canvas/popover-path.ts +7 -3
  210. package/src/canvas/popover-state.ts +1 -2
  211. package/src/canvas/preview-navigate.ts +16 -0
  212. package/src/canvas/repeater-sources.ts +200 -0
  213. package/src/canvas/serialize-scope.ts +13 -5
  214. package/src/canvas/stage-scrollbar.ts +7 -2
  215. package/src/canvas/surface-registry.ts +27 -3
  216. package/src/collab/collab-commands.ts +7 -2
  217. package/src/collab/collab-session.ts +84 -45
  218. package/src/collab/collab-state.ts +4 -3
  219. package/src/collab/monaco-binding.ts +16 -13
  220. package/src/collab/monaco-cursors.ts +5 -2
  221. package/src/commands/app-commands.ts +16 -6
  222. package/src/commands/budget.ts +13 -11
  223. package/src/commands/command-args.ts +103 -71
  224. package/src/commands/context.ts +55 -28
  225. package/src/commands/defaults.ts +69 -45
  226. package/src/commands/keymap.ts +56 -43
  227. package/src/commands/levels.ts +14 -8
  228. package/src/commands/live-context.ts +9 -7
  229. package/src/commands/reference.ts +2 -1
  230. package/src/commands/registry.ts +22 -11
  231. package/src/commands/run-reported.ts +15 -10
  232. package/src/component-props.ts +46 -30
  233. package/src/content/collection-match.ts +11 -9
  234. package/src/content/collection-pages.ts +412 -0
  235. package/src/content/content-collections.ts +270 -0
  236. package/src/content/draft-state.ts +4 -3
  237. package/src/content/entry-commands.ts +54 -62
  238. package/src/content/entry-editor.ts +137 -32
  239. package/src/content/entry-fields.ts +25 -8
  240. package/src/content/entry-inspector.ts +225 -0
  241. package/src/content/entry-model.ts +38 -15
  242. package/src/content/entry-open.ts +80 -0
  243. package/src/content/entry-summaries.ts +440 -0
  244. package/src/content/file-record-ids.ts +80 -0
  245. package/src/content/file-records.ts +125 -0
  246. package/src/content/page-summaries.ts +129 -0
  247. package/src/content/record-entry.ts +201 -0
  248. package/src/content/writing-banner.ts +177 -0
  249. package/src/create/add-new-commands.ts +185 -0
  250. package/src/create/add-new-flow.ts +1116 -0
  251. package/src/create/add-new.ts +1014 -0
  252. package/src/create/element-name.ts +121 -0
  253. package/src/editor/canvas-context-menu.ts +1 -2
  254. package/src/editor/canvas-slash-bridge.ts +3 -6
  255. package/src/editor/content-slice.ts +16 -14
  256. package/src/editor/context-menu.ts +35 -22
  257. package/src/editor/convert-targets.ts +30 -35
  258. package/src/editor/convert-to-component.ts +78 -48
  259. package/src/editor/convert-to-repeater.ts +34 -22
  260. package/src/editor/editable-tags.ts +17 -2
  261. package/src/editor/file-drop-action.ts +29 -22
  262. package/src/editor/inline-edit-apply.ts +79 -17
  263. package/src/editor/inline-edit.ts +76 -50
  264. package/src/editor/inline-format.ts +59 -56
  265. package/src/editor/inline-link.ts +40 -15
  266. package/src/editor/insert-component.ts +91 -0
  267. package/src/editor/insert-zone-action.ts +14 -5
  268. package/src/editor/merge-tags.ts +58 -19
  269. package/src/editor/repeater-scope.ts +39 -28
  270. package/src/editor/shortcuts.ts +76 -42
  271. package/src/editor/slash-menu.ts +52 -14
  272. package/src/files/asset-versions.ts +4 -4
  273. package/src/files/components.ts +89 -20
  274. package/src/files/elements.ts +5 -6
  275. package/src/files/file-ops.ts +92 -41
  276. package/src/files/files.ts +248 -239
  277. package/src/files/fs-events.ts +18 -7
  278. package/src/files/media-meta.ts +97 -2
  279. package/src/files/media-paths.ts +3 -0
  280. package/src/files/media-types.ts +55 -0
  281. package/src/files/media-upload.ts +209 -52
  282. package/src/files/new-file-name.ts +156 -0
  283. package/src/files/serialize-document.ts +15 -5
  284. package/src/format/constraints.ts +1 -1
  285. package/src/format/convert-file.ts +27 -13
  286. package/src/format/format-choices.ts +2 -1
  287. package/src/format/format-host.ts +91 -50
  288. package/src/github/github-auth-status.ts +27 -3
  289. package/src/github/github-auth.ts +21 -11
  290. package/src/github/github-publish.ts +28 -23
  291. package/src/grid/cell-editors.ts +46 -31
  292. package/src/grid/cell-popovers.ts +5 -3
  293. package/src/grid/edit-buffer.ts +10 -9
  294. package/src/grid/grid-controller.ts +25 -23
  295. package/src/grid/grid-layout.ts +21 -5
  296. package/src/grid/grid-open.ts +3 -33
  297. package/src/grid/grid-panel.ts +65 -6
  298. package/src/grid/grid-reveal.ts +34 -0
  299. package/src/grid/grid-source.ts +9 -31
  300. package/src/grid/grid-view.ts +45 -23
  301. package/src/grid/redirects-grid.ts +14 -5
  302. package/src/grid/redirects.ts +16 -14
  303. package/src/grid/schema-columns.ts +25 -19
  304. package/src/grid/sources/connector-source.ts +47 -20
  305. package/src/grid/sources/content-source.ts +100 -31
  306. package/src/grid/sources/csv-file-source.ts +2 -2
  307. package/src/grid/tabulator-tables.d.ts +61 -34
  308. package/src/hosting/document.ts +2 -2
  309. package/src/hosting/stage.ts +7 -7
  310. package/src/i18n/i18n-commands.ts +3 -3
  311. package/src/media/media-commands.ts +181 -0
  312. package/src/media/media-library-model.ts +232 -0
  313. package/src/media/media-library.ts +1283 -0
  314. package/src/media/media-pane.ts +51 -20
  315. package/src/new-project/add-repo-modal.ts +20 -19
  316. package/src/new-project/import-tab.ts +10 -14
  317. package/src/new-project/location-fields.ts +2 -1
  318. package/src/new-project/new-project-modal.ts +12 -9
  319. package/src/packages/jxsuite-update.ts +4 -3
  320. package/src/packages/pull-package-sync.ts +26 -25
  321. package/src/page-params.ts +97 -68
  322. package/src/panels/activity-panel.ts +38 -14
  323. package/src/panels/ai-chat/attached-context.ts +13 -7
  324. package/src/panels/ai-chat/chat-markdown.ts +8 -8
  325. package/src/panels/ai-chat/chat-view.ts +80 -73
  326. package/src/panels/ai-chat/composer.ts +30 -33
  327. package/src/panels/ai-chat/sessions-view.ts +1 -2
  328. package/src/panels/ai-panel.ts +23 -20
  329. package/src/panels/block-action-bar.ts +57 -46
  330. package/src/panels/bottom-dock.ts +5 -3
  331. package/src/panels/canvas-dnd-bridge.ts +36 -26
  332. package/src/panels/chat-panel.ts +6 -6
  333. package/src/panels/collections-panel.ts +306 -0
  334. package/src/panels/component-preview.ts +35 -13
  335. package/src/panels/data-explorer.ts +63 -26
  336. package/src/panels/data-grid.ts +18 -11
  337. package/src/panels/dnd.ts +115 -138
  338. package/src/panels/editors.ts +52 -21
  339. package/src/panels/elements-panel.ts +19 -5
  340. package/src/panels/empty-state.ts +2 -2
  341. package/src/panels/events-panel.ts +84 -69
  342. package/src/panels/formula-workspace.ts +78 -54
  343. package/src/panels/frontmatter-fields.ts +33 -28
  344. package/src/panels/git-diff-open.ts +10 -6
  345. package/src/panels/head-panel.ts +488 -202
  346. package/src/panels/i18n-panel.ts +20 -12
  347. package/src/panels/imports-panel.ts +25 -47
  348. package/src/panels/jump-bar.ts +75 -31
  349. package/src/panels/layers-panel.ts +130 -101
  350. package/src/panels/left-panel.ts +25 -11
  351. package/src/panels/navigator-panels.ts +23 -11
  352. package/src/panels/pane-context.ts +140 -49
  353. package/src/panels/pane-grid.ts +55 -26
  354. package/src/panels/panel-registry.ts +36 -46
  355. package/src/panels/properties-panel.ts +182 -124
  356. package/src/panels/quick-search.ts +53 -31
  357. package/src/panels/right-panel.ts +201 -45
  358. package/src/panels/seo-modal.ts +54 -125
  359. package/src/panels/settings-menu.ts +63 -61
  360. package/src/panels/settings-pane.ts +268 -162
  361. package/src/panels/signals-panel.ts +156 -135
  362. package/src/panels/site-model.ts +367 -0
  363. package/src/panels/site-panel.ts +638 -0
  364. package/src/panels/statement-editor.ts +230 -140
  365. package/src/panels/style-panel.ts +253 -206
  366. package/src/panels/style-utils.ts +114 -51
  367. package/src/panels/stylebook-doc.ts +195 -60
  368. package/src/panels/stylebook-layers-panel.ts +48 -89
  369. package/src/panels/stylebook-panel.ts +60 -27
  370. package/src/panels/styles-panel.ts +327 -0
  371. package/src/panels/tab-drop.ts +27 -11
  372. package/src/panels/tab-strip.ts +143 -49
  373. package/src/platform-errors.ts +57 -43
  374. package/src/platform.ts +59 -31
  375. package/src/platforms/cloud.ts +373 -176
  376. package/src/platforms/default-platform.ts +14 -8
  377. package/src/platforms/devserver.ts +180 -142
  378. package/src/platforms/read-batcher.ts +16 -8
  379. package/src/project-list.ts +2 -1
  380. package/src/publish/deploy-checklist.ts +20 -9
  381. package/src/publish/pages-service.ts +66 -27
  382. package/src/publish/publish-changes.ts +491 -0
  383. package/src/publish/publish-commands.ts +88 -22
  384. package/src/publish/publish-ids.ts +49 -0
  385. package/src/publish/publish-panel.ts +10 -6
  386. package/src/publish/publish-quick.ts +148 -0
  387. package/src/publish/publish-workspace.ts +926 -0
  388. package/src/publish/source-control.ts +907 -0
  389. package/src/recent-projects.ts +15 -8
  390. package/src/resize-edges.ts +26 -36
  391. package/src/services/a11y-report.ts +26 -19
  392. package/src/services/agent-seed.ts +23 -11
  393. package/src/services/ai-ask.ts +9 -12
  394. package/src/services/ai-command-tools.ts +68 -62
  395. package/src/services/ai-import-tools.ts +80 -67
  396. package/src/services/ai-models.ts +17 -13
  397. package/src/services/ai-project-tools.ts +68 -32
  398. package/src/services/ai-session-store.ts +19 -10
  399. package/src/services/ai-system-prompt.ts +46 -20
  400. package/src/services/ai-tools.ts +71 -27
  401. package/src/services/ai-write-report.ts +20 -12
  402. package/src/services/ai-writes.ts +4 -4
  403. package/src/services/automation.ts +74 -51
  404. package/src/services/cem-export.ts +149 -58
  405. package/src/services/cf-settings.ts +4 -4
  406. package/src/services/clock.ts +6 -1
  407. package/src/services/code-services.ts +37 -31
  408. package/src/services/connection.ts +2 -2
  409. package/src/services/context-manager.ts +14 -10
  410. package/src/services/context-resolver.ts +20 -8
  411. package/src/services/data-service.ts +19 -15
  412. package/src/services/directory-picker.ts +20 -14
  413. package/src/services/document-assistant.ts +39 -19
  414. package/src/services/gated-registry.ts +10 -6
  415. package/src/services/harness/chat-reducer.ts +23 -1
  416. package/src/services/import-client.ts +91 -38
  417. package/src/services/import-seed.ts +8 -2
  418. package/src/services/jx-validate.ts +28 -31
  419. package/src/services/live-preview.ts +0 -0
  420. package/src/services/live-surfaces.ts +6 -3
  421. package/src/services/model-uri.ts +10 -2
  422. package/src/services/module-preloads.ts +12 -8
  423. package/src/services/monaco-buffer.ts +43 -24
  424. package/src/services/monaco-lazy.ts +7 -8
  425. package/src/services/monaco-setup.ts +23 -16
  426. package/src/services/notify.ts +44 -17
  427. package/src/services/popover-report.ts +25 -10
  428. package/src/services/preview-eval.ts +20 -8
  429. package/src/services/profile.ts +13 -6
  430. package/src/services/project-path.ts +13 -10
  431. package/src/services/references.ts +0 -0
  432. package/src/services/render-critic.ts +29 -9
  433. package/src/services/settings/definitions.ts +25 -14
  434. package/src/services/settings/kernel.ts +13 -4
  435. package/src/services/settings/write-queue.ts +9 -9
  436. package/src/services/token-lint.ts +12 -10
  437. package/src/services/tool-executor.ts +17 -5
  438. package/src/services/tool-outcomes.ts +44 -24
  439. package/src/services/trusted-types.ts +24 -7
  440. package/src/settings/contexts-section.ts +11 -8
  441. package/src/settings/contributed-section.ts +128 -70
  442. package/src/settings/css-vars-editor.ts +119 -32
  443. package/src/settings/defs-editor.ts +38 -35
  444. package/src/settings/developer-panels.ts +43 -0
  445. package/src/settings/extension-rows.ts +16 -8
  446. package/src/settings/extension-sections.ts +42 -14
  447. package/src/settings/extensions-section.ts +4 -1
  448. package/src/settings/general-settings.ts +101 -28
  449. package/src/settings/locales-section.ts +20 -12
  450. package/src/settings/preferences-dialog.ts +17 -7
  451. package/src/settings/preferences-keymap.ts +7 -5
  452. package/src/settings/preferences-sections.ts +11 -5
  453. package/src/settings/project-sections.ts +28 -11
  454. package/src/settings/schema-field-ui.ts +12 -1
  455. package/src/settings/section-registry.ts +116 -11
  456. package/src/settings/settings-dialog.ts +192 -0
  457. package/src/settings/settings-document.ts +186 -166
  458. package/src/shell/tree.ts +6 -5
  459. package/src/shell.ts +536 -477
  460. package/src/site-context.ts +101 -32
  461. package/src/state.ts +68 -57
  462. package/src/store.ts +54 -34
  463. package/src/studio.ts +219 -116
  464. package/src/style/live-preview.ts +1 -1
  465. package/src/style/project-styles.ts +40 -7
  466. package/src/style/stylebook-specimens.ts +89 -0
  467. package/src/style/stylebook-target.ts +26 -0
  468. package/src/style/tag-inheritance.ts +105 -0
  469. package/src/style/token-ref.ts +5 -4
  470. package/src/style/variables-focus.ts +61 -0
  471. package/src/style/variables-view.ts +235 -0
  472. package/src/surfaces/about.ts +18 -19
  473. package/src/surfaces/add-new.json +1482 -0
  474. package/src/surfaces/add-new.ts +325 -0
  475. package/src/surfaces/add-repo.ts +17 -19
  476. package/src/surfaces/ai-chat.ts +33 -38
  477. package/src/surfaces/ai-credentials-form.ts +6 -16
  478. package/src/surfaces/ai-managed-connect.ts +3 -4
  479. package/src/surfaces/ai-model-picker.ts +3 -5
  480. package/src/surfaces/block-action-bar.ts +22 -11
  481. package/src/surfaces/boot-failure.json +4 -3
  482. package/src/surfaces/boot-failure.ts +4 -5
  483. package/src/surfaces/bottom-dock.json +1 -1
  484. package/src/surfaces/bottom-dock.ts +9 -18
  485. package/src/surfaces/canvas-stage.json +30 -19
  486. package/src/surfaces/canvas-stage.ts +17 -16
  487. package/src/surfaces/cf-account-picker.ts +17 -18
  488. package/src/surfaces/collections-panel.json +615 -0
  489. package/src/surfaces/collections-panel.ts +168 -0
  490. package/src/surfaces/commandbar.json +241 -96
  491. package/src/surfaces/commandbar.ts +145 -105
  492. package/src/surfaces/convert-repeater.ts +17 -19
  493. package/src/surfaces/data-actions.ts +9 -7
  494. package/src/surfaces/dialog.ts +26 -28
  495. package/src/surfaces/diff-toolbar.ts +9 -7
  496. package/src/surfaces/empty-state.json +1 -1
  497. package/src/surfaces/empty-state.ts +7 -10
  498. package/src/surfaces/entry-editor.json +136 -0
  499. package/src/surfaces/entry-editor.ts +35 -11
  500. package/src/surfaces/entry-inspector.json +371 -0
  501. package/src/surfaces/entry-inspector.ts +143 -0
  502. package/src/surfaces/expression-editor.ts +11 -25
  503. package/src/surfaces/files-panel.ts +27 -14
  504. package/src/surfaces/formula-palette.ts +4 -5
  505. package/src/surfaces/github-auth.ts +16 -20
  506. package/src/surfaces/github-publish.ts +17 -22
  507. package/src/surfaces/grid-cell.ts +30 -31
  508. package/src/surfaces/grid-open.ts +10 -14
  509. package/src/surfaces/grid-panel.ts +13 -9
  510. package/src/surfaces/grid-replace.ts +13 -13
  511. package/src/surfaces/grid-views.ts +15 -18
  512. package/src/surfaces/inspector-dock.json +162 -14
  513. package/src/surfaces/inspector-dock.ts +59 -31
  514. package/src/surfaces/jump-bar.ts +5 -6
  515. package/src/surfaces/jxsuite-update.ts +16 -22
  516. package/src/surfaces/library-pane.json +670 -437
  517. package/src/surfaces/library-pane.ts +111 -77
  518. package/src/surfaces/logic-panel.ts +17 -30
  519. package/src/surfaces/logic-workspace.ts +13 -15
  520. package/src/surfaces/media-browser.json +62 -6
  521. package/src/surfaces/media-browser.ts +26 -11
  522. package/src/surfaces/media-field.json +1 -1
  523. package/src/surfaces/media-field.ts +4 -5
  524. package/src/surfaces/media-library.json +1586 -0
  525. package/src/surfaces/media-library.ts +282 -0
  526. package/src/surfaces/media-pane.ts +8 -7
  527. package/src/surfaces/media-pick-dialog.json +71 -0
  528. package/src/surfaces/media-pick-dialog.ts +132 -0
  529. package/src/surfaces/menu.ts +47 -23
  530. package/src/surfaces/navigator-dock.ts +11 -12
  531. package/src/surfaces/new-project.ts +27 -26
  532. package/src/surfaces/pane-context.json +144 -77
  533. package/src/surfaces/pane-context.ts +44 -25
  534. package/src/surfaces/pane-grid.ts +15 -10
  535. package/src/surfaces/panel-activity.ts +5 -6
  536. package/src/surfaces/panel-data.ts +3 -4
  537. package/src/surfaces/panel-deploy-checklist.json +12 -6
  538. package/src/surfaces/panel-deploy-checklist.ts +8 -7
  539. package/src/surfaces/panel-elements.ts +5 -7
  540. package/src/surfaces/panel-i18n.ts +5 -7
  541. package/src/surfaces/panel-imports.ts +6 -13
  542. package/src/surfaces/panel-outline.ts +25 -19
  543. package/src/surfaces/panel-page.json +72 -2
  544. package/src/surfaces/panel-page.ts +49 -25
  545. package/src/surfaces/panel-problems.ts +5 -7
  546. package/src/surfaces/panel-signals.json +1 -1
  547. package/src/surfaces/panel-signals.ts +25 -39
  548. package/src/surfaces/panel-stylebook-layers.json +71 -204
  549. package/src/surfaces/panel-stylebook-layers.ts +5 -29
  550. package/src/surfaces/preferences.json +120 -48
  551. package/src/surfaces/preferences.ts +29 -11
  552. package/src/surfaces/progress-modal.ts +15 -9
  553. package/src/surfaces/properties-panel.json +1 -1
  554. package/src/surfaces/properties-panel.ts +20 -42
  555. package/src/surfaces/publish-quick.json +428 -0
  556. package/src/surfaces/publish-quick.ts +165 -0
  557. package/src/surfaces/publish-workspace.json +2892 -0
  558. package/src/surfaces/publish-workspace.ts +391 -0
  559. package/src/surfaces/publish.ts +18 -18
  560. package/src/surfaces/push-plan.ts +7 -8
  561. package/src/surfaces/rail.json +1 -159
  562. package/src/surfaces/rail.ts +22 -79
  563. package/src/surfaces/reference-field.ts +11 -15
  564. package/src/surfaces/schema-builder.ts +16 -22
  565. package/src/surfaces/schema-form.json +10 -2
  566. package/src/surfaces/schema-form.ts +17 -25
  567. package/src/surfaces/secret-field.ts +9 -6
  568. package/src/surfaces/seo.json +1 -1
  569. package/src/surfaces/seo.ts +21 -15
  570. package/src/surfaces/settings-contexts.ts +9 -7
  571. package/src/surfaces/settings-contributed.json +5 -5
  572. package/src/surfaces/settings-contributed.ts +32 -12
  573. package/src/surfaces/settings-css-vars.json +44 -36
  574. package/src/surfaces/settings-css-vars.ts +82 -16
  575. package/src/surfaces/settings-defs.json +2 -2
  576. package/src/surfaces/settings-defs.ts +17 -21
  577. package/src/surfaces/settings-deploy.json +2 -15
  578. package/src/surfaces/settings-deploy.ts +9 -16
  579. package/src/surfaces/settings-dialog.json +51 -0
  580. package/src/surfaces/settings-dialog.ts +169 -0
  581. package/src/surfaces/settings-extensions.ts +5 -6
  582. package/src/surfaces/settings-head.ts +33 -39
  583. package/src/surfaces/settings-locales.ts +8 -20
  584. package/src/surfaces/settings-overview.json +3 -3
  585. package/src/surfaces/settings-overview.ts +14 -8
  586. package/src/surfaces/settings-packages.ts +8 -7
  587. package/src/surfaces/settings-pane.json +269 -46
  588. package/src/surfaces/settings-pane.ts +88 -36
  589. package/src/surfaces/settings-rawjson.ts +5 -6
  590. package/src/surfaces/shell.json +2 -1
  591. package/src/surfaces/shell.ts +1 -2
  592. package/src/surfaces/site-panel.json +1029 -0
  593. package/src/surfaces/site-panel.ts +233 -0
  594. package/src/surfaces/slash-menu.json +63 -21
  595. package/src/surfaces/slash-menu.ts +42 -9
  596. package/src/surfaces/statements.ts +13 -18
  597. package/src/surfaces/statusbar.ts +56 -29
  598. package/src/surfaces/style-panel.ts +18 -31
  599. package/src/surfaces/stylebook-chrome.ts +3 -5
  600. package/src/surfaces/styles-panel.json +735 -0
  601. package/src/surfaces/styles-panel.ts +195 -0
  602. package/src/surfaces/styles-variables.json +149 -0
  603. package/src/surfaces/styles-variables.ts +145 -0
  604. package/src/surfaces/tab-strip.json +4 -4
  605. package/src/surfaces/tab-strip.ts +14 -13
  606. package/src/surfaces/target-line.ts +6 -7
  607. package/src/surfaces/welcome.ts +6 -8
  608. package/src/surfaces/writing-banner.json +94 -0
  609. package/src/surfaces/writing-banner.ts +80 -0
  610. package/src/tabs/bare-repeaters.ts +101 -0
  611. package/src/tabs/patch-ops.ts +4 -3
  612. package/src/tabs/project-config.ts +32 -21
  613. package/src/tabs/selection.ts +36 -8
  614. package/src/tabs/tab.ts +99 -48
  615. package/src/tabs/transact.ts +98 -53
  616. package/src/types.ts +53 -43
  617. package/src/ui/ai-credentials-form.ts +10 -13
  618. package/src/ui/ai-model-picker.ts +3 -3
  619. package/src/ui/cf-account-picker.ts +7 -9
  620. package/src/ui/color-selector.ts +9 -5
  621. package/src/ui/dynamic-slot.ts +7 -8
  622. package/src/ui/expression-editor.ts +112 -105
  623. package/src/ui/form-controls.ts +104 -56
  624. package/src/ui/formula-catalog.ts +239 -230
  625. package/src/ui/formula-chips.ts +33 -18
  626. package/src/ui/layers.ts +57 -31
  627. package/src/ui/media-picker.ts +300 -47
  628. package/src/ui/popover-surface.ts +20 -12
  629. package/src/ui/progress-modal.ts +13 -8
  630. package/src/ui/regions.ts +14 -12
  631. package/src/ui/schema-form.ts +372 -97
  632. package/src/ui/surface.ts +71 -8
  633. package/src/ui/timing.ts +9 -0
  634. package/src/ui/value-source.ts +44 -31
  635. package/src/ui/virtual-window.ts +29 -3
  636. package/src/utils/base64.ts +6 -4
  637. package/src/utils/edit-display.ts +366 -111
  638. package/src/utils/element-selectors.ts +3 -2
  639. package/src/utils/google-fonts.ts +15 -14
  640. package/src/utils/inherited-style.ts +18 -20
  641. package/src/utils/link-target.ts +1 -1
  642. package/src/utils/local-day.ts +18 -0
  643. package/src/utils/preview-format.ts +25 -3
  644. package/src/utils/strip-events.ts +49 -22
  645. package/src/utils/studio-utils.ts +29 -14
  646. package/src/view.ts +2 -3
  647. package/src/workspace/pane-derive.ts +14 -16
  648. package/src/workspace/session.ts +81 -50
  649. package/src/workspace/tab-workspace.ts +137 -0
  650. package/src/workspace/workspace-back.ts +189 -0
  651. package/src/workspace/workspace-home.ts +133 -0
  652. package/src/workspace/workspace-ids.ts +129 -0
  653. package/src/workspace/workspace-switch.ts +372 -0
  654. package/src/workspace/workspace.ts +165 -47
  655. package/styles/shell-frame.css +30 -7
  656. package/styles/shell-frame.json +15 -3
  657. package/dist/chunks/2020-va2wwra4.js +0 -4
  658. package/dist/chunks/adapter-f93pafd7.js +0 -4
  659. package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
  660. package/dist/chunks/cf-settings-125tdm0w.js +0 -4
  661. package/dist/chunks/color-area-jqhna8zy.js +0 -4
  662. package/dist/chunks/color-field-embq5ctg.js +0 -4
  663. package/dist/chunks/color-fpezvnkt.js +0 -4
  664. package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
  665. package/dist/chunks/combobox-773hdzyj.js +0 -4
  666. package/dist/chunks/components-ax2f1fnn.js +0 -4
  667. package/dist/chunks/content-source-108aqtk1.js +0 -4
  668. package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
  669. package/dist/chunks/dialog-mtm9fq5t.js +0 -4
  670. package/dist/chunks/editor-pfgdmkb0.js +0 -4
  671. package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
  672. package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
  673. package/dist/chunks/file-ops-meej5mqf.js +0 -4
  674. package/dist/chunks/files-44vp8a2s.js +0 -4
  675. package/dist/chunks/format-host-7q1petb9.js +0 -4
  676. package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
  677. package/dist/chunks/git-panel-zngbymvd.js +0 -4
  678. package/dist/chunks/grid-view-sx9vynsp.js +0 -51
  679. package/dist/chunks/icons-p44xhjf0.js +0 -4
  680. package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
  681. package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
  682. package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
  683. package/dist/chunks/iframe-host-qk3ycq87.js +0 -4
  684. package/dist/chunks/index-wkyfjeqz.js +0 -4
  685. package/dist/chunks/jsonMode-s8kt9dsj.js +0 -13
  686. package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
  687. package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
  688. package/dist/chunks/layers-xd92fg8d.js +0 -4
  689. package/dist/chunks/listbox-s8fkmnq8.js +0 -4
  690. package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
  691. package/dist/chunks/media-picker-0svzkdyb.js +0 -4
  692. package/dist/chunks/menu-37d07z9m.js +0 -4
  693. package/dist/chunks/menu-5c55ea3d.js +0 -4
  694. package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
  695. package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
  696. package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
  697. package/dist/chunks/notify-0xgtn8q1.js +0 -4
  698. package/dist/chunks/number-field-gw7sq8rn.js +0 -4
  699. package/dist/chunks/parse-897fvqah.js +0 -4
  700. package/dist/chunks/platform-v1qctbe6.js +0 -4
  701. package/dist/chunks/popover-8htra4er.js +0 -4
  702. package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
  703. package/dist/chunks/quick-search-a54e6t5n.js +0 -4
  704. package/dist/chunks/references-gmqp82fs.js +0 -4
  705. package/dist/chunks/right-panel-v7t9awbk.js +0 -4
  706. package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
  707. package/dist/chunks/select-n3v7gwas.js +0 -4
  708. package/dist/chunks/split-pff8f3ze.js +0 -4
  709. package/dist/chunks/studio-0bhx5hz6.js +0 -5
  710. package/dist/chunks/studio-0k1ddnyy.js +0 -6
  711. package/dist/chunks/studio-1b04pd0j.js +0 -64
  712. package/dist/chunks/studio-4dwbj6gb.js +0 -5
  713. package/dist/chunks/studio-4tanh828.js +0 -5
  714. package/dist/chunks/studio-55h4mstj.js +0 -4
  715. package/dist/chunks/studio-5tnvjkz4.js +0 -5
  716. package/dist/chunks/studio-60dqgb0c.js +0 -5
  717. package/dist/chunks/studio-61dp09qg.js +0 -9
  718. package/dist/chunks/studio-63epcrj2.js +0 -5
  719. package/dist/chunks/studio-74k29dy9.js +0 -5
  720. package/dist/chunks/studio-7vg6jcd3.js +0 -5
  721. package/dist/chunks/studio-7zx31knw.js +0 -9
  722. package/dist/chunks/studio-8bxk97km.js +0 -5
  723. package/dist/chunks/studio-933e30n4.js +0 -5
  724. package/dist/chunks/studio-98wnwhbg.js +0 -5
  725. package/dist/chunks/studio-9mccjwjh.js +0 -14
  726. package/dist/chunks/studio-a2ke1e4t.js +0 -5
  727. package/dist/chunks/studio-e3a2a6v3.js +0 -4
  728. package/dist/chunks/studio-e81q1vb9.js +0 -5
  729. package/dist/chunks/studio-epgrmqqm.js +0 -5
  730. package/dist/chunks/studio-ery42sqr.js +0 -4
  731. package/dist/chunks/studio-g1shz58g.js +0 -5
  732. package/dist/chunks/studio-gf0fz03c.js +0 -5
  733. package/dist/chunks/studio-gjtpe62q.js +0 -6
  734. package/dist/chunks/studio-gkskhg7m.js +0 -5
  735. package/dist/chunks/studio-gx4dnjzd.js +0 -5
  736. package/dist/chunks/studio-j03zga3y.js +0 -9
  737. package/dist/chunks/studio-jhpxeckz.js +0 -5
  738. package/dist/chunks/studio-k01r7ykp.js +0 -5
  739. package/dist/chunks/studio-kk7h30ne.js +0 -7
  740. package/dist/chunks/studio-kt1zqney.js +0 -5
  741. package/dist/chunks/studio-m3cwhvye.js +0 -5
  742. package/dist/chunks/studio-mcayt6hz.js +0 -5
  743. package/dist/chunks/studio-myjcghv3.js +0 -5
  744. package/dist/chunks/studio-n8bxwc3y.js +0 -4
  745. package/dist/chunks/studio-ngm8gvpb.js +0 -5
  746. package/dist/chunks/studio-nj5a01jy.js +0 -928
  747. package/dist/chunks/studio-pcgz8heb.js +0 -5
  748. package/dist/chunks/studio-qcsq0t15.js +0 -5
  749. package/dist/chunks/studio-qkstvve9.js +0 -5
  750. package/dist/chunks/studio-qv1pwd3c.js +0 -5
  751. package/dist/chunks/studio-rc6dvxjb.js +0 -7
  752. package/dist/chunks/studio-s8dmmz66.js +0 -5
  753. package/dist/chunks/studio-sp5xzbj4.js +0 -6
  754. package/dist/chunks/studio-szsjbj0g.js +0 -5
  755. package/dist/chunks/studio-t1xzawhr.js +0 -16
  756. package/dist/chunks/studio-tdcprbqb.js +0 -5
  757. package/dist/chunks/studio-vrmcjf9g.js +0 -7
  758. package/dist/chunks/studio-vyc0b4he.js +0 -10
  759. package/dist/chunks/studio-w0cgf6jg.js +0 -5
  760. package/dist/chunks/studio-w3hskzqk.js +0 -5
  761. package/dist/chunks/studio-xgrgcdyh.js +0 -9
  762. package/dist/chunks/studio-xz2yxfcb.js +0 -5
  763. package/dist/chunks/studio-y6n42tgs.js +0 -5
  764. package/dist/chunks/studio-yb560vxr.js +0 -5
  765. package/dist/chunks/studio-yn9f8vtx.js +0 -5
  766. package/dist/chunks/studio-yw05w8f0.js +0 -7
  767. package/dist/chunks/studio-z16sgavc.js +0 -5
  768. package/dist/chunks/studio-zey7zsdw.js +0 -12
  769. package/dist/chunks/studio-zyqn40w4.js +0 -5
  770. package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
  771. package/dist/chunks/tabs-jwthg40w.js +0 -4
  772. package/dist/chunks/textfield-spy3hc77.js +0 -4
  773. package/dist/chunks/toast-4d35zd64.js +0 -4
  774. package/dist/chunks/toast-host-8sjmfed3.js +0 -4
  775. package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
  776. package/dist/chunks/tree-h19v1jfz.js +0 -4
  777. package/dist/chunks/tsMode-2frah6h1.js +0 -14
  778. package/dist/chunks/workspace-zt81g1ms.js +0 -4
  779. package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
  780. package/src/panels/frontmatter-panel.ts +0 -701
  781. package/src/panels/git-panel.ts +0 -1120
  782. package/src/surfaces/doc-header.json +0 -776
  783. package/src/surfaces/doc-header.ts +0 -231
  784. package/src/surfaces/git-panel.json +0 -1880
  785. package/src/surfaces/git-panel.ts +0 -272
@@ -0,0 +1,195 @@
1
+ /// <reference lib="dom" />
2
+ /**
3
+ * The Styles panel surface: the Styles workspace's Navigator, as a Jx document over the kit
4
+ * (`specs/studio.md` §7.1).
5
+ *
6
+ * This is the adapter. `panels/styles-panel.ts` keeps every decision (which custom properties the
7
+ * project declares and how they group, what each colour resolves to, which tags the catalogue holds
8
+ * and which of them project.json already styles, which color schemes `$media` declares, and which
9
+ * row is current) and hands this module one projection whose every field is already a string. The
10
+ * document draws three sections and decides nothing.
11
+ *
12
+ * @docs studio/design/tokens
13
+ */
14
+
15
+ import { reactive } from "../reactivity";
16
+ import { mountSurface, registerSurface } from "../ui/surface";
17
+ import stylesPanelDoc from "./styles-panel.json";
18
+ import type { SurfaceHandle } from "../ui/surface";
19
+
20
+ registerSurface("styles-panel", stylesPanelDoc);
21
+
22
+ /** One custom property under its group. */
23
+ export interface StylesVariableRow {
24
+ /** The property, by its real name: `--accent`. Also the row's key. */
25
+ name: string;
26
+ /** What it is declared as, as text. */
27
+ value: string;
28
+ /** `swatch` for a colour, whose chip is drawn; `none` for every other group. */
29
+ swatchState: "swatch" | "none";
30
+ /** The colour the chip is painted, already resolved through any `var()` chain; "" for none. */
31
+ swatch: string;
32
+ /** Whether this is the property the Variables view is pointed at. */
33
+ selected: boolean;
34
+ }
35
+
36
+ /** One group of custom properties: Colors, Fonts, Sizes & Spacing, Other. */
37
+ export interface StylesVariableGroup {
38
+ /** The token group id, `color`; the key, and what a heading click shows. */
39
+ id: string;
40
+ title: string;
41
+ /** How many the group holds, as text: "6". */
42
+ count: string;
43
+ /** The count, said in words for a screen reader: "6 variables". */
44
+ countLabel: string;
45
+ variables: StylesVariableRow[];
46
+ }
47
+
48
+ /** One element default, by tag name. */
49
+ export interface StylesElementRow {
50
+ /** What a click selects: the compound path (`ul li`), or a component's tag. Also the key. */
51
+ key: string;
52
+ /** The tag name the row shows: `h1`, `li`, `site-card`. */
53
+ tag: string;
54
+ /** How deep the row sits, as a CSS length, read through `--row-indent`. */
55
+ indent: string;
56
+ /** Whether project.json already styles this tag: the dot. */
57
+ customized: boolean;
58
+ /** Whether this is the tag the Elements view has selected. */
59
+ selected: boolean;
60
+ }
61
+
62
+ /** One block of the catalogue: Headings, Lists, Components. */
63
+ export interface StylesElementGroup {
64
+ key: string;
65
+ label: string;
66
+ rows: StylesElementRow[];
67
+ }
68
+
69
+ /** One color scheme the project declares. */
70
+ export interface StylesSchemeRow {
71
+ /** The `$media` entry, `--dark`. */
72
+ key: string;
73
+ /** "Light" or "Dark". */
74
+ label: string;
75
+ /** The media query that selects it: "(prefers-color-scheme: dark)". */
76
+ query: string;
77
+ }
78
+
79
+ /** Everything the document draws. */
80
+ export interface StylesPanelValues {
81
+ /** `none` asks for a project; `styles` draws the three sections. */
82
+ body: "none" | "styles";
83
+ /** Every custom property in the root style block, as text. */
84
+ variableCount: string;
85
+ variablesState: "empty" | "listed";
86
+ groups: StylesVariableGroup[];
87
+ elementGroups: StylesElementGroup[];
88
+ /** How many tags project.json styles, as the on-screen count ("3 styled"), and in full words. */
89
+ customizedCount: string;
90
+ customizedLabel: string;
91
+ schemesState: "empty" | "listed";
92
+ schemes: StylesSchemeRow[];
93
+ }
94
+
95
+ /** What a control can ask the panel to do. Every one is a decision the flow owns. */
96
+ export interface StylesPanelActions {
97
+ /** A group heading: the Variables view, at that group. */
98
+ showGroup: (group: string) => void;
99
+ /** A variable row: the Variables view, at that property. */
100
+ selectVariable: (name: string) => void;
101
+ /** **Add variable**: the Variables view's add row. */
102
+ addVariable: () => void;
103
+ /** An element row: the Elements view, with that tag selected. */
104
+ selectElement: (path: string) => void;
105
+ /** **Manage color schemes…**: Project Settings › Contexts. */
106
+ manageSchemes: () => void;
107
+ }
108
+
109
+ export interface StylesPanelSurfaceHandle {
110
+ readonly ready: Promise<unknown>;
111
+ /** Whether the mounted root is still where it was put. */
112
+ connected: () => boolean;
113
+ update: (values: StylesPanelValues) => void;
114
+ dispose: () => void;
115
+ }
116
+
117
+ interface StylesPanelScope extends StylesPanelValues, StylesPanelActions {}
118
+
119
+ /** The scope's shape before the first projection lands on it. */
120
+ export function emptyStylesPanelValues(): StylesPanelValues {
121
+ return {
122
+ body: "none",
123
+ customizedCount: "0",
124
+ customizedLabel: "",
125
+ elementGroups: [],
126
+ groups: [],
127
+ schemes: [],
128
+ schemesState: "empty",
129
+ variableCount: "0",
130
+ variablesState: "empty",
131
+ };
132
+ }
133
+
134
+ /** Write a projection in, field by field, so an unchanged field is inert. */
135
+ function project(scope: StylesPanelScope, values: StylesPanelValues): void {
136
+ scope.body = values.body;
137
+ scope.variableCount = values.variableCount;
138
+ scope.variablesState = values.variablesState;
139
+ scope.groups = values.groups;
140
+ scope.elementGroups = values.elementGroups;
141
+ scope.customizedCount = values.customizedCount;
142
+ scope.customizedLabel = values.customizedLabel;
143
+ scope.schemesState = values.schemesState;
144
+ scope.schemes = values.schemes;
145
+ }
146
+
147
+ /**
148
+ * Mount the Styles panel into `container`, the content box the Navigator painted.
149
+ *
150
+ * @param container Where the document goes.
151
+ * @param values What it shows to begin with.
152
+ * @param actions What its controls do.
153
+ */
154
+ export function mountStylesPanelSurface(
155
+ container: HTMLElement,
156
+ values: StylesPanelValues,
157
+ actions: StylesPanelActions,
158
+ ): StylesPanelSurfaceHandle {
159
+ const scope: StylesPanelScope = reactive<StylesPanelScope>({
160
+ ...emptyStylesPanelValues(),
161
+ ...actions,
162
+ });
163
+ project(scope, values);
164
+
165
+ let mounted: SurfaceHandle | null = null;
166
+ let disposed = false;
167
+ const ready = mountSurface("styles-panel", scope, container).then((surface) => {
168
+ if (disposed) {
169
+ surface.dispose();
170
+ return surface;
171
+ }
172
+ mounted = surface;
173
+ return surface;
174
+ });
175
+
176
+ return {
177
+ connected: () => {
178
+ if (disposed) {
179
+ return false;
180
+ }
181
+ const root = mounted?.root;
182
+ // A mount still in flight is not yet in the container, and is not a reason to remount.
183
+ return root === undefined ? true : container.contains(root);
184
+ },
185
+ dispose() {
186
+ disposed = true;
187
+ mounted?.dispose();
188
+ mounted = null;
189
+ },
190
+ ready,
191
+ update: (next) => {
192
+ project(scope, next);
193
+ },
194
+ };
195
+ }
@@ -0,0 +1,149 @@
1
+ {
2
+ "$schema": "https://jxsuite.com/schema/v1",
3
+ "$id": "StudioStylesVariables",
4
+ "$description": "The Styles workspace's Variables view (studio.md §7.1): the project's CSS custom properties, the `--` keys of `project.json`'s root style block, edited in the pane over the same tab as the Elements view and the Code view. It draws the view's frame and nothing it edits: a heading, one sentence saying what these are, one saying when an edit reaches the file (a variable is written as it is changed, which also writes any element style edit still waiting for Save, because both live in the one file), the door to Project Settings › Contexts where colour schemes and breakpoints are declared, and an empty `editor` island the CSS Variables editor (`settings/css-vars-editor.ts`) is mounted into (studio-ui-guidelines.md §9.4). `style/variables-view.ts` decides every word.",
5
+ "tagName": "section",
6
+ "attributes": {
7
+ "part": "variables-view",
8
+ "aria-labelledby": "${state.headingId}",
9
+ "data-jx-region": "${state.region}"
10
+ },
11
+ "style": {
12
+ "$description": "Fills the pane's stage by its own geometry, as the workspace home does (`workspace-home.json`): the stage is `position: relative`, so the view takes the whole of it and scrolls itself without the stage being restyled for it. The column is capped so a value field never stretches across a wide pane.",
13
+ "position": "absolute",
14
+ "inset": "0",
15
+ "overflowY": "auto",
16
+ "boxSizing": "border-box",
17
+ "padding": "var(--jx-space-6)",
18
+ "fontFamily": "var(--jx-font-sans)",
19
+ "color": "var(--fg)",
20
+ "background": "var(--bg-panel)",
21
+ "& [part=\"column\"]": {
22
+ "maxWidth": "760px",
23
+ "margin": "0 auto"
24
+ },
25
+ "& [part=\"head\"]": {
26
+ "display": "flex",
27
+ "flexDirection": "column",
28
+ "gap": "var(--jx-space-2)",
29
+ "marginBottom": "var(--jx-space-5)"
30
+ },
31
+ "& [part=\"title\"]": {
32
+ "margin": "0",
33
+ "fontSize": "var(--jx-text-lg)",
34
+ "fontWeight": "600"
35
+ },
36
+ "& [part=\"lede\"], & [part=\"saving\"]": {
37
+ "margin": "0",
38
+ "maxWidth": "68ch",
39
+ "lineHeight": "1.5",
40
+ "fontSize": "var(--jx-text-md)",
41
+ "color": "var(--fg-dim)"
42
+ },
43
+ "& [part=\"saving\"]": {
44
+ "fontSize": "var(--jx-text-sm)"
45
+ },
46
+ "& [part=\"schemes\"]": {
47
+ "display": "flex",
48
+ "alignItems": "center",
49
+ "flexWrap": "wrap",
50
+ "gap": "var(--jx-space-2)",
51
+ "fontSize": "var(--jx-text-sm)",
52
+ "color": "var(--fg-dim)"
53
+ },
54
+ "& [part=\"schemes-text\"]": {
55
+ "margin": "0"
56
+ }
57
+ },
58
+ "children": [
59
+ {
60
+ "tagName": "div",
61
+ "attributes": {
62
+ "part": "column"
63
+ },
64
+ "children": [
65
+ {
66
+ "tagName": "header",
67
+ "attributes": {
68
+ "part": "head"
69
+ },
70
+ "children": [
71
+ {
72
+ "tagName": "h2",
73
+ "attributes": {
74
+ "part": "title",
75
+ "id": "${state.headingId}"
76
+ },
77
+ "textContent": "${state.title}"
78
+ },
79
+ {
80
+ "tagName": "p",
81
+ "attributes": {
82
+ "part": "lede"
83
+ },
84
+ "textContent": "${state.lede}"
85
+ },
86
+ {
87
+ "tagName": "p",
88
+ "attributes": {
89
+ "part": "saving"
90
+ },
91
+ "textContent": "${state.saving}"
92
+ },
93
+ {
94
+ "tagName": "div",
95
+ "attributes": {
96
+ "part": "schemes"
97
+ },
98
+ "children": [
99
+ {
100
+ "tagName": "p",
101
+ "attributes": {
102
+ "part": "schemes-text"
103
+ },
104
+ "textContent": "${state.schemes}"
105
+ },
106
+ {
107
+ "tagName": "jx-action-button",
108
+ "attributes": {
109
+ "part": "manage-contexts"
110
+ },
111
+ "$props": {
112
+ "size": "sm",
113
+ "quiet": true
114
+ },
115
+ "onclick": {
116
+ "$prototype": "Function",
117
+ "body": [
118
+ {
119
+ "operator": "call",
120
+ "target": {
121
+ "$ref": "#/state/manageContexts"
122
+ },
123
+ "value": []
124
+ }
125
+ ],
126
+ "description": "Opens Project Settings on Contexts, the one place a colour scheme or a breakpoint is declared (studio.md §17.1)."
127
+ },
128
+ "children": [
129
+ {
130
+ "tagName": "span",
131
+ "textContent": "${state.manageLabel}"
132
+ }
133
+ ]
134
+ }
135
+ ]
136
+ }
137
+ ]
138
+ },
139
+ {
140
+ "tagName": "div",
141
+ "attributes": {
142
+ "part": "editor",
143
+ "role": "none"
144
+ }
145
+ }
146
+ ]
147
+ }
148
+ ]
149
+ }
@@ -0,0 +1,145 @@
1
+ /// <reference lib="dom" />
2
+ /**
3
+ * The Variables view surface: the frame the Styles workspace draws around the CSS Variables editor,
4
+ * as a Jx document over the kit.
5
+ *
6
+ * This is the adapter. `style/variables-view.ts` keeps the flow (which pane holds the view, what
7
+ * the editor island is handed, when the view follows an edit made elsewhere) and hands this module
8
+ * one projection: the heading, the sentences and the region. The document renders that and decides
9
+ * nothing.
10
+ *
11
+ * **The editor is an ISLAND.** The CSS Variables editor is a surface of its own
12
+ * (`surfaces/settings-css-vars.json`), mounted into a container it is handed, so this document
13
+ * renders an empty `editor` node and announces it through `onNodeCreated`, the one seam for an
14
+ * island (studio-ui-guidelines.md §9.4). Nothing here knows what a token is.
15
+ *
16
+ * **The container is CLEARED, because this is a pane and not a panel**, for the reason
17
+ * `surfaces/media-pane.ts` gives: the canvas stage is handed to whichever mode owns it whole.
18
+ *
19
+ * @docs studio/design/tokens
20
+ */
21
+
22
+ import { isString } from "@jxsuite/schema/guards";
23
+ import { reactive } from "../reactivity";
24
+ import { mountSurface, registerSurface } from "../ui/surface";
25
+ import variablesDoc from "./styles-variables.json";
26
+ import type { JxElement } from "@jxsuite/schema/types";
27
+ import type { SurfaceHandle } from "../ui/surface";
28
+
29
+ registerSurface("styles-variables", variablesDoc);
30
+
31
+ /** What the view draws, with every word already decided. */
32
+ export interface VariablesView {
33
+ /** The pane region the view answers to (`pane.primary/variables`). */
34
+ region: string;
35
+ title: string;
36
+ /** What these are: the project's CSS custom properties. */
37
+ lede: string;
38
+ /** When an edit reaches the file. */
39
+ saving: string;
40
+ /** Where colour schemes and breakpoints are declared. */
41
+ schemes: string;
42
+ /** The button that goes there. */
43
+ manageLabel: string;
44
+ }
45
+
46
+ /** What the view's own control does. */
47
+ export interface VariablesActions {
48
+ /** Open Project Settings on Contexts. */
49
+ manageContexts: () => void;
50
+ }
51
+
52
+ /** Where the CSS Variables editor lands. */
53
+ export interface VariablesIslands {
54
+ /** Called with the `editor` node every time the document creates one. */
55
+ editorSlot: (host: HTMLElement) => void;
56
+ }
57
+
58
+ /**
59
+ * A mounted view: whether it still stands, and a way to take it down. There is no update: every
60
+ * word the view draws is a constant, and the editor island redraws itself.
61
+ */
62
+ export interface VariablesSurfaceHandle {
63
+ /** Whether the mount is still in the host it was given (a mount still in flight counts). */
64
+ attached: () => boolean;
65
+ dispose: () => void;
66
+ /** Settles once the document is in the host. */
67
+ ready: Promise<void>;
68
+ }
69
+
70
+ interface VariablesScope extends VariablesView, VariablesActions {
71
+ headingId: string;
72
+ }
73
+
74
+ /** The view as the document reads it. */
75
+ function project(scope: VariablesScope, view: VariablesView): void {
76
+ Object.assign(scope, view);
77
+ scope.headingId = `styles-variables-${view.region.replaceAll(/[^\w-]/g, "-")}`;
78
+ }
79
+
80
+ /** The `part` a node was authored with, or `""`: the only thing this adapter asks about a node. */
81
+ function partOf(def: JxElement | string): string {
82
+ const part = isString(def) ? undefined : def.attributes?.["part"];
83
+ return isString(part) ? part : "";
84
+ }
85
+
86
+ /**
87
+ * Mount the Variables view into `host`, the pane's canvas stage.
88
+ *
89
+ * @param {HTMLElement} host The pane's canvas stage, emptied first.
90
+ * @param {VariablesView} view What to draw right now.
91
+ * @param {VariablesActions} actions What the view's control does.
92
+ * @param {VariablesIslands} islands Where the editor lands.
93
+ * @returns {VariablesSurfaceHandle}
94
+ */
95
+ export function mountVariablesSurface(
96
+ host: HTMLElement,
97
+ view: VariablesView,
98
+ actions: VariablesActions,
99
+ islands: VariablesIslands,
100
+ ): VariablesSurfaceHandle {
101
+ host.replaceChildren();
102
+ const scope: VariablesScope = reactive<VariablesScope>({
103
+ headingId: "",
104
+ lede: "",
105
+ manageContexts: actions.manageContexts,
106
+ manageLabel: "",
107
+ region: "",
108
+ saving: "",
109
+ schemes: "",
110
+ title: "",
111
+ });
112
+ project(scope, view);
113
+
114
+ let mounted: SurfaceHandle | null = null;
115
+ let disposed = false;
116
+ const ready = mountSurface("styles-variables", scope, host, {
117
+ onNodeCreated: (element, _path, def) => {
118
+ if (element instanceof HTMLElement && partOf(def) === "editor") {
119
+ islands.editorSlot(element);
120
+ }
121
+ },
122
+ }).then((surface) => {
123
+ if (disposed) {
124
+ surface.dispose();
125
+ return;
126
+ }
127
+ mounted = surface;
128
+ });
129
+
130
+ return {
131
+ attached: () => {
132
+ if (disposed) {
133
+ return false;
134
+ }
135
+ const root = mounted?.root;
136
+ return root === undefined ? true : host.contains(root);
137
+ },
138
+ dispose() {
139
+ disposed = true;
140
+ mounted?.dispose();
141
+ mounted = null;
142
+ },
143
+ ready,
144
+ };
145
+ }
@@ -115,7 +115,7 @@
115
115
  "color": "var(--jx-bg)"
116
116
  },
117
117
  "& [part=\"pin\"]": {
118
- "$description": "`.tab-strip-pin`, in `jx-tab`'s actions slot. A click on it never also selects the tab, and that is the KIT's doing now rather than a `stopPropagation` this document has to remember: `jx-tab` stops a click inside its actions slot exactly as it stops one on its own close button.",
118
+ "$description": "`.tab-strip-pin`, in `jx-tab`'s actions slot, on the current chip and on a pinned one (the rule below). A click on it never also selects the tab, and that is the KIT's doing now rather than a `stopPropagation` this document has to remember: `jx-tab` stops a click inside its actions slot exactly as it stops one on its own close button.",
119
119
  "display": "flex",
120
120
  "alignItems": "center",
121
121
  "justifyContent": "center",
@@ -130,7 +130,6 @@
130
130
  "lineHeight": "1",
131
131
  "borderRadius": "var(--radius)",
132
132
  "cursor": "pointer",
133
- "opacity": "0",
134
133
  ":hover": {
135
134
  "background": "var(--hover-bg)",
136
135
  "color": "var(--fg)"
@@ -140,8 +139,9 @@
140
139
  "outlineOffset": "-1px"
141
140
  }
142
141
  },
143
- "& [part=\"tab\"]:hover [part=\"pin\"], & [part=\"tab\"][aria-selected=\"true\"] [part=\"pin\"], & [part=\"tab\"][data-pinned] [part=\"pin\"]": {
144
- "opacity": "1"
142
+ "& [part=\"tab\"]:not([aria-selected=\"true\"]):not([data-pinned]) [part=\"pin\"]": {
143
+ "$description": "An inactive, unpinned chip draws no pin and keeps no box for one. It was `opacity: 0` here and revealed on hover, so the invisible button still took 16px of the chip and every click on it: the centre of a short chip (the Media home's, beside its viewer tab) was the pin, so the click toggled a pin nobody could see and the tab did not activate. A box that takes clicks is a control, and a control is either shown or absent. The current chip shows its pin, a pinned chip shows its mark, and any chip pins from its context menu (`document.togglePinned`).",
144
+ "display": "none"
145
145
  },
146
146
  "& [part=\"tab\"][data-pinned] [part=\"pin\"]": {
147
147
  "color": "var(--accent)"
@@ -28,20 +28,21 @@
28
28
  * @docs studio/interface
29
29
  */
30
30
 
31
+ import { isJsonObject, isString } from "@jxsuite/schema/guards";
31
32
  import { reactive } from "../reactivity";
32
33
  import { mountSurface, registerSurface } from "../ui/surface";
33
34
  import tabStripDoc from "./tab-strip.json";
34
- import type { JxDocument, JxElement } from "@jxsuite/schema/types";
35
+ import type { JxElement } from "@jxsuite/schema/types";
35
36
  import type { JxScope } from "@jxsuite/runtime/types";
36
37
  import type { SurfaceHandle } from "../ui/surface";
37
38
 
38
- registerSurface("tab-strip", tabStripDoc as unknown as JxDocument);
39
+ registerSurface("tab-strip", tabStripDoc);
39
40
 
40
41
  /**
41
42
  * One chip, as the document draws it. Every field is a value: the document asks no question about a
42
43
  * tab, and there is no branch in it that a projection has not already decided.
43
44
  */
44
- export interface TabChipView extends Record<string, unknown> {
45
+ export interface TabChipView {
45
46
  /** The tab id: the repeater's key, the tab's `value`, and what every action is addressed with. */
46
47
  key: string;
47
48
  /** The shortest suffix that tells this document apart, or a page's route. */
@@ -107,7 +108,7 @@ export interface TabStripActions {
107
108
  /** The chevron, or a derived pane's ✕. The anchor is the button that was pressed. */
108
109
  openTrailing: (anchor: HTMLElement | null) => void;
109
110
  /** A wheel over the strip. A host function in handler position, so it takes the event. */
110
- wheel: (scope: unknown, event: WheelEvent) => void;
111
+ wheel: (scope: JxScope, event: WheelEvent) => void;
111
112
  /** A chip element exists. `panels/tab-strip.ts` makes it a pragmatic drag source and drop target. */
112
113
  chipHost: (element: HTMLElement, id: string) => void;
113
114
  /**
@@ -146,20 +147,20 @@ export interface TabStripSurface {
146
147
  }
147
148
 
148
149
  /** The scope `tab-strip.json` reads. */
149
- interface TabStripScope
150
- extends Record<string, unknown>, TabStripValues, TabStripActions, TabStripDragState {}
150
+ interface TabStripScope extends TabStripValues, TabStripActions, TabStripDragState {}
151
151
 
152
152
  /** The `part` a node's definition carries, or `""` for a text node or an unmarked element. */
153
153
  function partOf(def: JxElement | string): string {
154
- const part = typeof def === "string" ? undefined : def.attributes?.["part"];
155
- return typeof part === "string" ? part : "";
154
+ const part = isString(def) ? undefined : def.attributes?.["part"];
155
+ return isString(part) ? part : "";
156
156
  }
157
157
 
158
158
  /** The tab id a mapped `jx-tab` node was rendered for, read from the row scope, or `""`. */
159
159
  function mappedChipKey(state: JxScope | undefined): string {
160
- const map = state?.["$map"] as { item?: { key?: unknown } } | undefined;
161
- const key = map?.item?.key;
162
- return typeof key === "string" ? key : "";
160
+ const map = state?.["$map"];
161
+ const item = isJsonObject(map) ? map["item"] : undefined;
162
+ const key = isJsonObject(item) ? item["key"] : undefined;
163
+ return isString(key) ? key : "";
163
164
  }
164
165
 
165
166
  /**
@@ -178,13 +179,13 @@ export function mountTabStripSurface(
178
179
  values: TabStripValues,
179
180
  actions: TabStripActions,
180
181
  ): TabStripSurface {
181
- const scope = reactive<TabStripScope>({
182
+ const scope: TabStripScope = reactive<TabStripScope>({
182
183
  ...values,
183
184
  ...actions,
184
185
  dragKey: "",
185
186
  dropIndex: -1,
186
187
  dropTail: false,
187
- }) as TabStripScope;
188
+ });
188
189
 
189
190
  host.replaceChildren();
190
191
  let mounted: SurfaceHandle | null = null;
@@ -46,11 +46,10 @@ import { reactive } from "../reactivity";
46
46
  import { mountSurface, registerSurface } from "../ui/surface";
47
47
  import { openMenu } from "./menu";
48
48
  import targetLineDoc from "./target-line.json";
49
- import type { JxDocument } from "@jxsuite/schema/types";
50
49
  import type { MenuHandle, MenuRowProjection } from "./menu";
51
50
  import type { SurfaceHandle } from "../ui/surface";
52
51
 
53
- registerSurface("target-line", targetLineDoc as unknown as JxDocument);
52
+ registerSurface("target-line", targetLineDoc);
54
53
 
55
54
  /** The region the line stamps on itself, so a shot can crop it. */
56
55
  const REGION = "inspector/target";
@@ -108,7 +107,7 @@ export const BASE_SELECTOR_LABEL = "base rule";
108
107
  // ─── The projection ──────────────────────────────────────────────────────────
109
108
 
110
109
  /** One word of the sentence, as the document reads it. */
111
- interface ProjectedSegment extends Record<string, unknown> {
110
+ interface ProjectedSegment {
112
111
  key: string;
113
112
  label: string;
114
113
  title: string;
@@ -119,7 +118,7 @@ interface ProjectedSegment extends Record<string, unknown> {
119
118
  }
120
119
 
121
120
  /** The scope `target-line.json` reads. */
122
- interface TargetLineScope extends Record<string, unknown> {
121
+ interface TargetLineScope {
123
122
  region: string;
124
123
  segments: ProjectedSegment[];
125
124
  selectorLabel: string;
@@ -201,7 +200,7 @@ function scope(): TargetLineScope {
201
200
  toggleLabel: "Show affected",
202
201
  warn: false,
203
202
  warningText: "",
204
- }) as TargetLineScope;
203
+ });
205
204
  return _scope;
206
205
  }
207
206
 
@@ -311,11 +310,11 @@ export function openSelectorMenu(): void {
311
310
  },
312
311
  title: BASE_SELECTOR_LABEL,
313
312
  },
314
- ...selector.options.map((option, index) => ({
313
+ ...selector.options.map((option, index): MenuRowProjection => ({
315
314
  /* What the ● in the old menu said: this element already DECLARES this rule. Where you are is
316
315
  stated once, by the trigger's own label — a row that carried both facts would be two
317
316
  answers on one line. */
318
- checked: (selector.declared.has(option) ? "true" : "false") as "true" | "false",
317
+ checked: selector.declared.has(option) ? "true" : "false",
319
318
  destructive: false,
320
319
  disabled: false,
321
320
  dividerAbove: index === 0,