@jxsuite/studio 2.0.1 → 2.1.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 (419) hide show
  1. package/canvas.html +21 -0
  2. package/dist/chunks/Overlay.dev-qfjzkms8.js +23 -0
  3. package/dist/chunks/{Overlay.dev-cszx7yn5.js.map → Overlay.dev-qfjzkms8.js.map} +1 -1
  4. package/dist/chunks/{adapter-z8fkmbmv.js → adapter-qfnesn5v.js} +2 -2
  5. package/dist/chunks/{cf-settings-mmyv436d.js → cf-settings-73sh5z4p.js} +3 -3
  6. package/dist/chunks/{components-799jpvhm.js → components-2bpqp4mq.js} +5 -7
  7. package/dist/chunks/{components-799jpvhm.js.map → components-2bpqp4mq.js.map} +1 -1
  8. package/dist/chunks/content-source-34gnkbnn.js +38 -0
  9. package/dist/chunks/content-source-34gnkbnn.js.map +9 -0
  10. package/dist/chunks/convert-to-repeater-t8kxre5s.js +258 -0
  11. package/dist/chunks/convert-to-repeater-t8kxre5s.js.map +10 -0
  12. package/dist/chunks/extension-sections-6mqydz35.js +301 -0
  13. package/dist/chunks/extension-sections-6mqydz35.js.map +11 -0
  14. package/dist/chunks/files-8kn321h1.js +70 -0
  15. package/dist/chunks/files-8kn321h1.js.map +9 -0
  16. package/dist/chunks/{format-host-8jxwts2p.js → format-host-mkwsmt8d.js} +3 -3
  17. package/dist/chunks/git-panel-tjbr191d.js +51 -0
  18. package/dist/chunks/git-panel-tjbr191d.js.map +9 -0
  19. package/dist/chunks/{index-baeg2x3y.js → index-7pxchcce.js} +4 -3
  20. package/dist/chunks/{index-baeg2x3y.js.map → index-7pxchcce.js.map} +3 -3
  21. package/dist/chunks/{jx-validate-qx8degj7.js → jx-validate-v6qgknrs.js} +3 -3
  22. package/dist/chunks/layers-panel-87pb25km.js +58 -0
  23. package/dist/chunks/layers-panel-87pb25km.js.map +9 -0
  24. package/dist/chunks/{monaco-setup-zjdp9zdw.js → monaco-setup-e0yh25j4.js} +4 -75
  25. package/dist/chunks/{monaco-setup-zjdp9zdw.js.map → monaco-setup-e0yh25j4.js.map} +3 -4
  26. package/dist/chunks/publish-panel-m0fcgdrt.js +21 -0
  27. package/dist/chunks/publish-panel-m0fcgdrt.js.map +9 -0
  28. package/dist/chunks/quick-search-rhs6cbsb.js +53 -0
  29. package/dist/chunks/quick-search-rhs6cbsb.js.map +9 -0
  30. package/dist/chunks/right-panel-zpdxd98t.js +37 -0
  31. package/dist/chunks/right-panel-zpdxd98t.js.map +9 -0
  32. package/dist/chunks/section-registry-zmckaxf4.js +30 -0
  33. package/dist/chunks/section-registry-zmckaxf4.js.map +9 -0
  34. package/dist/chunks/sp-overlay.dev-9ran0sfq.js +18 -0
  35. package/dist/chunks/sp-overlay.dev-9ran0sfq.js.map +9 -0
  36. package/dist/chunks/sp-popover.dev-rebmdncr.js +9 -0
  37. package/dist/chunks/sp-popover.dev-rebmdncr.js.map +9 -0
  38. package/dist/chunks/sp-progress-circle.dev-5vkppfkt.js +15 -0
  39. package/dist/chunks/sp-progress-circle.dev-5vkppfkt.js.map +9 -0
  40. package/dist/chunks/sp-tooltip.dev-ykqrg8h5.js +15 -0
  41. package/dist/chunks/sp-tooltip.dev-ykqrg8h5.js.map +9 -0
  42. package/dist/chunks/{sp-tray.dev-pb2fsd65.js → sp-tray.dev-ey59vfh7.js} +10 -8
  43. package/dist/chunks/{sp-tray.dev-pb2fsd65.js.map → sp-tray.dev-ey59vfh7.js.map} +2 -2
  44. package/dist/chunks/{studio-9qr6fq7p.js → studio-0rqqhrdy.js} +10 -378
  45. package/dist/chunks/{studio-9qr6fq7p.js.map → studio-0rqqhrdy.js.map} +4 -14
  46. package/dist/chunks/{studio-5x6tqqec.js → studio-2sj1jj3v.js} +10 -8
  47. package/dist/chunks/{studio-5x6tqqec.js.map → studio-2sj1jj3v.js.map} +2 -2
  48. package/dist/chunks/{studio-h3fw0wn8.js → studio-3fk1ac9z.js} +6 -4
  49. package/dist/chunks/{studio-h3fw0wn8.js.map → studio-3fk1ac9z.js.map} +2 -2
  50. package/dist/chunks/studio-41exgzhq.js +6690 -0
  51. package/dist/chunks/studio-41exgzhq.js.map +38 -0
  52. package/dist/chunks/{studio-7v2bpweq.js → studio-4mqb9a0j.js} +6 -4
  53. package/dist/chunks/{studio-7v2bpweq.js.map → studio-4mqb9a0j.js.map} +2 -2
  54. package/dist/chunks/studio-50k77cca.js +1787 -0
  55. package/dist/chunks/studio-50k77cca.js.map +18 -0
  56. package/dist/chunks/{studio-56v3zwk6.js → studio-6a0h7sne.js} +10 -8
  57. package/dist/chunks/{studio-56v3zwk6.js.map → studio-6a0h7sne.js.map} +2 -2
  58. package/dist/chunks/studio-6f0am8f2.js +53 -0
  59. package/dist/chunks/studio-6f0am8f2.js.map +10 -0
  60. package/dist/chunks/studio-6nmjc5qk.js +7002 -0
  61. package/dist/chunks/studio-6nmjc5qk.js.map +32 -0
  62. package/dist/chunks/studio-7afd21nw.js +67 -0
  63. package/dist/chunks/studio-7afd21nw.js.map +10 -0
  64. package/dist/chunks/{studio-xze4zrs1.js → studio-7bmdvzne.js} +2 -2
  65. package/dist/chunks/studio-7bmdvzne.js.map +10 -0
  66. package/dist/chunks/studio-8jpzqk5s.js +128 -0
  67. package/dist/chunks/studio-8jpzqk5s.js.map +10 -0
  68. package/dist/chunks/studio-94m77tgk.js +1482 -0
  69. package/dist/chunks/studio-94m77tgk.js.map +13 -0
  70. package/dist/chunks/studio-9je6w5sq.js +1000 -0
  71. package/dist/chunks/studio-9je6w5sq.js.map +16 -0
  72. package/dist/chunks/{studio-w7c6kvk7.js → studio-a7pzveq1.js} +2 -2
  73. package/dist/chunks/{studio-gs6kqdt1.js → studio-adn0z1k3.js} +14 -8
  74. package/dist/chunks/{studio-gs6kqdt1.js.map → studio-adn0z1k3.js.map} +3 -3
  75. package/dist/chunks/{studio-kr88ryr7.js → studio-bsxxx3x2.js} +17 -15
  76. package/dist/chunks/{studio-kr88ryr7.js.map → studio-bsxxx3x2.js.map} +7 -6
  77. package/dist/chunks/studio-bw5dz6km.js +608 -0
  78. package/dist/chunks/studio-bw5dz6km.js.map +21 -0
  79. package/dist/chunks/studio-c6s5getc.js +4232 -0
  80. package/dist/chunks/studio-c6s5getc.js.map +39 -0
  81. package/dist/chunks/studio-cjm7fdjf.js +451 -0
  82. package/dist/chunks/studio-cjm7fdjf.js.map +14 -0
  83. package/dist/chunks/{studio-cx91mnh8.js → studio-ckwz4d3x.js} +53 -53
  84. package/dist/chunks/{studio-cx91mnh8.js.map → studio-ckwz4d3x.js.map} +5 -5
  85. package/dist/chunks/studio-dg7zyt5x.js +28 -0
  86. package/dist/chunks/studio-dg7zyt5x.js.map +10 -0
  87. package/dist/chunks/studio-dzcyvvvz.js +166 -0
  88. package/dist/chunks/studio-dzcyvvvz.js.map +10 -0
  89. package/dist/chunks/{studio-7kqe41sa.js → studio-evkr5d3b.js} +15 -7
  90. package/dist/chunks/{studio-7kqe41sa.js.map → studio-evkr5d3b.js.map} +5 -4
  91. package/dist/chunks/studio-f12h6177.js +411 -0
  92. package/dist/chunks/studio-f12h6177.js.map +13 -0
  93. package/dist/chunks/studio-hbp1s8m9.js +1817 -0
  94. package/dist/chunks/studio-hbp1s8m9.js.map +14 -0
  95. package/dist/chunks/studio-k2sxjph5.js +15295 -0
  96. package/dist/chunks/studio-k2sxjph5.js.map +235 -0
  97. package/dist/chunks/studio-myje51t3.js +385 -0
  98. package/dist/chunks/studio-myje51t3.js.map +12 -0
  99. package/dist/chunks/studio-na6rwzhw.js +353 -0
  100. package/dist/chunks/studio-na6rwzhw.js.map +11 -0
  101. package/dist/chunks/{studio-4k0m4fmp.js → studio-p471gg5n.js} +126 -3
  102. package/dist/chunks/studio-p471gg5n.js.map +14 -0
  103. package/dist/chunks/{studio-9bjwf0d4.js → studio-rgwcpast.js} +5 -46
  104. package/dist/chunks/{studio-9bjwf0d4.js.map → studio-rgwcpast.js.map} +4 -5
  105. package/dist/chunks/{studio-esrewxap.js → studio-s519zc99.js} +3 -3
  106. package/dist/chunks/studio-sas7mt3k.js +75 -0
  107. package/dist/chunks/studio-sas7mt3k.js.map +10 -0
  108. package/dist/chunks/studio-t5wqwzdh.js +74 -0
  109. package/dist/chunks/studio-t5wqwzdh.js.map +10 -0
  110. package/dist/chunks/{studio-9qpspwfn.js → studio-temv5bw4.js} +5 -5
  111. package/dist/chunks/{studio-9qpspwfn.js.map → studio-temv5bw4.js.map} +1 -1
  112. package/dist/chunks/{studio-qkvt37c0.js → studio-tr20m8g8.js} +669 -18
  113. package/dist/chunks/studio-tr20m8g8.js.map +9 -0
  114. package/dist/chunks/{studio-v7jkjqng.js → studio-v96qfnww.js} +5514 -4291
  115. package/dist/chunks/studio-v96qfnww.js.map +54 -0
  116. package/dist/chunks/studio-vcetc91k.js +659 -0
  117. package/dist/chunks/studio-vcetc91k.js.map +10 -0
  118. package/dist/chunks/{studio-jm0z592w.js → studio-vmymjefp.js} +2972 -4937
  119. package/dist/chunks/studio-vmymjefp.js.map +98 -0
  120. package/dist/chunks/{studio-bghqfmea.js → studio-wwseqyw0.js} +2 -2
  121. package/dist/chunks/studio-x9hmy5kr.js +390 -0
  122. package/dist/chunks/studio-x9hmy5kr.js.map +10 -0
  123. package/dist/chunks/studio-xa0ce0n7.js +335 -0
  124. package/dist/chunks/studio-xa0ce0n7.js.map +10 -0
  125. package/dist/chunks/studio-xm3dbxvn.js +378 -0
  126. package/dist/chunks/studio-xm3dbxvn.js.map +19 -0
  127. package/dist/chunks/{studio-nqw433kv.js → studio-xmvbhg31.js} +2 -2
  128. package/dist/chunks/studio-zv37yrfa.js +1054 -0
  129. package/dist/chunks/studio-zv37yrfa.js.map +13 -0
  130. package/dist/chunks/{ws-client-q7hkz3j9.js → ws-client-654ts66j.js} +6 -4
  131. package/dist/chunks/ws-client-654ts66j.js.map +11 -0
  132. package/dist/iframe-entry.js +668 -230
  133. package/dist/studio.js +21080 -32585
  134. package/index.html +35 -4685
  135. package/package.json +17 -15
  136. package/src/about/about-modal.ts +42 -11
  137. package/src/browse/library-commands.ts +240 -0
  138. package/src/browse/library-layouts.ts +369 -0
  139. package/src/browse/library-model.ts +396 -0
  140. package/src/browse/library-pane.ts +1049 -0
  141. package/src/browse/library-preview.ts +252 -0
  142. package/src/browse/library-source.ts +150 -0
  143. package/src/canvas/canvas-helpers.ts +33 -9
  144. package/src/canvas/canvas-live-render.ts +45 -29
  145. package/src/canvas/canvas-patcher.ts +151 -31
  146. package/src/canvas/canvas-perf.ts +46 -7
  147. package/src/canvas/canvas-render.ts +1092 -220
  148. package/src/canvas/canvas-surface.ts +240 -0
  149. package/src/canvas/canvas-utils.ts +1166 -124
  150. package/src/canvas/iframe-drop.ts +2 -1
  151. package/src/canvas/iframe-entry.ts +241 -4
  152. package/src/canvas/iframe-host.ts +1226 -143
  153. package/src/canvas/iframe-inline-edit.ts +31 -0
  154. package/src/canvas/iframe-interaction.ts +76 -16
  155. package/src/canvas/iframe-keys.ts +107 -45
  156. package/src/canvas/iframe-overlay.ts +38 -1
  157. package/src/canvas/iframe-protocol.ts +137 -2
  158. package/src/canvas/iframe-render.ts +70 -2
  159. package/src/canvas/iframe-slash.ts +6 -0
  160. package/src/canvas/path-mapping.ts +56 -6
  161. package/src/canvas/surface-registry.ts +292 -0
  162. package/src/collab/collab-commands.ts +244 -0
  163. package/src/collab/collab-session.ts +198 -32
  164. package/src/collab/collab-state.ts +28 -2
  165. package/src/collab/presence-chips.ts +100 -9
  166. package/src/commands/active-registry.ts +42 -0
  167. package/src/commands/app-commands.ts +176 -0
  168. package/src/commands/budget.ts +158 -0
  169. package/src/commands/command-args.ts +253 -0
  170. package/src/commands/context.ts +387 -0
  171. package/src/commands/defaults.ts +580 -0
  172. package/src/commands/keymap.ts +571 -0
  173. package/src/commands/levels.ts +345 -0
  174. package/src/commands/live-context.ts +193 -0
  175. package/src/commands/reference.ts +227 -0
  176. package/src/commands/registry.ts +293 -0
  177. package/src/component-props.ts +3 -2
  178. package/src/content/draft-state.ts +106 -0
  179. package/src/content/entry-commands.ts +282 -0
  180. package/src/content/entry-editor.ts +327 -0
  181. package/src/content/entry-fields.ts +116 -0
  182. package/src/content/entry-model.ts +175 -0
  183. package/src/editor/canvas-context-menu.ts +17 -11
  184. package/src/editor/canvas-slash-bridge.ts +11 -4
  185. package/src/editor/context-menu.ts +804 -204
  186. package/src/editor/convert-to-component.ts +31 -10
  187. package/src/editor/convert-to-repeater.ts +3 -2
  188. package/src/editor/inline-edit-apply.ts +5 -5
  189. package/src/editor/inline-edit.ts +86 -50
  190. package/src/editor/insert-zone-action.ts +1 -1
  191. package/src/editor/shortcuts.ts +1043 -329
  192. package/src/editor/slash-menu.ts +1 -0
  193. package/src/files/elements.ts +166 -0
  194. package/src/files/file-ops.ts +178 -31
  195. package/src/files/files.ts +898 -268
  196. package/src/files/fs-events.ts +21 -0
  197. package/src/files/media-meta.ts +203 -0
  198. package/src/files/media-paths.ts +141 -0
  199. package/src/files/media-upload.ts +7 -3
  200. package/src/files/media-usage.ts +189 -0
  201. package/src/github/github-auth.ts +235 -33
  202. package/src/github/github-publish.ts +80 -21
  203. package/src/grid/grid-controller.ts +152 -12
  204. package/src/grid/grid-layout.ts +225 -20
  205. package/src/grid/grid-open.ts +120 -0
  206. package/src/grid/grid-panel.ts +554 -39
  207. package/src/grid/grid-source.ts +27 -1
  208. package/src/grid/redirects-grid.ts +599 -0
  209. package/src/grid/redirects.ts +398 -0
  210. package/src/grid/sources/content-source.ts +108 -2
  211. package/src/i18n/i18n-commands.ts +322 -0
  212. package/src/new-project/add-repo-modal.ts +8 -10
  213. package/src/new-project/import-tab.ts +7 -0
  214. package/src/new-project/location-fields.ts +9 -1
  215. package/src/new-project/new-project-modal.ts +221 -245
  216. package/src/packages/jxsuite-update.ts +97 -48
  217. package/src/packages/pull-package-sync.ts +18 -9
  218. package/src/page-params.ts +2 -1
  219. package/src/panels/activity-bar.ts +152 -91
  220. package/src/panels/activity-panel.ts +481 -0
  221. package/src/panels/ai-chat/chat-markdown.ts +8 -3
  222. package/src/panels/ai-chat/chat-view.ts +245 -18
  223. package/src/panels/ai-chat/composer.ts +31 -5
  224. package/src/panels/ai-chat/sessions-view.ts +17 -10
  225. package/src/panels/ai-panel.ts +279 -53
  226. package/src/panels/block-action-bar.ts +1115 -224
  227. package/src/panels/bottom-dock.ts +337 -0
  228. package/src/panels/canvas-dnd-bridge.ts +37 -8
  229. package/src/panels/chat-panel.ts +29 -12
  230. package/src/panels/data-explorer.ts +254 -112
  231. package/src/panels/data-grid.ts +10 -4
  232. package/src/panels/dnd.ts +28 -51
  233. package/src/panels/editors.ts +434 -107
  234. package/src/panels/elements-panel.ts +66 -2
  235. package/src/panels/empty-state.ts +112 -0
  236. package/src/panels/events-panel.ts +596 -82
  237. package/src/panels/formula-workspace.ts +408 -218
  238. package/src/panels/frontmatter-fields.ts +51 -10
  239. package/src/panels/frontmatter-panel.ts +357 -79
  240. package/src/panels/git-panel.ts +375 -164
  241. package/src/panels/head-panel.ts +791 -85
  242. package/src/panels/i18n-panel.ts +592 -0
  243. package/src/panels/imports-panel.ts +95 -85
  244. package/src/panels/jump-bar.ts +584 -0
  245. package/src/panels/layers-panel.ts +1106 -328
  246. package/src/panels/left-panel.ts +109 -204
  247. package/src/panels/navigator-panels.ts +131 -0
  248. package/src/panels/overlays.ts +7 -2
  249. package/src/panels/pane-context.ts +1477 -0
  250. package/src/panels/pane-grid.ts +406 -0
  251. package/src/panels/panel-registry.ts +340 -0
  252. package/src/panels/panel-scheduler.ts +75 -0
  253. package/src/panels/problems-panel.ts +234 -0
  254. package/src/panels/properties-panel.ts +946 -1139
  255. package/src/panels/provenance.ts +258 -0
  256. package/src/panels/quick-search.ts +791 -122
  257. package/src/panels/right-panel.ts +228 -102
  258. package/src/panels/seo-modal.ts +395 -0
  259. package/src/panels/settings-pane.ts +203 -0
  260. package/src/panels/signals-panel.ts +354 -137
  261. package/src/panels/statement-editor.ts +41 -25
  262. package/src/panels/statusbar.ts +342 -106
  263. package/src/panels/style-panel.ts +974 -463
  264. package/src/panels/style-utils.ts +3 -3
  265. package/src/panels/stylebook-doc.ts +4 -2
  266. package/src/panels/stylebook-layers-panel.ts +3 -2
  267. package/src/panels/stylebook-panel.ts +51 -26
  268. package/src/panels/tab-strip.ts +1058 -78
  269. package/src/panels/target-line.ts +274 -0
  270. package/src/panels/toolbar.ts +631 -484
  271. package/src/panels/welcome-screen.ts +301 -198
  272. package/src/platform-errors.ts +26 -3
  273. package/src/platform.ts +96 -2
  274. package/src/platforms/cloud.ts +71 -8
  275. package/src/platforms/devserver.ts +92 -29
  276. package/src/publish/deploy-checklist.ts +383 -0
  277. package/src/publish/pages-service.ts +10 -1
  278. package/src/publish/publish-commands.ts +218 -0
  279. package/src/publish/publish-panel.ts +110 -16
  280. package/src/recent-projects.ts +3 -2
  281. package/src/services/a11y-report.ts +505 -0
  282. package/src/services/ai-models.ts +30 -1
  283. package/src/services/ai-project-tools.ts +29 -10
  284. package/src/services/ai-system-prompt.ts +53 -14
  285. package/src/services/ai-tools.ts +39 -3
  286. package/src/services/ai-writes.ts +154 -0
  287. package/src/services/announce.ts +97 -0
  288. package/src/services/automation.ts +424 -175
  289. package/src/services/cem-export.ts +9 -4
  290. package/src/services/clock.ts +61 -0
  291. package/src/services/document-assistant.ts +36 -8
  292. package/src/services/idle.ts +179 -0
  293. package/src/services/import-client.ts +26 -0
  294. package/src/services/monaco-buffer.ts +627 -0
  295. package/src/services/monaco-lazy.ts +36 -0
  296. package/src/services/notify.ts +271 -0
  297. package/src/services/profile.ts +155 -0
  298. package/src/services/references.ts +0 -0
  299. package/src/services/token-lint.ts +3 -2
  300. package/src/services/tool-executor.ts +53 -7
  301. package/src/services/trusted-types.ts +123 -0
  302. package/src/settings/contexts-section.ts +427 -0
  303. package/src/settings/contributed-section.ts +149 -11
  304. package/src/settings/css-vars-editor.ts +306 -349
  305. package/src/settings/defs-editor.ts +93 -34
  306. package/src/settings/dependencies-editor.ts +7 -7
  307. package/src/settings/extension-sections.ts +37 -5
  308. package/src/settings/general-settings.ts +204 -121
  309. package/src/settings/locales-section.ts +347 -0
  310. package/src/settings/preferences-accounts.ts +140 -0
  311. package/src/settings/preferences-dialog.ts +620 -0
  312. package/src/settings/preferences-keymap.ts +270 -0
  313. package/src/settings/project-sections.ts +260 -0
  314. package/src/settings/section-registry.ts +169 -0
  315. package/src/settings/settings-document.ts +385 -0
  316. package/src/shell.ts +1549 -0
  317. package/src/site-context.ts +45 -20
  318. package/src/state.ts +14 -275
  319. package/src/store.ts +88 -43
  320. package/src/studio.ts +790 -346
  321. package/src/style/live-preview.ts +36 -0
  322. package/src/style/project-styles.ts +349 -0
  323. package/src/style/token-ref.ts +123 -0
  324. package/src/tabs/patch-ops.ts +16 -4
  325. package/src/tabs/project-config.ts +416 -0
  326. package/src/tabs/selection.ts +323 -0
  327. package/src/tabs/tab.ts +182 -47
  328. package/src/tabs/transact.ts +209 -28
  329. package/src/types.ts +68 -13
  330. package/src/ui/ai-credentials-form.ts +39 -35
  331. package/src/ui/ai-managed-connect.ts +7 -1
  332. package/src/ui/dynamic-slot.ts +224 -81
  333. package/src/ui/expression-editor.ts +71 -63
  334. package/src/ui/field-input.ts +4 -6
  335. package/src/ui/field-row.ts +215 -38
  336. package/src/ui/form-controls.ts +194 -7
  337. package/src/ui/layers.ts +492 -69
  338. package/src/ui/media-picker.ts +115 -25
  339. package/src/ui/panel-resize.ts +109 -91
  340. package/src/ui/progress-modal.ts +131 -50
  341. package/src/ui/regions.ts +462 -0
  342. package/src/ui/schema-form.ts +229 -45
  343. package/src/ui/spectrum.ts +24 -8
  344. package/src/ui/timing.ts +49 -0
  345. package/src/ui/value-selector.ts +20 -0
  346. package/src/ui/value-source.ts +348 -0
  347. package/src/ui/virtual-window.ts +400 -0
  348. package/src/utils/edit-display.ts +3 -2
  349. package/src/utils/inherited-style.ts +67 -37
  350. package/src/view.ts +64 -78
  351. package/src/workspace/pane-derive.ts +1258 -0
  352. package/src/workspace/session.ts +317 -0
  353. package/src/workspace/workspace.ts +1345 -23
  354. package/styles/canvas.css +653 -0
  355. package/styles/forced-colors.css +106 -0
  356. package/styles/inspector.css +1454 -0
  357. package/styles/overlays.css +2704 -0
  358. package/styles/panels.css +1701 -0
  359. package/styles/shell.css +1423 -0
  360. package/styles/tokens.css +151 -0
  361. package/dist/chunks/Overlay.dev-cszx7yn5.js +0 -22
  362. package/dist/chunks/extension-sections-qr3drkkw.js +0 -531
  363. package/dist/chunks/extension-sections-qr3drkkw.js.map +0 -12
  364. package/dist/chunks/files-j8a1t06k.js +0 -50
  365. package/dist/chunks/files-j8a1t06k.js.map +0 -9
  366. package/dist/chunks/git-panel-xtq5z81x.js +0 -28
  367. package/dist/chunks/git-panel-xtq5z81x.js.map +0 -9
  368. package/dist/chunks/layers-panel-ancn2wpq.js +0 -26
  369. package/dist/chunks/layers-panel-ancn2wpq.js.map +0 -9
  370. package/dist/chunks/settings-modal-17ttr96g.js +0 -29
  371. package/dist/chunks/settings-modal-17ttr96g.js.map +0 -9
  372. package/dist/chunks/sp-overlay.dev-earn5as8.js +0 -17
  373. package/dist/chunks/sp-overlay.dev-earn5as8.js.map +0 -9
  374. package/dist/chunks/sp-popover.dev-frxtfejn.js +0 -8
  375. package/dist/chunks/sp-popover.dev-frxtfejn.js.map +0 -9
  376. package/dist/chunks/sp-progress-circle.dev-7tvw34h8.js +0 -14
  377. package/dist/chunks/sp-progress-circle.dev-7tvw34h8.js.map +0 -9
  378. package/dist/chunks/sp-tooltip.dev-a9fywesm.js +0 -21
  379. package/dist/chunks/sp-tooltip.dev-a9fywesm.js.map +0 -10
  380. package/dist/chunks/studio-0xgs7xrs.js +0 -429
  381. package/dist/chunks/studio-0xgs7xrs.js.map +0 -13
  382. package/dist/chunks/studio-4d8hzcz5.js +0 -3427
  383. package/dist/chunks/studio-4d8hzcz5.js.map +0 -26
  384. package/dist/chunks/studio-4k0m4fmp.js.map +0 -13
  385. package/dist/chunks/studio-9smfzqhc.js +0 -19
  386. package/dist/chunks/studio-9smfzqhc.js.map +0 -10
  387. package/dist/chunks/studio-jm0z592w.js.map +0 -115
  388. package/dist/chunks/studio-m2t4mdg5.js +0 -1854
  389. package/dist/chunks/studio-m2t4mdg5.js.map +0 -18
  390. package/dist/chunks/studio-n4p11dfy.js +0 -853
  391. package/dist/chunks/studio-n4p11dfy.js.map +0 -12
  392. package/dist/chunks/studio-qkvt37c0.js.map +0 -9
  393. package/dist/chunks/studio-sjh1wt1a.js +0 -3744
  394. package/dist/chunks/studio-sjh1wt1a.js.map +0 -22
  395. package/dist/chunks/studio-v7jkjqng.js.map +0 -46
  396. package/dist/chunks/studio-xq0t7n5t.js +0 -140
  397. package/dist/chunks/studio-xq0t7n5t.js.map +0 -10
  398. package/dist/chunks/studio-xze4zrs1.js.map +0 -10
  399. package/dist/chunks/studio-yfcstdzy.js +0 -399
  400. package/dist/chunks/studio-yfcstdzy.js.map +0 -12
  401. package/dist/chunks/studio-zp7jncs8.js +0 -469
  402. package/dist/chunks/studio-zp7jncs8.js.map +0 -14
  403. package/dist/chunks/ws-client-q7hkz3j9.js.map +0 -11
  404. package/src/browse/browse-modal.ts +0 -69
  405. package/src/browse/browse.ts +0 -904
  406. package/src/canvas/canvas-diff.ts +0 -216
  407. package/src/canvas/nested-site-style.ts +0 -58
  408. package/src/new-project/design-fields.ts +0 -264
  409. package/src/new-project/templates.ts +0 -61
  410. package/src/panels/tab-bar.ts +0 -548
  411. package/src/settings/settings-modal.ts +0 -203
  412. /package/dist/chunks/{adapter-z8fkmbmv.js.map → adapter-qfnesn5v.js.map} +0 -0
  413. /package/dist/chunks/{cf-settings-mmyv436d.js.map → cf-settings-73sh5z4p.js.map} +0 -0
  414. /package/dist/chunks/{format-host-8jxwts2p.js.map → format-host-mkwsmt8d.js.map} +0 -0
  415. /package/dist/chunks/{jx-validate-qx8degj7.js.map → jx-validate-v6qgknrs.js.map} +0 -0
  416. /package/dist/chunks/{studio-w7c6kvk7.js.map → studio-a7pzveq1.js.map} +0 -0
  417. /package/dist/chunks/{studio-esrewxap.js.map → studio-s519zc99.js.map} +0 -0
  418. /package/dist/chunks/{studio-bghqfmea.js.map → studio-wwseqyw0.js.map} +0 -0
  419. /package/dist/chunks/{studio-nqw433kv.js.map → studio-xmvbhg31.js.map} +0 -0
