@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,371 @@
1
+ {
2
+ "$schema": "https://jxsuite.com/schema/v1",
3
+ "$id": "StudioEntryInspector",
4
+ "$description": "The Inspector's Entry tab (specs/studio.md §6, §22.5): one collection entry's own settings while it is written on the canvas, the Content-Entry board's sidebar. Its status (draft or published), its fields as the collection's schema types them, the URL its collection page publishes it at, and the file it is stored in. `content/entry-inspector.ts` keeps every decision; the field form is an island it fills, `ui/schema-form.ts`'s, the same form the form-only entry editor draws.",
5
+ "tagName": "div",
6
+ "attributes": {
7
+ "part": "entry",
8
+ "data-jx-region": "${state.region}"
9
+ },
10
+ "style": {
11
+ "$description": "A column of sections, each a small uppercase heading over its rows, like the Page tab beside it.",
12
+ "display": "flex",
13
+ "flexDirection": "column",
14
+ "gap": "var(--jx-space-4)",
15
+ "padding": "var(--jx-space-3)",
16
+ "fontFamily": "var(--jx-font-sans)",
17
+ "fontSize": "var(--jx-text-md)",
18
+ "color": "var(--fg)",
19
+ "& [part=\"section\"]": {
20
+ "display": "flex",
21
+ "flexDirection": "column",
22
+ "gap": "var(--jx-space-2)"
23
+ },
24
+ "& [part=\"section-title\"]": {
25
+ "margin": "0",
26
+ "fontSize": "var(--jx-text-sm)",
27
+ "fontWeight": "700",
28
+ "letterSpacing": "0.06em",
29
+ "textTransform": "uppercase",
30
+ "color": "var(--fg-dim)"
31
+ },
32
+ "& [part=\"head\"]": {
33
+ "display": "flex",
34
+ "alignItems": "baseline",
35
+ "justifyContent": "space-between",
36
+ "gap": "var(--jx-space-2)"
37
+ },
38
+ "& [part=\"kind\"]": {
39
+ "fontWeight": "600"
40
+ },
41
+ "& [part=\"status\"]": {
42
+ "fontSize": "var(--jx-text-sm)",
43
+ "color": "var(--fg-dim)"
44
+ },
45
+ "& [part=\"status\"][data-draft=\"true\"]": {
46
+ "color": "var(--warning)"
47
+ },
48
+ "& [part=\"note\"]": {
49
+ "margin": "0",
50
+ "fontSize": "var(--jx-text-sm)",
51
+ "lineHeight": "1.5",
52
+ "color": "var(--fg-dim)"
53
+ },
54
+ "& [part=\"url\"]": {
55
+ "fontFamily": "var(--font-mono)",
56
+ "fontSize": "var(--jx-text-sm)",
57
+ "wordBreak": "break-all"
58
+ },
59
+ "& [part=\"path\"]": {
60
+ "fontFamily": "var(--font-mono)",
61
+ "fontSize": "var(--jx-text-sm)",
62
+ "color": "var(--fg)",
63
+ "wordBreak": "break-all"
64
+ },
65
+ "& [part=\"fields-head\"]": {
66
+ "display": "flex",
67
+ "alignItems": "center",
68
+ "justifyContent": "space-between"
69
+ }
70
+ },
71
+ "children": [
72
+ {
73
+ "tagName": "section",
74
+ "attributes": {
75
+ "part": "section",
76
+ "aria-labelledby": "entry-inspector-entry"
77
+ },
78
+ "children": [
79
+ {
80
+ "tagName": "div",
81
+ "attributes": {
82
+ "part": "head"
83
+ },
84
+ "children": [
85
+ {
86
+ "tagName": "h3",
87
+ "attributes": {
88
+ "part": "section-title",
89
+ "id": "entry-inspector-entry"
90
+ },
91
+ "textContent": "Entry"
92
+ },
93
+ {
94
+ "tagName": "span",
95
+ "attributes": {
96
+ "part": "status",
97
+ "data-draft": "${state.draft ? 'true' : 'false'}"
98
+ },
99
+ "textContent": "${state.status}"
100
+ }
101
+ ]
102
+ },
103
+ {
104
+ "tagName": "span",
105
+ "attributes": {
106
+ "part": "kind"
107
+ },
108
+ "textContent": "${state.kind}"
109
+ },
110
+ {
111
+ "tagName": "div",
112
+ "attributes": {
113
+ "part": "draft-slot",
114
+ "role": "none"
115
+ },
116
+ "style": {
117
+ "display": "contents"
118
+ },
119
+ "$switch": {
120
+ "$ref": "#/state/draftAxis"
121
+ },
122
+ "cases": {
123
+ "shown": {
124
+ "$description": "The entry's draft state, the one field every collection with a draft workflow shares (site-architecture.md §7.6). A setter: the switch names the state it reaches.",
125
+ "tagName": "jx-switch",
126
+ "attributes": {
127
+ "part": "draft"
128
+ },
129
+ "$props": {
130
+ "checked": {
131
+ "$ref": "#/state/draft"
132
+ },
133
+ "hint": "${state.draftHint}",
134
+ "size": "sm"
135
+ },
136
+ "onchange": {
137
+ "$prototype": "Function",
138
+ "body": [
139
+ {
140
+ "operator": "call",
141
+ "target": {
142
+ "$ref": "#/state/setDraft"
143
+ },
144
+ "value": [
145
+ {
146
+ "$ref": "event#/target/checked"
147
+ }
148
+ ]
149
+ }
150
+ ]
151
+ },
152
+ "children": [
153
+ {
154
+ "tagName": "span",
155
+ "textContent": "Draft"
156
+ }
157
+ ]
158
+ }
159
+ }
160
+ }
161
+ ]
162
+ },
163
+ {
164
+ "tagName": "section",
165
+ "attributes": {
166
+ "part": "section",
167
+ "aria-labelledby": "entry-inspector-fields"
168
+ },
169
+ "children": [
170
+ {
171
+ "tagName": "div",
172
+ "attributes": {
173
+ "part": "fields-head"
174
+ },
175
+ "children": [
176
+ {
177
+ "tagName": "h3",
178
+ "attributes": {
179
+ "part": "section-title",
180
+ "id": "entry-inspector-fields"
181
+ },
182
+ "textContent": "Fields"
183
+ },
184
+ {
185
+ "tagName": "jx-action-button",
186
+ "attributes": {
187
+ "part": "edit-fields"
188
+ },
189
+ "$props": {
190
+ "size": "sm",
191
+ "quiet": true,
192
+ "hint": "Edit this collection's fields in Project Settings",
193
+ "haspopup": "dialog"
194
+ },
195
+ "onclick": {
196
+ "$prototype": "Function",
197
+ "body": [
198
+ {
199
+ "operator": "call",
200
+ "target": {
201
+ "$ref": "#/state/openFields"
202
+ },
203
+ "value": []
204
+ }
205
+ ]
206
+ },
207
+ "children": [
208
+ {
209
+ "tagName": "span",
210
+ "textContent": "Edit"
211
+ }
212
+ ]
213
+ }
214
+ ]
215
+ },
216
+ {
217
+ "tagName": "div",
218
+ "attributes": {
219
+ "part": "fields-slot",
220
+ "role": "none"
221
+ },
222
+ "style": {
223
+ "display": "contents"
224
+ },
225
+ "$switch": {
226
+ "$ref": "#/state/fieldsState"
227
+ },
228
+ "cases": {
229
+ "form": {
230
+ "tagName": "div",
231
+ "attributes": {
232
+ "part": "fields"
233
+ }
234
+ },
235
+ "none": {
236
+ "tagName": "p",
237
+ "attributes": {
238
+ "part": "note"
239
+ },
240
+ "textContent": "This collection declares no fields. Edit adds some in Project Settings."
241
+ }
242
+ }
243
+ }
244
+ ]
245
+ },
246
+ {
247
+ "tagName": "section",
248
+ "attributes": {
249
+ "part": "section",
250
+ "aria-labelledby": "entry-inspector-page"
251
+ },
252
+ "children": [
253
+ {
254
+ "tagName": "div",
255
+ "attributes": {
256
+ "part": "fields-head"
257
+ },
258
+ "children": [
259
+ {
260
+ "tagName": "h3",
261
+ "attributes": {
262
+ "part": "section-title",
263
+ "id": "entry-inspector-page"
264
+ },
265
+ "textContent": "Page"
266
+ },
267
+ {
268
+ "$description": "The door to Search appearance, the same `document.openSeo` the Page tab's button runs: an entry's search title, description and social image are its frontmatter too (studio.md §4.2).",
269
+ "tagName": "jx-action-button",
270
+ "attributes": {
271
+ "part": "seo-button"
272
+ },
273
+ "$props": {
274
+ "size": "sm",
275
+ "quiet": true,
276
+ "label": "Search appearance",
277
+ "hint": "Preview how this entry appears in search and when shared",
278
+ "haspopup": "dialog"
279
+ },
280
+ "onclick": {
281
+ "$prototype": "Function",
282
+ "body": [
283
+ {
284
+ "operator": "call",
285
+ "target": {
286
+ "$ref": "#/state/openSeo"
287
+ },
288
+ "value": []
289
+ }
290
+ ]
291
+ },
292
+ "children": [
293
+ {
294
+ "tagName": "span",
295
+ "textContent": "Search appearance…"
296
+ }
297
+ ]
298
+ }
299
+ ]
300
+ },
301
+ {
302
+ "tagName": "div",
303
+ "attributes": {
304
+ "part": "url-slot",
305
+ "role": "none"
306
+ },
307
+ "style": {
308
+ "display": "contents"
309
+ },
310
+ "$switch": {
311
+ "$ref": "#/state/urlState"
312
+ },
313
+ "cases": {
314
+ "shown": {
315
+ "tagName": "code",
316
+ "attributes": {
317
+ "part": "url"
318
+ },
319
+ "textContent": "${state.url}"
320
+ },
321
+ "none": {
322
+ "tagName": "p",
323
+ "attributes": {
324
+ "part": "note"
325
+ },
326
+ "textContent": "Entries of this collection have no page of their own."
327
+ },
328
+ "unlisted": {
329
+ "$description": "The collection has a page, but the page lists the ids it publishes (`$paths.values`) and this entry is not one of them: naming a URL the build never writes would be a link to nothing.",
330
+ "tagName": "p",
331
+ "attributes": {
332
+ "part": "note"
333
+ },
334
+ "textContent": "Not published: this collection's page lists the entries it publishes, and this is not one of them."
335
+ },
336
+ "loading": {
337
+ "tagName": "p",
338
+ "attributes": {
339
+ "part": "note"
340
+ },
341
+ "textContent": "Finding the page this entry is published at…"
342
+ }
343
+ }
344
+ },
345
+ {
346
+ "tagName": "p",
347
+ "attributes": {
348
+ "part": "note"
349
+ },
350
+ "children": [
351
+ {
352
+ "tagName": "span",
353
+ "textContent": "Stored as "
354
+ },
355
+ {
356
+ "tagName": "code",
357
+ "attributes": {
358
+ "part": "path"
359
+ },
360
+ "textContent": "${state.path}"
361
+ },
362
+ {
363
+ "tagName": "span",
364
+ "textContent": "${state.storage}"
365
+ }
366
+ ]
367
+ }
368
+ ]
369
+ }
370
+ ]
371
+ }
@@ -0,0 +1,143 @@
1
+ /// <reference lib="dom" />
2
+ /**
3
+ * The Inspector's Entry tab surface: one collection entry's status, fields, page URL and file
4
+ * (`specs/studio.md` §6, §22.5).
5
+ *
6
+ * This is the adapter. `content/entry-inspector.ts` decides everything and hands this module one
7
+ * projection; the field form is an island the document renders empty (`part="fields"`) and the flow
8
+ * fills through `onNodeCreated`, because `ui/schema-form.ts` hands back a host element.
9
+ *
10
+ * @docs studio/projects/content-types
11
+ */
12
+
13
+ import { isString } from "@jxsuite/schema/guards";
14
+ import { reactive } from "../reactivity";
15
+ import { mountSurface, registerSurface } from "../ui/surface";
16
+ import entryInspectorDoc from "./entry-inspector.json";
17
+ import type { JxElement } from "@jxsuite/schema/types";
18
+ import type { SurfaceHandle } from "../ui/surface";
19
+
20
+ registerSurface("entry-inspector", entryInspectorDoc);
21
+
22
+ /** Everything the document draws. Every field is a value. */
23
+ export interface EntryInspectorView {
24
+ /** The region id stamped on the root. */
25
+ region: string;
26
+ /** What the entry is, said in the singular: "Post". */
27
+ kind: string;
28
+ /** "Draft", "Published", or "" for a collection with no draft workflow. */
29
+ status: string;
30
+ /** Whether the collection has a draft workflow at all. */
31
+ draftAxis: "hidden" | "shown";
32
+ draft: boolean;
33
+ draftHint: string;
34
+ /** `form` draws the field form's host; `none` says the collection declares no fields. */
35
+ fieldsState: "form" | "none";
36
+ /**
37
+ * `shown` draws the URL; `none` says the collection has no page; `unlisted` that its page lists
38
+ * the entries it publishes and this is not one; `loading` while the pages are read.
39
+ */
40
+ urlState: "shown" | "none" | "unlisted" | "loading";
41
+ url: string;
42
+ /** The file the entry is stored in. */
43
+ path: string;
44
+ /** What the file holds: ". Fields are its frontmatter, and the body is its Markdown." */
45
+ storage: string;
46
+ }
47
+
48
+ /** What the tab's controls do. */
49
+ export interface EntryInspectorActions {
50
+ /** The draft switch moved. A setter, never a toggle. */
51
+ setDraft: (draft: boolean) => void;
52
+ /** **Edit** opens Project Settings › Content types on this collection. */
53
+ openFields: () => void;
54
+ /** **Search appearance…** runs `document.openSeo` over this entry, as the Page tab's does. */
55
+ openSeo: () => void;
56
+ }
57
+
58
+ /** The node the document renders empty for the flow to fill. */
59
+ export interface EntryInspectorIslands {
60
+ /** The field form's host, whenever the document has just created one. */
61
+ fieldsSlot: (host: HTMLElement) => void;
62
+ }
63
+
64
+ export interface EntryInspectorHandle {
65
+ readonly ready: Promise<unknown>;
66
+ /** Whether what was mounted is still inside the host. */
67
+ attached: () => boolean;
68
+ update: (view: EntryInspectorView) => void;
69
+ dispose: () => void;
70
+ }
71
+
72
+ interface EntryInspectorScope extends EntryInspectorView, EntryInspectorActions {}
73
+
74
+ /** Write a view into the scope, field by field. */
75
+ function project(scope: EntryInspectorScope, view: EntryInspectorView): void {
76
+ scope.region = view.region;
77
+ scope.kind = view.kind;
78
+ scope.status = view.status;
79
+ scope.draftAxis = view.draftAxis;
80
+ scope.draft = view.draft;
81
+ scope.draftHint = view.draftHint;
82
+ scope.fieldsState = view.fieldsState;
83
+ scope.urlState = view.urlState;
84
+ scope.url = view.url;
85
+ scope.path = view.path;
86
+ scope.storage = view.storage;
87
+ }
88
+
89
+ /** The `part` a node was authored with, or `""`. */
90
+ function partOf(def: JxElement | string): string {
91
+ const part = isString(def) ? undefined : def.attributes?.["part"];
92
+ return isString(part) ? part : "";
93
+ }
94
+
95
+ /**
96
+ * Mount the Entry tab into `host`, the Inspector's Page body.
97
+ *
98
+ * @param host The body host.
99
+ * @param view What to draw.
100
+ * @param actions What the controls do.
101
+ * @param islands Where the field form goes.
102
+ */
103
+ export function mountEntryInspectorSurface(
104
+ host: HTMLElement,
105
+ view: EntryInspectorView,
106
+ actions: EntryInspectorActions,
107
+ islands: EntryInspectorIslands,
108
+ ): EntryInspectorHandle {
109
+ host.replaceChildren();
110
+ const scope: EntryInspectorScope = reactive<EntryInspectorScope>({ ...view, ...actions });
111
+ let mounted: SurfaceHandle | null = null;
112
+ let disposed = false;
113
+ const ready = mountSurface("entry-inspector", scope, host, {
114
+ onNodeCreated: (element, _path, def) => {
115
+ if (!disposed && element instanceof HTMLElement && partOf(def) === "fields") {
116
+ islands.fieldsSlot(element);
117
+ }
118
+ },
119
+ }).then((surface) => {
120
+ if (disposed) {
121
+ surface.dispose();
122
+ } else {
123
+ mounted = surface;
124
+ }
125
+ return surface;
126
+ });
127
+ return {
128
+ attached: () => {
129
+ if (disposed) {
130
+ return false;
131
+ }
132
+ const root = mounted?.root;
133
+ return root === undefined ? true : host.contains(root);
134
+ },
135
+ dispose() {
136
+ disposed = true;
137
+ mounted?.dispose();
138
+ mounted = null;
139
+ },
140
+ ready,
141
+ update: (next) => project(scope, next),
142
+ };
143
+ }
@@ -31,26 +31,12 @@
31
31
  import { reactive } from "../reactivity";
