@jxsuite/studio 2.2.2 → 2.4.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 (188) hide show
  1. package/data/css-meta.json +1487 -0
  2. package/data/elements-meta.json +370 -0
  3. package/data/html-meta.json +366 -0
  4. package/data/stylebook-meta.json +200 -0
  5. package/data/webdata.json +1621 -0
  6. package/dist/chunks/{Overlay.dev-ymy3et3y.js → Overlay.dev-d2ajy6sj.js} +7 -7
  7. package/dist/chunks/{content-source-r2n7v682.js → content-source-jrvn5vwy.js} +13 -12
  8. package/dist/chunks/{convert-to-repeater-cnpyvj74.js → convert-to-repeater-109dwcj7.js} +12 -11
  9. package/dist/chunks/{extension-sections-vpcm4jvx.js → extension-sections-2zjyty05.js} +17 -16
  10. package/dist/chunks/{files-zeg88k2d.js → files-jdbtammm.js} +18 -19
  11. package/dist/chunks/{format-host-taymsw55.js → format-host-kq6963gs.js} +2 -2
  12. package/dist/chunks/{git-panel-qp4rrwr9.js → git-panel-2stf3ahg.js} +12 -11
  13. package/dist/chunks/{layers-panel-kj93w2zg.js → layers-panel-a8wjsdjj.js} +15 -14
  14. package/dist/chunks/{monaco-setup-xy3bs05d.js → monaco-setup-a5wkmbgh.js} +6 -3
  15. package/dist/chunks/{publish-panel-6qz6kp41.js → publish-panel-2we6smjv.js} +6 -6
  16. package/dist/chunks/{quick-search-9wwa09hh.js → quick-search-hmpwdgys.js} +19 -18
  17. package/dist/chunks/right-panel-hn3y3j0j.js +38 -0
  18. package/dist/chunks/{sp-overlay.dev-h6kdx076.js → sp-overlay.dev-s18hymn9.js} +8 -8
  19. package/dist/chunks/sp-progress-circle.dev-0zxcyz3r.js +15 -0
  20. package/dist/chunks/sp-tooltip.dev-5c6d1kjz.js +15 -0
  21. package/dist/chunks/{studio-753znj4c.js → studio-0evba9z5.js} +5 -5
  22. package/dist/chunks/{studio-qhh8r5fz.js → studio-102jzb8r.js} +4 -4
  23. package/dist/chunks/{studio-22xr4q8q.js → studio-1dgqagzz.js} +18 -29
  24. package/dist/chunks/{studio-6f0am8f2.js → studio-2w11grav.js} +2 -2
  25. package/dist/chunks/{studio-pv8m0h4a.js → studio-377bbhtz.js} +28 -23
  26. package/dist/chunks/{studio-6zzbyx17.js → studio-53dn6e6t.js} +2 -2
  27. package/dist/chunks/studio-53n8bp04.js +16 -0
  28. package/dist/chunks/{studio-tqemhphj.js → studio-6gcrk1bq.js} +4 -4
  29. package/dist/chunks/{studio-3z8jjm2p.js → studio-7ejemhej.js} +3 -3
  30. package/dist/chunks/{studio-nqq8jk8f.js → studio-8x4399kc.js} +14 -14
  31. package/dist/chunks/{studio-rgwcpast.js → studio-ay8wcr2b.js} +2 -2
  32. package/dist/chunks/{studio-xmvbhg31.js → studio-c31yb4t6.js} +2 -2
  33. package/dist/chunks/{studio-5kt960pk.js → studio-ddgrc5hs.js} +133 -147
  34. package/dist/chunks/{studio-zqv3w24n.js → studio-eqyybj2e.js} +5 -5
  35. package/dist/chunks/{studio-p471gg5n.js → studio-kvfx9z2c.js} +7 -3
  36. package/dist/chunks/{studio-8sdyjfd6.js → studio-kwavhmdr.js} +2 -2
  37. package/dist/chunks/{studio-300zsz1k.js → studio-ky68mp85.js} +6 -6
  38. package/dist/chunks/{studio-x0et2z9g.js → studio-ng5gbxkj.js} +15 -15
  39. package/dist/chunks/{studio-hekaagev.js → studio-q07vj7p9.js} +17 -17
  40. package/dist/chunks/{studio-fys6z73y.js → studio-qd4k0h80.js} +7 -7
  41. package/dist/chunks/{studio-yphy4z9m.js → studio-rdsvb808.js} +5 -5
  42. package/dist/chunks/{studio-g8t7g0gp.js → studio-tqr02xaa.js} +3 -3
  43. package/dist/chunks/{studio-ckwz4d3x.js → studio-twsafr1e.js} +2 -2
  44. package/dist/chunks/{studio-qrsfh1w7.js → studio-tzx3xmvx.js} +5 -5
  45. package/dist/chunks/{studio-6a0h7sne.js → studio-vhk5fmfv.js} +2 -2
  46. package/dist/chunks/{studio-hrajjyt2.js → studio-wdt9y92a.js} +2 -2
  47. package/dist/chunks/{studio-r8vx7bkz.js → studio-wxthr2x1.js} +14 -13
  48. package/dist/chunks/{studio-yz9s88s0.js → studio-yk7037sg.js} +40 -14
  49. package/dist/chunks/{studio-1kgfcv7s.js → studio-yz06mkfj.js} +12 -11
  50. package/dist/codicon.ttf +0 -0
  51. package/dist/iframe-entry.js +14 -3
  52. package/dist/manifest.json +82 -0
  53. package/dist/studio.js +247 -106
  54. package/index.html +0 -50
  55. package/package.json +16 -9
  56. package/src/canvas/canvas-live-render.ts +2 -4
  57. package/src/canvas/canvas-origin.ts +25 -0
  58. package/src/canvas/iframe-entry.ts +5 -0
  59. package/src/canvas/iframe-host.ts +45 -4
  60. package/src/content/entry-editor.ts +2 -1
  61. package/src/editor/context-menu.ts +13 -2
  62. package/src/editor/slash-menu.ts +26 -11
  63. package/src/files/files.ts +11 -23
  64. package/src/grid/grid-panel.ts +27 -6
  65. package/src/hosting/document.ts +109 -0
  66. package/src/hosting/layout.ts +211 -0
  67. package/src/hosting/stage.ts +166 -0
  68. package/src/hosting/tsconfig.json +18 -0
  69. package/src/panels/ai-chat/chat-view.ts +25 -14
  70. package/src/panels/git-panel.ts +17 -14
  71. package/src/panels/head-panel.ts +32 -14
  72. package/src/panels/imports-panel.ts +32 -13
  73. package/src/panels/layers-panel.ts +9 -1
  74. package/src/panels/panel-registry.ts +0 -1
  75. package/src/panels/properties-panel.ts +3 -3
  76. package/src/panels/settings-pane.ts +1 -1
  77. package/src/panels/style-panel.ts +3 -3
  78. package/src/panels/stylebook-panel.ts +10 -1
  79. package/src/panels/toolbar.ts +1 -1
  80. package/src/platforms/cloud.ts +9 -0
  81. package/src/services/ai-models.ts +14 -1
  82. package/src/services/bundle-base.ts +69 -0
  83. package/src/services/monaco-setup.ts +19 -13
  84. package/src/shell/tree.ts +155 -0
  85. package/src/shell.ts +0 -2
  86. package/src/studio.ts +22 -2
  87. package/src/types.ts +32 -0
  88. package/src/ui/ai-managed-connect.ts +18 -3
  89. package/src/ui/regions.ts +10 -45
  90. package/styles/overlays.css +35 -0
  91. package/styles/shell.css +7 -0
  92. package/dist/chunks/2020-xp8vnwma.js.map +0 -24
  93. package/dist/chunks/Overlay.dev-ymy3et3y.js.map +0 -9
  94. package/dist/chunks/adapter-jkcyhgtr.js.map +0 -9
  95. package/dist/chunks/cf-settings-g5fbf2zp.js.map +0 -9
  96. package/dist/chunks/components-z6cnkyy1.js.map +0 -9
  97. package/dist/chunks/content-source-r2n7v682.js.map +0 -9
  98. package/dist/chunks/convert-to-repeater-cnpyvj74.js.map +0 -10
  99. package/dist/chunks/editor-cptq5jp1.js.map +0 -9
  100. package/dist/chunks/extension-sections-vpcm4jvx.js.map +0 -11
  101. package/dist/chunks/files-zeg88k2d.js.map +0 -9
  102. package/dist/chunks/flow-qbfgrpeh.js.map +0 -12
  103. package/dist/chunks/focus-trap.esm-ggawf1hy.js.map +0 -11
  104. package/dist/chunks/focus-visible-6eg70z18.js.map +0 -10
  105. package/dist/chunks/format-host-taymsw55.js.map +0 -9
  106. package/dist/chunks/git-panel-qp4rrwr9.js.map +0 -9
  107. package/dist/chunks/index-nj44jpzj.js.map +0 -14
  108. package/dist/chunks/index-zqxmqxmh.js.map +0 -9
  109. package/dist/chunks/javascript-q8kpmfah.js.map +0 -11
  110. package/dist/chunks/jsonMode-dkr040ga.js.map +0 -18
  111. package/dist/chunks/jx-validate-jj9rnt4n.js.map +0 -9
  112. package/dist/chunks/layers-panel-kj93w2zg.js.map +0 -9
  113. package/dist/chunks/monaco-binding-rj6xpx9y.js.map +0 -10
  114. package/dist/chunks/monaco-setup-xy3bs05d.js.map +0 -15
  115. package/dist/chunks/publish-panel-6qz6kp41.js.map +0 -9
  116. package/dist/chunks/quick-search-9wwa09hh.js.map +0 -9
  117. package/dist/chunks/right-panel-faf816ch.js +0 -37
  118. package/dist/chunks/right-panel-faf816ch.js.map +0 -9
  119. package/dist/chunks/section-registry-sx1ykvkw.js.map +0 -9
  120. package/dist/chunks/sp-overlay.dev-h6kdx076.js.map +0 -9
  121. package/dist/chunks/sp-popover.dev-dj9x7e7a.js.map +0 -9
  122. package/dist/chunks/sp-progress-circle.dev-0fpvhm52.js +0 -15
  123. package/dist/chunks/sp-progress-circle.dev-0fpvhm52.js.map +0 -9
  124. package/dist/chunks/sp-tooltip.dev-rvepkw4r.js +0 -15
  125. package/dist/chunks/sp-tooltip.dev-rvepkw4r.js.map +0 -9
  126. package/dist/chunks/sp-tray.dev-64v4pxw8.js.map +0 -12
  127. package/dist/chunks/studio-0a5qrh01.js.map +0 -9
  128. package/dist/chunks/studio-0rqqhrdy.js.map +0 -12
  129. package/dist/chunks/studio-18j3bmcz.js.map +0 -10
  130. package/dist/chunks/studio-1kgfcv7s.js.map +0 -13
  131. package/dist/chunks/studio-22xr4q8q.js.map +0 -13
  132. package/dist/chunks/studio-300zsz1k.js.map +0 -39
  133. package/dist/chunks/studio-3fk1ac9z.js.map +0 -12
  134. package/dist/chunks/studio-3n4ndrzh.js.map +0 -41
  135. package/dist/chunks/studio-3z8jjm2p.js.map +0 -13
  136. package/dist/chunks/studio-4mqb9a0j.js.map +0 -14
  137. package/dist/chunks/studio-4q0wznzf.js.map +0 -73
  138. package/dist/chunks/studio-5ehhackm.js.map +0 -10
  139. package/dist/chunks/studio-5kt960pk.js.map +0 -38
  140. package/dist/chunks/studio-5x5774ak.js.map +0 -10
  141. package/dist/chunks/studio-685s0ytq.js.map +0 -76
  142. package/dist/chunks/studio-6a0h7sne.js.map +0 -15
  143. package/dist/chunks/studio-6f0am8f2.js.map +0 -10
  144. package/dist/chunks/studio-6kv3apa9.js.map +0 -10
  145. package/dist/chunks/studio-6zzbyx17.js.map +0 -12
  146. package/dist/chunks/studio-753znj4c.js.map +0 -16
  147. package/dist/chunks/studio-7afd21nw.js.map +0 -10
  148. package/dist/chunks/studio-8jpzqk5s.js.map +0 -10
  149. package/dist/chunks/studio-8q517dfr.js.map +0 -10
  150. package/dist/chunks/studio-8sdyjfd6.js.map +0 -10
  151. package/dist/chunks/studio-a0tswy0w.js.map +0 -9
  152. package/dist/chunks/studio-a7pzveq1.js.map +0 -11
  153. package/dist/chunks/studio-ahnzd9rg.js.map +0 -10
  154. package/dist/chunks/studio-b9b6t1dg.js.map +0 -651
  155. package/dist/chunks/studio-bw5dz6km.js.map +0 -21
  156. package/dist/chunks/studio-cjm7fdjf.js.map +0 -14
  157. package/dist/chunks/studio-ckwz4d3x.js.map +0 -12
  158. package/dist/chunks/studio-d1ks410h.js.map +0 -10
  159. package/dist/chunks/studio-dg7zyt5x.js.map +0 -10
  160. package/dist/chunks/studio-fys6z73y.js.map +0 -10
  161. package/dist/chunks/studio-g1wdche0.js.map +0 -56
  162. package/dist/chunks/studio-g8t7g0gp.js.map +0 -10
  163. package/dist/chunks/studio-h4rxscfc.js.map +0 -10
  164. package/dist/chunks/studio-hekaagev.js.map +0 -18
  165. package/dist/chunks/studio-hrajjyt2.js.map +0 -10
  166. package/dist/chunks/studio-nqq8jk8f.js.map +0 -14
  167. package/dist/chunks/studio-p471gg5n.js.map +0 -14
  168. package/dist/chunks/studio-pv8m0h4a.js.map +0 -98
  169. package/dist/chunks/studio-qhh8r5fz.js.map +0 -13
  170. package/dist/chunks/studio-qrsfh1w7.js.map +0 -41
  171. package/dist/chunks/studio-r8vx7bkz.js.map +0 -235
  172. package/dist/chunks/studio-rgwcpast.js.map +0 -12
  173. package/dist/chunks/studio-s519zc99.js.map +0 -10
  174. package/dist/chunks/studio-sas7mt3k.js.map +0 -10
  175. package/dist/chunks/studio-t5wqwzdh.js.map +0 -10
  176. package/dist/chunks/studio-tqemhphj.js.map +0 -11
  177. package/dist/chunks/studio-tr20m8g8.js.map +0 -9
  178. package/dist/chunks/studio-tvgyw9xw.js.map +0 -14
  179. package/dist/chunks/studio-x0et2z9g.js.map +0 -32
  180. package/dist/chunks/studio-xm3dbxvn.js.map +0 -19
  181. package/dist/chunks/studio-xmvbhg31.js.map +0 -10
  182. package/dist/chunks/studio-ynxwkrzd.js.map +0 -246
  183. package/dist/chunks/studio-yphy4z9m.js.map +0 -10
  184. package/dist/chunks/studio-yz9s88s0.js.map +0 -54
  185. package/dist/chunks/studio-z6nw2ek2.js.map +0 -10
  186. package/dist/chunks/studio-zqv3w24n.js.map +0 -11
  187. package/dist/chunks/tsMode-76kr53q0.js.map +0 -13
  188. package/dist/chunks/ws-client-6shc5rze.js.map +0 -12
