@jxsuite/studio 5.0.0 → 5.2.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 (132) hide show
  1. package/dist/chunks/{cf-account-picker-fyf63pmy.js → cf-account-picker-h4dab9bq.js} +10 -10
  2. package/dist/chunks/{cf-settings-71bv5zn9.js → cf-settings-adg74qsk.js} +4 -4
  3. package/dist/chunks/components-5y78e05d.js +20 -0
  4. package/dist/chunks/content-source-sgg1sv6n.js +46 -0
  5. package/dist/chunks/{convert-to-repeater-d0cgnb6d.js → convert-to-repeater-mf1cxgfn.js} +25 -25
  6. package/dist/chunks/entry-commands-w9qsxa6q.js +42 -0
  7. package/dist/chunks/{extension-sections-fy7q4fe9.js → extension-sections-c6zwzbre.js} +27 -27
  8. package/dist/chunks/file-ops-vrpq1jjk.js +47 -0
  9. package/dist/chunks/{files-ef8fgs3w.js → files-msaf95y6.js} +33 -32
  10. package/dist/chunks/{format-host-3c33nwr8.js → format-host-f64fnesp.js} +2 -2
  11. package/dist/chunks/{fs-events-13tj6sex.js → fs-events-3y6y0nrm.js} +6 -6
  12. package/dist/chunks/git-panel-bv5e22j0.js +50 -0
  13. package/dist/chunks/grid-view-1p6hsyjx.css +8406 -0
  14. package/dist/chunks/grid-view-paj67nr5.js +15322 -0
  15. package/dist/chunks/{iframe-host-jgesd924.js → iframe-host-dh5np8vk.js} +14 -14
  16. package/dist/chunks/{layers-1nq5evsh.js → layers-1vcfdbet.js} +7 -6
  17. package/dist/chunks/layers-panel-fksbdg4q.js +40 -0
  18. package/dist/chunks/{media-picker-2qbetq73.js → media-picker-p49nhqhs.js} +14 -14
  19. package/dist/chunks/menu-qht48vnc.js +15 -0
  20. package/dist/chunks/{monaco-buffer-bhy3hb6m.js → monaco-buffer-pykwbm92.js} +3 -3
  21. package/dist/chunks/{notify-628t0anh.js → notify-42gk8ha1.js} +2 -2
  22. package/dist/chunks/{parse-0zx14y15.js → parse-reg9eevt.js} +2 -2
  23. package/dist/chunks/publish-panel-vz23wwmg.js +27 -0
  24. package/dist/chunks/quick-search-e9rp74m8.js +46 -0
  25. package/dist/chunks/{references-n553f0e1.js → references-h69xp9zz.js} +4 -4
  26. package/dist/chunks/right-panel-j97t2yvy.js +45 -0
  27. package/dist/chunks/{studio-18avnhjp.js → studio-01jeck2y.js} +36 -30
  28. package/dist/chunks/{studio-9xxz1q69.js → studio-14d9tq4d.js} +9 -9
  29. package/dist/chunks/{studio-xsykpvsh.js → studio-15f3kxqe.js} +19 -19
  30. package/dist/chunks/studio-1tbjfqv4.js +146 -0
  31. package/dist/chunks/{studio-79y5sz51.js → studio-28vs5k2y.js} +2 -2
  32. package/dist/chunks/{studio-3hxkd92t.js → studio-2mdbbc76.js} +10 -10
  33. package/dist/chunks/{studio-7r42c6ca.js → studio-3ntvq6cg.js} +5 -5
  34. package/dist/chunks/{studio-8jn5yhyn.js → studio-4c041r8y.js} +3 -3
  35. package/dist/chunks/{studio-qahxvnan.js → studio-4r14yzyy.js} +4 -4
  36. package/dist/chunks/{studio-arfpe389.js → studio-4xmjcrg3.js} +6 -6
  37. package/dist/chunks/{studio-5523bpzt.js → studio-5nz00bhh.js} +3 -3
  38. package/dist/chunks/{studio-x3rty6tr.js → studio-5t7ena5z.js} +8 -8
  39. package/dist/chunks/{studio-5rt7sqa0.js → studio-66arbpc2.js} +13 -19
  40. package/dist/chunks/{studio-fabxk6r9.js → studio-68fydsrj.js} +15 -15
  41. package/dist/chunks/{studio-tb3ev01j.js → studio-9j6sfeba.js} +6 -6
  42. package/dist/chunks/{studio-akbww0j5.js → studio-a1pswps3.js} +38 -38
  43. package/dist/chunks/{studio-6xa21ej9.js → studio-c04nzbby.js} +2 -2
  44. package/dist/chunks/{studio-4m0haseg.js → studio-c07s5ckd.js} +4 -4
  45. package/dist/chunks/{studio-57mf66w2.js → studio-ctm7bhx5.js} +14 -14
  46. package/dist/chunks/{studio-p1dw8wfw.js → studio-d8z5bajd.js} +14 -10
  47. package/dist/chunks/{studio-vz68yn9e.js → studio-en82c639.js} +6 -6
  48. package/dist/chunks/{studio-rkstz940.js → studio-etvx9s2g.js} +21 -12
  49. package/dist/chunks/{studio-az3zd49t.js → studio-ez11dmdh.js} +127 -37
  50. package/dist/chunks/{studio-sgdc5pfc.js → studio-hdc2jt3z.js} +4 -4
  51. package/dist/chunks/{studio-s6z853aq.js → studio-hhskq2mr.js} +24 -23
  52. package/dist/chunks/{studio-6ewqv390.js → studio-m1p9b6c3.js} +5 -5
  53. package/dist/chunks/{studio-25hkdrkw.js → studio-mpzwze9x.js} +12 -12
  54. package/dist/chunks/{studio-8qtrpzr3.js → studio-ncn9e189.js} +7 -7
  55. package/dist/chunks/{studio-81390n6f.js → studio-nq5yf5mp.js} +1 -1
  56. package/dist/chunks/{studio-5jy81t3s.js → studio-p6pmwkvh.js} +229 -24
  57. package/dist/chunks/{studio-3gxv60tn.js → studio-qa7fzxan.js} +4 -4
  58. package/dist/chunks/{studio-7xptrg0j.js → studio-sar8g54p.js} +8 -8
  59. package/dist/chunks/studio-t171hxhe.js +23 -0
  60. package/dist/chunks/{studio-em9nw8eh.js → studio-t3adrr56.js} +20 -17
  61. package/dist/chunks/{studio-hhvs4sdg.js → studio-vn5hske5.js} +10 -4
  62. package/dist/chunks/{studio-pm6hgy7r.js → studio-vt0tj32j.js} +29 -42
  63. package/dist/chunks/{studio-d1ja2x9r.js → studio-wjpgxywa.js} +4 -4
  64. package/dist/chunks/{studio-q3x06vmj.js → studio-wnsyffg1.js} +2 -2
  65. package/dist/chunks/{studio-rpyah2ew.js → studio-x10fp4tp.js} +64 -24
  66. package/dist/chunks/{studio-26d7myd1.js → studio-x72j58vw.js} +4 -4
  67. package/dist/chunks/{studio-cpvb2ed1.js → studio-y4f9fdge.js} +8 -8
  68. package/dist/chunks/{studio-erdatzvp.js → studio-ympe0n7a.js} +35 -6
  69. package/dist/chunks/{studio-y9zedyjn.js → studio-z2smx5ce.js} +2 -2
  70. package/dist/chunks/studio-zjjde71a.js +148 -0
  71. package/dist/chunks/{workspace-wrew8zk4.js → workspace-bnw54cha.js} +18 -10
  72. package/dist/iframe-entry.js +102 -11
  73. package/dist/studio.css +1 -2
  74. package/dist/studio.js +1113 -16062
  75. package/package.json +11 -11
  76. package/src/canvas/canvas-utils.ts +29 -2
  77. package/src/commands/command-args.ts +37 -2
  78. package/src/commands/registry.ts +18 -8
  79. package/src/commands/run-reported.ts +120 -0
  80. package/src/editor/shortcuts.ts +11 -23
  81. package/src/files/components.ts +39 -0
  82. package/src/files/files.ts +41 -17
  83. package/src/grid/grid-lazy.ts +59 -0
  84. package/src/grid/grid-open.ts +20 -3
  85. package/src/grid/grid-panel.ts +43 -9
  86. package/src/i18n/i18n-commands.ts +10 -0
  87. package/src/media/media-open.ts +14 -2
  88. package/src/packages/pull-package-sync.ts +5 -1
  89. package/src/panels/ai-panel.ts +5 -2
  90. package/src/panels/block-action-bar.ts +7 -2
  91. package/src/panels/i18n-panel.ts +8 -15
  92. package/src/panels/jump-bar.ts +3 -2
  93. package/src/panels/pane-context.ts +5 -4
  94. package/src/panels/pane-grid.ts +100 -10
  95. package/src/panels/problems-panel.ts +6 -2
  96. package/src/panels/quick-search.ts +6 -12
  97. package/src/panels/settings-menu.ts +5 -15
  98. package/src/panels/tab-drop.ts +220 -0
  99. package/src/panels/tab-strip.ts +238 -33
  100. package/src/services/ai-command-tools.ts +78 -8
  101. package/src/services/ai-models.ts +13 -0
  102. package/src/services/ai-project-tools.ts +8 -2
  103. package/src/services/ai-system-prompt.ts +4 -8
  104. package/src/services/ai-tools.ts +8 -69
  105. package/src/services/document-assistant.ts +9 -6
  106. package/src/studio.ts +24 -8
  107. package/src/surfaces/commandbar.json +35 -24
  108. package/src/surfaces/commandbar.ts +6 -5
  109. package/src/surfaces/pane-grid.json +35 -3
  110. package/src/surfaces/pane-grid.ts +26 -4
  111. package/src/surfaces/statusbar.ts +2 -1
  112. package/src/surfaces/tab-strip.json +16 -39
  113. package/src/surfaces/tab-strip.ts +76 -12
  114. package/src/tabs/project-config.ts +45 -11
  115. package/src/ui/ai-credentials-form.ts +12 -1
  116. package/src/ui/layers.ts +4 -1
  117. package/src/workspace/pane-derive.ts +7 -5
  118. package/src/workspace/session.ts +3 -3
  119. package/src/workspace/workspace.ts +220 -43
  120. package/styles/shell-frame.css +8 -0
  121. package/styles/shell-frame.json +4 -0
  122. package/dist/chunks/components-2w1f35qs.js +0 -18
  123. package/dist/chunks/content-source-3wqeas45.js +0 -46
  124. package/dist/chunks/entry-commands-d6g50j7s.js +0 -42
  125. package/dist/chunks/file-ops-3btj6st0.js +0 -47
  126. package/dist/chunks/git-panel-4wp2rn9b.js +0 -49
  127. package/dist/chunks/layers-panel-ar2gh90g.js +0 -40
  128. package/dist/chunks/menu-rf7n72mf.js +0 -14
  129. package/dist/chunks/publish-panel-98f7sr3g.js +0 -27
  130. package/dist/chunks/quick-search-srzz83k2.js +0 -45
  131. package/dist/chunks/right-panel-rrgx2dn3.js +0 -45
  132. package/dist/chunks/studio-d055c37e.js +0 -62
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  displayTagName,
7
7
  isPrivateStateKey
