@jxsuite/studio 6.1.2 → 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 (522) hide show
  1. package/README.md +5 -5
  2. package/dist/chunks/2020-5wtzce5g.js +4 -0
  3. package/dist/chunks/adapter-5tphg7xe.js +4 -0
  4. package/dist/chunks/add-new-flow-psym14sn.js +4 -0
  5. package/dist/chunks/cf-account-picker-haqazq5r.js +4 -0
  6. package/dist/chunks/cf-settings-h2wrh6hq.js +4 -0
  7. package/dist/chunks/{color-area-0fj8a4ga.js → color-area-6rbra5dy.js} +2 -2
  8. package/dist/chunks/{color-field-xch8kx2g.js → color-field-gy56c94g.js} +3 -3
  9. package/dist/chunks/color-m7r1vk54.js +4 -0
  10. package/dist/chunks/{color-slider-jxd8v350.js → color-slider-sqqdyf6c.js} +2 -2
  11. package/dist/chunks/{combobox-p0efwjke.js → combobox-72h32ejk.js} +3 -3
  12. package/dist/chunks/components-r22xca09.js +4 -0
  13. package/dist/chunks/content-source-mmppmcyg.js +4 -0
  14. package/dist/chunks/convert-to-repeater-he70fc2b.js +4 -0
  15. package/dist/chunks/editor-ccd9jwsa.js +4 -0
  16. package/dist/chunks/entry-commands-6qxz9e8p.js +4 -0
  17. package/dist/chunks/extension-sections-0egb88dm.js +4 -0
  18. package/dist/chunks/file-ops-qnab36ek.js +4 -0
  19. package/dist/chunks/files-rcn56qvm.js +4 -0
  20. package/dist/chunks/format-host-yxz0kjjs.js +4 -0
  21. package/dist/chunks/fs-events-d1qxq4z4.js +4 -0
  22. package/dist/chunks/grid-open-4z1g062t.js +4 -0
  23. package/dist/chunks/{grid-view-d2wq9ezg.js → grid-view-qg1b5eqx.js} +25 -25
  24. package/dist/chunks/{icons-pnfz478q.js → icons-63bjtbs7.js} +2 -2
  25. package/dist/chunks/{iframe-entry-jdcktez8.js → iframe-entry-2zggzajv.js} +4 -4
  26. package/dist/chunks/{iframe-entry-zap785cw.js → iframe-entry-76j8vwwx.js} +4 -4
  27. package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
  28. package/dist/chunks/{iframe-entry-x0ygf2yr.js → iframe-entry-pkgmcgp0.js} +4 -4
  29. package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
  30. package/dist/chunks/{index-zpjmzqfk.js → index-32eqzv1k.js} +3 -3
  31. package/dist/chunks/index-f0jn7nnp.js +4 -0
  32. package/dist/chunks/{javascript-m54mnwp6.js → javascript-pjp734q4.js} +3 -3
  33. package/dist/chunks/jsonMode-njkvsa02.js +13 -0
  34. package/dist/chunks/jx-validate-ttasrbh7.js +4 -0
  35. package/dist/chunks/layers-bgyr11tr.js +4 -0
  36. package/dist/chunks/layers-panel-7ez66zeq.js +4 -0
  37. package/dist/chunks/{listbox-e74qjyq6.js → listbox-c421cf8c.js} +2 -2
  38. package/dist/chunks/lit-html-v9gh687x.js +4 -0
  39. package/dist/chunks/media-library-sq468wts.js +4 -0
  40. package/dist/chunks/media-picker-shfe59pt.js +4 -0
  41. package/dist/chunks/{menu-n6yzswmy.js → menu-bdpzbfvs.js} +2 -2
  42. package/dist/chunks/{monaco-binding-7gx83x3r.js → monaco-binding-vq1hgnn0.js} +3 -3
  43. package/dist/chunks/monaco-buffer-3afgwvbp.js +4 -0
  44. package/dist/chunks/monaco-setup-xrd2cbkp.js +4 -0
  45. package/dist/chunks/notify-kzrjr3fv.js +4 -0
  46. package/dist/chunks/parse-v77xtwv7.js +4 -0
  47. package/dist/chunks/platform-7v4rtd7m.js +4 -0
  48. package/dist/chunks/popover-b89sfej7.js +4 -0
  49. package/dist/chunks/publish-panel-2z9gw8ee.js +4 -0
  50. package/dist/chunks/publish-quick-qx2455cj.js +4 -0
  51. package/dist/chunks/publish-workspace-wrc1dgwx.js +4 -0
  52. package/dist/chunks/quick-search-n0t0eqxb.js +4 -0
  53. package/dist/chunks/references-9547rg5s.js +4 -0
  54. package/dist/chunks/right-panel-wsgnr9pn.js +4 -0
  55. package/dist/chunks/source-control-kwktr9y6.js +4 -0
  56. package/dist/chunks/{split-n2gfpm5m.js → split-c9zfdgxf.js} +2 -2
  57. package/dist/chunks/studio-03ct6yfv.js +9 -0
  58. package/dist/chunks/studio-07rcfje3.js +5 -0
  59. package/dist/chunks/studio-3e54qh39.js +7 -0
  60. package/dist/chunks/studio-3exxhz5g.js +5 -0
  61. package/dist/chunks/studio-3q40e3rj.js +5 -0
  62. package/dist/chunks/studio-3qeh9t0h.js +6 -0
  63. package/dist/chunks/studio-3qqjeep5.js +6 -0
  64. package/dist/chunks/studio-43sd2mam.js +4 -0
  65. package/dist/chunks/studio-4hp8pkyt.js +5 -0
  66. package/dist/chunks/studio-58xg6j2q.js +9 -0
  67. package/dist/chunks/studio-5g0rprdt.js +7 -0
  68. package/dist/chunks/{studio-2j1cb95x.js → studio-6m380wp7.js} +4 -4
  69. package/dist/chunks/studio-80jyh1xh.js +4 -0
  70. package/dist/chunks/studio-83mk4bgg.js +9 -0
  71. package/dist/chunks/{studio-v0jzqdjm.js → studio-881z1xrx.js} +4 -4
  72. package/dist/chunks/studio-8m0y2qe7.js +5 -0
  73. package/dist/chunks/{studio-d81xfh1g.js → studio-8tr6cfrc.js} +4 -4
  74. package/dist/chunks/studio-8vcvfs7r.js +6 -0
  75. package/dist/chunks/studio-9tmebf0s.js +5 -0
  76. package/dist/chunks/studio-a2bvaptz.js +5 -0
  77. package/dist/chunks/studio-b7y5mr30.js +5 -0
  78. package/dist/chunks/studio-bavb31r0.js +5 -0
  79. package/dist/chunks/{studio-dgz8d0c1.js → studio-bbe4c90a.js} +4 -4
  80. package/dist/chunks/studio-c05wdnt3.js +5 -0
  81. package/dist/chunks/studio-ccv2svc6.js +5 -0
  82. package/dist/chunks/studio-d5grtb9e.js +16 -0
  83. package/dist/chunks/studio-df0baea9.js +5 -0
  84. package/dist/chunks/studio-dgk4dqtx.js +7 -0
  85. package/dist/chunks/studio-e1g64q43.js +5 -0
  86. package/dist/chunks/studio-ed1hp6zf.js +6 -0
  87. package/dist/chunks/studio-ed3xx40h.js +7 -0
  88. package/dist/chunks/studio-f14e1zdj.js +5 -0
  89. package/dist/chunks/studio-fbhxxc5f.js +5 -0
  90. package/dist/chunks/studio-fyh0jc96.js +5 -0
  91. package/dist/chunks/studio-gcxk20n7.js +5 -0
  92. package/dist/chunks/studio-jaaz8ce9.js +5 -0
  93. package/dist/chunks/{studio-90pq9km1.js → studio-jcnsdaep.js} +4 -4
  94. package/dist/chunks/studio-jsgf2q5k.js +7 -0
  95. package/dist/chunks/{studio-0q988f9w.js → studio-k3xxbagr.js} +3 -3
  96. package/dist/chunks/{studio-5ve6bbep.js → studio-k7evxqh4.js} +4 -4
  97. package/dist/chunks/studio-kt3pjkwd.js +5 -0
  98. package/dist/chunks/studio-m8g16bgz.js +5 -0
  99. package/dist/chunks/studio-mn0476ag.js +5 -0
  100. package/dist/chunks/studio-mx1smyq0.js +5 -0
  101. package/dist/chunks/studio-n0c5h6mf.js +5 -0
  102. package/dist/chunks/{studio-485046te.js → studio-nh6d342n.js} +7 -7
  103. package/dist/chunks/studio-nqxqf8p2.js +4 -0
  104. package/dist/chunks/studio-p4nrkvqr.js +5 -0
  105. package/dist/chunks/{studio-1fxkaaea.js → studio-pbxa5fpc.js} +4 -4
  106. package/dist/chunks/studio-pgmvdv7z.js +7 -0
  107. package/dist/chunks/studio-ph84avkf.js +5 -0
  108. package/dist/chunks/{studio-tq0rtfwj.js → studio-q0mvbaq6.js} +4 -4
  109. package/dist/chunks/studio-q0tccd43.js +5 -0
  110. package/dist/chunks/studio-q7rtx6zq.js +14 -0
  111. package/dist/chunks/{studio-a3g98wjr.js → studio-qgh13jtz.js} +4 -4
  112. package/dist/chunks/studio-qmn1xc24.js +5 -0
  113. package/dist/chunks/studio-qwdqwkj0.js +5 -0
  114. package/dist/chunks/studio-r5qy30vx.js +5 -0
  115. package/dist/chunks/studio-rj9eamf8.js +5 -0
  116. package/dist/chunks/studio-rptgsk96.js +5 -0
  117. package/dist/chunks/studio-rthyg42z.js +928 -0
  118. package/dist/chunks/studio-s19tp1xr.js +5 -0
  119. package/dist/chunks/studio-s32578pn.js +5 -0
  120. package/dist/chunks/studio-svb7yyve.js +5 -0
  121. package/dist/chunks/studio-syreb644.js +5 -0
  122. package/dist/chunks/studio-tf9jryb1.js +10 -0
  123. package/dist/chunks/studio-tfkznv39.js +5 -0
  124. package/dist/chunks/studio-tft6r105.js +5 -0
  125. package/dist/chunks/studio-txf2kysx.js +5 -0
  126. package/dist/chunks/studio-v8867ddv.js +12 -0
  127. package/dist/chunks/studio-vxq7fcvv.js +5 -0
  128. package/dist/chunks/studio-w4rz9hdk.js +5 -0
  129. package/dist/chunks/studio-wbcjbhy1.js +9 -0
  130. package/dist/chunks/studio-wc649wss.js +5 -0
  131. package/dist/chunks/studio-wys23mxz.js +5 -0
  132. package/dist/chunks/studio-x1x167jh.js +5 -0
  133. package/dist/chunks/studio-x9hsze61.js +5 -0
  134. package/dist/chunks/studio-y0n7yxea.js +9 -0
  135. package/dist/chunks/studio-y3ahhdpx.js +5 -0
  136. package/dist/chunks/studio-z97c48fk.js +5 -0
  137. package/dist/chunks/studio-zat62m0c.js +5 -0
  138. package/dist/chunks/studio-zcd2e7yz.js +5 -0
  139. package/dist/chunks/studio-zz9qe3rw.js +64 -0
  140. package/dist/chunks/toast-1gv0h53h.js +4 -0
  141. package/dist/chunks/{toast-host-ke5z4ng7.js → toast-host-1yg5ar8d.js} +3 -3
  142. package/dist/chunks/{tooltip-5v8ngwj2.js → tooltip-yypz28gq.js} +3 -3
  143. package/dist/chunks/{tree-mdq3v5cw.js → tree-9xa4hm7n.js} +2 -2
  144. package/dist/chunks/tsMode-epyfz1hv.js +14 -0
  145. package/dist/chunks/workspace-dz7nxfhv.js +4 -0
  146. package/dist/chunks/workspace-home-xsd7hkjw.js +4 -0
  147. package/dist/chunks/{ws-client-nze0k6mv.js → ws-client-bv552sfx.js} +3 -3
  148. package/dist/iframe-entry.js +20 -16
  149. package/dist/manifest.json +77 -63
  150. package/dist/studio.js +103 -104
  151. package/dist/workers/ts.worker.js +3 -3
  152. package/package.json +12 -11
  153. package/src/browse/component-examples.ts +272 -0
  154. package/src/browse/library-commands.ts +64 -104
  155. package/src/browse/library-layouts.ts +263 -49
  156. package/src/browse/library-model.ts +181 -133
  157. package/src/browse/library-pane.ts +738 -446
  158. package/src/browse/library-preview.ts +149 -19
  159. package/src/browse/library-source.ts +308 -41
  160. package/src/browse/preview-root.ts +78 -0
  161. package/src/browse/preview-style.ts +155 -0
  162. package/src/canvas/asset-refs.ts +16 -1
  163. package/src/canvas/canvas-live-render.ts +222 -30
  164. package/src/canvas/canvas-origin.ts +37 -12
  165. package/src/canvas/canvas-page-context.ts +112 -0
  166. package/src/canvas/canvas-render.ts +113 -107
  167. package/src/canvas/canvas-utils.ts +57 -12
  168. package/src/canvas/iframe-drop.ts +107 -0
  169. package/src/canvas/iframe-entry.ts +24 -12
  170. package/src/canvas/iframe-host.ts +134 -62
  171. package/src/canvas/iframe-keys.ts +11 -0
  172. package/src/canvas/iframe-patch.ts +8 -7
  173. package/src/canvas/iframe-protocol.ts +24 -5
  174. package/src/canvas/iframe-render.ts +48 -1
  175. package/src/canvas/iframe-subtree.ts +5 -2
  176. package/src/canvas/npm-modules.ts +22 -0
  177. package/src/canvas/preview-navigate.ts +16 -0
  178. package/src/canvas/repeater-sources.ts +200 -0
  179. package/src/canvas/stage-scrollbar.ts +5 -1
  180. package/src/canvas/surface-registry.ts +6 -0
  181. package/src/commands/app-commands.ts +16 -6
  182. package/src/commands/budget.ts +10 -8
  183. package/src/commands/context.ts +35 -10
  184. package/src/commands/defaults.ts +69 -45
  185. package/src/commands/keymap.ts +9 -0
  186. package/src/commands/levels.ts +11 -5
  187. package/src/commands/live-context.ts +2 -0
  188. package/src/commands/registry.ts +10 -1
  189. package/src/content/collection-match.ts +6 -5
  190. package/src/content/collection-pages.ts +412 -0
  191. package/src/content/content-collections.ts +270 -0
  192. package/src/content/entry-commands.ts +51 -60
  193. package/src/content/entry-editor.ts +111 -18
  194. package/src/content/entry-fields.ts +13 -1
  195. package/src/content/entry-inspector.ts +225 -0
  196. package/src/content/entry-model.ts +17 -3
  197. package/src/content/entry-open.ts +80 -0
  198. package/src/content/entry-summaries.ts +440 -0
  199. package/src/content/file-record-ids.ts +80 -0
  200. package/src/content/file-records.ts +125 -0
  201. package/src/content/page-summaries.ts +129 -0
  202. package/src/content/record-entry.ts +201 -0
  203. package/src/content/writing-banner.ts +177 -0
  204. package/src/create/add-new-commands.ts +185 -0
  205. package/src/create/add-new-flow.ts +1116 -0
  206. package/src/create/add-new.ts +1014 -0
  207. package/src/create/element-name.ts +121 -0
  208. package/src/editor/convert-to-component.ts +67 -43
  209. package/src/editor/file-drop-action.ts +9 -1
  210. package/src/editor/inline-edit-apply.ts +44 -0
  211. package/src/editor/inline-edit.ts +10 -0
  212. package/src/editor/insert-component.ts +91 -0
  213. package/src/editor/insert-zone-action.ts +13 -4
  214. package/src/editor/shortcuts.ts +44 -22
  215. package/src/editor/slash-menu.ts +51 -8
  216. package/src/files/components.ts +74 -10
  217. package/src/files/file-ops.ts +15 -5
  218. package/src/files/files.ts +164 -150
  219. package/src/files/fs-events.ts +18 -7
  220. package/src/files/media-meta.ts +95 -1
  221. package/src/files/media-types.ts +55 -0
  222. package/src/files/media-upload.ts +209 -52
  223. package/src/files/new-file-name.ts +156 -0
  224. package/src/files/serialize-document.ts +13 -3
  225. package/src/format/format-host.ts +15 -0
  226. package/src/github/github-auth.ts +2 -2
  227. package/src/github/github-publish.ts +4 -3
  228. package/src/grid/grid-controller.ts +5 -1
  229. package/src/grid/grid-open.ts +0 -27
  230. package/src/grid/grid-panel.ts +54 -2
  231. package/src/grid/grid-reveal.ts +34 -0
  232. package/src/grid/grid-source.ts +3 -25
  233. package/src/grid/grid-view.ts +31 -6
  234. package/src/grid/sources/content-source.ts +75 -7
  235. package/src/grid/tabulator-tables.d.ts +6 -0
  236. package/src/hosting/document.ts +2 -2
  237. package/src/i18n/i18n-commands.ts +2 -1
  238. package/src/media/media-commands.ts +181 -0
  239. package/src/media/media-library-model.ts +232 -0
  240. package/src/media/media-library.ts +1283 -0
  241. package/src/media/media-pane.ts +47 -19
  242. package/src/packages/pull-package-sync.ts +1 -1
  243. package/src/panels/activity-panel.ts +21 -5
  244. package/src/panels/ai-chat/chat-markdown.ts +8 -8
  245. package/src/panels/block-action-bar.ts +11 -11
  246. package/src/panels/canvas-dnd-bridge.ts +5 -2
  247. package/src/panels/chat-panel.ts +6 -6
  248. package/src/panels/collections-panel.ts +306 -0
  249. package/src/panels/component-preview.ts +35 -13
  250. package/src/panels/data-explorer.ts +1 -1
  251. package/src/panels/data-grid.ts +4 -0
  252. package/src/panels/dnd.ts +17 -30
  253. package/src/panels/elements-panel.ts +9 -2
  254. package/src/panels/empty-state.ts +2 -2
  255. package/src/panels/formula-workspace.ts +2 -3
  256. package/src/panels/frontmatter-fields.ts +9 -9
  257. package/src/panels/git-diff-open.ts +9 -5
  258. package/src/panels/head-panel.ts +369 -103
  259. package/src/panels/i18n-panel.ts +11 -10
  260. package/src/panels/imports-panel.ts +2 -0
  261. package/src/panels/jump-bar.ts +27 -2
  262. package/src/panels/layers-panel.ts +36 -30
  263. package/src/panels/left-panel.ts +22 -8
  264. package/src/panels/navigator-panels.ts +23 -11
  265. package/src/panels/pane-context.ts +111 -29
  266. package/src/panels/pane-grid.ts +6 -6
  267. package/src/panels/panel-registry.ts +14 -9
  268. package/src/panels/properties-panel.ts +7 -3
  269. package/src/panels/right-panel.ts +199 -43
  270. package/src/panels/seo-modal.ts +41 -108
  271. package/src/panels/settings-menu.ts +52 -50
  272. package/src/panels/settings-pane.ts +268 -162
  273. package/src/panels/signals-panel.ts +3 -4
  274. package/src/panels/site-model.ts +367 -0
  275. package/src/panels/site-panel.ts +638 -0
  276. package/src/panels/style-panel.ts +37 -3
  277. package/src/panels/stylebook-doc.ts +142 -10
  278. package/src/panels/stylebook-layers-panel.ts +39 -80
  279. package/src/panels/stylebook-panel.ts +47 -10
  280. package/src/panels/styles-panel.ts +327 -0
  281. package/src/panels/tab-strip.ts +109 -25
  282. package/src/platform.ts +1 -1
  283. package/src/platforms/cloud.ts +28 -1
  284. package/src/platforms/default-platform.ts +4 -4
  285. package/src/platforms/devserver.ts +51 -25
  286. package/src/publish/deploy-checklist.ts +12 -7
  287. package/src/publish/pages-service.ts +38 -14
  288. package/src/publish/publish-changes.ts +491 -0
  289. package/src/publish/publish-commands.ts +83 -18
  290. package/src/publish/publish-ids.ts +49 -0
  291. package/src/publish/publish-quick.ts +148 -0
  292. package/src/publish/publish-workspace.ts +926 -0
  293. package/src/publish/source-control.ts +907 -0
  294. package/src/services/automation.ts +16 -20
  295. package/src/services/cf-settings.ts +4 -4
  296. package/src/services/connection.ts +2 -2
  297. package/src/services/directory-picker.ts +2 -2
  298. package/src/services/references.ts +0 -0
  299. package/src/services/render-critic.ts +21 -2
  300. package/src/services/settings/definitions.ts +25 -14
  301. package/src/settings/contributed-section.ts +49 -10
  302. package/src/settings/css-vars-editor.ts +93 -27
  303. package/src/settings/developer-panels.ts +43 -0
  304. package/src/settings/extension-sections.ts +20 -2
  305. package/src/settings/general-settings.ts +91 -21
  306. package/src/settings/preferences-dialog.ts +8 -1
  307. package/src/settings/project-sections.ts +27 -10
  308. package/src/settings/schema-field-ui.ts +3 -1
  309. package/src/settings/section-registry.ts +116 -11
  310. package/src/settings/settings-dialog.ts +192 -0
  311. package/src/settings/settings-document.ts +182 -162
  312. package/src/shell.ts +467 -431
  313. package/src/site-context.ts +64 -10
  314. package/src/state.ts +28 -9
  315. package/src/studio.ts +194 -41
  316. package/src/style/project-styles.ts +34 -0
  317. package/src/style/stylebook-specimens.ts +89 -0
  318. package/src/style/stylebook-target.ts +26 -0
  319. package/src/style/tag-inheritance.ts +105 -0
  320. package/src/style/variables-focus.ts +61 -0
  321. package/src/style/variables-view.ts +235 -0
  322. package/src/surfaces/add-new.json +1482 -0
  323. package/src/surfaces/add-new.ts +325 -0
  324. package/src/surfaces/ai-chat.ts +2 -2
  325. package/src/surfaces/boot-failure.json +4 -3
  326. package/src/surfaces/bottom-dock.json +1 -1
  327. package/src/surfaces/canvas-stage.json +30 -19
  328. package/src/surfaces/canvas-stage.ts +5 -5
  329. package/src/surfaces/collections-panel.json +615 -0
  330. package/src/surfaces/collections-panel.ts +168 -0
  331. package/src/surfaces/commandbar.json +241 -96
  332. package/src/surfaces/commandbar.ts +134 -99
  333. package/src/surfaces/empty-state.json +1 -1
  334. package/src/surfaces/entry-editor.json +136 -0
  335. package/src/surfaces/entry-editor.ts +21 -0
  336. package/src/surfaces/entry-inspector.json +371 -0
  337. package/src/surfaces/entry-inspector.ts +143 -0
  338. package/src/surfaces/inspector-dock.json +162 -14
  339. package/src/surfaces/inspector-dock.ts +46 -19
  340. package/src/surfaces/library-pane.json +670 -437
  341. package/src/surfaces/library-pane.ts +94 -59
  342. package/src/surfaces/media-browser.json +62 -6
  343. package/src/surfaces/media-browser.ts +15 -1
  344. package/src/surfaces/media-field.json +1 -1
  345. package/src/surfaces/media-library.json +1586 -0
  346. package/src/surfaces/media-library.ts +282 -0
  347. package/src/surfaces/media-pick-dialog.json +71 -0
  348. package/src/surfaces/media-pick-dialog.ts +132 -0
  349. package/src/surfaces/menu.ts +18 -0
  350. package/src/surfaces/pane-context.json +144 -77
  351. package/src/surfaces/pane-context.ts +24 -0
  352. package/src/surfaces/panel-deploy-checklist.json +12 -6
  353. package/src/surfaces/panel-deploy-checklist.ts +3 -1
  354. package/src/surfaces/panel-page.json +72 -2
  355. package/src/surfaces/panel-page.ts +38 -7
  356. package/src/surfaces/panel-signals.json +1 -1
  357. package/src/surfaces/panel-signals.ts +5 -5
  358. package/src/surfaces/panel-stylebook-layers.json +71 -204
  359. package/src/surfaces/panel-stylebook-layers.ts +0 -21
  360. package/src/surfaces/preferences.json +120 -48
  361. package/src/surfaces/preferences.ts +8 -0
  362. package/src/surfaces/publish-quick.json +428 -0
  363. package/src/surfaces/publish-quick.ts +165 -0
  364. package/src/surfaces/publish-workspace.json +2892 -0
  365. package/src/surfaces/publish-workspace.ts +391 -0
  366. package/src/surfaces/rail.json +1 -159
  367. package/src/surfaces/rail.ts +18 -75
  368. package/src/surfaces/schema-form.json +10 -2
  369. package/src/surfaces/schema-form.ts +2 -0
  370. package/src/surfaces/seo.json +1 -1
  371. package/src/surfaces/settings-contributed.json +5 -5
  372. package/src/surfaces/settings-contributed.ts +18 -2
  373. package/src/surfaces/settings-css-vars.json +44 -36
  374. package/src/surfaces/settings-css-vars.ts +77 -4
  375. package/src/surfaces/settings-deploy.json +2 -15
  376. package/src/surfaces/settings-deploy.ts +1 -1
  377. package/src/surfaces/settings-dialog.json +51 -0
  378. package/src/surfaces/settings-dialog.ts +169 -0
  379. package/src/surfaces/settings-overview.json +3 -3
  380. package/src/surfaces/settings-overview.ts +9 -2
  381. package/src/surfaces/settings-pane.json +269 -46
  382. package/src/surfaces/settings-pane.ts +85 -24
  383. package/src/surfaces/shell.json +2 -1
  384. package/src/surfaces/site-panel.json +1029 -0
  385. package/src/surfaces/site-panel.ts +233 -0
  386. package/src/surfaces/slash-menu.json +63 -21
  387. package/src/surfaces/slash-menu.ts +23 -0
  388. package/src/surfaces/statusbar.ts +39 -15
  389. package/src/surfaces/styles-panel.json +735 -0
  390. package/src/surfaces/styles-panel.ts +195 -0
  391. package/src/surfaces/styles-variables.json +149 -0
  392. package/src/surfaces/styles-variables.ts +145 -0
  393. package/src/surfaces/tab-strip.json +4 -4
  394. package/src/surfaces/welcome.ts +1 -1
  395. package/src/surfaces/writing-banner.json +94 -0
  396. package/src/surfaces/writing-banner.ts +80 -0
  397. package/src/tabs/bare-repeaters.ts +101 -0
  398. package/src/tabs/tab.ts +47 -7
  399. package/src/types.ts +21 -26
  400. package/src/ui/form-controls.ts +47 -8
  401. package/src/ui/layers.ts +13 -0
  402. package/src/ui/media-picker.ts +284 -40
  403. package/src/ui/regions.ts +7 -6
  404. package/src/ui/schema-form.ts +259 -27
  405. package/src/ui/virtual-window.ts +26 -1
  406. package/src/utils/base64.ts +3 -3
  407. package/src/utils/edit-display.ts +322 -67
  408. package/src/utils/local-day.ts +18 -0
  409. package/src/workspace/pane-derive.ts +4 -4
  410. package/src/workspace/session.ts +28 -7
  411. package/src/workspace/tab-workspace.ts +137 -0
  412. package/src/workspace/workspace-back.ts +189 -0
  413. package/src/workspace/workspace-home.ts +133 -0
  414. package/src/workspace/workspace-ids.ts +129 -0
  415. package/src/workspace/workspace-switch.ts +372 -0
  416. package/src/workspace/workspace.ts +125 -11
  417. package/styles/shell-frame.css +30 -7
  418. package/styles/shell-frame.json +15 -3
  419. package/dist/chunks/2020-f2gkpy8d.js +0 -4
  420. package/dist/chunks/adapter-4912g339.js +0 -4
  421. package/dist/chunks/cf-account-picker-wccaenh6.js +0 -4
  422. package/dist/chunks/cf-settings-br6105tr.js +0 -4
  423. package/dist/chunks/color-28ksk2qm.js +0 -4
  424. package/dist/chunks/components-db68vsn7.js +0 -4
  425. package/dist/chunks/content-source-1449qesq.js +0 -4
  426. package/dist/chunks/convert-to-repeater-5h457egj.js +0 -4
  427. package/dist/chunks/editor-x9jn86a7.js +0 -4
  428. package/dist/chunks/entry-commands-may24cpt.js +0 -4
  429. package/dist/chunks/extension-sections-pvr14vxr.js +0 -4
  430. package/dist/chunks/file-ops-x9v54pcj.js +0 -4
  431. package/dist/chunks/files-j3knqf0s.js +0 -4
  432. package/dist/chunks/format-host-tyre2trb.js +0 -4
  433. package/dist/chunks/fs-events-64ma9htc.js +0 -4
  434. package/dist/chunks/git-panel-84ps5dex.js +0 -4
  435. package/dist/chunks/iframe-entry-fvbk89gm.js +0 -5
  436. package/dist/chunks/iframe-host-ck6vejt5.js +0 -4
  437. package/dist/chunks/index-b8xw3vy9.js +0 -4
  438. package/dist/chunks/jsonMode-w15cmrcm.js +0 -13
  439. package/dist/chunks/jx-validate-at3zn8wa.js +0 -4
  440. package/dist/chunks/layers-h4xp1pss.js +0 -4
  441. package/dist/chunks/layers-panel-m5hw1d7g.js +0 -4
  442. package/dist/chunks/lit-html-8t8t3dnr.js +0 -4
  443. package/dist/chunks/media-picker-2cweexc5.js +0 -4
  444. package/dist/chunks/menu-ynw13y0s.js +0 -4
  445. package/dist/chunks/monaco-buffer-qzxn567r.js +0 -4
  446. package/dist/chunks/monaco-setup-gxf6656g.js +0 -4
  447. package/dist/chunks/notify-cj5zbrs2.js +0 -4
  448. package/dist/chunks/parse-b7ddhr8m.js +0 -4
  449. package/dist/chunks/platform-3dfws9js.js +0 -4
  450. package/dist/chunks/popover-jt2gxmzs.js +0 -4
  451. package/dist/chunks/publish-panel-1gvxbj21.js +0 -4
  452. package/dist/chunks/quick-search-0dajrwqg.js +0 -4
  453. package/dist/chunks/references-49qgt404.js +0 -4
  454. package/dist/chunks/right-panel-jm1bwe53.js +0 -4
  455. package/dist/chunks/section-registry-6kwc4fky.js +0 -4
  456. package/dist/chunks/studio-0rt52vpq.js +0 -5
  457. package/dist/chunks/studio-18vgbhs5.js +0 -5
  458. package/dist/chunks/studio-24mccdrj.js +0 -5
  459. package/dist/chunks/studio-2eh507zk.js +0 -9
  460. package/dist/chunks/studio-2hcbccfv.js +0 -5
  461. package/dist/chunks/studio-2jbs3rxv.js +0 -5
  462. package/dist/chunks/studio-4h8k4dw9.js +0 -5
  463. package/dist/chunks/studio-5f6n18kx.js +0 -5
  464. package/dist/chunks/studio-5gthpky6.js +0 -5
  465. package/dist/chunks/studio-6ep3js6b.js +0 -9
  466. package/dist/chunks/studio-6wkmf3wz.js +0 -9
  467. package/dist/chunks/studio-841rf3cg.js +0 -5
  468. package/dist/chunks/studio-8gmwgheg.js +0 -5
  469. package/dist/chunks/studio-8qm0ep50.js +0 -5
  470. package/dist/chunks/studio-924p1tm1.js +0 -6
  471. package/dist/chunks/studio-a3shpz9y.js +0 -5
  472. package/dist/chunks/studio-amsbaaar.js +0 -6
  473. package/dist/chunks/studio-at5spjbc.js +0 -7
  474. package/dist/chunks/studio-b2xv945e.js +0 -5
  475. package/dist/chunks/studio-bn5nkafw.js +0 -5
  476. package/dist/chunks/studio-bw6q5xjf.js +0 -9
  477. package/dist/chunks/studio-c7q0t9x1.js +0 -5
  478. package/dist/chunks/studio-camnhc96.js +0 -6
  479. package/dist/chunks/studio-cffqvnzd.js +0 -5
  480. package/dist/chunks/studio-efvfrsf8.js +0 -5
  481. package/dist/chunks/studio-er30bpcx.js +0 -5
  482. package/dist/chunks/studio-ezscgr64.js +0 -5
  483. package/dist/chunks/studio-ffrrncvz.js +0 -5
  484. package/dist/chunks/studio-fpphgn8y.js +0 -10
  485. package/dist/chunks/studio-j1kvhdjk.js +0 -4
  486. package/dist/chunks/studio-j430n16g.js +0 -7
  487. package/dist/chunks/studio-jjkg84nj.js +0 -5
  488. package/dist/chunks/studio-m0q32ars.js +0 -4
  489. package/dist/chunks/studio-m6bdst11.js +0 -5
  490. package/dist/chunks/studio-nv2cptd4.js +0 -64
  491. package/dist/chunks/studio-nwfrc98n.js +0 -5
  492. package/dist/chunks/studio-p1wgvp7r.js +0 -5
  493. package/dist/chunks/studio-pag2wncm.js +0 -5
  494. package/dist/chunks/studio-qvanvzfd.js +0 -5
  495. package/dist/chunks/studio-qwa64kt7.js +0 -5
  496. package/dist/chunks/studio-rk1zc4x3.js +0 -928
  497. package/dist/chunks/studio-se2r3ptc.js +0 -5
  498. package/dist/chunks/studio-sg2a0dh0.js +0 -5
  499. package/dist/chunks/studio-tjzjhe68.js +0 -5
  500. package/dist/chunks/studio-v2w7q8r1.js +0 -7
  501. package/dist/chunks/studio-v5vjq1h0.js +0 -4
  502. package/dist/chunks/studio-v8aga3vp.js +0 -14
  503. package/dist/chunks/studio-vfcdrfmv.js +0 -5
  504. package/dist/chunks/studio-vmfkgdjf.js +0 -5
  505. package/dist/chunks/studio-wt1816jj.js +0 -5
  506. package/dist/chunks/studio-wz73q5kq.js +0 -4
  507. package/dist/chunks/studio-y04qtxvp.js +0 -7
  508. package/dist/chunks/studio-y21g8zzg.js +0 -5
  509. package/dist/chunks/studio-y64hrt8p.js +0 -12
  510. package/dist/chunks/studio-ynn90f58.js +0 -16
  511. package/dist/chunks/studio-yxz682sx.js +0 -5
  512. package/dist/chunks/studio-zp7snvkq.js +0 -5
  513. package/dist/chunks/studio-zq4z6tm6.js +0 -5
  514. package/dist/chunks/toast-c9fn075p.js +0 -4
  515. package/dist/chunks/tsMode-sf49ee9x.js +0 -14
  516. package/dist/chunks/workspace-jtfahpee.js +0 -4
  517. package/src/panels/frontmatter-panel.ts +0 -711
  518. package/src/panels/git-panel.ts +0 -1108
  519. package/src/surfaces/doc-header.json +0 -776
  520. package/src/surfaces/doc-header.ts +0 -222
  521. package/src/surfaces/git-panel.json +0 -1880
  522. package/src/surfaces/git-panel.ts +0 -264
