@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
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/github/github-auth.ts", "../src/github/github-publish.ts", "../src/panels/git-panel.ts"],
4
- "sourcesContent": [
5
- "/// <reference lib=\"dom\" />\n/**\n * GitHub OAuth Device Flow authentication for Jx Studio.\n *\n * Uses the Device Flow so the user authenticates in their browser without needing a server-side\n * redirect endpoint.\n */\n\nimport { html } from \"lit-html\";\nimport { showDialog } from \"../ui/layers\";\n\nconst CLIENT_ID = \"Ov23liYVlMFpgjOEPXJH\";\nconst STORAGE_KEY = \"jx_github_token\";\n\ninterface DeviceCodeResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n interval?: number;\n}\n\ninterface TokenResponse {\n access_token?: string;\n error?: string;\n}\n\nexport function getGithubToken() {\n return localStorage.getItem(STORAGE_KEY);\n}\n\nexport function clearGithubToken() {\n localStorage.removeItem(STORAGE_KEY);\n}\n\n/**\n * Authenticate with GitHub via the Device Flow. Shows a dialog with the user code and polls until\n * the user completes authorization or cancels.\n *\n * @returns {Promise<string | null>} The access token, or null if cancelled.\n */\nexport async function authenticateGithub() {\n const existing = getGithubToken();\n if (existing) {\n return existing;\n }\n\n const codeRes = await fetch(\"https://github.com/login/device/code\", {\n body: JSON.stringify({ client_id: CLIENT_ID, scope: \"repo\" }),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n });\n\n if (!codeRes.ok) {\n throw new Error(\"Failed to initiate GitHub device flow\");\n }\n const codeData = (await codeRes.json()) as DeviceCodeResponse;\n\n const { device_code, user_code, verification_uri, interval = 5 } = codeData;\n\n return showDialog((done) => {\n let cancelled = false;\n let pollTimer: ReturnType<typeof setTimeout> | null = null;\n\n const poll = async () => {\n if (cancelled) {\n return;\n }\n try {\n const tokenRes = await fetch(\"https://github.com/login/oauth/access_token\", {\n body: JSON.stringify({\n client_id: CLIENT_ID,\n device_code,\n grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n }),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n });\n const tokenData = (await tokenRes.json()) as TokenResponse;\n\n if (tokenData.access_token) {\n localStorage.setItem(STORAGE_KEY, tokenData.access_token);\n done(tokenData.access_token);\n return;\n }\n\n if (tokenData.error === \"authorization_pending\") {\n pollTimer = setTimeout(poll, interval * 1000);\n return;\n }\n\n if (tokenData.error === \"slow_down\") {\n pollTimer = setTimeout(poll, (interval + 5) * 1000);\n return;\n }\n\n // Expired_token or access_denied\n done(null);\n } catch {\n pollTimer = setTimeout(poll, interval * 1000);\n }\n };\n\n pollTimer = setTimeout(poll, interval * 1000);\n\n return html`\n <sp-dialog-wrapper\n open\n headline=\"Sign in to GitHub\"\n cancel-label=\"Cancel\"\n @cancel=${() => {\n cancelled = true;\n if (pollTimer) {\n clearTimeout(pollTimer);\n }\n done(null);\n }}\n @close=${() => {\n cancelled = true;\n if (pollTimer) {\n clearTimeout(pollTimer);\n }\n done(null);\n }}\n >\n <div class=\"github-auth-dialog\">\n <p>Enter this code on GitHub to authorize Jx Studio:</p>\n <div class=\"github-auth-code\">${user_code}</div>\n <p>\n <a href=\"${verification_uri}\" target=\"_blank\" rel=\"noopener\"\n >Open ${verification_uri}</a\n >\n </p>\n <p class=\"github-auth-waiting\">Waiting for authorization…</p>\n </div>\n </sp-dialog-wrapper>\n `;\n });\n}\n",
6
- "/// <reference lib=\"dom\" />\n/** Publish a local project to GitHub — creates a new repo and pushes. */\n\nimport { html } from \"lit-html\";\nimport { errorMessage } from \"@jxsuite/schema/parse\";\nimport { ref } from \"lit-html/directives/ref.js\";\nimport { showDialog } from \"../ui/layers\";\nimport { authenticateGithub } from \"./github-auth\";\nimport { getPlatform } from \"../platform\";\nimport { statusMessage } from \"../panels/statusbar\";\n\ninterface GithubErrorResponse {\n errors?: { message?: string }[];\n message?: string;\n}\n\ninterface GithubRepoResponse {\n clone_url: string;\n html_url: string;\n}\n\n/**\n * Full \"Publish to GitHub\" flow: 1. Authenticate (or reuse stored token) 2. Prompt for repo name /\n * visibility 3. Create the repo via GitHub API 4. Add remote + push\n *\n * @param {{ projectName: string }} opts\n * @returns {Promise<boolean>} True if published successfully\n */\nexport async function publishToGithub({ projectName }: { projectName: string }) {\n const token = await authenticateGithub();\n if (!token) {\n return false;\n }\n\n const repoOpts = await showDialog<{\n name: string;\n description: string;\n isPrivate: boolean;\n } | null>((done) => {\n let _nameInput: HTMLInputElement | null = null;\n let _descInput: HTMLInputElement | null = null;\n let _privateToggle: HTMLInputElement | null = null;\n\n return html`\n <sp-dialog-wrapper\n open\n headline=\"Publish to GitHub\"\n confirm-label=\"Create Repository\"\n cancel-label=\"Cancel\"\n @confirm=${() => {\n done({\n description: _descInput?.value || \"\",\n isPrivate: _privateToggle?.checked ?? true,\n name: _nameInput?.value || projectName,\n });\n }}\n @cancel=${() => done(null)}\n @close=${() => done(null)}\n >\n <div class=\"github-publish-dialog\">\n <sp-field-label for=\"repo-name\">Repository name</sp-field-label>\n <sp-textfield\n id=\"repo-name\"\n name=\"repo-name\"\n value=\"${projectName}\"\n placeholder=\"my-project\"\n ${ref((el) => {\n _nameInput = (el as HTMLInputElement | null) || null;\n })}\n ></sp-textfield>\n\n <sp-field-label for=\"repo-desc\">Description (optional)</sp-field-label>\n <sp-textfield\n id=\"repo-desc\"\n name=\"repo-desc\"\n placeholder=\"A brief description\"\n ${ref((el) => {\n _descInput = (el as HTMLInputElement | null) || null;\n })}\n ></sp-textfield>\n\n <sp-field-label>Visibility</sp-field-label>\n <sp-switch\n name=\"repo-private\"\n checked\n ${ref((el) => {\n _privateToggle = (el as HTMLInputElement | null) || null;\n })}\n >Private repository</sp-switch\n >\n </div>\n </sp-dialog-wrapper>\n `;\n });\n\n if (!repoOpts) {\n return false;\n }\n\n statusMessage(\"Creating GitHub repository…\");\n\n const createRes = await fetch(\"https://api.github.com/user/repos\", {\n body: JSON.stringify({\n auto_init: false,\n description: repoOpts.description,\n name: repoOpts.name,\n private: repoOpts.isPrivate,\n }),\n headers: {\n Accept: \"application/vnd.github+json\",\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n },\n method: \"POST\",\n });\n\n if (!createRes.ok) {\n const err = (await createRes.json()) as GithubErrorResponse;\n const msg = err.errors?.[0]?.message || err.message || \"Failed to create repository\";\n statusMessage(`Error: ${msg}`);\n return false;\n }\n\n const repo = (await createRes.json()) as GithubRepoResponse;\n const platform = getPlatform();\n\n statusMessage(\"Setting remote and pushing…\");\n\n await platform.gitAddRemote(\"origin\", repo.clone_url);\n\n statusMessage(\"Pushing to GitHub…\");\n try {\n await platform.gitPush({ setUpstream: true });\n } catch (error) {\n statusMessage(`Push failed: ${errorMessage(error)}`);\n return false;\n }\n\n // Lazy import breaks the github-publish ↔ git-panel module cycle\n const { refreshGitStatus } = await import(\"../panels/git-panel\");\n await refreshGitStatus();\n statusMessage(`Published to GitHub: ${repo.html_url}`);\n return true;\n}\n",
7
- "/// <reference lib=\"dom\" />\n/**\n * Git panel — Source control sidebar with sync status, branch selector, Local Changes / History\n * tabs, commit form, and changed-components view.\n */\n\nimport { html, nothing } from \"lit-html\";\nimport { errorMessage } from \"@jxsuite/schema/parse\";\nimport { flushAllCollab } from \"../collab/collab-session\";\nimport type {\n GitBranchesResult,\n GitDiffState,\n GitFileStatus,\n GitStatusResult,\n StudioPlatform,\n} from \"../types\";\nimport { live } from \"lit-html/directives/live.js\";\nimport { repeat } from \"lit-html/directives/repeat.js\";\nimport { getPlatform } from \"../platform\";\nimport { formatForPath } from \"../format/format-host\";\nimport { projectState, renderOnly, updateUi } from \"../store\";\nimport { activeTab } from \"../workspace/workspace\";\nimport { view } from \"../view\";\nimport { showConfirmDialog, showPromptDialog } from \"../ui/layers\";\nimport { statusMessage } from \"./statusbar\";\nimport { publishToGithub } from \"../github/github-publish\";\nimport { pullWithPackageSync } from \"../packages/pull-package-sync\";\n\ninterface GitLogEntry {\n hash: string;\n message: string;\n author: string;\n date: string;\n}\n\ntype GitFileEntry = GitFileStatus;\n\ninterface GitUiState {\n gitStatus?: Partial<GitStatusResult> | null;\n gitBranches?: Partial<GitBranchesResult> | null;\n gitLoading?: boolean;\n gitError?: string | null;\n gitCommitMessage?: string;\n gitLogEntries?: GitLogEntry[] | null;\n}\n\nexport async function refreshGitStatus() {\n if (!projectState) {\n return;\n }\n const plat = getPlatform();\n updateUi(\"gitLoading\", true);\n updateUi(\"gitError\", null);\n try {\n // Settled independently, not Promise.all: outside a work tree `git branch` exits non-zero\n // While `git status` answers cleanly with isRepo:false. Letting the branch lookup reject the\n // Pair discarded that status, so the panel re-rendered its \"no status yet\" branch, refreshed\n // Again, and span — a request per render for as long as the tab stayed open.\n const [status, branches] = await Promise.allSettled([plat.gitStatus(), plat.gitBranches()]);\n if (status.status === \"fulfilled\") {\n updateUi(\"gitStatus\", status.value);\n }\n if (branches.status === \"fulfilled\") {\n updateUi(\"gitBranches\", branches.value);\n }\n // A branch lookup that fails on a repo-less project is expected, not an error worth showing;\n // Anything else (including a failed status) surfaces.\n const failure: unknown =\n status.status === \"rejected\"\n ? status.reason\n : branches.status === \"rejected\" && status.value?.isRepo\n ? branches.reason\n : null;\n if (failure) {\n updateUi(\"gitError\", errorMessage(failure));\n }\n _lastUpdated = new Date();\n } catch (error) {\n updateUi(\"gitError\", errorMessage(error));\n } finally {\n updateUi(\"gitLoading\", false);\n renderOnly(\"leftPanel\");\n }\n}\n\n/**\n * Show a dialog to clone a git repository. Returns the cloned project root on success, or null.\n *\n * @param {{ openRecentProject: (root: string) => Promise<void> }} ctx\n */\nexport async function cloneRepository(ctx: { openRecentProject: (root: string) => Promise<void> }) {\n const platform = getPlatform();\n if (!platform.gitClone) {\n statusMessage(\"Clone not supported on this platform\");\n return;\n }\n\n const url = await showPromptDialog(\"Clone Git Repository\", {\n confirmLabel: \"Clone\",\n message: \"Repository URL\",\n placeholder: \"https://github.com/user/repo.git\",\n validate: (v) => (v.trim() ? \"\" : \"Enter a repository URL.\"),\n });\n\n if (!url) {\n return;\n }\n\n try {\n statusMessage(\"Cloning repository...\");\n const result = await platform.gitClone(url);\n if (result?.root) {\n statusMessage(\"Clone complete\");\n await ctx.openRecentProject(result.root);\n }\n } catch (error) {\n statusMessage(`Clone failed: ${errorMessage(error)}`);\n }\n}\n\n/** @returns {boolean} */\nexport function platformSupportsClone() {\n return Boolean(getPlatform().gitClone);\n}\n\n/**\n * @param {string} action\n * @param {unknown} [body]\n */\nasync function gitAction(action: string, body?: unknown) {\n const plat = getPlatform() as Record<string, (...args: unknown[]) => Promise<unknown>> &\n StudioPlatform;\n updateUi(\"gitLoading\", true);\n updateUi(\"gitError\", null);\n try {\n await plat[action]!(body);\n await refreshGitStatus();\n } catch (error) {\n updateUi(\"gitError\", errorMessage(error));\n updateUi(\"gitLoading\", false);\n renderOnly(\"leftPanel\");\n }\n}\n\n/** Pull via the package-aware orchestrator; same loading/error contract as gitAction. */\nasync function doPull() {\n updateUi(\"gitLoading\", true);\n updateUi(\"gitError\", null);\n try {\n await pullWithPackageSync();\n await refreshGitStatus();\n } catch (error) {\n updateUi(\"gitError\", errorMessage(error));\n updateUi(\"gitLoading\", false);\n renderOnly(\"leftPanel\");\n }\n}\n\nlet _pollTimer = null as ReturnType<typeof setInterval> | null;\nlet _lastUpdated = null as Date | null;\nlet _gitSubTab = \"changes\";\n\nasync function fetchGitLog() {\n const plat = getPlatform();\n try {\n const entries = await plat.gitLog(30);\n updateUi(\"gitLogEntries\", entries);\n renderOnly(\"leftPanel\");\n } catch (error) {\n updateUi(\"gitError\", errorMessage(error));\n renderOnly(\"leftPanel\");\n }\n}\n\n/**\n * @param {{ ui: GitUiState }} S\n * @param {{\n * setCanvasMode?: (mode: string) => void;\n * setGitDiffState?: (state: GitDiffState | null) => void;\n * cloneRepository?: () => void;\n * }} ctx\n */\nexport function renderGitPanel(\n S: { ui: GitUiState },\n ctx: {\n setCanvasMode?: (mode: string) => void;\n setGitDiffState?: (state: GitDiffState | null) => void;\n cloneRepository?: () => void;\n },\n) {\n if (!projectState) {\n return html`<div class=\"git-panel git-panel-empty\">\n <div class=\"git-empty-state\">\n <p>Open a project to use source control.</p>\n ${\n platformSupportsClone()\n ? html`<sp-action-button size=\"m\" @click=${() => ctx.cloneRepository?.()}>\n <sp-icon-download slot=\"icon\"></sp-icon-download>\n Clone Git Repository\n </sp-action-button>`\n : nothing\n }\n </div>\n </div>`;\n }\n const status = S.ui.gitStatus;\n const branches = S.ui.gitBranches;\n const loading = S.ui.gitLoading;\n\n // First paint kicks off the fetch. A refresh that already failed must NOT re-arm it here, or the\n // Render it triggers becomes the next render's reason to fetch again; the Refresh button and the\n // Poll timer are the ways back.\n if (!status && !loading && !S.ui.gitError) {\n void refreshGitStatus();\n return html`<div class=\"git-panel\">\n <div class=\"git-loading\">Loading...</div>\n </div>`;\n }\n\n if (status && !status.isRepo) {\n return html`<div class=\"git-panel git-panel-empty\">\n <div class=\"git-empty-state\">\n <p>This project is not yet a git repository.</p>\n <sp-action-button\n size=\"m\"\n @click=${async () => {\n statusMessage(\"Initializing repository…\");\n await getPlatform().gitInit();\n statusMessage(\"Repository initialized\");\n await refreshGitStatus();\n }}\n ?disabled=${loading}\n >\n <sp-icon-add slot=\"icon\"></sp-icon-add>\n Initialize Repository\n </sp-action-button>\n <sp-action-button\n size=\"m\"\n @click=${() =>\n publishToGithub({\n projectName: projectState?.name || \"my-project\",\n })}\n ?disabled=${loading}\n >\n <sp-icon-share slot=\"icon\"></sp-icon-share>\n Publish to GitHub\n </sp-action-button>\n </div>\n </div>`;\n }\n\n if (!_pollTimer) {\n _pollTimer = setInterval(() => {\n if (view.leftTab === \"git\" && !S.ui.gitLoading) {\n void refreshGitStatus();\n }\n }, 30_000);\n }\n\n const stagedFiles = status?.files?.filter((f: GitFileEntry) => f.staged) || [];\n const unstagedFiles = status?.files?.filter((f: GitFileEntry) => !f.staged) || [];\n const totalChanges = status?.files?.length || 0;\n\n const doCommit = async () => {\n const tab = activeTab.value;\n const msg = tab?.session.ui.gitCommitMessage?.trim();\n if (!msg) {\n return;\n }\n updateUi(\"gitCommitMessage\", \"\");\n // Fold co-editing sessions into the backend's tree first so the commit never misses\n // Trailing keystrokes (the mirror is debounced).\n await flushAllCollab();\n await gitAction(\"gitCommit\", msg);\n };\n\n const doCommitAndSync = async () => {\n const tab = activeTab.value;\n const msg = tab?.session.ui.gitCommitMessage?.trim();\n if (!msg) {\n return;\n }\n updateUi(\"gitCommitMessage\", \"\");\n updateUi(\"gitLoading\", true);\n updateUi(\"gitError\", null);\n await flushAllCollab();\n const plat = getPlatform();\n try {\n await plat.gitCommit(msg);\n await plat.gitPush();\n await refreshGitStatus();\n } catch (error) {\n updateUi(\"gitError\", errorMessage(error));\n updateUi(\"gitLoading\", false);\n renderOnly(\"leftPanel\");\n }\n };\n\n // ─── 1. Sync status bar ──────────────────────────────────────────────────\n const isUpToDate = !status?.ahead && !status?.behind;\n const syncLabel = isUpToDate\n ? \"Up to date\"\n : `${status?.ahead ? `${status.ahead} ahead` : \"\"}${status?.ahead && status?.behind ? \", \" : \"\"}${status?.behind ? `${status.behind} behind` : \"\"}`;\n const lastUpdatedStr = _lastUpdated\n ? _lastUpdated.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })\n : \"\";\n\n const hasRemotes = (status?.remotes?.length ?? 0) > 0;\n\n const syncBarT = hasRemotes\n ? html`\n <div class=\"git-sync-bar\">\n <sp-action-button\n size=\"s\"\n quiet\n class=\"git-sync-icon\"\n title=\"Refresh\"\n @click=${() => refreshGitStatus()}\n ?disabled=${loading}\n >\n <sp-icon-refresh slot=\"icon\"></sp-icon-refresh>\n </sp-action-button>\n <div class=\"git-sync-text\">\n <span class=\"git-sync-label\">${syncLabel}</span>\n ${\n lastUpdatedStr\n ? html`<span class=\"git-sync-time\">Last updated ${lastUpdatedStr}</span>`\n : nothing\n }\n </div>\n <sp-action-group size=\"xs\" quiet class=\"git-sync-actions\">\n <sp-action-button\n title=\"Fetch\"\n @click=${() => gitAction(\"gitFetch\")}\n ?disabled=${loading}\n >\n <sp-icon-download slot=\"icon\" size=\"xs\"></sp-icon-download>\n </sp-action-button>\n <sp-action-button\n title=\"Pull${status?.behind ? ` (${status.behind} behind)` : \"\"}\"\n @click=${() => void doPull()}\n ?disabled=${loading}\n >\n <sp-icon-arrow-down slot=\"icon\" size=\"xs\"></sp-icon-arrow-down>\n </sp-action-button>\n <sp-action-button\n title=\"Push${status?.ahead ? ` (${status.ahead} ahead)` : \"\"}\"\n @click=${() => gitAction(\"gitPush\")}\n ?disabled=${loading}\n >\n <sp-icon-arrow-up slot=\"icon\" size=\"xs\"></sp-icon-arrow-up>\n </sp-action-button>\n </sp-action-group>\n </div>\n `\n : html`\n <div class=\"git-sync-bar git-sync-bar--no-remote\">\n <sp-action-button\n size=\"s\"\n quiet\n class=\"git-sync-icon\"\n title=\"Refresh\"\n @click=${() => refreshGitStatus()}\n ?disabled=${loading}\n >\n <sp-icon-refresh slot=\"icon\"></sp-icon-refresh>\n </sp-action-button>\n <div class=\"git-sync-text\">\n <span class=\"git-sync-label\">Local only (no remote)</span>\n </div>\n <sp-action-button\n size=\"s\"\n @click=${() =>\n publishToGithub({\n projectName: projectState?.name || \"my-project\",\n })}\n ?disabled=${loading}\n >\n <sp-icon-share slot=\"icon\"></sp-icon-share>\n Publish to GitHub\n </sp-action-button>\n </div>\n `;\n\n // ─── 2. Branch selector ──────────────────────────────────────────────────\n const branchSelectorT = html`\n <div class=\"git-branch-row\">\n <svg\n class=\"git-branch-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\"></line>\n <circle cx=\"18\" cy=\"6\" r=\"3\"></circle>\n <circle cx=\"6\" cy=\"18\" r=\"3\"></circle>\n <path d=\"M18 9a9 9 0 0 1-9 9\"></path>\n </svg>\n <div class=\"git-branch-text\">\n <span class=\"git-branch-label\">Active branch</span>\n <span class=\"git-branch-name\">${branches?.current || status?.branch || \"—\"}</span>\n </div>\n <sp-picker\n size=\"s\"\n quiet\n class=\"git-branch-picker\"\n .value=${live(branches?.current || \"\")}\n @change=${async (e: Event) => {\n const val = (e.target as HTMLInputElement).value;\n if (val === \"__new__\") {\n (e.target as HTMLInputElement).value = branches?.current || \"\";\n const name = await showPromptDialog(\"New Branch\", {\n confirmLabel: \"Create\",\n message: `Branching from ${branches?.current || status?.branch || \"the current branch\"}.`,\n placeholder: \"feature/my-change\",\n validate: (v) => (v.trim() ? \"\" : \"Enter a branch name.\"),\n });\n if (name) {\n await gitAction(\"gitCreateBranch\", name);\n }\n return;\n }\n if (val !== branches?.current) {\n await gitAction(\"gitCheckout\", val);\n }\n }}\n >\n ${(branches?.branches || []).map(\n (b: string) => html`<sp-menu-item value=${b}>${b}</sp-menu-item>`,\n )}\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item value=\"__new__\">+ New branch...</sp-menu-item>\n </sp-picker>\n </div>\n `;\n\n // ─── 3. Tabs: Local Changes / History ────────────────────────────────────\n const switchTab = (tab: string) => {\n _gitSubTab = tab;\n if (tab === \"history\" && !S.ui.gitLogEntries) {\n void fetchGitLog();\n }\n renderOnly(\"leftPanel\");\n };\n\n const tabsT = html`\n <div class=\"git-tabs\">\n <button\n class=\"git-tab ${_gitSubTab === \"changes\" ? \"active\" : \"\"}\"\n @click=${() => switchTab(\"changes\")}\n >\n Local Changes${totalChanges > 0 ? ` (${totalChanges})` : \"\"}\n </button>\n <button\n class=\"git-tab ${_gitSubTab === \"history\" ? \"active\" : \"\"}\"\n @click=${() => switchTab(\"history\")}\n >\n History\n </button>\n </div>\n `;\n\n // ─── 4. Commit form ──────────────────────────────────────────────────────\n const commitT = html`\n <div class=\"git-commit-area\">\n <label class=\"git-commit-label\">Please write a commit message</label>\n <sp-textfield\n size=\"s\"\n multiline\n class=\"git-commit-input\"\n placeholder=\"Describe your changes\"\n .value=${live(S.ui.gitCommitMessage || \"\")}\n @input=${(e: Event) => updateUi(\"gitCommitMessage\", (e.target as HTMLInputElement).value)}\n @keydown=${(e: KeyboardEvent) => {\n if ((e.ctrlKey || e.metaKey) && e.key === \"Enter\") {\n e.preventDefault();\n void doCommit();\n }\n }}\n ></sp-textfield>\n <div class=\"git-commit-actions\">\n <div class=\"git-split-btn\">\n <sp-action-button\n class=\"git-commit-btn\"\n size=\"s\"\n @click=${doCommitAndSync}\n ?disabled=${loading}\n >\n Commit and sync\n </sp-action-button>\n <sp-action-button\n class=\"git-split-trigger\"\n size=\"s\"\n @click=${(e: Event) => {\n const menu = (\n (e.currentTarget as HTMLElement).parentElement as HTMLElement\n ).querySelector(\".git-split-menu\");\n if (menu) {\n menu.toggleAttribute(\"hidden\");\n }\n }}\n >\n <sp-icon-chevron-down slot=\"icon\" size=\"xs\"></sp-icon-chevron-down>\n </sp-action-button>\n <div class=\"git-split-menu\" hidden>\n <button\n class=\"git-split-menu-item\"\n @click=${(e: Event) => {\n ((e.currentTarget as HTMLElement).parentElement as HTMLElement).setAttribute(\n \"hidden\",\n \"\",\n );\n void doCommit();\n }}\n >\n Commit (don't sync)\n </button>\n </div>\n </div>\n </div>\n </div>\n `;\n\n // ─── 5. Changed Components ───────────────────────────────────────────────\n const fileRowT = (file: GitFileEntry) => {\n const parts = file.path.split(\"/\");\n const name = parts.pop();\n const dir = parts.join(\"/\");\n\n const onFileClick = async () => {\n if (file.status !== \"M\" && file.status !== \"A\") {\n return;\n }\n if (!file.path.endsWith(\".json\") && !formatForPath(file.path)) {\n return;\n }\n\n try {\n const plat = getPlatform();\n updateUi(\"gitLoading\", true);\n\n const [originalContent, currentContent] = await Promise.all([\n file.status === \"A\"\n ? Promise.resolve(\"\")\n : plat.gitShow({ path: file.path, ref: \"HEAD\" }),\n plat.readFile(file.path),\n ]);\n\n const diffState = {\n currentContent,\n filePath: file.path,\n fileStatus: file.status,\n originalContent,\n };\n\n updateUi(\"gitDiffState\", diffState);\n\n if (ctx?.setCanvasMode) {\n if (ctx.setGitDiffState) {\n ctx.setGitDiffState(diffState);\n }\n ctx.setCanvasMode(\"git-diff\");\n }\n } catch (error) {\n updateUi(\"gitError\", `Failed to load diff: ${errorMessage(error)}`);\n } finally {\n updateUi(\"gitLoading\", false);\n }\n };\n\n return html`\n <div class=\"git-file-row\">\n <span\n class=\"git-file-info\"\n style=\"cursor: pointer; flex: 1;\"\n title=\"Click to view diff\"\n @click=${onFileClick}\n >\n <span class=\"git-file-name\" title=${file.path}>${name}</span>\n ${dir ? html`<span class=\"git-file-dir\">${dir}</span>` : nothing}\n </span>\n <span class=\"git-file-actions\">\n ${\n file.staged\n ? html`\n <sp-action-button\n size=\"xs\"\n quiet\n title=\"Unstage\"\n @click=${() => gitAction(\"gitUnstage\", [file.path])}\n >\n <sp-icon-remove slot=\"icon\" size=\"xs\"></sp-icon-remove>\n </sp-action-button>\n `\n : html`\n <sp-action-button\n size=\"xs\"\n quiet\n title=\"Discard changes\"\n @click=${async () => {\n if (file.status === \"U\") {\n return;\n }\n const confirmed = await showConfirmDialog(\n \"Discard Changes\",\n `Discard changes to ${file.path}?`,\n { confirmLabel: \"Discard\", destructive: true },\n );\n if (!confirmed) {\n return;\n }\n await gitAction(\"gitDiscard\", [file.path]);\n }}\n ?disabled=${file.status === \"U\"}\n >\n <sp-icon-undo slot=\"icon\" size=\"xs\"></sp-icon-undo>\n </sp-action-button>\n <sp-action-button\n size=\"xs\"\n quiet\n title=\"Stage\"\n @click=${() => gitAction(\"gitStage\", [file.path])}\n >\n <sp-icon-add slot=\"icon\" size=\"xs\"></sp-icon-add>\n </sp-action-button>\n `\n }\n </span>\n <span class=\"git-file-badge git-status-${file.status}\">${file.status}</span>\n </div>\n `;\n };\n\n /** Group files by component (parent directory for .json/.class.json, or \"Other\") */\n const groupFilesByComponent = (files: GitFileEntry[]) => {\n const groups = new Map<string, GitFileEntry[]>();\n for (const f of files) {\n const parts = f.path.split(\"/\");\n let component;\n if (f.path.endsWith(\".json\") || f.path.endsWith(\".class.json\") || formatForPath(f.path)) {\n component = parts.length > 1 ? `/${parts.at(-2)}` : `/${parts[0]}`;\n } else {\n component = \"Other\";\n }\n if (!groups.has(component)) {\n groups.set(component, []);\n }\n (groups.get(component) as GitFileEntry[]).push(f);\n }\n return groups;\n };\n\n const allFiles = [...stagedFiles, ...unstagedFiles];\n const componentGroups = groupFilesByComponent(allFiles);\n\n const changesT = html`\n ${\n stagedFiles.length > 0\n ? html`\n <div class=\"git-section\">\n <div class=\"git-section-header\">\n <span>Staged Changes</span>\n <span class=\"git-count\">${stagedFiles.length}</span>\n <sp-action-button\n size=\"xs\"\n quiet\n title=\"Unstage all\"\n @click=${() =>\n gitAction(\n \"gitUnstage\",\n stagedFiles.map((f: GitFileEntry) => f.path),\n )}\n >\n <sp-icon-remove slot=\"icon\" size=\"xs\"></sp-icon-remove>\n </sp-action-button>\n </div>\n ${repeat(stagedFiles, (f: GitFileEntry) => f.path, fileRowT)}\n </div>\n `\n : nothing\n }\n <div class=\"git-section\">\n <div class=\"git-section-header\">\n <span>Changed Components</span>\n <span class=\"git-count\">${allFiles.length}</span>\n ${\n unstagedFiles.length > 0\n ? html`\n <sp-action-button\n size=\"xs\"\n quiet\n title=\"Stage all\"\n @click=${() =>\n gitAction(\n \"gitStage\",\n unstagedFiles.map((f: GitFileEntry) => f.path),\n )}\n >\n <sp-icon-add slot=\"icon\" size=\"xs\"></sp-icon-add>\n </sp-action-button>\n `\n : nothing\n }\n </div>\n ${\n allFiles.length > 0\n ? html`\n ${[...componentGroups.entries()].map(\n ([comp, files]) => html`\n <div class=\"git-component-group\">\n <div class=\"git-component-header\">\n <sp-action-button\n size=\"xs\"\n quiet\n class=\"git-component-overflow\"\n title=\"Actions\"\n >\n <sp-icon-more slot=\"icon\" size=\"xs\"></sp-icon-more>\n </sp-action-button>\n <span class=\"git-component-name\">${comp}</span>\n </div>\n ${repeat(files, (f: GitFileEntry) => f.path, fileRowT)}\n </div>\n `,\n )}\n `\n : html`<div class=\"git-empty\">No changes</div>`\n }\n </div>\n `;\n\n // ─── 6. History tab content ──────────────────────────────────────────────\n const logEntries = S.ui.gitLogEntries || [];\n const historyT = html`\n <div class=\"git-history\">\n ${\n logEntries.length === 0\n ? html`<div class=\"git-empty\">No history</div>`\n : repeat(\n logEntries,\n (e: GitLogEntry) => e.hash,\n (entry: GitLogEntry) => html`\n <div class=\"git-history-entry\">\n <span class=\"git-history-hash\">${entry.hash.slice(0, 7)}</span>\n <span class=\"git-history-message\">${entry.message}</span>\n <span class=\"git-history-meta\"\n >${entry.author} · ${_relativeDate(entry.date)}</span\n >\n </div>\n `,\n )\n }\n </div>\n `;\n\n return html`\n <div class=\"git-panel\">\n ${syncBarT} ${branchSelectorT} ${tabsT}\n ${_gitSubTab === \"changes\" ? html`${commitT}${changesT}` : historyT}\n ${loading ? html`<div class=\"git-loading\">Loading...</div>` : nothing}\n ${S.ui.gitError ? html`<div class=\"git-error\">${S.ui.gitError}</div>` : nothing}\n </div>\n `;\n}\n\n/** @param {string} iso */\nfunction _relativeDate(iso: string) {\n const d = new Date(iso);\n const now = Date.now();\n const diff = now - d.getTime();\n const mins = Math.floor(diff / 60_000);\n if (mins < 1) {\n return \"just now\";\n }\n if (mins < 60) {\n return `${mins}m ago`;\n }\n const hours = Math.floor(mins / 60);\n if (hours < 24) {\n return `${hours}h ago`;\n }\n const days = Math.floor(hours / 24);\n if (days < 30) {\n return `${days}d ago`;\n }\n return d.toLocaleDateString();\n}\n\nexport function cleanupGitPanel() {\n if (_pollTimer) {\n clearInterval(_pollTimer);\n _pollTimer = null;\n }\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "1EEF19D9DB2E4D1164756E2164756E21",
11
- "names": []
12
- }
@@ -1,9 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [
5
- ],
6
- "mappings": "",
7
- "debugId": "D1F5C195B795406564756E2164756E21",
8
- "names": []
9
- }