@jxsuite/studio 5.1.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 (103) hide show
  1. package/dist/chunks/{cf-account-picker-qwkm9zrf.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-vj72gqtq.js → components-5y78e05d.js} +4 -4
  4. package/dist/chunks/content-source-sgg1sv6n.js +46 -0
  5. package/dist/chunks/{convert-to-repeater-n64h8znc.js → convert-to-repeater-mf1cxgfn.js} +22 -22
  6. package/dist/chunks/entry-commands-w9qsxa6q.js +42 -0
  7. package/dist/chunks/{extension-sections-3hpcambp.js → extension-sections-c6zwzbre.js} +26 -26
  8. package/dist/chunks/{file-ops-8yhd83xr.js → file-ops-vrpq1jjk.js} +22 -22
  9. package/dist/chunks/{files-hnxqxtsg.js → files-msaf95y6.js} +31 -30
  10. package/dist/chunks/{format-host-779sfp2n.js → format-host-f64fnesp.js} +2 -2
  11. package/dist/chunks/{fs-events-b88z7g4h.js → fs-events-3y6y0nrm.js} +4 -4
  12. package/dist/chunks/{git-panel-xwj8fpab.js → git-panel-bv5e22j0.js} +23 -22
  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-syr0f9sb.js → iframe-host-dh5np8vk.js} +13 -13
  16. package/dist/chunks/{layers-ff81wthn.js → layers-1vcfdbet.js} +5 -5
  17. package/dist/chunks/layers-panel-fksbdg4q.js +40 -0
  18. package/dist/chunks/{media-picker-cqhhxhhe.js → media-picker-p49nhqhs.js} +13 -13
  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-qvvxej7h.js → references-h69xp9zz.js} +2 -2
  26. package/dist/chunks/right-panel-j97t2yvy.js +45 -0
  27. package/dist/chunks/{studio-b0k5tqgp.js → studio-01jeck2y.js} +31 -27
  28. package/dist/chunks/{studio-wqz6dggm.js → studio-14d9tq4d.js} +9 -9
  29. package/dist/chunks/{studio-try13h8c.js → studio-15f3kxqe.js} +18 -18
  30. package/dist/chunks/studio-1tbjfqv4.js +146 -0
  31. package/dist/chunks/{studio-vw7mzp6z.js → studio-28vs5k2y.js} +2 -2
  32. package/dist/chunks/{studio-93zafjcm.js → studio-2mdbbc76.js} +10 -10
  33. package/dist/chunks/{studio-7r42c6ca.js → studio-3ntvq6cg.js} +5 -5
  34. package/dist/chunks/{studio-g3jevyjt.js → studio-4c041r8y.js} +2 -2
  35. package/dist/chunks/{studio-3773086z.js → studio-4r14yzyy.js} +4 -4
  36. package/dist/chunks/{studio-3rz5md06.js → studio-4xmjcrg3.js} +6 -6
  37. package/dist/chunks/{studio-syg2tadj.js → studio-5nz00bhh.js} +3 -3
  38. package/dist/chunks/{studio-1knfqgy7.js → studio-5t7ena5z.js} +8 -8
  39. package/dist/chunks/{studio-a79k90n9.js → studio-66arbpc2.js} +8 -8
  40. package/dist/chunks/{studio-b4s9eykd.js → studio-68fydsrj.js} +15 -15
  41. package/dist/chunks/{studio-mhhyamxf.js → studio-9j6sfeba.js} +6 -6
  42. package/dist/chunks/{studio-7xnmgv66.js → studio-a1pswps3.js} +37 -37
  43. package/dist/chunks/{studio-6xa21ej9.js → studio-c04nzbby.js} +2 -2
  44. package/dist/chunks/{studio-nzzpvzx9.js → studio-c07s5ckd.js} +4 -4
  45. package/dist/chunks/{studio-js8nv53n.js → studio-ctm7bhx5.js} +14 -14
  46. package/dist/chunks/{studio-p1dw8wfw.js → studio-d8z5bajd.js} +14 -10
  47. package/dist/chunks/{studio-jxp12rnj.js → studio-en82c639.js} +6 -6
  48. package/dist/chunks/{studio-1z1kcjv4.js → studio-etvx9s2g.js} +11 -11
  49. package/dist/chunks/{studio-k75n7vhp.js → studio-ez11dmdh.js} +74 -36
  50. package/dist/chunks/{studio-qhhm6hbt.js → studio-hdc2jt3z.js} +4 -4
  51. package/dist/chunks/{studio-r6nvacqs.js → studio-hhskq2mr.js} +19 -19
  52. package/dist/chunks/{studio-6ewqv390.js → studio-m1p9b6c3.js} +5 -5
  53. package/dist/chunks/{studio-qk90fgqm.js → studio-mpzwze9x.js} +7 -7
  54. package/dist/chunks/{studio-e1pgga3k.js → studio-ncn9e189.js} +7 -7
  55. package/dist/chunks/{studio-kkqkcp3d.js → studio-p6pmwkvh.js} +10 -10
  56. package/dist/chunks/{studio-aj37eer3.js → studio-qa7fzxan.js} +4 -4
  57. package/dist/chunks/{studio-sbjyc8bt.js → studio-sar8g54p.js} +8 -8
  58. package/dist/chunks/studio-t171hxhe.js +23 -0
  59. package/dist/chunks/{studio-pxbgypmg.js → studio-t3adrr56.js} +17 -14
  60. package/dist/chunks/{studio-hhvs4sdg.js → studio-vn5hske5.js} +10 -4
  61. package/dist/chunks/{studio-5wt9nvhd.js → studio-vt0tj32j.js} +29 -42
  62. package/dist/chunks/{studio-qk4bfsq2.js → studio-wjpgxywa.js} +4 -4
  63. package/dist/chunks/{studio-q3x06vmj.js → studio-wnsyffg1.js} +2 -2
  64. package/dist/chunks/{studio-gb13095a.js → studio-x10fp4tp.js} +59 -20
  65. package/dist/chunks/{studio-8scdew0e.js → studio-x72j58vw.js} +4 -4
  66. package/dist/chunks/{studio-tqgryxwg.js → studio-y4f9fdge.js} +7 -7
  67. package/dist/chunks/{studio-vfq8qpjt.js → studio-ympe0n7a.js} +3 -3
  68. package/dist/chunks/{studio-y9zedyjn.js → studio-z2smx5ce.js} +2 -2
  69. package/dist/chunks/{studio-zdn2g6dt.js → studio-zjjde71a.js} +2 -2
  70. package/dist/chunks/{workspace-t55jdjbx.js → workspace-bnw54cha.js} +18 -10
  71. package/dist/iframe-entry.js +7 -3
  72. package/dist/studio.css +1 -2
  73. package/dist/studio.js +866 -15698
  74. package/package.json +6 -6
  75. package/src/files/files.ts +38 -15
  76. package/src/grid/grid-lazy.ts +59 -0
  77. package/src/grid/grid-open.ts +20 -3
  78. package/src/grid/grid-panel.ts +43 -9
  79. package/src/media/media-open.ts +14 -2
  80. package/src/panels/pane-context.ts +5 -4
  81. package/src/panels/pane-grid.ts +100 -10
  82. package/src/panels/tab-drop.ts +220 -0
  83. package/src/panels/tab-strip.ts +235 -30
  84. package/src/services/ai-models.ts +13 -0
  85. package/src/studio.ts +10 -6
  86. package/src/surfaces/commandbar.json +26 -16
  87. package/src/surfaces/pane-grid.json +35 -3
  88. package/src/surfaces/pane-grid.ts +26 -4
  89. package/src/surfaces/tab-strip.json +16 -39
  90. package/src/surfaces/tab-strip.ts +76 -12
  91. package/src/ui/ai-credentials-form.ts +12 -1
  92. package/src/workspace/pane-derive.ts +7 -5
  93. package/src/workspace/session.ts +3 -3
  94. package/src/workspace/workspace.ts +160 -43
  95. package/styles/shell-frame.css +8 -0
  96. package/styles/shell-frame.json +4 -0
  97. package/dist/chunks/content-source-5mex4x1h.js +0 -46
  98. package/dist/chunks/entry-commands-234hjnqw.js +0 -42
  99. package/dist/chunks/layers-panel-pnnghw12.js +0 -40
  100. package/dist/chunks/menu-9p2w46gj.js +0 -15
  101. package/dist/chunks/publish-panel-5zt840sy.js +0 -27
  102. package/dist/chunks/quick-search-3748564r.js +0 -45
  103. package/dist/chunks/right-panel-eccz92qt.js +0 -45