package/dist/studio.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  seedPublishConnected
3
- } from "./chunks/studio-g8t7g0gp.js";
4
- import"./chunks/studio-hrajjyt2.js";
3
+ } from "./chunks/studio-tqr02xaa.js";
4
+ import"./chunks/studio-wdt9y92a.js";
5
5
  import {
6
6
  ElementResolutionController,
7
7
  FocusVisiblePolyfillMixin,
@@ -20,10 +20,10 @@ import {
20
20
  isIPhone,
21
21
  isWebKit,
22
22
  randomID
23
- } from "./chunks/studio-qrsfh1w7.js";
23
+ } from "./chunks/studio-tzx3xmvx.js";
24
24
  import {
25
25
  DependencyManagerController
26
- } from "./chunks/studio-3z8jjm2p.js";
26
+ } from "./chunks/studio-7ejemhej.js";
27
27
  import {
28
28
  Popover
29
29
  } from "./chunks/studio-3fk1ac9z.js";
@@ -31,12 +31,12 @@ import {
31
31
  LanguageResolutionController,
32
32
  ProgressCircle,
33
33
  languageResolverUpdatedSymbol
34
- } from "./chunks/studio-6a0h7sne.js";
34
+ } from "./chunks/studio-vhk5fmfv.js";
35
35
  import"./chunks/studio-ahnzd9rg.js";