8
- } from "./studio-7r42c6ca.js";
8
+ } from "./studio-3ntvq6cg.js";
9
9
  import {
10
10
  getNodeAtPath2,
11
11
  childList,
@@ -17,23 +17,23 @@ import {
17
17
  stripEventHandlers,
18
18
  leftPanel,
19
19
  renderOnly
20
- } from "./studio-6ewqv390.js";
20
+ } from "./studio-m1p9b6c3.js";
21
21
  import {
22
22
  effectScope,
23
23
  effect,
24
24
  toRaw,
25
25
  notify2
26
- } from "./studio-p1dw8wfw.js";
26
+ } from "./studio-d8z5bajd.js";
27
27
  import {
28
28
  view,
29
29
  surfaceForPane,
30
30
  allCanvasSurfaces,
31
31
  stageContaining
32
- } from "./studio-q3x06vmj.js";
32
+ } from "./studio-wnsyffg1.js";
33
33
  import {
34
34
  loadExtensions2,
35
35
  formatByName2
36
- } from "./studio-79y5sz51.js";
36
+ } from "./studio-28vs5k2y.js";
37
37
  import {
38
38
  localeDirection,
39
39
  primarySelection,
@@ -62,7 +62,7 @@ import {
62
62
  paneById2,
63
63
  focusPane2,
64
64
  isTabActive2
65
- } from "./studio-az3zd49t.js";
65
+ } from "./studio-ez11dmdh.js";
66
66
  import {
67
67
  getEffectiveMedia,
68
68
  getEffectiveImports,
@@ -74,12 +74,12 @@ import {
74
74
  distributePageIntoLayout,
75
75
  shell,
76
76
  setLayoutSelection
77
- } from "./studio-25hkdrkw.js";
77
+ } from "./studio-mpzwze9x.js";
78
78
  import {
79
79
  componentRegistry2,
80
80
  buildComponentInstance2,
81
81
  computeRelativePath2
82
- } from "./studio-d055c37e.js";
82
+ } from "./studio-zjjde71a.js";
83
83
  import {
84
84
  pureSchemeOf,
85
85
  setSkipServerFunctions,
@@ -97,7 +97,7 @@ import {
97
97
  POPOVER_TAGS,
98
98
  INVOKER_TAGS,
99
99
  activeRegistry
100
- } from "./studio-5jy81t3s.js";
100
+ } from "./studio-p6pmwkvh.js";
101
101
  import {
102
102
  _defineProperty,
103
103
  combine,
@@ -109,7 +109,7 @@ import {
109
109
  canvasBaseOrigin,
110
110
  documentBase,
111
111
  assetContextFor
112
- } from "./studio-4m0haseg.js";
112
+ } from "./studio-c07s5ckd.js";
113
113
  import {
114
114
  rectOf,
115
115
  elementAtPoint
@@ -2938,6 +2938,15 @@ function canvasViewCommands(deps) {
2938
2938
  group: "3_canvas",
2939
2939
  requires: "an open document",
2940
2940
  when: documentOpen,
2941
+ aiTool: {
2942
+ description: "Switch the active document's editor mode. edit and design put its element tree on " + "the canvas, where the document tools work; preview renders it as a visitor sees it; " + "source shows the JSON; stylebook, grid and git-diff open other editors. Use it to " + "return a document to edit or design when the tree tools are refused.",
2943
+ name: "set_canvas_mode",
2944
+ report: ({ after, args }) => {
2945
+ const mode = enumArg("canvas.setMode", args, "mode", CANVAS_MODES);
2946
+ const reach = after.editor.kind === "canvas" ? "the document tools address its element tree" : "the tree-editing tools are unavailable until it returns to edit or design";
2947
+ return `The active document is in ${mode} mode; ${reach}.`;
2948
+ }
2949
+ },
2941
2950
  run: (_commandCtx, args) => {
2942
2951
  const mode = enumArg("canvas.setMode", args, "mode", CANVAS_MODES);
2943
2952
  const tab = requireTab("canvas.setMode");
@@ -5726,5 +5735,5 @@ function getEditBarAnchorRect2() {
5726
5735
 
5727
5736
  export { activeCanvasSurface, tabOfPane, derivationOfPane, surfacesShowingTab, canvasModeOfTab, canvasModeOfPane, activeMediaOfPane, paneOfContainer, tabOfContainer, findDialogDefects, getPreviewNavigateHandler, documentUrlPattern, dynamicRouteParams, pagePathsDef, invalidateParamValues, loadParamValues, isComponentDoc, componentPropEntries, SPAN_FULL_RENDER, SPAN_MOUNT_CANVAS, SPAN_PATCH_BATCH, canvasPerf, recordEscalation, timeSpan, timeSpanAsync, mediaDisplayName, defaultDef, parentCursorToIframe, serializeJxPath, elements_meta_default, getInlineActions, isInlineElement, isEditing, bubbleInlinePath, isSchemeQuery, schemeOfQuery, parseMediaEntries, snapEditWidth, EDIT_WIDTH_MIN, EDIT_WIDTH_SNAP_TOLERANCE, EDIT_CANVAS_GUTTER, declaredWidthOfTab, resolveEditColumnWidth, clearEditWidth, snapTargetsOfTab, setEditWidth, ancestorPopoverPath, ancestorDialogPath, dialogPathFor, stageZoom, canvasPanelEntry, bindCanvasPanels, activateCanvasPanel, observeCenterUntilStable, applyTransform, applyEditZoom, setEditZoom, requestEditZoom, fitToScreen, getFit, setFit, markExplicitZoom, setUserZoom, fitOnCanvasEntry, resetZoom, panToParentRect, canvasBaseViewsFor, canvasBaseViewOf, previewStateOf, setCanvasView, registerCanvasViewCommands, updateActivePanelHeaders, setDragGhost, moveDragGhost, clearDragGhost, disableNativeDragPreview, attachInstruction, extractInstruction, hasElement, enableElement, disableElement, removePackageElements, removeElementRef, renderComponentPreview, registerLayersDnD, registerComponentsDnD, registerElementsDnD, applyDropInstruction, sawIframeDragOver2, allowAutoRequestsOnNextRender2, requestCanvasEval2, flushCanvasEdits2, hostForCanvas2, liveDragHostAt2, beginDragSession2, currentDragSession2, hostDragGeometry2, canvasIdleBlockers2, canvasPointAt2, revealCanvasPath2, revealCanvasPathIn2, measureInCanvas2, adoptCanvasPreviewMode2, postDragMessage2, endDragSession2, clearDropIndicator2, setNativeDragEnterHandler2, setInsertZoneClickHandler2, setFileDropHandler2, setCanvasSlashHandler2, setCanvasContextMenuHandler2, setStylebookHitHandler2, isCaretActive2, setToolbarRefresh2, setCanvasPointerDownHandler2, setIframePatchEscalation2, postPopoverOpen2, postDialogOpen2, postPatchToHosts2, dragHostTab2, releaseCanvasHosts2, mountIframeCanvas2, mountStylebookCanvas2, postColorSchemeToLiveHosts2, postLocaleToLiveHosts2, postRedefineElementToLiveHosts2, postSiteStyleToLiveHosts2, postStyleUpdateToStylebookHosts2, panToStylebookTag2, getEditSnapshot2, setKeymapSource2, postApplyFormat2, postOpenSlash2, commitActiveEditSession2, getEditBarAnchorRect2 };
5728
5737
 
5729
- //# debugId=0FD9CE73F24F5DE364756E2164756E21
5730
- //# sourceMappingURL=studio-rkstz940.js.map
5738
+ //# debugId=138206C03AA4653064756E2164756E21
5739
+ //# sourceMappingURL=studio-etvx9s2g.js.map
@@ -6,10 +6,10 @@ import {
6
6
  toRaw,
7
7
  computed,
8
8
  notify2
9
- } from "./studio-p1dw8wfw.js";
9
+ } from "./studio-d8z5bajd.js";
10
10
  import {
11
11
  commitTabBuffers2
12
- } from "./studio-q3x06vmj.js";
12
+ } from "./studio-wnsyffg1.js";
13
13
  import {
14
14
  getPlatform2
15
15
  } from "./studio-6nzaktvy.js";
@@ -17,12 +17,12 @@ import {
17
17
  formatByName2,
18
18
  formatForPath2,
19
19
  defaultContentFormat2
20
- } from "./studio-79y5sz51.js";
20
+ } from "./studio-28vs5k2y.js";
21
21
  import {
22
22
  getNestedStyle,
23
23
  ensureNestedStyle,
24
24
  isEventBinding
25
- } from "./studio-7r42c6ca.js";
25
+ } from "./studio-3ntvq6cg.js";
26
26
  import {
27
27
  getNodeAtPath2,
28
28
  normalizeArrayChildren,
@@ -31,7 +31,7 @@ import {
31
31
  pathsEqual,
32
32
  isAncestor,
33
33
  projectState
34
- } from "./studio-6ewqv390.js";
34
+ } from "./studio-m1p9b6c3.js";
35
35
  import {
36
36
  cloneValue2,
37
37
  childArray2,
@@ -2421,6 +2421,13 @@ function numberArg(commandId, args, key) {
2421
2421
  }
2422
2422
  return value;
2423
2423
  }
