@jxsuite/studio 5.0.0 → 5.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 (94) hide show
  1. package/dist/chunks/{cf-account-picker-fyf63pmy.js → cf-account-picker-qwkm9zrf.js} +5 -5
  2. package/dist/chunks/{components-2w1f35qs.js → components-vj72gqtq.js} +6 -4
  3. package/dist/chunks/{content-source-3wqeas45.js → content-source-5mex4x1h.js} +20 -20
  4. package/dist/chunks/{convert-to-repeater-d0cgnb6d.js → convert-to-repeater-n64h8znc.js} +20 -20
  5. package/dist/chunks/entry-commands-234hjnqw.js +42 -0
  6. package/dist/chunks/{extension-sections-fy7q4fe9.js → extension-sections-3hpcambp.js} +22 -22
  7. package/dist/chunks/{file-ops-3btj6st0.js → file-ops-8yhd83xr.js} +19 -19
  8. package/dist/chunks/{files-ef8fgs3w.js → files-hnxqxtsg.js} +26 -26
  9. package/dist/chunks/{format-host-3c33nwr8.js → format-host-779sfp2n.js} +2 -2
  10. package/dist/chunks/{fs-events-13tj6sex.js → fs-events-b88z7g4h.js} +4 -4
  11. package/dist/chunks/{git-panel-4wp2rn9b.js → git-panel-xwj8fpab.js} +18 -18
  12. package/dist/chunks/{iframe-host-jgesd924.js → iframe-host-syr0f9sb.js} +9 -9
  13. package/dist/chunks/{layers-1nq5evsh.js → layers-ff81wthn.js} +5 -4
  14. package/dist/chunks/layers-panel-pnnghw12.js +40 -0
  15. package/dist/chunks/{media-picker-2qbetq73.js → media-picker-cqhhxhhe.js} +10 -10
  16. package/dist/chunks/menu-9p2w46gj.js +15 -0
  17. package/dist/chunks/{publish-panel-98f7sr3g.js → publish-panel-5zt840sy.js} +9 -9
  18. package/dist/chunks/quick-search-3748564r.js +45 -0
  19. package/dist/chunks/{references-n553f0e1.js → references-qvvxej7h.js} +3 -3
  20. package/dist/chunks/right-panel-eccz92qt.js +45 -0
  21. package/dist/chunks/{studio-x3rty6tr.js → studio-1knfqgy7.js} +6 -6
  22. package/dist/chunks/{studio-rkstz940.js → studio-1z1kcjv4.js} +17 -8
  23. package/dist/chunks/{studio-qahxvnan.js → studio-3773086z.js} +2 -2
  24. package/dist/chunks/{studio-arfpe389.js → studio-3rz5md06.js} +4 -4
  25. package/dist/chunks/{studio-pm6hgy7r.js → studio-5wt9nvhd.js} +16 -16
  26. package/dist/chunks/{studio-akbww0j5.js → studio-7xnmgv66.js} +19 -19
  27. package/dist/chunks/{studio-26d7myd1.js → studio-8scdew0e.js} +3 -3
  28. package/dist/chunks/{studio-3hxkd92t.js → studio-93zafjcm.js} +8 -8
  29. package/dist/chunks/{studio-5rt7sqa0.js → studio-a79k90n9.js} +11 -17
  30. package/dist/chunks/{studio-3gxv60tn.js → studio-aj37eer3.js} +3 -3
  31. package/dist/chunks/{studio-18avnhjp.js → studio-b0k5tqgp.js} +23 -21
  32. package/dist/chunks/{studio-fabxk6r9.js → studio-b4s9eykd.js} +13 -13
  33. package/dist/chunks/{studio-8qtrpzr3.js → studio-e1pgga3k.js} +5 -5
  34. package/dist/chunks/{studio-8jn5yhyn.js → studio-g3jevyjt.js} +2 -2
  35. package/dist/chunks/{studio-rpyah2ew.js → studio-gb13095a.js} +18 -17
  36. package/dist/chunks/{studio-57mf66w2.js → studio-js8nv53n.js} +5 -5
  37. package/dist/chunks/{studio-vz68yn9e.js → studio-jxp12rnj.js} +4 -4
  38. package/dist/chunks/{studio-az3zd49t.js → studio-k75n7vhp.js} +56 -4
  39. package/dist/chunks/{studio-5jy81t3s.js → studio-kkqkcp3d.js} +221 -16
  40. package/dist/chunks/{studio-tb3ev01j.js → studio-mhhyamxf.js} +4 -4
  41. package/dist/chunks/{studio-81390n6f.js → studio-nq5yf5mp.js} +1 -1
  42. package/dist/chunks/{studio-4m0haseg.js → studio-nzzpvzx9.js} +3 -3
  43. package/dist/chunks/{studio-em9nw8eh.js → studio-pxbgypmg.js} +12 -12
  44. package/dist/chunks/{studio-sgdc5pfc.js → studio-qhhm6hbt.js} +3 -3
  45. package/dist/chunks/{studio-d1ja2x9r.js → studio-qk4bfsq2.js} +3 -3
  46. package/dist/chunks/{studio-25hkdrkw.js → studio-qk90fgqm.js} +9 -9
  47. package/dist/chunks/{studio-s6z853aq.js → studio-r6nvacqs.js} +18 -17
  48. package/dist/chunks/{studio-7xptrg0j.js → studio-sbjyc8bt.js} +6 -6
  49. package/dist/chunks/{studio-5523bpzt.js → studio-syg2tadj.js} +3 -3
  50. package/dist/chunks/{studio-cpvb2ed1.js → studio-tqgryxwg.js} +7 -7
  51. package/dist/chunks/{studio-xsykpvsh.js → studio-try13h8c.js} +11 -11
  52. package/dist/chunks/{studio-erdatzvp.js → studio-vfq8qpjt.js} +34 -5
  53. package/dist/chunks/{studio-79y5sz51.js → studio-vw7mzp6z.js} +2 -2
  54. package/dist/chunks/{studio-9xxz1q69.js → studio-wqz6dggm.js} +5 -5
  55. package/dist/chunks/studio-zdn2g6dt.js +148 -0
  56. package/dist/chunks/{workspace-wrew8zk4.js → workspace-t55jdjbx.js} +3 -3
  57. package/dist/iframe-entry.js +97 -10
  58. package/dist/studio.js +127 -244
  59. package/package.json +6 -6
  60. package/src/canvas/canvas-utils.ts +29 -2
  61. package/src/commands/command-args.ts +37 -2
  62. package/src/commands/registry.ts +18 -8
  63. package/src/commands/run-reported.ts +120 -0
  64. package/src/editor/shortcuts.ts +11 -23
  65. package/src/files/components.ts +39 -0
  66. package/src/files/files.ts +3 -2
  67. package/src/i18n/i18n-commands.ts +10 -0
  68. package/src/packages/pull-package-sync.ts +5 -1
  69. package/src/panels/ai-panel.ts +5 -2
  70. package/src/panels/block-action-bar.ts +7 -2
  71. package/src/panels/i18n-panel.ts +8 -15
  72. package/src/panels/jump-bar.ts +3 -2
  73. package/src/panels/problems-panel.ts +6 -2
  74. package/src/panels/quick-search.ts +6 -12
  75. package/src/panels/settings-menu.ts +5 -15
  76. package/src/panels/tab-strip.ts +3 -3
  77. package/src/services/ai-command-tools.ts +78 -8
  78. package/src/services/ai-project-tools.ts +8 -2
  79. package/src/services/ai-system-prompt.ts +4 -8
  80. package/src/services/ai-tools.ts +8 -69
  81. package/src/services/document-assistant.ts +9 -6
  82. package/src/studio.ts +14 -2
  83. package/src/surfaces/commandbar.json +13 -12
  84. package/src/surfaces/commandbar.ts +6 -5
  85. package/src/surfaces/statusbar.ts +2 -1
  86. package/src/tabs/project-config.ts +45 -11
  87. package/src/ui/layers.ts +4 -1
  88. package/src/workspace/workspace.ts +60 -0
  89. package/dist/chunks/entry-commands-d6g50j7s.js +0 -42
  90. package/dist/chunks/layers-panel-ar2gh90g.js +0 -40
  91. package/dist/chunks/menu-rf7n72mf.js +0 -14
  92. package/dist/chunks/quick-search-srzz83k2.js +0 -45
  93. package/dist/chunks/right-panel-rrgx2dn3.js +0 -45
  94. package/dist/chunks/studio-d055c37e.js +0 -62