36
36
  import {
37
37
  until,
38
38
  when
39
- } from "./chunks/studio-rgwcpast.js";
39
+ } from "./chunks/studio-ay8wcr2b.js";
40
40
  import {
41
41
  IS_MOBILE,
42
42
  IS_TOUCH_DEVICE,
@@ -67,7 +67,7 @@ import {
67
67
  registerStyleCommands,
68
68
  render as render3,
69
69
  setInspectorTab
70
- } from "./chunks/studio-nqq8jk8f.js";
70
+ } from "./chunks/studio-8x4399kc.js";
71
71
  import {
72
72
  CommandUnavailableError,
73
73
  chordFromEvent,
@@ -99,7 +99,7 @@ import {
99
99
  showSlashMenu,
100
100
  showSlashMenuAtRect,
101
101
  suppressBlockActionBar
102
- } from "./chunks/studio-pv8m0h4a.js";
102
+ } from "./chunks/studio-377bbhtz.js";
103
103
  import {
104
104
  addableContexts,
105
105
  defaultCommands,
@@ -111,7 +111,7 @@ import {
111
111
  tokenLabel,
112
112
  transposeStylebookStyle,
113
113
  writeTokenOverride
114
- } from "./chunks/studio-1kgfcv7s.js";
114
+ } from "./chunks/studio-yz06mkfj.js";
115
115
  import {
116
116
  DERIVE_PRESETS,
117
117
  JxColorPopover,
@@ -144,7 +144,7 @@ import {
144
144
  spNumberField,
145
145
  spTextArea,
146
146
  spTextField
147
- } from "./chunks/studio-x0et2z9g.js";
147
+ } from "./chunks/studio-ng5gbxkj.js";
148
148
  import {
149
149
  LitElement,
150
150
  css
@@ -160,7 +160,7 @@ import {
160
160
  import {
161
161
  initQuickSearch,
162
162
  openQuickSearch
163
- } from "./chunks/studio-fys6z73y.js";
163
+ } from "./chunks/studio-qd4k0h80.js";
164
164
  import {
165
165
  addRecentProject,
166
166
  clearRecentProjects,
@@ -186,12 +186,11 @@ import {
186
186
  reloadFileInTab,
187
187
  removeRecentProject,
188
188
  renderFilesTemplate,
189
- seedEntry,
190
- setupTreeKeyboard
191
- } from "./chunks/studio-22xr4q8q.js";
189
+ seedEntry
190
+ } from "./chunks/studio-1dgqagzz.js";
192
191
  import {
193
192
  computeWindow
194
- } from "./chunks/studio-8sdyjfd6.js";
193
+ } from "./chunks/studio-kwavhmdr.js";
195
194
  import {
196
195
  autoSyncProjectOnOpen,
197
196
  cleanupGitPanel,
@@ -212,13 +211,13 @@ import {
212
211
  registerSourceControlCommands,
213
212
  renderGitPanel,
214
213
  stripRange
215
- } from "./chunks/studio-hekaagev.js";
214
+ } from "./chunks/studio-q07vj7p9.js";
216
215
  import {
217
216
  createPanelScheduler
218
217
  } from "./chunks/studio-8jpzqk5s.js";
219
218
  import {
220
219
  selectContributedEntry
221
- } from "./chunks/studio-yphy4z9m.js";
220
+ } from "./chunks/studio-rdsvb808.js";
222
221
  import {
223
222
  notifySettingsDocument,
224
223
  onSettingsDocumentChanged,
@@ -239,7 +238,7 @@ import {
239
238
  renderForm,
240
239
  renderProvenanceChip,
241
240
  resolveContextPointer
242
- } from "./chunks/studio-300zsz1k.js";
241
+ } from "./chunks/studio-ky68mp85.js";
243
242
  import {
244
243
  validateDoc,
245
244
  validateProjectConfig
@@ -264,10 +263,10 @@ import {
264
263
  registerGridCommands,
265
264
  scanLibrary,
266
265
  uploadDirForCategory
267
- } from "./chunks/studio-753znj4c.js";
266
+ } from "./chunks/studio-0evba9z5.js";
268
267
  import {
269
268
  live
270
- } from "./chunks/studio-xmvbhg31.js";
269
+ } from "./chunks/studio-c31yb4t6.js";
271
270
  import {
272
271
  negotiateCollab
273
272
  } from "./chunks/studio-dg7zyt5x.js";
@@ -308,8 +307,8 @@ import {
308
307
  setIncludeDrafts,
309
308
  startFsSync,
310
309
  writesForTurn
311
- } from "./chunks/studio-r8vx7bkz.js";
312
- import"./chunks/studio-6f0am8f2.js";
310
+ } from "./chunks/studio-wxthr2x1.js";
311
+ import"./chunks/studio-2w11grav.js";
313
312
  import"./chunks/studio-bw5dz6km.js";