@@ -4,7 +4,7 @@ import {
4
4
  } from "./studio-6nzaktvy.js";
5
5
  import {
6
6
  displayTagName
7
- } from "./studio-7r42c6ca.js";
7
+ } from "./studio-3ntvq6cg.js";
8
8
  import {
9
9
  errorMessage2
10
10
  } from "./studio-yxa81f45.js";
@@ -24,7 +24,7 @@ import {
24
24
  clearProblems2,
25
25
  problemFindings2,
26
26
  problemCount2
27
- } from "./studio-p1dw8wfw.js";
27
+ } from "./studio-d8z5bajd.js";
28
28
  import {
29
29
  loadFormats2,
30
30
  formatByName2,
@@ -34,7 +34,7 @@ import {
34
34
  formatParse2,
35
35
  formatSerialize2,
36
36
  splitFormatDocument2
37
- } from "./studio-vw7mzp6z.js";
37
+ } from "./studio-28vs5k2y.js";
38
38
  import {
39
39
  getNodeAtPath2,
40
40
  childList,
@@ -42,7 +42,7 @@ import {
42
42
  nodeLabel,
43
43
  projectState,
44
44
  statusbarEl
45
- } from "./studio-6ewqv390.js";
45
+ } from "./studio-m1p9b6c3.js";
46
46
  import {
47
47
  EDITOR_KIND_LABELS,
48
48
  primarySelection,
@@ -59,10 +59,10 @@ import {
59
59
  PRIMARY_PANE2,
60
60
  workspace2,
61
61
  activeTab2
62
- } from "./studio-k75n7vhp.js";
62
+ } from "./studio-ez11dmdh.js";
63
63
  import {
64
64
  isMediaFile
65
- } from "./studio-jxp12rnj.js";
65
+ } from "./studio-en82c639.js";
66
66
  import {
67
67
  POPOVER_DEFAULT_MODE,
68
68
  findPopoverDefects,
@@ -70,38 +70,38 @@ import {
70
70
  POPOVER_TAGS,
71
71
  INVOKER_TAGS,
72
72
  activeRegistry
73
- } from "./studio-kkqkcp3d.js";
73
+ } from "./studio-p6pmwkvh.js";
74
74
  import {
75
75
  paneRegion,
76
76
  registerSurface,
77
77
  mountSurface,
78
78
  runReported,
79
79
  showConfirmDialog2
80
- } from "./studio-vfq8qpjt.js";
80
+ } from "./studio-ympe0n7a.js";
81
81
  import {
82
82
  openMenu2
83
- } from "./studio-aj37eer3.js";
83
+ } from "./studio-qa7fzxan.js";
84
84
  import {
85
85
  parseJsonDocument,
86
86
  serializeJson,
87
87
  shell
88
- } from "./studio-qk90fgqm.js";
88
+ } from "./studio-mpzwze9x.js";
89
89
  import {
90
90
  deployStatusItem
91
- } from "./studio-mhhyamxf.js";
91
+ } from "./studio-9j6sfeba.js";
92
92
  import {
93
93
  tabOfPane,
94
94
  derivationOfPane,
95
95
  findDialogDefects,
96
96
  flushCanvasEdits2
97
- } from "./studio-1z1kcjv4.js";
97
+ } from "./studio-etvx9s2g.js";
98
98
  import {
99
99
  isRecentLocal2
100
- } from "./studio-g3jevyjt.js";
100
+ } from "./studio-4c041r8y.js";
101
101
  import {
102
102
  showProgressModal,
103
103
  loadMediaUsages
104
- } from "./studio-tqgryxwg.js";
104
+ } from "./studio-y4f9fdge.js";
105
105
  import {
106
106
  validateComponentSlots
107
107
  } from "./studio-q0a3yk4n.js";
