@marimo-team/islands 0.25.3-dev82 → 0.25.3-dev85

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.
@@ -135,7 +135,7 @@ function F(e) {
135
135
  }
136
136
  //#endregion
137
137
  //#region src/components/editor/boundary/ErrorBoundary.tsx
138
- var I = (0, T.lazy)(() => import("./feedback-button-sOLkDWYm.js").then((e) => ({ default: e.FeedbackModal }))), L = (e) => {
138
+ var I = (0, T.lazy)(() => import("./feedback-button-wob0Aeib.js").then((e) => ({ default: e.FeedbackModal }))), L = (e) => {
139
139
  let t = (0, w.c)(2), n;
140
140
  return t[0] === e.children ? n = t[1] : (n = /* @__PURE__ */ (0, j.jsx)(O, {
141
141
  FallbackComponent: R,
@@ -3,13 +3,13 @@ import { c as n, g as r, h as i, t as a } from "./button-BxB3RDjN.js";
3
3
  import { t as o } from "./react-sHtZdjeP.js";
4
4
  import { t as s } from "./compiler-runtime-CldRdSsv.js";
5
5
  import { i as c, t as l } from "./copy-icon-CPoxUG7G.js";
6
- import { F as u, H as d, U as f, V as p, X as m, Y as h, Z as g, _, a as v, c as y, d as b, f as x, g as S, h as C, l as w, m as T, n as E, p as D, r as O, t as k, v as A, x as ee, y as te, z as ne } from "./html-to-image-6xcoTKhC.js";
6
+ import { F as u, H as d, U as f, V as p, X as m, Y as h, Z as g, _, a as v, c as y, d as b, f as x, g as S, h as C, l as w, m as T, n as E, p as D, r as O, t as k, v as A, x as ee, y as te, z as ne } from "./html-to-image-Dc3mTXAs.js";
7
7
  import { h as j, t as re } from "./tooltip-CKO1pHJo.js";
8
- import { Ct as ie, Et as ae, Ht as oe, L as se, Lt as ce, Nt as le, St as ue, X as de, cn as fe, ct as pe, dn as me, en as he, et as ge, h as _e, i as ve, ln as ye, mn as be, mt as xe, r as Se, rt as Ce, st as we, t as Te, w as Ee, xt as De } from "./error-entries-CMNtA8NK.js";
8
+ import { Ct as ie, Et as ae, Ht as oe, L as se, Lt as ce, Nt as le, St as ue, X as de, cn as fe, ct as pe, dn as me, en as he, et as ge, h as _e, i as ve, ln as ye, mn as be, mt as xe, r as Se, rt as Ce, st as we, t as Te, w as Ee, xt as De } from "./error-entries-Cmiq1RT-.js";
9
9
  import { A as Oe, C as ke, M as Ae, b as je } from "./select-B0LRDH0g.js";
10
10
  import { _ as Me, f as Ne, h as Pe, i as Fe, n as Ie, t as Le } from "./dropdown-menu-B3eUiVJB.js";
11
- import { C as Re, d as ze } from "./toDate-CjPuEPou.js";
12
- import { d as Be, f as Ve, i as He, n as Ue, t as We, u as Ge } from "./process-output-BJRJFobf.js";
11
+ import { C as Re, d as ze } from "./toDate-C6BRw8i5.js";
12
+ import { d as Be, f as Ve, i as He, n as Ue, t as We, u as Ge } from "./process-output-C47Xs8_M.js";
13
13
  import { t as Ke } from "./jsx-runtime-3BD1kT0s.js";
14
14
  import { A as qe, C as Je, D as Ye, E as Xe, F as Ze, L as Qe, M as $e, O as et, P as tt, R as nt, S as rt, T as it, V as at, b as ot, j as st, v as ct, w as lt, x as ut, y as dt, z as ft } from "./use-restore-focus-DBCITLeF.js";
15
15
  import { n as pt } from "./error-banner-Sl2FlSJ4.js";
@@ -1,8 +1,8 @@
1
1
  import { g as e } from "./button-BxB3RDjN.js";
2
2
  import { t } from "./compiler-runtime-CldRdSsv.js";
3
- import { G as n, K as r } from "./error-entries-CMNtA8NK.js";
3
+ import { G as n, K as r } from "./error-entries-Cmiq1RT-.js";
4
4
  import { C as i } from "./select-B0LRDH0g.js";
5
- import { _ as a, c as o, x as s, y as c } from "./toDate-CjPuEPou.js";
5
+ import { _ as a, c as o, x as s, y as c } from "./toDate-C6BRw8i5.js";
6
6
  import { C as l, E as u, a as d, b as f } from "./useTheme-DympCsQg.js";
7
7
  //#region src/core/islands/state.ts
8
8
  var p = t(), m = u(!1), h = u(/* @__PURE__ */ new Set()), g = u((e) => e(h)?.size === 0), _ = u(!1), v = u((e) => e(_) && e(m) === !1), y = u({
@@ -18,7 +18,7 @@ function x() {
18
18
  return e.warn("Failed to get version from mount config"), null;
19
19
  }
20
20
  }
21
- var S = x() || "0.25.3-dev82", C = u(S), w = u(!0);
21
+ var S = x() || "0.25.3-dev85", C = u(S), w = u(!0);
22
22
  u(null);
23
23
  //#endregion
24
24
  //#region src/core/wasm/state.ts
@@ -3,16 +3,16 @@ import { _ as t, c as n, f as r, g as i, h as a, m as o, n as s, p as c, r as l,
3
3
  import { t as d } from "./react-sHtZdjeP.js";
4
4
  import { t as f } from "./compiler-runtime-CldRdSsv.js";
5
5
  import { i as p, n as m, r as h, t as g } from "./copy-icon-CPoxUG7G.js";
6
- import { $ as _, A as v, B as y, D as b, E as x, F as S, H as C, M as w, N as T, Q as E, S as D, T as O, V as k, W as A, X as j, Y as M, Z as N, _ as P, g as F, n as I, r as L, s as R, t as z, u as ee, v as te, w as B, y as ne, z as re } from "./html-to-image-6xcoTKhC.js";
6
+ import { $ as _, A as v, B as y, D as b, E as x, F as S, H as C, M as w, N as T, Q as E, S as D, T as O, V as k, W as A, X as j, Y as M, Z as N, _ as P, g as F, n as I, r as L, s as R, t as z, u as ee, v as te, w as B, y as ne, z as re } from "./html-to-image-Dc3mTXAs.js";
7
7
  import { a as ie, d as ae, h as V, n as oe, o as se, r as ce, t as H } from "./tooltip-CKO1pHJo.js";
8
- import { $ as le, A as ue, D as de, Et as fe, F as pe, G as me, Ht as he, I as ge, J as _e, K as ve, L as ye, Ot as be, Rt as xe, T as Se, Ut as Ce, V as we, Xt as Te, Yt as Ee, Zt as De, _t as Oe, an as ke, at as Ae, b as je, c as Me, cn as Ne, dn as Pe, en as Fe, gn as Ie, gt as Le, h as Re, hn as ze, l as Be, ln as Ve, lt as He, mn as Ue, mt as We, on as Ge, ot as Ke, rn as qe, st as Je, t as Ye, un as Xe, vt as Ze, w as Qe, x as $e, y as et } from "./error-entries-CMNtA8NK.js";
8
+ import { $ as le, A as ue, D as de, Et as fe, F as pe, G as me, Ht as he, I as ge, J as _e, K as ve, L as ye, Ot as be, Rt as xe, T as Se, Ut as Ce, V as we, Xt as Te, Yt as Ee, Zt as De, _t as Oe, an as ke, at as Ae, b as je, c as Me, cn as Ne, dn as Pe, en as Fe, gn as Ie, gt as Le, h as Re, hn as ze, l as Be, ln as Ve, lt as He, mn as Ue, mt as We, on as Ge, ot as Ke, rn as qe, st as Je, t as Ye, un as Xe, vt as Ze, w as Qe, x as $e, y as et } from "./error-entries-Cmiq1RT-.js";
9
9
  import { c as tt, i as nt, r as rt } from "./useLifecycle-VVmz_24o.js";
10
10
  import { a as it, i as at, n as ot, o as st, r as ct, t as lt } from "./useDateFormatter-c_yJtkAe.js";
11
11
  import { t as ut } from "./check-P35dc2dH.js";
12
12
  import { A as dt, C as ft, M as pt, O as mt, S as ht, _ as gt, b as _t, c as vt, d as yt, g as bt, h as xt, i as St, l as Ct, m as wt, n as Tt, p as Et, s as Dt, t as Ot, u as kt, v as At, y as jt } from "./select-B0LRDH0g.js";
13
13
  import { $ as Mt, $t as Nt, A as Pt, At as Ft, B as It, Bt as Lt, Ct as Rt, D as zt, Dt as Bt, E as Vt, Et as Ht, F as Ut, Ft as Wt, G as Gt, Gt as Kt, H as qt, Ht as Jt, I as Yt, It as Xt, J as Zt, Jt as Qt, Kt as $t, L as en, Lt as tn, M as nn, Mt as rn, N as an, Nt as on, O as sn, Ot as cn, P as ln, Pt as un, Q as dn, Qt as fn, R as pn, Rt as mn, S as hn, St as gn, T as _n, Tt as vn, U as yn, Ut as bn, V as xn, Vt as Sn, W as Cn, Wt as wn, X as Tn, Xt as En, Y as Dn, Yt as On, Z as kn, Zt as An, _ as jn, _n as Mn, _t as Nn, a as Pn, an as Fn, at as In, b as Ln, bt as Rn, cn as zn, ct as Bn, d as Vn, dn as Hn, en as Un, et as Wn, f as Gn, fn as Kn, ft as qn, gn as Jn, gt as Yn, h as Xn, hn as Zn, ht as Qn, i as $n, in as er, it as tr, j as nr, jt as rr, k as ir, kt as ar, l as or, ln as sr, lt as cr, mn as lr, mt as ur, n as dr, nn as fr, nt as pr, o as mr, ot as hr, pn as gr, pt as _r, qt as vr, rn as yr, rt as br, s as xr, sn as Sr, st as Cr, t as wr, tt as Tr, u as Er, ut as Dr, vn as Or, vt as kr, w as Ar, wt as jr, x as Mr, xt as Nr, y as Pr, yn as Fr, yt as Ir, z as Lr, zt as Rr } from "./dropdown-menu-B3eUiVJB.js";
14
- import { a as zr, c as Br, d as Vr, i as Hr, l as Ur, n as Wr, o as Gr, r as Kr, t as qr, v as Jr, x as Yr, y as Xr } from "./toDate-CjPuEPou.js";
15
- import { n as Zr, t as Qr } from "./ErrorBoundary-Dh-VaAao.js";
14
+ import { a as zr, c as Br, d as Vr, i as Hr, l as Ur, n as Wr, o as Gr, r as Kr, t as qr, v as Jr, x as Yr, y as Xr } from "./toDate-C6BRw8i5.js";
15
+ import { n as Zr, t as Qr } from "./ErrorBoundary-2IYfhnL4.js";
16
16
  import { t as $r } from "./clsx-CoeGtWvn.js";
17
17
  import { t as ei } from "./react-dom-DUmH0GXv.js";
18
18
  import { t as ti } from "./jsx-runtime-3BD1kT0s.js";
@@ -30,7 +30,7 @@ import { n as la, t as ua } from "./once-eG8Vmvjd.js";
30
30
  import { o as da } from "./dist-BorMD-uX.js";
31
31
  import { a as fa, i as pa, n as ma, o as ha, r as ga, t as _a } from "./dialog-C1PcpCqX.js";
32
32
  import { t as va } from "./useAsyncData-ChgNtdmE.js";
33
- import { a as ya, i as ba, n as xa, r as Sa, t as Ca } from "./formats-6pLWWrY2.js";
33
+ import { a as ya, i as ba, n as xa, r as Sa, t as Ca } from "./formats-ZmooA-MD.js";
34
34
  import { n as U, t as W } from "./objectWithoutPropertiesLoose-BRDcTsfB.js";
35
35
  import { D as wa, n as Ta } from "./vega-loader.browser-B9Pz0EGP.js";
36
36
  import { a as Ea, n as Da, r as Oa, t as ka } from "./loader-Bm8cy3e8.js";
@@ -2,7 +2,7 @@ import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { t } from "./react-sHtZdjeP.js";
3
3
  import { t as n } from "./react-dom-DUmH0GXv.js";
4
4
  import { c as r, l as i, u as a } from "./data-grid-types-0PJ-9N5n.js";
5
- import { a as o, i as s, n as c, r as l } from "./glide-data-editor-D6GkY0Z2.js";
5
+ import { a as o, i as s, n as c, r as l } from "./glide-data-editor-bvazCP1C.js";
6
6
  //#region ../node_modules/.pnpm/@glideapps+glide-data-grid@6.0.4-alpha24_lodash@4.17.21_marked@15.0.12_react-dom@19.3.0_27cffe7f1bc30287d59ac27db3240c5b/node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/data-grid-overlay-editor-style.js
7
7
  var u = /* @__PURE__ */ e(t(), 1), d = /* @__PURE__ */ e(n(), 1), f = /*#__PURE__*/ o("div")({
8
8
  name: "DataGridOverlayEditorStyle",
@@ -7,7 +7,7 @@ import { d as p, h as m, i as h, t as g } from "./tooltip-CKO1pHJo.js";
7
7
  import { a as _, c as v, i as y, o as b, r as x, s as S, t as C } from "./useLifecycle-VVmz_24o.js";
8
8
  import { t as w } from "./check-P35dc2dH.js";
9
9
  import { C as T, S as ee, a as te, b as ne, c as re, i as ie, n as ae, o as oe, r as se, s as ce, t as le } from "./select-B0LRDH0g.js";
10
- import { C as ue, S as de, _ as fe, b as pe, g as me, h as E, o as he, t as ge, x as _e } from "./toDate-CjPuEPou.js";
10
+ import { C as ue, S as de, _ as fe, b as pe, g as me, h as E, o as he, t as ge, x as _e } from "./toDate-C6BRw8i5.js";
11
11
  import { t as ve } from "./react-dom-DUmH0GXv.js";
12
12
  import { t as ye } from "./jsx-runtime-3BD1kT0s.js";
13
13
  import { C as be, Ct as xe, D as Se, F as D, L as O, M as Ce, S as we, St as Te, bt as Ee, j as De, wt as k, yt as Oe } from "./use-restore-focus-DBCITLeF.js";
@@ -3,14 +3,14 @@ import { h as t, t as n } from "./button-BxB3RDjN.js";
3
3
  import { t as r } from "./react-sHtZdjeP.js";
4
4
  import { t as i } from "./compiler-runtime-CldRdSsv.js";
5
5
  import { t as a } from "./copy-icon-CPoxUG7G.js";
6
- import { Dt as o, G as s, It as c, K as l, Rt as u, V as d, dn as f, h as p, i as m, n as h } from "./error-entries-CMNtA8NK.js";
6
+ import { Dt as o, G as s, It as c, K as l, Rt as u, V as d, dn as f, h as p, i as m, n as h } from "./error-entries-Cmiq1RT-.js";
7
7
  import { b as g } from "./select-B0LRDH0g.js";
8
- import { n as ee, t as te } from "./globals-rH_9s1xB.js";
8
+ import { n as ee, t as te } from "./globals-dzNj_tMG.js";
9
9
  import { t as _ } from "./jsx-runtime-3BD1kT0s.js";
10
10
  import { C as v, _ as ne, i as y } from "./useTheme-DympCsQg.js";
11
11
  import { a as re, i as ie, n as ae, r as oe } from "./dialog-C1PcpCqX.js";
12
12
  import { t as se } from "./useAsyncData-ChgNtdmE.js";
13
- import { t as ce } from "./code-visibility-BwTJAT1U.js";
13
+ import { t as ce } from "./code-visibility-DHJtE2fT.js";
14
14
  //#region src/components/ui/skeleton.tsx
15
15
  var b = /* @__PURE__ */ e(r(), 1), x = i(), S = _(), le = (e) => {
16
16
  let n = (0, x.c)(8), r, i;
@@ -2,7 +2,7 @@ import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { h as t, r as n } from "./button-BxB3RDjN.js";
3
3
  import { t as r } from "./react-sHtZdjeP.js";
4
4
  import { t as i } from "./compiler-runtime-CldRdSsv.js";
5
- import { t as a } from "./toDate-CjPuEPou.js";
5
+ import { t as a } from "./toDate-C6BRw8i5.js";
6
6
  import { t as o } from "./jsx-runtime-3BD1kT0s.js";
7
7
  import { i as s } from "./loader-Bm8cy3e8.js";
8
8
  //#region ../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/isDate.js
@@ -6,7 +6,7 @@ import { i as s, n as c, r as l } from "./copy-icon-CPoxUG7G.js";
6
6
  import { C as u, c as d, i as f, n as p, s as m, t as h, x as g } from "./select-B0LRDH0g.js";
7
7
  import { d as _, h as v, i as y, l as b, n as x, o as S, s as C, t as w, u as T } from "./dropdown-menu-B3eUiVJB.js";
8
8
  import { c as E, d as D, l as O, n as k, o as A, s as ee, t as j, u as te } from "./glide-utils-Bt8_pBa2.js";
9
- import { n as ne, t as re } from "./ErrorBoundary-Dh-VaAao.js";
9
+ import { n as ne, t as re } from "./ErrorBoundary-2IYfhnL4.js";
10
10
  import { t as ie } from "./react-dom-DUmH0GXv.js";
11
11
  import { t as M } from "./jsx-runtime-3BD1kT0s.js";
12
12
  import { t as N } from "./label-BRnUC0NX.js";
@@ -7062,7 +7062,7 @@ function rs(e, t, n, r, i) {
7062
7062
  }
7063
7063
  //#endregion
7064
7064
  //#region ../node_modules/.pnpm/@glideapps+glide-data-grid@6.0.4-alpha24_lodash@4.17.21_marked@15.0.12_react-dom@19.3.0_27cffe7f1bc30287d59ac27db3240c5b/node_modules/@glideapps/glide-data-grid/dist/esm/data-editor/data-editor.js
7065
- var is = /* @__PURE__ */ e(_r(), 1), as = /* @__PURE__ */ e(xr(), 1), os = K.lazy(async () => await import("./data-grid-overlay-editor-C95q5QIf.js")), ss = 0;
7065
+ var is = /* @__PURE__ */ e(_r(), 1), as = /* @__PURE__ */ e(xr(), 1), os = K.lazy(async () => await import("./data-grid-overlay-editor-C9wy2To6.js")), ss = 0;
7066
7066
  function cs(e) {
7067
7067
  return (0, is.default)((0, as.default)((0, as.default)(e).filter((e) => e.span !== void 0).map((e) => (0, Za.default)((e.span?.[0] ?? 0) + 1, (e.span?.[1] ?? 0) + 1))));
7068
7068
  }
@@ -9293,7 +9293,7 @@ function Vs(e, t, n, r, i) {
9293
9293
  }
9294
9294
  //#endregion
9295
9295
  //#region ../node_modules/.pnpm/@glideapps+glide-data-grid@6.0.4-alpha24_lodash@4.17.21_marked@15.0.12_react-dom@19.3.0_27cffe7f1bc30287d59ac27db3240c5b/node_modules/@glideapps/glide-data-grid/dist/esm/cells/number-cell.js
9296
- var Hs = K.lazy(async () => await import("./number-overlay-editor-BjJttHms.js")), Us = {
9296
+ var Hs = K.lazy(async () => await import("./number-overlay-editor-k3nwtjJY.js")), Us = {
9297
9297
  getAccessibilityString: (e) => e.data?.toString() ?? "",
9298
9298
  kind: W.Number,
9299
9299
  needsHover: (e) => e.hoverEffect === !0,
@@ -1,6 +1,6 @@
1
1
  import { h as e } from "./tooltip-CKO1pHJo.js";
2
2
  import { _ as t } from "./useTheme-DympCsQg.js";
3
- import { r as n } from "./code-visibility-BwTJAT1U.js";
3
+ import { r as n } from "./code-visibility-DHJtE2fT.js";
4
4
  var r = e("triangle-alert", [
5
5
  ["path", {
6
6
  d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
@@ -5,10 +5,10 @@ import { t as l } from "./compiler-runtime-CldRdSsv.js";
5
5
  import { n as u, t as d } from "./copy-icon-CPoxUG7G.js";
6
6
  import { a as f, c as p, l as m, s as h, t as g } from "./chunk-YOKDWASO-DKplTrBY.js";
7
7
  import { c as _, h as v, l as y, s as b, t as x, u as ee } from "./tooltip-CKO1pHJo.js";
8
- import { A as te, Ct as ne, Et as re, H as ie, M as ae, P as oe, Pt as se, Qt as ce, St as le, Tt as ue, U as de, Y as fe, a as pe, bt as me, d as he, it as ge, pt as _e, tn as ve, tt as ye, xt as be, y as xe, yt as Se } from "./error-entries-CMNtA8NK.js";
8
+ import { A as te, Ct as ne, Et as re, H as ie, M as ae, P as oe, Pt as se, Qt as ce, St as le, Tt as ue, U as de, Y as fe, a as pe, bt as me, d as he, it as ge, pt as _e, tn as ve, tt as ye, xt as be, y as xe, yt as Se } from "./error-entries-Cmiq1RT-.js";
9
9
  import { M as Ce, O as we, k as Te } from "./select-B0LRDH0g.js";
10
10
  import { ft as Ee, q as De } from "./dropdown-menu-B3eUiVJB.js";
11
- import { m as Oe, y as ke } from "./toDate-CjPuEPou.js";
11
+ import { m as Oe, y as ke } from "./toDate-C6BRw8i5.js";
12
12
  import { t as Ae } from "./jsx-runtime-3BD1kT0s.js";
13
13
  import { Ct as je, K as Me, Q as Ne, St as S, X as Pe, Y as Fe, bt as C, ct as Ie, dt as Le, ft as Re, ht as ze, lt as Be, pt as Ve, vt as He, wt as w, xt as Ue, yt as We } from "./use-restore-focus-DBCITLeF.js";
14
14
  import { A as Ge, C as T, E as Ke, _ as E, c as qe, n as Je } from "./useTheme-DympCsQg.js";
package/dist/main.js CHANGED
@@ -3,20 +3,20 @@ import { _ as a, c as o, g as s, h as c, i as l, l as u, m as d, n as f, o as p,
3
3
  import { t as v } from "./react-sHtZdjeP.js";
4
4
  import { t as y } from "./compiler-runtime-CldRdSsv.js";
5
5
  import { i as b, n as x, r as S, t as C } from "./copy-icon-CPoxUG7G.js";
6
- import { C as w, F as T, G as E, I as D, J as O, K as k, L as A, P as j, R as M, X as N, Z as P, _ as F, a as I, b as L, g as R, i as z, j as B, k as ee, n as te, o as ne, q as re, v as ie, y as ae } from "./html-to-image-6xcoTKhC.js";
6
+ import { C as w, F as T, G as E, I as D, J as O, K as k, L as A, P as j, R as M, X as N, Z as P, _ as F, a as I, b as L, g as R, i as z, j as B, k as ee, n as te, o as ne, q as re, v as ie, y as ae } from "./html-to-image-Dc3mTXAs.js";
7
7
  import { a as oe, d as se, f as ce, h as V, i as le, n as ue, o as de, r as fe, t as pe } from "./tooltip-CKO1pHJo.js";
8
- import { $t as me, At as he, B as ge, Bt as _e, D as ve, Dt as ye, E as be, Et as xe, Ft as Se, Gt as Ce, J as we, Jt as Te, Kt as Ee, M as De, Mt as Oe, N as ke, O as Ae, Ot as je, Q as Me, R as Ne, S as Pe, Ut as Fe, V as Ie, Vt as Le, W as Re, Y as ze, Yt as Be, Z as Ve, _ as He, b as Ue, bt as We, cn as Ge, dt as Ke, en as qe, f as Je, fn as Ye, ft as Xe, g as Ze, gn as Qe, gt as $e, h as et, hn as tt, ht as nt, in as rt, j as it, jt as at, k as ot, kt as st, ln as ct, m as lt, nn as ut, nt as dt, o as ft, p as pt, pn as mt, q as ht, qt as gt, rt as _t, s as vt, sn as yt, st as bt, tn as xt, u as St, un as Ct, ut as wt, v as Tt, wt as Et, y as Dt, z as Ot, zt as kt } from "./error-entries-CMNtA8NK.js";
8
+ import { $t as me, At as he, B as ge, Bt as _e, D as ve, Dt as ye, E as be, Et as xe, Ft as Se, Gt as Ce, J as we, Jt as Te, Kt as Ee, M as De, Mt as Oe, N as ke, O as Ae, Ot as je, Q as Me, R as Ne, S as Pe, Ut as Fe, V as Ie, Vt as Le, W as Re, Y as ze, Yt as Be, Z as Ve, _ as He, b as Ue, bt as We, cn as Ge, dt as Ke, en as qe, f as Je, fn as Ye, ft as Xe, g as Ze, gn as Qe, gt as $e, h as et, hn as tt, ht as nt, in as rt, j as it, jt as at, k as ot, kt as st, ln as ct, m as lt, nn as ut, nt as dt, o as ft, p as pt, pn as mt, q as ht, qt as gt, rt as _t, s as vt, sn as yt, st as bt, tn as xt, u as St, un as Ct, ut as wt, v as Tt, wt as Et, y as Dt, z as Ot, zt as kt } from "./error-entries-Cmiq1RT-.js";
9
9
  import { D as At, E as jt, O as Mt, S as Nt, T as Pt, _ as Ft, a as It, c as Lt, d as Rt, f as zt, g as Bt, h as Vt, i as Ht, l as Ut, m as Wt, n as Gt, o as Kt, p as qt, r as Jt, s as Yt, t as Xt, u as Zt, v as Qt, w as $t, x as en, y as tn } from "./spec-C-LRKGtT.js";
10
- import { $ as nn, $t as rn, A as an, At as on, B as sn, Bt as cn, C as ln, Ct as un, D as dn, Dt as fn, E as pn, Et as mn, F as hn, Ft as gn, G as _n, Gt as vn, H as yn, Ht as bn, I as xn, It as Sn, J as Cn, Jt as wn, K as Tn, Kt as En, L as Dn, Lt as On, M as kn, Mt as An, N as jn, Nt as Mn, O as Nn, Ot as Pn, P as Fn, Pt as In, Qt as Ln, R as Rn, Rt as zn, S as Bn, St as Vn, T as Hn, Tt as Un, U as Wn, Ut as Gn, V as Kn, Vt as qn, W as Jn, Wt as Yn, Xt as Xn, Y as Zn, Yt as Qn, Zt as $n, _ as er, _t as tr, at as nr, b as rr, c as ir, cn as ar, ct as or, d as sr, dn as cr, dt as lr, en as ur, et as dr, f as fr, fn as pr, ft as mr, g as hr, gt as gr, h as _r, ht as vr, in as yr, it as br, j as xr, jt as Sr, k as Cr, kt as wr, ln as Tr, lt as Er, m as Dr, mn as Or, mt as kr, nn as Ar, nt as jr, on as Mr, ot as Nr, p as Pr, pn as Fr, pt as Ir, q as Lr, qt as Rr, r as zr, rn as Br, rt as Vr, sn as Hr, st as Ur, t as Wr, tn as Gr, tt as Kr, u as qr, un as Jr, ut as Yr, v as Xr, vt as Zr, w as Qr, wt as $r, x as ei, xt as ti, y as ni, z as ri, zt as ii } from "./common-BTpcnvZO.js";
10
+ import { $ as nn, $t as rn, A as an, At as on, B as sn, Bt as cn, C as ln, Ct as un, D as dn, Dt as fn, E as pn, Et as mn, F as hn, Ft as gn, G as _n, Gt as vn, H as yn, Ht as bn, I as xn, It as Sn, J as Cn, Jt as wn, K as Tn, Kt as En, L as Dn, Lt as On, M as kn, Mt as An, N as jn, Nt as Mn, O as Nn, Ot as Pn, P as Fn, Pt as In, Qt as Ln, R as Rn, Rt as zn, S as Bn, St as Vn, T as Hn, Tt as Un, U as Wn, Ut as Gn, V as Kn, Vt as qn, W as Jn, Wt as Yn, Xt as Xn, Y as Zn, Yt as Qn, Zt as $n, _ as er, _t as tr, at as nr, b as rr, c as ir, cn as ar, ct as or, d as sr, dn as cr, dt as lr, en as ur, et as dr, f as fr, fn as pr, ft as mr, g as hr, gt as gr, h as _r, ht as vr, in as yr, it as br, j as xr, jt as Sr, k as Cr, kt as wr, ln as Tr, lt as Er, m as Dr, mn as Or, mt as kr, nn as Ar, nt as jr, on as Mr, ot as Nr, p as Pr, pn as Fr, pt as Ir, q as Lr, qt as Rr, r as zr, rn as Br, rt as Vr, sn as Hr, st as Ur, t as Wr, tn as Gr, tt as Kr, u as qr, un as Jr, ut as Yr, v as Xr, vt as Zr, w as Qr, wt as $r, x as ei, xt as ti, y as ni, z as ri, zt as ii } from "./common-COjg9Wjo.js";
11
11
  import { c as ai, i as oi, n as si, o as ci, t as li } from "./useLifecycle-VVmz_24o.js";
12
12
  import { t as ui } from "./check-P35dc2dH.js";
13
13
  import { A as di, C as fi, D as pi, E as mi, M as hi, O as gi, S as _i, T as vi, a as yi, b as bi, c as xi, i as Si, k as Ci, l as wi, n as Ti, o as Ei, r as Di, s as Oi, t as ki, w as Ai, x as ji } from "./select-B0LRDH0g.js";
14
14
  import { At as Mi, C as Ni, Dt as Pi, J as Fi, K as Ii, R as Li, S as Ri, U as zi, X as Bi, Y as Vi, _ as Hi, a as Ui, c as Wi, dt as Gi, et as Ki, f as qi, g as Ji, h as Yi, ht as Xi, i as Zi, m as Qi, n as $i, p as ea, q as ta, r as na, s as ra, t as ia, v as aa, vn as oa, x as sa, yn as ca, z as la } from "./dropdown-menu-B3eUiVJB.js";
15
- import { C as ua, _ as da, a as fa, b as pa, c as ma, f as ha, h as ga, m as _a, p as va, s as ya, u as ba, x as xa, y as Sa } from "./toDate-CjPuEPou.js";
16
- import { a as Ca, c as wa, d as Ta, f as Ea, i as Da, l as Oa, n as ka, o as Aa, r as ja, s as Ma, t as Na } from "./process-output-BJRJFobf.js";
15
+ import { C as ua, _ as da, a as fa, b as pa, c as ma, f as ha, h as ga, m as _a, p as va, s as ya, u as ba, x as xa, y as Sa } from "./toDate-C6BRw8i5.js";
16
+ import { a as Ca, c as wa, d as Ta, f as Ea, i as Da, l as Oa, n as ka, o as Aa, r as ja, s as Ma, t as Na } from "./process-output-C47Xs8_M.js";
17
17
  import { a as Pa, c as Fa, d as Ia, i as La, l as Ra, r as za, u as Ba } from "./glide-utils-Bt8_pBa2.js";
18
- import { n as Va, t as Ha } from "./ErrorBoundary-Dh-VaAao.js";
19
- import { n as Ua, t as Wa } from "./globals-rH_9s1xB.js";
18
+ import { n as Va, t as Ha } from "./ErrorBoundary-2IYfhnL4.js";
19
+ import { n as Ua, t as Wa } from "./globals-dzNj_tMG.js";
20
20
  import { t as Ga } from "./react-dom-DUmH0GXv.js";
21
21
  import { t as Ka } from "./jsx-runtime-3BD1kT0s.js";
22
22
  import { B as qa, C as H, Ct as Ja, D as Ya, E as Xa, F as U, G as Za, H as Qa, I as $a, L as eo, M as W, N as to, O as no, P as ro, Q as io, R as ao, S as G, St as oo, Tt as so, U as co, W as lo, Y as uo, Z as fo, _ as po, _t as mo, a as ho, b as go, bt as _o, c as vo, d as yo, f as bo, g as xo, h as So, ht as Co, i as wo, j as K, k as To, l as Eo, m as Do, n as Oo, o as ko, p as Ao, r as jo, s as Mo, u as No, ut as Po, v as Fo, vt as Io, w as Lo, wt as Ro, x as zo, xt as Bo, y as Vo, yt as Ho } from "./use-restore-focus-DBCITLeF.js";
@@ -36,10 +36,10 @@ import { n as Os } from "./dist-CrSP_H1M.js";
36
36
  import { i as ks } from "./dist-BorMD-uX.js";
37
37
  import { n as As, t as js } from "./esm-AMFssoNp.js";
38
38
  import { t as Ms } from "./useAsyncData-ChgNtdmE.js";
39
- import { i as Ns, n as Ps, r as Fs } from "./formats-6pLWWrY2.js";
39
+ import { i as Ns, n as Ps, r as Fs } from "./formats-ZmooA-MD.js";
40
40
  import { D as Is, O as Ls } from "./vega-loader.browser-B9Pz0EGP.js";
41
41
  import { a as Rs, n as zs } from "./loader-Bm8cy3e8.js";
42
- import { c as Bs, d as Vs, i as Hs, l as Us, o as Ws, s as Gs, t as Ks, u as qs } from "./code-visibility-BwTJAT1U.js";
42
+ import { c as Bs, d as Vs, i as Hs, l as Us, o as Ws, s as Gs, t as Ks, u as qs } from "./code-visibility-DHJtE2fT.js";
43
43
  import { t as Js } from "./useDeepCompareMemoize-Bet7kSsI.js";
44
44
  import { t as Ys } from "./esm-D2gTsXEV.js";
45
45
  //#region ../node_modules/.pnpm/iconify-icon@2.3.0/node_modules/iconify-icon/dist/iconify-icon.mjs
@@ -10112,7 +10112,7 @@ var LS = (e) => {
10112
10112
  output: t
10113
10113
  };
10114
10114
  } };
10115
- } }, US = J.lazy(() => import("./chat-ui-C0_lCzql.js").then((e) => ({ default: e.Chatbot }))), WS = G(W({
10115
+ } }, US = J.lazy(() => import("./chat-ui-C9S_7vEJ.js").then((e) => ({ default: e.Chatbot }))), WS = G(W({
10116
10116
  id: U(),
10117
10117
  role: Fo([
10118
10118
  "system",
@@ -10578,7 +10578,7 @@ function VC(e, t) {
10578
10578
  }
10579
10579
  //#endregion
10580
10580
  //#region src/plugins/impl/DataEditorPlugin.tsx
10581
- var HC = J.lazy(() => import("./glide-data-editor-D6GkY0Z2.js").then((e) => e.t)), UC = wS("marimo-data-editor", { cssStyles: [qS] }).withData(W({
10581
+ var HC = J.lazy(() => import("./glide-data-editor-bvazCP1C.js").then((e) => e.t)), UC = wS("marimo-data-editor", { cssStyles: [qS] }).withData(W({
10582
10582
  initialValue: W({ edits: G(W({
10583
10583
  rowIdx: K(),
10584
10584
  columnId: U(),
@@ -22016,7 +22016,7 @@ function dM(e, t) {
22016
22016
  }
22017
22017
  //#endregion
22018
22018
  //#region src/plugins/impl/vega/VegaPlugin.tsx
22019
- var fM = J.lazy(() => import("./vega-component-DnfQeoyt.js")), pM = class {
22019
+ var fM = J.lazy(() => import("./vega-component-B8IjMdad.js")), pM = class {
22020
22020
  tagName = "marimo-vega";
22021
22021
  validator = W({
22022
22022
  spec: W({}).passthrough().transform((e) => e),
@@ -30291,7 +30291,7 @@ function BR(e) {
30291
30291
  }
30292
30292
  //#endregion
30293
30293
  //#region src/components/editor/renderers/slides-layout/slides-layout.tsx
30294
- var VR = J.lazy(() => import("./reveal-component-Ckn4ABk3.js")), HR = (e) => {
30294
+ var VR = J.lazy(() => import("./reveal-component-BaedRCK0.js")), HR = (e) => {
30295
30295
  let t = (0, X.c)(33), { layout: n, setLayout: r, cells: i, mode: a } = e, o = ns(da), s = a === "read" || o, c = ns(He) > 1, [l, u] = (0, J.useState)(null), d;
30296
30296
  t[0] !== i || t[1] !== n ? (d = RP(i, n), t[0] = i, t[1] = n, t[2] = d) : d = t[2];
30297
30297
  let { slideCells: f, skippedIds: p, noOutputIds: m, slideTypes: h, startCellIndex: g } = d, _;
@@ -1,6 +1,6 @@
1
1
  import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { t } from "./react-sHtZdjeP.js";
3
- import { a as n } from "./glide-data-editor-D6GkY0Z2.js";
3
+ import { a as n } from "./glide-data-editor-bvazCP1C.js";
4
4
  //#region ../node_modules/.pnpm/@glideapps+glide-data-grid@6.0.4-alpha24_lodash@4.17.21_marked@15.0.12_react-dom@19.3.0_27cffe7f1bc30287d59ac27db3240c5b/node_modules/@glideapps/glide-data-grid/dist/esm/internal/data-grid-overlay-editor/private/number-overlay-editor-style.js
5
5
  var r = /* @__PURE__ */ e(t()), i = /*#__PURE__*/ n("div")({
6
6
  name: "NumberOverlayEditorStyle",
@@ -1,6 +1,6 @@
1
- import { O as e } from "./html-to-image-6xcoTKhC.js";
1
+ import { O as e } from "./html-to-image-Dc3mTXAs.js";
2
2
  import { h as t } from "./tooltip-CKO1pHJo.js";
3
- import { C as n, w as r } from "./error-entries-CMNtA8NK.js";
3
+ import { C as n, w as r } from "./error-entries-Cmiq1RT-.js";
4
4
  import { b as i } from "./select-B0LRDH0g.js";
5
5
  import { n as a } from "./semaphore-89jsoHtS.js";
6
6
  var o = t("file", [["path", {
@@ -3,15 +3,15 @@ import { c as t, g as n, h as r, m as i, t as a } from "./button-BxB3RDjN.js";
3
3
  import { t as o } from "./react-sHtZdjeP.js";
4
4
  import { t as s } from "./compiler-runtime-CldRdSsv.js";
5
5
  import { h as c, t as l } from "./tooltip-CKO1pHJo.js";
6
- import { O as u } from "./error-entries-CMNtA8NK.js";
7
- import { Q as d, X as f, Z as p, an as m, cn as h, i as g, in as _, l as v, n as y, r as b, t as x, u as S } from "./common-BTpcnvZO.js";
6
+ import { O as u } from "./error-entries-Cmiq1RT-.js";
7
+ import { Q as d, X as f, Z as p, an as m, cn as h, i as g, in as _, l as v, n as y, r as b, t as x, u as S } from "./common-COjg9Wjo.js";
8
8
  import { M as C } from "./select-B0LRDH0g.js";
9
9
  import { q as ee } from "./dropdown-menu-B3eUiVJB.js";
10
- import { _ as w } from "./toDate-CjPuEPou.js";
10
+ import { _ as w } from "./toDate-C6BRw8i5.js";
11
11
  import { t as T } from "./jsx-runtime-3BD1kT0s.js";
12
12
  import { q as E } from "./use-restore-focus-DBCITLeF.js";
13
13
  import { A as D, C as O, b as k } from "./useTheme-DympCsQg.js";
14
- import { a as A, n as te, t as ne } from "./code-visibility-BwTJAT1U.js";
14
+ import { a as A, n as te, t as ne } from "./code-visibility-DHJtE2fT.js";
15
15
  /* empty css */
16
16
  var j = c("sticky-note", [["path", {
17
17
  d: "M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z",
@@ -562,26 +562,23 @@ var G = new Set(Object.values(s)), K = class {
562
562
  });
563
563
  return q(this.appendCrossOriginAuth(n).toString());
564
564
  }
565
- getSessionSearchParams(e) {
566
- let t = new URL(this.config.url), n = new URLSearchParams(t.search);
567
- return new URLSearchParams(window.location.search).forEach((e, t) => {
568
- n.has(t) || n.set(t, e);
569
- }), n.set(s.sessionId, e), n;
565
+ getSessionURL(e, t) {
566
+ let n = this.formatHttpURL({ path: e }), r = new URLSearchParams(this.httpURL.search), i = new URLSearchParams(window.location.search);
567
+ for (let e of i.keys()) r.delete(e);
568
+ for (let [e, t] of i) r.append(e, t);
569
+ return r.delete(s.accessToken), r.delete("refresh_token"), r.delete(s.sessionId), n.searchParams.set("query_params", r.toString()), n.searchParams.set(s.sessionId, t), n;
570
570
  }
571
571
  getWsURL(e) {
572
- let t = this.getSessionSearchParams(e);
573
- return this.formatWsURL("/ws", t);
572
+ let t = this.getSessionURL("/ws", e);
573
+ return q(this.appendCrossOriginAuth(t).toString());
574
574
  }
575
575
  getSseURL(e) {
576
- let t = this.formatHttpURL({
577
- path: "/sse",
578
- searchParams: this.getSessionSearchParams(e),
579
- restrictToKnownQueryParams: !1
580
- });
576
+ let t = this.getSessionURL("/sse", e);
581
577
  return t.searchParams.delete(s.accessToken), t;
582
578
  }
583
579
  getWsSyncURL(e) {
584
- return this.formatWsURL("/ws_sync", this.getSessionSearchParams(e));
580
+ let t = this.getSessionURL("/ws_sync", e);
581
+ return q(this.appendCrossOriginAuth(t).toString());
585
582
  }
586
583
  getTerminalWsURL(e) {
587
584
  let t = this.formatWsURL("/terminal/ws");
@@ -3,7 +3,7 @@ import { g as t, h as n, m as r, o as i } from "./button-BxB3RDjN.js";
3
3
  import { t as a } from "./react-sHtZdjeP.js";
4
4
  import { t as o } from "./compiler-runtime-CldRdSsv.js";
5
5
  import { t as s } from "./tooltip-CKO1pHJo.js";
6
- import { C as c, a as l } from "./toDate-CjPuEPou.js";
6
+ import { C as c, a as l } from "./toDate-C6BRw8i5.js";
7
7
  import { t as u } from "./jsx-runtime-3BD1kT0s.js";
8
8
  import { n as d } from "./error-banner-Sl2FlSJ4.js";
9
9
  import { t as f } from "./debounce-C3jyATpc.js";
@@ -11,7 +11,7 @@ import { A as p, n as ee } from "./useTheme-DympCsQg.js";
11
11
  import { c as m, t as h } from "./arrays-R6JsImiT.js";
12
12
  import { t as te } from "./objects-DCmMvZtn.js";
13
13
  import { t as ne } from "./useAsyncData-ChgNtdmE.js";
14
- import { a as g, i as re, n as ie, t as ae } from "./formats-6pLWWrY2.js";
14
+ import { a as g, i as re, n as ie, t as ae } from "./formats-ZmooA-MD.js";
15
15
  import { D as oe, n as _ } from "./vega-loader.browser-B9Pz0EGP.js";
16
16
  import { t as se } from "./react-vega-C4T9Rb_w.js";
17
17
  import { a as ce, n as le } from "./loader-Bm8cy3e8.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/islands",
3
- "version": "0.25.3-dev82",
3
+ "version": "0.25.3-dev85",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -13,7 +13,9 @@ describe("RuntimeManager.getWsURL", () => {
13
13
  });
14
14
  const sessionId = "1234" as SessionId;
15
15
  const url = runtime.getWsURL(sessionId);
16
- expect(url.toString()).toBe("wss://marimo.app/ws?session_id=1234");
16
+ expect(url.toString()).toBe(
17
+ "wss://marimo.app/ws?query_params=&session_id=1234",
18
+ );
17
19
  expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
18
20
  });
19
21
 
@@ -24,7 +26,9 @@ describe("RuntimeManager.getWsURL", () => {
24
26
  });
25
27
  const sessionId = "1234" as SessionId;
26
28
  const url = runtime.getWsURL(sessionId);
27
- expect(url.toString()).toBe("ws://marimo.app/ws?session_id=1234");
29
+ expect(url.toString()).toBe(
30
+ "ws://marimo.app/ws?query_params=&session_id=1234",
31
+ );
28
32
  expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
29
33
  });
30
34
 
@@ -35,7 +39,9 @@ describe("RuntimeManager.getWsURL", () => {
35
39
  });
36
40
  const sessionId = "1234" as SessionId;
37
41
  const url = runtime.getWsURL(sessionId);
38
- expect(url.toString()).toBe("ws://marimo.app/nested/ws?session_id=1234");
42
+ expect(url.toString()).toBe(
43
+ "ws://marimo.app/nested/ws?query_params=&session_id=1234",
44
+ );
39
45
  expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
40
46
  });
41
47
 
@@ -48,7 +54,7 @@ describe("RuntimeManager.getWsURL", () => {
48
54
  const sessionId = "1234" as SessionId;
49
55
  const url = runtime.getWsURL(sessionId);
50
56
  expect(url.toString()).toBe(
51
- "ws://marimo.app/nested/ws?foo=bar&file=test.py&session_id=1234",
57
+ "ws://marimo.app/nested/ws?foo=bar&file=test.py&query_params=foo%3Dbar%26file%3Dtest.py&session_id=1234",
52
58
  );
53
59
  expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
54
60
  });
@@ -62,11 +68,75 @@ describe("RuntimeManager.getWsURL", () => {
62
68
  const sessionId = "1234" as SessionId;
63
69
  const url = runtime.getWsURL(sessionId);
64
70
  expect(url.toString()).toBe(
65
- "ws://marimo.app/ws?file=test.py&search=test&other=last&session_id=1234",
71
+ "ws://marimo.app/ws?file=test.py&query_params=file%3Dtest.py%26search%3Dtest%26other%3Dlast&session_id=1234",
66
72
  );
67
73
  expect(url.searchParams.get("file")).toBe("test.py");
68
- expect(url.searchParams.get("search")).toBe("test");
69
- expect(url.searchParams.get("other")).toBe("last");
74
+ expect(url.searchParams.get("query_params")).toBe(
75
+ "file=test.py&search=test&other=last",
76
+ );
70
77
  expect(url.searchParams.get(KnownQueryParams.sessionId)).toBe(sessionId);
71
78
  });
72
79
  });
80
+
81
+ describe.each(["getWsURL", "getSseURL"] as const)(
82
+ "RuntimeManager.%s",
83
+ (method) => {
84
+ it("preserves runtime parameters and repeated page values", () => {
85
+ window.history.pushState({}, "", "/?tag=page-one&tag=page-two");
86
+ const runtime = new RuntimeManager(
87
+ {
88
+ url: `${window.location.origin}/nested?proxy_token=secret&tag=base&base=one&base=two`,
89
+ lazy: true,
90
+ },
91
+ true,
92
+ );
93
+ const url = runtime[method]("session" as SessionId);
94
+ expect([...url.searchParams]).toEqual([
95
+ ["proxy_token", "secret"],
96
+ ["tag", "base"],
97
+ ["base", "one"],
98
+ ["base", "two"],
99
+ [
100
+ "query_params",
101
+ "proxy_token=secret&base=one&base=two&tag=page-one&tag=page-two",
102
+ ],
103
+ ["session_id", "session"],
104
+ ]);
105
+ });
106
+
107
+ it("keeps notebook parameters out of the stream options", () => {
108
+ const notebookParams = new URLSearchParams([
109
+ ["types", "scatter"],
110
+ ["cursor", "page-2"],
111
+ ["run_id", "experiment"],
112
+ ["query_params", "nested=value&other=1"],
113
+ ["tag", "one"],
114
+ ["tag", "two"],
115
+ ["empty", ""],
116
+ ["text", "a+b & café"],
117
+ ["file", "test.py"],
118
+ ["kiosk", "true"],
119
+ ]);
120
+ window.history.pushState(
121
+ {},
122
+ "",
123
+ `/?${notebookParams}&session_id=page-session`,
124
+ );
125
+ const runtime = new RuntimeManager(
126
+ { url: window.location.origin, lazy: true },
127
+ true,
128
+ );
129
+ const url = runtime[method]("actual-session" as SessionId);
130
+
131
+ expect(Object.fromEntries(url.searchParams)).toEqual({
132
+ file: "test.py",
133
+ kiosk: "true",
134
+ session_id: "actual-session",
135
+ query_params: notebookParams.toString(),
136
+ });
137
+ expect([
138
+ ...new URLSearchParams(url.searchParams.get("query_params") ?? ""),
139
+ ]).toEqual([...notebookParams]);
140
+ });
141
+ },
142
+ );
@@ -249,7 +249,8 @@ describe("RuntimeManager", () => {
249
249
  const url = runtime.getSseURL("s_123" as SessionId);
250
250
 
251
251
  expect(url.searchParams.get("access_token")).toBeNull();
252
- expect(url.searchParams.get("foo")).toBe("bar");
252
+ expect(url.searchParams.get("query_params")).toBe("foo=bar");
253
+ expect(url.toString()).not.toContain("page-token");
253
254
  } finally {
254
255
  window.history.pushState({}, "", original);
255
256
  }
@@ -669,9 +670,16 @@ describe("RuntimeManager", () => {
669
670
  expect(httpUrl.searchParams.get("base_param")).toBe("existing");
670
671
 
671
672
  // Should preserve all window-level query params (including custom ones)
672
- expect(wsUrl.searchParams.get("custom_param")).toBe("value123");
673
- expect(wsUrl.searchParams.get("user_token")).toBe("abc");
674
- expect(wsUrl.searchParams.get("theme")).toBe("dark");
673
+ expect(
674
+ Object.fromEntries(
675
+ new URLSearchParams(wsUrl.searchParams.get("query_params") ?? ""),
676
+ ),
677
+ ).toEqual({
678
+ base_param: "existing",
679
+ custom_param: "value123",
680
+ user_token: "abc",
681
+ theme: "dark",
682
+ });
675
683
  expect(httpUrl.searchParams.get("custom_param")).toBe("value123");
676
684
  expect(httpUrl.searchParams.get("user_token")).toBe("abc");
677
685
  expect(httpUrl.searchParams.get("theme")).toBe("dark");
@@ -738,7 +746,7 @@ describe("RuntimeManager", () => {
738
746
  const sessionId = "test" as SessionId;
739
747
 
740
748
  expect(runtime.getWsURL(sessionId).toString()).toMatchInlineSnapshot(
741
- `"blob:https://example.com/12345678-1234-1234-1234-123456789abc?session_id=test"`,
749
+ `"blob:https://example.com/12345678-1234-1234-1234-123456789abc?query_params=&session_id=test"`,
742
750
  );
743
751
  expect(Logger.warn).toHaveBeenCalledOnce();
744
752
  });
@@ -128,33 +128,32 @@ export class RuntimeManager {
128
128
  return asWsUrl(this.appendCrossOriginAuth(url).toString());
129
129
  }
130
130
 
131
- /**
132
- * Search params for a session connection: the base URL's params, merged
133
- * with the current page's, plus the session id.
134
- */
135
- private getSessionSearchParams(sessionId: SessionId): URLSearchParams {
136
- const baseUrl = new URL(this.config.url);
137
- const searchParams = new URLSearchParams(baseUrl.search);
138
-
139
- // Merge in current page's query parameters
140
- const currentParams = new URLSearchParams(window.location.search);
141
- currentParams.forEach((value, key) => {
142
- // Don't override base URL params
143
- if (!searchParams.has(key)) {
144
- searchParams.set(key, value);
145
- }
146
- });
147
-
148
- searchParams.set(KnownQueryParams.sessionId, sessionId);
149
- return searchParams;
131
+ /** Keep notebook page parameters separate from connection options. */
132
+ private getSessionURL(path: string, sessionId: SessionId): URL {
133
+ const url = this.formatHttpURL({ path });
134
+ const notebookParams = new URLSearchParams(this.httpURL.search);
135
+ const pageParams = new URLSearchParams(window.location.search);
136
+ for (const key of pageParams.keys()) {
137
+ notebookParams.delete(key);
138
+ }
139
+ for (const [key, value] of pageParams) {
140
+ notebookParams.append(key, value);
141
+ }
142
+ // These parameters are internal and are not exposed by mo.query_params().
143
+ notebookParams.delete(KnownQueryParams.accessToken);
144
+ notebookParams.delete("refresh_token");
145
+ notebookParams.delete(KnownQueryParams.sessionId);
146
+ url.searchParams.set("query_params", notebookParams.toString());
147
+ url.searchParams.set(KnownQueryParams.sessionId, sessionId);
148
+ return url;
150
149
  }
151
150
 
152
151
  /**
153
152
  * The WebSocket URL of the runtime.
154
153
  */
155
154
  public getWsURL(sessionId: SessionId): URL {
156
- const searchParams = this.getSessionSearchParams(sessionId);
157
- return this.formatWsURL("/ws", searchParams);
155
+ const url = this.getSessionURL("/ws", sessionId);
156
+ return asWsUrl(this.appendCrossOriginAuth(url).toString());
158
157
  }
159
158
 
160
159
  /**
@@ -164,11 +163,7 @@ export class RuntimeManager {
164
163
  * (see `headers()`) instead of the URL.
165
164
  */
166
165
  public getSseURL(sessionId: SessionId): URL {
167
- const url = this.formatHttpURL({
168
- path: "/sse",
169
- searchParams: this.getSessionSearchParams(sessionId),
170
- restrictToKnownQueryParams: false,
171
- });
166
+ const url = this.getSessionURL("/sse", sessionId);
172
167
  // The page URL can still carry access_token (merged in from the
173
168
  // current page's params, before auth cleanup strips it); never
174
169
  // forward it — a token in the URL leaks into proxy/server logs.
@@ -180,7 +175,8 @@ export class RuntimeManager {
180
175
  * The WebSocket Sync URL of the runtime, for real-time updates.
181
176
  */
182
177
  public getWsSyncURL(sessionId: SessionId): URL {
183
- return this.formatWsURL("/ws_sync", this.getSessionSearchParams(sessionId));
178
+ const url = this.getSessionURL("/ws_sync", sessionId);
179
+ return asWsUrl(this.appendCrossOriginAuth(url).toString());
184
180
  }
185
181
 
186
182
  /**