314
313
  import {
315
314
  UPLOAD_ACCEPT,
@@ -317,18 +316,18 @@ import {
317
316
  isImage,
318
317
  setMediaChangedHandler,
319
318
  uploadAssets
320
- } from "./chunks/studio-qhh8r5fz.js";
319
+ } from "./chunks/studio-102jzb8r.js";
321
320
  import {
322
321
  beginActivity,
323
322
  registerActivityPanel,
324
323
  showProgressModal
325
- } from "./chunks/studio-zqv3w24n.js";
324
+ } from "./chunks/studio-eqyybj2e.js";
326
325
  import {
327
326
  currentDeploy,
328
327
  latestDeployment,
329
328
  noteDeployment,
330
329
  platformSupportsPublish
331
- } from "./chunks/studio-6zzbyx17.js";
330
+ } from "./chunks/studio-53dn6e6t.js";
332
331
  import {
333
332
  CATEGORIES,
334
333
  SPAN_FULL_RENDER,
@@ -440,7 +439,7 @@ import {
440
439
  timeSpan,
441
440
  timeSpanAsync,
442
441
  updateActivePanelHeaders
443
- } from "./chunks/studio-yz9s88s0.js";
442
+ } from "./chunks/studio-yk7037sg.js";
444
443
  import {
445
444
  BOTTOM_TAB_IDS,
446
445
  BUFFER_COMMIT,
@@ -607,19 +606,21 @@ import {
607
606
  updateSiteConfig,
608
607
  view,
609
608
  workspace
610
- } from "./chunks/studio-5kt960pk.js";
609
+ } from "./chunks/studio-ddgrc5hs.js";
611
610
  import {
612
611
  classMap,
613
612
  ifDefined,
614
613
  styleMap
615
- } from "./chunks/studio-ckwz4d3x.js";
614
+ } from "./chunks/studio-twsafr1e.js";
616
615
  import {
617
616
  AsyncDirective,
617
+ Directive,
618
618
  PartType,
619
+ createRef,
619
620
  directive,
620
621
  ref,
621
622
  repeat
622
- } from "./chunks/studio-p471gg5n.js";
623
+ } from "./chunks/studio-kvfx9z2c.js";
623
624
  import {
624
625
  html,
625
626
  noChange,
@@ -668,7 +669,7 @@ import {
668
669
  mountStillWanted,
669
670
  refreshExtensionUi,
670
671
  refreshFormats
671
- } from "./chunks/studio-tqemhphj.js";
672
+ } from "./chunks/studio-6gcrk1bq.js";
672
673
  import {
673
674
  getPlatform,
674
675
  hasPlatform,
@@ -682,6 +683,9 @@ import {
682
683
  } from "./chunks/studio-h4rxscfc.js";
683
684
  import"./chunks/studio-t5wqwzdh.js";
684
685
  import"./chunks/studio-tr20m8g8.js";
686
+ import {
687
+ setBundleBase
688
+ } from "./chunks/studio-53n8bp04.js";
685
689
  import {
686
690
  __require
687
691
  } from "./chunks/studio-a0tswy0w.js";
@@ -729,6 +733,32 @@ function attachCursorStyles(awareness, doc) {
729
733
  };
730
734
  }
731
735
 
736
+ // ../../node_modules/lit-html/development/directives/guard.js
737
+ var initialValue = {};
738
+
739
+ class GuardDirective extends Directive {
740
+ constructor() {
741
+ super(...arguments);
742
+ this._previousValue = initialValue;
743
+ }
744
+ render(_value, f) {
745
+ return f();
746
+ }
747
+ update(_part, [value, f]) {
748
+ if (Array.isArray(value)) {
749
+ if (Array.isArray(this._previousValue) && this._previousValue.length === value.length && value.every((v, i) => v === this._previousValue[i])) {
750
+ return noChange;
751
+ }
752
+ } else if (this._previousValue === value) {
753
+ return noChange;
754
+ }
755
+ this._previousValue = Array.isArray(value) ? Array.from(value) : value;
756
+ const r = this.render(value, f);
757
+ return r;
758
+ }
759
+ }
760
+ var guard = directive(GuardDirective);
761
+
732
762
  // ../../node_modules/tabulator-tables/dist/js/tabulator_esm.mjs
