@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,151 @@
1
+ /* Jx Studio — design tokens and global base.
2
+ MUST load first: every other styles/*.css file resolves var(--bg),
3
+ var(--fg), var(--accent), var(--font-mono), var(--radius) and the
4
+ --canvas-* ramp declared here.
5
+
6
+ Owns: the vendored @font-face declarations, the box-sizing reset,
7
+ html/body, the :root panel-width variables and the sp-theme semantic
8
+ token layer. */
9
+
10
+ /* Jx brand mono font, vendored in ./fonts (SIL OFL 1.1, see fonts/OFL.txt).
11
+ Latin subset only; the stack falls back to SF Mono / Fira Code for
12
+ other scripts. Monaco remeasures after load (src/services/monaco-setup.ts). */
13
+ @font-face {
14
+ font-family: "JetBrains Mono";
15
+ font-style: normal;
16
+ font-weight: 400;
17
+ font-display: swap;
18
+ src: url("../fonts/jetbrains-mono-400.woff2") format("woff2");
19
+ }
20
+ @font-face {
21
+ font-family: "JetBrains Mono";
22
+ font-style: normal;
23
+ font-weight: 500;
24
+ font-display: swap;
25
+ src: url("../fonts/jetbrains-mono-500.woff2") format("woff2");
26
+ }
27
+ @font-face {
28
+ font-family: "JetBrains Mono";
29
+ font-style: normal;
30
+ font-weight: 700;
31
+ font-display: swap;
32
+ src: url("../fonts/jetbrains-mono-700.woff2") format("woff2");
33
+ }
34
+ *,
35
+ *::before,
36
+ *::after {
37
+ box-sizing: border-box;
38
+ margin: 0;
39
+ }
40
+ sp-tab:not(:first-of-type) {
41
+ margin-inline-start: var(--mod-tabs-item-horizontal-spacing, 8px);
42
+ }
43
+ html,
44
+ body {
45
+ height: 100%;
46
+ overflow: hidden;
47
+ /* html/body sit outside <sp-theme>, so the --spectrum-* tokens are not
48
+ in scope here; the hex fallback is the intentional pre-theme backdrop
49
+ shown behind the app before sp-theme fills the viewport. */
50
+ background: var(--spectrum-background-layer-1-color, #111111);
51
+ }
52
+ /* Panel layout widths. These must live on :root (the <html> element),
53
+ not on sp-theme or #app, because the resize logic in
54
+ src/ui/panel-resize.ts reads and writes them as inline styles on
55
+ document.documentElement. A definition on any closer ancestor of #app
56
+ (sp-theme or body) would shadow that inline override and freeze the
57
+ sidebars. The #app.left/right-collapsed rules override per instance. */
58
+ :root {
59
+ --panel-w-left: 240px;
60
+ --panel-w-right: 280px;
61
+ }
62
+ /* Studio semantic token layer.
63
+ Declared on sp-theme — not :root — so each var(--spectrum-*) reference
64
+ resolves against the tokens sp-theme exposes via its :host rules. At
65
+ :root (the <html> ancestor of sp-theme) every --spectrum-* is undefined,
66
+ so these would silently collapse to the hex fallback and the app would
67
+ never respond to the Spectrum theme. All studio chrome, including the
68
+ #layer-* overlay hosts, lives inside <sp-theme>. */
69
+ sp-theme {
70
+ display: block;
71
+ height: 100%;
72
+ /* Surfaces. The hex fallbacks mirror the Jx brand ramp installed by
73
+ the 'app' theme fragment (src/ui/jx-theme.ts). */
74
+ --bg: var(--spectrum-background-layer-1-color, #111111);
75
+ --bg-panel: var(--spectrum-background-layer-2-color, #1a1a1a);
76
+ --bg-input: var(--spectrum-gray-100, #1a1a1a);
77
+ --border: var(--spectrum-gray-200, #222222);
78
+ /* Text */
79
+ --fg: var(--spectrum-neutral-content-color-default, #e4e4e7);
80
+ --fg-dim: var(--spectrum-gray-600, #a1a1aa);
81
+ /* Accent and status. Under the brand ramp (src/ui/jx-theme.ts),
82
+ accent-color-700 is the exact Jx brand blue and 900 is the soft
83
+ on-dark tint. */
84
+ --accent: var(--spectrum-accent-color-700, #3b82f6);
85
+ --accent-fg: var(--spectrum-white, #ffffff);
86
+ --danger: var(--spectrum-negative-color-900, #f44747);
87
+ --success: var(--spectrum-positive-color-900, #89d185);
88
+ --tag: var(--spectrum-informative-color-900, #93c5fd);
89
+ --signal: var(--spectrum-notice-color-900, #dcdcaa);
90
+ --handler: var(--spectrum-purple-900, #c586c0);
91
+ --warning: var(--spectrum-orange-900, #c5a332);
92
+ --map: var(--spectrum-indigo-900, #5b4fc7);
93
+ --slot-c: var(--spectrum-seafoam-900, #1a8a7a);
94
+ --switch-c: var(--danger);
95
+ --case-c: var(--spectrum-informative-color-800, #60a5fa);
96
+ /* Corner radius */
97
+ --radius: var(--spectrum-corner-radius-100, 3px);
98
+ /* Monospace stack for code/source chrome. JetBrains Mono is the Jx
99
+ brand mono (vendored in ./fonts); SF Mono / Fira Code remain as
100
+ system fallbacks ahead of the Spectrum stack (Source Code Pro /
101
+ Monaco). The brand fragment sets the same order on
102
+ --spectrum-code-font-family-stack for SWC components. */
103
+ --font-mono:
104
+ "JetBrains Mono", "SF Mono", "Fira Code", var(--spectrum-code-font-family-stack, monospace);
105
+ /* Hover wash and accent tints */
106
+ --hover-bg: rgba(255, 255, 255, 0.04);
107
+ --accent-8: color-mix(in srgb, var(--accent) 8%, transparent);
108
+ --accent-10: color-mix(in srgb, var(--accent) 10%, transparent);
109
+ --accent-15: color-mix(in srgb, var(--accent) 15%, transparent);
110
+ --accent-20: color-mix(in srgb, var(--accent) 20%, transparent);
111
+ --accent-50: color-mix(in srgb, var(--accent) 50%, transparent);
112
+ /* Light canvas palette (stylebook, block/element previews, content
113
+ mode). These surfaces always render as a light "document" regardless
114
+ of the app chrome, so the ramp is derived from the theme-independent
115
+ Spectrum white/black tokens via color-mix rather than hard-coded hex.
116
+ The percentage is the black (foreground) or white (background) blend
117
+ of each step; this keeps the canvas light even in the dark chrome
118
+ while still being Spectrum-sourced. */
119
+ --canvas-fg: color-mix(in srgb, var(--spectrum-black, #000) 90%, var(--spectrum-white, #fff));
120
+ --canvas-fg-2: color-mix(in srgb, var(--spectrum-black, #000) 80%, var(--spectrum-white, #fff));
121
+ --canvas-fg-3: color-mix(in srgb, var(--spectrum-black, #000) 67%, var(--spectrum-white, #fff));
122
+ --canvas-dim: color-mix(in srgb, var(--spectrum-black, #000) 47%, var(--spectrum-white, #fff));
123
+ --canvas-muted: color-mix(in srgb, var(--spectrum-black, #000) 40%, var(--spectrum-white, #fff));
124
+ --canvas-light: color-mix(in srgb, var(--spectrum-black, #000) 27%, var(--spectrum-white, #fff));
125
+ --canvas-border: color-mix(in srgb, var(--spectrum-black, #000) 13%, var(--spectrum-white, #fff));
126
+ --canvas-rule: color-mix(in srgb, var(--spectrum-black, #000) 7%, var(--spectrum-white, #fff));
127
+ --canvas-bg-1: color-mix(in srgb, var(--spectrum-white, #fff) 96%, var(--spectrum-black, #000));
128
+ --canvas-bg-2: color-mix(in srgb, var(--spectrum-white, #fff) 94%, var(--spectrum-black, #000));
129
+ --canvas-track: color-mix(in srgb, var(--spectrum-white, #fff) 88%, var(--spectrum-black, #000));
130
+ /* Data explorer syntax colors (mapped to nearest Spectrum hues) */
131
+ --data-key: var(--spectrum-blue-700, #3b82f6);
132
+ --data-string: var(--spectrum-orange-700, #ce9178);
133
+ --data-number: var(--spectrum-celery-700, #b5cea8);
134
+ --data-boolean: var(--tag);
135
+ /* Typography — align the chrome with the Spectrum sans stack used by
136
+ the SWC components; 12px maps exactly to font-size-75. line-height
137
+ stays 1.5 (a deliberate reading height; the Spectrum body token is
138
+ 1.3, which would tighten the whole UI). */
139
+ color: var(--fg);
140
+ background: var(--bg);
141
+ font-family: var(
142
+ --spectrum-sans-font-family-stack,
143
+ -apple-system,
144
+ BlinkMacSystemFont,
145
+ "Segoe UI",
146
+ system-ui,
147
+ sans-serif
148
+ );
149
+ font-size: var(--spectrum-font-size-75, 12px);
150
+ line-height: 1.5;
151
+ }
@@ -1,22 +0,0 @@
1
- import {
2
- LONGPRESS_INSTRUCTIONS,
3
- Overlay
4
- } from "./studio-5x6tqqec.js";
5
- import"./studio-ahnzd9rg.js";
6
- import"./studio-9bjwf0d4.js";
7
- import"./studio-z6nw2ek2.js";
8
- import"./studio-8q517dfr.js";
9
- import"./studio-9qr6fq7p.js";
10
- import"./studio-cx91mnh8.js";
11
- import"./studio-xq0t7n5t.js";
12
- import"./studio-nqw433kv.js";
13
- import"./studio-4k0m4fmp.js";
14
- import"./studio-5x5774ak.js";
15
- import"./studio-md4gps17.js";
16
- export {
17
- Overlay,
18
- LONGPRESS_INSTRUCTIONS
19
- };
20
-
21
- //# debugId=65A7EC2EC619393664756E2164756E21
22
- //# sourceMappingURL=Overlay.dev-cszx7yn5.js.map
@@ -1,531 +0,0 @@
1
- import {
2
- renderForm,
3
- resolveContextPointer
4
- } from "./studio-yfcstdzy.js";
5
- import {
6
- registerSettingsSection,
7
- unregisterSettingsSection
8
- } from "./studio-m2t4mdg5.js";
9
- import {
10
- dataSurfaceAvailable,
11
- deriveSecretEnvName,
12
- openGridSourcePicker,
13
- pushSchema,
14
- testConnection
15
- } from "./studio-4d8hzcz5.js";
16
- import"./studio-v7jkjqng.js";
17
- import"./studio-esrewxap.js";
18
- import"./studio-cx91mnh8.js";
19
- import"./studio-nqw433kv.js";
20
- import"./studio-zp7jncs8.js";
21
- import {
22
- openModal
23
- } from "./studio-0xgs7xrs.js";
24
- import {
25
- projectState
26
- } from "./studio-sjh1wt1a.js";
27
- import"./studio-4k0m4fmp.js";
28
- import {
29
- html,
30
- nothing,
31
- render
32
- } from "./studio-5x5774ak.js";
33
- import {
34
- getFormats,
35
- loadExtensions,
36
- loadFormats
37
- } from "./studio-gs6kqdt1.js";
38
- import {
39
- getPlatform
40
- } from "./studio-9smfzqhc.js";
41
- import"./studio-5ehhackm.js";
42
- import"./studio-kr88ryr7.js";
43
- import"./studio-md4gps17.js";
44
-
45
- // src/settings/contributed-section.ts
46
- var selectedEntries = new Map;
47
- var newEntryOpen = new Set;
48
- var newEntryNames = new Map;
49
- async function saveProjectConfig() {
50
- const platform = getPlatform();
51
- const config = projectState.projectConfig;
52
- await platform.writeFile("project.json", JSON.stringify(config, null, "\t"));
53
- }
54
- function applyPatch(target, patch) {
55
- for (const [key, value] of Object.entries(patch)) {
56
- if (value === undefined) {
57
- delete target[key];
58
- } else {
59
- target[key] = value;
60
- }
61
- }
62
- }
63
- function slugify(name) {
64
- return name.toLowerCase().replaceAll(/\s+/g, "-").replaceAll(/[^a-z0-9-]/g, "");
65
- }
66
- function instantiateNewEntry(template, key) {
67
- if (!template) {
68
- return {};
69
- }
70
- const substitute = (value) => {
71
- if (typeof value === "string") {
72
- return value.replaceAll("${key}", key);
73
- }
74
- if (Array.isArray(value)) {
75
- return value.map((item) => substitute(item));
76
- }
77
- if (value && typeof value === "object") {
78
- const out = {};
79
- for (const [k, v] of Object.entries(value)) {
80
- out[k] = substitute(v);
81
- }
82
- return out;
83
- }
84
- return value;
85
- };
86
- return substitute(template);
87
- }
88
- function buildContext(sectionKey, opts, entryKey = null) {
89
- const platform = getPlatform();
90
- return {
91
- fieldKeyPrefix: `$settings.${sectionKey}`,
92
- resolvePointer: (pointer, scope) => resolveContextPointer(pointer, {
93
- projectConfig: projectState?.projectConfig ?? {},
94
- ...scope !== undefined && { scope },
95
- ...opts.formats !== undefined && { formats: opts.formats }
96
- }),
97
- ...typeof platform.setSecrets === "function" ? {
98
- commitSecret: async (key, value) => {
99
- const envName = deriveSecretEnvName(sectionKey, entryKey, key);
100
- await platform.setSecrets({ set: { [envName]: value } });
101
- return envName;
102
- }
103
- } : {}
104
- };
105
- }
106
- function sectionValue(key) {
107
- const config = projectState?.projectConfig;
108
- if (!config) {
109
- return null;
110
- }
111
- const existing = config[key];
112
- if (existing && typeof existing === "object" && !Array.isArray(existing)) {
113
- return existing;
114
- }
115
- const fresh = {};
116
- config[key] = fresh;
117
- return fresh;
118
- }
119
- function renderContributedSection(container, contribution, opts = {}) {
120
- const rerender = () => renderContributedSection(container, contribution, opts);
121
- const title = contribution.title ?? contribution.key;
122
- const layout = contribution.settings.layout ?? "form";
123
- const body = layout === "map" ? renderMapLayout(contribution, opts, rerender) : renderFormLayout(contribution, opts, rerender);
124
- const selected = layout === "map" ? selectedEntries.get(contribution.key) ?? null : null;
125
- const actions = opts.actions ? opts.actions({ rerender, sectionKey: contribution.key, selected }) : nothing;
126
- const tpl = html`
127
- <div class="settings-section contributed-section">
128
- <h3 class="settings-section-title">${title}</h3>
129
- ${actions}${body}
130
- </div>
131
- `;
132
- render(tpl, container);
133
- }
134
- function renderFormLayout(contribution, opts, rerender) {
135
- const value = sectionValue(contribution.key) ?? {};
136
- const ui = contribution.settings.entry?.ui;
137
- return html`
138
- <div class="settings-form-panel">
139
- ${renderForm(contribution.entrySchema, value, {
140
- context: buildContext(contribution.key, opts, null),
141
- onChange: (patch) => {
142
- const target = sectionValue(contribution.key);
143
- if (!target) {
144
- return;
145
- }
146
- applyPatch(target, patch);
147
- rerender();
148
- saveProjectConfig();
149
- },
150
- rerender,
151
- ...ui !== undefined && { ui }
152
- })}
153
- </div>
154
- `;
155
- }
156
- function renderMapLayout(contribution, opts, rerender) {
157
- const { key: sectionKey } = contribution;
158
- const entries = sectionValue(sectionKey) ?? {};
159
- const entryKeys = Object.keys(entries);
160
- const selected = selectedEntries.get(sectionKey) ?? null;
161
- const ui = contribution.settings.entry?.ui;
162
- const handleCreate = () => {
163
- const slug = slugify(newEntryNames.get(sectionKey) ?? "");
164
- const target = sectionValue(sectionKey);
165
- if (!slug || !target || target[slug]) {
166
- return;
167
- }
168
- target[slug] = instantiateNewEntry(contribution.settings.entry?.newEntry, slug);
169
- selectedEntries.set(sectionKey, slug);
170
- newEntryOpen.delete(sectionKey);
171
- newEntryNames.delete(sectionKey);
172
- rerender();
173
- saveProjectConfig();
174
- };
175
- const handleDelete = () => {
176
- const target = sectionValue(sectionKey);
177
- if (!selected || !target?.[selected]) {
178
- return;
179
- }
180
- delete target[selected];
181
- selectedEntries.set(sectionKey, null);
182
- rerender();
183
- saveProjectConfig();
184
- };
185
- const handleRename = (newName) => {
186
- const target = sectionValue(sectionKey);
187
- const slug = slugify(newName);
188
- if (!selected || !target || !slug || slug === selected || target[slug]) {
189
- return;
190
- }
191
- const next = {};
192
- for (const [k, v] of Object.entries(target)) {
193
- next[k === selected ? slug : k] = v;
194
- delete target[k];
195
- }
196
- Object.assign(target, next);
197
- selectedEntries.set(sectionKey, slug);
198
- rerender();
199
- saveProjectConfig();
200
- };
201
- const listTpl = html`
202
- <div class="settings-list-panel">
203
- ${entryKeys.map((name) => html`
204
- <sp-action-button
205
- size="s"
206
- ?selected=${selected === name}
207
- @click=${() => {
208
- selectedEntries.set(sectionKey, name);
209
- rerender();
210
- }}
211
- >
212
- ${name}
213
- </sp-action-button>
214
- `)}
215
- ${newEntryOpen.has(sectionKey) ? html`
216
- <div class="settings-inline-form">
217
- <sp-textfield
218
- size="s"
219
- placeholder="entry-name"
220
- .value=${newEntryNames.get(sectionKey) ?? ""}
221
- @input=${(e) => {
222
- newEntryNames.set(sectionKey, e.target.value);
223
- }}
224
- @keydown=${(e) => {
225
- if (e.key === "Enter") {
226
- handleCreate();
227
- }
228
- if (e.key === "Escape") {
229
- newEntryOpen.delete(sectionKey);
230
- rerender();
231
- }
232
- }}
233
- ></sp-textfield>
234
- <sp-action-button size="s" @click=${handleCreate}>Create</sp-action-button>
235
- </div>
236
- ` : html`
237
- <sp-action-button
238
- size="s"
239
- quiet
240
- @click=${() => {
241
- newEntryOpen.add(sectionKey);
242
- rerender();
243
- }}
244
- >
245
- <sp-icon-add slot="icon"></sp-icon-add> New Entry
246
- </sp-action-button>
247
- `}
248
- </div>
249
- `;
250
- const selectedEntry = selected ? entries[selected] : undefined;
251
- const editorTpl = selected && selectedEntry && typeof selectedEntry === "object" ? html`
252
- <div class="settings-editor-panel">
253
- <div class="settings-editor-header">
254
- <sp-textfield
255
- size="s"
256
- quiet
257
- class="entry-name-input"
258
- value=${selected}
259
- @change=${(e) => {
260
- const target = e.target;
261
- handleRename(target.value.trim());
262
- target.value = selectedEntries.get(sectionKey) ?? selected;
263
- }}
264
- @keydown=${(e) => {
265
- const target = e.target;
266
- if (e.key === "Enter") {
267
- target.blur();
268
- }
269
- if (e.key === "Escape") {
270
- target.value = selected;
271
- target.blur();
272
- }
273
- }}
274
- ></sp-textfield>
275
- <sp-action-button size="xs" quiet title="Delete entry" @click=${handleDelete}>
276
- <sp-icon-delete slot="icon"></sp-icon-delete>
277
- </sp-action-button>
278
- </div>
279
- ${renderForm(contribution.entrySchema, selectedEntry, {
280
- context: buildContext(sectionKey, opts, selected),
281
- onChange: (patch) => {
282
- applyPatch(selectedEntry, patch);
283
- rerender();
284
- saveProjectConfig();
285
- },
286
- rerender,
287
- ...ui !== undefined && { ui }
288
- })}
289
- </div>
290
- ` : html`<div class="settings-empty-state">Select or create an entry</div>`;
291
- return html` <div class="settings-two-col">${listTpl} ${editorTpl}</div> `;
292
- }
293
-
294
- // src/panels/data-grid.ts
295
- var pushDialog = null;
296
- function closePushDialog() {
297
- pushDialog?.handle.close();
298
- pushDialog = null;
299
- }
300
- async function startPush(connection, onDone) {
301
- if (pushDialog) {
302
- return;
303
- }
304
- const handle = openModal(html``);
305
- pushDialog = { connection, handle, onDone, phase: "loading", plan: null, result: null };
306
- renderPushDialog();
307
- const plan = await pushSchema({
308
- dryRun: true,
309
- ...connection === undefined ? {} : { connection }
310
- });
311
- if (!pushDialog) {
312
- return;
313
- }
314
- pushDialog.plan = plan;
315
- pushDialog.phase = "confirm";
316
- renderPushDialog();
317
- }
318
- async function applyPush() {
319
- if (!pushDialog) {
320
- return;
321
- }
322
- pushDialog.phase = "applying";
323
- renderPushDialog();
324
- const result = await pushSchema(pushDialog.connection === undefined ? {} : { connection: pushDialog.connection });
325
- if (!pushDialog) {
326
- return;
327
- }
328
- pushDialog.result = result;
329
- pushDialog.phase = "done";
330
- renderPushDialog();
331
- pushDialog.onDone();
332
- }
333
- function pushDialogBody(state) {
334
- if (state.phase === "loading" || state.phase === "applying") {
335
- return html`<div class="push-dialog-status">
336
- ${state.phase === "loading" ? "Compiling plan…" : "Applying…"}
337
- </div>`;
338
- }
339
- const shown = state.phase === "done" ? state.result : state.plan;
340
- const steps = shown?.plan ?? [];
341
- const warnings = shown?.warnings ?? [];
342
- const errors = shown?.errors ?? [];
343
- return html`
344
- <div class="push-dialog-plan">
345
- ${state.phase === "done" ? html`<div class="push-dialog-status">
346
- ${shown?.applied ? "Schema applied." : "Push failed."}
347
- </div>` : steps.length === 0 && errors.length === 0 ? html`<div class="push-dialog-status">
348
- Nothing to push — the schema is up to date.
349
- </div>` : nothing}
350
- <ul class="push-dialog-steps">
351
- ${steps.map((step) => html`<li class="push-step push-step-${step.kind}">${step.summary}</li>`)}
352
- </ul>
353
- ${warnings.map((w) => html`<div class="push-dialog-warning">${w}</div>`)}
354
- ${errors.map((e) => html`<div class="push-dialog-error">${e}</div>`)}
355
- </div>
356
- `;
357
- }
358
- function renderPushDialog() {
359
- if (!pushDialog) {
360
- return;
361
- }
362
- const state = pushDialog;
363
- const confirmable = state.phase === "confirm" && (state.plan?.plan.length ?? 0) > 0;
364
- const tpl = html`
365
- <sp-underlay open @close=${closePushDialog}></sp-underlay>
366
- <div class="settings-modal push-dialog">
367
- <div class="settings-modal-header">
368
- <h2 class="settings-modal-title">
369
- Push Schema${state.connection ? html` — ${state.connection}` : nothing}
370
- </h2>
371
- </div>
372
- <div class="settings-modal-body">${pushDialogBody(state)}</div>
373
- <div class="push-dialog-actions">
374
- <sp-action-button size="s" class="push-cancel" @click=${closePushDialog}>
375
- ${state.phase === "done" ? "Close" : "Cancel"}
376
- </sp-action-button>
377
- ${confirmable ? html`<sp-action-button
378
- size="s"
379
- emphasized
380
- class="push-apply"
381
- @click=${() => void applyPush()}
382
- >Apply</sp-action-button
383
- >` : nothing}
384
- </div>
385
- </div>
386
- `;
387
- state.handle.update(tpl);
388
- }
389
- var actionsState = { pushing: false, testResult: null, testing: null };
390
- function dataSectionActions(sectionKey) {
391
- if (sectionKey !== "connections" && sectionKey !== "data" || !dataSurfaceAvailable()) {
392
- return null;
393
- }
394
- return (ctx) => renderSectionActions(sectionKey, ctx);
395
- }
396
- async function runTest(connection, rerender) {
397
- actionsState.testing = connection;
398
- actionsState.testResult = null;
399
- rerender();
400
- const result = await testConnection(connection);
401
- actionsState.testing = null;
402
- actionsState.testResult = { ...result, connection };
403
- rerender();
404
- }
405
- function renderSectionActions(sectionKey, ctx) {
406
- const { selected, rerender } = ctx;
407
- const { testResult } = actionsState;
408
- const pushTarget = sectionKey === "connections" && selected ? selected : undefined;
409
- return html`
410
- <div class="data-section-actions">
411
- ${sectionKey === "connections" ? html`<sp-action-button
412
- size="s"
413
- class="data-action-test"
414
- ?disabled=${!selected || actionsState.testing !== null}
415
- @click=${() => {
416
- if (selected) {
417
- runTest(selected, rerender);
418
- }
419
- }}
420
- >
421
- ${actionsState.testing ? "Testing…" : "Test Connection"}
422
- </sp-action-button>` : nothing}
423
- <sp-action-button
424
- size="s"
425
- class="data-action-push"
426
- @click=${() => void startPush(pushTarget, rerender)}
427
- >
428
- Push Schema
429
- </sp-action-button>
430
- <sp-action-button
431
- size="s"
432
- class="data-action-grid"
433
- @click=${() => void openGridSourcePicker()}
434
- >
435
- Open Data Grid
436
- </sp-action-button>
437
- ${testResult ? html`<span
438
- class="data-test-result ${testResult.ok ? "ok" : "failed"}"
439
- title=${testResult.error ?? ""}
440
- >
441
- ${testResult.connection}:
442
- ${testResult.ok ? "connected" : testResult.error ?? "failed"}
443
- </span>` : nothing}
444
- </div>
445
- `;
446
- }
447
-
448
- // src/settings/extension-sections.ts
449
- var DEFAULT_SECTION_ORDER = 100;
450
- function deriveSettingsSection(info) {
451
- const studio = info.studio;
452
- const settings = studio?.settings;
453
- if (!settings) {
454
- return null;
455
- }
456
- const { key } = info.project;
457
- const layout = settings.layout ?? "form";
458
- const sectionSchema = info.entrySchema ?? {};
459
- const entrySchema = layout === "map" ? typeof sectionSchema.additionalProperties === "object" ? sectionSchema.additionalProperties : {} : sectionSchema;
460
- const label = settings.label ?? info.project.title ?? key;
461
- return {
462
- contribution: {
463
- entrySchema,
464
- key,
465
- settings: {
466
- ...settings.entry === undefined ? {} : { entry: settings.entry },
467
- ...settings.layout === undefined ? {} : { layout: settings.layout }
468
- },
469
- title: label
470
- },
471
- icon: settings.icon,
472
- key,
473
- label,
474
- order: settings.order ?? DEFAULT_SECTION_ORDER
475
- };
476
- }
477
- var registeredKeys = new Set;
478
- async function syncExtensionSettingsSections() {
479
- const [extensions] = await Promise.all([loadExtensions(), loadFormats()]);
480
- const next = new Set;
481
- for (const ext of extensions) {
482
- for (const info of ext.contributions) {
483
- const derived = deriveSettingsSection(info);
484
- if (!derived) {
485
- continue;
486
- }
487
- const { contribution } = derived;
488
- registerSettingsSection({
489
- icon: derived.icon,
490
- key: derived.key,
491
- label: derived.label,
492
- order: derived.order,
493
- render: (container) => {
494
- const actions = dataSectionActions(derived.key);
495
- renderContributedSection(container, contribution, {
496
- formats: getFormats(),
497
- ...actions === null ? {} : { actions }
498
- });
499
- }
500
- });
501
- next.add(derived.key);
502
- }
503
- }
504
- for (const key of registeredKeys) {
505
- if (!next.has(key)) {
506
- unregisterSettingsSection(key);
507
- }
508
- }
509
- registeredKeys.clear();
510
- for (const key of next) {
511
- registeredKeys.add(key);
512
- }
513
- }
514
- function resetExtensionSettingsSections() {
515
- for (const key of registeredKeys) {
516
- unregisterSettingsSection(key);
517
- }
518
- registeredKeys.clear();
519
- }
520
- function extensionSectionKeys() {
521
- return [...registeredKeys];
522
- }
523
- export {
524
- syncExtensionSettingsSections,
525
- resetExtensionSettingsSections,
526
- extensionSectionKeys,
527
- deriveSettingsSection
528
- };
529
-
530
- //# debugId=B810C054A80BCC0264756E2164756E21
531
- //# sourceMappingURL=extension-sections-qr3drkkw.js.map