@@ -1,1880 +0,0 @@
1
- {
2
- "$schema": "https://jxsuite.com/schema/v1",
3
- "$id": "StudioPanelGit",
4
- "$description": "The Navigator's Source Control panel: what git says about this project, and every verb that answers. It has four moods and the adapter names which one — no project, a first read still in flight, a project git is not tracking yet, and a repository — so nothing here asks whether `status` is null or what `isRepo` means. Under the fourth mood it draws the sync bar (with or without a remote), the branch row, the two sub-tabs, and then either the commit form over the changed files or the log. `panels/git-panel.ts` keeps every decision: what a comparison is, which files group under which component, what a status letter reads aloud, what a commit does before it runs, and which of the four verbs a row's buttons are. Rows arrive as strings and booleans, keyed by path.",
5
- "tagName": "div",
6
- "attributes": {
7
- "part": "git-panel"
8
- },
9
- "style": {
10
- "$description": "The sixty-odd `.git-*` rules in `styles/overlays.css`, keyed on `part` and carried here. Four token repairs travel with them, all of the shape `surfaces/panel-imports.json` describes: `--spectrum-font-size-75` and `--spectrum-font-size-50` resolved only inside `<sp-theme>` and a document is mounted outside it, so every rule that read one would silently have taken its px fallback — they are `--jx-text-md` (12px) and `--jx-text-sm` (11px) here, at the same values, and the bare `10px` literals are `--jx-text-xs`. The one deliberate move is the two headline values, the sync label and the branch name: they were 13px, which is not a step on the scale, and they take `--jx-text-lg` (14px). Three rules are DELETED rather than moved, because the kit already draws them: the sub-tab strip's own fill, hover and selected underline are `jx-tabs`/`jx-tab`, the branch picker's box is `jx-select`, and `.git-split-btn`'s hand-built dropdown is the kit menu (see `openCommitMenu`). And one is repaired: a row's action buttons were `opacity: 0` until the ROW was hovered, so tabbing to Stage moved the keyboard onto an invisible control — the reveal is `:focus-within` as well as `:hover`.",
11
- "display": "flex",
12
- "flexDirection": "column",
13
- "height": "100%",
14
- "fontFamily": "var(--jx-font-sans)",
15
- "fontSize": "var(--jx-text-md)",
16
- "color": "var(--fg)",
17
- "& [part=\"empty\"]": {
18
- "$description": "Drawn here rather than borrowed from `panels/empty-state.ts`, which is a lit template a document cannot call. What is kept is the pattern's rules (studio-ui-guidelines.md §11): one sentence saying what the region is for, then the action that fills it.",
19
- "display": "flex",
20
- "flex": "1",
21
- "flexDirection": "column",
22
- "alignItems": "center",
23
- "justifyContent": "center",
24
- "gap": "var(--jx-space-3)",
25
- "padding": "var(--jx-space-5)",
26
- "textAlign": "center",
27
- "color": "var(--fg-dim)"
28
- },
29
- "& [part=\"empty-message\"]": {
30
- "margin": "0",
31
- "maxWidth": "34ch",
32
- "lineHeight": "1.5"
33
- },
34
- "& [part=\"empty-actions\"]": {
35
- "display": "flex",
36
- "flexDirection": "column",
37
- "gap": "var(--jx-space-2)"
38
- },
39
- "& [part=\"sync-bar\"]": {
40
- "$description": "A wrapping row (studio-ui-guidelines.md §4.6), and it has exactly two items: `sync-head` (Refresh and the status, which never split) and what answers the status (the Fetch/Pull/Push group, or Create GitHub repository with no remote). It was a single line whose only shrinkable item was the status text, so a narrow Navigator never moved a button: it broke \"3 behind / Last updated 09:04 AM\" into a column one word wide (25px at the 160px floor) and painted \"(no\" under Create GitHub repository at the default 240px. Now the second item drops to a line of its own when the two no longer fit, and where that happens is decided by the status text's own width (a count, a locale's clock), never by a breakpoint. The row gap is the smaller step so a wrapped bar reads as one block.",
41
- "display": "flex",
42
- "flexWrap": "wrap",
43
- "alignItems": "center",
44
- "gap": "var(--jx-space-3) var(--jx-space-4)",
45
- "padding": "var(--jx-space-4)",
46
- "borderBottom": "1px solid var(--border)"
47
- },
48
- "& [part=\"sync-bar\"][data-remote=\"none\"], & [part=\"sync-bar\"][data-remote=\"none\"] > [part=\"sync-head\"]": {
49
- "$description": "The no-remote bar keeps its tighter 8px between Refresh and the sentence, and on both axes: the head carries that gap now that Refresh and the text sit in it rather than in the bar.",
50
- "gap": "var(--jx-space-3)"
51
- },
52
- "& [part=\"sync-head\"]": {
53
- "$description": "Refresh and the status, as one item of the bar, so wrapping never leaves the icon alone on a line above its text. `flex: 1 1 auto` makes its basis the status text's own width, which is the wrap threshold; with `min-width: 0` it can then shrink below that when it is alone on a line, and the status wraps as a sentence rather than word by word.",
54
- "display": "flex",
55
- "flex": "1 1 auto",
56
- "alignItems": "center",
57
- "gap": "var(--jx-space-4)",
58
- "minWidth": "0"
59
- },
60
- "& [part=\"sync-text\"]": {
61
- "$description": "`1 1 auto` rather than `1`: the head's basis decides whether the verbs fit beside it, and it should be the status text's own width. An auto basis says that directly; the `0%` basis of `flex: 1` only reaches the same answer through how an engine treats a percentage while it measures.",
62
- "display": "flex",
63
- "flex": "1 1 auto",
64
- "flexDirection": "column",
65
- "gap": "1px",
66
- "minWidth": "0"
67
- },
68
- "& [part=\"sync-label\"]": {
69
- "fontSize": "var(--jx-text-lg)",
70
- "fontWeight": "600",
71
- "color": "var(--fg)"
72
- },
73
- "& [part=\"sync-time\"]": {
74
- "fontSize": "var(--jx-text-sm)",
75
- "color": "var(--fg-dim)"
76
- },
77
- "& [part=\"sync-actions\"]": {
78
- "$description": "The verbs never shrink: they are what moves. `margin-left: auto` keeps them at the inline end whether they share the status's line or sit on one of their own.",
79
- "display": "flex",
80
- "flex": "none",
81
- "marginLeft": "auto"
82
- },
83
- "& [part=\"branch-row\"]": {
84
- "$description": "A wrapping row (studio-ui-guidelines.md §4.6) of two items, `branch-head` and the picker. It was a single line with the picker capped at 40% of it, so a long branch name was cut twice (\"chor…\" beside \"cho…\") and a narrow Navigator word-stacked \"Active / branch\". Now the picker drops below the name when the two no longer fit, at a width the name decides.",
85
- "display": "flex",
86
- "flexWrap": "wrap",
87
- "alignItems": "center",
88
- "gap": "var(--jx-space-3) var(--jx-space-4)",
89
- "padding": "10px var(--jx-space-4)",
90
- "borderBottom": "1px solid var(--border)"
91
- },
92
- "& [part=\"branch-head\"]": {
93
- "$description": "The branch icon and the name, as one item so the icon is never alone on a line. The 999:1 grow ratio against the picker gives nearly all spare room to the name while the two share a line, so the picker stays the width of the branch it shows; once the picker wraps, it is alone and takes the whole line. A third item in this row needs its own flex decision.",
94
- "display": "flex",
95
- "flex": "999 1 auto",
96
- "alignItems": "center",
97
- "gap": "var(--jx-space-4)",
98
- "minWidth": "0"
99
- },
100
- "& [part=\"branch-icon\"]": {
101
- "$description": "The hand-drawn 18px branch SVG this panel carried is the kit's `git-branch` glyph — the same key `PanelRecord.icon` already names for this panel's rail button, so the two drawings cannot drift.",
102
- "flex": "none",
103
- "--jx-icon-size": "18px",
104
- "color": "var(--fg-dim)"
105
- },
106
- "& [part=\"branch-text\"]": {
107
- "display": "flex",
108
- "flex": "1 1 auto",
109
- "flexDirection": "column",
110
- "gap": "1px",
111
- "minWidth": "0"
112
- },
113
- "& [part=\"branch-label\"]": {
114
- "fontSize": "var(--jx-text-sm)",
115
- "color": "var(--fg-dim)"
116
- },
117
- "& [part=\"branch-name\"]": {
118
- "overflow": "hidden",
119
- "fontSize": "var(--jx-text-lg)",
120
- "fontWeight": "600",
121
- "color": "var(--fg)",
122
- "textOverflow": "ellipsis",
123
- "whiteSpace": "nowrap"
124
- },
125
- "& [part=\"branch-picker\"]": {
126
- "$description": "Sized by the branch it shows while it shares the name's line, and the full width of the row once it wraps below it, which is where a long branch name finally reads whole. `min-width: 0` is the kit's own default, restated because studio-ui-guidelines.md §4.6 asks it of every flex child: when even a line of its own is narrower than the name, the picker shrinks and the kit's preview ellipsizes.",
127
- "flex": "1 1 auto",
128
- "minWidth": "0"
129
- },
130
- "& [part=\"tab\"]": {
131
- "$description": "The sub-tabs may shrink below their labels. A flex item's automatic minimum is its content, and a tab's label is nowrap, so \"Local Changes (3)\" and \"History\" held 179px against the 159px the Navigator has at its 160px floor and scrolled the whole panel sideways; the kit's label ellipsis could never engage. `inspector-dock.json` makes the same call for its tabs. It is a surface decision and not a kit default because the document tab strip deliberately scrolls instead.",
132
- "minWidth": "0"
133
- },
134
- "& [part=\"create-repository\"] > [part=\"control\"], & [part=\"init\"] > [part=\"control\"], & [part=\"clone\"] > [part=\"control\"], & [part=\"commit-button\"] > [part=\"control\"]": {
135
- "$description": "The panel's labelled buttons wrap their words at the Navigator's floor instead of overflowing it. The kit's control is nowrap, which is right for a toolbar and made each label a floor of its own: \"Create GitHub repository\" held 165px in a 135px sync bar, \"Clone Git Repository\" and \"Initialize Repository\" held 141px and 135px in the empty state's 127px, and \"Commit and sync\" beside its menu had about a pixel to spare in the commit form's 135px. Nothing changes where the label fits, because a nowrap label and a wrapping one have the same max-content width. This reaches into the kit's `control` part as `commandbar.json` does for its primary button.",
136
- "whiteSpace": "normal"
137
- },
138
- "& [part=\"commit\"]": {
139
- "display": "flex",
140
- "flexDirection": "column",
141
- "gap": "var(--jx-space-3)",
142
- "padding": "var(--jx-space-4)",
143
- "borderBottom": "1px solid var(--border)"
144
- },
145
- "& [part=\"commit-label\"]": {
146
- "fontWeight": "500",
147
- "color": "var(--fg-dim)"
148
- },
149
- "& [part=\"commit-actions\"]": {
150
- "display": "flex",
151
- "gap": "var(--jx-space-2)"
152
- },
153
- "& [part=\"commit-button\"]": {
154
- "flex": "1"
155
- },
156
- "& [part=\"section\"]": {
157
- "borderBottom": "1px solid var(--border)"
158
- },
159
- "& [part=\"section-header\"]": {
160
- "display": "flex",
161
- "alignItems": "center",
162
- "gap": "var(--jx-space-3)",
163
- "padding": "var(--jx-space-3) var(--jx-space-4) 6px",
164
- "fontWeight": "700",
165
- "color": "var(--fg)"
166
- },
167
- "& [part=\"count\"]": {
168
- "$description": "The pill beside a section title. `margin-inline-end: auto` is what pushes the section's own button to the right edge — it was a second rule (`.git-section-header .git-count`) over the same element, and there is only one place a count is drawn.",
169
- "display": "inline-flex",
170
- "alignItems": "center",
171
- "justifyContent": "center",
172
- "minWidth": "18px",
173
- "height": "18px",
174
- "marginInlineEnd": "auto",
175
- "padding": "0 5px",
176
- "borderRadius": "9px",
177
- "background": "var(--accent-15)",
178
- "color": "var(--accent)",
179
- "fontSize": "var(--jx-text-xs)",
180
- "fontWeight": "600"
181
- },
182
- "& [part=\"group\"]": {
183
- "marginBottom": "var(--jx-space-1)"
184
- },
185
- "& [part=\"group-header\"]": {
186
- "display": "flex",
187
- "alignItems": "center",
188
- "gap": "6px",
189
- "padding": "var(--jx-space-2) var(--jx-space-3)"
190
- },
191
- "& [part=\"group-name\"]": {
192
- "fontWeight": "500",
193
- "color": "var(--fg)"
194
- },
195
- "& [part=\"file-row\"]": {
196
- "display": "flex",
197
- "alignItems": "center",
198
- "gap": "var(--jx-space-2)",
199
- "padding": "var(--jx-space-1) var(--jx-space-3) var(--jx-space-1) var(--jx-space-5)"
200
- },
201
- "& [part=\"file-row\"]:hover": {
202
- "background": "var(--hover-bg)"
203
- },
204
- "& [part=\"file-open\"]": {
205
- "$description": "A REAL button, because it does something. It was a bare span with a cursor and a `title`: not focusable, no role, and Enter did nothing — so the panel's primary verb was mouse-only. A `<button>` needs no role, no tabindex and no key handler of its own, which is three lines of the old row that simply go.",
206
- "display": "flex",
207
- "flex": "1",
208
- "alignItems": "baseline",
209
- "gap": "6px",
210
- "minWidth": "0",
211
- "margin": "0",
212
- "padding": "0",
213
- "overflow": "hidden",
214
- "border": "none",
215
- "borderRadius": "var(--radius)",
216
- "background": "none",
217
- "color": "inherit",
218
- "font": "inherit",
219
- "textAlign": "left",
220
- "cursor": "pointer",
221
- ":focus-visible": {
222
- "outline": "var(--jx-focus-ring)",
223
- "outlineOffset": "-2px"
224
- }
225
- },
226
- "& [part=\"file-name\"]": {
227
- "overflow": "hidden",
228
- "textOverflow": "ellipsis",
229
- "whiteSpace": "nowrap"
230
- },
231
- "& [part=\"file-dir\"]": {
232
- "overflow": "hidden",
233
- "color": "var(--fg-dim)",
234
- "fontSize": "var(--jx-text-xs)",
235
- "textOverflow": "ellipsis",
236
- "whiteSpace": "nowrap"
237
- },
238
- "& [part=\"file-actions\"]": {
239
- "$description": "Revealed on `:focus-within` as well as on the row's hover. Opacity alone hid a control the keyboard could still reach: tabbing through a changed file landed on an invisible Stage button.",
240
- "display": "flex",
241
- "flex": "none",
242
- "opacity": "0"
243
- },
244
- "& [part=\"file-row\"]:hover [part=\"file-actions\"], & [part=\"file-actions\"]:focus-within": {
245
- "opacity": "1"
246
- },
247
- "& [part=\"badge\"]": {
248
- "$description": "One letter and a colour, which is why every row's open button carries the status in words as well.",
249
- "flex": "none",
250
- "width": "16px",
251
- "color": "var(--signal)",
252
- "fontFamily": "var(--font-mono)",
253
- "fontSize": "var(--jx-text-xs)",
254
- "fontWeight": "700",
255
- "textAlign": "center"
256
- },
257
- "& [part=\"badge\"][data-status=\"A\"], & [part=\"badge\"][data-status=\"U\"]": {
258
- "color": "var(--success)"
259
- },
260
- "& [part=\"badge\"][data-status=\"D\"]": {
261
- "color": "var(--danger)"
262
- },
263
- "& [part=\"badge\"][data-status=\"R\"], & [part=\"badge\"][data-status=\"C\"]": {
264
- "color": "var(--tag)"
265
- },
266
- "& [part=\"history\"]": {
267
- "flex": "1",
268
- "overflowY": "auto",
269
- "padding": "var(--jx-space-2) 0"
270
- },
271
- "& [part=\"history-list\"]": {
272
- "margin": "0",
273
- "padding": "0",
274
- "listStyle": "none"
275
- },
276
- "& [part=\"history-entry\"]": {
277
- "display": "flex",
278
- "flexDirection": "column",
279
- "gap": "var(--jx-space-1)",
280
- "padding": "6px var(--jx-space-4)",
281
- "borderBottom": "1px solid var(--border)"
282
- },
283
- "& [part=\"history-entry\"]:hover": {
284
- "background": "var(--hover-bg)"
285
- },
286
- "& [part=\"history-hash\"]": {
287
- "color": "var(--accent)",
288
- "fontFamily": "var(--font-mono)",
289
- "fontSize": "var(--jx-text-xs)"
290
- },
291
- "& [part=\"history-message\"]": {
292
- "color": "var(--fg)"
293
- },
294
- "& [part=\"history-meta\"]": {
295
- "color": "var(--fg-dim)",
296
- "fontSize": "var(--jx-text-xs)"
297
- },
298
- "& [part=\"status\"]": {
299
- "margin": "0",
300
- "padding": "var(--jx-space-3)",
301
- "color": "var(--fg-dim)",
302
- "fontSize": "var(--jx-text-sm)",
303
- "textAlign": "center"
304
- },
305
- "& [part=\"failure\"]": {
306
- "$description": "The panel's own refusal banner. It is `failure` rather than `error` because the branch picker and the commit field each draw a permanent, empty `[part=\"error\"]` of their own inside this same light-DOM tree: under that name this padding, rule and wash drew a 16×13 box over both fields' top-left corners that took the click, and dressed either field's real refusal sentence as a banner.",
307
- "margin": "0",
308
- "padding": "6px var(--jx-space-3)",
309
- "borderBottom": "1px solid var(--border)",
310
- "background": "color-mix(in srgb, var(--danger) 8%, transparent)",
311
- "color": "var(--danger)",
312
- "fontSize": "var(--jx-text-sm)"
313
- },
314
- "@(forced-colors: active)": {
315
- "& [part=\"failure\"]": {
316
- "$description": "The wash behind the banner collapses into the page when every author colour is replaced, so the border is what is left to mark it.",
317
- "border": "1px solid CanvasText",
318
- "color": "CanvasText"
319
- }
320
- }
321
- },
322
- "children": [
323
- {
324
- "tagName": "div",
325
- "attributes": {
326
- "part": "view-slot",
327
- "role": "none"
328
- },
329
- "style": {
330
- "display": "contents"
331
- },
332
- "$switch": {
333
- "$ref": "#/state/view"
334
- },
335
- "cases": {
336
- "no-project": {
337
- "tagName": "div",
338
- "attributes": {
339
- "part": "empty",
340
- "data-view": "no-project"
341
- },
342
- "children": [
343
- {
344
- "tagName": "p",
345
- "attributes": {
346
- "part": "empty-message"
347
- },
348
- "textContent": "Source control keeps every version of a project, so any change can be undone. Open a project to see its history."
349
- },
350
- {
351
- "tagName": "div",
352
- "attributes": {
353
- "part": "clone-slot",
354
- "role": "none"
355
- },
356
- "style": {
357
- "display": "contents"
358
- },
359
- "$switch": {
360
- "$ref": "#/state/canClone"
361
- },
362
- "cases": {
363
- "true": {
364
- "tagName": "div",
365
- "attributes": {
366
- "part": "empty-actions"
367
- },
368
- "children": [
369
- {
370
- "tagName": "jx-button",
371
- "attributes": {
372
- "part": "clone",
373
- "data-action": "clone"
374
- },
375
- "$props": {
376
- "size": "sm"
377
- },
378
- "onclick": {
379
- "$prototype": "Function",
380
- "body": [
381
- {
382
- "operator": "call",
383
- "target": {
384
- "$ref": "#/state/clone"
385
- },
386
- "value": []
387
- }
388
- ]
389
- },
390
- "children": [
391
- {
392
- "tagName": "jx-icon",
393
- "$props": {
394
- "name": "download-simple"
395
- }
396
- },
397
- {
398
- "tagName": "span",
399
- "textContent": "Clone Git Repository"
400
- }
401
- ]
402
- }
403
- ]
404
- }
405
- }
406
- }
407
- ]
408
- },
409
- "loading": {
410
- "tagName": "p",
411
- "attributes": {
412
- "part": "status",
413
- "data-view": "loading"
414
- },
415
- "textContent": "Loading…"
416
- },
417
- "no-repo": {
418
- "tagName": "div",
419
- "attributes": {
420
- "part": "empty",
421
- "data-view": "no-repo"
422
- },
423
- "children": [
424
- {
425
- "tagName": "p",
426
- "attributes": {
427
- "part": "empty-message"
428
- },
429
- "textContent": "This project is not tracked by git yet. Start tracking it to keep a history of every change and to publish it anywhere."
430
- },
431
- {
432
- "tagName": "div",
433
- "attributes": {
434
- "part": "empty-actions"
435
- },
436
- "children": [
437
- {
438
- "tagName": "jx-button",
439
- "attributes": {
440
- "part": "init",
441
- "data-action": "init"
442
- },
443
- "$props": {
444
- "size": "sm",
445
- "variant": "accent",
446
- "disabled": {
447
- "$ref": "#/state/busy"
448
- }
449
- },
450
- "onclick": {
451
- "$prototype": "Function",
452
- "body": [
453
- {
454
- "operator": "call",
455
- "target": {
456
- "$ref": "#/state/initRepository"
457
- },
458
- "value": []
459
- }
460
- ]
461
- },
462
- "children": [
463
- {
464
- "tagName": "jx-icon",
465
- "$props": {
466
- "name": "plus"
467
- }
468
- },
469
- {
470
- "tagName": "span",
471
- "textContent": "Initialize Repository"
472
- }
473
- ]
474
- },
475
- {
476
- "tagName": "jx-button",
477
- "attributes": {
478
- "part": "create-repository",
479
- "data-action": "create-repository"
480
- },
481
- "$props": {
482
- "size": "sm",
483
- "disabled": {
484
- "$ref": "#/state/busy"
485
- }
486
- },
487
- "onclick": {
488
- "$prototype": "Function",
489
- "body": [
490
- {
491
- "operator": "call",
492
- "target": {
493
- "$ref": "#/state/createRepository"
494
- },
495
- "value": []
496
- }
497
- ]
498
- },
499
- "children": [
500
- {
501
- "tagName": "jx-icon",
502
- "$props": {
503
- "name": "share-network"
504
- }
505
- },
506
- {
507
- "tagName": "span",
508
- "textContent": "Create GitHub repository"
509
- }
510
- ]
511
- }
512
- ]
513
- }
514
- ]
515
- },
516
- "repo": {
517
- "tagName": "div",
518
- "attributes": {
519
- "part": "repo",
520
- "role": "none"
521
- },
522
- "style": {
523
- "display": "contents"
524
- },
525
- "children": [
526
- {
527
- "tagName": "div",
528
- "attributes": {
529
- "part": "remote-slot",
530
- "role": "none"
531
- },
532
- "style": {
533
- "display": "contents"
534
- },
535
- "$switch": {
536
- "$ref": "#/state/remoteState"
537
- },
538
- "cases": {
539
- "remote": {
540
- "tagName": "div",
541
- "attributes": {
542
- "part": "sync-bar",
543
- "data-remote": "yes"
544
- },
545
- "children": [
546
- {
547
- "tagName": "div",
548
- "attributes": {
549
- "part": "sync-head"
550
- },
551
- "children": [
552
- {
553
- "tagName": "jx-action-button",
554
- "attributes": {
555
- "part": "refresh",
556
- "data-action": "refresh"
557
- },
558
- "$props": {
559
- "icon": "arrows-clockwise",
560
- "size": "sm",
561
- "quiet": true,
562
- "label": "Refresh",
563
- "hint": "Refresh",
564
- "disabled": {
565
- "$ref": "#/state/busy"
566
- }
567
- },
568
- "onclick": {
569
- "$prototype": "Function",
570
- "body": [
571
- {
572
- "operator": "call",
573
- "target": {
574
- "$ref": "#/state/refresh"
575
- },
576
- "value": []
577
- }
578
- ]
579
- }
580
- },
581
- {
582
- "tagName": "div",
583
- "attributes": {
584
- "part": "sync-text"
585
- },
586
- "children": [
587
- {
588
- "tagName": "span",
589
- "attributes": {
590
- "part": "sync-label"
591
- },
592
- "textContent": "${state.syncLabel}"
593
- },
594
- {
595
- "tagName": "span",
596
- "attributes": {
597
- "part": "updated-slot",
598
- "role": "none"
599
- },
600
- "style": {
601
- "display": "contents"
602
- },
603
- "$switch": {
604
- "$ref": "#/state/hasLastUpdated"
605
- },
606
- "cases": {
607
- "true": {
608
- "tagName": "span",
609
- "attributes": {
610
- "part": "sync-time"
611
- },
612
- "textContent": "${state.lastUpdated}"
613
- }
614
- }
615
- }
616
- ]
617
- }
618
- ]
619
- },
620
- {
621
- "$description": "Three quiet tools, so NOT compact. A compact group draws every member's frame and fill whatever its quiet says, so the `quiet: true` each verb below writes would have been silently framed into a segmented control; Spectrum's group here was quiet and never compact, which is what compact=false and the 2px gap between the verbs restore.",
622
- "tagName": "jx-action-group",
623
- "attributes": {
624
- "part": "sync-actions"
625
- },
626
- "$props": {
627
- "label": "Remote actions",
628
- "compact": false
629
- },
630
- "children": [
631
- {
632
- "tagName": "jx-action-button",
633
- "attributes": {
634
- "part": "fetch",
635
- "data-action": "fetch"
636
- },
637
- "$props": {
638
- "icon": "download-simple",
639
- "size": "sm",
640
- "quiet": true,
641
- "label": "Fetch",
642
- "hint": "Fetch",
643
- "disabled": {
644
- "$ref": "#/state/busy"
645
- }
646
- },
647
- "onclick": {
648
- "$prototype": "Function",
649
- "body": [
650
- {
651
- "operator": "call",
652
- "target": {
653
- "$ref": "#/state/fetch"
654
- },
655
- "value": []
656
- }
657
- ]
658
- }
659
- },
660
- {
661
- "tagName": "jx-action-button",
662
- "attributes": {
663
- "part": "pull",
664
- "data-action": "pull"
665
- },
666
- "$props": {
667
- "icon": "arrow-down",
668
- "size": "sm",
669
- "quiet": true,
670
- "label": {
671
- "$ref": "#/state/pullLabel"
672
- },
673
- "hint": {
674
- "$ref": "#/state/pullLabel"
675
- },
676
- "disabled": {
677
- "$ref": "#/state/busy"
678
- }
679
- },
680
- "onclick": {
681
- "$prototype": "Function",
682
- "body": [
683
- {
684
- "operator": "call",
685
- "target": {
686
- "$ref": "#/state/pull"
687
- },
688
- "value": []
689
- }
690
- ]
691
- }
692
- },
693
- {
694
- "tagName": "jx-action-button",
695
- "attributes": {
696
- "part": "push",
697
- "data-action": "push"
698
- },
699
- "$props": {
700
- "icon": "arrow-up",
701
- "size": "sm",
702
- "quiet": true,
703
- "label": {
704
- "$ref": "#/state/pushLabel"
705
- },
706
- "hint": {
707
- "$ref": "#/state/pushLabel"
708
- },
709
- "disabled": {
710
- "$ref": "#/state/busy"
711
- }
712
- },
713
- "onclick": {
714
- "$prototype": "Function",
715
- "body": [
716
- {
717
- "operator": "call",
718
- "target": {
719
- "$ref": "#/state/push"
720
- },
721
- "value": []
722
- }
723
- ]
724
- }
725
- }
726
- ]
727
- }
728
- ]
729
- },
730
- "local": {
731
- "tagName": "div",
732
- "attributes": {
733
- "part": "sync-bar",
734
- "data-remote": "none"
735
- },
736
- "children": [
737
- {
738
- "tagName": "div",
739
- "attributes": {
740
- "part": "sync-head"
741
- },
742
- "children": [
743
- {
744
- "tagName": "jx-action-button",
745
- "attributes": {
746
- "part": "refresh",
747
- "data-action": "refresh"
748
- },
749
- "$props": {
750
- "icon": "arrows-clockwise",
751
- "size": "sm",
752
- "quiet": true,
753
- "label": "Refresh",
754
- "hint": "Refresh",
755
- "disabled": {
756
- "$ref": "#/state/busy"
757
- }
758
- },
759
- "onclick": {
760
- "$prototype": "Function",
761
- "body": [
762
- {
763
- "operator": "call",
764
- "target": {
765
- "$ref": "#/state/refresh"
766
- },
767
- "value": []
768
- }
769
- ]
770
- }
771
- },
772
- {
773
- "tagName": "div",
774
- "attributes": {
775
- "part": "sync-text"
776
- },
777
- "children": [
778
- {
779
- "tagName": "span",
780
- "attributes": {
781
- "part": "sync-label"
782
- },
783
- "textContent": "Local only (no remote)"
784
- }
785
- ]
786
- }
787
- ]
788
- },
789
- {
790
- "tagName": "jx-button",
791
- "attributes": {
792
- "part": "create-repository",
793
- "data-action": "create-repository"
794
- },
795
- "$props": {
796
- "size": "sm",
797
- "disabled": {
798
- "$ref": "#/state/busy"
799
- }
800
- },
801
- "onclick": {
802
- "$prototype": "Function",
803
- "body": [
804
- {
805
- "operator": "call",
806
- "target": {
807
- "$ref": "#/state/createRepository"
808
- },
809
- "value": []
810
- }
811
- ]
812
- },
813
- "children": [
814
- {
815
- "tagName": "jx-icon",
816
- "$props": {
817
- "name": "share-network"
818
- }
819
- },
820
- {
821
- "tagName": "span",
822
- "textContent": "Create GitHub repository"
823
- }
824
- ]
825
- }
826
- ]
827
- }
828
- }
829
- },
830
- {
831
- "tagName": "div",
832
- "attributes": {
833
- "part": "branch-row"
834
- },
835
- "children": [
836
- {
837
- "tagName": "div",
838
- "attributes": {
839
- "part": "branch-head"
840
- },
841
- "children": [
842
- {
843
- "tagName": "jx-icon",
844
- "attributes": {
845
- "part": "branch-icon"
846
- },
847
- "$props": {
848
- "name": "git-branch"
849
- }
850
- },
851
- {
852
- "tagName": "div",
853
- "attributes": {
854
- "part": "branch-text"
855
- },
856
- "children": [
857
- {
858
- "tagName": "span",
859
- "attributes": {
860
- "part": "branch-label"
861
- },
862
- "textContent": "Active branch"
863
- },
864
- {
865
- "tagName": "span",
866
- "attributes": {
867
- "part": "branch-name"
868
- },
869
- "textContent": "${state.branchName}"
870
- }
871
- ]
872
- }
873
- ]
874
- },
875
- {
876
- "tagName": "jx-select",
877
- "attributes": {
878
- "part": "branch-picker"
879
- },
880
- "$props": {
881
- "label": "Switch branch",
882
- "size": "sm",
883
- "options": {
884
- "$ref": "#/state/branchOptions"
885
- },
886
- "value": {
887
- "$ref": "#/state/branchValue"
888
- }
889
- },
890
- "onchange": {
891
- "$prototype": "Function",
892
- "body": [
893
- {
894
- "operator": "call",
895
- "target": {
896
- "$ref": "#/state/chooseBranch"
897
- },
898
- "value": [
899
- {
900
- "$ref": "event#/target/value"
901
- }
902
- ]
903
- }
904
- ]
905
- }
906
- }
907
- ]
908
- },
909
- {
910
- "tagName": "jx-tabs",
911
- "attributes": {
912
- "part": "tabs",
913
- "selected": "${state.subTab}"
914
- },
915
- "$props": {
916
- "label": "Source control views"
917
- },
918
- "onchange": {
919
- "$prototype": "Function",
920
- "body": [
921
- {
922
- "operator": "call",
923
- "target": {
924
- "$ref": "#/state/selectTab"
925
- },
926
- "value": [
927
- {
928
- "$ref": "event#/detail"
929
- }
930
- ]
931
- }
932
- ]
933
- },
934
- "children": [
935
- {
936
- "tagName": "jx-tab",
937
- "attributes": {
938
- "part": "tab",
939
- "data-tab": "changes",
940
- "value": "changes",
941
- "label": "${state.changesLabel}",
942
- "panel": "git-panel-body"
943
- }
944
- },
945
- {
946
- "tagName": "jx-tab",
947
- "attributes": {
948
- "part": "tab",
949
- "data-tab": "history",
950
- "value": "history",
951
- "label": "History",
952
- "panel": "git-panel-body"
953
- }
954
- }
955
- ]
956
- },
957
- {
958
- "tagName": "div",
959
- "attributes": {
960
- "part": "body",
961
- "id": "git-panel-body",
962
- "role": "tabpanel",
963
- "data-tab": "${state.subTab}"
964
- },
965
- "style": {
966
- "display": "contents"
967
- },
968
- "$switch": {
969
- "$ref": "#/state/subTab"
970
- },
971
- "cases": {
972
- "changes": {
973
- "tagName": "div",
974
- "attributes": {
975
- "part": "changes",
976
- "role": "none"
977
- },
978
- "style": {
979
- "display": "contents"
980
- },
981
- "children": [
982
- {
983
- "tagName": "div",
984
- "attributes": {
985
- "part": "commit",
986
- "data-jx-region": "navigator/panel:git/commit"
987
- },
988
- "children": [
989
- {
990
- "tagName": "span",
991
- "attributes": {
992
- "part": "commit-label",
993
- "id": "git-commit-label"
994
- },
995
- "textContent": "Please write a commit message"
996
- },
997
- {
998
- "tagName": "jx-textfield",
999
- "attributes": {
1000
- "part": "commit-input",
1001
- "data-field": "commit-message"
1002
- },
1003
- "$props": {
1004
- "labelledby": "git-commit-label",
1005
- "multiline": true,
1006
- "size": "sm",
1007
- "placeholder": "Describe your changes",
1008
- "value": {
1009
- "$ref": "#/state/commitMessage"
1010
- }
1011
- },
1012
- "oninput": {
1013
- "$prototype": "Function",
1014
- "body": [
1015
- {
1016
- "operator": "call",
1017
- "target": {
1018
- "$ref": "#/state/editMessage"
1019
- },
1020
- "value": [
1021
- {
1022
- "$ref": "event#/target/value"
1023
- }
1024
- ]
1025
- }
1026
- ]
1027
- },
1028
- "onkeydown": {
1029
- "$prototype": "Function",
1030
- "body": [
1031
- {
1032
- "$switch": {
1033
- "$ref": "event#/key"
1034
- },
1035
- "cases": {
1036
- "Enter": [
1037
- {
1038
- "if": {
1039
- "operator": "||",
1040
- "target": {
1041
- "$ref": "event#/ctrlKey"
1042
- },
1043
- "value": {
1044
- "$ref": "event#/metaKey"
1045
- }
1046
- },
1047
- "then": [
1048
- {
1049
- "preventDefault": true
1050
- },
1051
- {
1052
- "operator": "call",
1053
- "target": {
1054
- "$ref": "#/state/commit"
1055
- },
1056
- "value": []
1057
- }
1058
- ]
1059
- }
1060
- ]
1061
- }
1062
- }
1063
- ]
1064
- }
1065
- },
1066
- {
1067
- "tagName": "div",
1068
- "attributes": {
1069
- "part": "commit-actions"
1070
- },
1071
- "children": [
1072
- {
1073
- "tagName": "jx-button",
1074
- "attributes": {
1075
- "part": "commit-button",
1076
- "data-action": "commit-and-sync"
1077
- },
1078
- "$props": {
1079
- "size": "sm",
1080
- "variant": "accent",
1081
- "disabled": {
1082
- "$ref": "#/state/busy"
1083
- }
1084
- },
1085
- "onclick": {
1086
- "$prototype": "Function",
1087
- "body": [
1088
- {
1089
- "operator": "call",
1090
- "target": {
1091
- "$ref": "#/state/commitAndSync"
1092
- },
1093
- "value": []
1094
- }
1095
- ]
1096
- },
1097
- "children": [
1098
- {
1099
- "tagName": "span",
1100
- "textContent": "Commit and sync"
1101
- }
1102
- ]
1103
- },
1104
- {
1105
- "tagName": "jx-action-button",
1106
- "attributes": {
1107
- "part": "commit-menu",
1108
- "data-action": "commit-menu"
1109
- },
1110
- "$props": {
1111
- "icon": "caret-down",
1112
- "size": "sm",
1113
- "label": "More commit options",
1114
- "hint": "More commit options",
1115
- "haspopup": "menu"
1116
- },
1117
- "onclick": {
1118
- "$prototype": "Function",
1119
- "body": [
1120
- {
1121
- "operator": "call",
1122
- "target": {
1123
- "$ref": "#/state/openCommitMenu"
1124
- },
1125
- "value": [
1126
- {
1127
- "$ref": "event#/currentTarget"
1128
- }
1129
- ]
1130
- }
1131
- ]
1132
- }
1133
- }
1134
- ]
1135
- }
1136
- ]
1137
- },
1138
- {
1139
- "tagName": "div",
1140
- "attributes": {
1141
- "part": "staged-slot",
1142
- "role": "none"
1143
- },
1144
- "style": {
1145
- "display": "contents"
1146
- },
1147
- "$switch": {
1148
- "$ref": "#/state/hasStaged"
1149
- },
1150
- "cases": {
1151
- "true": {
1152
- "tagName": "section",
1153
- "attributes": {
1154
- "part": "section",
1155
- "data-section": "staged",
1156
- "aria-label": "Staged Changes"
1157
- },
1158
- "children": [
1159
- {
1160
- "tagName": "div",
1161
- "attributes": {
1162
- "part": "section-header"
1163
- },
1164
- "children": [
1165
- {
1166
- "tagName": "span",
1167
- "attributes": {
1168
- "part": "section-title"
1169
- },
1170
- "textContent": "Staged Changes"
1171
- },
1172
- {
1173
- "tagName": "span",
1174
- "attributes": {
1175
- "part": "count"
1176
- },
1177
- "textContent": "${state.stagedCount}"
1178
- },
1179
- {
1180
- "tagName": "jx-action-button",
1181
- "attributes": {
1182
- "part": "unstage-all",
1183
- "data-action": "unstage-all"
1184
- },
1185
- "$props": {
1186
- "icon": "minus",
1187
- "size": "sm",
1188
- "quiet": true,
1189
- "label": "Unstage all",
1190
- "hint": "Unstage all"
1191
- },
1192
- "onclick": {
1193
- "$prototype": "Function",
1194
- "body": [
1195
- {
1196
- "operator": "call",
1197
- "target": {
1198
- "$ref": "#/state/unstageAll"
1199
- },
1200
- "value": []
1201
- }
1202
- ]
1203
- }
1204
- }
1205
- ]
1206
- },
1207
- {
1208
- "$prototype": "Array",
1209
- "items": {
1210
- "$ref": "#/state/stagedFiles"
1211
- },
1212
- "key": {
1213
- "$ref": "$map/item/key"
1214
- },
1215
- "map": {
1216
- "$description": "One changed file. Every row opens the file it names — renderability decides which VIEW opens, not whether the row responds — and carries the two or three verbs its staged state allows. `$map/item` inside a nested map is the FILE, which is why the row hands its own path back to every action rather than an index.",
1217
- "tagName": "div",
1218
- "attributes": {
1219
- "part": "file-row",
1220
- "data-path": "${$map.item.path}",
1221
- "data-status": "${$map.item.status}"
1222
- },
1223
- "children": [
1224
- {
1225
- "tagName": "button",
1226
- "attributes": {
1227
- "part": "file-open",
1228
- "type": "button",
1229
- "aria-label": "${$map.item.label}",
1230
- "title": "Open this file's comparison"
1231
- },
1232
- "onclick": {
1233
- "$prototype": "Function",
1234
- "body": [
1235
- {
1236
- "operator": "call",
1237
- "target": {
1238
- "$ref": "#/state/openFile"
1239
- },
1240
- "value": [
1241
- {
1242
- "$ref": "$map/item/path"
1243
- }
1244
- ]
1245
- }
1246
- ]
1247
- },
1248
- "children": [
1249
- {
1250
- "tagName": "span",
1251
- "attributes": {
1252
- "part": "file-name"
1253
- },
1254
- "textContent": "${$map.item.name}"
1255
- },
1256
- {
1257
- "tagName": "span",
1258
- "attributes": {
1259
- "part": "dir-slot",
1260
- "role": "none"
1261
- },
1262
- "style": {
1263
- "display": "contents"
1264
- },
1265
- "$switch": {
1266
- "$ref": "$map/item/hasDir"
1267
- },
1268
- "cases": {
1269
- "true": {
1270
- "tagName": "span",
1271
- "attributes": {
1272
- "part": "file-dir"
1273
- },
1274
- "textContent": "${$map.item.dir}"
1275
- }
1276
- }
1277
- }
1278
- ]
1279
- },
1280
- {
1281
- "tagName": "span",
1282
- "attributes": {
1283
- "part": "file-actions"
1284
- },
1285
- "$switch": {
1286
- "$ref": "$map/item/staged"
1287
- },
1288
- "cases": {
1289
- "true": {
1290
- "tagName": "jx-action-button",
1291
- "attributes": {
1292
- "part": "unstage",
1293
- "data-action": "unstage"
1294
- },
1295
- "$props": {
1296
- "icon": "minus",
1297
- "size": "sm",
1298
- "quiet": true,
1299
- "label": "Unstage ${$map.item.path}",
1300
- "hint": "Unstage"
1301
- },
1302
- "onclick": {
1303
- "$prototype": "Function",
1304
- "body": [
1305
- {
1306
- "operator": "call",
1307
- "target": {
1308
- "$ref": "#/state/unstage"
1309
- },
1310
- "value": [
1311
- {
1312
- "$ref": "$map/item/path"
1313
- }
1314
- ]
1315
- }
1316
- ]
1317
- }
1318
- },
1319
- "false": {
1320
- "tagName": "span",
1321
- "attributes": {
1322
- "part": "unstaged-actions",
1323
- "role": "none"
1324
- },
1325
- "style": {
1326
- "display": "contents"
1327
- },
1328
- "children": [
1329
- {
1330
- "tagName": "jx-action-button",
1331
- "attributes": {
1332
- "part": "discard",
1333
- "data-action": "discard"
1334
- },
1335
- "$props": {
1336
- "icon": "arrow-u-up-left",
1337
- "size": "sm",
1338
- "quiet": true,
1339
- "label": "Discard changes to ${$map.item.path}",
1340
- "hint": "Discard changes",
1341
- "disabled": {
1342
- "$ref": "$map/item/cannotDiscard"
1343
- }
1344
- },
1345
- "onclick": {
1346
- "$prototype": "Function",
1347
- "body": [
1348
- {
1349
- "operator": "call",
1350
- "target": {
1351
- "$ref": "#/state/discard"
1352
- },
1353
- "value": [
1354
- {
1355
- "$ref": "$map/item/path"
1356
- }
1357
- ]
1358
- }
1359
- ]
1360
- }
1361
- },
1362
- {
1363
- "tagName": "jx-action-button",
1364
- "attributes": {
1365
- "part": "stage",
1366
- "data-action": "stage"
1367
- },
1368
- "$props": {
1369
- "icon": "plus",
1370
- "size": "sm",
1371
- "quiet": true,
1372
- "label": "Stage ${$map.item.path}",
1373
- "hint": "Stage"
1374
- },
1375
- "onclick": {
1376
- "$prototype": "Function",
1377
- "body": [
1378
- {
1379
- "operator": "call",
1380
- "target": {
1381
- "$ref": "#/state/stage"
1382
- },
1383
- "value": [
1384
- {
1385
- "$ref": "$map/item/path"
1386
- }
1387
- ]
1388
- }
1389
- ]
1390
- }
1391
- }
1392
- ]
1393
- }
1394
- }
1395
- },
1396
- {
1397
- "tagName": "span",
1398
- "attributes": {
1399
- "part": "badge",
1400
- "data-status": "${$map.item.status}"
1401
- },
1402
- "textContent": "${$map.item.status}"
1403
- }
1404
- ]
1405
- }
1406
- }
1407
- ]
1408
- }
1409
- }
1410
- },
1411
- {
1412
- "tagName": "section",
1413
- "attributes": {
1414
- "part": "section",
1415
- "data-section": "changed",
1416
- "aria-label": "Changed Components"
1417
- },
1418
- "children": [
1419
- {
1420
- "tagName": "div",
1421
- "attributes": {
1422
- "part": "section-header"
1423
- },
1424
- "children": [
1425
- {
1426
- "tagName": "span",
1427
- "attributes": {
1428
- "part": "section-title"
1429
- },
1430
- "textContent": "Changed Components"
1431
- },
1432
- {
1433
- "tagName": "span",
1434
- "attributes": {
1435
- "part": "count"
1436
- },
1437
- "textContent": "${state.changedCount}"
1438
- },
1439
- {
1440
- "tagName": "span",
1441
- "attributes": {
1442
- "part": "stage-all-slot",
1443
- "role": "none"
1444
- },
1445
- "style": {
1446
- "display": "contents"
1447
- },
1448
- "$switch": {
1449
- "$ref": "#/state/hasUnstaged"
1450
- },
1451
- "cases": {
1452
- "true": {
1453
- "tagName": "jx-action-button",
1454
- "attributes": {
1455
- "part": "stage-all",
1456
- "data-action": "stage-all"
1457
- },
1458
- "$props": {
1459
- "icon": "plus",
1460
- "size": "sm",
1461
- "quiet": true,
1462
- "label": "Stage all",
1463
- "hint": "Stage all"
1464
- },
1465
- "onclick": {
1466
- "$prototype": "Function",
1467
- "body": [
1468
- {
1469
- "operator": "call",
1470
- "target": {
1471
- "$ref": "#/state/stageAll"
1472
- },
1473
- "value": []
1474
- }
1475
- ]
1476
- }
1477
- }
1478
- }
1479
- }
1480
- ]
1481
- },
1482
- {
1483
- "tagName": "div",
1484
- "attributes": {
1485
- "part": "groups-slot",
1486
- "role": "none"
1487
- },
1488
- "style": {
1489
- "display": "contents"
1490
- },
1491
- "$switch": {
1492
- "$ref": "#/state/filesState"
1493
- },
1494
- "cases": {
1495
- "listed": {
1496
- "tagName": "div",
1497
- "attributes": {
1498
- "part": "groups"
1499
- },
1500
- "children": [
1501
- {
1502
- "$prototype": "Array",
1503
- "items": {
1504
- "$ref": "#/state/groups"
1505
- },
1506
- "key": {
1507
- "$ref": "$map/item/key"
1508
- },
1509
- "map": {
1510
- "tagName": "div",
1511
- "attributes": {
1512
- "part": "group",
1513
- "data-group": "${$map.item.key}"
1514
- },
1515
- "children": [
1516
- {
1517
- "tagName": "div",
1518
- "attributes": {
1519
- "part": "group-header"
1520
- },
1521
- "children": [
1522
- {
1523
- "tagName": "span",
1524
- "attributes": {
1525
- "part": "group-name"
1526
- },
1527
- "textContent": "${$map.item.name}"
1528
- }
1529
- ]
1530
- },
1531
- {
1532
- "$prototype": "Array",
1533
- "items": {
1534
- "$ref": "$map/item/files"
1535
- },
1536
- "key": {
1537
- "$ref": "$map/item/key"
1538
- },
1539
- "map": {
1540
- "tagName": "div",
1541
- "attributes": {
1542
- "part": "file-row",
1543
- "data-path": "${$map.item.path}",
1544
- "data-status": "${$map.item.status}"
1545
- },
1546
- "children": [
1547
- {
1548
- "tagName": "button",
1549
- "attributes": {
1550
- "part": "file-open",
1551
- "type": "button",
1552
- "aria-label": "${$map.item.label}",
1553
- "title": "Open this file's comparison"
1554
- },
1555
- "onclick": {
1556
- "$prototype": "Function",
1557
- "body": [
1558
- {
1559
- "operator": "call",
1560
- "target": {
1561
- "$ref": "#/state/openFile"
1562
- },
1563
- "value": [
1564
- {
1565
- "$ref": "$map/item/path"
1566
- }
1567
- ]
1568
- }
1569
- ]
1570
- },
1571
- "children": [
1572
- {
1573
- "tagName": "span",
1574
- "attributes": {
1575
- "part": "file-name"
1576
- },
1577
- "textContent": "${$map.item.name}"
1578
- },
1579
- {
1580
- "tagName": "span",
1581
- "attributes": {
1582
- "part": "dir-slot",
1583
- "role": "none"
1584
- },
1585
- "style": {
1586
- "display": "contents"
1587
- },
1588
- "$switch": {
1589
- "$ref": "$map/item/hasDir"
1590
- },
1591
- "cases": {
1592
- "true": {
1593
- "tagName": "span",
1594
- "attributes": {
1595
- "part": "file-dir"
1596
- },
1597
- "textContent": "${$map.item.dir}"
1598
- }
1599
- }
1600
- }
1601
- ]
1602
- },
1603
- {
1604
- "tagName": "span",
1605
- "attributes": {
1606
- "part": "file-actions"
1607
- },
1608
- "$switch": {
1609
- "$ref": "$map/item/staged"
1610
- },
1611
- "cases": {
1612
- "true": {
1613
- "tagName": "jx-action-button",
1614
- "attributes": {
1615
- "part": "unstage",
1616
- "data-action": "unstage"
1617
- },
1618
- "$props": {
1619
- "icon": "minus",
1620
- "size": "sm",
1621
- "quiet": true,
1622
- "label": "Unstage ${$map.item.path}",
1623
- "hint": "Unstage"
1624
- },
1625
- "onclick": {
1626
- "$prototype": "Function",
1627
- "body": [
1628
- {
1629
- "operator": "call",
1630
- "target": {
1631
- "$ref": "#/state/unstage"
1632
- },
1633
- "value": [
1634
- {
1635
- "$ref": "$map/item/path"
1636
- }
1637
- ]
1638
- }
1639
- ]
1640
- }
1641
- },
1642
- "false": {
1643
- "tagName": "span",
1644
- "attributes": {
1645
- "part": "unstaged-actions",
1646
- "role": "none"
1647
- },
1648
- "style": {
1649
- "display": "contents"
1650
- },
1651
- "children": [
1652
- {
1653
- "tagName": "jx-action-button",
1654
- "attributes": {
1655
- "part": "discard",
1656
- "data-action": "discard"
1657
- },
1658
- "$props": {
1659
- "icon": "arrow-u-up-left",
1660
- "size": "sm",
1661
- "quiet": true,
1662
- "label": "Discard changes to ${$map.item.path}",
1663
- "hint": "Discard changes",
1664
- "disabled": {
1665
- "$ref": "$map/item/cannotDiscard"
1666
- }
1667
- },
1668
- "onclick": {
1669
- "$prototype": "Function",
1670
- "body": [
1671
- {
1672
- "operator": "call",
1673
- "target": {
1674
- "$ref": "#/state/discard"
1675
- },
1676
- "value": [
1677
- {
1678
- "$ref": "$map/item/path"
1679
- }
1680
- ]
1681
- }
1682
- ]
1683
- }
1684
- },
1685
- {
1686
- "tagName": "jx-action-button",
1687
- "attributes": {
1688
- "part": "stage",
1689
- "data-action": "stage"
1690
- },
1691
- "$props": {
1692
- "icon": "plus",
1693
- "size": "sm",
1694
- "quiet": true,
1695
- "label": "Stage ${$map.item.path}",
1696
- "hint": "Stage"
1697
- },
1698
- "onclick": {
1699
- "$prototype": "Function",
1700
- "body": [
1701
- {
1702
- "operator": "call",
1703
- "target": {
1704
- "$ref": "#/state/stage"
1705
- },
1706
- "value": [
1707
- {
1708
- "$ref": "$map/item/path"
1709
- }
1710
- ]
1711
- }
1712
- ]
1713
- }
1714
- }
1715
- ]
1716
- }
1717
- }
1718
- },
1719
- {
1720
- "tagName": "span",
1721
- "attributes": {
1722
- "part": "badge",
1723
- "data-status": "${$map.item.status}"
1724
- },
1725
- "textContent": "${$map.item.status}"
1726
- }
1727
- ]
1728
- }
1729
- }
1730
- ]
1731
- }
1732
- }
1733
- ]
1734
- },
1735
- "empty": {
1736
- "tagName": "p",
1737
- "attributes": {
1738
- "part": "empty-message",
1739
- "data-empty": "changes"
1740
- },
1741
- "textContent": "Nothing to commit. Files you edit and save show up here."
1742
- }
1743
- }
1744
- }
1745
- ]
1746
- }
1747
- ]
1748
- },
1749
- "history": {
1750
- "tagName": "div",
1751
- "attributes": {
1752
- "part": "history"
1753
- },
1754
- "children": [
1755
- {
1756
- "tagName": "div",
1757
- "attributes": {
1758
- "part": "history-slot",
1759
- "role": "none"
1760
- },
1761
- "style": {
1762
- "display": "contents"
1763
- },
1764
- "$switch": {
1765
- "$ref": "#/state/historyState"
1766
- },
1767
- "cases": {
1768
- "listed": {
1769
- "tagName": "ul",
1770
- "attributes": {
1771
- "part": "history-list"
1772
- },
1773
- "children": [
1774
- {
1775
- "$prototype": "Array",
1776
- "items": {
1777
- "$ref": "#/state/commits"
1778
- },
1779
- "key": {
1780
- "$ref": "$map/item/key"
1781
- },
1782
- "map": {
1783
- "tagName": "li",
1784
- "attributes": {
1785
- "part": "history-entry",
1786
- "data-hash": "${$map.item.hash}"
1787
- },
1788
- "children": [
1789
- {
1790
- "tagName": "span",
1791
- "attributes": {
1792
- "part": "history-hash"
1793
- },
1794
- "textContent": "${$map.item.hash}"
1795
- },
1796
- {
1797
- "tagName": "span",
1798
- "attributes": {
1799
- "part": "history-message"
1800
- },
1801
- "textContent": "${$map.item.message}"
1802
- },
1803
- {
1804
- "tagName": "span",
1805
- "attributes": {
1806
- "part": "history-meta"
1807
- },
1808
- "textContent": "${$map.item.meta}"
1809
- }
1810
- ]
1811
- }
1812
- }
1813
- ]
1814
- },
1815
- "empty": {
1816
- "tagName": "p",
1817
- "attributes": {
1818
- "part": "empty-message",
1819
- "data-empty": "history"
1820
- },
1821
- "textContent": "No commits yet. Each commit you make is a version you can come back to."
1822
- }
1823
- }
1824
- }
1825
- ]
1826
- }
1827
- }
1828
- },
1829
- {
1830
- "tagName": "div",
1831
- "attributes": {
1832
- "part": "busy-slot",
1833
- "role": "none"
1834
- },
1835
- "style": {
1836
- "display": "contents"
1837
- },
1838
- "$switch": {
1839
- "$ref": "#/state/busy"
1840
- },
1841
- "cases": {
1842
- "true": {
1843
- "tagName": "p",
1844
- "attributes": {
1845
- "part": "status",
1846
- "data-status": "busy"
1847
- },
1848
- "textContent": "Loading…"
1849
- }
1850
- }
1851
- },
1852
- {
1853
- "tagName": "div",
1854
- "attributes": {
1855
- "part": "failure-slot",
1856
- "role": "none"
1857
- },
1858
- "style": {
1859
- "display": "contents"
1860
- },
1861
- "$switch": {
1862
- "$ref": "#/state/hasError"
1863
- },
1864
- "cases": {
1865
- "true": {
1866
- "tagName": "p",
1867
- "attributes": {
1868
- "part": "failure",
1869
- "role": "alert"
1870
- },
1871
- "textContent": "${state.error}"
1872
- }
1873
- }
1874
- }
1875
- ]
1876
- }
1877
- }
1878
- }
1879
- ]
1880
- }