@@ -386,7 +386,7 @@ function mountJumpBarSurface(host, region, actions) {
386
386
  var pane_grid_default = {
387
387
  $schema: "https://jxsuite.com/schema/v1",
388
388
  $id: "StudioPaneGrid",
389
- $description: "The pane grid (studio.md §18.1): one cell per pane, with a splitter before every cell but the first. Every box here is EMPTY by design — the four inside a cell are hosts other modules fill (`panels/tab-strip.ts` the strip, `panels/jump-bar.ts` the jump bar, `panels/pane-context.ts` the chrome layer, `canvas/canvas-render.ts` the stage), and the stage is an ISLAND in the §9.4 sense: the canvas host mounts a cross-origin `<iframe>` into it, so nothing this document draws may ever go inside it. What the document owns is the STRUCTURE and the STYLE — the cell's own two-row grid, the three row-2 children that share its lower cell, and the splitter — which is `styles/shell.css`'s `.pane*` block and `styles/canvas.css`'s `.pane-stage` rule, carried here and keyed on `part`. Two things are load-bearing and easy to undo. (1) **A row that moves reloads an iframe**, so the keyed `$map` is not an optimisation: `workspace.panes[0]` is always the primary and `MAX_PANES` is 2, the key is the pane id, and the runtime's forward-cursor pass therefore never moves a kept row — gaining or losing the side pane leaves the primary's node, and the frame inside it, untouched. (2) **The splitter must sit BETWEEN two cells and inside neither**, so each row is a `display: contents` wrapper holding its own leading splitter and its cell: the wrapper generates no box, so the splitter and the two cells are the grid items of `#pane-grid` in DOM order, and a pointer landing on the splitter is in no cell at all. Every selector below is a `>` chain from the root, because a pane's stage hosts other surface documents and a bare `[part=\"row\"]` descendant rule would reach into them.",
389
+ $description: "The pane grid (studio.md §18.1): one cell per pane, with a splitter before every cell but the first. Every box here is EMPTY by design — the FIVE inside a cell are hosts other modules fill (`panels/tab-strip.ts` the strip, `panels/jump-bar.ts` the jump bar, `panels/pane-context.ts` the chrome layer, `canvas/canvas-render.ts` the stage, `panels/pane-grid.ts` itself the right-edge drop zone), and the stage is an ISLAND in the §9.4 sense: the canvas host mounts a cross-origin `<iframe>` into it, so nothing this document draws may ever go inside it. What the document owns is the STRUCTURE and the STYLE — the cell's own two-row grid, the three row-2 children that share its lower cell, and the splitter — which is `styles/shell.css`'s `.pane*` block and `styles/canvas.css`'s `.pane-stage` rule, carried here and keyed on `part`. Two things are load-bearing and easy to undo. (1) **A row that moves reloads an iframe**, so the keyed `$map` is not an optimisation: `workspace.panes[0]` is always the primary and `MAX_PANES` is 2, the key is the pane id, and the runtime's forward-cursor pass therefore never moves a kept row — gaining or losing the side pane leaves the primary's node, and the frame inside it, untouched. (2) **The splitter must sit BETWEEN two cells and inside neither**, so each row is a `display: contents` wrapper holding its own leading splitter and its cell: the wrapper generates no box, so the splitter and the two cells are the grid items of `#pane-grid` in DOM order, and a pointer landing on the splitter is in no cell at all. Every selector below is a `>` chain from the root, because a pane's stage hosts other surface documents and a bare `[part=\"row\"]` descendant rule would reach into them.",
390
390
  tagName: "div",
391
391
  attributes: {
392
392
  part: "grid",
@@ -412,7 +412,7 @@ var pane_grid_default = {
412
412
  zIndex: "10"
413
413
  },
414
414
  '& > [part="row"] > [part="pane"]': {
415
- $description: 'ONE PANE, and one COLUMN, declared. Three children name `grid-row: 2` in order to share the lower cell, and auto-placement answers that by inventing an implicit column each: the jump bar, the chrome layer and the stage lined up side by side, the stage taking a third of the pane and pinning the document to the right edge. `grid-template-columns` is what makes "share the cell" mean it, and every row-2 child restates `grid-column: 1` so a future fourth one cannot re-open the same hole. No unit test can see this — happy-dom does no layout, so every rect is zero — which is why the screenshot lane is what caught it.',
415
+ $description: 'ONE PANE, and one COLUMN, declared. Four children name `grid-row: 2` in order to share the lower cell, and auto-placement answers that by inventing an implicit column each: the jump bar, the chrome layer, the stage and the drop zone lined up side by side, the stage taking a third of the pane and pinning the document to the right edge. `grid-template-columns` is what makes "share the cell" mean it, and every row-2 child restates `grid-column: 1` so a future fifth one cannot re-open the same hole. No unit test can see this — happy-dom does no layout, so every rect is zero — which is why the screenshot lane is what caught it.',
416
416
  display: "grid",
417
417
  gridTemplateColumns: "minmax(0, 1fr)",
418
418
  gridTemplateRows: "auto minmax(0, 1fr)",
@@ -467,11 +467,33 @@ var pane_grid_default = {
467
467
  display: "flex",
468
468
  gap: "var(--jx-space-6)",
469
469
  alignItems: "flex-start"
470
+ },
471
+ '& > [part="row"] > [part="pane"] > [part="drop-zone"]': {
472
+ $description: "The right-edge target that creates a second pane (§18.1). Sits ABOVE the stage (`z-index: 4` against the stage's own stacking, jump's 3, chrome's 2) so a drag reaches it before it reaches the cross-origin iframe underneath, which would otherwise swallow every drag event with no affordance to say so. `pointer-events: none` when unarmed — a mouse doing anything other than dragging a tab or a file must pass straight through to the stage — and `auto` only while `data-armed` is set, which `panels/pane-grid.ts`'s own arming monitor writes for the DURATION of a drag it recognises, never for a click.",
473
+ gridRow: "2",
474
+ gridColumn: "1",
475
+ position: "relative",
476
+ zIndex: "4",
477
+ minWidth: "0",
478
+ pointerEvents: "none"
479
+ },
480
+ '& > [part="row"] > [part="pane"] > [part="drop-zone"][data-armed]': {
481
+ pointerEvents: "auto"
482
+ },
483
+ '& > [part="row"] > [part="pane"] > [part="drop-zone"][data-over]::after': {
484
+ $description: "The right BAND, not the whole cell: the zone only ever ACCEPTS a drop in that band (`panels/pane-grid.ts`'s `edgeData`), so lighting the whole cell would promise a drop this element refuses everywhere else in it.",
485
+ content: '""',
486
+ position: "absolute",
487
+ insetBlock: "0",
488
+ insetInlineEnd: "0",
489
+ insetInlineStart: "50%",
490
+ background: "color-mix(in srgb, var(--accent) 14%, transparent)",
491
+ borderInlineStart: "2px solid var(--accent)"
470
492
  }
471
493
  },
472
494
  children: [
473
495
  {
474
- $description: "Keyed on the PANE ID, and that is the whole of §18.1 rule 1's structural half: the key is what makes the runtime MOVE a kept row rather than rebuild it, and re-parenting is not a move for an `<iframe>` — it reloads, dropping its `iframe-channel` connection, its shadow document and every `ready` panel with it. A row renders complete (its cell, its four hosts and its splitter) inside the row's own effect scope before it is inserted, so there is no frame in which a cell exists with no stage inside it.",
496
+ $description: "Keyed on the PANE ID, and that is the whole of §18.1 rule 1's structural half: the key is what makes the runtime MOVE a kept row rather than rebuild it, and re-parenting is not a move for an `<iframe>` — it reloads, dropping its `iframe-channel` connection, its shadow document and every `ready` panel with it. A row renders complete (its cell, its five hosts and its splitter) inside the row's own effect scope before it is inserted, so there is no frame in which a cell exists with no stage inside it.",
475
497
  $prototype: "Array",
476
498
  items: { $ref: "#/state/rows" },
477
499
  key: { $ref: "$map/item/id" },
@@ -563,6 +585,16 @@ var pane_grid_default = {
563
585
  part: "pane-stage",
564
586
  "data-jx-region": "${$map.item.region}"
565
587
  }
588
+ },
589
+ {
590
+ $description: "The right-edge drop target (§18.1). No `data-jx-region`: `pane.<id>` uniqueness names the stage, and a second element answering to it would be a silently widened crop the moment a shot cropped this pane.",
591
+ tagName: "div",
592
+ attributes: {
593
+ part: "drop-zone",
594
+ role: "none",
595
+ "data-armed": "${state.armed ? '' : null}",
596
+ "data-over": "${state.edgePane === $map.item.id ? '' : null}"
597
+ }
566
598
  }
567
599
  ]
568
600
  }
@@ -583,7 +615,8 @@ var CELL_PARTS = new Map([
583
615
  ["strip", "strip"],
584
616
  ["jump", "jump"],
585
617
  ["chrome", "chrome"],
586
- ["pane-stage", "stage"]
618
+ ["pane-stage", "stage"],
619
+ ["drop-zone", "dropZone"]
587
620
  ]);
588
621
  function partOf(def) {
589
622
  const part = typeof def === "string" ? undefined : def.attributes?.["part"];
@@ -596,6 +629,8 @@ function paneOf(state) {
596
629
  function mountPaneGridSurface(host, rows, split, actions) {
597
630
  host.replaceChildren();
598
631
  const scope = reactive({
632
+ armed: false,
633
+ edgePane: "",
599
634
  move: actions.move,
600
635
  paneSplit: split.value,
601
636
  rows,
@@ -628,6 +663,10 @@ function mountPaneGridSurface(host, rows, split, actions) {
628
663
  mounted = null;
629
664
  host.replaceChildren();
630
665
  },
666
+ drag(state) {
667
+ scope.armed = state.armed;
668
+ scope.edgePane = state.edgePane;
669
+ },
631
670
  ready,
632
671
  update(next, value) {
633
672
  scope.rows = next;
@@ -2802,5 +2841,5 @@ async function renamePromptMessage2(path, verb = "rename") {
2802
2841
 
2803
2842
  export { cellValuesEqual, makeGridTabId, parseGridTabId, gridTabLabel, columnsFromSchema, inferColumnsFromRows, coerceCellInput, cellToText, ROW_KEY_FIELD, getGridController, createGridController, PANE_SELECTOR, STAGE_SELECTOR, mountPaneGridSurface, attachJumpBarHost, mountJumpBar, projectSessions, renderStatusbar, mountStatusbar, registerPopoverCommands, serializeDocument, notePreviewOverlayEdit, armPreviewOverlay, disarmPreviewOverlay, flushPreviewOverlay, mediaTypeEssence, parseSourceForPath2, parseCollabSource2, setDocumentSavedListener2, saveFile2, exportFile2, confirmFileDelete2, renamePromptMessage2 };
2804
2843
 
2805
- //# debugId=4552E6F8EAA3D63064756E2164756E21
2806
- //# sourceMappingURL=studio-gb13095a.js.map
2844
+ //# debugId=DBDB9C97E212B0A564756E2164756E21
2845
+ //# sourceMappingURL=studio-x10fp4tp.js.map
@@ -2,13 +2,13 @@ import {
2
2
  resolveI18n,
3
3
  emptyContext,
4
4
  activeTab2
5
- } from "./studio-k75n7vhp.js";
5
+ } from "./studio-ez11dmdh.js";
6
6
  import {
7
7
  projectState
8
- } from "./studio-6ewqv390.js";
8
+ } from "./studio-m1p9b6c3.js";
9
9
  import {
10
10
  shell
11
- } from "./studio-qk90fgqm.js";
11
+ } from "./studio-mpzwze9x.js";
12
12
 
13
13
  // src/commands/levels.ts
14
14
  var LEVELS = ["application", "project", "document", "selection"];
@@ -255,4 +255,4 @@ function railPanelSet() {
255
255
  export { LEVELS, KEY_SCOPES, CATEGORIES, checkRecordPlacements, panelContext, registerPanel, getPanel, listPanels, isPanelVisible, railGroups, railPanelSet };
256
256
 
257
257
  //# debugId=18BC2C98470D23FD64756E2164756E21
258
- //# sourceMappingURL=studio-8scdew0e.js.map
258
+ //# sourceMappingURL=studio-x72j58vw.js.map
@@ -5,20 +5,20 @@ import {
5
5
  normalizeProjectPath,
6
6
  showModal,
7
7
  close2
8
- } from "./studio-kkqkcp3d.js";
8
+ } from "./studio-p6pmwkvh.js";
9
9
  import {
10
10
  syncDeployChecklist
11
- } from "./studio-mhhyamxf.js";
11
+ } from "./studio-9j6sfeba.js";
12
12
  import {
13
13
  effectScope,
14
14
  effect,
15
15
  reactive,
16
16
  now,
17
17
  notify2
18
- } from "./studio-p1dw8wfw.js";
18
+ } from "./studio-d8z5bajd.js";
19
19
  import {
20
20
  setBottomTab
21
- } from "./studio-qk90fgqm.js";
21
+ } from "./studio-mpzwze9x.js";
22
22
  import {
23
23
  REGION_ATTR,
24
24
  overlayRegion,
@@ -26,10 +26,10 @@ import {
26
26
  mountSurface,
27
27
  whenReady,
28
28
  layerHost2
29
- } from "./studio-vfq8qpjt.js";
29
+ } from "./studio-ympe0n7a.js";
30
30
  import {
31
31
  registerPanel
32
- } from "./studio-8scdew0e.js";
32
+ } from "./studio-x72j58vw.js";
33
33
  import {
34
34
  peekUsages2,
35
35
  loadUsages2,
@@ -1168,4 +1168,4 @@ function showProgressModal(opts) {
1168
1168
  export { beginActivity, activityIdleBlockers, registerActivityPanel, showProgressModal, peekMediaUsages, loadMediaUsages, mediaUsageHeadline };
1169
1169
 
1170
1170
  //# debugId=0FE9D80FF9C2142764756E2164756E21
1171
- //# sourceMappingURL=studio-tqgryxwg.js.map
1171
+ //# sourceMappingURL=studio-y4f9fdge.js.map
@@ -10,7 +10,7 @@ import {
10
10
  selectValue,
11
11
  registerUi,
12
12
  activeRegistry
13
- } from "./studio-kkqkcp3d.js";
13
+ } from "./studio-p6pmwkvh.js";
14
14
  import {
15
15
  effectScope,
16
16
  effect,
@@ -18,7 +18,7 @@ import {
18
18
  toasts2,
19
19
  notify2,
20
20
  dismiss2
21
- } from "./studio-p1dw8wfw.js";
21
+ } from "./studio-d8z5bajd.js";
22
22
  import {
23
23
  errorMessage2
24
24
  } from "./studio-yxa81f45.js";
@@ -1216,4 +1216,4 @@ function unmountToastHost() {
1216
1216
  export { mountsUsing, mountsOf, registerKit, REGION_ATTR, resolveRegion, REGION_FOR_FOCUS, paneRegion, paneStripRegion, navigatorPanelRegion, inspectorTabRegion, NAVIGATOR_STATEMENTS_REGION, inspectorStatementsRegion, bottomPanelRegion, overlayRegion, registerSurface, surfaceDocument, mountSurface, whenReady, openDialogSurface, runReported, runActiveReported, layerHost2, initLayers2, isModalOpen2, showConfirmDialog2, showSaveDiscardDialog2, showPromptDialog2, getLayerSlot2, clearLayerSlot2, overlayIdleBlockers2 };
1217
1217
 
1218
1218
  //# debugId=0892C6B4A7BF4FE464756E2164756E21
1219
- //# sourceMappingURL=studio-vfq8qpjt.js.map
1219
+ //# sourceMappingURL=studio-ympe0n7a.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./studio-6nzaktvy.js";
5
5
  import {
6
6
  notify2
7
- } from "./studio-p1dw8wfw.js";
7
+ } from "./studio-d8z5bajd.js";
8
8
 
9
9
  // src/services/settings/definitions.ts
10
10
  function normalizeBaseUrl(raw) {
@@ -279,4 +279,4 @@ function watchRemoteSettings() {
279
279
  export { SETTINGS, readStoredSetting, hasSetting, onSettingsChanged, settingsSettled, setSetting, setSettings, clearSettings, hydrateSettings, watchRemoteSettings };
280
280
 
281
281
  //# debugId=8DE88702AC5D888464756E2164756E21
282
- //# sourceMappingURL=studio-y9zedyjn.js.map
282
+ //# sourceMappingURL=studio-z2smx5ce.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./studio-6nzaktvy.js";
4
4
  import {
5
5
  projectState
6
- } from "./studio-6ewqv390.js";
6
+ } from "./studio-m1p9b6c3.js";
7
7
 
8
8
  // ../schema/src/component-meta.ts
9
9
  function collectSlotDefs(node, out = []) {
@@ -145,4 +145,4 @@ function computeRelativePath2(fromDocPath, toCompPath) {
145
145
  export { componentMetaFrom, componentRegistry2, loadComponentRegistry2, noteComponentSaved2, buildComponentInstance2, computeRelativePath2 };
146
146
 
147
147
  //# debugId=466165F8ABAECB0564756E2164756E21
148
- //# sourceMappingURL=studio-zdn2g6dt.js.map
148
+ //# sourceMappingURL=studio-zjjde71a.js.map
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  PRIMARY_PANE2,
3
3
  SECONDARY_PANE2,
4
+ MAX_PANES2,
4
5
  workspace2,
5
6
  activeTab2,
6
7
  activePane2,
@@ -8,8 +9,11 @@ import {
8
9
  paneOfTab2,
9
10
  focusPane2,
10
11
  isPaneFocused2,
11
- sidePane2,
12
+ splitRight2,
13
+ paneBeside2,
12
14
  receivingPane2,
15
+ closePane2,
16
+ paneIsEmpty2,
13
17
  detachTab2,
14
18
  insertIntoPane2,
15
19
  setWorkspaceProject2,
@@ -27,20 +31,22 @@ import {
27
31
  moveTabToPane2,
28
32
  renameTab2,
29
33
  registerTabCommands2
30
- } from "./studio-k75n7vhp.js";
31
- import"./studio-q3x06vmj.js";
32
- import"./studio-6ewqv390.js";
33
- import"./studio-vw7mzp6z.js";
34
+ } from "./studio-ez11dmdh.js";
35
+ import"./studio-wnsyffg1.js";
36
+ import"./studio-m1p9b6c3.js";
37
+ import"./studio-28vs5k2y.js";
34
38
  import"./studio-6nzaktvy.js";
35
- import"./studio-p1dw8wfw.js";
36
- import"./studio-7r42c6ca.js";
39
+ import"./studio-3ntvq6cg.js";
40
+ import"./studio-d8z5bajd.js";
37
41
  export {
42
+ MAX_PANES2 as MAX_PANES,
38
43
  PRIMARY_PANE2 as PRIMARY_PANE,
39
44
  SECONDARY_PANE2 as SECONDARY_PANE,
40
45
  activateTab2 as activateTab,
41
46
  activePane2 as activePane,
42
47
  activeTab2 as activeTab,
43
48
  closeAllTabs2 as closeAllTabs,
49
+ closePane2 as closePane,
44
50
  closeTab2 as closeTab,
45
51
  detachTab2 as detachTab,
46
52
  focusPane2 as focusPane,
@@ -50,7 +56,9 @@ export {
50
56
  moveTab2 as moveTab,
51
57
  moveTabToPane2 as moveTabToPane,
52
58
  openTab2 as openTab,
59
+ paneBeside2 as paneBeside,
53
60
  paneById2 as paneById,
61
+ paneIsEmpty2 as paneIsEmpty,
54
62
  paneOfTab2 as paneOfTab,
55
63
  promoteDirtyPreviewTabs2 as promoteDirtyPreviewTabs,
56
64
  promoteTab2 as promoteTab,
@@ -60,10 +68,10 @@ export {
60
68
  replaceAllTabs2 as replaceAllTabs,
61
69
  setTabPinned2 as setTabPinned,
62
70
  setWorkspaceProject2 as setWorkspaceProject,
63
- sidePane2 as sidePane,
71
+ splitRight2 as splitRight,
64
72
  tabIsLive2 as tabIsLive,
65
73
  workspace2 as workspace
66
74
  };
67
75
 
68
- //# debugId=38ABE52702AF922364756E2164756E21
69
- //# sourceMappingURL=workspace-t55jdjbx.js.map
76
+ //# debugId=DAA0C7B0A6B56CB064756E2164756E21
77
+ //# sourceMappingURL=workspace-bnw54cha.js.map
@@ -28,7 +28,7 @@ var __chunks = (base, ids, nodes, entry) => {
28
28
  __chunkSeen ||= {};
29
29
  __preload(ids[entry], 1);
30
30
  };
31
- __chunks(import.meta.url,["1zk4r753","a73p0pqm","eptb614w","abk6qyee","780pvfbv","3sqv46sn","xgg3kfw7","yy10wk9r","5cndyft8","sp6tna8v","47z3ytva","2r16ez41","g7nm1rgb","t0n6h2rn","wbp1cdws","xbh5bhtr","v17df7b8","anwybnkn","44ez96fc","5e7jev23","s890b918","6v2ac08j","q99sy9rf","nbyxee1y","15g3n6xv","b27vq81n"],[["./iframe-entry.js"],["./chunks/tree-a73p0pqm.js"],["./chunks/tooltip-eptb614w.js",23],["./chunks/textfield-abk6qyee.js"],["./chunks/toast-780pvfbv.js",24],["./chunks/toast-host-3sqv46sn.js",24],["./chunks/color-xgg3kfw7.js",25],["./chunks/icons-yy10wk9r.js"],["./chunks/number-field-5cndyft8.js"],["./chunks/action-group-sp6tna8v.js"],["./chunks/popover-47z3ytva.js",23],["./chunks/select-2r16ez41.js"],["./chunks/split-g7nm1rgb.js"],["./chunks/swatch-group-t0n6h2rn.js"],["./chunks/tabs-wbp1cdws.js"],["./chunks/toolbar-xbh5bhtr.js"],["./chunks/color-area-v17df7b8.js",25],["./chunks/color-field-anwybnkn.js",25,23],["./chunks/color-slider-44ez96fc.js",25],["./chunks/combobox-5e7jev23.js",23],["./chunks/dialog-s890b918.js"],["./chunks/listbox-6v2ac08j.js"],["./chunks/menu-q99sy9rf.js",23],["./chunks/iframe-entry-nbyxee1y.js"],["./chunks/iframe-entry-15g3n6xv.js"],["./chunks/iframe-entry-b27vq81n.js"]],0);
31
+ __chunks(import.meta.url,["e088w1ns","a73p0pqm","eptb614w","abk6qyee","780pvfbv","3sqv46sn","xgg3kfw7","yy10wk9r","5cndyft8","sp6tna8v","47z3ytva","2r16ez41","g7nm1rgb","t0n6h2rn","wbp1cdws","xbh5bhtr","v17df7b8","anwybnkn","44ez96fc","5e7jev23","s890b918","6v2ac08j","q99sy9rf","nbyxee1y","15g3n6xv","b27vq81n"],[["./iframe-entry.js"],["./chunks/tree-a73p0pqm.js"],["./chunks/tooltip-eptb614w.js",23],["./chunks/textfield-abk6qyee.js"],["./chunks/toast-780pvfbv.js",24],["./chunks/toast-host-3sqv46sn.js",24],["./chunks/color-xgg3kfw7.js",25],["./chunks/icons-yy10wk9r.js"],["./chunks/number-field-5cndyft8.js"],["./chunks/action-group-sp6tna8v.js"],["./chunks/popover-47z3ytva.js",23],["./chunks/select-2r16ez41.js"],["./chunks/split-g7nm1rgb.js"],["./chunks/swatch-group-t0n6h2rn.js"],["./chunks/tabs-wbp1cdws.js"],["./chunks/toolbar-xbh5bhtr.js"],["./chunks/color-area-v17df7b8.js",25],["./chunks/color-field-anwybnkn.js",25,23],["./chunks/color-slider-44ez96fc.js",25],["./chunks/combobox-5e7jev23.js",23],["./chunks/dialog-s890b918.js"],["./chunks/listbox-6v2ac08j.js"],["./chunks/menu-q99sy9rf.js",23],["./chunks/iframe-entry-nbyxee1y.js"],["./chunks/iframe-entry-15g3n6xv.js"],["./chunks/iframe-entry-b27vq81n.js"]],0);
32
32
 
33
33
  // src/canvas/iframe-channel.ts
34
34
  var ENVELOPE = "jx:canvas";
@@ -868,7 +868,11 @@ function reactiveReadArray(array) {
868
868
  if (raw === array)
869
869
  return raw;
870
870
  track(raw, "iterate", ARRAY_ITERATE_KEY);
871
- return isShallow(array) ? raw : raw.map(toReactive);
871
+ if (isShallow(array))
872
+ return raw;
873
+ if (!isReadonly(array))
874
+ return raw.map(toReactive);
875
+ return isReactive(array) ? raw.map((item) => toReadonly(toReactive(item))) : raw.map(toReadonly);
872
876
  }
873
877
  function shallowReadArray(arr) {
874
878
  track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY);
@@ -9865,5 +9869,5 @@ export {
9865
9869
  startCanvasIframe
9866
9870
  };
9867
9871
 
9868
- //# debugId=2FA5492A7FC7235764756E2164756E21
9872
+ //# debugId=79BB51FCC1FC2ADA64756E2164756E21
9869
9873
  //# sourceMappingURL=iframe-entry.js.map
package/dist/studio.css CHANGED
@@ -7366,7 +7366,6 @@
7366
7366
 
7367
7367
  .tabulator .tabulator-header .tabulator-frozen-rows-holder {
7368
7368
  display: inline-block;
7369
- padding-top: 1em;
7370
7369
  }
7371
7370
 
7372
7371
  .tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {
@@ -7433,7 +7432,7 @@
7433
7432
  .tabulator .tabulator-tableholder .tabulator-range-overlay {
7434
7433
  pointer-events: none;
7435
7434
  position: absolute;
7436
- z-index: 10;
7435
+ z-index: 11;
7437
7436
  inset: 0;
7438
7437
  }
7439
7438