@marimo-team/islands 0.25.3-dev95 → 0.25.3-dev96
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-Cghv7nv2.js → ErrorBoundary-DJjRNeOW.js} +1 -1
- package/dist/{chat-ui-D0jT6WV3.js → chat-ui-ChmqaLQA.js} +4 -3
- package/dist/{code-visibility-CLLrmROz.js → code-visibility-BqP2qZal.js} +2 -2
- package/dist/{common-BUSxx69_.js → common-Dwl0aTge.js} +27 -26
- package/dist/{data-grid-overlay-editor-CWCIs2Mn.js → data-grid-overlay-editor-DadR_9Qe.js} +1 -1
- package/dist/{error-entries-BZiemZfD.js → error-entries-Cq0m-sO5.js} +1 -0
- package/dist/{feedback-button-Ct9dNjaH.js → feedback-button-PDt2V0S1.js} +3 -3
- package/dist/{glide-data-editor-D30nP9Xm.js → glide-data-editor-D2mdZ_2N.js} +3 -3
- package/dist/{globals-B7SyAmCL.js → globals-B8YEfM4c.js} +1 -1
- package/dist/{html-to-image-DBOTlHF9.js → html-to-image-D00_TX1M.js} +1 -1
- package/dist/main.js +38 -28
- package/dist/{number-overlay-editor-8Y4ehcLw.js → number-overlay-editor-DdzFRhUf.js} +1 -1
- package/dist/{process-output-BKLVbFnU.js → process-output-ByXe3l6a.js} +2 -2
- package/dist/{reveal-component-D8VAiQY5.js → reveal-component-ClNTWzdK.js} +3 -3
- package/package.json +1 -1
- package/src/components/app-config/ai-config.tsx +1 -0
- package/src/components/chat/chat-components.tsx +2 -0
- package/src/components/chat/chat-panel.tsx +6 -1
- package/src/components/data-table/__tests__/column-explorer.test.tsx +27 -1
- package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
- package/src/components/datasources/__tests__/column-actions.test.tsx +97 -0
- package/src/components/datasources/__tests__/column-preview.test.tsx +63 -2
- package/src/components/datasources/column-preview.tsx +8 -2
- package/src/components/datasources/datasources.tsx +12 -14
- package/src/components/debugger/debugger-code.tsx +5 -0
- package/src/components/dependency-graph/panels.tsx +2 -1
- package/src/components/editor/ai/ai-completion-editor.tsx +1 -0
- package/src/components/editor/alerts/startup-logs-alert.tsx +1 -0
- package/src/components/editor/cell/DeleteButton.tsx +1 -0
- package/src/components/editor/chrome/panels/cache-panel.tsx +1 -0
- package/src/components/editor/chrome/wrapper/__tests__/pending-ai-cells.test.tsx +58 -1
- package/src/components/editor/chrome/wrapper/pending-ai-cells.tsx +12 -2
- package/src/components/editor/notebook-banner.tsx +1 -0
- package/src/components/editor/package-alert.tsx +2 -0
- package/src/components/editor/renderers/vertical-layout/sidebar/toggle.tsx +7 -1
- package/src/components/mcp/mcp-status-indicator.tsx +1 -1
- package/src/components/slides/slide-form.tsx +1 -0
- package/src/core/codemirror/language/panel/panel.tsx +1 -0
- package/src/plugins/impl/RefreshPlugin.tsx +1 -0
- package/src/plugins/impl/chat/chat-ui.tsx +1 -0
- package/src/stories/button.stories.tsx +1 -0
|
@@ -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-PDt2V0S1.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-
|
|
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-D00_TX1M.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-
|
|
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-Cq0m-sO5.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-B_7xD2X4.js";
|
|
11
11
|
import { C as Re, d as ze } from "./toDate-DKH0_kMo.js";
|
|
12
|
-
import { d as Be, f as Ve, i as He, n as Ue, t as We, u as Ge } from "./process-output-
|
|
12
|
+
import { d as Be, f as Ve, i as He, n as Ue, t as We, u as Ge } from "./process-output-ByXe3l6a.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";
|
|
@@ -5543,6 +5543,7 @@ var Gs = (e) => {
|
|
|
5543
5543
|
/* @__PURE__ */ (0, q.jsx)("div", {
|
|
5544
5544
|
className: "absolute top-0 right-0 flex justify-end z-10 border border-(--slate-6) bg-inherit rounded-bl-lg",
|
|
5545
5545
|
children: /* @__PURE__ */ (0, q.jsx)(a, {
|
|
5546
|
+
"aria-label": "Reset chat",
|
|
5546
5547
|
variant: "text",
|
|
5547
5548
|
size: "icon",
|
|
5548
5549
|
disabled: k.length === 0,
|
|
@@ -1,6 +1,6 @@
|
|
|
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-
|
|
3
|
+
import { G as n, K as r } from "./error-entries-Cq0m-sO5.js";
|
|
4
4
|
import { C as i } from "./select-B0LRDH0g.js";
|
|
5
5
|
import { _ as a, c as o, x as s, y as c } from "./toDate-DKH0_kMo.js";
|
|
6
6
|
import { C as l, E as u, a as d, b as f } from "./useTheme-CfeaVw5D.js";
|
|
@@ -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-dev96", 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 B, v as ee, w as V, y as te, z as ne } from "./html-to-image-
|
|
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 B, v as ee, w as V, y as te, z as ne } from "./html-to-image-D00_TX1M.js";
|
|
7
7
|
import { a as re, d as ie, h as H, n as ae, o as oe, r as se, t as U } from "./tooltip-CKO1pHJo.js";
|
|
8
|
-
import { $ as ce, A as le, D as ue, Et as de, F as fe, G as pe, Ht as me, I as he, J as ge, K as _e, L as ve, Ot as ye, Rt as be, T as xe, Ut as Se, V as Ce, Xt as we, Yt as Te, Zt as Ee, _t as De, an as Oe, at as ke, b as Ae, c as je, cn as Me, dn as Ne, en as Pe, gn as Fe, gt as Ie, h as Le, hn as Re, l as ze, ln as Be, lt as Ve, mn as He, mt as Ue, on as We, ot as Ge, rn as Ke, st as qe, t as Je, un as Ye, vt as Xe, w as Ze, x as Qe, y as $e } from "./error-entries-
|
|
8
|
+
import { $ as ce, A as le, D as ue, Et as de, F as fe, G as pe, Ht as me, I as he, J as ge, K as _e, L as ve, Ot as ye, Rt as be, T as xe, Ut as Se, V as Ce, Xt as we, Yt as Te, Zt as Ee, _t as De, an as Oe, at as ke, b as Ae, c as je, cn as Me, dn as Ne, en as Pe, gn as Fe, gt as Ie, h as Le, hn as Re, l as ze, ln as Be, lt as Ve, mn as He, mt as Ue, on as We, ot as Ge, rn as Ke, st as qe, t as Je, un as Ye, vt as Xe, w as Ze, x as Qe, y as $e } from "./error-entries-Cq0m-sO5.js";
|
|
9
9
|
import { c as et, i as tt, r as nt } from "./useLifecycle-Dum8WSXq.js";
|
|
10
10
|
import { a as rt, i as it, n as at, o as ot, r as st, t as ct } from "./useDateFormatter-c_yJtkAe.js";
|
|
11
11
|
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-DJjRNeOW.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";
|
|
@@ -28054,7 +28054,7 @@ var uB = "slide", dB = "slide", fB = "center", pB = 36, mB = Pe("marimo:slides:c
|
|
|
28054
28054
|
children: [b, D]
|
|
28055
28055
|
}), t[36] = b, t[37] = D, t[38] = O) : O = t[38], O;
|
|
28056
28056
|
}, TB = (e) => {
|
|
28057
|
-
let t = (0, J.c)(
|
|
28057
|
+
let t = (0, J.c)(31), { configWidth: n, layout: r, setLayout: i, activeConfigCell: o } = e, [s, c] = Wi(mB), l = s ? n : pB, d;
|
|
28058
28058
|
t[0] === l ? d = t[1] : (d = { width: l }, t[0] = l, t[1] = d);
|
|
28059
28059
|
let f = s ? "justify-between px-2" : "justify-center px-0", p;
|
|
28060
28060
|
t[2] === f ? p = t[3] : (p = a("flex items-center h-9 shrink-0 border-b border-border/60", f), t[2] = f, t[3] = p);
|
|
@@ -28063,32 +28063,33 @@ var uB = "slide", dB = "slide", fB = "center", pB = 36, mB = Pe("marimo:slides:c
|
|
|
28063
28063
|
className: "text-xs font-medium uppercase tracking-wide text-muted-foreground pl-1",
|
|
28064
28064
|
children: "Configuration"
|
|
28065
28065
|
}), t[4] = s, t[5] = m);
|
|
28066
|
-
let h = s ? "Collapse panel" : "Expand panel", g;
|
|
28067
|
-
t[6] === c ?
|
|
28068
|
-
let _;
|
|
28069
|
-
t[8] === s ? _ = t[9] : (_ = s ? /* @__PURE__ */ (0, q.jsx)(ro, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, q.jsx)(io, { className: "h-4 w-4" }), t[8] = s, t[9] = _);
|
|
28066
|
+
let h = s ? "Collapse panel" : "Expand panel", g = s ? "Collapse panel" : "Expand panel", _;
|
|
28067
|
+
t[6] === c ? _ = t[7] : (_ = () => c(jB), t[6] = c, t[7] = _);
|
|
28070
28068
|
let v;
|
|
28071
|
-
t[
|
|
28069
|
+
t[8] === s ? v = t[9] : (v = s ? /* @__PURE__ */ (0, q.jsx)(ro, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, q.jsx)(io, { className: "h-4 w-4" }), t[8] = s, t[9] = v);
|
|
28070
|
+
let y;
|
|
28071
|
+
t[10] !== s || t[11] !== g || t[12] !== _ || t[13] !== v ? (y = /* @__PURE__ */ (0, q.jsx)(u, {
|
|
28072
|
+
"aria-label": g,
|
|
28072
28073
|
variant: "ghost",
|
|
28073
28074
|
size: "icon",
|
|
28074
28075
|
className: "h-7 w-7 text-muted-foreground hover:text-foreground",
|
|
28075
|
-
onClick:
|
|
28076
|
+
onClick: _,
|
|
28076
28077
|
"aria-expanded": s,
|
|
28077
28078
|
"aria-controls": "slide-config-panel",
|
|
28078
|
-
children: _
|
|
28079
|
-
}), t[10] = s, t[11] = g, t[12] = _, t[13] = v) : v = t[13];
|
|
28080
|
-
let y;
|
|
28081
|
-
t[14] !== h || t[15] !== v ? (y = /* @__PURE__ */ (0, q.jsx)(U, {
|
|
28082
|
-
content: h,
|
|
28083
28079
|
children: v
|
|
28084
|
-
}), t[
|
|
28080
|
+
}), t[10] = s, t[11] = g, t[12] = _, t[13] = v, t[14] = y) : y = t[14];
|
|
28085
28081
|
let b;
|
|
28086
|
-
t[
|
|
28087
|
-
|
|
28088
|
-
children:
|
|
28089
|
-
}), t[
|
|
28082
|
+
t[15] !== y || t[16] !== h ? (b = /* @__PURE__ */ (0, q.jsx)(U, {
|
|
28083
|
+
content: h,
|
|
28084
|
+
children: y
|
|
28085
|
+
}), t[15] = y, t[16] = h, t[17] = b) : b = t[17];
|
|
28090
28086
|
let x;
|
|
28091
|
-
t[
|
|
28087
|
+
t[18] !== b || t[19] !== p || t[20] !== m ? (x = /* @__PURE__ */ (0, q.jsxs)("header", {
|
|
28088
|
+
className: p,
|
|
28089
|
+
children: [m, b]
|
|
28090
|
+
}), t[18] = b, t[19] = p, t[20] = m, t[21] = x) : x = t[21];
|
|
28091
|
+
let S;
|
|
28092
|
+
t[22] !== o || t[23] !== s || t[24] !== r || t[25] !== i ? (S = s && /* @__PURE__ */ (0, q.jsx)("div", {
|
|
28092
28093
|
id: "slide-config-panel",
|
|
28093
28094
|
className: "flex-1 overflow-y-auto overflow-x-hidden",
|
|
28094
28095
|
children: o ? /* @__PURE__ */ (0, q.jsx)(yB, {
|
|
@@ -28102,15 +28103,15 @@ var uB = "slide", dB = "slide", fB = "center", pB = 36, mB = Pe("marimo:slides:c
|
|
|
28102
28103
|
children: "No slides yet"
|
|
28103
28104
|
}), /* @__PURE__ */ (0, q.jsx)("p", { children: "Run a cell that produces output to add it to the deck. Slide settings will appear here once a slide is selected." })]
|
|
28104
28105
|
})
|
|
28105
|
-
}), t[
|
|
28106
|
-
let
|
|
28107
|
-
return t[
|
|
28106
|
+
}), t[22] = o, t[23] = s, t[24] = r, t[25] = i, t[26] = S) : S = t[26];
|
|
28107
|
+
let C;
|
|
28108
|
+
return t[27] !== x || t[28] !== S || t[29] !== d ? (C = /* @__PURE__ */ (0, q.jsxs)("aside", {
|
|
28108
28109
|
className: "h-full flex flex-col border-l border-border/60 bg-muted/20 transition-[width] duration-200 ease-out overflow-hidden",
|
|
28109
28110
|
style: d,
|
|
28110
28111
|
"aria-label": "Slide configuration",
|
|
28111
28112
|
onKeyDown: AB,
|
|
28112
|
-
children: [
|
|
28113
|
-
}), t[
|
|
28113
|
+
children: [x, S]
|
|
28114
|
+
}), t[27] = x, t[28] = S, t[29] = d, t[30] = C) : C = t[30], C;
|
|
28114
28115
|
};
|
|
28115
28116
|
function EB(e) {
|
|
28116
28117
|
return /* @__PURE__ */ (0, q.jsx)(lw, { children: e }, e);
|
|
@@ -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-D2mdZ_2N.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",
|
|
@@ -26513,6 +26513,7 @@ var ky = () => {
|
|
|
26513
26513
|
t[41] === w ? ee = t[42] : (ee = /* @__PURE__ */ (0, I.jsx)(g, {
|
|
26514
26514
|
content: "Format SQL",
|
|
26515
26515
|
children: /* @__PURE__ */ (0, I.jsx)(l, {
|
|
26516
|
+
"aria-label": "Format SQL",
|
|
26516
26517
|
variant: "text",
|
|
26517
26518
|
size: "icon",
|
|
26518
26519
|
onClick: w,
|
|
@@ -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-
|
|
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-Cq0m-sO5.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-B8YEfM4c.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-BqP2qZal.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-DJjRNeOW.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-DadR_9Qe.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-DdzFRhUf.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-BqP2qZal.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,7 +5,7 @@ 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-
|
|
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-Cq0m-sO5.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-B_7xD2X4.js";
|
|
11
11
|
import { m as Oe, y as ke } from "./toDate-DKH0_kMo.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-
|
|
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-D00_TX1M.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-
|
|
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-Cq0m-sO5.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-Dwl0aTge.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";
|
|
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-B_7xD2X4.js";
|
|
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
|
-
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-
|
|
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-ByXe3l6a.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-DJjRNeOW.js";
|
|
19
|
+
import { n as Ua, t as Wa } from "./globals-B8YEfM4c.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-BqP2qZal.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
|
|
@@ -10112,7 +10112,7 @@ var LS = (e) => {
|
|
|
10112
10112
|
output: t
|
|
10113
10113
|
};
|
|
10114
10114
|
} };
|
|
10115
|
-
} }, US = J.lazy(() => import("./chat-ui-
|
|
10115
|
+
} }, US = J.lazy(() => import("./chat-ui-ChmqaLQA.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-
|
|
10581
|
+
var HC = J.lazy(() => import("./glide-data-editor-D2mdZ_2N.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(),
|
|
@@ -14181,34 +14181,35 @@ function bE(e, t) {
|
|
|
14181
14181
|
});
|
|
14182
14182
|
}
|
|
14183
14183
|
var xE = (e) => {
|
|
14184
|
-
let t = (0, X.c)(
|
|
14185
|
-
t[0] !==
|
|
14184
|
+
let t = (0, X.c)(11), { chartCode: n, columnName: r } = e, i = ns(cs), a = De(), { createNewCell: o } = Dt(), s;
|
|
14185
|
+
t[0] !== i || t[1] !== o || t[2] !== a ? (s = (e) => {
|
|
14186
14186
|
e.includes("alt") && ke({
|
|
14187
|
-
autoInstantiate:
|
|
14188
|
-
createNewCell:
|
|
14189
|
-
fromCellId:
|
|
14190
|
-
}),
|
|
14187
|
+
autoInstantiate: i,
|
|
14188
|
+
createNewCell: o,
|
|
14189
|
+
fromCellId: a
|
|
14190
|
+
}), o({
|
|
14191
14191
|
code: e,
|
|
14192
14192
|
before: !1,
|
|
14193
|
-
cellId:
|
|
14193
|
+
cellId: a ?? "__end__"
|
|
14194
14194
|
});
|
|
14195
|
-
}, t[0] =
|
|
14196
|
-
let
|
|
14197
|
-
t[4] !== n || t[5] !==
|
|
14198
|
-
let
|
|
14199
|
-
t[7] === Symbol.for("react.memo_cache_sentinel") ? (
|
|
14200
|
-
let
|
|
14201
|
-
return t[8]
|
|
14195
|
+
}, t[0] = i, t[1] = o, t[2] = a, t[3] = s) : s = t[3];
|
|
14196
|
+
let c = s, l = `Add chart to notebook for ${r}`, u;
|
|
14197
|
+
t[4] !== n || t[5] !== c ? (u = d.stopPropagation(() => c(n)), t[4] = n, t[5] = c, t[6] = u) : u = t[6];
|
|
14198
|
+
let f;
|
|
14199
|
+
t[7] === Symbol.for("react.memo_cache_sentinel") ? (f = /* @__PURE__ */ (0, Y.jsx)(rd, { className: "h-3 w-3" }), t[7] = f) : f = t[7];
|
|
14200
|
+
let p;
|
|
14201
|
+
return t[8] !== l || t[9] !== u ? (p = /* @__PURE__ */ (0, Y.jsx)(pe, {
|
|
14202
14202
|
content: "Add chart to notebook",
|
|
14203
14203
|
delayDuration: 400,
|
|
14204
14204
|
children: /* @__PURE__ */ (0, Y.jsx)(g, {
|
|
14205
|
+
"aria-label": l,
|
|
14205
14206
|
variant: "outline",
|
|
14206
14207
|
size: "icon",
|
|
14207
14208
|
className: "z-10 bg-background absolute right-1 -top-0.5",
|
|
14208
|
-
onClick:
|
|
14209
|
-
children:
|
|
14209
|
+
onClick: u,
|
|
14210
|
+
children: f
|
|
14210
14211
|
})
|
|
14211
|
-
}), t[8] =
|
|
14212
|
+
}), t[8] = l, t[9] = u, t[10] = p) : p = t[10], p;
|
|
14212
14213
|
};
|
|
14213
14214
|
//#endregion
|
|
14214
14215
|
//#region src/components/data-table/column-explorer-panel/column-explorer.tsx
|
|
@@ -14369,7 +14370,10 @@ var wE = ({ previewColumn: e, columnName: t, dataType: n }) => {
|
|
|
14369
14370
|
className: "px-2 py-1",
|
|
14370
14371
|
children: [
|
|
14371
14372
|
m,
|
|
14372
|
-
u && /* @__PURE__ */ (0, Y.jsx)(xE, {
|
|
14373
|
+
u && /* @__PURE__ */ (0, Y.jsx)(xE, {
|
|
14374
|
+
chartCode: u,
|
|
14375
|
+
columnName: t
|
|
14376
|
+
}),
|
|
14373
14377
|
g,
|
|
14374
14378
|
h
|
|
14375
14379
|
]
|
|
@@ -21480,6 +21484,7 @@ var Hj = class {
|
|
|
21480
21484
|
children: /* @__PURE__ */ (0, Y.jsxs)("span", {
|
|
21481
21485
|
className: "inline-flex items-center text-secondary-foreground rounded shadow-sm-solid",
|
|
21482
21486
|
children: [/* @__PURE__ */ (0, Y.jsx)(g, {
|
|
21487
|
+
"aria-label": "Refresh",
|
|
21483
21488
|
"data-testid": "marimo-plugin-refresh-button",
|
|
21484
21489
|
variant: "secondary",
|
|
21485
21490
|
size: "icon",
|
|
@@ -30291,7 +30296,7 @@ function BR(e) {
|
|
|
30291
30296
|
}
|
|
30292
30297
|
//#endregion
|
|
30293
30298
|
//#region src/components/editor/renderers/slides-layout/slides-layout.tsx
|
|
30294
|
-
var VR = J.lazy(() => import("./reveal-component-
|
|
30299
|
+
var VR = J.lazy(() => import("./reveal-component-ClNTWzdK.js")), HR = (e) => {
|
|
30295
30300
|
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
30301
|
t[0] !== i || t[1] !== n ? (d = RP(i, n), t[0] = i, t[1] = n, t[2] = d) : d = t[2];
|
|
30297
30302
|
let { slideCells: f, skippedIds: p, noOutputIds: m, slideTypes: h, startCellIndex: g } = d, _;
|
|
@@ -30476,6 +30481,7 @@ var ZR = (e) => {
|
|
|
30476
30481
|
t[4] === o ? l = t[5] : (l = /* @__PURE__ */ (0, Y.jsx)(pe, {
|
|
30477
30482
|
content: "Next line",
|
|
30478
30483
|
children: /* @__PURE__ */ (0, Y.jsx)(g, {
|
|
30484
|
+
"aria-label": "Next line",
|
|
30479
30485
|
variant: "text",
|
|
30480
30486
|
size: "icon",
|
|
30481
30487
|
"data-testid": "debugger-next-button",
|
|
@@ -30495,6 +30501,7 @@ var ZR = (e) => {
|
|
|
30495
30501
|
t[10] === u ? p = t[11] : (p = /* @__PURE__ */ (0, Y.jsx)(pe, {
|
|
30496
30502
|
content: "Continue execution",
|
|
30497
30503
|
children: /* @__PURE__ */ (0, Y.jsx)(g, {
|
|
30504
|
+
"aria-label": "Continue execution",
|
|
30498
30505
|
variant: "text",
|
|
30499
30506
|
size: "icon",
|
|
30500
30507
|
"data-testid": "debugger-continue-button",
|
|
@@ -30514,6 +30521,7 @@ var ZR = (e) => {
|
|
|
30514
30521
|
t[15] === m ? _ = t[16] : (_ = /* @__PURE__ */ (0, Y.jsx)(pe, {
|
|
30515
30522
|
content: "Print stack trace",
|
|
30516
30523
|
children: /* @__PURE__ */ (0, Y.jsx)(g, {
|
|
30524
|
+
"aria-label": "Print stack trace",
|
|
30517
30525
|
variant: "text",
|
|
30518
30526
|
size: "icon",
|
|
30519
30527
|
"data-testid": "debugger-stack-button",
|
|
@@ -30533,6 +30541,7 @@ var ZR = (e) => {
|
|
|
30533
30541
|
t[20] === v ? b = t[21] : (b = /* @__PURE__ */ (0, Y.jsx)(pe, {
|
|
30534
30542
|
content: "Help",
|
|
30535
30543
|
children: /* @__PURE__ */ (0, Y.jsx)(g, {
|
|
30544
|
+
"aria-label": "Debugger help",
|
|
30536
30545
|
variant: "text",
|
|
30537
30546
|
size: "icon",
|
|
30538
30547
|
"data-testid": "debugger-help-button",
|
|
@@ -30545,6 +30554,7 @@ var ZR = (e) => {
|
|
|
30545
30554
|
t[22] !== r || t[23] !== n ? (x = r && /* @__PURE__ */ (0, Y.jsx)(pe, {
|
|
30546
30555
|
content: "Quit and clear",
|
|
30547
30556
|
children: /* @__PURE__ */ (0, Y.jsx)(g, {
|
|
30557
|
+
"aria-label": "Quit and clear debugger",
|
|
30548
30558
|
variant: "text",
|
|
30549
30559
|
size: "icon",
|
|
30550
30560
|
"data-testid": "debugger-clear-button",
|
|
@@ -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-D2mdZ_2N.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-
|
|
1
|
+
import { O as e } from "./html-to-image-D00_TX1M.js";
|
|
2
2
|
import { h as t } from "./tooltip-CKO1pHJo.js";
|
|
3
|
-
import { C as n, w as r } from "./error-entries-
|
|
3
|
+
import { C as n, w as r } from "./error-entries-Cq0m-sO5.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-
|
|
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-
|
|
6
|
+
import { O as u } from "./error-entries-Cq0m-sO5.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-Dwl0aTge.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-BqP2qZal.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
|
@@ -124,6 +124,7 @@ export const AddContextButton = ({
|
|
|
124
124
|
return (
|
|
125
125
|
<Tooltip content="Add context">
|
|
126
126
|
<Button
|
|
127
|
+
aria-label="Add context"
|
|
127
128
|
variant="text"
|
|
128
129
|
size="icon"
|
|
129
130
|
onClick={handleAddContext}
|
|
@@ -148,6 +149,7 @@ export const AttachFileButton = ({
|
|
|
148
149
|
<>
|
|
149
150
|
<Tooltip content="Attach a file">
|
|
150
151
|
<Button
|
|
152
|
+
aria-label="Attach a file"
|
|
151
153
|
variant="text"
|
|
152
154
|
size="icon"
|
|
153
155
|
onClick={() => fileInputRef.current?.click()}
|
|
@@ -166,7 +166,12 @@ const ChatHeader: React.FC<ChatHeaderProps> = ({
|
|
|
166
166
|
return (
|
|
167
167
|
<div className="flex border-b px-2 py-1 justify-between shrink-0 items-center">
|
|
168
168
|
<Tooltip content="New chat">
|
|
169
|
-
<Button
|
|
169
|
+
<Button
|
|
170
|
+
aria-label="New chat"
|
|
171
|
+
variant="text"
|
|
172
|
+
size="icon"
|
|
173
|
+
onClick={onNewChat}
|
|
174
|
+
>
|
|
170
175
|
<PlusIcon className="h-4 w-4" />
|
|
171
176
|
</Button>
|
|
172
177
|
</Tooltip>
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { fireEvent, render, screen, within } from "@testing-library/react";
|
|
9
9
|
import { beforeAll, describe, expect, it, vi } from "vitest";
|
|
10
10
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
11
|
+
import type { PreviewColumn } from "@/plugins/impl/DataTablePlugin";
|
|
11
12
|
import { ColumnExplorerPanel } from "../column-explorer-panel/column-explorer";
|
|
12
13
|
import type { FieldTypesWithExternalType } from "../types";
|
|
13
14
|
|
|
@@ -36,11 +37,13 @@ const TEST_COLUMNS: ColumnDef<Row>[] = [
|
|
|
36
37
|
interface HarnessProps {
|
|
37
38
|
totalColumns?: number;
|
|
38
39
|
initiallyHidden?: readonly string[];
|
|
40
|
+
previewColumn?: PreviewColumn;
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
function PanelHarness({
|
|
42
44
|
totalColumns = 3,
|
|
43
45
|
initiallyHidden = EMPTY_HIDDEN_COLUMNS,
|
|
46
|
+
previewColumn = vi.fn().mockResolvedValue({}),
|
|
44
47
|
}: HarnessProps) {
|
|
45
48
|
const table = useReactTable<Row>({
|
|
46
49
|
data: [],
|
|
@@ -55,7 +58,7 @@ function PanelHarness({
|
|
|
55
58
|
});
|
|
56
59
|
return (
|
|
57
60
|
<ColumnExplorerPanel
|
|
58
|
-
previewColumn={
|
|
61
|
+
previewColumn={previewColumn}
|
|
59
62
|
fieldTypes={FIELD_TYPES}
|
|
60
63
|
totalRows={3}
|
|
61
64
|
totalColumns={totalColumns}
|
|
@@ -124,6 +127,29 @@ describe("ColumnExplorerPanel search", () => {
|
|
|
124
127
|
});
|
|
125
128
|
});
|
|
126
129
|
|
|
130
|
+
describe("ColumnExplorerPanel chart actions", () => {
|
|
131
|
+
it("names chart actions for each expanded column", async () => {
|
|
132
|
+
const previewColumn = vi.fn<PreviewColumn>().mockResolvedValue({
|
|
133
|
+
chart_code: "chart_code",
|
|
134
|
+
chart_spec: null,
|
|
135
|
+
error: null,
|
|
136
|
+
missing_packages: null,
|
|
137
|
+
stats: null,
|
|
138
|
+
});
|
|
139
|
+
renderPanel({ previewColumn });
|
|
140
|
+
fireEvent.click(screen.getByText("cust_age"));
|
|
141
|
+
|
|
142
|
+
for (const column of ["customer_name", "cust_age"]) {
|
|
143
|
+
expect(
|
|
144
|
+
await screen.findByRole("button", {
|
|
145
|
+
name: `Add chart to notebook for ${column}`,
|
|
146
|
+
}),
|
|
147
|
+
).toBeInTheDocument();
|
|
148
|
+
expect(previewColumn).toHaveBeenCalledWith({ column });
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
|
|
127
153
|
describe("ColumnExplorerPanel header counts", () => {
|
|
128
154
|
it("uses rendered-subset total when a clipped column is hidden", () => {
|
|
129
155
|
// Dataset has 100 columns server-side; only 3 are rendered into the
|
|
@@ -345,7 +345,7 @@ const ColumnPreview = ({
|
|
|
345
345
|
const chart = chart_spec && renderChart(chart_spec, theme);
|
|
346
346
|
|
|
347
347
|
const addDataframeChart = chart_code && (
|
|
348
|
-
<AddDataframeChart chartCode={chart_code} />
|
|
348
|
+
<AddDataframeChart chartCode={chart_code} columnName={columnName} />
|
|
349
349
|
);
|
|
350
350
|
|
|
351
351
|
return (
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
fireEvent,
|
|
5
|
+
render,
|
|
6
|
+
screen,
|
|
7
|
+
waitFor,
|
|
8
|
+
within,
|
|
9
|
+
} from "@testing-library/react";
|
|
10
|
+
import { createStore, Provider } from "jotai";
|
|
11
|
+
import { beforeAll, describe, expect, it, vi } from "vitest";
|
|
12
|
+
import { MockRequestClient } from "@/__mocks__/requests";
|
|
13
|
+
import { Command, CommandList } from "@/components/ui/command";
|
|
14
|
+
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
15
|
+
import type { DataTable } from "@/core/kernel/messages";
|
|
16
|
+
import { requestClientAtom } from "@/core/network/requests";
|
|
17
|
+
import { copyToClipboard } from "@/utils/copy";
|
|
18
|
+
import { TableList } from "../datasources";
|
|
19
|
+
|
|
20
|
+
vi.mock("@/utils/copy", () => ({
|
|
21
|
+
copyToClipboard: vi.fn().mockResolvedValue(undefined),
|
|
22
|
+
}));
|
|
23
|
+
|
|
24
|
+
beforeAll(() => {
|
|
25
|
+
HTMLElement.prototype.scrollIntoView = vi.fn();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const table: DataTable = {
|
|
29
|
+
name: "users",
|
|
30
|
+
columns: [
|
|
31
|
+
{
|
|
32
|
+
name: "email",
|
|
33
|
+
type: "string",
|
|
34
|
+
external_type: "VARCHAR",
|
|
35
|
+
sample_values: [],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "name",
|
|
39
|
+
type: "string",
|
|
40
|
+
external_type: "VARCHAR",
|
|
41
|
+
sample_values: [],
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
source: "memory",
|
|
45
|
+
source_type: "local",
|
|
46
|
+
type: "table",
|
|
47
|
+
engine: null,
|
|
48
|
+
indexes: null,
|
|
49
|
+
num_columns: 2,
|
|
50
|
+
num_rows: null,
|
|
51
|
+
variable_name: null,
|
|
52
|
+
primary_keys: null,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
describe("Column actions", () => {
|
|
56
|
+
it("copies each column through one named button without expanding its preview", async () => {
|
|
57
|
+
const store = createStore();
|
|
58
|
+
const client = MockRequestClient.create();
|
|
59
|
+
store.set(requestClientAtom, client);
|
|
60
|
+
render(
|
|
61
|
+
<Provider store={store}>
|
|
62
|
+
<TooltipProvider>
|
|
63
|
+
<Command>
|
|
64
|
+
<CommandList>
|
|
65
|
+
<TableList tables={[table]} />
|
|
66
|
+
</CommandList>
|
|
67
|
+
</Command>
|
|
68
|
+
</TooltipProvider>
|
|
69
|
+
</Provider>,
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
fireEvent.click(await screen.findByText("users"));
|
|
73
|
+
|
|
74
|
+
for (const column of table.columns) {
|
|
75
|
+
const copyButton = await screen.findByRole("button", {
|
|
76
|
+
name: `Copy column name ${column.name}`,
|
|
77
|
+
});
|
|
78
|
+
const row = screen.getByRole("option", {
|
|
79
|
+
name: `${column.name} ${column.external_type}`,
|
|
80
|
+
});
|
|
81
|
+
expect(within(row).getAllByRole("button")).toEqual([copyButton]);
|
|
82
|
+
expect(copyButton.querySelector("button")).toBeNull();
|
|
83
|
+
|
|
84
|
+
fireEvent.focus(copyButton);
|
|
85
|
+
expect(
|
|
86
|
+
await screen.findByRole("tooltip", { name: "Copy column name" }),
|
|
87
|
+
).toBeInTheDocument();
|
|
88
|
+
|
|
89
|
+
fireEvent.click(copyButton);
|
|
90
|
+
await waitFor(() => {
|
|
91
|
+
expect(copyToClipboard).toHaveBeenLastCalledWith(column.name);
|
|
92
|
+
});
|
|
93
|
+
expect(client.previewDatasetColumn).not.toHaveBeenCalled();
|
|
94
|
+
}
|
|
95
|
+
expect(copyToClipboard).toHaveBeenCalledTimes(2);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import { render } from "@testing-library/react";
|
|
4
|
-
import { Provider } from "jotai";
|
|
3
|
+
import { fireEvent, render, screen } from "@testing-library/react";
|
|
4
|
+
import { createStore, Provider } from "jotai";
|
|
5
5
|
import type React from "react";
|
|
6
6
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
7
7
|
import { MockRequestClient } from "@/__mocks__/requests";
|
|
8
|
+
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
8
9
|
import type { SQLTableContext } from "@/core/datasets/data-source-connections";
|
|
9
10
|
import type { DataTable, DataTableColumn } from "@/core/kernel/messages";
|
|
10
11
|
import { requestClientAtom } from "@/core/network/requests";
|
|
11
12
|
import { store } from "@/core/state/jotai";
|
|
12
13
|
import { DatasetColumnPreview } from "../column-preview";
|
|
13
14
|
|
|
15
|
+
const { createNewCell } = vi.hoisted(() => ({ createNewCell: vi.fn() }));
|
|
16
|
+
|
|
17
|
+
vi.mock("@/core/cells/cells", async (importOriginal) => ({
|
|
18
|
+
...(await importOriginal<typeof import("@/core/cells/cells")>()),
|
|
19
|
+
useCellActions: () => ({ createNewCell }),
|
|
20
|
+
}));
|
|
21
|
+
|
|
14
22
|
const wrapper = ({ children }: { children: React.ReactNode }) => (
|
|
15
23
|
<Provider store={store}>{children}</Provider>
|
|
16
24
|
);
|
|
@@ -95,3 +103,56 @@ describe("DatasetColumnPreview fullyQualifiedTableName", () => {
|
|
|
95
103
|
);
|
|
96
104
|
});
|
|
97
105
|
});
|
|
106
|
+
|
|
107
|
+
describe("DatasetColumnPreview chart actions", () => {
|
|
108
|
+
it("identifies each column and inserts its corresponding chart", () => {
|
|
109
|
+
const store = createStore();
|
|
110
|
+
store.set(requestClientAtom, MockRequestClient.create());
|
|
111
|
+
const columns: DataTableColumn[] = [
|
|
112
|
+
{
|
|
113
|
+
name: "email",
|
|
114
|
+
type: "string",
|
|
115
|
+
external_type: "str",
|
|
116
|
+
sample_values: [],
|
|
117
|
+
},
|
|
118
|
+
{ name: "age", type: "integer", external_type: "int", sample_values: [] },
|
|
119
|
+
];
|
|
120
|
+
render(
|
|
121
|
+
<Provider store={store}>
|
|
122
|
+
<TooltipProvider>
|
|
123
|
+
{columns.map((column) => (
|
|
124
|
+
<DatasetColumnPreview
|
|
125
|
+
key={column.name}
|
|
126
|
+
table={{ ...table, source_type: "local", engine: null }}
|
|
127
|
+
column={column}
|
|
128
|
+
onAddColumnChart={vi.fn()}
|
|
129
|
+
preview={{
|
|
130
|
+
table_name: table.name,
|
|
131
|
+
column_name: column.name,
|
|
132
|
+
chart_code: `chart_${column.name}`,
|
|
133
|
+
chart_spec: null,
|
|
134
|
+
error: null,
|
|
135
|
+
missing_packages: null,
|
|
136
|
+
stats: {},
|
|
137
|
+
}}
|
|
138
|
+
/>
|
|
139
|
+
))}
|
|
140
|
+
</TooltipProvider>
|
|
141
|
+
</Provider>,
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
for (const column of columns) {
|
|
145
|
+
fireEvent.click(
|
|
146
|
+
screen.getByRole("button", {
|
|
147
|
+
name: `Add chart to notebook for ${column.name}`,
|
|
148
|
+
}),
|
|
149
|
+
);
|
|
150
|
+
expect(createNewCell).toHaveBeenLastCalledWith({
|
|
151
|
+
code: `chart_${column.name}`,
|
|
152
|
+
before: false,
|
|
153
|
+
cellId: "__end__",
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
expect(createNewCell).toHaveBeenCalledTimes(2);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
@@ -112,12 +112,16 @@ export const DatasetColumnPreview: React.FC<{
|
|
|
112
112
|
|
|
113
113
|
const addDataframeChart = preview.chart_code &&
|
|
114
114
|
table.source_type === "local" && (
|
|
115
|
-
<AddDataframeChart
|
|
115
|
+
<AddDataframeChart
|
|
116
|
+
chartCode={preview.chart_code}
|
|
117
|
+
columnName={column.name}
|
|
118
|
+
/>
|
|
116
119
|
);
|
|
117
120
|
|
|
118
121
|
const addSQLChart = table.source_type === "duckdb" && (
|
|
119
122
|
<Tooltip content="Add SQL cell" delayDuration={400}>
|
|
120
123
|
<Button
|
|
124
|
+
aria-label={`Add SQL cell for ${column.name}`}
|
|
121
125
|
variant="outline"
|
|
122
126
|
size="icon"
|
|
123
127
|
className="z-10 bg-background absolute right-1 -top-1"
|
|
@@ -238,7 +242,8 @@ export function renderChart(chartSpec: string, theme: Theme) {
|
|
|
238
242
|
|
|
239
243
|
export const AddDataframeChart: React.FC<{
|
|
240
244
|
chartCode: string;
|
|
241
|
-
|
|
245
|
+
columnName: string;
|
|
246
|
+
}> = ({ chartCode, columnName }) => {
|
|
242
247
|
const autoInstantiate = useAtomValue(autoInstantiateAtom);
|
|
243
248
|
const lastFocusedCellId = useLastFocusedCellId();
|
|
244
249
|
const { createNewCell } = useCellActions();
|
|
@@ -261,6 +266,7 @@ export const AddDataframeChart: React.FC<{
|
|
|
261
266
|
return (
|
|
262
267
|
<Tooltip content="Add chart to notebook" delayDuration={400}>
|
|
263
268
|
<Button
|
|
269
|
+
aria-label={`Add chart to notebook for ${columnName}`}
|
|
264
270
|
variant="outline"
|
|
265
271
|
size="icon"
|
|
266
272
|
className="z-10 bg-background absolute right-1 -top-0.5"
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
VisibilityToggleButton,
|
|
14
14
|
} from "@/components/editor/file-tree/tree-actions";
|
|
15
15
|
import { CopyClipboardIcon } from "@/components/icons/copy-icon";
|
|
16
|
-
import { Button } from "@/components/ui/button";
|
|
16
|
+
import { Button, buttonVariants } from "@/components/ui/button";
|
|
17
17
|
import { Command, CommandInput, CommandItem } from "@/components/ui/command";
|
|
18
18
|
import { Tooltip } from "@/components/ui/tooltip";
|
|
19
19
|
import { maybeAddMarimoImport } from "@/core/cells/add-missing-import";
|
|
@@ -978,6 +978,7 @@ const DatasetTableItem: React.FC<{
|
|
|
978
978
|
{renderRowsByColumns()}
|
|
979
979
|
<Tooltip content="Add table to notebook" delayDuration={400}>
|
|
980
980
|
<Button
|
|
981
|
+
aria-label={`Add table ${table.name} to notebook`}
|
|
981
982
|
className="group-hover:inline-flex hidden"
|
|
982
983
|
variant="text"
|
|
983
984
|
size="icon"
|
|
@@ -1068,19 +1069,16 @@ const DatasetColumnItem: React.FC<{
|
|
|
1068
1069
|
{isIndexed &&
|
|
1069
1070
|
renderItemSubtext({ tooltipContent: "Indexed", content: "IDX" })}
|
|
1070
1071
|
</div>
|
|
1071
|
-
<
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
/>
|
|
1082
|
-
</Button>
|
|
1083
|
-
</Tooltip>
|
|
1072
|
+
<CopyClipboardIcon
|
|
1073
|
+
tooltip="Copy column name"
|
|
1074
|
+
value={column.name}
|
|
1075
|
+
ariaLabel={`Copy column name ${column.name}`}
|
|
1076
|
+
className="h-3 w-3"
|
|
1077
|
+
buttonClassName={cn(
|
|
1078
|
+
buttonVariants({ variant: "text", size: "icon" }),
|
|
1079
|
+
"group-hover:opacity-100 opacity-0 hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
1080
|
+
)}
|
|
1081
|
+
/>
|
|
1084
1082
|
<span className="text-xs text-muted-foreground">
|
|
1085
1083
|
{column.external_type}
|
|
1086
1084
|
</span>
|
|
@@ -162,6 +162,7 @@ export const DebuggerControls: React.FC<{
|
|
|
162
162
|
<div className="flex">
|
|
163
163
|
<Tooltip content="Next line">
|
|
164
164
|
<Button
|
|
165
|
+
aria-label="Next line"
|
|
165
166
|
variant="text"
|
|
166
167
|
size="icon"
|
|
167
168
|
data-testid="debugger-next-button"
|
|
@@ -173,6 +174,7 @@ export const DebuggerControls: React.FC<{
|
|
|
173
174
|
</Tooltip>
|
|
174
175
|
<Tooltip content="Continue execution">
|
|
175
176
|
<Button
|
|
177
|
+
aria-label="Continue execution"
|
|
176
178
|
variant="text"
|
|
177
179
|
size="icon"
|
|
178
180
|
data-testid="debugger-continue-button"
|
|
@@ -187,6 +189,7 @@ export const DebuggerControls: React.FC<{
|
|
|
187
189
|
</Tooltip>
|
|
188
190
|
<Tooltip content="Print stack trace">
|
|
189
191
|
<Button
|
|
192
|
+
aria-label="Print stack trace"
|
|
190
193
|
variant="text"
|
|
191
194
|
size="icon"
|
|
192
195
|
data-testid="debugger-stack-button"
|
|
@@ -198,6 +201,7 @@ export const DebuggerControls: React.FC<{
|
|
|
198
201
|
</Tooltip>
|
|
199
202
|
<Tooltip content="Help">
|
|
200
203
|
<Button
|
|
204
|
+
aria-label="Debugger help"
|
|
201
205
|
variant="text"
|
|
202
206
|
size="icon"
|
|
203
207
|
data-testid="debugger-help-button"
|
|
@@ -210,6 +214,7 @@ export const DebuggerControls: React.FC<{
|
|
|
210
214
|
{onClear && (
|
|
211
215
|
<Tooltip content="Quit and clear">
|
|
212
216
|
<Button
|
|
217
|
+
aria-label="Quit and clear debugger"
|
|
213
218
|
variant="text"
|
|
214
219
|
size="icon"
|
|
215
220
|
data-testid="debugger-clear-button"
|
|
@@ -216,11 +216,12 @@ export const GraphSelectionPanel: React.FC<{
|
|
|
216
216
|
</Button>
|
|
217
217
|
</Tooltip>
|
|
218
218
|
<ConnectionCellActionsDropdown cellId={selection.id}>
|
|
219
|
-
<Button variant="ghost" size="icon">
|
|
219
|
+
<Button aria-label="Cell actions" variant="ghost" size="icon">
|
|
220
220
|
<MoreVerticalIcon className="w-4 h-4" />
|
|
221
221
|
</Button>
|
|
222
222
|
</ConnectionCellActionsDropdown>
|
|
223
223
|
<Button
|
|
224
|
+
aria-label="Close cell details"
|
|
224
225
|
variant="text"
|
|
225
226
|
size="icon"
|
|
226
227
|
onClick={() => {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import { act, render, screen, within } from "@testing-library/react";
|
|
3
|
+
import { act, fireEvent, render, screen, within } from "@testing-library/react";
|
|
4
4
|
import { createStore, Provider } from "jotai";
|
|
5
5
|
import { describe, expect, it, vi } from "vitest";
|
|
6
6
|
import { cellId } from "@/__tests__/branded";
|
|
7
7
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
8
8
|
import { stagedAICellsAtom, visibleForTesting } from "@/core/ai/staged-cells";
|
|
9
|
+
import { scrollAndHighlightCell } from "../../../links/cell-link";
|
|
9
10
|
import { PendingAICells } from "../pending-ai-cells";
|
|
10
11
|
|
|
11
12
|
vi.mock("@/components/editor/cell/useDeleteCell", () => ({
|
|
@@ -29,6 +30,62 @@ vi.mock("@/components/editor/links/cell-link", () => ({
|
|
|
29
30
|
}));
|
|
30
31
|
|
|
31
32
|
describe("PendingAICells", () => {
|
|
33
|
+
it("navigates between pending cells through named controls", () => {
|
|
34
|
+
const store = createStore();
|
|
35
|
+
const first = cellId("first-pending-cell");
|
|
36
|
+
const second = cellId("second-pending-cell");
|
|
37
|
+
const third = cellId("third-pending-cell");
|
|
38
|
+
store.set(
|
|
39
|
+
stagedAICellsAtom,
|
|
40
|
+
new Map([
|
|
41
|
+
[first, { type: "add_cell" }],
|
|
42
|
+
[second, { type: "add_cell" }],
|
|
43
|
+
[third, { type: "add_cell" }],
|
|
44
|
+
]),
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
render(
|
|
48
|
+
<Provider store={store}>
|
|
49
|
+
<TooltipProvider>
|
|
50
|
+
<PendingAICells />
|
|
51
|
+
</TooltipProvider>
|
|
52
|
+
</Provider>,
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
const next = screen.getByRole("button", { name: "Next pending AI cell" });
|
|
56
|
+
const previous = screen.getByRole("button", {
|
|
57
|
+
name: "Previous pending AI cell",
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
fireEvent.click(next);
|
|
61
|
+
expect(scrollAndHighlightCell).toHaveBeenLastCalledWith(first, "focus");
|
|
62
|
+
expect(screen.getByText("1 / 3")).toBeInTheDocument();
|
|
63
|
+
|
|
64
|
+
fireEvent.click(next);
|
|
65
|
+
expect(scrollAndHighlightCell).toHaveBeenLastCalledWith(second, "focus");
|
|
66
|
+
expect(screen.getByText("2 / 3")).toBeInTheDocument();
|
|
67
|
+
|
|
68
|
+
fireEvent.click(previous);
|
|
69
|
+
expect(scrollAndHighlightCell).toHaveBeenLastCalledWith(first, "focus");
|
|
70
|
+
expect(screen.getByText("1 / 3")).toBeInTheDocument();
|
|
71
|
+
|
|
72
|
+
fireEvent.click(next);
|
|
73
|
+
expect(scrollAndHighlightCell).toHaveBeenLastCalledWith(second, "focus");
|
|
74
|
+
expect(screen.getByText("2 / 3")).toBeInTheDocument();
|
|
75
|
+
|
|
76
|
+
fireEvent.click(next);
|
|
77
|
+
expect(scrollAndHighlightCell).toHaveBeenLastCalledWith(third, "focus");
|
|
78
|
+
expect(screen.getByText("3 / 3")).toBeInTheDocument();
|
|
79
|
+
|
|
80
|
+
fireEvent.click(next);
|
|
81
|
+
expect(scrollAndHighlightCell).toHaveBeenLastCalledWith(first, "focus");
|
|
82
|
+
expect(screen.getByText("1 / 3")).toBeInTheDocument();
|
|
83
|
+
|
|
84
|
+
fireEvent.click(previous);
|
|
85
|
+
expect(scrollAndHighlightCell).toHaveBeenLastCalledWith(third, "focus");
|
|
86
|
+
expect(screen.getByText("3 / 3")).toBeInTheDocument();
|
|
87
|
+
});
|
|
88
|
+
|
|
32
89
|
it("disables bulk actions while cells are still generating", () => {
|
|
33
90
|
const store = createStore();
|
|
34
91
|
const generationId = Symbol("staged-cell-generation");
|
|
@@ -79,7 +79,12 @@ export const PendingAICells: React.FC = () => {
|
|
|
79
79
|
<SparklesIcon className="h-4 w-4 text-primary" />
|
|
80
80
|
|
|
81
81
|
<div className="flex items-center">
|
|
82
|
-
<Button
|
|
82
|
+
<Button
|
|
83
|
+
aria-label="Previous pending AI cell"
|
|
84
|
+
variant="ghost"
|
|
85
|
+
size="icon"
|
|
86
|
+
onClick={() => clickNext("down")}
|
|
87
|
+
>
|
|
83
88
|
<ChevronUp className="h-3.5 w-3.5" />
|
|
84
89
|
</Button>
|
|
85
90
|
<span className="text-xs font-mono min-w-14 text-center">
|
|
@@ -87,7 +92,12 @@ export const PendingAICells: React.FC = () => {
|
|
|
87
92
|
? `${listStagedCells.length} pending`
|
|
88
93
|
: `${currentIndex + 1} / ${listStagedCells.length}`}
|
|
89
94
|
</span>
|
|
90
|
-
<Button
|
|
95
|
+
<Button
|
|
96
|
+
aria-label="Next pending AI cell"
|
|
97
|
+
variant="ghost"
|
|
98
|
+
size="icon"
|
|
99
|
+
onClick={() => clickNext("up")}
|
|
100
|
+
>
|
|
91
101
|
<ChevronDown className="h-3.5 w-3.5" />
|
|
92
102
|
</Button>
|
|
93
103
|
</div>
|
|
@@ -158,6 +158,7 @@ export const PackageAlert: React.FC = () => {
|
|
|
158
158
|
<SourceBadge source={packageAlert.source} />
|
|
159
159
|
</span>
|
|
160
160
|
<Button
|
|
161
|
+
aria-label="Dismiss missing packages alert"
|
|
161
162
|
variant="text"
|
|
162
163
|
data-testid="remove-banner-button"
|
|
163
164
|
size="icon"
|
|
@@ -270,6 +271,7 @@ export const PackageAlert: React.FC = () => {
|
|
|
270
271
|
<SourceBadge source={packageAlert.source} />
|
|
271
272
|
</span>
|
|
272
273
|
<Button
|
|
274
|
+
aria-label={`Dismiss ${title}`}
|
|
273
275
|
variant="text"
|
|
274
276
|
data-testid="remove-banner-button"
|
|
275
277
|
size="icon"
|
|
@@ -12,7 +12,13 @@ interface SidebarToggleProps {
|
|
|
12
12
|
export const SidebarToggle = ({ isOpen, toggle }: SidebarToggleProps) => {
|
|
13
13
|
return (
|
|
14
14
|
<div className="invisible lg:visible absolute top-[12px] right-[16px] z-20">
|
|
15
|
-
<Button
|
|
15
|
+
<Button
|
|
16
|
+
aria-label={isOpen ? "Collapse sidebar" : "Expand sidebar"}
|
|
17
|
+
onClick={toggle}
|
|
18
|
+
className="w-10 h-8"
|
|
19
|
+
variant="ghost"
|
|
20
|
+
size="icon"
|
|
21
|
+
>
|
|
16
22
|
<ChevronLeft
|
|
17
23
|
className={cn(
|
|
18
24
|
"h-5 w-5 transition-transform ease-in-out duration-700",
|
|
@@ -41,7 +41,7 @@ export const MCPStatusIndicator: React.FC = () => {
|
|
|
41
41
|
<Popover>
|
|
42
42
|
<Tooltip content="MCP Status">
|
|
43
43
|
<PopoverTrigger asChild={true}>
|
|
44
|
-
<Button variant="text" size="icon">
|
|
44
|
+
<Button aria-label="MCP status" variant="text" size="icon">
|
|
45
45
|
<PlugIcon
|
|
46
46
|
className={cn(
|
|
47
47
|
"h-4 w-4",
|
|
@@ -450,6 +450,7 @@ export const SlideSidebar = ({
|
|
|
450
450
|
)}
|
|
451
451
|
<Tooltip content={isConfigOpen ? "Collapse panel" : "Expand panel"}>
|
|
452
452
|
<Button
|
|
453
|
+
aria-label={isConfigOpen ? "Collapse panel" : "Expand panel"}
|
|
453
454
|
variant="ghost"
|
|
454
455
|
size="icon"
|
|
455
456
|
className="h-7 w-7 text-muted-foreground hover:text-foreground"
|
|
@@ -119,6 +119,7 @@ const RefreshComponent = ({ setValue, data }: IPluginProps<Value, Data>) => {
|
|
|
119
119
|
<Labeled label={data.label}>
|
|
120
120
|
<span className="inline-flex items-center text-secondary-foreground rounded shadow-sm-solid">
|
|
121
121
|
<Button
|
|
122
|
+
aria-label="Refresh"
|
|
122
123
|
data-testid="marimo-plugin-refresh-button"
|
|
123
124
|
variant="secondary"
|
|
124
125
|
size="icon"
|
|
@@ -441,6 +441,7 @@ export const Chatbot: React.FC<Props> = (props) => {
|
|
|
441
441
|
>
|
|
442
442
|
<div className="absolute top-0 right-0 flex justify-end z-10 border border-(--slate-6) bg-inherit rounded-bl-lg">
|
|
443
443
|
<Button
|
|
444
|
+
aria-label="Reset chat"
|
|
444
445
|
variant="text"
|
|
445
446
|
size="icon"
|
|
446
447
|
disabled={messages.length === 0}
|