@marimo-team/islands 0.25.3-dev94 → 0.25.3-dev95
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.
- package/dist/{ErrorBoundary-4VHhuyZ5.js → ErrorBoundary-Cghv7nv2.js} +1 -1
- package/dist/{code-visibility-C791KvaY.js → code-visibility-CLLrmROz.js} +1 -1
- package/dist/{common-CLwhauF1.js → common-BUSxx69_.js} +1 -1
- package/dist/{data-grid-overlay-editor-BjOR7Wwc.js → data-grid-overlay-editor-CWCIs2Mn.js} +1 -1
- package/dist/{feedback-button--whPjjUB.js → feedback-button-Ct9dNjaH.js} +2 -2
- package/dist/{glide-data-editor-DKzHt0kS.js → glide-data-editor-D30nP9Xm.js} +3 -3
- package/dist/{globals-BwLJnxj2.js → globals-B7SyAmCL.js} +1 -1
- package/dist/main.js +6 -6
- package/dist/{number-overlay-editor-Df9kpoTU.js → number-overlay-editor-8Y4ehcLw.js} +1 -1
- package/dist/{reveal-component-Di7acYGi.js → reveal-component-D8VAiQY5.js} +2 -2
- package/package.json +1 -1
- package/src/components/pages/__tests__/home-page.test.tsx +116 -0
- package/src/components/pages/home-page.tsx +24 -3
|
@@ -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
|
|
138
|
+
var I = (0, T.lazy)(() => import("./feedback-button-Ct9dNjaH.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,
|
|
@@ -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-
|
|
21
|
+
var S = x() || "0.25.3-dev95", C = u(S), w = u(!0);
|
|
22
22
|
u(null);
|
|
23
23
|
//#endregion
|
|
24
24
|
//#region src/core/wasm/state.ts
|
|
@@ -12,7 +12,7 @@ import { t as lt } from "./check-P35dc2dH.js";
|
|
|
12
12
|
import { A as ut, C as dt, M as ft, O as pt, S as mt, _ as ht, b as gt, c as _t, d as vt, g as yt, h as bt, i as xt, l as St, m as Ct, n as wt, p as Tt, s as Et, t as Dt, u as Ot, v as kt, y as At } from "./select-B0LRDH0g.js";
|
|
13
13
|
import { $ as jt, $t as Mt, A as Nt, At as Pt, B as Ft, Bt as It, Ct as Lt, D as Rt, Dt as zt, E as Bt, Et as Vt, F as Ht, Ft as Ut, G as Wt, Gt, H as Kt, Ht as qt, I as Jt, It as Yt, J as Xt, Jt as Zt, Kt as Qt, L as $t, Lt as en, M as tn, Mt as nn, N as rn, Nt as an, O as on, Ot as sn, P as cn, Pt as ln, Q as un, Qt as dn, R as fn, Rt as pn, S as mn, St as hn, T as gn, Tt as _n, U as vn, Ut as yn, V as bn, Vt as xn, W as Sn, Wt as Cn, X as wn, Xt as Tn, Y as En, Yt as Dn, Z as On, Zt as kn, _ as An, _n as jn, _t as Mn, a as Nn, an as Pn, at as Fn, b as In, bt as Ln, cn as Rn, ct as zn, d as Bn, dn as Vn, en as Hn, et as Un, f as Wn, fn as Gn, ft as Kn, gn as qn, gt as Jn, h as Yn, hn as Xn, ht as Zn, i as Qn, in as $n, it as er, j as tr, jt as nr, k as rr, kt as ir, l as ar, ln as or, lt as sr, mn as cr, mt as lr, n as ur, nn as dr, nt as fr, o as pr, ot as mr, pn as hr, pt as gr, qt as _r, rn as vr, rt as yr, s as br, sn as xr, st as Sr, t as Cr, tt as wr, u as Tr, ut as Er, vn as Dr, vt as Or, w as kr, wt as Ar, x as jr, xt as Mr, y as Nr, yn as Pr, yt as Fr, z as Ir, zt as Lr } from "./dropdown-menu-B_7xD2X4.js";
|
|
14
14
|
import { a as Rr, c as zr, d as Br, i as Vr, l as Hr, n as Ur, o as Wr, r as Gr, t as Kr, v as qr, x as Jr, y as Yr } from "./toDate-DKH0_kMo.js";
|
|
15
|
-
import { n as Xr, t as Zr } from "./ErrorBoundary-
|
|
15
|
+
import { n as Xr, t as Zr } from "./ErrorBoundary-Cghv7nv2.js";
|
|
16
16
|
import { t as Qr } from "./clsx-CoeGtWvn.js";
|
|
17
17
|
import { t as $r } from "./react-dom-DUmH0GXv.js";
|
|
18
18
|
import { t as ei } from "./jsx-runtime-3BD1kT0s.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-
|
|
5
|
+
import { a as o, i as s, n as c, r as l } from "./glide-data-editor-D30nP9Xm.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",
|
|
@@ -5,12 +5,12 @@ import { t as i } from "./compiler-runtime-CldRdSsv.js";
|
|
|
5
5
|
import { t as a } from "./copy-icon-CPoxUG7G.js";
|
|
6
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-BZiemZfD.js";
|
|
7
7
|
import { b as g } from "./select-B0LRDH0g.js";
|
|
8
|
-
import { n as ee, t as te } from "./globals-
|
|
8
|
+
import { n as ee, t as te } from "./globals-B7SyAmCL.js";
|
|
9
9
|
import { t as _ } from "./jsx-runtime-3BD1kT0s.js";
|
|
10
10
|
import { C as v, _ as ne, i as y } from "./useTheme-CfeaVw5D.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-D0mLJstx.js";
|
|
13
|
-
import { t as ce } from "./code-visibility-
|
|
13
|
+
import { t as ce } from "./code-visibility-CLLrmROz.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;
|
|
@@ -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-B_7xD2X4.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-
|
|
9
|
+
import { n as ne, t as re } from "./ErrorBoundary-Cghv7nv2.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-
|
|
7065
|
+
var is = /* @__PURE__ */ e(_r(), 1), as = /* @__PURE__ */ e(xr(), 1), os = K.lazy(async () => await import("./data-grid-overlay-editor-CWCIs2Mn.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-
|
|
9296
|
+
var Hs = K.lazy(async () => await import("./number-overlay-editor-8Y4ehcLw.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-CfeaVw5D.js";
|
|
3
|
-
import { r as n } from "./code-visibility-
|
|
3
|
+
import { r as n } from "./code-visibility-CLLrmROz.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",
|
package/dist/main.js
CHANGED
|
@@ -7,7 +7,7 @@ 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,
|
|
|
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
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-BZiemZfD.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-CcT0slVc.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-
|
|
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-BUSxx69_.js";
|
|
11
11
|
import { c as ai, i as oi, n as si, o as ci, t as li } from "./useLifecycle-Dum8WSXq.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";
|
|
@@ -15,8 +15,8 @@ import { At as Mi, C as Ni, Dt as Pi, J as Fi, K as Ii, R as Li, S as Ri, U as z
|
|
|
15
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-DKH0_kMo.js";
|
|
16
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-BKLVbFnU.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-
|
|
19
|
-
import { n as Ua, t as Wa } from "./globals-
|
|
18
|
+
import { n as Va, t as Ha } from "./ErrorBoundary-Cghv7nv2.js";
|
|
19
|
+
import { n as Ua, t as Wa } from "./globals-B7SyAmCL.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";
|
|
@@ -39,7 +39,7 @@ import { t as Ms } from "./useAsyncData-D0mLJstx.js";
|
|
|
39
39
|
import { i as Ns, n as Ps, r as Fs } from "./formats-V8ifA0Bk.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-
|
|
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-CLLrmROz.js";
|
|
43
43
|
import { t as Js } from "./useDeepCompareMemoize-BpPWi3G3.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
|
|
@@ -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-
|
|
10581
|
+
var HC = J.lazy(() => import("./glide-data-editor-D30nP9Xm.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(),
|
|
@@ -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-
|
|
30294
|
+
var VR = J.lazy(() => import("./reveal-component-D8VAiQY5.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-
|
|
3
|
+
import { a as n } from "./glide-data-editor-D30nP9Xm.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",
|
|
@@ -4,14 +4,14 @@ 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
6
|
import { O as u } from "./error-entries-BZiemZfD.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-
|
|
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-BUSxx69_.js";
|
|
8
8
|
import { M as C } from "./select-B0LRDH0g.js";
|
|
9
9
|
import { q as ee } from "./dropdown-menu-B_7xD2X4.js";
|
|
10
10
|
import { _ as w } from "./toDate-DKH0_kMo.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-CfeaVw5D.js";
|
|
14
|
-
import { a as A, n as te, t as ne } from "./code-visibility-
|
|
14
|
+
import { a as A, n as te, t as ne } from "./code-visibility-CLLrmROz.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",
|
package/package.json
CHANGED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { fireEvent, render, screen } from "@testing-library/react";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { CreateNewNotebook } from "../home-page";
|
|
6
|
+
|
|
7
|
+
function newNotebookKey(link: HTMLElement): string | null {
|
|
8
|
+
return new URL(
|
|
9
|
+
link.getAttribute("href") ?? "",
|
|
10
|
+
window.location.href,
|
|
11
|
+
).searchParams.get("file");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function activate(link: HTMLElement, type: string, init: MouseEventInit) {
|
|
15
|
+
fireEvent(link, new MouseEvent(type, { bubbles: true, ...init }));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe("CreateNewNotebook", () => {
|
|
19
|
+
it("links to an untitled notebook", () => {
|
|
20
|
+
render(<CreateNewNotebook />);
|
|
21
|
+
const link = screen.getByRole("link", { name: /new notebook/i });
|
|
22
|
+
|
|
23
|
+
expect(newNotebookKey(link)).toMatch(/^__new__/);
|
|
24
|
+
expect(link).toHaveAttribute("target", "_blank");
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it.each([
|
|
28
|
+
{ label: "click", type: "click", init: { button: 0, detail: 1 } },
|
|
29
|
+
// Enter on a focused link fires `click` with detail 0
|
|
30
|
+
{ label: "keyboard activation", type: "click", init: { detail: 0 } },
|
|
31
|
+
// ctrl/cmd-click opens a tab and still fires `click`
|
|
32
|
+
{ label: "ctrl-click", type: "click", init: { ctrlKey: true } },
|
|
33
|
+
{ label: "cmd-click", type: "click", init: { metaKey: true } },
|
|
34
|
+
// middle-click opens a tab without firing `click`
|
|
35
|
+
{ label: "middle-click", type: "auxclick", init: { button: 1 } },
|
|
36
|
+
// "Open link in new tab" from the context menu fires no click at all
|
|
37
|
+
{ label: "right-click", type: "contextmenu", init: { button: 2 } },
|
|
38
|
+
])("uses a fresh notebook key on every $label", ({ type, init }) => {
|
|
39
|
+
render(<CreateNewNotebook />);
|
|
40
|
+
const link = screen.getByRole("link", { name: /new notebook/i });
|
|
41
|
+
|
|
42
|
+
const keys = new Set<string | null>([newNotebookKey(link)]);
|
|
43
|
+
for (let i = 0; i < 2; i++) {
|
|
44
|
+
activate(link, type, init);
|
|
45
|
+
keys.add(newNotebookKey(link));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
expect(keys.size).toBe(3);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("never hands the browser a key that an earlier activation used", () => {
|
|
52
|
+
render(<CreateNewNotebook />);
|
|
53
|
+
const link = screen.getByRole("link", { name: /new notebook/i });
|
|
54
|
+
|
|
55
|
+
// The browser reads `href` after every listener ran. Record it there.
|
|
56
|
+
const followed: Array<string | null> = [];
|
|
57
|
+
const record = () => followed.push(newNotebookKey(link));
|
|
58
|
+
document.addEventListener("click", record);
|
|
59
|
+
document.addEventListener("auxclick", record);
|
|
60
|
+
try {
|
|
61
|
+
activate(link, "contextmenu", { button: 2 });
|
|
62
|
+
activate(link, "click", { button: 0 });
|
|
63
|
+
activate(link, "click", { button: 0 });
|
|
64
|
+
activate(link, "auxclick", { button: 1 });
|
|
65
|
+
activate(link, "contextmenu", { button: 2 });
|
|
66
|
+
activate(link, "click", { button: 0, metaKey: true });
|
|
67
|
+
} finally {
|
|
68
|
+
document.removeEventListener("click", record);
|
|
69
|
+
document.removeEventListener("auxclick", record);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
expect(followed).toHaveLength(4);
|
|
73
|
+
expect(new Set(followed).size).toBe(4);
|
|
74
|
+
for (const key of followed) {
|
|
75
|
+
expect(key).toMatch(/^__new__s_/);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("puts a fresh key into the drag payload", () => {
|
|
80
|
+
render(<CreateNewNotebook />);
|
|
81
|
+
const link = screen.getByRole("link", { name: /new notebook/i });
|
|
82
|
+
const before = newNotebookKey(link);
|
|
83
|
+
|
|
84
|
+
const payload = new Map<string, string>();
|
|
85
|
+
const dataTransfer = {
|
|
86
|
+
setData: (format: string, data: string) => payload.set(format, data),
|
|
87
|
+
};
|
|
88
|
+
fireEvent.dragStart(link, { dataTransfer });
|
|
89
|
+
|
|
90
|
+
const dragged = new URL(
|
|
91
|
+
payload.get("text/uri-list") ?? "",
|
|
92
|
+
window.location.href,
|
|
93
|
+
).searchParams.get("file");
|
|
94
|
+
expect(dragged).toMatch(/^__new__s_/);
|
|
95
|
+
expect(dragged).not.toBe(before);
|
|
96
|
+
expect(payload.get("text/plain")).toBe(payload.get("text/uri-list"));
|
|
97
|
+
// The link itself moves to the dragged key, so a later click rotates again
|
|
98
|
+
expect(newNotebookKey(link)).toBe(dragged);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it("survives a re-render without reusing a key", () => {
|
|
102
|
+
const { rerender } = render(<CreateNewNotebook />);
|
|
103
|
+
const link = screen.getByRole("link", { name: /new notebook/i });
|
|
104
|
+
|
|
105
|
+
const keys = new Set<string | null>([newNotebookKey(link)]);
|
|
106
|
+
activate(link, "click", { button: 0 });
|
|
107
|
+
keys.add(newNotebookKey(link));
|
|
108
|
+
rerender(<CreateNewNotebook />);
|
|
109
|
+
keys.add(newNotebookKey(link));
|
|
110
|
+
activate(link, "click", { button: 0 });
|
|
111
|
+
keys.add(newNotebookKey(link));
|
|
112
|
+
|
|
113
|
+
// A re-render keeps the current key; only activations rotate it
|
|
114
|
+
expect(keys.size).toBe(3);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
@@ -667,15 +667,36 @@ const SessionShutdownButton: React.FC<{ filePath: string }> = ({
|
|
|
667
667
|
);
|
|
668
668
|
};
|
|
669
669
|
|
|
670
|
-
const CreateNewNotebook: React.FC = () => {
|
|
671
|
-
|
|
670
|
+
export const CreateNewNotebook: React.FC = () => {
|
|
671
|
+
// Reusing a `__new__` key reattaches to an old session; rotate it per open
|
|
672
|
+
const [url, setUrl] = useState(newNotebookURL);
|
|
673
|
+
const rotateUrl = () => {
|
|
674
|
+
const next = newNotebookURL();
|
|
675
|
+
setUrl(next);
|
|
676
|
+
return next;
|
|
677
|
+
};
|
|
678
|
+
const rotateDragPayload = (event: React.DragEvent<HTMLAnchorElement>) => {
|
|
679
|
+
// The browser copies the href into the drag payload before this handler
|
|
680
|
+
// runs, so the rotated URL must be written into the payload by hand
|
|
681
|
+
const next = rotateUrl();
|
|
682
|
+
event.dataTransfer.setData("text/uri-list", next);
|
|
683
|
+
event.dataTransfer.setData("text/plain", next);
|
|
684
|
+
};
|
|
672
685
|
return (
|
|
673
686
|
<Button
|
|
674
687
|
asChild={true}
|
|
675
688
|
size="sm"
|
|
676
689
|
className="gap-2 rounded-md border-(--brand) bg-(--brand) text-(--brand-foreground) shadow-none hover:bg-(--brand-hover)"
|
|
677
690
|
>
|
|
678
|
-
<a
|
|
691
|
+
<a
|
|
692
|
+
href={url}
|
|
693
|
+
target="_blank"
|
|
694
|
+
rel="noreferrer"
|
|
695
|
+
onClick={rotateUrl}
|
|
696
|
+
onAuxClick={rotateUrl}
|
|
697
|
+
onContextMenu={rotateUrl}
|
|
698
|
+
onDragStart={rotateDragPayload}
|
|
699
|
+
>
|
|
679
700
|
<PlusIcon className="h-4 w-4" />
|
|
680
701
|
New notebook
|
|
681
702
|
</a>
|