package/dist/studio.js CHANGED
@@ -91,7 +91,7 @@ import {
91
91
  closeAllTabs2,
92
92
  activateTab2,
93
93
  registerTabCommands2
94
- } from "./chunks/studio-az3zd49t.js";
94
+ } from "./chunks/studio-k75n7vhp.js";
95
95
  import {
96
96
  LEVELS,
97
97
  CATEGORIES,
@@ -102,7 +102,7 @@ import {
102
102
  isPanelVisible,
103
103
  railGroups,
104
104
  railPanelSet
105
- } from "./chunks/studio-26d7myd1.js";
105
+ } from "./chunks/studio-8scdew0e.js";
106
106
  import {
107
107
  LIVE_PREVIEW,
108
108
  getNodeAtPath2,
@@ -186,7 +186,7 @@ import {
186
186
  formatByName2,
187
187
  formatForPath2,
188
188
  formatSerialize2
189
- } from "./chunks/studio-79y5sz51.js";
189
+ } from "./chunks/studio-vw7mzp6z.js";
190
190
  import {
191
191
  parseJsonDocument,
192
192
  serializeJson,
@@ -228,12 +228,14 @@ import {
228
228
  toggleActivityTab,
229
229
  resetProjectShell,
230
230
  registerShellViewCommands
231
- } from "./chunks/studio-25hkdrkw.js";
231
+ } from "./chunks/studio-qk90fgqm.js";
232
232
  import {
233
+ componentMetaFrom,
233
234
  componentRegistry2,
234
235
  loadComponentRegistry2,
236
+ noteComponentSaved2,
235
237
  buildComponentInstance2
236
- } from "./chunks/studio-d055c37e.js";
238
+ } from "./chunks/studio-zdn2g6dt.js";
237
239
  import {
238
240
  tabOfPane,
239
241
  derivationOfPane,
@@ -344,7 +346,7 @@ import {
344
346
  postApplyFormat2,
345
347
  postOpenSlash2,
346
348
  commitActiveEditSession2
347
- } from "./chunks/studio-rkstz940.js";
349
+ } from "./chunks/studio-1z1kcjv4.js";
348
350
  import {
349
351
  PUBLIC_DIR,
350
352
  setSkipServerFunctions,
@@ -364,7 +366,7 @@ import {
364
366
  KIT_BASE,
365
367
  setActiveRegistry,
366
368
  activeRegistry
367
- } from "./chunks/studio-5jy81t3s.js";
369
+ } from "./chunks/studio-kkqkcp3d.js";
368
370
  import {
369
371
  DERIVE_PRESETS,
370
372
  PRESET_LABELS,
@@ -387,12 +389,13 @@ import {
387
389
  toTokenRef,
388
390
  resolveTokenValue,
389
391
  invalidatePageRouteCache,
392
+ renderPropertiesPanel,
390
393
  registerInspectorCommands,
391
394
  defCategory,
392
395
  defBadgeLabel,
393
396
  mountSignalsPanel,
394
397
  registerSignalsCommands
395
- } from "./chunks/studio-akbww0j5.js";
398
+ } from "./chunks/studio-7xnmgv66.js";
396
399
  import {
397
400
  mountsUsing,
398
401
  mountsOf,
@@ -410,13 +413,15 @@ import {
410
413
  mountSurface,
411
414
  whenReady,
412
415
  openDialogSurface,
416
+ runReported,
417
+ runActiveReported,
413
418
  layerHost2,
414
419
  initLayers2,
415
420
  isModalOpen2,
416
421
  showConfirmDialog2,
417
422
  showSaveDiscardDialog2,
418
423
  showPromptDialog2
419
- } from "./chunks/studio-erdatzvp.js";
424
+ } from "./chunks/studio-vfq8qpjt.js";
420
425
  import {
421
426
  html3,
422
427
  noChange2,
@@ -434,11 +439,11 @@ import {
434
439
  uploadAssets,
435
440
  mediaSiteUrl,
436
441
  previewFileSrc
437
- } from "./chunks/studio-vz68yn9e.js";
438
- import"./chunks/studio-5523bpzt.js";
442
+ } from "./chunks/studio-jxp12rnj.js";
443
+ import"./chunks/studio-syg2tadj.js";
439
444
  import {
440
445
  invalidateUsages2
441
- } from "./chunks/studio-81390n6f.js";
446
+ } from "./chunks/studio-nq5yf5mp.js";
442
447
  import {
443
448
  hydrateProjectList,
444
449
  getProjectList,
@@ -461,11 +466,11 @@ import {
461
466
  registerSourceControlCommands2,
462
467
  cleanupGitPanel2,
463
468
  registerGitPanel2
464
- } from "./chunks/studio-pm6hgy7r.js";
465
- import"./chunks/studio-qahxvnan.js";
469
+ } from "./chunks/studio-5wt9nvhd.js";
470
+ import"./chunks/studio-3773086z.js";
466
471
  import {
467
472
  openMenu2
468
- } from "./chunks/studio-3gxv60tn.js";
473
+ } from "./chunks/studio-aj37eer3.js";
469
474
  import {
470
475
  cellValuesEqual,
471
476
  parseGridTabId,
@@ -495,22 +500,22 @@ import {
495
500
  exportFile2,
496
501
  confirmFileDelete2,
497
502
  renamePromptMessage2
498
- } from "./chunks/studio-rpyah2ew.js";
503
+ } from "./chunks/studio-gb13095a.js";
499
504
  import {
500
505
  platformSupportsPublish,
501
506
  latestDeployment,
502
507
  currentDeploy,
503
508
  noteDeployment
504
- } from "./chunks/studio-tb3ev01j.js";
509
+ } from "./chunks/studio-mhhyamxf.js";
505
510
  import {
506
511
  resetIgnoreCache,
507
512
  startFsSync2
508
- } from "./chunks/studio-8jn5yhyn.js";
513
+ } from "./chunks/studio-g3jevyjt.js";
509
514
  import {
510
515
  beginActivity,
511
516
  registerActivityPanel,
512
517
  showProgressModal
513
- } from "./chunks/studio-cpvb2ed1.js";
518
+ } from "./chunks/studio-tqgryxwg.js";
514
519
  import {
515
520
  monitorForElements2
516
521
  } from "./chunks/studio-esrxgwh6.js";
@@ -518,12 +523,12 @@ import {
518
523
  openPopoverSurface,
519
524
  invalidateMediaCache2,
520
525
  mountMediaPicker2
521
- } from "./chunks/studio-8qtrpzr3.js";
526
+ } from "./chunks/studio-e1pgga3k.js";
522
527
  import {
523
528
  DRAFT_FIELD,
524
529
  isDraftEntry,
525
530
  listCollectionEntryIds2
526
- } from "./chunks/studio-x3rty6tr.js";
531
+ } from "./chunks/studio-1knfqgy7.js";
527
532
  import {
528
533
  parseCsv,
529
534
  createCsvFileSource,
@@ -544,8 +549,8 @@ import {
544
549
  createLibrarySource,
545
550
  openLibraryTab,
546
551
  registerGridCommands
547
- } from "./chunks/studio-em9nw8eh.js";
548
- import"./chunks/studio-d1ja2x9r.js";
552
+ } from "./chunks/studio-pxbgypmg.js";
553
+ import"./chunks/studio-qk4bfsq2.js";
549
554
  import {
550
555
  ensureDependenciesInstalled,
551
556
  convertTargets,
@@ -569,11 +574,11 @@ import {
569
574
  reloadCleanTab2,
570
575
  reloadFileInTab2,
571
576
  registerFilesPanel2
572
- } from "./chunks/studio-18avnhjp.js";
577
+ } from "./chunks/studio-b0k5tqgp.js";
573
578
  import {
574
579
  REDIRECT_STATUSES,
575
580
  referenceTarget
576
- } from "./chunks/studio-57mf66w2.js";
581
+ } from "./chunks/studio-js8nv53n.js";
577
582
  import"./chunks/studio-tjjk7jvk.js";
