@jxsuite/studio 5.1.0 → 5.3.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 (117) hide show
  1. package/dist/chunks/{cf-account-picker-qwkm9zrf.js → cf-account-picker-nwnwdm6p.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-4rzvmp0m.js +46 -0
  5. package/dist/chunks/{convert-to-repeater-n64h8znc.js → convert-to-repeater-jxsv62v7.js} +22 -22
  6. package/dist/chunks/entry-commands-1wnsqn5d.js +42 -0
  7. package/dist/chunks/{extension-sections-3hpcambp.js → extension-sections-2mrptyek.js} +27 -27
  8. package/dist/chunks/{file-ops-8yhd83xr.js → file-ops-knfqshrm.js} +22 -22
  9. package/dist/chunks/{files-hnxqxtsg.js → files-y6fr4he9.js} +32 -30
  10. package/dist/chunks/{format-host-779sfp2n.js → format-host-1k4qrcqd.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-2rkrsjva.js} +23 -22
  13. package/dist/chunks/grid-view-1p6hsyjx.css +8406 -0
  14. package/dist/chunks/grid-view-a7b87n2c.js +15322 -0
  15. package/dist/chunks/{iframe-host-syr0f9sb.js → iframe-host-scpw01h8.js} +13 -13
  16. package/dist/chunks/{jx-validate-j0wxk72w.js → jx-validate-epp2z3s3.js} +2 -2
  17. package/dist/chunks/{layers-ff81wthn.js → layers-jnvdbqva.js} +5 -5
  18. package/dist/chunks/layers-panel-73gfkcga.js +41 -0
  19. package/dist/chunks/{listbox-6v2ac08j.js → listbox-b7jxnhq1.js} +19 -3
  20. package/dist/chunks/{media-picker-cqhhxhhe.js → media-picker-f66nav16.js} +13 -13
  21. package/dist/chunks/menu-1dfhry4s.js +15 -0
  22. package/dist/chunks/{monaco-buffer-bhy3hb6m.js → monaco-buffer-pykwbm92.js} +3 -3
  23. package/dist/chunks/{monaco-setup-8r62fj6y.js → monaco-setup-km6abc6q.js} +2 -2
  24. package/dist/chunks/{notify-628t0anh.js → notify-42gk8ha1.js} +2 -2
  25. package/dist/chunks/{parse-0zx14y15.js → parse-reg9eevt.js} +2 -2
  26. package/dist/chunks/publish-panel-z1zd2da1.js +27 -0
  27. package/dist/chunks/quick-search-zdv7h8ht.js +47 -0
  28. package/dist/chunks/{references-qvvxej7h.js → references-h69xp9zz.js} +2 -2
  29. package/dist/chunks/right-panel-889vbnm5.js +45 -0
  30. package/dist/chunks/{split-g7nm1rgb.js → split-4cz4b6ef.js} +14 -3
  31. package/dist/chunks/{studio-vfq8qpjt.js → studio-0j7r7s9g.js} +3 -3
  32. package/dist/chunks/{studio-b4s9eykd.js → studio-151w0xnh.js} +15 -15
  33. package/dist/chunks/studio-1tbjfqv4.js +146 -0
  34. package/dist/chunks/{studio-8scdew0e.js → studio-27q131j3.js} +4 -4
  35. package/dist/chunks/{studio-7r42c6ca.js → studio-3ntvq6cg.js} +5 -5
  36. package/dist/chunks/{studio-g3jevyjt.js → studio-4c041r8y.js} +2 -2
  37. package/dist/chunks/{studio-js8nv53n.js → studio-4f3psrk1.js} +14 -14
  38. package/dist/chunks/{studio-pxbgypmg.js → studio-50wfwy44.js} +17 -14
  39. package/dist/chunks/{studio-vw7mzp6z.js → studio-6gryj0sg.js} +5 -5
  40. package/dist/chunks/{studio-e1pgga3k.js → studio-6kvgrkrp.js} +7 -7
  41. package/dist/chunks/{studio-wqz6dggm.js → studio-7144epdr.js} +9 -9
  42. package/dist/chunks/{studio-b0k5tqgp.js → studio-7rrb1esn.js} +32 -28
  43. package/dist/chunks/{studio-38emantv.js → studio-a5h5j33a.js} +19 -5
  44. package/dist/chunks/{studio-3773086z.js → studio-a65w20ex.js} +4 -4
  45. package/dist/chunks/{studio-nzzpvzx9.js → studio-ab87phj1.js} +4 -4
  46. package/dist/chunks/{studio-r6nvacqs.js → studio-b66rsh78.js} +20 -20
  47. package/dist/chunks/{studio-jxp12rnj.js → studio-b7xacrwe.js} +6 -6
  48. package/dist/chunks/{studio-6xa21ej9.js → studio-c04nzbby.js} +2 -2
  49. package/dist/chunks/{studio-try13h8c.js → studio-c0qgc3tn.js} +18 -18
  50. package/dist/chunks/{studio-tqgryxwg.js → studio-cgprcdxn.js} +7 -7
  51. package/dist/chunks/{studio-kkqkcp3d.js → studio-d1n2bykn.js} +40 -13
  52. package/dist/chunks/{studio-p1dw8wfw.js → studio-d8z5bajd.js} +14 -10
  53. package/dist/chunks/{studio-3rz5md06.js → studio-dd1qqkry.js} +6 -6
  54. package/dist/chunks/{studio-1z1kcjv4.js → studio-drg8qj9k.js} +11 -11
  55. package/dist/chunks/{studio-kcgff4r0.js → studio-fgmfksz8.js} +2 -2
  56. package/dist/chunks/{studio-qk90fgqm.js → studio-fzjx96t2.js} +7 -7
  57. package/dist/chunks/{studio-a79k90n9.js → studio-g33v4fe9.js} +17 -16
  58. package/dist/chunks/{studio-k75n7vhp.js → studio-gk2twyh4.js} +74 -36
  59. package/dist/chunks/{studio-syg2tadj.js → studio-gtfq1dkz.js} +3 -3
  60. package/dist/chunks/{studio-1knfqgy7.js → studio-j0w60gft.js} +8 -8
  61. package/dist/chunks/{studio-aj37eer3.js → studio-jt27ta6x.js} +4 -4
  62. package/dist/chunks/{studio-gb13095a.js → studio-ke09tn9k.js} +59 -20
  63. package/dist/chunks/{studio-d0300636.js → studio-ks2zzth2.js} +17 -2
  64. package/dist/chunks/{studio-6ewqv390.js → studio-m1p9b6c3.js} +5 -5
  65. package/dist/chunks/{studio-qk4bfsq2.js → studio-msc1ee1m.js} +4 -4
  66. package/dist/chunks/{studio-93zafjcm.js → studio-nfx354t1.js} +10 -10
  67. package/dist/chunks/{studio-mhhyamxf.js → studio-nsgw7dbk.js} +6 -6
  68. package/dist/chunks/{studio-qhhm6hbt.js → studio-rtskkm43.js} +4 -4
  69. package/dist/chunks/studio-t171hxhe.js +23 -0
  70. package/dist/chunks/{studio-hhvs4sdg.js → studio-vn5hske5.js} +10 -4
  71. package/dist/chunks/{studio-q3x06vmj.js → studio-wnsyffg1.js} +2 -2
  72. package/dist/chunks/{studio-5wt9nvhd.js → studio-xajk70w0.js} +29 -42
  73. package/dist/chunks/{studio-7xnmgv66.js → studio-ye9drbk8.js} +45 -44
  74. package/dist/chunks/{studio-y9zedyjn.js → studio-z2smx5ce.js} +2 -2
  75. package/dist/chunks/{studio-sbjyc8bt.js → studio-ze46gzjh.js} +9 -9
  76. package/dist/chunks/{studio-zdn2g6dt.js → studio-zjjde71a.js} +2 -2
  77. package/dist/chunks/{workspace-t55jdjbx.js → workspace-np10mayv.js} +18 -10
  78. package/dist/iframe-entry.js +9 -5
  79. package/dist/studio.css +1 -2
  80. package/dist/studio.js +910 -15705
  81. package/package.json +10 -10
  82. package/src/files/files.ts +38 -15
  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/media/media-open.ts +14 -2
  87. package/src/panels/chat-panel.ts +40 -5
  88. package/src/panels/pane-context.ts +5 -4
  89. package/src/panels/pane-grid.ts +100 -10
  90. package/src/panels/tab-drop.ts +220 -0
  91. package/src/panels/tab-strip.ts +235 -30
  92. package/src/services/ai-models.ts +13 -0
  93. package/src/services/module-preloads.ts +67 -0
  94. package/src/studio.ts +16 -6
  95. package/src/surfaces/commandbar.json +26 -16
  96. package/src/surfaces/formula-palette.json +8 -7
  97. package/src/surfaces/formula-palette.ts +10 -6
  98. package/src/surfaces/palette.json +8 -7
  99. package/src/surfaces/pane-grid.json +35 -3
  100. package/src/surfaces/pane-grid.ts +26 -4
  101. package/src/surfaces/tab-strip.json +16 -39
  102. package/src/surfaces/tab-strip.ts +76 -12
  103. package/src/ui/ai-credentials-form.ts +12 -1
  104. package/src/ui/panel-resize.ts +3 -23
  105. package/src/ui/virtual-window.ts +57 -4
  106. package/src/workspace/pane-derive.ts +7 -5
  107. package/src/workspace/session.ts +3 -3
  108. package/src/workspace/workspace.ts +160 -43
  109. package/styles/shell-frame.css +8 -0
  110. package/styles/shell-frame.json +4 -0
  111. package/dist/chunks/content-source-5mex4x1h.js +0 -46
  112. package/dist/chunks/entry-commands-234hjnqw.js +0 -42
  113. package/dist/chunks/layers-panel-pnnghw12.js +0 -40
  114. package/dist/chunks/menu-9p2w46gj.js +0 -15
  115. package/dist/chunks/publish-panel-5zt840sy.js +0 -27
  116. package/dist/chunks/quick-search-3748564r.js +0 -45
  117. package/dist/chunks/right-panel-eccz92qt.js +0 -45
@@ -3,13 +3,13 @@ import {
3
3
  } from "./studio-6nzaktvy.js";
4
4
  import {
5
5
  isJsonObject,
6
- isRef2,
6
+ isRef,
7
7
  isExpressionDef,
8
8
  isNamedFormulaDef,
9
9
  getEventBinding,
10
10
  isTagExpression,
11
11
  displayTagName
12
- } from "./studio-7r42c6ca.js";
12
+ } from "./studio-3ntvq6cg.js";
13
13
  import {
14
14
  INPUT_DEBOUNCE,
15
15
  LIVE_PREVIEW,
@@ -18,10 +18,10 @@ import {
18
18
  projectState,
19
19
  renderOnly,
20
20
  updateUi
21
- } from "./studio-6ewqv390.js";
21
+ } from "./studio-m1p9b6c3.js";
22
22
  import {
23
23
  componentRegistry2
24
- } from "./studio-zdn2g6dt.js";
24
+ } from "./studio-zjjde71a.js";
25
25
  import {
26
26
  tabOfPane,
27
27
  canvasModeOfTab,
@@ -32,7 +32,7 @@ import {
32
32
  attachInstruction,
33
33
  extractInstruction,
34
34
  requestCanvasEval2
35
- } from "./studio-1z1kcjv4.js";
35
+ } from "./studio-drg8qj9k.js";
36
36
  import {
37
37
  effectScope,
38
38
  effect,
@@ -40,7 +40,7 @@ import {
40
40
  toRaw,
41
41
  shallowRef,
42
42
  notify2
43
- } from "./studio-p1dw8wfw.js";
43
+ } from "./studio-d8z5bajd.js";
44
44
  import {
45
45
  view,
46
46
  BUFFER_COMMIT2,
@@ -49,13 +49,13 @@ import {
49
49
  cancelBufferWrites2,
50
50
  bufferIsLive2,
51
51
  bufferMovedOn2
52
- } from "./studio-q3x06vmj.js";
52
+ } from "./studio-wnsyffg1.js";
53
53
  import {
54
54
  loadMonaco,
55
55
  mountStillWanted,
56
56
  loadExtensions2,
57
57
  getExtensions2
58
- } from "./studio-vw7mzp6z.js";
58
+ } from "./studio-6gryj0sg.js";
59
59
  import {
60
60
  localeLabel,
61
61
  translationPathFor,
@@ -89,12 +89,12 @@ import {
89
89
  activeTab2,
90
90
  activePane2,
91
91
  paneById2,
92
- sidePane2,
92
+ paneBeside2,
93
93
  detachTab2,
94
94
  insertIntoPane2,
95
95
  tabIsLive2,
96
96
  promoteTab2
97
- } from "./studio-k75n7vhp.js";
97
+ } from "./studio-gk2twyh4.js";
98
98
  import {
99
99
  PURE_METHOD_OPS,
100
100
  BLESSED_OPERATORS,
@@ -104,7 +104,7 @@ import {
104
104
  popoverIdsIn,
105
105
  POPOVER_TAGS,
106
106
  activeRegistry
107
- } from "./studio-kkqkcp3d.js";
107
+ } from "./studio-d1n2bykn.js";
108
108
  import {
109
109
  getEffectiveMedia,
110
110
  getEffectiveStyle,
@@ -113,7 +113,7 @@ import {
113
113
  shell,
114
114
  monacoTheme,
115
115
  setBottomTab
116
- } from "./studio-qk90fgqm.js";
116
+ } from "./studio-fzjx96t2.js";
117
117
  import {
118
118
  nothing2
119
119
  } from "./studio-1k325pwf.js";