@@ -0,0 +1,385 @@
1
+ /// <reference lib="dom" />
2
+ /**
3
+ * Project Settings — a **document**, not a modal.
4
+ *
5
+ * Its predecessor (`settings-modal.ts`) was an `inset: 40px` overlay with a scrim, which meant that
6
+ * while you tuned a design token that pushes live to the canvas, the canvas was behind the thing
7
+ * you were tuning it in, ⌘S/⌘Z/⌘P were suspended, and "Open Data Grid" opened a tab you could not
8
+ * see. Plan §9.3 replaces it with a document in the pane whose sections are INNER NAV: Overview ·
9
+ * Contexts · Site head · CSS Variables · Definitions · Content types · Packages · Extensions ·
10
+ * Deploy · Raw JSON.
11
+ *
12
+ * **The document is the `project.json` tab.** P6.1 made `project.json` a real Tab under the
13
+ * transaction log with one write chokepoint (`tabs/project-config.ts`); this module opens that same
14
+ * tab — same id, same document object — in the `settings` canvas mode. So the settings form, the
15
+ * Project Styles catalogue and the raw JSON are three editors over ONE document, and undo, the
16
+ * dirty flag and ⌘S are the ordinary document verbs rather than three bespoke ones. That is the
17
+ * whole of P6.1's disclosed residual ("⌘Z reaches config history only when the `project.json` tab
18
+ * is focused"): the settings surface now IS that tab.
19
+ *
20
+ * **`settings.open` did not change what it means.** §13.7 makes this phase's deliverable a
21
+ * near-zero manifest diff: the command still means "reach project settings, optionally at a named
22
+ * section", its args schema still declares `section`, and every shot step that names it is
23
+ * untouched. What changed is the `run` — a Tab instead of a modal — and the frame the seven region
24
+ * crops are taken in.
25
+ *
26
+ * @docs studio/projects/settings
27
+ */
28
+
29
+ import { errorMessage } from "@jxsuite/schema/parse";
30
+ import { optionalStringArg, stringProperty } from "../commands/command-args";
31
+ import { notify } from "../services/notify";
32
+ import { requireProjectState } from "../state";
33
+ import { PROJECT_CONFIG_PATH } from "../tabs/tab";
34
+ import { activeTab, focusPane, openTab, workspace } from "../workspace/workspace";
35
+ import {
36
+ notifySettingsDocument,
37
+ registerSettingsSection,
38
+ settingsDocumentSection,
39
+ setSettingsSection,
40
+ settingsSectionKeys,
41
+ } from "./section-registry";
42
+ import { renderContextsSection } from "./contexts-section";
43
+ import { renderCssVarsEditor } from "./css-vars-editor";
44
+ import { renderDefsEditor } from "./defs-editor";
45
+ import { renderDependenciesEditor } from "./dependencies-editor";
46
+ import {
47
+ renderDeploySection,
48
+ renderExtensionsSection,
49
+ renderRawJsonSection,
50
+ } from "./project-sections";
51
+ import { renderGeneralSettings } from "./general-settings";
52
+ import { renderHeadEditor } from "./head-editor";
53
+ import { renderLocalesSection } from "./locales-section";
54
+ import { selectContributedEntry } from "./contributed-section";
55
+ import type { Tab } from "../tabs/tab";
56
+ import type { AnyCommand, CommandRegistry } from "../commands/registry";
57
+
58
+ /**
59
+ * The canvas mode the settings editor draws under.
60
+ *
61
+ * `project.json` already declared `["stylebook", "source"]` (`tabs/tab.ts`'s `inferModes`); this is
62
+ * the third editor over the same document and it leads, because reaching configuration through a
63
+ * form is what "Settings" means to everyone who is not reading the file.
64
+ */
65
+ export const SETTINGS_MODE = "settings";
66
+
67
+ /** The tab's mode list when Project Settings opens it. Settings first, so it is the initial mode. */
68
+ const SETTINGS_TAB_MODES = [SETTINGS_MODE, "stylebook", "source"];
69
+
70
+ // ─── Built-in sections ────────────────────────────────────────────────────────
71
+ /* Orders leave gaps so a contribution can land between two built-ins. Content Types is NOT here —
72
+ the parser extension contributes it (order 50) through its Content class descriptor's
73
+ `$studio.settings` block, registered via ./extension-sections, which is the same path any
74
+ extension's section takes. */
75
+
76
+ registerSettingsSection({
77
+ icon: "sp-icon-properties",
78
+ key: "overview",
79
+ label: "Overview",
80
+ order: 10,
81
+ render: renderGeneralSettings,
82
+ });
83
+ /*
84
+ * Contexts sits directly under Overview because it is the project's second identity: Overview says
85
+ * what the site IS, Contexts says what it is rendered UNDER. It is a definition site only — the
86
+ * pane context bar selects among what is defined here, and its "Manage contexts…" footer names this
87
+ * key (plan §4.2, §2 principle 5). P6.3 is a RE-HOST: the section shipped in P4 through this same
88
+ * registry and moves into the document's inner nav without its renderer being touched.
89
+ */
90
+ registerSettingsSection({
91
+ icon: "sp-icon-device-desktop",
92
+ key: "contexts",
93
+ label: "Contexts",
94
+ order: 15,
95
+ render: renderContextsSection,
96
+ });
97
+ registerSettingsSection({
98
+ icon: "sp-icon-file-single-web-page",
99
+ key: "head",
100
+ label: "Site head",
101
+ order: 20,
102
+ render: renderHeadEditor,
103
+ });
104
+ /*
105
+ * Locales sits under Site head because both are facts about the whole site's HEAD rather than about
106
+ * one page: `<html lang>` and `<html dir>` are what a locale decides, and the routing choice below
107
+ * them decides what a page's URL looks like. It is also the definition site the pane's language
108
+ * control, the Languages panel and `i18n.addLocale` all read — there is one `i18n.locales` and this
109
+ * is the form over it.
110
+ */
111
+ registerSettingsSection({
112
+ icon: "sp-icon-globe",
113
+ key: "locales",
114
+ label: "Locales",
115
+ order: 25,
116
+ render: renderLocalesSection,
117
+ });
118
+ /*
119
+ * CSS Variables is the one section §12 P6.2 does not list, and it stays until P6.4 lands the
120
+ * Project Styles document that is to absorb it. Deleting it here would take the project's design
121
+ * tokens off every surface for the length of one phase — and `css-variables-shot` addresses this
122
+ * key by name.
123
+ */
124
+ registerSettingsSection({
125
+ icon: "sp-icon-brush",
126
+ key: "cssVars",
127
+ label: "CSS Variables",
128
+ order: 30,
129
+ render: renderCssVarsEditor,
130
+ });
131
+ registerSettingsSection({
132
+ icon: "sp-icon-data",
133
+ key: "definitions",
134
+ label: "Data Shapes",
135
+ order: 40,
136
+ render: renderDefsEditor,
137
+ });
138
+ registerSettingsSection({
139
+ icon: "sp-icon-box",
140
+ key: "dependencies",
141
+ label: "Packages",
142
+ order: 60,
143
+ render: renderDependenciesEditor,
144
+ });
145
+ registerSettingsSection({
146
+ icon: "sp-icon-plug",
147
+ key: "extensions",
148
+ label: "Extensions",
149
+ order: 70,
150
+ render: renderExtensionsSection,
151
+ });
152
+ registerSettingsSection({
153
+ icon: "sp-icon-publish-check",
154
+ key: "deploy",
155
+ label: "Deploy",
156
+ order: 80,
157
+ render: renderDeploySection,
158
+ });
159
+ registerSettingsSection({
160
+ icon: "sp-icon-code",
161
+ key: "rawJson",
162
+ label: "Raw JSON",
163
+ order: 900,
164
+ render: renderRawJsonSection,
165
+ });
166
+
167
+ // ─── Where the settings editor is ────────────────────────────────────────────
168
+
169
+ /**
170
+ * Which section the settings document is showing, or `null` when it is not the active editor.
171
+ *
172
+ * @returns {string | null}
173
+ */
174
+ export function activeSettingsSection(): string | null {
175
+ return settingsDocumentOpen() ? settingsDocumentSection() : null;
176
+ }
177
+
178
+ /** Whether the active tab is the configuration document in its settings editor. */
179
+ export function settingsDocumentOpen(): boolean {
180
+ const tab = activeTab.value as Tab | null;
181
+ return tab?.documentPath === PROJECT_CONFIG_PATH && tab.session.ui.canvasMode === SETTINGS_MODE;
182
+ }
183
+
184
+ // ─── The document ─────────────────────────────────────────────────────────────
185
+
186
+ /**
187
+ * Open (or reveal) the configuration document in its settings editor.
188
+ *
189
+ * The tab is keyed by `project.json` on purpose: opening the file from the Files tree and opening
190
+ * Settings reach the same tab, the same history and the same dirty flag. When it is already open
191
+ * this only switches the editor, so an author who was reading the raw JSON keeps their undo stack.
192
+ *
193
+ * @returns {Tab | null} The tab, or null when no project is open
194
+ */
195
+ export function showSettingsDocument(): Tab | null {
196
+ const state = requireProjectState();
197
+ if (!state) {
198
+ return null;
199
+ }
200
+ const existing = workspace.tabs.get(PROJECT_CONFIG_PATH);
201
+ if (existing) {
202
+ for (const mode of SETTINGS_TAB_MODES) {
203
+ if (!existing.capabilities.modes.includes(mode)) {
204
+ existing.capabilities.modes.unshift(mode);
205
+ }
206
+ }
207
+ existing.session.ui.canvasMode = SETTINGS_MODE;
208
+ existing.session.ui.preview = false;
209
+ return revealTab(existing as unknown as Tab);
210
+ }
211
+ return openTab({
212
+ capabilities: { modes: [...SETTINGS_TAB_MODES] },
213
+ document: (state.projectConfig ?? {}) as unknown as Record<string, unknown>,
214
+ documentPath: PROJECT_CONFIG_PATH,
215
+ id: PROJECT_CONFIG_PATH,
216
+ });
217
+ }
218
+
219
+ /**
220
+ * Make an already-open tab the active one without rebuilding it.
221
+ *
222
+ * `openTab` recreates the tab from scratch, which would discard the configuration document's
223
+ * history — the one thing this phase exists to give it.
224
+ *
225
+ * @param {Tab} tab
226
+ * @returns {Tab}
227
+ */
228
+ function revealTab(tab: Tab): Tab {
229
+ for (const pane of workspace.panes) {
230
+ if (pane.tabOrder.includes(tab.id)) {
231
+ pane.activeTabId = tab.id;
232
+ /* `focusPane`, not `workspace.activePaneId = pane.id`. Moving the keyboard is four
233
+ operations, and the assignment is one of them: the other three are `resetTabCycle` (so
234
+ Ctrl-Tab cycles from where you now are, not from the pane you left), `promoteMru` (so the
235
+ MRU order agrees with what is on screen) and `syncTreeSelection` (so the file tree points
236
+ at the document you are looking at). Reopening Project Settings into the side pane left
237
+ all three describing the pane it had come from. */
238
+ focusPane(pane.id);
239
+ break;
240
+ }
241
+ }
242
+ return tab;
243
+ }
244
+
245
+ /**
246
+ * Reach Project Settings, optionally at a named section.
247
+ *
248
+ * Awaits the contributed-section sync before returning, so a caller that then asks whether a
249
+ * section exists is asking the complete registry. The sync is COALESCED (`extension-sections.ts`),
250
+ * which is the second half of the deep-link fix: `refreshExtensionUi` fires the same function on
251
+ * project activation and after every `project.json` write, and the modal started a second,
252
+ * interleaved run whose unregister pass could take the caller's section down between the promise
253
+ * resolving and the frame being drawn.
254
+ *
255
+ * @param {string} [section]
256
+ */
257
+ export async function openProjectSettings(section?: string): Promise<void> {
258
+ if (section !== undefined) {
259
+ setSettingsSection(section);
260
+ }
261
+ showSettingsDocument();
262
+ notifySettingsDocument();
263
+ try {
264
+ const { syncExtensionSettingsSections } = await import("./extension-sections");
265
+ await syncExtensionSettingsSections();
266
+ } catch (error) {
267
+ /* Contributed sections are optional — the built-ins render regardless — but a contribution that
268
+ will not load is a broken extension, and §7.2 says a thing that must be fixed and is about a
269
+ named file is a Problem rather than a toast that erases itself. */
270
+ notify.warn(`Could not load extension settings sections — ${errorMessage(error)}`, {
271
+ key: "settings:sections",
272
+ path: PROJECT_CONFIG_PATH,
273
+ source: "Settings",
274
+ tier: "problem",
275
+ });
276
+ }
277
+ notifySettingsDocument();
278
+ }
279
+
280
+ /** Await the contributed-section sync — the readiness `probe.idle()` and the command both need. */
281
+ export async function settingsSectionsReady(): Promise<void> {
282
+ const { extensionSectionsReady } = await import("./extension-sections");
283
+ await extensionSectionsReady();
284
+ }
285
+
286
+ // ─── Commands ─────────────────────────────────────────────────────────────────
287
+
288
+ /**
289
+ * Open Project Settings — optionally on a named section, optionally at a named entry.
290
+ *
291
+ * **This one record replaces four manifest verbs**: `openSettings`, `openSettings {section}`,
292
+ * `settings.setSection` and the five `input: type` steps that clicked an entry row by region id.
293
+ * The third was refused outright by plan §13.3 because its press-shim mirrored the section
294
+ * registry's LABELS in a hand-kept map; the fourth was raw input standing in for a verb that did
295
+ * not exist ("`settings.selectEntry` has no command record", `until: "P6.2"`). Sections have KEYS
296
+ * and map-layout sections have ENTRY keys; this names both, so the manifest's input-step budget
297
+ * falls by five and its unstable budget by five without one `settings.open` step changing.
298
+ *
299
+ * The validation is deliberately asynchronous. Extension-contributed sections (`connections`,
300
+ * `data`, `content`) register a tick after the document opens, so refusing synchronously would
301
+ * reject three legitimate section ids; the command opens, awaits the sync, and only then decides
302
+ * whether the caller named something real. A wrong key therefore fails the step instead of
303
+ * rendering an empty content pane — which is exactly what `css-variables` (the key is `cssVars`)
304
+ * has been doing.
305
+ *
306
+ * @returns {AnyCommand[]}
307
+ */
308
+ export function settingsCommands(): AnyCommand[] {
309
+ return [
310
+ {
311
+ args: {
312
+ additionalProperties: false,
313
+ properties: {
314
+ entry: stringProperty(
315
+ "An entry key inside the named section (map-layout sections only), e.g. a content " +
316
+ "type or a data connection.",
317
+ ),
318
+ section: stringProperty(
319
+ "The settings section key to show. Defaults to Overview on a fresh open.",
320
+ ),
321
+ },
322
+ required: [],
323
+ type: "object",
324
+ },
325
+ category: "Project",
326
+ id: "settings.open",
327
+ level: "project",
328
+ // ⌘⇧, — the other half of §5.3's `⌘, / ⌘⇧,` pair. `app.preferences` shipped with its chord
329
+ // And this one did not, so the two halves of "settings" were a keystroke and a palette search.
330
+ keybinding: "mod+shift+,",
331
+ menus: ["commandbar/overflow", "palette"],
332
+ group: "7_settings",
333
+ requires: "an open project",
334
+ when: (ctx) => ctx.project.open,
335
+ aiTool: {
336
+ description:
337
+ "Open the project's Settings, optionally on a named section (overview, contexts, head, " +
338
+ "locales, cssVars, definitions, dependencies, extensions, deploy, rawJson, or a section " +
339
+ "an extension contributes) and optionally at a named entry within it.",
340
+ name: "open_settings",
341
+ },
342
+ run: async (_commandCtx, args) => {
343
+ const section = optionalStringArg("settings.open", args, "section");
344
+ const entry = optionalStringArg("settings.open", args, "entry");
345
+ await openProjectSettings(section);
346
+ if (section === undefined) {
347
+ if (entry !== undefined) {
348
+ throw new RangeError(
349
+ 'command "settings.open" argument "entry" needs a "section" to name an entry of',
350
+ );
351
+ }
352
+ return;
353
+ }
354
+ const keys = settingsSectionKeys();
355
+ if (!keys.includes(section)) {
356
+ throw new RangeError(
357
+ `command "settings.open" argument "section": "${section}" is not a registered ` +
358
+ `settings section — registered: ${keys.join(", ")}`,
359
+ );
360
+ }
361
+ if (entry === undefined) {
362
+ return;
363
+ }
364
+ const entries = selectContributedEntry(section, entry);
365
+ if (entries !== null) {
366
+ throw new RangeError(
367
+ `command "settings.open" argument "entry": "${entry}" is not an entry of settings ` +
368
+ `section "${section}" — entries: ${entries.join(", ") || "none"}`,
369
+ );
370
+ }
371
+ notifySettingsDocument();
372
+ },
373
+ title: "Open Settings",
374
+ },
375
+ ];
376
+ }
377
+
378
+ /**
379
+ * Register the settings verb.
380
+ *
381
+ * @param {CommandRegistry} registry
382
+ */
383
+ export function registerSettingsCommands(registry: CommandRegistry): void {
384
+ registry.registerAll(settingsCommands());
385
+ }