2424
+ function integerArg(commandId, args, key) {
2425
+ const value = args[key];
2426
+ if (typeof value !== "number" || !Number.isInteger(value)) {
2427
+ throw refuse(commandId, key, `expected an integer, got ${describe(value)}`);
2428
+ }
2429
+ return value;
2430
+ }
2424
2431
  function boundedNumberArg(commandId, args, key, minimum, maximum) {
2425
2432
  const value = numberArg(commandId, args, key);
2426
2433
  if (value < minimum || value > maximum) {
@@ -2536,7 +2543,10 @@ function describeShape(property) {
2536
2543
  }
2537
2544
  case "number":
2538
2545
  case "integer": {
2539
- return p.minimum !== undefined && p.maximum !== undefined ? "bounded-number" : "number";
2546
+ if (p.minimum !== undefined && p.maximum !== undefined) {
2547
+ return "bounded-number";
2548
+ }
2549
+ return p.type === "integer" ? "integer" : "number";
2540
2550
  }
2541
2551
  case "string": {
2542
2552
  return "string";
@@ -2623,6 +2633,9 @@ function shapeOf(property) {
2623
2633
  case "number": {
2624
2634
  return "a finite number";
2625
2635
  }
2636
+ case "integer": {
2637
+ return "an integer";
2638
+ }
2626
2639
  case "string": {
2627
2640
  return "a non-empty string";
2628
2641
  }
@@ -2677,11 +2690,17 @@ function coerceProperty(commandId, args, key, property) {
2677
2690
  return booleanArg(commandId, args, key);
2678
2691
  }
2679
2692
  case "bounded-number": {
2693
+ if (property.type === "integer") {
2694
+ integerArg(commandId, args, key);
2695
+ }
2680
2696
  return boundedNumberArg(commandId, args, key, property.minimum, property.maximum);
2681
2697
  }
2682
2698
  case "number": {
2683
2699
  return numberArg(commandId, args, key);
2684
2700
  }
2701
+ case "integer": {
2702
+ return integerArg(commandId, args, key);
2703
+ }
2685
2704
  case "string": {
2686
2705
  return stringArg(commandId, args, key);
2687
2706
  }
@@ -2724,6 +2743,7 @@ function coerceArgs(commandId, schema, args) {
2724
2743
  var CLOSED_TAB_LIMIT = 20;
2725
2744
  var PRIMARY_PANE2 = "primary";
2726
2745
  var SECONDARY_PANE2 = "secondary";
2746
+ var MAX_PANES2 = 2;
2727
2747
  var workspace2 = reactive({
2728
2748
  activePaneId: PRIMARY_PANE2,
2729
2749
  clipboard: null,
@@ -2789,28 +2809,30 @@ function focusPane2(paneId) {
2789
2809
  function isPaneFocused2(paneId) {
2790
2810
  return workspace2.activePaneId === paneId;
2791
2811
  }
2792
- function splitRight() {
2793
- const source = activePane2();
2794
- const tabId = source.activeTabId;
2795
- const tab = tabId ? workspace2.tabs.get(tabId) : null;
2796
- if (!tabId || !tab) {
2812
+ function splitRight2(tabId) {
2813
+ const id = tabId ?? activePane2().activeTabId;
2814
+ const tab = id ? workspace2.tabs.get(id) : null;
2815
+ if (!id || !tab) {
2797
2816
  return null;
2798
2817
  }
2799
- const target = receivingPane2();
2800
- detachTab2(tabId);
2801
- insertIntoPane2(target, tabId);
2802
- target.activeTabId = tabId;
2818
+ const source = paneOfTab2(id);
2819
+ if (!source) {
2820
+ return null;
2821
+ }
2822
+ const target = receivingPane2(source.id);
2823
+ detachTab2(id);
2824
+ insertIntoPane2(target, id);
2825
+ target.activeTabId = id;
2803
2826
  workspace2.activePaneId = target.id;
2804
2827
  resetTabCycle();
2805
- promoteMru(tabId);
2828
+ promoteMru(id);
2806
2829
  return target;
2807
2830
  }
2808
- function sidePane2() {
2809
- const source = activePane2();
2810
- return workspace2.panes.find((pane) => pane.id !== source.id) ?? addPane(SECONDARY_PANE2);
2831
+ function paneBeside2(paneId) {
2832
+ return workspace2.panes.find((pane) => pane.id !== paneId) ?? addPane(SECONDARY_PANE2);
2811
2833
  }
2812
- function receivingPane2() {
2813
- const target = sidePane2();
2834
+ function receivingPane2(paneId) {
2835
+ const target = paneBeside2(paneId);
2814
2836
  if (target.derived) {
2815
2837
  target.derived = null;
2816
2838
  }
@@ -2832,7 +2854,7 @@ function addPane(paneId) {
2832
2854
  ];
2833
2855
  return paneById2(paneId);
2834
2856
  }
2835
- function closePane(paneId) {
2857
+ function closePane2(paneId) {
2836
2858
  if (workspace2.panes.length < 2) {
2837
2859
  return;
2838
2860
  }
@@ -2853,7 +2875,7 @@ function closePane(paneId) {
2853
2875
  workspace2.panes = workspace2.panes.filter((candidate) => candidate.id !== pane.id);
2854
2876
  resetTabCycle();
2855
2877
  }
2856
- function paneIsEmpty(pane) {
2878
+ function paneIsEmpty2(pane) {
2857
2879
  return pane.tabOrder.length === 0 && pane.derived === null;
2858
2880
  }
2859
2881
  function detachTab2(tabId) {
@@ -2866,12 +2888,12 @@ function detachTab2(tabId) {
2866
2888
  if (pane.activeTabId === tabId) {
2867
2889
  pane.activeTabId = pane.tabOrder.at(-1) ?? null;
2868
2890
  }
2869
- if (pane.id !== PRIMARY_PANE2 && paneIsEmpty(pane)) {
2891
+ if (pane.id !== PRIMARY_PANE2 && paneIsEmpty2(pane)) {
2870
2892
  emptied.push(pane.id);
2871
2893
  }
2872
2894
  }
2873
2895
  for (const paneId of emptied) {
2874
- closePane(paneId);
2896
+ closePane2(paneId);
2875
2897
  }
2876
2898
  }
2877
2899
  function insertIntoPane2(pane, tabId, index) {
@@ -3006,12 +3028,19 @@ function moveTab2(tabId, toIndex) {
3006
3028
  if (!tab || !pane) {
3007
3029
  return;
3008
3030
  }
3031
+ pane.tabOrder = reorderWithinPane(pane, tabId, toIndex);
3032
+ }
3033
+ function reorderWithinPane(pane, tabId, toIndex) {
3034
+ const tab = workspace2.tabs.get(tabId);
3035
+ if (!tab) {
3036
+ return pane.tabOrder;
3037
+ }
3009
3038
  const without = pane.tabOrder.filter((id) => id !== tabId);
3010
3039
  const boundary = without.filter((id) => workspace2.tabs.get(id)?.pinned === true).length;
3011
3040
  const lower = tab.pinned ? 0 : boundary;
3012
3041
  const upper = tab.pinned ? boundary : without.length;
3013
3042
  const at = Math.min(Math.max(toIndex, lower), upper);
3014
- pane.tabOrder = [...without.slice(0, at), tabId, ...without.slice(at)];
3043
+ return [...without.slice(0, at), tabId, ...without.slice(at)];
3015
3044
  }
3016
3045
  function closeTab2(tabId) {
3017
3046
  const tab = workspace2.tabs.get(tabId);
@@ -3026,8 +3055,8 @@ function closeTab2(tabId) {
3026
3055
  detachTab2(tabId);
3027
3056
  workspace2.mruOrder = workspace2.mruOrder.filter((id) => id !== tabId);
3028
3057
  resetTabCycle();
3029
- if (pane && paneIsEmpty(pane)) {
3030
- closePane(pane.id);
3058
+ if (pane && paneIsEmpty2(pane)) {
3059
+ closePane2(pane.id);
3031
3060
  }
3032
3061
  if (!wasActive) {
3033
3062
  return;
@@ -3109,16 +3138,19 @@ function replaceAllTabs2(newTabOpts) {
3109
3138
  function activateTab2(tabId, opts = {}) {
3110
3139
  setActiveTab(tabId, opts);
3111
3140
  }
3112
- function moveTabToPane2(tabId, paneId) {
3141
+ function moveTabToPane2(tabId, paneId, index) {
3113
3142
  const pane = paneById2(paneId);
3114
3143
  if (!pane || !workspace2.tabs.has(tabId)) {
3115
3144
  return null;
3116
3145
  }
3117
3146
  if (pane.tabOrder.includes(tabId)) {
3147
+ if (index !== undefined) {
3148
+ pane.tabOrder = reorderWithinPane(pane, tabId, index);
3149
+ }
3118
3150
  return pane;
3119
3151
  }
3120
3152
  detachTab2(tabId);
3121
- insertIntoPane2(pane, tabId);
3153
+ insertIntoPane2(pane, tabId, index);
3122
3154
  return pane;
3123
3155
  }
3124
3156
  function renameTab2(oldId, newId, newDocumentPath) {
@@ -3176,6 +3208,64 @@ function tabCommands(deps) {
3176
3208
  cycleTab(-1);
3177
3209
  }
3178
3210
  },
3211
+ {
3212
+ args: argsSchema({
3213
+ path: stringProperty('Project-relative path of the file to open, e.g. "pages/about.json" or ' + '"components/nav-bar.json". It must exist.')
3214
+ }),
3215
+ id: "document.open",
3216
+ title: "Open Document",
3217
+ category: "Document",
3218
+ level: "project",
3219
+ menus: ["palette"],
3220
+ group: "1_file",
3221
+ when: (ctx) => ctx.project.open,
3222
+ requires: "an open project",
3223
+ aiTool: {
3224
+ description: "Open a project file as the active document; the document tools then operate on it. " + "Use it when the user should SEE the page, or for iterative visual refinement after " + "creating a page or component.",
3225
+ name: "open_document",
3226
+ report: ({ after, args }) => {
3227
+ const path = stringArg("document.open", args, "path");
3228
+ const active = activeTab2.value?.documentPath ?? null;
3229
+ if (active !== path) {
3230
+ return `Opened "${path}", but the active document is ${active === null ? "none" : `"${active}"`}.`;
3231
+ }
3232
+ const where = after.editor.kind === "canvas" ? "on the canvas; the document tools now operate on it" : `in the ${EDITOR_KIND_LABELS[after.editor.kind]} editor, which is not an element tree the document tools can edit`;
3233
+ return `"${path}" is the active document, ${where}.`;
3234
+ }
3235
+ },
3236
+ run: async (_ctx, args) => {
3237
+ const path = stringArg("document.open", args, "path");
3238
+ await deps.openFile(path);
3239
+ if (![...workspace2.tabs.values()].some((tab) => tab.documentPath === path)) {
3240
+ throw new RangeError(`command "document.open" argument "path": "${path}" could not be opened — it does ` + `not exist, or no editor claims its format. Problems has the reason.`);
3241
+ }
3242
+ }
3243
+ },
3244
+ {
3245
+ args: argsSchema({
3246
+ file: stringProperty('Project-relative path of the file to open in the other pane, e.g. "pages/about.json". ' + "It must exist.")
3247
+ }),
3248
+ id: "document.openToSide",
3249
+ title: "Open to the Side",
3250
+ category: "Document",
3251
+ level: "project",
3252
+ menus: ["context/file", "palette"],
3253
+ group: "1_file",
3254
+ when: (ctx) => ctx.project.open,
3255
+ requires: "an open project",
3256
+ undo: "none",
3257
+ run: async (_ctx, args) => {
3258
+ const file = stringArg("document.openToSide", args, "file");
3259
+ const target = receivingPane2(activePane2().id);
3260
+ await deps.openFile(file, { paneId: target.id });
3261
+ if (![...workspace2.tabs.values()].some((tab) => tab.documentPath === file)) {
3262
+ if (paneIsEmpty2(target) && target.id !== PRIMARY_PANE2) {
3263
+ closePane2(target.id);
3264
+ }
3265
+ throw new RangeError(`command "document.openToSide" argument "file": "${file}" could not be opened — it ` + `does not exist, or no editor claims its format. Problems has the reason.`);
3266
+ }
3267
+ }
3268
+ },
3179
3269
  {
3180
3270
  id: "document.reopenClosed",
3181
3271
  title: "Reopen Closed Document",
@@ -3267,7 +3357,7 @@ function paneCommands(deps) {
3267
3357
  requires: "an open document",
3268
3358
  undo: "none",
3269
3359
  run: () => {
3270
- splitRight();
3360
+ splitRight2();
3271
3361
  }
3272
3362
  },
3273
3363
  {
@@ -3291,7 +3381,7 @@ function paneCommands(deps) {
3291
3381
  if (held?.documentPath === path) {
3292
3382
  throw new RangeError(`command "pane.compareWith" argument "path": "${path}" is the document this pane is ` + `already showing — name a different one`);
3293
3383
  }
3294
- await deps.openFileInPane(receivingPane2().id, path);
3384
+ await deps.openFileInPane(receivingPane2(here.id).id, path);
3295
3385
  }
3296
3386
  },
3297
3387
  {
@@ -3342,14 +3432,14 @@ function runUnsplit() {
3342
3432
  const derived = workspace2.panes.find((pane) => pane.derived !== null);
3343
3433
  if (derived?.id === PRIMARY_PANE2) {
3344
3434
  derived.derived = null;
3345
- if (!paneIsEmpty(derived)) {
3435
+ if (!paneIsEmpty2(derived)) {
3346
3436
  return;
3347
3437
  }
3348
3438
  }
3349
- closePane(derived?.id ?? SECONDARY_PANE2);
3439
+ closePane2(derived?.id ?? SECONDARY_PANE2);
3350
3440
  }
3351
3441
 
3352
- export { LANGUAGE_TAG_PATTERN, canonicalizeLocale, isWellFormedLocale, localeDirection, localeLabel, resolveI18n, localeOfPath, servedLocaleOfPath, translationKeyOfPath, translationPathFor, EDITOR_KIND_LABELS, editorKindForMode, canvasViewForMode, inCanvas, hasSelection, hasElementSelection, emptyContext, makeContext, keyScopeStack, PROJECT_CONFIG_PATH, createTab, editorKindOf, editorKindsOf, modeForEditorKind, disposeTab, primarySelection, selectionAnchor, isSelected, cloneSelection, toggleSelected, rangeSelection, isSpliceablePath, structuralBatch, uniquePaths, unifyValues, setPatchConsumer, recordDocOp, transactDoc, transact, beginBatch, endBatch, isBatching, batchTab, setHistoryDelegate, canUndo, canRedo, undo, redo, mutateInsertNode, mutateRemoveNode, mutateDuplicateNode, mutateRemoveNodes, mutateDuplicateNodes, mutateWrapNode, mutateMoveNode, mutateUpdateProperty, mutateUpdateStyle, mutateUpdateAttribute, mutateUpdateMediaStyle, mutateUpdateNestedStyle, mutateUpdateMediaNestedStyle, mutateUpdateNestedStylePath, mutateUpdateMediaNestedStylePath, mutateReplaceStyle, mutateAddDef, mutateRemoveDef, mutateUpdateDef, mutateRenameDef, mutateUpdateProp, mutateAddSwitchCase, mutateRemoveSwitchCase, mutateRenameSwitchCase, mutateUpdateFrontmatter, collabState, isCollabPath, stringArg, optionalStringArg, boundedNumberArg, booleanArg, enumArg, pathArg, nullablePathArg, pathListArg, argsSchema, enumProperty, derivedEnumProperty, numberProperty, booleanProperty, pathProperty, pathListProperty, stringProperty, coerceArgs, LOCALE_PLACEHOLDER, collectionForDirectory, collectionForFile, camelToLabel, toCamelCase, kebabToLabel, propLabel, attrLabel, abbreviateValue, isMediaFormat, inferInputType, findContentTypeSchema, friendlyNameToVar, varDisplayName, parseCemType, jsonClone, configureCollabSerializer, configureCollabParser, configureCollabNotifier, collabSourceContext, collabReadOnly, collabSave, flushAllCollab, setCollabEnabled, isCollabEnabled, PRIMARY_PANE2, SECONDARY_PANE2, workspace2, activeTab2, activePane2, paneById2, paneOfTab2, focusPane2, isPaneFocused2, sidePane2, receivingPane2, detachTab2, insertIntoPane2, setWorkspaceProject2, isTabActive2, tabIsLive2, openTab2, promoteTab2, promoteDirtyPreviewTabs2, setTabPinned2, moveTab2, closeTab2, closeAllTabs2, replaceAllTabs2, activateTab2, moveTabToPane2, renameTab2, registerTabCommands2 };
3442
+ export { LANGUAGE_TAG_PATTERN, canonicalizeLocale, isWellFormedLocale, localeDirection, localeLabel, resolveI18n, localeOfPath, servedLocaleOfPath, translationKeyOfPath, translationPathFor, EDITOR_KIND_LABELS, editorKindForMode, canvasViewForMode, inCanvas, hasSelection, hasElementSelection, emptyContext, makeContext, keyScopeStack, PROJECT_CONFIG_PATH, createTab, editorKindOf, editorKindsOf, modeForEditorKind, disposeTab, primarySelection, selectionAnchor, isSelected, cloneSelection, toggleSelected, rangeSelection, isSpliceablePath, structuralBatch, uniquePaths, unifyValues, setPatchConsumer, recordDocOp, transactDoc, transact, beginBatch, endBatch, isBatching, batchTab, setHistoryDelegate, canUndo, canRedo, undo, redo, mutateInsertNode, mutateRemoveNode, mutateDuplicateNode, mutateRemoveNodes, mutateDuplicateNodes, mutateWrapNode, mutateMoveNode, mutateUpdateProperty, mutateUpdateStyle, mutateUpdateAttribute, mutateUpdateMediaStyle, mutateUpdateNestedStyle, mutateUpdateMediaNestedStyle, mutateUpdateNestedStylePath, mutateUpdateMediaNestedStylePath, mutateReplaceStyle, mutateAddDef, mutateRemoveDef, mutateUpdateDef, mutateRenameDef, mutateUpdateProp, mutateAddSwitchCase, mutateRemoveSwitchCase, mutateRenameSwitchCase, mutateUpdateFrontmatter, collabState, isCollabPath, stringArg, optionalStringArg, boundedNumberArg, booleanArg, enumArg, pathArg, nullablePathArg, pathListArg, argsSchema, enumProperty, derivedEnumProperty, numberProperty, booleanProperty, pathProperty, pathListProperty, stringProperty, coerceArgs, LOCALE_PLACEHOLDER, collectionForDirectory, collectionForFile, camelToLabel, toCamelCase, kebabToLabel, propLabel, attrLabel, abbreviateValue, isMediaFormat, inferInputType, findContentTypeSchema, friendlyNameToVar, varDisplayName, parseCemType, jsonClone, configureCollabSerializer, configureCollabParser, configureCollabNotifier, collabSourceContext, collabReadOnly, collabSave, flushAllCollab, setCollabEnabled, isCollabEnabled, PRIMARY_PANE2, SECONDARY_PANE2, MAX_PANES2, workspace2, activeTab2, activePane2, paneById2, paneOfTab2, focusPane2, isPaneFocused2, splitRight2, paneBeside2, receivingPane2, closePane2, paneIsEmpty2, detachTab2, insertIntoPane2, setWorkspaceProject2, isTabActive2, tabIsLive2, openTab2, promoteTab2, promoteDirtyPreviewTabs2, setTabPinned2, moveTab2, closeTab2, closeAllTabs2, replaceAllTabs2, activateTab2, moveTabToPane2, renameTab2, registerTabCommands2 };
3353
3443
 
3354
- //# debugId=AC037B153E4B837864756E2164756E21
3355
- //# sourceMappingURL=studio-az3zd49t.js.map
3444
+ //# debugId=CC161DFB5A8EC33464756E2164756E21
3445
+ //# sourceMappingURL=studio-ez11dmdh.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  projectState
3
- } from "./studio-6ewqv390.js";
3
+ } from "./studio-m1p9b6c3.js";
4
4
  import {
5
5
  findContentTypeSchema
6
- } from "./studio-az3zd49t.js";
6
+ } from "./studio-ez11dmdh.js";
7
7
  import {
8
8
  collectionInfo2
9
- } from "./studio-x3rty6tr.js";
9
+ } from "./studio-5t7ena5z.js";
10
10
 
11
11
  // src/content/entry-model.ts
12
12
  function collectionNames() {
@@ -88,4 +88,4 @@ function missingRequired(schema, value) {
88
88
  export { entryCollection, entryCollections, collectionOfPath, seedEntry, missingRequired };
89
89
 
90
90
  //# debugId=DEACD1047368F5A364756E2164756E21
91
- //# sourceMappingURL=studio-sgdc5pfc.js.map
91
+ //# sourceMappingURL=studio-hdc2jt3z.js.map
@@ -2,11 +2,11 @@ import {
2
2
  nothing2
3
3
  } from "./studio-1k325pwf.js";
4
4
  import {
5
- isRef2,
5
+ isRef,
6
6
  isTagExpression,
7
7
  tagNameCandidates,
8
8
  displayTagName
9
- } from "./studio-7r42c6ca.js";
9
+ } from "./studio-3ntvq6cg.js";
10
10
  import {
11
11
  getNodeAtPath2,
12
12
  childList,
@@ -19,18 +19,18 @@ import {
19
19
  projectState,
20
20
  VOID_ELEMENTS,
21
21
  updateSession
22
- } from "./studio-6ewqv390.js";
22
+ } from "./studio-m1p9b6c3.js";
23
23
  import {
24
24
  effect,
25
25
  pauseTracking,
26
26
  resetTracking,
27
27
  reactive,
28
28
  notify2
29
- } from "./studio-p1dw8wfw.js";
29
+ } from "./studio-d8z5bajd.js";
30
30
  import {
31
31
  view,
32
32
  stageContaining
33
- } from "./studio-q3x06vmj.js";
33
+ } from "./studio-wnsyffg1.js";
34
34
  import {
35
35
  getPlatform2
36
36
  } from "./studio-6nzaktvy.js";
@@ -61,42 +61,43 @@ import {
61
61
  jsonClone,
62
62
  workspace2,
63
63
  activeTab2
64
- } from "./studio-az3zd49t.js";
64
+ } from "./studio-ez11dmdh.js";
65
65
  import {
66
66
  serializeJson,
67
67
  shell,
68
68
  setActivityTab
69
- } from "./studio-25hkdrkw.js";
69
+ } from "./studio-mpzwze9x.js";
70
70
  import {
71
71
  KEY_SCOPES,
72
72
  checkRecordPlacements,
73
73
  registerPanel
74
- } from "./studio-26d7myd1.js";
74
+ } from "./studio-x72j58vw.js";
75
75
  import {
76
76
  componentRegistry2,
77
77
  loadComponentRegistry2,
78
78
  computeRelativePath2
79
- } from "./studio-d055c37e.js";
79
+ } from "./studio-zjjde71a.js";
80
80
  import {
81
81
  focusItem,
82
82
  activeRegistry
83
- } from "./studio-5jy81t3s.js";
83
+ } from "./studio-p6pmwkvh.js";
84
84
  import {
85
85
  REGION_ATTR,
86
86
  overlayRegion,
87
87
  registerSurface,
88
88
  mountSurface,
89
+ runReported,
89
90
  isModalOpen2,
90
91
  showPromptDialog2,
91
92
  getLayerSlot2,
92
93
  clearLayerSlot2
93
- } from "./studio-erdatzvp.js";
94
+ } from "./studio-ympe0n7a.js";
94
95
  import {
95
96
  stylebook_meta_default,
96
97
  selectStylebookTag,
97
98
  noopCommandDeps,
98
99
  defaultCommands
99
- } from "./studio-3hxkd92t.js";
100
+ } from "./studio-2mdbbc76.js";
100
101
  import {
101
102
  errorMessage2
102
103
  } from "./studio-yxa81f45.js";
@@ -114,7 +115,7 @@ import {
114
115
  getEditSnapshot2,
115
116
  postApplyFormat2,
116
117
  getEditBarAnchorRect2
117
- } from "./studio-rkstz940.js";
118
+ } from "./studio-etvx9s2g.js";
118
119
  import {
119
120
  draggable2
120
121
  } from "./studio-esrxgwh6.js";
@@ -123,13 +124,13 @@ import {
123
124
  dataTypeLabel,
124
125
  inspectorCommands,
125
126
  defCategory
126
- } from "./studio-akbww0j5.js";
127
+ } from "./studio-a1pswps3.js";
127
128
  import {
128
129
  openMenu2
129
- } from "./studio-3gxv60tn.js";
130
+ } from "./studio-qa7fzxan.js";
130
131
  import {
131
132
  usagesSupported2
132
- } from "./studio-81390n6f.js";
133
+ } from "./studio-nq5yf5mp.js";
133
134
  import {
134
135
  listWindow,
135
136
  revealListRow,
@@ -11089,7 +11090,7 @@ function createCommandRegistry(options) {
11089
11090
  if (!registry.isEnabled(hit.commandId)) {
11090
11091
  return hit.commandId;
11091
11092
  }
11092
- registry.run(hit.commandId);
11093
+ runReported(registry, hit.commandId, undefined, "Keyboard");
11093
11094
  return hit.commandId;
11094
11095
  },
11095
11096
  context: options.getContext
@@ -11193,7 +11194,7 @@ function findEnclosingRepeater(doc, path) {
11193
11194
  return node && node.$prototype === "Array" ? node : null;
11194
11195
  }
11195
11196
  function refToStateName(ref) {
11196
- if (!isRef2(ref)) {
11197
+ if (!isRef(ref)) {
11197
11198
  return null;
11198
11199
  }
11199
11200
  const { $ref: target } = ref;
@@ -13080,7 +13081,7 @@ function commandTooltip(registry, command) {
13080
13081
  function runCommand(registry, id, target) {
13081
13082
  const invoke = () => {
13082
13083
  if (registry.isEnabled(id)) {
13083
- registry.run(id);
13084
+ runReported(registry, id, undefined, "Editor");
13084
13085
  }
13085
13086
  };
13086
13087
  if (target) {
@@ -13737,7 +13738,7 @@ function elementCommands(deps) {
13737
13738
  if (!target?.rerender) {
13738
13739
  return;
13739
13740
  }
13740
- const { startLayerTitleEdit } = await (__preload("ar2gh90g"), import("./layers-panel-ar2gh90g.js"));
13741
+ const { startLayerTitleEdit } = await (__preload("fksbdg4q"), import("./layers-panel-fksbdg4q.js"));
13741
13742
  startLayerTitleEdit(target.path, target.rerender);
13742
13743
  }
13743
13744
  }
@@ -15524,7 +15525,7 @@ function registerLayersPanel2() {
15524
15525
  });
15525
15526
  }
15526
15527
 
15527
- export { findEnclosingRepeater, convertToComponent, showSlashMenu, showSlashMenuAtRect, dismissSlashMenu, handleSlashMenuKey, parseChord, normalizeChord, chordFromEvent, formatChord, overlappingScopes, chordsInScopes, CommandUnavailableError, createCommandRegistry, initBlockActionBar, formatCommands, registerSelectionCommands, dismissLinkPopover, dismissBlockActionBar, suppressBlockActionBar, releaseBlockActionBar, isEditChromeTarget, renderBlockActionBar, ok, find, html2, svg, stringify, stringify2, stringifyPosition, VFile, whitespace, setOpenDialog, setOpenPopover, ensurePopoverRevealWatch, startLayerTitleEdit2, registerLayersPanel2, pasteNode, clipboardCommands, setContextMenuNavigate, liveElementCommands, dismissContextMenu, showContextMenu };
15528
+ export { findEnclosingRepeater, convertToComponent, showSlashMenu, showSlashMenuAtRect, dismissSlashMenu, handleSlashMenuKey, parseChord, normalizeChord, chordFromEvent, formatChord, overlappingScopes, chordsInScopes, createCommandRegistry, initBlockActionBar, formatCommands, registerSelectionCommands, dismissLinkPopover, dismissBlockActionBar, suppressBlockActionBar, releaseBlockActionBar, isEditChromeTarget, renderBlockActionBar, ok, find, html2, svg, stringify, stringify2, stringifyPosition, VFile, whitespace, setOpenDialog, setOpenPopover, ensurePopoverRevealWatch, startLayerTitleEdit2, registerLayersPanel2, pasteNode, clipboardCommands, setContextMenuNavigate, liveElementCommands, dismissContextMenu, showContextMenu };
15528
15529
 
15529
- //# debugId=EB28A2BA9967923464756E2164756E21
15530
- //# sourceMappingURL=studio-s6z853aq.js.map
15530
+ //# debugId=7893C37B2DF2B56864756E2164756E21
15531
+ //# sourceMappingURL=studio-hhskq2mr.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
- isRef2,
2
+ isRef,
3
3
  isEventBinding,
4
4
  displayTagName
5
- } from "./studio-7r42c6ca.js";
5
+ } from "./studio-3ntvq6cg.js";
6
6
 
7
7
  // src/ui/timing.ts
8
8
  var INPUT_DEBOUNCE = 400;
@@ -142,7 +142,7 @@ function nodeLabel(node) {
142
142
  }
143
143
  if (node.$prototype === "Array") {
144
144
  const { items } = node;
145
- const ref = (isRef2(items) ? items.$ref : undefined) || "items";
145
+ const ref = (isRef(items) ? items.$ref : undefined) || "items";
146
146
  return `Repeater → ${ref}`;
147
147
  }
148
148
  if (node.$title) {
@@ -351,5 +351,5 @@ function updateCanvas(tab, patch) {
351
351
 
352
352
  export { INPUT_DEBOUNCE, LIVE_PREVIEW, POLL_GIT, getNodeAtPath2, childList, normalizeArrayChildren, parentElementPath, childIndex, pathKey, pathsEqual, isAncestor, flattenTree, nodeLabel, projectState, setProjectState, requireProjectState, stripEventHandlers, activityBar, leftPanel, rightPanel, toolbarEl, statusbarEl, initShellRefs, VOID_ELEMENTS, COMMON_SELECTORS, isNestedSelector, debouncedStyleCommit, cancelStyleDebounce, rendersInFlight, registerRenderer, render3, renderOnly, updateSession, updateUi, updateCanvas };
353
353
 
354
- //# debugId=4E217858397A673D64756E2164756E21
355
- //# sourceMappingURL=studio-6ewqv390.js.map
354
+ //# debugId=9800A80DF4A0581E64756E2164756E21
355
+ //# sourceMappingURL=studio-m1p9b6c3.js.map