@@ -125,17 +125,17 @@ import {
125
125
  mountSurface,
126
126
  showPromptDialog2,
127
127
  getLayerSlot2
128
- } from "./studio-vfq8qpjt.js";
128
+ } from "./studio-0j7r7s9g.js";
129
129
  import {
130
130
  registerPanel
131
- } from "./studio-8scdew0e.js";
131
+ } from "./studio-27q131j3.js";
132
132
  import {
133
133
  codeService,
134
134
  pluginSchemaCache,
135
135
  fetchPluginSchema,
136
136
  setLintMarkers,
137
137
  getFunctionArgs
138
- } from "./studio-3773086z.js";
138
+ } from "./studio-a65w20ex.js";
139
139
  import {
140
140
  VALUE_SOURCE_LABELS,
141
141
  slotMode,
@@ -148,17 +148,17 @@ import {
148
148
  switchSlotMode,
149
149
  mountSchemaForm,
150
150
  resolveContextPointer
151
- } from "./studio-js8nv53n.js";
151
+ } from "./studio-4f3psrk1.js";
152
152
  import {
153
153
  combine
154
154
  } from "./studio-esrxgwh6.js";
155
155
  import {
156
156
  openMenu2
157
- } from "./studio-aj37eer3.js";
157
+ } from "./studio-jt27ta6x.js";
158
158
  import {
159
159
  mountMediaPicker2,
160
160
  unmountMediaPicker2
161
- } from "./studio-e1pgga3k.js";
161
+ } from "./studio-6kvgrkrp.js";
162
162
  import {
163
163
  peekUsages2,
164
164
  loadUsages2,
@@ -624,7 +624,7 @@ function derivationCommands(deps) {
624
624
  if (refusal) {
625
625
  throw new RangeError(`command "pane.derive" argument "preset": "${preset}" requires ${refusal}`);
626
626
  }
627
- const target = sidePane2();
627
+ const target = paneBeside2(source.id);
628
628
  setPaneDerivation(target.id, derivationFor(preset, source.id, media, locale));
629
629
  const displaced = [...target.tabOrder];
630
630
  for (const tabId of displaced) {
@@ -2113,7 +2113,7 @@ function refLabel(ref) {
2113
2113
  return ref || "?";
2114
2114
  }
2115
2115
  function operandLabel(value) {
2116
- if (isRef2(value)) {
2116
+ if (isRef(value)) {
2117
2117
  return refLabel(value.$ref);
2118
2118
  }
2119
2119
  if (isExprNode(value)) {
@@ -2232,6 +2232,9 @@ var formula_palette_default = {
2232
2232
  paddingTop: "60px",
2233
2233
  background: "rgba(0, 0, 0, 0.4)"
2234
2234
  },
2235
+ '& [part="overlay"][hidden]': {
2236
+ display: "none"
2237
+ },
2235
2238
  '& [part="panel"]': {
2236
2239
  width: "560px",
2237
2240
  maxWidth: "calc(100vw - 32px)",
@@ -2309,14 +2312,12 @@ var formula_palette_default = {
2309
2312
  color: "inherit"
2310
2313
  }
2311
2314
  },
2312
- $switch: {
2313
- $ref: "#/state/open"
2314
- },
2315
- cases: {
2316
- true: {
2315
+ children: [
2316
+ {
2317
2317
  tagName: "div",
2318
2318
  attributes: {
2319
- part: "overlay"
2319
+ part: "overlay",
2320
+ hidden: "${state.open ? null : ''}"
2320
2321
  },
2321
2322
  onclick: {
2322
2323
  $prototype: "Function",
@@ -2572,7 +2573,7 @@ var formula_palette_default = {
2572
2573
  }
2573
2574
  ]
2574
2575
  }
2575
- }
2576
+ ]
2576
2577
  };
2577
2578
 
2578
2579
  // src/surfaces/formula-palette.ts
@@ -3951,7 +3952,7 @@ function operandMode(operand) {
3951
3952
  return "literal";
3952
3953
  }
3953
3954
  function calleeParamLabels(target, state) {
3954
- const ref = isRef2(target) ? target.$ref : "";
3955
+ const ref = isRef(target) ? target.$ref : "";
3955
3956
  const entry = ref ? calleeEntry(ref, state) : undefined;
3956
3957
  return entry?.kind === "formula" ? entry.parameters.map((p) => p.name) : [];
3957
3958
  }
@@ -3995,7 +3996,7 @@ function expressionHint(node) {
3995
3996
  const expr = node;
3996
3997
  const op = expr.operator;
3997
3998
  const { target } = expr;
3998
- const targetLabel = isRef2(target) ? target.$ref.replace("#/state/", "") : isJsonObject(target) && typeof target.operator === "string" ? `(${target.operator}…)` : String(target ?? "?");
3999
+ const targetLabel = isRef(target) ? target.$ref.replace("#/state/", "") : isJsonObject(target) && typeof target.operator === "string" ? `(${target.operator}…)` : String(target ?? "?");
3999
4000
  if (ASSIGN_OPS.has(op) || ONE_ARG_OPS.has(op)) {
4000
4001
  return `${op} ${targetLabel}`;
4001
4002
  }
@@ -5920,7 +5921,7 @@ function openPageAction(label = "Open a page…") {
5920
5921
  return {
5921
5922
  label,
5922
5923
  run: () => {
5923
- (__preload("3748564r"), import("./quick-search-3748564r.js")).then((m) => {
5924
+ (__preload("zdv7h8ht"), import("./quick-search-zdv7h8ht.js")).then((m) => {
5924
5925
  m.openQuickSearch();
5925
5926
  });
5926
5927
  }
@@ -8083,14 +8084,14 @@ function defaultAsString(def) {
8083
8084
  return typeof dv === "object" ? JSON.stringify(dv) : String(dv);
8084
8085
  }
8085
8086
  function bindingDonor(value) {
8086
- if (isRef2(value)) {
8087
+ if (isRef(value)) {
8087
8088
  const ref = value.$ref;
8088
8089
  return ref.startsWith("#/state/") ? ref.slice(8) : ref || "nothing yet";
8089
8090
  }
8090
8091
  return typeof value === "string" ? "a template" : "a formula";
8091
8092
  }
8092
8093
  function boundSignalOf(value) {
8093
- if (isRef2(value)) {
8094
+ if (isRef(value)) {
8094
8095
  const ref = value.$ref;
8095
8096
  return ref.startsWith("#/state/") ? ref.slice(8).split("/")[0] ?? null : null;
8096
8097
  }
@@ -8141,7 +8142,7 @@ function attributeProvenance(attr, value, hasVal, onClear, mixedCount = 0) {
8141
8142
  if (mixedCount > 0) {
8142
8143
  return { donor: String(mixedCount), onClick: onClear, state: "mixed" };
8143
8144
  }
8144
- if (hasVal && (isRef2(value) || typeof value === "string" && value.includes("${"))) {
8145
+ if (hasVal && (isRef(value) || typeof value === "string" && value.includes("${"))) {
8145
8146
  return boundProvenance(value, `Bound — ${attr}`);
8146
8147
  }
8147
8148
  return hasVal ? { onClick: onClear, state: "set", title: `Clear ${attr}` } : { state: "default" };
@@ -8154,7 +8155,7 @@ function mixedAcrossSelection(doc, targets, read) {
8154
8155
  return unifyValues(values).mixed ? targets.length : 0;
8155
8156
  }
8156
8157
  function isBoundAttrValue(value) {
8157
- return isRef2(value) || typeof value === "string" && value.includes("${");
8158
+ return isRef(value) || typeof value === "string" && value.includes("${");
8158
8159
  }
8159
8160
  var pageRouteEntries = null;
8160
8161
  var pageRoutesLoading = false;
@@ -8474,10 +8475,10 @@ function openSourceMenu(key, anchor) {
8474
8475
  });
8475
8476
  }
8476
8477
  function openUsage(path) {
8477
- (__preload("hnxqxtsg"), import("./files-hnxqxtsg.js")).then((m) => m.openFileInTab(path));
8478
+ (__preload("y6fr4he9"), import("./files-y6fr4he9.js")).then((m) => m.openFileInTab(path));
8478
8479
  }
8479
8480
  function showLogicTab() {
8480
- (__preload("eccz92qt"), import("./right-panel-eccz92qt.js")).then((m) => m.setInspectorTab("events"));
8481
+ (__preload("889vbnm5"), import("./right-panel-889vbnm5.js")).then((m) => m.setInspectorTab("events"));
8481
8482
  }
8482
8483
  function withPlan(row, plan) {
8483
8484
  plans.set(row.key, plan);
@@ -8522,7 +8523,7 @@ function applyLadder(row, plan, opts) {
8522
8523
  };
8523
8524
  if (mode === "ref") {
8524
8525
  row.kind = "select";
8525
- row.value = isRef2(opts.value) ? opts.value.$ref : "";
8526
+ row.value = isRef(opts.value) ? opts.value.$ref : "";
8526
8527
  row.options = [
8527
8528
  { label: "— select signal —", value: "" },
8528
8529
  ...sources.map((s) => ({ label: s.label, value: s.value }))
@@ -8823,7 +8824,7 @@ function componentPropRows(node, path, mapSignals, definitionOfThis) {
8823
8824
  const rows = [];
8824
8825
  for (const prop of comp.props) {
8825
8826
  const rawValue = currentVals[prop.name];
8826
- const boundRef = isRef2(rawValue) ? rawValue.$ref : null;
8827
+ const boundRef = isRef(rawValue) ? rawValue.$ref : null;
8827
8828
  const hasVal = rawValue !== undefined && rawValue !== null;
8828
8829
  const parsed = parseCemType(prop.type);
8829
8830
  const onChange = (v) => updateFn(prop.name, v);
@@ -8972,11 +8973,11 @@ function attributeRow(attr, entry, value, ctx) {
8972
8973
  plan.commitChecked = (checked) => commitAttr(checked ? "" : undefined);
8973
8974
  } else if (type === "media") {
8974
8975
  row.kind = "control";
8975
- const staticVal = isRef2(value) ? "" : String(value || "");
8976
+ const staticVal = isRef(value) ? "" : String(value || "");
8976
8977
  plan.control = (host) => mountMediaPicker2(host, attr, staticVal, (v) => commitAttr(v || undefined));
8977
8978
  } else if (type === "select") {
8978
8979
  row.kind = "select";
8979
- row.value = isRef2(value) ? "" : String(value || "");
8980
+ row.value = isRef(value) ? "" : String(value || "");
8980
8981
  row.options = [
8981
8982
  CLEAR_OPTION,
8982
8983
  ...(Array.isArray(entry.enum) ? entry.enum : []).map((o) => ({
@@ -8988,7 +8989,7 @@ function attributeRow(attr, entry, value, ctx) {
8988
8989
  plan.debounceMs = 0;
8989
8990
  } else {
8990
8991
  row.kind = "text";
8991
- row.value = getFieldValue(attrDraft, isRef2(value) ? "" : String(value || ""));
8992
+ row.value = getFieldValue(attrDraft, isRef(value) ? "" : String(value || ""));
8992
8993
  plan.commit = (raw) => commitAttr(raw || undefined);
8993
8994
  plan.draft = attrDraft;
8994
8995
  }
@@ -13609,7 +13610,7 @@ function registerSignalsCommands(registry) {
13609
13610
  registry.registerAll(signalsCommands());
13610
13611
  }
13611
13612
 
13612
- export { DERIVE_PRESETS, PRESET_LABELS, declaredMedia, installDerivationEffects, presetRefusal, deriveRefusal, pinRefusal, derivationCommands, mountExpressionEditor, unwrapSignal, dataTypeLabel, registerDataExplorerCommands, registerDataPanel, livePreviewExpression, closeFunctionEditor, logicTarget, revealLogicPanel, openLogicTarget, registerLogicPanel, registerFormulaEditorCommands, provenanceText, provenanceTitle, countProvenance, provenanceSummaryText, clickAnythingTo, staleSelectionMessage, openPageAction, tokenRefName, toTokenRef, resolveTokenValue, colorTokens, resolvedColor, mountStatementEditor, mapSignalsFor, bindableSignalNames, defaultAsString, invalidatePageRouteCache, isInspectorSectionOpen, setInspectorSection, renderPropertiesPanel, bindContentHost, inspectorCommands, registerInspectorCommands, defCategory, defBadgeLabel, isCustomElementDoc, collectCssParts, mountSignalsPanel, registerSignalsCommands };
13613
+ export { DERIVE_PRESETS, PRESET_LABELS, declaredMedia, clearPaneDerivation, installDerivationEffects, presetRefusal, deriveRefusal, pinRefusal, derivationCommands, mountExpressionEditor, unwrapSignal, dataTypeLabel, registerDataExplorerCommands, registerDataPanel, livePreviewExpression, closeFunctionEditor, logicTarget, revealLogicPanel, openLogicTarget, registerLogicPanel, registerFormulaEditorCommands, provenanceText, provenanceTitle, countProvenance, provenanceSummaryText, clickAnythingTo, staleSelectionMessage, openPageAction, tokenRefName, toTokenRef, resolveTokenValue, colorTokens, resolvedColor, mountStatementEditor, mapSignalsFor, bindableSignalNames, defaultAsString, invalidatePageRouteCache, isInspectorSectionOpen, setInspectorSection, renderPropertiesPanel, bindContentHost, inspectorCommands, registerInspectorCommands, defCategory, defBadgeLabel, isCustomElementDoc, collectCssParts, mountSignalsPanel, registerSignalsCommands };
13613
13614
 
13614
- //# debugId=6CC237BFF2E61E1D64756E2164756E21
13615
- //# sourceMappingURL=studio-7xnmgv66.js.map
13615
+ //# debugId=49338A5759B4E59A64756E2164756E21
13616
+ //# sourceMappingURL=studio-ye9drbk8.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
@@ -7,31 +7,31 @@ import {
7
7
  import {
8
8
  reactive,
9
9
  notify2
10
- } from "./studio-p1dw8wfw.js";
10
+ } from "./studio-d8z5bajd.js";
11
11
  import {
12
12
  projectState
13
- } from "./studio-6ewqv390.js";
13
+ } from "./studio-m1p9b6c3.js";
14
14
  import {
15
15
  paneRegion,
16
16
  registerSurface,
17
17
  mountSurface
18
- } from "./studio-vfq8qpjt.js";
18
+ } from "./studio-0j7r7s9g.js";
19
19
  import {
20
20
  mountSchemaForm,
21
21
  resolveContextPointer
22
- } from "./studio-js8nv53n.js";
22
+ } from "./studio-4f3psrk1.js";
23
23
  import {
24
24
  validateProjectConfig2
25
- } from "./studio-kcgff4r0.js";
25
+ } from "./studio-fgmfksz8.js";
26
26
  import {
27
27
  deriveSecretEnvName
28
- } from "./studio-pxbgypmg.js";
28
+ } from "./studio-50wfwy44.js";
29
29
  import {
30
30
  paneOfContainer
31
- } from "./studio-1z1kcjv4.js";
31
+ } from "./studio-drg8qj9k.js";
32
32
  import {
33
33
  commitProjectConfig
34
- } from "./studio-qk90fgqm.js";
34
+ } from "./studio-fzjx96t2.js";
35
35
  // src/surfaces/settings-contributed.json
36
36
  var settings_contributed_default = {
37
37
  $schema: "https://jxsuite.com/schema/v1",
@@ -951,4 +951,4 @@ function renderContributedSection(container, contribution, opts = {}) {
951
951
  export { selectContributedEntry, renderContributedSection };
952
952
 
953
953
  //# debugId=E288D4A2952F914964756E2164756E21
954
- //# sourceMappingURL=studio-sbjyc8bt.js.map
954
+ //# sourceMappingURL=studio-ze46gzjh.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-gk2twyh4.js";
35
+ import"./studio-wnsyffg1.js";
36
+ import"./studio-m1p9b6c3.js";
37
+ import"./studio-6gryj0sg.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-np10mayv.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,["kzn1bh6z","a73p0pqm","eptb614w","abk6qyee","780pvfbv","3sqv46sn","xgg3kfw7","yy10wk9r","5cndyft8","sp6tna8v","47z3ytva","2r16ez41","4cz4b6ef","t0n6h2rn","wbp1cdws","xbh5bhtr","v17df7b8","anwybnkn","44ez96fc","5e7jev23","s890b918","b7jxnhq1","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-4cz4b6ef.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-b7jxnhq1.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);
@@ -9229,13 +9233,13 @@ var KIT_LOADERS = {
9229
9233
  "jx-ui:/behaviors/color-slider.ts": () => (__preload("44ez96fc"), import("./chunks/color-slider-44ez96fc.js")),
9230
9234
  "jx-ui:/behaviors/combobox.ts": () => (__preload("5e7jev23"), import("./chunks/combobox-5e7jev23.js")),
9231
9235
  "jx-ui:/behaviors/dialog.ts": () => (__preload("s890b918"), import("./chunks/dialog-s890b918.js")),
9232
- "jx-ui:/behaviors/listbox.ts": () => (__preload("6v2ac08j"), import("./chunks/listbox-6v2ac08j.js")),
9236
+ "jx-ui:/behaviors/listbox.ts": () => (__preload("b7jxnhq1"), import("./chunks/listbox-b7jxnhq1.js")),
9233
9237
  "jx-ui:/behaviors/menu.ts": () => (__preload("q99sy9rf"), import("./chunks/menu-q99sy9rf.js")),
9234
9238
  "jx-ui:/behaviors/number-field.ts": () => (__preload("5cndyft8"), import("./chunks/number-field-5cndyft8.js")),
9235
9239
  "jx-ui:/behaviors/action-group.ts": () => (__preload("sp6tna8v"), import("./chunks/action-group-sp6tna8v.js")),
9236
9240
  "jx-ui:/behaviors/popover.ts": () => (__preload("47z3ytva"), import("./chunks/popover-47z3ytva.js")),
9237
9241
  "jx-ui:/behaviors/select.ts": () => (__preload("2r16ez41"), import("./chunks/select-2r16ez41.js")),
9238
- "jx-ui:/behaviors/split.ts": () => (__preload("g7nm1rgb"), import("./chunks/split-g7nm1rgb.js")),
9242
+ "jx-ui:/behaviors/split.ts": () => (__preload("4cz4b6ef"), import("./chunks/split-4cz4b6ef.js")),
9239
9243
  "jx-ui:/behaviors/swatch-group.ts": () => (__preload("t0n6h2rn"), import("./chunks/swatch-group-t0n6h2rn.js")),
9240
9244
  "jx-ui:/behaviors/tabs.ts": () => (__preload("wbp1cdws"), import("./chunks/tabs-wbp1cdws.js")),
9241
9245
  "jx-ui:/behaviors/toolbar.ts": () => (__preload("xbh5bhtr"), import("./chunks/toolbar-xbh5bhtr.js")),
@@ -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