32
32
  import { mountSurface, registerSurface } from "../ui/surface";
33
33
  import expressionEditorDoc from "./expression-editor.json";
34
- import type { JxDocument } from "@jxsuite/schema/types";
35
- import type { SurfaceHandle } from "../ui/surface";
34
+ import type { SurfaceHandle, SurfaceOption, SurfaceOptionGroup } from "../ui/surface";
36
35
 
37
- registerSurface("expression-editor", expressionEditorDoc as unknown as JxDocument);
38
-
39
- /** A closed list of choices, in the shape the kit's select reads. */
40
- export interface ExprOption {
41
- value: string;
42
- label: string;
43
- }
44
-
45
- /** A delimited run of choices — the kit's own `optgroup`, which draws both halves of the rule. */
46
- export interface ExprSelectGroup {
47
- id: string;
48
- label: string;
49
- rows: ExprOption[];
50
- }
36
+ registerSurface("expression-editor", expressionEditorDoc);
51
37
 
52
38
  /** One chip of the pipeline, as the document draws it. */
53
- export interface ExprChipView extends Record<string, unknown> {
39
+ export interface ExprChipView {
54
40
  /** The joined node path: the repeater's key, and what a click reports back to the flow. */
55
41
  key: string;
56
42
  label: string;
@@ -83,7 +69,7 @@ export type ExprLead = "none" | "arg" | "case" | "default";
83
69
  * Every field is a string, a flag or a list: the document asks no question about an expression, and
84
70
  * there is no branch in it that the walk has not already taken.
85
71
  */
86
- export interface ExprRowView extends Record<string, unknown> {
72
+ export interface ExprRowView {
87
73
  /**
88
74
  * Unique within one editor, and the repeater's key. It is the node's own path plus the slot it
89
75
  * fills, so a row that survives an edit keeps its node — which is what stops a keystroke in one
@@ -111,19 +97,19 @@ export interface ExprRowView extends Record<string, unknown> {
111
97
  /** The accessible name of the row's icon-only control. */
112
98
  title: string;
113
99
  /** An `operator` row's grouped operator list. */
114
- groups: ExprSelectGroup[];
100
+ groups: SurfaceOptionGroup[];
115
101
  /** An `operator` row offers the catalog beside its picker; a nested one does not. */
116
102
  catalog: boolean;
117
103
  /** Which rung an `operand` row shows. */
118
104
  source: ExprSource;
119
105
  /** The rungs on offer. Empty means the slot admits one shape, so there is nothing to choose. */
120
- sourceOptions: ExprOption[];
106
+ sourceOptions: SurfaceOption[];
121
107
  /** Whether the rung picker is drawn at all — `sourceOptions` non-empty, said as a flag. */
122
108
  chooser: boolean;
123
109
  /** `string`, `number`, `boolean` or `null` — what the literal type picker holds. */
124
110
  literalType: string;
125
111
  /** The literal types on offer. A separate list from {@link sourceOptions}: two questions. */
126
- typeOptions: ExprOption[];
112
+ typeOptions: SurfaceOption[];
127
113
  /** Which literal control follows the type picker: `text`, `number`, `bool` or `null`. */
128
114
  literal: string;
129
115
  /** What a text literal, a number literal or a ref picker holds. */
@@ -131,9 +117,9 @@ export interface ExprRowView extends Record<string, unknown> {
131
117
  /** What a boolean literal holds. */
132
118
  checked: boolean;
133
119
  /** The signals this slot may bind to. */
134
- refOptions: ExprOption[];
120
+ refOptions: SurfaceOption[];
135
121
  /** The event refs, as their own named run. Empty where the position admits none. */
136
- refGroups: ExprSelectGroup[];
122
+ refGroups: SurfaceOptionGroup[];
137
123
  /** Which leading cell the row carries. */
138
124
  lead: ExprLead;
139
125
  /** An arg's positional name, or the `default` case's word. */
@@ -181,7 +167,7 @@ export interface ExpressionActions {
181
167
  pickChip: (key: string) => void;
182
168
  }
183
169
 
184
- interface ExpressionScope extends Record<string, unknown>, ExpressionActions {
170
+ interface ExpressionScope extends ExpressionActions {
185
171
  rows: ExprRowView[];
186
172
  }
187
173
 
@@ -225,7 +211,7 @@ export function renderExpressionEditorSurface(
225
211
  }
226
212
  takeDown(host, existing);
227
213
  host.textContent = "";
228
- const scope = reactive({ ...actions, rows }) as ExpressionScope;
214
+ const scope: ExpressionScope = reactive<ExpressionScope>({ ...actions, rows });
229
215
  const record: Mounted = { disposed: false, handle: null, scope };
230
216
  mounts.set(host, record);
231
217
  /* No race to arbitrate: a repaint arriving while this is in flight takes the branch above — a
@@ -37,14 +37,15 @@
37
37
  * @docs studio/interface
38
38
  */
39
39
 
40
+ import { isNonNullObject, isString } from "@jxsuite/schema/guards";
40
41
  import { reactive } from "../reactivity";
41
42
  import { mountSurface, registerSurface } from "../ui/surface";
42
43
  import filesPanelDoc from "./files-panel.json";
43
- import type { JxDocument, JxElement } from "@jxsuite/schema/types";
44
+ import type { JxElement } from "@jxsuite/schema/types";
44
45
  import type { JxScope } from "@jxsuite/runtime/types";
45
46
  import type { SurfaceHandle } from "../ui/surface";
46
47
 
47
- registerSurface("files-panel", filesPanelDoc as unknown as JxDocument);
48
+ registerSurface("files-panel", filesPanelDoc);
48
49
 
49
50
  /**
50
51
  * One row the tree draws, with every field already a string.
@@ -170,7 +171,7 @@ export interface FilesPanelSurfaceHandle {
170
171
  }
171
172
 
172
173
  /** The scope the document reads: the projection, plus everything a control can ask for. */
173
- interface FilesPanelScope extends Record<string, unknown>, FilesPanelValues, FilesPanelActions {}
174
+ interface FilesPanelScope extends FilesPanelValues, FilesPanelActions {}
174
175
 
175
176
  /** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
176
177
  function project(scope: FilesPanelScope, values: FilesPanelValues): void {
@@ -214,15 +215,28 @@ export function emptyFilesPanelValues(): FilesPanelValues {
214
215
 
215
216
  /** The `part` a node's definition carries, or `""` for a text node or an unmarked element. */
216
217
  function partOf(def: JxElement | string): string {
217
- const part = typeof def === "string" ? undefined : def.attributes?.["part"];
218
- return typeof part === "string" ? part : "";
218
+ const part = isString(def) ? undefined : def.attributes?.["part"];
219
+ return isString(part) ? part : "";
219
220
  }
220
221
 
221
- /** The mapped row a node was rendered inside, or null when it was not in one. */
222
- function mappedRow(state: JxScope | undefined): FileRowView | null {
223
- const map = state?.["$map"] as { item?: unknown } | undefined;
224
- const item = map?.item as FileRowView | undefined;
225
- return typeof item?.path === "string" ? item : null;
222
+ /**
223
+ * The path and type of the mapped row a node was rendered inside, or null when it was not in one.
224
+ * The only mapped array in `files-panel.json` is `#/state/rows`, which `project()` fills from
225
+ * `FilesPanelValues.rows: FileRowView[]`, so a row's item carries both as strings.
226
+ */
227
+ function mappedRow(state: JxScope | undefined): Pick<FileRowView, "path" | "type"> | null {
228
+ const map = state?.["$map"];
229
+ const item = isNonNullObject(map) && "item" in map ? map.item : undefined;
230
+ if (
231
+ !isNonNullObject(item) ||
232
+ !("path" in item) ||
233
+ !isString(item.path) ||
234
+ !("type" in item) ||
235
+ !isString(item.type)
236
+ ) {
237
+ return null;
238
+ }
239
+ return { path: item.path, type: item.type };
226
240
  }
227
241
 
228
242
  /**
@@ -237,10 +251,10 @@ export function mountFilesPanelSurface(
237
251
  values: FilesPanelValues,
238
252
  actions: FilesPanelActions,
239
253
  ): FilesPanelSurfaceHandle {
240
- const scope = reactive<FilesPanelScope>({
254
+ const scope: FilesPanelScope = reactive<FilesPanelScope>({
241
255
  ...emptyFilesPanelValues(),
242
256
  ...actions,
243
- }) as FilesPanelScope;
257
+ });
244
258
  project(scope, values);
245
259
 
246
260
  let mounted: SurfaceHandle | null = null;
@@ -286,8 +300,7 @@ export function mountFilesPanelSurface(
286
300
  answer is simply whether this handle is still wanted — answering no would start a second
287
301
  mount racing the first. Once mounted, the question is whether the root is still where it was
288
302
  put: a Navigator that painted another panel cleared this document out from under it. */
289
- connected: () =>
290
- !disposed && (mounted === null || (mounted.root as Node).parentNode === container),
303
+ connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
291
304
  dispose() {
292
305
  disposed = true;
293
306
  mounted?.dispose();