578
583
  import {
579
584
  FIELD_TYPES,
@@ -589,7 +594,7 @@ import {
589
594
  renderEntryMode,
590
595
  createEntry2,
591
596
  registerContentCommands2
592
- } from "./chunks/studio-fabxk6r9.js";
597
+ } from "./chunks/studio-b4s9eykd.js";
593
598
  import {
594
599
  notifySettingsDocument2,
595
600
  onSettingsDocumentChanged2,
@@ -619,7 +624,7 @@ import {
619
624
  renderStylebookMode,
620
625
  selectStylebookTag,
621
626
  defaultCommands
622
- } from "./chunks/studio-3hxkd92t.js";
627
+ } from "./chunks/studio-93zafjcm.js";
623
628
  import {
624
629
  findEnclosingRepeater,
625
630
  convertToComponent,
@@ -633,7 +638,6 @@ import {
633
638
  formatChord,
634
639
  overlappingScopes,
635
640
  chordsInScopes,
636
- CommandUnavailableError,
637
641
  createCommandRegistry,
638
642
  initBlockActionBar,
639
643
  formatCommands,
@@ -663,11 +667,11 @@ import {
663
667
  liveElementCommands,
664
668
  dismissContextMenu,
665
669
  showContextMenu
666
- } from "./chunks/studio-s6z853aq.js";
670
+ } from "./chunks/studio-r6nvacqs.js";
667
671
  import {
668
672
  initQuickSearch2,
669
673
  openQuickSearch2
670
- } from "./chunks/studio-5rt7sqa0.js";
674
+ } from "./chunks/studio-a79k90n9.js";
671
675
  import {
672
676
  initCssData,
673
677
  registerStyleCommands,
@@ -675,7 +679,7 @@ import {
675
679
  render2,
676
680
  inspectorTab2,
677
681
  setInspectorTab2
678
- } from "./chunks/studio-xsykpvsh.js";
682
+ } from "./chunks/studio-try13h8c.js";
679
683
  import {
680
684
  validateDoc2,
681
685
  validateProjectConfig2
@@ -711,13 +715,13 @@ import {
711
715
  revokeAccount,
712
716
  onCredentialsChanged,
713
717
  notifyCredentialsChanged
714
- } from "./chunks/studio-arfpe389.js";
718
+ } from "./chunks/studio-3rz5md06.js";
715
719
  import {
716
720
  seedPublishConnected2
717
- } from "./chunks/studio-9xxz1q69.js";
721
+ } from "./chunks/studio-wqz6dggm.js";
718
722
  import {
719
723
  selectContributedEntry
720
- } from "./chunks/studio-7xptrg0j.js";
724
+ } from "./chunks/studio-sbjyc8bt.js";
721
725
  import {
722
726
  deepEqual2,
723
727
  matchChildren
@@ -731,7 +735,7 @@ import {
731
735
  import {
732
736
  entryCollections,
733
737
  collectionOfPath
734
- } from "./chunks/studio-sgdc5pfc.js";
738
+ } from "./chunks/studio-qhhm6hbt.js";
735
739
  import"./chunks/studio-q0a3yk4n.js";
736
740
  import {
737
741
  resolveAssetRef,
@@ -739,7 +743,7 @@ import {
739
743
  assetContextFor,
740
744
  previewAssetSrc,
741
745
  hostAssetDeclarations
742
- } from "./chunks/studio-4m0haseg.js";
746
+ } from "./chunks/studio-nzzpvzx9.js";
743
747
  import {
744
748
  rectOf
745
749
  } from "./chunks/studio-rs76k67r.js";
@@ -753,7 +757,7 @@ import {
753
757
  __preload,
754
758
  __chunks
755
759
  } from "./chunks/studio-5te5tqng.js";
756
- __chunks(import.meta.url,["ry0jhe3j","98f7sr3g","n553f0e1","628t0anh","wrew8zk4","bhy3hb6m","ts9cg1a4","1nq5evsh","m244w9nh","13tj6sex","sw6en4dw","2w1f35qs","fyf63pmy","ny4zc51r","71bv5zn9","5pq32t0q","3btj6st0","0zx14y15","jgesd924","2qbetq73","j0wxk72w","3c33nwr8","ef8fgs3w","fy7q4fe9","7r42c6ca","yxa81f45","az3zd49t","26d7myd1","6ewqv390","y9zedyjn","6nzaktvy","p1dw8wfw","q3x06vmj","79y5sz51","25hkdrkw","d055c37e","rkstz940","5jy81t3s","akbww0j5","erdatzvp","1k325pwf","vz68yn9e","5523bpzt","81390n6f","pm6hgy7r","qahxvnan","3gxv60tn","rpyah2ew","tb3ev01j","8jn5yhyn","cpvb2ed1","esrxgwh6","8qtrpzr3","x3rty6tr","em9nw8eh","d1ja2x9r","18avnhjp","57mf66w2","tjjk7jvk","fabxk6r9","0hqbpbd0","vhv5tgxm","3hxkd92t","s6z853aq","5rt7sqa0","xsykpvsh","kcgff4r0","hhvs4sdg","6xa21ej9","arfpe389","9xxz1q69","7xptrg0j","wqpngpsk","98b3z07n","38emantv","sgdc5pfc","q0a3yk4n","4m0haseg","rs76k67r","r6xmmtfh","5te5tqng","rnyf3f8e","h4nvnjvz","n4j7qxyr","727xh0e3","3qhbg51x","8r62fj6y","srzz83k2","nj7tnjfn","rrgx2dn3","4wp2rn9b","rf7n72mf","d6g50j7s","3wqeas45","d0cgnb6d","ar2gh90g","g79n01v9","mdmyx6s2","d0300636","e1f24eff","tyx2kj6p","xvrfrpkb","4wbb9ct0","7e11jpa9","nqgawfks","jy4m86rv"],[["./studio.js",24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80],["./chunks/publish-panel-98f7sr3g.js",70,67,68,48,34,29,26,32,28,25,33,30,39,40,37,31,24],["./chunks/references-n553f0e1.js",43,25,30,24],["./chunks/notify-628t0anh.js",31],["./chunks/workspace-wrew8zk4.js",26,32,28,33,30,31,24],["./chunks/monaco-buffer-bhy3hb6m.js",32,31],["./chunks/platform-ts9cg1a4.js",30],["./chunks/layers-1nq5evsh.js",39,40,37,31,24],["./chunks/lit-html-m244w9nh.js",40],["./chunks/fs-events-13tj6sex.js",49,43,28,25,30,24],["./chunks/monaco-binding-sw6en4dw.js",81,82],["./chunks/components-2w1f35qs.js",35,28,30,24],["./chunks/cf-account-picker-fyf63pmy.js",30,24,25,31,40,39,37,55,29,68,67,69],["./chunks/ws-client-ny4zc51r.js",82],["./chunks/cf-settings-71bv5zn9.js",68,29,30,31],["./chunks/section-registry-5pq32t0q.js",60],["./chunks/file-ops-3btj6st0.js",47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,25,51,33,30,46,39,40,37,31,24],["./chunks/parse-0zx14y15.js",25,24],["./chunks/iframe-host-jgesd924.js",36,34,35,29,77,26,32,28,25,51,33,30,37,31,24],["./chunks/media-picker-2qbetq73.js",52,42,41,77,26,32,28,25,33,30,39,40,37,31,24],["./chunks/jx-validate-j0wxk72w.js",66],["./chunks/format-host-3c33nwr8.js",33,30],["./chunks/files-ef8fgs3w.js",56,44,55,42,75,54,53,47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,25,51,33,30,46,39,40,37,31,24],["./chunks/extension-sections-fy7q4fe9.js",30,33,60,24,25,31,32,28,26,37,39,57,40,46,58,66,71,54,49,43,48,34,29,50,27,47,53,41,45,36,35,51,76,77],["./chunks/studio-7r42c6ca.js"],["./chunks/studio-yxa81f45.js"],["./chunks/studio-az3zd49t.js",31,32,30,33,24,28,84,80],["./chunks/studio-26d7myd1.js",26,28,34],["./chunks/studio-6ewqv390.js",24],["./chunks/studio-y9zedyjn.js",30,31],["./chunks/studio-6nzaktvy.js"],["./chunks/studio-p1dw8wfw.js"],["./chunks/studio-q3x06vmj.js",31],["./chunks/studio-79y5sz51.js",30,80],["./chunks/studio-25hkdrkw.js",31,30,33,28,26,29,25,80],["./chunks/studio-d055c37e.js",30,28],["./chunks/studio-rkstz940.js",30,24,28,31,32,33,26,34,35,37,51,77,78,79],["./chunks/studio-5jy81t3s.js",24,31,80],["./chunks/studio-akbww0j5.js",30,24,28,35,36,31,32,33,26,37,34,40,39,27,45,57,51,46,52,43,84,78,80],["./chunks/studio-erdatzvp.js",40,37,31],["./chunks/studio-1k325pwf.js"],["./chunks/studio-vz68yn9e.js",25,30,31,28,26,37,77],["./chunks/studio-5523bpzt.js",30,37,41],["./chunks/studio-81390n6f.js",30,25],["./chunks/studio-pm6hgy7r.js",40,25,30,33,28,26,31,41,39,37,42,34,27,55,50,36,78,80],["./chunks/studio-qahxvnan.js",30,24,28,33],["./chunks/studio-3gxv60tn.js",37,39,31,78],["./chunks/studio-rpyah2ew.js",30,24,25,43,31,33,28,26,41,37,39,46,34,48,36,49,50,76],["./chunks/studio-tb3ev01j.js",30,28,31,34,37,39],["./chunks/studio-8jn5yhyn.js",30,43,28],["./chunks/studio-cpvb2ed1.js",40,37,48,31,34,39,27,43],["./chunks/studio-esrxgwh6.js",80],["./chunks/studio-8qtrpzr3.js",30,28,39,31,41,42,77,78],["./chunks/studio-x3rty6tr.js",30,28,31,33,26,49,47,80],["./chunks/studio-em9nw8eh.js",31,30,33,28,26,39,49,25,47,53,41],["./chunks/studio-d1ja2x9r.js",25,31,39,37],["./chunks/studio-18avnhjp.js",40,25,26,39,37,31,28,30,33,49,43,34,29,50,27,47,35,51,44,41,54,46,74,75,80],["./chunks/studio-57mf66w2.js",37,26,24,31,39,46,84],["./chunks/studio-tjjk7jvk.js"],["./chunks/studio-fabxk6r9.js",33,31,28,26,25,37,39,57,53,34,47,75,84,80],["./chunks/studio-0hqbpbd0.js"],["./chunks/studio-vhv5tgxm.js"],["./chunks/studio-3hxkd92t.js",28,37,39,31,26,34,35,36,80],["./chunks/studio-s6z853aq.js",40,24,28,31,32,30,26,34,27,35,37,39,62,25,36,51,38,46,43,74,76,78,80],["./chunks/studio-5rt7sqa0.js",30,28,33,26,39,37,31,56],["./chunks/studio-xsykpvsh.js",24,28,31,26,37,38,39,57,36,46,34,43,62,84],["./chunks/studio-kcgff4r0.js",98,80],["./chunks/studio-hhvs4sdg.js",30,29],["./chunks/studio-6xa21ej9.js",29],["./chunks/studio-arfpe389.js",55,30,68,67,80],["./chunks/studio-9xxz1q69.js",37,48,30,28,31,39,68,67,80],["./chunks/studio-7xptrg0j.js",25,30,31,28,39,57,66,54,36,34],["./chunks/studio-wqpngpsk.js"],["./chunks/studio-98b3z07n.js"],["./chunks/studio-38emantv.js",78],["./chunks/studio-sgdc5pfc.js",28,26,53],["./chunks/studio-q0a3yk4n.js"],["./chunks/studio-4m0haseg.js",30,26,37,28],["./chunks/studio-rs76k67r.js"],["./chunks/studio-r6xmmtfh.js"],["./chunks/studio-5te5tqng.js"],["./chunks/studio-rnyf3f8e.js",82],["./chunks/studio-h4nvnjvz.js"],["./chunks/index-n4j7qxyr.js",81,82,72,84],["./chunks/studio-727xh0e3.js"],["./chunks/editor-3qhbg51x.js",99],["./chunks/monaco-setup-8r62fj6y.js",99,102,58,61,98,79,80],["./chunks/quick-search-srzz83k2.js",64,56,44,55,42,75,54,53,47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,25,51,33,30,46,39,40,37,31,24],["./chunks/adapter-nj7tnjfn.js",51],["./chunks/right-panel-rrgx2dn3.js",65,62,38,52,42,57,45,27,43,36,34,35,29,41,77,26,32,28,25,51,33,30,46,39,40,37,31,24,58],["./chunks/git-panel-4wp2rn9b.js",44,55,42,50,48,27,43,36,34,35,29,41,77,26,32,28,25,51,33,30,39,40,37,31,24],["./chunks/menu-rf7n72mf.js",46,39,40,37,31,24],["./chunks/entry-commands-d6g50j7s.js",59,75,57,53,47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,25,51,33,30,46,39,40,37,31,24,58],["./chunks/content-source-3wqeas45.js",53,47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,25,51,33,30,46,39,40,37,31,24],["./chunks/convert-to-repeater-d0cgnb6d.js",24,28,31,32,30,33,26,40,39,37,36,38,57,58,27,29,34,25,35,51,45,46,52,41,42,43,77],["./chunks/layers-panel-ar2gh90g.js",63,62,38,52,42,57,76,45,27,43,36,34,35,29,41,77,26,32,28,25,51,33,30,46,39,40,37,31,24,58],["./chunks/2020-g79n01v9.js",103,80],["./chunks/index-mdmyx6s2.js",103,80],["./chunks/studio-d0300636.js"],["./chunks/studio-e1f24eff.js"],["./chunks/jsonMode-tyx2kj6p.js",99,104,102],["./chunks/javascript-xvrfrpkb.js",99],["./chunks/studio-4wbb9ct0.js",99,80],["./chunks/studio-7e11jpa9.js",80],["./chunks/studio-nqgawfks.js",99,102],["./chunks/tsMode-jy4m86rv.js",99,104,102]],0);
760
+ __chunks(import.meta.url,["cyppsrqx","5zt840sy","qvvxej7h","628t0anh","t55jdjbx","bhy3hb6m","ts9cg1a4","ff81wthn","m244w9nh","b88z7g4h","sw6en4dw","vj72gqtq","qwkm9zrf","ny4zc51r","71bv5zn9","5pq32t0q","8yhd83xr","0zx14y15","syr0f9sb","cqhhxhhe","j0wxk72w","779sfp2n","hnxqxtsg","3hpcambp","7r42c6ca","yxa81f45","k75n7vhp","8scdew0e","6ewqv390","y9zedyjn","6nzaktvy","p1dw8wfw","q3x06vmj","vw7mzp6z","qk90fgqm","zdn2g6dt","1z1kcjv4","kkqkcp3d","7xnmgv66","vfq8qpjt","1k325pwf","jxp12rnj","syg2tadj","nq5yf5mp","5wt9nvhd","3773086z","aj37eer3","gb13095a","mhhyamxf","g3jevyjt","tqgryxwg","esrxgwh6","e1pgga3k","1knfqgy7","pxbgypmg","qk4bfsq2","b0k5tqgp","js8nv53n","tjjk7jvk","b4s9eykd","0hqbpbd0","vhv5tgxm","93zafjcm","r6nvacqs","a79k90n9","try13h8c","kcgff4r0","hhvs4sdg","6xa21ej9","3rz5md06","wqz6dggm","sbjyc8bt","wqpngpsk","98b3z07n","38emantv","qhhm6hbt","q0a3yk4n","nzzpvzx9","rs76k67r","r6xmmtfh","5te5tqng","rnyf3f8e","h4nvnjvz","n4j7qxyr","727xh0e3","3qhbg51x","8r62fj6y","3748564r","nj7tnjfn","eccz92qt","xwj8fpab","9p2w46gj","234hjnqw","5mex4x1h","n64h8znc","pnnghw12","g79n01v9","mdmyx6s2","d0300636","e1f24eff","tyx2kj6p","xvrfrpkb","4wbb9ct0","7e11jpa9","nqgawfks","jy4m86rv"],[["./studio.js",24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80],["./chunks/publish-panel-5zt840sy.js",70,67,68,48,34,29,26,32,28,33,30,39,40,37,31,25,24],["./chunks/references-qvvxej7h.js",43,30,25,24],["./chunks/notify-628t0anh.js",31],["./chunks/workspace-t55jdjbx.js",26,32,28,33,30,31,24],["./chunks/monaco-buffer-bhy3hb6m.js",32,31],["./chunks/platform-ts9cg1a4.js",30],["./chunks/layers-ff81wthn.js",39,40,37,31,25,24],["./chunks/lit-html-m244w9nh.js",40],["./chunks/fs-events-b88z7g4h.js",49,43,28,30,25,24],["./chunks/monaco-binding-sw6en4dw.js",81,82],["./chunks/components-vj72gqtq.js",35,28,30,24],["./chunks/cf-account-picker-qwkm9zrf.js",30,24,25,31,40,39,37,55,29,68,67,69],["./chunks/ws-client-ny4zc51r.js",82],["./chunks/cf-settings-71bv5zn9.js",68,29,30,31],["./chunks/section-registry-5pq32t0q.js",60],["./chunks/file-ops-8yhd83xr.js",47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,51,33,30,46,39,40,37,31,25,24],["./chunks/parse-0zx14y15.js",25,24],["./chunks/iframe-host-syr0f9sb.js",36,34,35,29,77,26,32,28,51,33,30,37,31,25,24],["./chunks/media-picker-cqhhxhhe.js",52,42,41,77,26,32,28,33,30,39,40,37,31,25,24],["./chunks/jx-validate-j0wxk72w.js",66],["./chunks/format-host-779sfp2n.js",33,30],["./chunks/files-hnxqxtsg.js",56,44,55,42,75,54,53,47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,51,33,30,46,39,40,37,31,25,24],["./chunks/extension-sections-3hpcambp.js",30,33,60,24,25,31,32,28,26,37,39,57,40,46,58,66,71,54,49,43,48,34,29,50,27,47,53,41,45,36,35,51,76,77],["./chunks/studio-7r42c6ca.js"],["./chunks/studio-yxa81f45.js"],["./chunks/studio-k75n7vhp.js",31,32,30,33,24,28,84,80],["./chunks/studio-8scdew0e.js",26,28,34],["./chunks/studio-6ewqv390.js",24],["./chunks/studio-y9zedyjn.js",30,31],["./chunks/studio-6nzaktvy.js"],["./chunks/studio-p1dw8wfw.js"],["./chunks/studio-q3x06vmj.js",31],["./chunks/studio-vw7mzp6z.js",30,80],["./chunks/studio-qk90fgqm.js",31,30,33,28,26,29,25,80],["./chunks/studio-zdn2g6dt.js",30,28],["./chunks/studio-1z1kcjv4.js",30,24,28,31,32,33,26,34,35,37,51,77,78,79],["./chunks/studio-kkqkcp3d.js",24,31,80],["./chunks/studio-7xnmgv66.js",30,24,28,35,36,31,32,33,26,37,34,40,39,27,45,57,51,46,52,43,84,78,80],["./chunks/studio-vfq8qpjt.js",40,37,31,25],["./chunks/studio-1k325pwf.js"],["./chunks/studio-jxp12rnj.js",25,30,31,28,26,37,77],["./chunks/studio-syg2tadj.js",30,37,41],["./chunks/studio-nq5yf5mp.js",30,25],["./chunks/studio-5wt9nvhd.js",40,25,30,33,28,26,31,41,39,37,42,34,27,55,50,36,78,80],["./chunks/studio-3773086z.js",30,24,28,33],["./chunks/studio-aj37eer3.js",37,39,31,78],["./chunks/studio-gb13095a.js",30,24,25,43,31,33,28,26,41,37,39,46,34,48,36,49,50,76],["./chunks/studio-mhhyamxf.js",30,28,31,34,37,39],["./chunks/studio-g3jevyjt.js",30,43,28],["./chunks/studio-tqgryxwg.js",40,37,48,31,34,39,27,43],["./chunks/studio-esrxgwh6.js",80],["./chunks/studio-e1pgga3k.js",30,28,39,31,41,42,77,78],["./chunks/studio-1knfqgy7.js",30,28,31,33,26,49,47,80],["./chunks/studio-pxbgypmg.js",31,30,33,28,26,39,25,49,47,53,41],["./chunks/studio-qk4bfsq2.js",25,31,39,37],["./chunks/studio-b0k5tqgp.js",40,25,26,39,37,31,28,30,33,49,43,34,29,50,27,47,35,51,44,41,54,46,74,75,80],["./chunks/studio-js8nv53n.js",37,26,24,31,39,46,84],["./chunks/studio-tjjk7jvk.js"],["./chunks/studio-b4s9eykd.js",33,31,28,26,25,37,39,57,53,34,47,75,84,80],["./chunks/studio-0hqbpbd0.js"],["./chunks/studio-vhv5tgxm.js"],["./chunks/studio-93zafjcm.js",28,37,39,31,26,34,35,36,80],["./chunks/studio-r6nvacqs.js",40,24,28,31,32,30,26,34,27,35,37,39,62,25,36,51,38,46,43,74,76,78,80],["./chunks/studio-a79k90n9.js",30,28,33,26,39,37,31,56],["./chunks/studio-try13h8c.js",24,28,31,26,37,38,39,57,36,46,34,43,62,84],["./chunks/studio-kcgff4r0.js",98,80],["./chunks/studio-hhvs4sdg.js",30,29],["./chunks/studio-6xa21ej9.js",29],["./chunks/studio-3rz5md06.js",55,30,68,67,80],["./chunks/studio-wqz6dggm.js",37,48,30,28,31,39,68,67,80],["./chunks/studio-sbjyc8bt.js",25,30,31,28,39,57,66,54,36,34],["./chunks/studio-wqpngpsk.js"],["./chunks/studio-98b3z07n.js"],["./chunks/studio-38emantv.js",78],["./chunks/studio-qhhm6hbt.js",28,26,53],["./chunks/studio-q0a3yk4n.js"],["./chunks/studio-nzzpvzx9.js",30,26,37,28],["./chunks/studio-rs76k67r.js"],["./chunks/studio-r6xmmtfh.js"],["./chunks/studio-5te5tqng.js"],["./chunks/studio-rnyf3f8e.js",82],["./chunks/studio-h4nvnjvz.js"],["./chunks/index-n4j7qxyr.js",81,82,72,84],["./chunks/studio-727xh0e3.js"],["./chunks/editor-3qhbg51x.js",99],["./chunks/monaco-setup-8r62fj6y.js",99,102,58,61,98,79,80],["./chunks/quick-search-3748564r.js",64,56,44,55,42,75,54,53,47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,51,33,30,46,39,40,37,31,25,24],["./chunks/adapter-nj7tnjfn.js",51],["./chunks/right-panel-eccz92qt.js",65,62,38,52,42,57,45,27,43,36,34,35,29,41,77,26,32,28,51,33,30,46,39,40,37,31,25,24,58],["./chunks/git-panel-xwj8fpab.js",44,55,42,50,48,27,43,36,34,35,29,41,77,26,32,28,51,33,30,39,40,37,31,25,24],["./chunks/menu-9p2w46gj.js",46,39,40,37,31,25,24],["./chunks/entry-commands-234hjnqw.js",59,75,57,53,47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,51,33,30,46,39,40,37,31,25,24,58],["./chunks/content-source-5mex4x1h.js",53,47,49,76,45,50,48,27,43,36,34,35,29,41,77,26,32,28,51,33,30,46,39,40,37,31,25,24],["./chunks/convert-to-repeater-n64h8znc.js",24,28,31,32,30,33,26,40,39,37,25,36,38,57,58,27,29,34,35,51,45,46,52,41,42,43,77],["./chunks/layers-panel-pnnghw12.js",63,62,38,52,42,57,76,45,27,43,36,34,35,29,41,77,26,32,28,51,33,30,46,39,40,37,31,25,24,58],["./chunks/2020-g79n01v9.js",103,80],["./chunks/index-mdmyx6s2.js",103,80],["./chunks/studio-d0300636.js"],["./chunks/studio-e1f24eff.js"],["./chunks/jsonMode-tyx2kj6p.js",99,104,102],["./chunks/javascript-xvrfrpkb.js",99],["./chunks/studio-4wbb9ct0.js",99,80],["./chunks/studio-7e11jpa9.js",80],["./chunks/studio-nqgawfks.js",99,102],["./chunks/tsMode-jy4m86rv.js",99,104,102]],0);
757
761
 
758
762
  // ../../node_modules/ms/index.js
759
763
  var require_ms = __commonJS(function(exports, module) {
@@ -1723,7 +1727,7 @@ async function stepDiffAndReveal(paneId, delta) {
1723
1727
  if (!step) {
1724
1728
  return;
1725
1729
  }
1726
- const { hostForCanvas, measureInCanvas, revealCanvasPathIn } = await (__preload("jgesd924"), import("./chunks/iframe-host-jgesd924.js"));
1730
+ const { hostForCanvas, measureInCanvas, revealCanvasPathIn } = await (__preload("syr0f9sb"), import("./chunks/iframe-host-syr0f9sb.js"));
1727
1731
  const measured = await Promise.all([
1728
1732
  step.originalPath && original ? measureInCanvas(original, step.originalPath) : null,
1729
1733
  step.currentPath && current ? measureInCanvas(current, step.currentPath) : null
@@ -24711,8 +24715,7 @@ function openTrailing(host, anchor) {
24711
24715
  return;
24712
24716
  }
24713
24717
  if (_drawing.get(host)?.mode === "derivation") {
24714
- const registry = activeRegistry();
24715
- registry?.run("pane.unsplit");
24718
+ runActiveReported("pane.unsplit", undefined, "Tabs");
24716
24719
  return;
24717
24720
  }
24718
24721
  openOverflowMenu(pane, tabLabels(pane), anchor);
@@ -24836,7 +24839,7 @@ function placedTabItems(tab) {
24836
24839
  ...reason === undefined ? {
24837
24840
  disabled: false,
24838
24841
  run: () => {
24839
- registry.run(command.id, args);
24842
+ runReported(registry, command.id, args, "Tabs");
24840
24843
  }
24841
24844
  } : { disabled: true, requires: reason }
24842
24845
  });
@@ -26814,7 +26817,7 @@ function removeEntry(key) {
26814
26817
  }
26815
26818
  var _mediaPicker = null;
26816
26819
  function mediaPicker() {
26817
- _mediaPicker ??= (__preload("2qbetq73"), import("./chunks/media-picker-2qbetq73.js"));
26820
+ _mediaPicker ??= (__preload("cqhhxhhe"), import("./chunks/media-picker-cqhhxhhe.js"));
26818
26821
  return _mediaPicker;
26819
26822
  }
26820
26823
  var ACTIONS = {
@@ -28003,7 +28006,7 @@ function makeActions(card) {
28003
28006
  }
28004
28007
  var _mediaPicker2 = null;
28005
28008
  function mediaPicker2() {
28006
- _mediaPicker2 ??= (__preload("2qbetq73"), import("./chunks/media-picker-2qbetq73.js"));
28009
+ _mediaPicker2 ??= (__preload("cqhhxhhe"), import("./chunks/media-picker-cqhhxhhe.js"));
28007
28010
  return _mediaPicker2;
28008
28011
  }
28009
28012
  // src/surfaces/canvas-stage.json
@@ -31352,14 +31355,7 @@ function runByName(id, args = {}) {
31352
31355
  if (!registry?.get(id)) {
31353
31356
  return;
31354
31357
  }
31355
- const report = (error) => {
31356
- notify2("error", errorMessage2(error), { source: "Languages" });
31357
- };
31358
- try {
31359
- Promise.resolve(registry.run(id, args)).catch(report);
31360
- } catch (error) {
31361
- report(error);
31362
- }
31358
+ runReported(registry, id, args, "Languages");
31363
31359
  }
31364
31360
  function projectRow(row, i18n) {
31365
31361
  const rowPath = rowSourcePath(row, i18n);
@@ -32417,7 +32413,7 @@ async function onAddPackage() {
32417
32413
  sync2();
32418
32414
  try {
32419
32415
  await getPlatform2().addPackage(name);
32420
- const { loadComponentRegistry } = await (__preload("2w1f35qs"), import("./chunks/components-2w1f35qs.js"));
32416
+ const { loadComponentRegistry } = await (__preload("vj72gqtq"), import("./chunks/components-vj72gqtq.js"));
32421
32417
  await loadComponentRegistry();
32422
32418
  context()?.renderLeftPanel();
32423
32419
  } catch (error) {
@@ -32435,7 +32431,7 @@ async function onRemovePackage(pkg) {
32435
32431
  try {
32436
32432
  await getPlatform2().removePackage(pkg);
32437
32433
  const updated = removePackageElements(siteElements(), pkg);
32438
- const { loadComponentRegistry } = await (__preload("2w1f35qs"), import("./chunks/components-2w1f35qs.js"));
32434
+ const { loadComponentRegistry } = await (__preload("vj72gqtq"), import("./chunks/components-vj72gqtq.js"));
32439
32435
  await loadComponentRegistry();
32440
32436
  await updateSiteConfig({ $elements: updated });
32441
32437
  context()?.renderLeftPanel();
@@ -33120,7 +33116,7 @@ function groupProblems(records = problems2) {
33120
33116
  return groups;
33121
33117
  }
33122
33118
  function openProblemPath(path) {
33123
- (__preload("ef8fgs3w"), import("./chunks/files-ef8fgs3w.js")).then((m) => m.openFileInTab(path));
33119
+ (__preload("hnxqxtsg"), import("./chunks/files-hnxqxtsg.js")).then((m) => m.openFileInTab(path));
33124
33120
  }
33125
33121
  function projectRow2(record) {
33126
33122
  const id = record.action;
@@ -33168,7 +33164,7 @@ var ACTIONS5 = {
33168
33164
  if (record?.action === undefined || !registry) {
33169
33165
  return;
33170
33166
  }
33171
- registry.run(record.action, record.actionArgs);
33167
+ runReported(registry, record.action, record.actionArgs, "Problems");
33172
33168
  }
33173
33169
  };
33174
33170
  var _standing = null;
@@ -33755,7 +33751,7 @@ function toggleShellDock(registry, dock) {
33755
33751
  }
33756
33752
  function runIfPresent(registry, id, args) {
33757
33753
  if (registry.get(id) && registry.isEnabled(id)) {
33758
- registry.run(id, args);
33754
+ runReported(registry, id, args, "Keyboard");
33759
33755
  }
33760
33756
  }
33761
33757
  var zenRestore = null;
@@ -34046,23 +34042,12 @@ function registerStudioCommands(registry, hooks, stageContext) {
34046
34042
  registry.registerAll(canvasCommands(pointer));
34047
34043
  }
34048
34044
  function dispatchKey(registry, event) {
34049
- const commandId = claimChord(registry, event);
34045
+ const commandId = registry.handleKeyEvent(event, keyScopeStack(registry.context()));
34050
34046
  if (commandId) {
34051
34047
  event.preventDefault();
34052
34048
  }
34053
34049
  return commandId;
34054
34050
  }
34055
- function claimChord(registry, event) {
34056
- const stack = keyScopeStack(registry.context());
34057
- try {
34058
- return registry.handleKeyEvent(event, stack);
34059
- } catch (error) {
34060
- if (error instanceof CommandUnavailableError) {
34061
- return error.commandId;
34062
- }
34063
- throw error;
34064
- }
34065
- }
34066
34051
  function initShortcuts(registry, stageContext) {
34067
34052
  setActiveRegistry(registry);
34068
34053
  _stageContext = stageContext;
@@ -37559,7 +37544,6 @@ function registerAiTools(registry, {
37559
37544
  validate = validateDoc2,
37560
37545
  saveFile,
37561
37546
  renderCheck,
37562
- openDocument,
37563
37547
  projectStyle,
37564
37548
  getProjectStyle,
37565
37549
  findOpenTab,
@@ -38020,52 +38004,6 @@ ${formatted}`
38020
38004
  }
38021
38005
  }
38022
38006
  }));
38023
- registry.register(createToolDefinition({
38024
- name: "open_document",
38025
- description: "Switch the active document to another file in the project. After opening, all " + "tools (read_document, set_property, add_child, etc.) operate on the newly-active " + "document. Use this to iteratively refine pages or components after creating them " + "with create_page or create_component.",
38026
- parameters: {
38027
- type: "object",
38028
- properties: {
38029
- path: {
38030
- type: "string",
38031
- description: 'File path relative to the project root, e.g. "pages/about.json" or ' + '"components/nav-bar.json". Must be an existing file.'
38032
- }
38033
- },
38034
- required: ["path"]
38035
- },
38036
- async execute(args) {
38037
- if (!openDocument) {
38038
- return {
38039
- success: false,
38040
- error: "File navigation is not available in this environment."
38041
- };
38042
- }
38043
- const { path: relPath } = args;
38044
- try {
38045
- await openDocument(relPath);
38046
- const tab = getTab();
38047
- if (!tab) {
38048
- return {
38049
- success: false,
38050
- error: `File "${relPath}" could not be opened — no active tab after navigation.`
38051
- };
38052
- }
38053
- if (isBatching()) {
38054
- endBatch();
38055
- beginBatch(tab);
38056
- }
38057
- return {
38058
- success: true,
38059
- summary: `Switched to "${relPath}". All tools now operate on this document.`
38060
- };
38061
- } catch (error) {
38062
- return {
38063
- success: false,
38064
- error: `Failed to open "${relPath}": ${error instanceof Error ? error.message : String(error)}`
38065
- };
38066
- }
38067
- }
38068
- }));
38069
38007
  }
38070
38008
 
38071
38009
  // src/services/ai-turn-signal.ts
@@ -38206,6 +38144,13 @@ function registerAskTool(registry) {
38206
38144
  // src/services/ai-command-tools.ts
38207
38145
  var SELECTOR = "selection.setPaths";
38208
38146
  var EMPTY_ARGS = argsSchema({});
38147
+ function hasEmptyRequiredEnum(args) {
38148
+ const shape = args ?? EMPTY_ARGS;
38149
+ return (shape.required ?? []).some((key) => {
38150
+ const declared = shape.properties?.[key]?.enum;
38151
+ return Array.isArray(declared) && declared.length === 0;
38152
+ });
38153
+ }
38209
38154
  function pathsProperty(registry) {
38210
38155
  const args = registry.get(SELECTOR)?.args;
38211
38156
  return args?.properties?.paths;
@@ -38227,7 +38172,8 @@ function selectionAdvertised(registry) {
38227
38172
  return inCanvas(registry.context()) && registry.get(SELECTOR) !== undefined && registry.isEnabled(SELECTOR);
38228
38173
  }
38229
38174
  function advertised(registry, command) {
38230
- return command.level === "selection" ? selectionAdvertised(registry) : registry.isEnabled(command.id);
38175
+ const open = command.level === "selection" ? selectionAdvertised(registry) : registry.isEnabled(command.id);
38176
+ return open && !hasEmptyRequiredEnum(command.args);
38231
38177
  }
38232
38178
  function projected(registry) {
38233
38179
  return registry.list().filter((command) => command.aiTool !== undefined);
@@ -38280,6 +38226,10 @@ function commandToolBlurbs(registry) {
38280
38226
  function normaliseReport(report) {
38281
38227
  return typeof report === "string" ? { summary: report } : report;
38282
38228
  }
38229
+ function projectConfigRef() {
38230
+ const config = projectState?.projectConfig;
38231
+ return config ? toRaw(config) : null;
38232
+ }
38283
38233
  function defaultPaths(command, tab) {
38284
38234
  if (command.undo === "document") {
38285
38235
  return [tab?.documentPath ?? "(untitled)"];
@@ -38312,6 +38262,7 @@ function createCommandToolRegistry(deps) {
38312
38262
  const args = received;
38313
38263
  const tab = command.undo === "document" ? deps.getTab() : null;
38314
38264
  const rootBefore = tab ? toRaw(tab.doc.document) : null;
38265
+ const configBefore = command.undo === "project" ? projectConfigRef() : null;
38315
38266
  let snapshot = null;
38316
38267
  let before;
38317
38268
  try {
@@ -38337,17 +38288,24 @@ function createCommandToolRegistry(deps) {
38337
38288
  success: false
38338
38289
  };
38339
38290
  }
38291
+ const projectUnchanged = command.undo === "project" && projectConfigRef() === configBefore;
38340
38292
  const after = registry.context();
38341
38293
  let report;
38342
38294
  try {
38343
38295
  report = normaliseReport(tool.report({ after, args, before }));
38344
38296
  } catch (error) {
38345
- fileLedger(command, tab);
38297
+ fileLedger(command, tab, projectUnchanged ? [] : undefined);
38346
38298
  const message = error instanceof Error ? error.message : String(error);
38347
38299
  return { error: `${command.title} ran, but its report failed: ${message}`, success: false };
38348
38300
  }
38349
- fileLedger(command, tab, report.wrote);
38350
- let { summary } = report;
38301
+ let { summary, wrote } = report;
38302
+ if (projectUnchanged) {
38303
+ wrote = [];
38304
+ if (report.wrote === undefined || report.wrote.length > 0) {
38305
+ summary = `${command.title} changed nothing: project.json is exactly as it was.`;
38306
+ }
38307
+ }
38308
+ fileLedger(command, tab, wrote);
38351
38309
  if (tab && snapshot) {
38352
38310
  const verdict = await reportDocumentWrite(tab, snapshot, summary, deps);
38353
38311
  if (!verdict.success) {
@@ -38706,7 +38664,7 @@ ${formatted}`
38706
38664
  };
38707
38665
  }
38708
38666
  if (projectConfig) {
38709
- await onProjectConfigWritten?.(projectConfig);
38667
+ await onProjectConfigWritten?.(projectConfig, content);
38710
38668
  } else if (openTab) {
38711
38669
  await reloadTab(relPath);
38712
38670
  }
@@ -39443,11 +39401,6 @@ var AI_TOOL_TIERS = [
39443
39401
  tier: "project",
39444
39402
  blurb: "create_page(path, content) — create a new .json page file on disk."
39445
39403
  },
39446
- {
39447
- name: "open_document",
39448
- tier: "project",
39449
- blurb: "open_document(path) — open a file on the canvas as the active document; the document tools then operate on it. Use when the user should SEE the page, or for iterative visual refinement."
39450
- },
39451
39404
  {
39452
39405
  name: "read_document",
39453
39406
  tier: "document",
@@ -40476,7 +40429,6 @@ function createDocumentAssistant() {
40476
40429
  await plat.writeFile(relPath, content);
40477
40430
  },
40478
40431
  renderCheck,
40479
- openDocument: openFileInTab2,
40480
40432
  getProjectStyle,
40481
40433
  findOpenTab,
40482
40434
  reloadTab: reloadFileInTab2
@@ -40502,8 +40454,8 @@ function createDocumentAssistant() {
40502
40454
  moveSession("", root, sessionId);
40503
40455
  }
40504
40456
  },
40505
- onProjectConfigWritten: async (config) => {
40506
- await adoptProjectConfig(config);
40457
+ onProjectConfigWritten: async (config, text) => {
40458
+ await adoptProjectConfig(config, text);
40507
40459
  refreshExtensionUi2(getPlatform2());
40508
40460
  }
40509
40461
  });
@@ -40512,7 +40464,7 @@ function createDocumentAssistant() {
40512
40464
  "no-project": "no project to be open (it bootstraps one)",
40513
40465
  project: "an open project",
40514
40466
  document: "an open document (use open_document first)",
40515
- "document-tree": "an open document whose element tree the canvas is editing — Project Settings and the " + "grid editors are documents, but not trees to restructure"
40467
+ "document-tree": "an open document whose element tree the canvas is editing — Project Settings and the " + "grid editors are documents, but not trees to restructure, and a page left in Code view " + "returns to the canvas with set_canvas_mode"
40516
40468
  };
40517
40469
  const treeEditable = () => {
40518
40470
  const registry = activeRegistry();
@@ -41327,7 +41279,7 @@ function createManagedConnect(opts) {
41327
41279
  return;
41328
41280
  }
41329
41281
  if (!outcome.connection.accountId) {
41330
- const { openCfAccountPicker } = await (__preload("fyf63pmy"), import("./chunks/cf-account-picker-fyf63pmy.js"));
41282
+ const { openCfAccountPicker } = await (__preload("qwkm9zrf"), import("./chunks/cf-account-picker-qwkm9zrf.js"));
41331
41283
  if (!await openCfAccountPicker()) {
41332
41284
  connectError = "Cloudflare is connected, but no account is chosen yet — pick one to finish setting up the assistant.";
41333
41285
  return;
@@ -56872,7 +56824,7 @@ function renderAiPanel() {
56872
56824
  function runCommand(id) {
56873
56825
  const registry = activeRegistry();
56874
56826
  if (registry?.isEnabled(id)) {
56875
- registry.run(id);
56827
+ runReported(registry, id, undefined, "Assistant");
56876
56828
  }
56877
56829
  }
56878
56830
  function watchAssistant() {
@@ -57183,71 +57135,6 @@ function assistantCommands() {
57183
57135
  ];
57184
57136
  }
57185
57137
 
57186
- // ../schema/src/component-meta.ts
57187
- function collectSlotDefs(node, out = []) {
57188
- if (!node || typeof node !== "object" || Array.isArray(node)) {
57189
- return out;
57190
- }
57191
- const el = node;
57192
- if (el.tagName === "slot") {
57193
- const attrs = el.attributes;
57194
- const rawName = attrs?.name;
57195
- const name = typeof rawName === "string" ? rawName.trim() : "";
57196
- const { children } = el;
57197
- out.push({
57198
- name,
57199
- ...Array.isArray(children) && children.length > 0 ? { fallback: children } : {}
57200
- });
57201
- }
57202
- if (Array.isArray(el.children)) {
57203
- for (const c of el.children) {
57204
- collectSlotDefs(c, out);
57205
- }
57206
- }
57207
- return out;
57208
- }
57209
- function isPropEntry(def) {
57210
- if (def == null) {
57211
- return false;
57212
- }
57213
- if (typeof def !== "object") {
57214
- return true;
57215
- }
57216
- const obj = def;
57217
- return !obj.$prototype && !obj.$handler && !obj.$compute;
57218
- }
57219
- function componentMetaFrom(doc, path) {
57220
- if (!doc || typeof doc !== "object" || Array.isArray(doc)) {
57221
- return null;
57222
- }
57223
- const content = doc;
57224
- const { tagName } = content;
57225
- if (typeof tagName !== "string" || !tagName.includes("-")) {
57226
- return null;
57227
- }
57228
- const slots = collectSlotDefs(content);
57229
- const state = content.state ?? {};
57230
- return {
57231
- $id: typeof content.$id === "string" && content.$id ? content.$id : null,
57232
- hasElements: Array.isArray(content.$elements) && content.$elements.length > 0,
57233
- path,
57234
- props: Object.entries(state).filter(([, def]) => isPropEntry(def)).map(([name, def]) => {
57235
- if (typeof def !== "object" || def === null) {
57236
- return { default: def, name, type: typeof def };
57237
- }
57238
- const obj = def;
57239
- return {
57240
- default: obj.default,
57241
- format: obj.format,
57242
- name,
57243
- type: obj.type
57244
- };
57245
- }),
57246
- ...slots.length > 0 ? { slots } : {},
57247
- tagName
57248
- };
57249
- }
57250
-
57251
57138
  // src/services/import-client.ts
57252
57139
  var IMPORT_WARNING_PHASE = "warning";
57253
57140
  async function streamImport(endpoint, opts, onProgress, signal, onReady) {
@@ -60938,16 +60825,7 @@ function runRow(id, args) {
60938
60825
  if (!registry) {
60939
60826
  return;
60940
60827
  }
60941
- let result;
60942
- try {
60943
- result = registry.run(id, args);
60944
- } catch (error) {
60945
- notify2.error(errorMessage2(error), { source: id });
60946
- return;
60947
- }
60948
- Promise.resolve(result).catch((error) => {
60949
- notify2.error(errorMessage2(error), { source: id });
60950
- });
60828
+ runReported(registry, id, args, "Settings");
60951
60829
  }
60952
60830
  function buildSettingsMenuRows(registry) {
60953
60831
  const commands = [...registry.forPlacement(SETTINGS_MENU_PLACEMENT)].toSorted((a, b) => LEVELS.indexOf(a.level) - LEVELS.indexOf(b.level));
@@ -61517,7 +61395,7 @@ var commandbar_default = {
61517
61395
  gap: "2px",
61518
61396
  flexShrink: "0"
61519
61397
  },
61520
- '& [part="layout"], & [part="layout-add"]': {
61398
+ '& [part="layout"]': {
61521
61399
  padding: "2px var(--jx-space-3)",
61522
61400
  border: "none",
61523
61401
  borderRadius: "var(--jx-radius-sm)",
@@ -61540,9 +61418,6 @@ var commandbar_default = {
61540
61418
  color: "var(--jx-fg)",
61541
61419
  background: "var(--jx-hover-bg)"
61542
61420
  },
61543
- '& [part="layout-add"]': {
61544
- padding: "2px var(--jx-space-2)"
61545
- },
61546
61421
  '& [part="center"]': {
61547
61422
  display: "flex",
61548
61423
  alignItems: "center",
@@ -61918,14 +61793,16 @@ var commandbar_default = {
61918
61793
  }
61919
61794
  },
61920
61795
  {
61921
- tagName: "button",
61796
+ tagName: "jx-action-button",
61797
+ $props: {
61798
+ label: "Save layout",
61799
+ hint: "Save the current arrangement as a layout",
61800
+ icon: "plus",
61801
+ size: "sm"
61802
+ },
61922
61803
  attributes: {
61923
- part: "layout-add",
61924
- type: "button",
61925
- title: "Save the current arrangement as a layout",
61926
- "aria-label": "Save layout"
61804
+ part: "layout-add"
61927
61805
  },
61928
- textContent: "+",
61929
61806
  onclick: {
61930
61807
  $prototype: "Function",
61931
61808
  body: [
@@ -62096,6 +61973,9 @@ var commandbar_default = {
62096
61973
  label: {
62097
61974
  $ref: "$map/item/title"
62098
61975
  },
61976
+ hint: {
61977
+ $ref: "$map/item/tooltip"
61978
+ },
62099
61979
  disabled: {
62100
61980
  $ref: "$map/item/disabled"
62101
61981
  },
@@ -62103,8 +61983,7 @@ var commandbar_default = {
62103
61983
  quiet: true
62104
61984
  },
62105
61985
  attributes: {
62106
- "data-command-id": "${$map.item.id}",
62107
- title: "${$map.item.tooltip}"
61986
+ "data-command-id": "${$map.item.id}"
62108
61987
  },
62109
61988
  onclick: {
62110
61989
  $prototype: "Function",
@@ -62651,13 +62530,13 @@ async function saveLayoutPrompt(registry) {
62651
62530
  placeholder: "Layout name"
62652
62531
  });
62653
62532
  if (name) {
62654
- await registry.run("view.saveLayout", { name });
62533
+ await runReported(registry, "view.saveLayout", { name }, "Command Bar");
62655
62534
  }
62656
62535
  }
62657
62536
  async function renameLayoutPrompt(registry, layout, current) {
62658
62537
  const name = await showPromptDialog2("Rename layout", { confirmLabel: "Rename", value: current });
62659
62538
  if (name) {
62660
- await registry.run("view.renameLayout", { layout, name });
62539
+ await runReported(registry, "view.renameLayout", { layout, name }, "Command Bar");
62661
62540
  }
62662
62541
  }
62663
62542
  function windowControls() {
@@ -62782,7 +62661,7 @@ function openStudioMenu(opener) {
62782
62661
  rows: overflowRows(registry),
62783
62662
  run: (id) => {
62784
62663
  if (registry.isEnabled(id)) {
62785
- registry.run(id);
62664
+ runReported(registry, id, undefined, "Command Bar");
62786
62665
  }
62787
62666
  }
62788
62667
  });
@@ -62819,7 +62698,7 @@ function state4() {
62819
62698
  run: (id) => {
62820
62699
  const registry = activeRegistry();
62821
62700
  if (registry?.isEnabled(id)) {
62822
- registry.run(id);
62701
+ runReported(registry, id, undefined, "Command Bar");
62823
62702
  }
62824
62703
  },
62825
62704
  saveLayout: () => {
@@ -62830,7 +62709,7 @@ function state4() {
62830
62709
  },
62831
62710
  segments: [],
62832
62711
  setLayout: (id) => {
62833
- activeRegistry()?.run("view.setLayout", { layout: id });
62712
+ runActiveReported("view.setLayout", { layout: id }, "Command Bar");
62834
62713
  },
62835
62714
  windowControl: (action) => {
62836
62715
  windowControls()?.[action]();
@@ -76214,7 +76093,7 @@ async function openProjectSettings(section) {
76214
76093
  showSettingsDocument();
76215
76094
  notifySettingsDocument2();
76216
76095
  try {
76217
- const { syncExtensionSettingsSections } = await (__preload("fy7q4fe9"), import("./chunks/extension-sections-fy7q4fe9.js"));
76096
+ const { syncExtensionSettingsSections } = await (__preload("3hpcambp"), import("./chunks/extension-sections-3hpcambp.js"));
76218
76097
  await syncExtensionSettingsSections();
76219
76098
  } catch (error) {
76220
76099
  notify2.warn(`Could not load extension settings sections — ${errorMessage2(error)}`, {
@@ -76624,9 +76503,9 @@ function openAboutSurface(options) {
76624
76503
 
76625
76504
  // src/version.ts
76626
76505
  var APP_NAME = "Jx Studio";
76627
- var VERSION = "5.0.0";
76628
- var BUILD_DATE = "2026-09-14T12:27:21.759Z";
76629
- var GIT_COMMIT = "5d6813f";
76506
+ var VERSION = "5.1.0";
76507
+ var BUILD_DATE = "2026-09-14T22:36:33.220Z";
76508
+ var GIT_COMMIT = "ea2a10c";
76630
76509
  var LINKS = {
76631
76510
  github: "https://github.com/jxsuite/jx",
76632
76511
  docs: "https://github.com/jxsuite/jx#readme",
@@ -77034,9 +76913,9 @@ function withExtension(path, ext) {
77034
76913
  return current === "" ? `${path}${ext}` : `${path.slice(0, path.length - current.length)}${ext}`;
77035
76914
  }
77036
76915
  async function readDocument(path, source) {
77037
- const { formatForPath } = await (__preload("3c33nwr8"), import("./chunks/format-host-3c33nwr8.js"));
76916
+ const { formatForPath } = await (__preload("779sfp2n"), import("./chunks/format-host-779sfp2n.js"));
77038
76917
  if (formatForPath(path)) {
77039
- const { parseSourceForPath } = await (__preload("3btj6st0"), import("./chunks/file-ops-3btj6st0.js"));
76918
+ const { parseSourceForPath } = await (__preload("8yhd83xr"), import("./chunks/file-ops-8yhd83xr.js"));
77040
76919
  const parsed = await parseSourceForPath(path, source);
77041
76920
  return { document: parsed.document, frontmatter: parsed.frontmatter };
77042
76921
  }
@@ -77047,7 +76926,7 @@ async function writeDocument(targetExt, document2, frontmatter) {
77047
76926
  if (targetExt === ".json") {
77048
76927
  return serializeJson(merged, null);
77049
76928
  }
77050
- const { formatByExtension, formatSerialize } = await (__preload("3c33nwr8"), import("./chunks/format-host-3c33nwr8.js"));
76929
+ const { formatByExtension, formatSerialize } = await (__preload("779sfp2n"), import("./chunks/format-host-779sfp2n.js"));
77051
76930
  const format = formatByExtension(targetExt, "serialize");
77052
76931
  if (!format) {
77053
76932
  throw new Error(`No installed format writes ${targetExt} files.`);
@@ -77102,7 +76981,7 @@ async function buildPlan(path, source, targetExt) {
77102
76981
  if (!await readsBackIdentically(targetPath, text)) {
77103
76982
  lines.push("This file will not read back identically after conversion.");
77104
76983
  }
77105
- const { loadUsages, usageWarning } = await (__preload("n553f0e1"), import("./chunks/references-n553f0e1.js"));
76984
+ const { loadUsages, usageWarning } = await (__preload("qvvxej7h"), import("./chunks/references-qvvxej7h.js"));
77106
76985
  const sentence = usageWarning(await loadUsages({ path }), "convert");
77107
76986
  if (sentence !== null) {
77108
76987
  lines.push(sentence);
@@ -77117,13 +76996,13 @@ async function convertFile(path, targetExt) {
77117
76996
  notify.error(message, { detail, path, source: "Convert" });
77118
76997
  return null;
77119
76998
  };
77120
- const { loadFormats } = await (__preload("3c33nwr8"), import("./chunks/format-host-3c33nwr8.js"));
76999
+ const { loadFormats } = await (__preload("779sfp2n"), import("./chunks/format-host-779sfp2n.js"));
77121
77000
  await loadFormats();
77122
77001
  const targets = convertTargets(path);
77123
77002
  if (targets.length === 0) {
77124
77003
  return fail(`${path} cannot be converted to another format.`, CANNOT_CONVERT);
77125
77004
  }
77126
- const { workspace } = await (__preload("wrew8zk4"), import("./chunks/workspace-wrew8zk4.js"));
77005
+ const { workspace } = await (__preload("t55jdjbx"), import("./chunks/workspace-t55jdjbx.js"));
77127
77006
  const { commitTabBuffers } = await (__preload("bhy3hb6m"), import("./chunks/monaco-buffer-bhy3hb6m.js"));
77128
77007
  const openTabEntry = [...workspace.tabs.values()].find((tab) => tab.documentPath === path);
77129
77008
  if (openTabEntry) {
@@ -77161,7 +77040,7 @@ async function convertFile(path, targetExt) {
77161
77040
  if (plan.blocker !== null) {
77162
77041
  return fail(`${path} cannot be converted to ${chosen}.`, plan.blocker);
77163
77042
  }
77164
- const { showConfirmDialog } = await (__preload("1nq5evsh"), import("./chunks/layers-1nq5evsh.js"));
77043
+ const { showConfirmDialog } = await (__preload("ff81wthn"), import("./chunks/layers-ff81wthn.js"));
77165
77044
  const { html } = await (__preload("m244w9nh"), import("./chunks/lit-html-m244w9nh.js"));
77166
77045
  const confirmed = await showConfirmDialog("Convert Format", html`<span
77167
77046
  >Convert <strong>${path.split("/").pop()}</strong> to
@@ -77170,8 +77049,8 @@ async function convertFile(path, targetExt) {
77170
77049
  if (!confirmed) {
77171
77050
  return null;
77172
77051
  }
77173
- const { markLocalMutation } = await (__preload("13tj6sex"), import("./chunks/fs-events-13tj6sex.js"));
77174
- const { notifyMoveOutcome, settleRename } = await (__preload("ef8fgs3w"), import("./chunks/files-ef8fgs3w.js"));
77052
+ const { markLocalMutation } = await (__preload("b88z7g4h"), import("./chunks/fs-events-b88z7g4h.js"));
77053
+ const { notifyMoveOutcome, settleRename } = await (__preload("hnxqxtsg"), import("./chunks/files-hnxqxtsg.js"));
77175
77054
  markLocalMutation(path, plan.targetPath);
77176
77055
  try {
77177
77056
  await platform.writeFile(path, plan.text);
@@ -77196,8 +77075,8 @@ async function convertFile(path, targetExt) {
77196
77075
  return plan.targetPath;
77197
77076
  }
77198
77077
  async function rebuildTab(from, to, text) {
77199
- const { openTab, renameTab } = await (__preload("wrew8zk4"), import("./chunks/workspace-wrew8zk4.js"));
77200
- const { formatForPath } = await (__preload("3c33nwr8"), import("./chunks/format-host-3c33nwr8.js"));
77078
+ const { openTab, renameTab } = await (__preload("t55jdjbx"), import("./chunks/workspace-t55jdjbx.js"));
77079
+ const { formatForPath } = await (__preload("779sfp2n"), import("./chunks/format-host-779sfp2n.js"));
77201
77080
  renameTab(from, to, to);
77202
77081
  const format = formatForPath(to);
77203
77082
  let document2;
@@ -77205,7 +77084,7 @@ async function rebuildTab(from, to, text) {
77205
77084
  let layout = null;
77206
77085
  try {
77207
77086
  if (format) {
77208
- const { parseSourceForPath } = await (__preload("3btj6st0"), import("./chunks/file-ops-3btj6st0.js"));
77087
+ const { parseSourceForPath } = await (__preload("8yhd83xr"), import("./chunks/file-ops-8yhd83xr.js"));
77209
77088
  ({ document: document2, frontmatter } = await parseSourceForPath(to, text));
77210
77089
  } else {
77211
77090
  ({ document: document2, layout } = parseJsonDocument(text));
@@ -77234,7 +77113,7 @@ async function pickTarget(path, targets) {
77234
77113
  if (targets.length === 1) {
77235
77114
  return targets[0].ext;
77236
77115
  }
77237
- const { showPromptDialog } = await (__preload("1nq5evsh"), import("./chunks/layers-1nq5evsh.js"));
77116
+ const { showPromptDialog } = await (__preload("ff81wthn"), import("./chunks/layers-ff81wthn.js"));
77238
77117
  let picked = targets[0].ext;
77239
77118
  const answer = await showPromptDialog("Convert Format", {
77240
77119
  choice: {
@@ -77359,7 +77238,7 @@ function publishCommands() {
77359
77238
  when: (ctx) => ctx.project.open,
77360
77239
  enablement: () => platformSupportsPublish(),
77361
77240
  run: async () => {
77362
- const { openPublishPanel } = await (__preload("98f7sr3g"), import("./chunks/publish-panel-98f7sr3g.js"));
77241
+ const { openPublishPanel } = await (__preload("5zt840sy"), import("./chunks/publish-panel-5zt840sy.js"));
77363
77242
  openPublishPanel();
77364
77243
  },
77365
77244
  title: "Set Up Publishing"
@@ -78060,7 +77939,7 @@ function i18nCommands() {
78060
77939
  });
78061
77940
  return;
78062
77941
  }
78063
- const { openFileInTab } = await (__preload("ef8fgs3w"), import("./chunks/files-ef8fgs3w.js"));
77942
+ const { openFileInTab } = await (__preload("hnxqxtsg"), import("./chunks/files-hnxqxtsg.js"));
78064
77943
  await openFileInTab(path);
78065
77944
  },
78066
77945
  title: "Open Translation"
@@ -78105,7 +77984,7 @@ function i18nCommands() {
78105
77984
  return;
78106
77985
  }
78107
77986
  const cut = path.lastIndexOf("/");
78108
- const { createFileIn, openFileInTab } = await (__preload("ef8fgs3w"), import("./chunks/files-ef8fgs3w.js"));
77987
+ const { createFileIn, openFileInTab } = await (__preload("hnxqxtsg"), import("./chunks/files-hnxqxtsg.js"));
78109
77988
  const created = await createFileIn({
78110
77989
  content,
78111
77990
  dir: cut === -1 ? "." : path.slice(0, cut),
@@ -78954,6 +78833,10 @@ var liveChrome = createLiveSurfaceSaver({
78954
78833
  setDocumentSavedListener2((path, doc) => {
78955
78834
  noteFileSaved2(path);
78956
78835
  liveChrome(path, doc);
78836
+ if (noteComponentSaved2(path, doc)) {
78837
+ renderPropertiesPanel();
78838
+ renderLeftPanel();
78839
+ }
78957
78840
  });
78958
78841
  commandRegistry.registerAll(diffCommands());
78959
78842
  ensurePopoverRevealWatch();
@@ -78996,5 +78879,5 @@ export {
78996
78879
  hasUnsavedTabs
78997
78880
  };
78998
78881
 
78999
- //# debugId=7745E4F06BA4B1F264756E2164756E21
78882
+ //# debugId=9C5086FE72E2FA8664756E2164756E21
79000
78883
  //# sourceMappingURL=studio.js.map