733
763
  class CoreFeature {
734
764
  constructor(table) {
@@ -3706,11 +3736,11 @@ var Edit$1 = class Edit {
3706
3736
  }
3707
3737
  _deprecatedOptionsCheck() {}
3708
3738
  _initializeValue() {
3709
- var initialValue = this.cell.getValue();
3710
- if (typeof initialValue === "undefined" && typeof this.params.defaultValue !== "undefined") {
3711
- initialValue = this.params.defaultValue;
3739
+ var initialValue2 = this.cell.getValue();
3740
+ if (typeof initialValue2 === "undefined" && typeof this.params.defaultValue !== "undefined") {
3741
+ initialValue2 = this.params.defaultValue;
3712
3742
  }
3713
- this.initialValues = this.params.multiselect ? initialValue : [initialValue];
3743
+ this.initialValues = this.params.multiselect ? initialValue2 : [initialValue2];
3714
3744
  if (this.isFilter) {
3715
3745
  this.input.value = this.initialValues ? this.initialValues.join(",") : "";
3716
3746
  this.headerFilterInitialListGen();
@@ -4452,7 +4482,7 @@ var Edit$1 = class Edit {
4452
4482
  this._focusItem(item);
4453
4483
  }
4454
4484
  _resolveValue(blur) {
4455
- var output, initialValue;
4485
+ var output, initialValue2;
4456
4486
  if (this.popup) {
4457
4487
  this.popup.hide(true);
4458
4488
  }
@@ -4472,9 +4502,9 @@ var Edit$1 = class Edit {
4472
4502
  } else if (this.isFilter && this.focusedItem && this.focusedItem.selected) {
4473
4503
  output = this.focusedItem.value;
4474
4504
  } else {
4475
- initialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues;
4476
- if (initialValue === null || typeof initialValue === "undefined" || initialValue === "") {
4477
- output = initialValue;
4505
+ initialValue2 = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues;
4506
+ if (initialValue2 === null || typeof initialValue2 === "undefined" || initialValue2 === "") {
4507
+ output = initialValue2;
4478
4508
  } else {
4479
4509
  output = this.params.emptyValue;
4480
4510
  }
@@ -6255,9 +6285,9 @@ class Filter extends Module {
6255
6285
  };
6256
6286
  this.generateHeaderFilterElement(column);
6257
6287
  }
6258
- generateHeaderFilterElement(column, initialValue, reinitialize) {
6288
+ generateHeaderFilterElement(column, initialValue2, reinitialize) {
6259
6289
  var self = this, success = column.modules.filter.success, field = column.getField(), filterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback;
6260
- column.modules.filter.value = initialValue;
6290
+ column.modules.filter.value = initialValue2;
6261
6291
  function cancel() {}
6262
6292
  function onRendered(callback) {
6263
6293
  onRenderedCallback = callback;
@@ -6307,7 +6337,7 @@ class Filter extends Module {
6307
6337
  if (editor) {
6308
6338
  cellWrapper = {
6309
6339
  getValue: function() {
6310
- return typeof initialValue !== "undefined" ? initialValue : "";
6340
+ return typeof initialValue2 !== "undefined" ? initialValue2 : "";
6311
6341
  },
6312
6342
  getField: function() {
6313
6343
  return column.definition.field;
@@ -13522,8 +13552,8 @@ class InternalEventBus {
13522
13552
  subscribed(key) {
13523
13553
  return this.events[key] && this.events[key].length;
13524
13554
  }
13525
- _chain(key, args, initialValue, fallback) {
13526
- var value = initialValue;
13555
+ _chain(key, args, initialValue2, fallback) {
13556
+ var value = initialValue2;
13527
13557
  if (!Array.isArray(args)) {
13528
13558
  args = [args];
13529
13559
  }
@@ -15759,7 +15789,7 @@ function toolbarTpl(controller, panel) {
15759
15789
  size="s"
15760
15790
  quiet
15761
15791
  placeholder="Filter rows"
15762
- .value=${layout?.filter ?? ""}
15792
+ .value=${live(layout?.filter ?? "")}
15763
15793
  @input=${(e) => {
15764
15794
  const term = e.target.value;
15765
15795
  saveGridLayout(gridId, { filter: term });
@@ -16055,7 +16085,10 @@ function shellTpl(controller, panel, onHost) {
16055
16085
  return html`
16056
16086
  <div class="jx-grid">
16057
16087
  ${toolbarTpl(controller, panel)}
16058
- <div class="jx-grid-host" ${ref((el) => onHost(el))}></div>
16088
+ ${guard([controller.source.id], () => html`<div
16089
+ class="jx-grid-host"
16090
+ ${ref((el) => onHost(el))}
16091
+ ></div>`)}
16059
16092
  </div>
16060
16093
  `;
16061
16094
  }
@@ -16076,12 +16109,12 @@ function renderGridMode(surface, tab) {
16076
16109
  }
16077
16110
  const scope = effectScope();
16078
16111
  const local = reactive({ views: 0 });
16079
- const live2 = controller;
16112
+ const engine = controller;
16080
16113
  let hostEl = null;
16081
16114
  const panel = {
16082
16115
  applyLayout(layout) {
16083
- live2.setSort(layout?.sort ?? null);
16084
- live2.setGrouping(layout?.groupBy ?? null);
16116
+ engine.setSort(layout?.sort ?? null);
16117
+ engine.setGrouping(layout?.groupBy ?? null);
16085
16118
  panel.remount();
16086
16119
  panel.view?.setSearch(layout?.filter ?? "");
16087
16120
  panel.bump();
@@ -16091,7 +16124,7 @@ function renderGridMode(surface, tab) {
16091
16124
  },
16092
16125
  remount() {
16093
16126
  panel.view?.destroy();
16094
- panel.view = hostEl ? createGridView(hostEl, live2) : null;
16127
+ panel.view = hostEl ? createGridView(hostEl, engine) : null;
16095
16128
  },
16096
16129
  paneId,
16097
16130
  scope,
@@ -16774,7 +16807,7 @@ function entryIdsFor(collection) {
16774
16807
  if (known) {
16775
16808
  return known;
16776
16809
  }
16777
- const pending = import("./chunks/content-source-r2n7v682.js").then((m) => m.listCollectionEntryIds(collection));
16810
+ const pending = import("./chunks/content-source-jrvn5vwy.js").then((m) => m.listCollectionEntryIds(collection));
16778
16811
  entryIdCache.set(collection, pending);
16779
16812
  return pending;
16780
16813
  }
@@ -16954,7 +16987,7 @@ function headerTpl(tab, collection) {
16954
16987
  <sp-switch
16955
16988
  size="s"
16956
16989
  class="entry-draft-switch"
16957
- ?checked=${draft}
16990
+ .checked=${live(draft)}
16958
16991
  title=${DRAFT_MEANING}
16959
16992
  @change=${(e) => setEntryDraft(tab, e.target.checked)}
16960
16993
  >Draft</sp-switch
@@ -17035,7 +17068,7 @@ function renderEntryMode(surface, tab) {
17035
17068
  });
17036
17069
  }
17037
17070
  async function openEntryEditor(path) {
17038
- const { openFileInTab: openFileInTab2 } = await import("./chunks/files-zeg88k2d.js");
17071
+ const { openFileInTab: openFileInTab2 } = await import("./chunks/files-jdbtammm.js");
17039
17072
  await openFileInTab2(path);
17040
17073
  for (const [id, tab] of workspace.tabs.entries()) {
17041
17074
  if (tab.documentPath !== path) {
@@ -17096,7 +17129,7 @@ async function createEntry(collectionName) {
17096
17129
  });
17097
17130
  return null;
17098
17131
  }
17099
- const { createFileIn: createFileIn2 } = await import("./chunks/files-zeg88k2d.js");
17132
+ const { createFileIn: createFileIn2 } = await import("./chunks/files-jdbtammm.js");
17100
17133
  const created = await createFileIn2({
17101
17134
  content,
17102
17135
  dir: collection.dir,
@@ -19531,6 +19564,9 @@ function cleanupGoogleFontPreconnects(head) {
19531
19564
  }
19532
19565
 
19533
19566
  // src/panels/head-panel.ts
19567
+ var _addTag = createRef();
19568
+ var _addAttr = createRef();
19569
+ var _addVal = createRef();
19534
19570
  var layoutEntries = null;
19535
19571
  async function loadLayoutEntries() {
19536
19572
  try {
@@ -20033,7 +20069,7 @@ function renderHeadTemplate({
20033
20069
 
20034
20070
  <!-- Add custom tag form -->
20035
20071
  <div class="head-add-form">
20036
- <sp-picker size="s" label="Tag" class="head-add-tag" value="meta">
20072
+ <sp-picker size="s" label="Tag" class="head-add-tag" ${ref(_addTag)}>
20037
20073
  <sp-menu-item value="meta">meta</sp-menu-item>
20038
20074
  <sp-menu-item value="link">link</sp-menu-item>
20039
20075
  <sp-menu-item value="script">script</sp-menu-item>
@@ -20042,28 +20078,30 @@ function renderHeadTemplate({
20042
20078
  placeholder="Attribute (e.g. name)"
20043
20079
  size="s"
20044
20080
  class="head-add-attr"
20081
+ ${ref(_addAttr)}
20082
+ ></sp-textfield>
20083
+ <sp-textfield
20084
+ placeholder="Value"
20085
+ size="s"
20086
+ class="head-add-val"
20087
+ ${ref(_addVal)}
20045
20088
  ></sp-textfield>
20046
- <sp-textfield placeholder="Value" size="s" class="head-add-val"></sp-textfield>
20047
20089
  <sp-action-button
20048
20090
  quiet
20049
20091
  size="xs"
20050
20092
  title="Add tag"
20051
- @click=${(e) => {
20052
- const form = e.target.closest(".head-add-form");
20053
- const tagPicker = form?.querySelector(".head-add-tag");
20054
- const attrField = form?.querySelector(".head-add-attr");
20055
- const valField = form?.querySelector(".head-add-val");
20056
- const tagName = tagPicker?.value || "meta";
20057
- const attrKey = attrField?.value?.trim();
20058
- const attrVal = valField?.value?.trim();
20093
+ @click=${() => {
20094
+ const tagName = _addTag.value?.value || "meta";
20095
+ const attrKey = _addAttr.value?.value?.trim();
20096
+ const attrVal = _addVal.value?.value?.trim();
20059
20097
  if (!attrKey || !attrVal) {
20060
20098
  return;
20061
20099
  }
20062
- if (attrField) {
20063
- attrField.value = "";
20100
+ if (_addAttr.value) {
20101
+ _addAttr.value.value = "";
20064
20102
  }
20065
- if (valField) {
20066
- valField.value = "";
20103
+ if (_addVal.value) {
20104
+ _addVal.value.value = "";
20067
20105
  }
20068
20106
  const entry = { attributes: {}, tagName };
20069
20107
  if (tagName === "meta") {
@@ -21932,6 +21970,8 @@ function registerI18nPanel() {
21932
21970
  }
21933
21971
 
21934
21972
  // src/panels/imports-panel.ts
21973
+ var _addName = createRef();
21974
+ var _addPath = createRef();
21935
21975
  function groupByPackage() {
21936
21976
  const groups = new Map;
21937
21977
  for (const comp of componentRegistry) {
@@ -22002,23 +22042,34 @@ function renderSiteLevelImports(renderLeftPanel) {
22002
22042
  message: "Imported modules give this project extra kinds of data — " + "a content collection, a CMS, an API client. Name one below."
22003
22043
  })}
22004
22044
  <div class="import-add-form">
22005
- <sp-textfield placeholder="Name" size="s" class="import-add-name"></sp-textfield>
22006
- <sp-textfield placeholder="Path" size="s" class="import-add-path"></sp-textfield>
22045
+ <sp-textfield
22046
+ placeholder="Name"
22047
+ size="s"
22048
+ class="import-add-name"
22049
+ ${ref(_addName)}
22050
+ ></sp-textfield>
22051
+ <sp-textfield
22052
+ placeholder="Path"
22053
+ size="s"
22054
+ class="import-add-path"
22055
+ ${ref(_addPath)}
22056
+ ></sp-textfield>
22007
22057
  <sp-action-button
22008
22058
  quiet
22009
22059
  size="xs"
22010
22060
  title="Add import"
22011
- @click=${async (e) => {
22012
- const form = e.target.closest(".import-add-form");
22013
- const nameField = form?.querySelector(".import-add-name");
22014
- const pathField = form?.querySelector(".import-add-path");
22015
- const name = nameField?.value?.trim();
22016
- const path = pathField?.value?.trim();
22061
+ @click=${async () => {
22062
+ const name = _addName.value?.value?.trim();
22063
+ const path = _addPath.value?.value?.trim();
22017
22064
  if (!name || !path) {
22018
22065
  return;
22019
22066
  }
22020
- nameField.value = "";
22021
- pathField.value = "";
22067
+ if (_addName.value) {
22068
+ _addName.value.value = "";
22069
+ }
22070
+ if (_addPath.value) {
22071
+ _addPath.value.value = "";
22072
+ }
22022
22073
  const updated = { ...siteImports, [name]: path };
22023
22074
  await updateSiteConfig({ imports: updated });
22024
22075
  renderLeftPanel();
@@ -22159,9 +22210,9 @@ function renderDocumentLevelImports({
22159
22210
  const importedRefs = new Set(refEntries.map((e) => e.$ref));
22160
22211
  const availableComponents = componentRegistry.filter((c) => c.source !== "npm" && c.path != null && !importedRefs.has(`./${c.path}`) && !importedRefs.has(c.path));
22161
22212
  const packageGroups = groupByPackage();
22162
- const removeRef = (ref2) => {
22213
+ const removeRef = (elementRef) => {
22163
22214
  applyMutation((doc) => {
22164
- doc.$elements = removeElementRef(doc.$elements ?? [], ref2);
22215
+ doc.$elements = removeElementRef(doc.$elements ?? [], elementRef);
22165
22216
  });
22166
22217
  renderLeftPanel();
22167
22218
  };
@@ -22298,7 +22349,7 @@ function groupProblems(records = problems) {
22298
22349
  return groups;
22299
22350
  }
22300
22351
  function openProblemPath(path) {
22301
- import("./chunks/files-zeg88k2d.js").then((m) => m.openFileInTab(path));
22352
+ import("./chunks/files-jdbtammm.js").then((m) => m.openFileInTab(path));
22302
22353
  }
22303
22354
  function actionTpl(record) {
22304
22355
  const id = record.action;
@@ -27213,6 +27264,7 @@ var cache2 = null;
27213
27264
  var proxyConfigured = false;
27214
27265
  var proxyManaged = false;
27215
27266
  var proxyDefaultModel = "";
27267
+ var proxyCode;
27216
27268
  var proxyProbe = null;
27217
27269
  var probeListeners = new Set;
27218
27270
  function invalidateModelCache() {
@@ -27220,6 +27272,7 @@ function invalidateModelCache() {
27220
27272
  proxyConfigured = false;
27221
27273
  proxyManaged = false;
27222
27274
  proxyDefaultModel = "";
27275
+ proxyCode = undefined;
27223
27276
  proxyProbe = null;
27224
27277
  }
27225
27278
  function ensureProxyProbe(onSettled) {
@@ -27241,6 +27294,9 @@ function isProxyConfigured() {
27241
27294
  function isManagedProxy() {
27242
27295
  return proxyManaged;
27243
27296
  }
27297
+ function proxyStateCode() {
27298
+ return proxyCode;
27299
+ }
27244
27300
  function siblingRoute(chatUrl, segment) {
27245
27301
  let url;
27246
27302
  try {
@@ -27275,6 +27331,7 @@ async function fetchAvailableModels(opts = {}) {
27275
27331
  proxyConfigured = data.configured === true;
27276
27332
  proxyManaged = data.managed === true;
27277
27333
  proxyDefaultModel = data.defaultModel ?? "";
27334
+ proxyCode = data.code;
27278
27335
  cache2 = (data.models || []).map((m) => ({ id: m.id, name: m.name || m.id }));
27279
27336
  return cache2;
27280
27337
  }
@@ -27439,17 +27496,22 @@ function createManagedConnect(opts) {
27439
27496
  if (!canOffer()) {
27440
27497
  return nothing;
27441
27498
  }
27499
+ const lapsed = proxyStateCode() === "cf_reconnect_required";
27500
+ const busyLabel = lapsed ? "Reconnecting…" : "Connecting…";
27442
27501
  return html`
27443
- <div class="ai-managed-connect">
27444
- <div>Use Workers AI on your own Cloudflare account — no API key needed.</div>
27502
+ <div class="ai-managed-connect" data-jx-recommended="cloudflare">
27503
+ <div class="ai-managed-connect-lede">
27504
+ ${lapsed ? "Your Cloudflare connection has expired. Reconnect to keep using the assistant." : "Recommended — run the assistant on Workers AI in your own Cloudflare account. No API key to create, copy or rotate."}
27505
+ </div>
27445
27506
  <sp-button
27446
27507
  size="s"
27508
+ variant="accent"
27447
27509
  ?disabled=${busy}
27448
27510
  @click=${() => {
27449
27511
  connect();
27450
27512
  }}
27451
27513
  >
27452
- ${busy ? "Connecting…" : "Connect Cloudflare"}
27514
+ ${busy ? busyLabel : lapsed ? "Reconnect Cloudflare" : "Connect Cloudflare"}
27453
27515
  </sp-button>
27454
27516
  ${connectError ? html`<div class="ai-managed-connect-error">${connectError}</div>` : nothing}
27455
27517
  <div class="ai-managed-connect-divider">— or bring your own key —</div>
@@ -28849,6 +28911,7 @@ function createCloudPlatform(project) {
28849
28911
  id: "cloud",
28850
28912
  projectRoot: root,
28851
28913
  canvasUrl: "/canvas.html",
28914
+ ...base ? { documentBaseUrl: `${base}/raw/` } : {},
28852
28915
  openProjectPicker: "repo-list",
28853
28916
  createDestination: "repo",
28854
28917
  async activate() {
@@ -35549,8 +35612,8 @@ class TruncatedValueTooltipController {
35549
35612
  return;
35550
35613
  }
35551
35614
  await Promise.all([
35552
- import("./chunks/sp-overlay.dev-h6kdx076.js"),
35553
- import("./chunks/sp-tooltip.dev-rvepkw4r.js")
35615
+ import("./chunks/sp-overlay.dev-s18hymn9.js"),
35616
+ import("./chunks/sp-tooltip.dev-5c6d1kjz.js")
35554
35617
  ]);
35555
35618
  this._tooltipDepsLoaded = true;
35556
35619
  Promise.resolve().then(() => {
@@ -36523,7 +36586,7 @@ class MenuItem extends LikeAnchor(ObserveSlotText(ObserveSlotPresence(Focusable,
36523
36586
  }
36524
36587
  this.dependencyManager.add("sp-overlay");
36525
36588
  this.dependencyManager.add("sp-popover");
36526
- import("./chunks/sp-overlay.dev-h6kdx076.js");
36589
+ import("./chunks/sp-overlay.dev-s18hymn9.js");
36527
36590
  import("./chunks/sp-popover.dev-dj9x7e7a.js");
36528
36591
  return html`
36529
36592
  <sp-overlay
@@ -45588,7 +45651,7 @@ class PickerBase extends SizedMixin(ExpandableElement, {
45588
45651
  `;
45589
45652
  }
45590
45653
  renderLoader() {
45591
- import("./chunks/sp-progress-circle.dev-0fpvhm52.js");
45654
+ import("./chunks/sp-progress-circle.dev-0zxcyz3r.js");
45592
45655
  return html`
45593
45656
  <sp-progress-circle
45594
45657
  size="s"
@@ -45669,7 +45732,7 @@ class PickerBase extends SizedMixin(ExpandableElement, {
45669
45732
  var _a;
45670
45733
  const container = this.renderContainer(menu);
45671
45734
  this.dependencyManager.add("sp-overlay");
45672
- import("./chunks/sp-overlay.dev-h6kdx076.js");
45735
+ import("./chunks/sp-overlay.dev-s18hymn9.js");
45673
45736
  return html`
45674
45737
  <sp-overlay
45675
45738
  @slottable-request=${this.handleSlottableRequest}
@@ -46239,7 +46302,7 @@ class Picker extends SizedMixin(ExpandableElement, {
46239
46302
  `;
46240
46303
  }
46241
46304
  renderLoader() {
46242
- import("./chunks/sp-progress-circle.dev-0fpvhm52.js");
46305
+ import("./chunks/sp-progress-circle.dev-0zxcyz3r.js");
46243
46306
  return html`
46244
46307
  <sp-progress-circle
46245
46308
  size="s"
@@ -46320,7 +46383,7 @@ class Picker extends SizedMixin(ExpandableElement, {
46320
46383
  var _a;
46321
46384
  const container = this.renderContainer(menu);
46322
46385
  this.dependencyManager.add("sp-overlay");
46323
- import("./chunks/sp-overlay.dev-h6kdx076.js");
46386
+ import("./chunks/sp-overlay.dev-s18hymn9.js");
46324
46387
  return html`
46325
46388
  <sp-overlay
46326
46389
  @slottable-request=${this.handleSlottableRequest}
@@ -46934,7 +46997,7 @@ class Combobox extends Textfield {
46934
46997
  `;
46935
46998
  }
46936
46999
  renderLoader() {
46937
- import("./chunks/sp-progress-circle.dev-0fpvhm52.js");
47000
+ import("./chunks/sp-progress-circle.dev-0zxcyz3r.js");
46938
47001
  return html`
46939
47002
  <sp-progress-circle
46940
47003
  size="s"
@@ -58528,9 +58591,9 @@ function renderDefsEditor(container) {
58528
58591
 
58529
58592
  // src/version.ts
58530
58593
  var APP_NAME = "Jx Studio";
58531
- var VERSION = "2.2.2";
58532
- var BUILD_DATE = "2026-08-21T22:51:17.552Z";
58533
- var GIT_COMMIT = "a0144fd";
58594
+ var VERSION = "2.4.0";
58595
+ var BUILD_DATE = "2026-08-23T19:11:17.175Z";
58596
+ var GIT_COMMIT = "bea72f9";
58534
58597
  var LINKS = {
58535
58598
  github: "https://github.com/jxsuite/jx",
58536
58599
  docs: "https://github.com/jxsuite/jx#readme",
@@ -58543,7 +58606,7 @@ var _container2 = null;
58543
58606
  var _packages = null;
58544
58607
  var _latest = new Map;
58545
58608
  var _busy = false;
58546
- var _addName = "";
58609
+ var _addName2 = "";
58547
58610
  function latestFor(p2) {
58548
58611
  if (p2.name.startsWith(JXSUITE_PREFIX) && isComparable(VERSION) && isUpgrade(p2.version, VERSION)) {
58549
58612
  return VERSION;
@@ -58586,13 +58649,13 @@ async function withBusy(fn) {
58586
58649
  }
58587
58650
  }
58588
58651
  async function onAdd() {
58589
- const name = _addName.trim();
58652
+ const name = _addName2.trim();
58590
58653
  if (!name) {
58591
58654
  return;
58592
58655
  }
58593
58656
  await withBusy(async () => {
58594
58657
  await getPlatform().addPackage(name);
58595
- _addName = "";
58658
+ _addName2 = "";
58596
58659
  notify.success(`Added ${name}.`);
58597
58660
  });
58598
58661
  }
@@ -58698,10 +58761,10 @@ function render11() {
58698
58761
  <sp-textfield
58699
58762
  size="s"
58700
58763
  placeholder="package-name"
58701
- .value=${_addName}
58764
+ .value=${_addName2}
58702
58765
  ?disabled=${_busy}
58703
58766
  @input=${(e20) => {
58704
- _addName = e20.target.value;
58767
+ _addName2 = e20.target.value;
58705
58768
  }}
58706
58769
  ></sp-textfield>
58707
58770
  <sp-action-button size="s" ?disabled=${_busy} @click=${onAdd}>
@@ -58742,7 +58805,7 @@ function render11() {
58742
58805
  function renderDependenciesEditor(container) {
58743
58806
  _container2 = container;
58744
58807
  _packages = null;
58745
- _addName = "";
58808
+ _addName2 = "";
58746
58809
  render11();
58747
58810
  load();
58748
58811
  }
@@ -59607,7 +59670,7 @@ async function openProjectSettings(section) {
59607
59670
  showSettingsDocument();
59608
59671
  notifySettingsDocument();
59609
59672
  try {
59610
- const { syncExtensionSettingsSections } = await import("./chunks/extension-sections-vpcm4jvx.js");
59673
+ const { syncExtensionSettingsSections } = await import("./chunks/extension-sections-2zjyty05.js");
59611
59674
  await syncExtensionSettingsSections();
59612
59675
  } catch (error) {
59613
59676
  notify.warn(`Could not load extension settings sections — ${errorMessage(error)}`, {
@@ -60231,7 +60294,7 @@ function publishCommands() {
60231
60294
  name: "set_up_publishing"
60232
60295
  },
60233
60296
  run: async () => {
60234
- const { openPublishPanel } = await import("./chunks/publish-panel-6qz6kp41.js");
60297
+ const { openPublishPanel } = await import("./chunks/publish-panel-2we6smjv.js");
60235
60298
  openPublishPanel();
60236
60299
  },
60237
60300
  title: "Set Up Publishing"
@@ -60953,7 +61016,7 @@ function i18nCommands() {
60953
61016
  });
60954
61017
  return;
60955
61018
  }
60956
- const { openFileInTab: openFileInTab2 } = await import("./chunks/files-zeg88k2d.js");
61019
+ const { openFileInTab: openFileInTab2 } = await import("./chunks/files-jdbtammm.js");
60957
61020
  await openFileInTab2(path);
60958
61021
  },
60959
61022
  title: "Open Translation"
@@ -61000,7 +61063,7 @@ function i18nCommands() {
61000
61063
  return;
61001
61064
  }
61002
61065
  const cut = path.lastIndexOf("/");
61003
- const { createFileIn: createFileIn2, openFileInTab: openFileInTab2 } = await import("./chunks/files-zeg88k2d.js");
61066
+ const { createFileIn: createFileIn2, openFileInTab: openFileInTab2 } = await import("./chunks/files-jdbtammm.js");
61004
61067
  const created = await createFileIn2({
61005
61068
  content,
61006
61069
  dir: cut === -1 ? "." : path.slice(0, cut),
@@ -61058,7 +61121,85 @@ function registerI18nCommands(registry) {
61058
61121
  registry.registerAll(i18nCommands());
61059
61122
  }
61060
61123
 
61124
+ // src/shell/tree.ts
61125
+ function mountInto(host, tpl) {
61126
+ host.textContent = "";
61127
+ delete host["_$litPart$"];
61128
+ render2(tpl, host);
61129
+ }
61130
+ function overlayLayers() {
61131
+ return html`
61132
+ <!-- The four overlay layers, in stacking order. Their z-indices were inline style
61133
+ attributes, which put the one piece of ordering the whole overlay system depends on
61134
+ outside the reach of check-styles.ts's stacking rule — the check that exists because a
61135
+ blocking progress modal once shipped above its own scrim with no reachable exit. They are
61136
+ classes in styles/overlays.css now, and the toast host is ABOVE the dialog host because
61137
+ an operation started from a dialog reports its outcome to the person still looking at
61138
+ it. -->
61139
+ <div id="layer-popover" class="jx-layer jx-layer--popover"></div>
61140
+ <div id="layer-modal" class="jx-layer jx-layer--modal"></div>
61141
+ <div id="layer-dialog" class="jx-layer jx-layer--dialog"></div>
61142
+ <!-- role="status" sits on the HOST, so a stack of toasts is announced as one live region
61143
+ rather than one region per notification. It carries its region id whether or not a toast
61144
+ has ever been raised: a region that only exists once something has gone wrong is one a
61145
+ screenshot cannot address and focus cannot be moved into. -->
61146
+ <div
61147
+ id="layer-toast"
61148
+ class="jx-layer jx-layer--toast"
61149
+ role="status"
61150
+ aria-live="polite"
61151
+ data-jx-region="overlay.toasts"
61152
+ ></div>
61153
+ `;
61154
+ }
61155
+ function shellTree() {
61156
+ return html`
61157
+ <div id="app">
61158
+ <div id="toolbar" data-jx-region="commandbar"></div>
61159
+ <!-- The PANE GRID (studio.md §18.1). One cell per pane, each holding that pane's own strip,
61160
+ jump bar, chrome layer and stage — the four surfaces that used to be flat siblings of
61161
+ THIS grid, which is to say application rows that only ever described one pane. There is
61162
+ nothing to see here in markup: panels/pane-grid.ts reconciles the cells against
61163
+ workspace.panes, because how many there are is a fact about the workspace and a
61164
+ single div can only ever be one of them. -->
61165
+ <div id="pane-grid"></div>
61166
+ <div id="activity-bar" data-jx-region="rail"></div>
61167
+ <div id="left-panel" data-jx-region="navigator"></div>
61168
+ <div id="resize-left" class="resize-handle"></div>
61169
+ <!-- The Bottom dock (⌘J). It sits in the PANE's column, under the stage and above the
61170
+ status bar, so opening it never narrows the Navigator or the Inspector (studio.md §12
61171
+ region ⑪). Its handle resizes on the other axis; panels/bottom-dock.ts stamps
61172
+ dock.bottom on this host while it is open, and nothing while it is closed. -->
61173
+ <div id="resize-bottom" class="resize-handle resize-handle-row"></div>
61174
+ <div id="bottom-dock"></div>
61175
+ <div id="resize-right" class="resize-handle"></div>
61176
+ <!-- The Inspector dock. Four tabs — Content · Style · Logic · Assistant (studio.md §12
61177
+ region ⑨) — all inside this one host. -->
61178
+ <div id="right-panel" data-jx-region="inspector"></div>
61179
+ <!-- The app's only status channel: announce what lands in it (studio.md §12 region ⑫). -->
61180
+ <div id="statusbar" role="status" aria-live="polite" data-jx-region="statusbar"></div>
61181
+ </div>
61182
+ ${overlayLayers()}
61183
+ `;
61184
+ }
61185
+ function mountShellTree(host = document.body) {
61186
+ mountInto(themeHost(host), shellTree());
61187
+ }
61188
+ function themeHost(host) {
61189
+ const existing = host.querySelector?.("sp-theme");
61190
+ if (existing) {
61191
+ return existing;
61192
+ }
61193
+ const theme = document.createElement("sp-theme");
61194
+ theme.setAttribute("color", "dark");
61195
+ theme.setAttribute("scale", "medium");
61196
+ theme.setAttribute("system", "spectrum");
61197
+ host.append(theme);
61198
+ return theme;
61199
+ }
61200
+
61061
61201
  // src/studio.ts
61202
+ setBundleBase(import.meta.url);
61062
61203
  var derivationDeps = {
61063
61204
  fileExists: async (path) => {
61064
61205
  try {
@@ -61121,6 +61262,7 @@ if (!hasPlatform()) {
61121
61262
  registerPlatform(resolveDefaultPlatform());
61122
61263
  }
61123
61264
  mountResizeEdges();
61265
+ mountShellTree();
61124
61266
  initShellRefs();
61125
61267
  mountShell();
61126
61268
  mount8(toolbarEl, {
@@ -61337,7 +61479,6 @@ mount10({
61337
61479
  setGitDiffState: (state2) => {
61338
61480
  shell.git.diffState = state2;
61339
61481
  },
61340
- setupTreeKeyboard,
61341
61482
  webdata: webdata_default
61342
61483
  });
61343
61484
  registerRenderer("leftPanel", () => render10());
@@ -61735,5 +61876,5 @@ export {
61735
61876
  hasUnsavedTabs
61736
61877
  };
61737
61878
 
61738
- //# debugId=89F1C4C5C6FDAA9A64756E2164756E21
61879
+ //# debugId=5769FAD30A86F19564756E2164756E21
61739
61880
  //# sourceMappingURL=studio.js.map