@marimo-team/islands 0.25.1-dev16 → 0.25.1-dev17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/{ErrorBoundary-Dw6ePT6V.js → ErrorBoundary-B4i0ev18.js} +1 -1
  2. package/dist/{cells-B5-y5EY3.js → cells-Cksce8br.js} +2 -2
  3. package/dist/{chat-ui-HJZsTl7o.js → chat-ui-4lXygZ8L.js} +4 -4
  4. package/dist/{code-visibility-nEXuRCpZ.js → code-visibility-CRc1C5g4.js} +2 -2
  5. package/dist/{common-CKVUP-3T.js → common-DQS4JILK.js} +9 -9
  6. package/dist/{data-grid-overlay-editor-Dl4u0MM_.js → data-grid-overlay-editor-D0-p5694.js} +1 -1
  7. package/dist/{error-entries-Bkbpx0T0.js → error-entries-CvCFdpY2.js} +1 -1
  8. package/dist/{feedback-button-7UQpHERA.js → feedback-button-DD68Ij-B.js} +4 -4
  9. package/dist/{glide-data-editor-Cau1B1SH.js → glide-data-editor-DqTwUsOq.js} +3 -3
  10. package/dist/{globals-BQb7ei48.js → globals-RG69U5-c.js} +1 -1
  11. package/dist/{html-to-image-BAgJOlSW.js → html-to-image-jTwYSWRc.js} +1 -1
  12. package/dist/main.js +13 -18
  13. package/dist/{number-overlay-editor-CmsthUKy.js → number-overlay-editor-DB4g1nLo.js} +1 -1
  14. package/dist/{process-output-zDX4jbhd.js → process-output-DevJrL3v.js} +2 -2
  15. package/dist/{reveal-component-IMWiBhGb.js → reveal-component-QBu-zZNO.js} +3 -3
  16. package/package.json +1 -1
  17. package/src/components/editor/chrome/components/contribute-snippet-button.tsx +6 -1
  18. package/src/components/editor/notebook-cell.tsx +2 -2
  19. package/src/components/editor/output/MarimoTracebackOutput.tsx +1 -1
  20. package/src/components/editor/output/VideoOutput.tsx +1 -1
  21. package/src/components/editor/output/ansi-reduce.ts +8 -4
  22. package/src/components/editor/output/console/text-rendering.tsx +3 -1
  23. package/src/components/home/components.tsx +1 -0
  24. package/src/components/pages/run-page.tsx +1 -0
  25. package/src/components/static-html/share-modal.tsx +2 -1
  26. package/src/components/static-html/static-banner.tsx +2 -1
  27. package/src/components/ui/links.tsx +6 -1
  28. package/src/plugins/layout/RoutesPlugin.tsx +4 -6
@@ -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-7UQpHERA.js").then((e) => ({ default: e.FeedbackModal }))), L = (e) => {
138
+ var I = (0, T.lazy)(() => import("./feedback-button-DD68Ij-B.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,
@@ -25742,7 +25742,7 @@ var Zy = class e {
25742
25742
  row: 0,
25743
25743
  col: 0
25744
25744
  };
25745
- static ESCAPE_REGEX = /\u001B\[([0-9;]*)([A-DJKH])/u;
25745
+ static ESCAPE_REGEX = new RegExp(String.raw`\u001B\[([0-9;]*)([A-DJKH])`, "u");
25746
25746
  ensureLine(e) {
25747
25747
  for (; this.lines.length <= e;) this.lines.push("");
25748
25748
  }
@@ -25826,7 +25826,7 @@ var Zy = class e {
25826
25826
  return this.lines.join("\n");
25827
25827
  }
25828
25828
  }, Qy = class {
25829
- ESC_REGEX = /\u001B(?:\[[0-9;]*[A-Za-z]|\([0-9A-Za-z])/gu;
25829
+ ESC_REGEX = new RegExp(String.raw`\u001B(?:\[[0-9;]*[A-Za-z]|\([0-9A-Za-z])`, "gu");
25830
25830
  parse(e) {
25831
25831
  let t = [], n = 0;
25832
25832
  for (let r of e.matchAll(this.ESC_REGEX)) {
@@ -3,13 +3,13 @@ import { c as n, g as r, h as i, t as a } from "./button-DdXAm8iz.js";
3
3
  import { t as o } from "./react-ofJbxM4x.js";
4
4
  import { t as s } from "./compiler-runtime-Cj8ZWiNS.js";
5
5
  import { i as c, t as l } from "./copy-icon-CLdENY__.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-BAgJOlSW.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-jTwYSWRc.js";
7
7
  import { g as j, t as re } from "./tooltip-qB8NlSqV.js";
8
- import { $ as ie, $t as ae, It as oe, K as se, Mt as ce, N as le, St as ue, Vt as de, X as fe, _t as pe, b as me, cn as he, d as ge, it as _e, pn as ve, rt as ye, sn as be, un as xe, ut as Se, vt as Ce, yt as we } from "./cells-B5-y5EY3.js";
8
+ import { $ as ie, $t as ae, It as oe, K as se, Mt as ce, N as le, St as ue, Vt as de, X as fe, _t as pe, b as me, cn as he, d as ge, it as _e, pn as ve, rt as ye, sn as be, un as xe, ut as Se, vt as Ce, yt as we } from "./cells-Cksce8br.js";
9
9
  import { A as Te, C as Ee, M as De, b as Oe } from "./select-C6plhmZr.js";
10
10
  import { _ as ke, f as Ae, h as je, i as Me, n as Ne, t as Pe } from "./dropdown-menu-CZgjYSAh.js";
11
11
  import { T as Fe, p as Ie } from "./toDate-C67bxMWn.js";
12
- import { d as Le, f as Re, i as ze, n as Be, t as Ve, u as He } from "./process-output-zDX4jbhd.js";
12
+ import { d as Le, f as Re, i as ze, n as Be, t as Ve, u as He } from "./process-output-DevJrL3v.js";
13
13
  import { t as Ue } from "./jsx-runtime-DgDPJV9S.js";
14
14
  import { A as We, C as Ge, D as Ke, E as qe, F as Je, L as Ye, M as Xe, O as Ze, P as Qe, R as $e, S as et, T as tt, V as nt, b as rt, j as it, v as at, w as ot, x as st, y as ct, z as lt } from "./use-restore-focus-D5D9xEjZ.js";
15
15
  import { n as ut } from "./error-banner-B94dcDmP.js";
@@ -22,7 +22,7 @@ import { n as kt, o as At, r as jt } from "./dist-B1vYLK28.js";
22
22
  import { n as Mt } from "./dist-BRxfaJgs.js";
23
23
  import { n as Nt, t as Pt } from "./esm-h8f7-1CJ.js";
24
24
  import { t as Ft } from "./useAsyncData-BD6AStMt.js";
25
- import { i as It, r as Lt, t as Rt } from "./error-entries-Bkbpx0T0.js";
25
+ import { i as It, r as Lt, t as Rt } from "./error-entries-CvCFdpY2.js";
26
26
  var zt = j("ban", [["circle", {
27
27
  cx: "12",
28
28
  cy: "12",
@@ -1,6 +1,6 @@
1
1
  import { g as e } from "./button-DdXAm8iz.js";
2
2
  import { t } from "./compiler-runtime-Cj8ZWiNS.js";
3
- import { H as n, V as r } from "./cells-B5-y5EY3.js";
3
+ import { H as n, V as r } from "./cells-Cksce8br.js";
4
4
  import { C as i } from "./select-C6plhmZr.js";
5
5
  import { C as a, d as o, x as s, y as c } from "./toDate-C67bxMWn.js";
6
6
  import { C as l, E as u, a as d, b as f } from "./useTheme-DzXmYZ5V.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.1-dev16", C = u(S), w = u(!0);
21
+ var S = x() || "0.25.1-dev17", 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-ofJbxM4x.js";
4
4
  import { t as f } from "./compiler-runtime-Cj8ZWiNS.js";
5
5
  import { i as p, n as m, r as h, t as g } from "./copy-icon-CLdENY__.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 ee, s as L, t as te, u as ne, v as re, w as R, y as ie, z as ae } from "./html-to-image-BAgJOlSW.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 ee, s as L, t as te, u as ne, v as re, w as R, y as ie, z as ae } from "./html-to-image-jTwYSWRc.js";
7
7
  import { a as oe, f as se, g as z, n as ce, o as le, r as ue, t as B } from "./tooltip-qB8NlSqV.js";
8
- import { $t as de, C as fe, E as pe, H as me, Ht as he, Jt as ge, L as _e, Lt as ve, M as ye, N as be, St as xe, V as Se, Vt as Ce, W as we, Xt as Te, Y as Ee, Yt as De, _ as Oe, a as ke, an as Ae, at as je, cn as Me, d as Ne, ft as Pe, g as Fe, h as Ie, hn as Le, i as Re, in as ze, j as Be, ln as Ve, mt as He, nn as Ue, nt as We, pn as Ge, pt as Ke, rt as qe, sn as Je, tt as Ye, un as Xe, ut as Ze, wt as Qe, x as $e } from "./cells-B5-y5EY3.js";
8
+ import { $t as de, C as fe, E as pe, H as me, Ht as he, Jt as ge, L as _e, Lt as ve, M as ye, N as be, St as xe, V as Se, Vt as Ce, W as we, Xt as Te, Y as Ee, Yt as De, _ as Oe, a as ke, an as Ae, at as je, cn as Me, d as Ne, ft as Pe, g as Fe, h as Ie, hn as Le, i as Re, in as ze, j as Be, ln as Ve, mt as He, nn as Ue, nt as We, pn as Ge, pt as Ke, rt as qe, sn as Je, tt as Ye, un as Xe, ut as Ze, wt as Qe, x as $e } from "./cells-Cksce8br.js";
9
9
  import { c as et, i as tt, r as nt } from "./useLifecycle-DPgiiwwU.js";
10
10
  import { a as rt, i as it, n as at, o as ot, r as st, t as ct } from "./useDateFormatter-BRTPsUK7.js";
11
11
  import { t as lt } from "./check-B7cIK6gb.js";
12
12
  import { A as ut, C as dt, D 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, 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-C6plhmZr.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, Jt as Xt, K 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, _t as jn, a as Mn, an as Nn, b as Pn, bt as Fn, cn as In, ct as Ln, d as Rn, dn as zn, dt as Bn, en as Vn, et as Hn, f as Un, fn as Wn, ft as Gn, gt as Kn, h as qn, ht as Jn, i as Yn, it as Xn, j as Zn, jt as Qn, k as $n, kt as er, l as tr, ln as nr, lt as rr, mt as ir, n as ar, nn as or, nt as sr, o as cr, on as lr, ot as ur, pn as dr, pt as fr, qt as pr, rn as mr, rt as hr, s as gr, sn as _r, st as vr, t as yr, tn as br, tt as xr, u as Sr, un as Cr, ut as wr, vt as Tr, w as Er, wt as Dr, x as Or, xt as kr, y as Ar, yt as jr, z as Mr, zt as Nr } from "./dropdown-menu-CZgjYSAh.js";
14
14
  import { C as Pr, a as Fr, b as Ir, c as Lr, d as Rr, i as zr, n as Br, o as Vr, p as Hr, r as Ur, s as Wr, t as Gr, x as Kr } from "./toDate-C67bxMWn.js";
15
- import { n as qr, t as Jr } from "./ErrorBoundary-Dw6ePT6V.js";
15
+ import { n as qr, t as Jr } from "./ErrorBoundary-B4i0ev18.js";
16
16
  import { t as Yr } from "./clsx-CoeGtWvn.js";
17
17
  import { t as Xr } from "./react-dom-BUgJ-ab_.js";
18
18
  import { t as Zr } from "./jsx-runtime-DgDPJV9S.js";
@@ -10133,6 +10133,7 @@ var Vy = l([
10133
10133
  return t[0] !== r || t[1] !== n ? (i = /* @__PURE__ */ (0, G.jsx)("a", {
10134
10134
  href: n,
10135
10135
  target: "_blank",
10136
+ rel: "noreferrer",
10136
10137
  className: "text-link hover:underline",
10137
10138
  children: r
10138
10139
  }), t[0] = r, t[1] = n, t[2] = i) : i = t[2], i;
@@ -15030,10 +15031,8 @@ var yE = (e) => {
15030
15031
  let n = mE.ansi_to_html(e), r = E(n, { replace: (e) => t(e) });
15031
15032
  return /* @__PURE__ */ (0, G.jsx)("span", { children: r });
15032
15033
  }, wE = (e) => {
15033
- let t = (0, K.c)(4), { text: n } = e, r;
15034
- t[0] === n ? r = t[1] : (r = CE(n, SE(bE, xE)), t[0] = n, t[1] = r);
15035
- let i = r, a;
15036
- return t[2] === i ? a = t[3] : (a = /* @__PURE__ */ (0, G.jsx)(G.Fragment, { children: i }), t[2] = i, t[3] = a), a;
15034
+ let t = (0, K.c)(2), { text: n } = e, r;
15035
+ return t[0] === n ? r = t[1] : (r = CE(n, SE(bE, xE)), t[0] = n, t[1] = r), r;
15037
15036
  }, TE = (e) => {
15038
15037
  let t = (0, K.c)(16), { traceback: n } = e, [r, i] = (0, W.useState)(!0), a;
15039
15038
  t[0] === r ? a = t[1] : (a = () => i(!r), t[0] = r, t[1] = a);
@@ -15636,7 +15635,8 @@ var dD = (e) => {
15636
15635
  let t = (0, K.c)(3), { src: n, className: r } = e, i;
15637
15636
  return t[0] !== r || t[1] !== n ? (i = /* @__PURE__ */ (0, G.jsx)("iframe", {
15638
15637
  className: r,
15639
- src: n
15638
+ src: n,
15639
+ title: "Video output"
15640
15640
  }), t[0] = r, t[1] = n, t[2] = i) : i = t[2], i;
15641
15641
  };
15642
15642
  //#endregion
@@ -27141,7 +27141,7 @@ var Lz = (e) => {
27141
27141
  children: /* @__PURE__ */ (0, G.jsxs)("a", {
27142
27142
  target: "_blank",
27143
27143
  href: "https://marimo.io/discord?ref=notebook",
27144
- rel: "noopener",
27144
+ rel: "noreferrer",
27145
27145
  children: [
27146
27146
  /* @__PURE__ */ (0, G.jsx)(za, { className: "h-4 w-4 mr-2" }),
27147
27147
  "Ask in Discord",
@@ -2,7 +2,7 @@ import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { t } from "./react-ofJbxM4x.js";
3
3
  import { t as n } from "./react-dom-BUgJ-ab_.js";
4
4
  import { c as r, l as i, u as a } from "./data-grid-types-BucVmDDp.js";
5
- import { a as o, i as s, n as c, r as l } from "./glide-data-editor-Cau1B1SH.js";
5
+ import { a as o, i as s, n as c, r as l } from "./glide-data-editor-DqTwUsOq.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.2.8_b9e6aec46d952f631ce71b0585d2a8e5/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",
@@ -1,4 +1,4 @@
1
- import { At as e, N as t, b as n, d as r, jt as i, kt as a } from "./cells-B5-y5EY3.js";
1
+ import { At as e, N as t, b as n, d as r, jt as i, kt as a } from "./cells-Cksce8br.js";
2
2
  import { C as o } from "./select-C6plhmZr.js";
3
3
  //#region src/core/errors/error-entries.ts
4
4
  function s(t) {
@@ -3,15 +3,15 @@ import { h as t, t as n } from "./button-DdXAm8iz.js";
3
3
  import { t as r } from "./react-ofJbxM4x.js";
4
4
  import { t as i } from "./compiler-runtime-Cj8ZWiNS.js";
5
5
  import { t as a } from "./copy-icon-CLdENY__.js";
6
- import { Ct as o, Ft as s, H as c, L as l, Lt as u, V as d, d as f, un as p } from "./cells-B5-y5EY3.js";
6
+ import { Ct as o, Ft as s, H as c, L as l, Lt as u, V as d, d as f, un as p } from "./cells-Cksce8br.js";
7
7
  import { b as m } from "./select-C6plhmZr.js";
8
- import { n as h, t as ee } from "./globals-BQb7ei48.js";
8
+ import { n as h, t as ee } from "./globals-RG69U5-c.js";
9
9
  import { t as g } from "./jsx-runtime-DgDPJV9S.js";
10
10
  import { C as _, _ as te, i as v } from "./useTheme-DzXmYZ5V.js";
11
11
  import { a as ne, i as re, n as ie, r as ae } from "./dialog-CgNq6y9-.js";
12
12
  import { t as oe } from "./useAsyncData-BD6AStMt.js";
13
- import { t as se } from "./code-visibility-nEXuRCpZ.js";
14
- import { i as ce, n as le } from "./error-entries-Bkbpx0T0.js";
13
+ import { t as se } from "./code-visibility-CRc1C5g4.js";
14
+ import { i as ce, n as le } from "./error-entries-CvCFdpY2.js";
15
15
  //#region src/components/ui/skeleton.tsx
16
16
  var y = /* @__PURE__ */ e(r(), 1), b = i(), x = g(), ue = (e) => {
17
17
  let n = (0, b.c)(8), r, i;
@@ -6,7 +6,7 @@ import { i as s, n as c, r as l } from "./copy-icon-CLdENY__.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-C6plhmZr.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-CZgjYSAh.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-B3rUT5PI.js";
9
- import { n as ne, t as re } from "./ErrorBoundary-Dw6ePT6V.js";
9
+ import { n as ne, t as re } from "./ErrorBoundary-B4i0ev18.js";
10
10
  import { t as M } from "./react-dom-BUgJ-ab_.js";
11
11
  import { t as N } from "./jsx-runtime-DgDPJV9S.js";
12
12
  import { t as ie } from "./label-BJ49YTvk.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.2.8_b9e6aec46d952f631ce71b0585d2a8e5/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-Dl4u0MM_.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-D0-p5694.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.2.8_b9e6aec46d952f631ce71b0585d2a8e5/node_modules/@glideapps/glide-data-grid/dist/esm/cells/number-cell.js
9296
- var Hs = K.lazy(async () => await import("./number-overlay-editor-CmsthUKy.js")), Us = {
9296
+ var Hs = K.lazy(async () => await import("./number-overlay-editor-DB4g1nLo.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 { g as e } from "./tooltip-qB8NlSqV.js";
2
2
  import { _ as t } from "./useTheme-DzXmYZ5V.js";
3
- import { r as n } from "./code-visibility-nEXuRCpZ.js";
3
+ import { r as n } from "./code-visibility-CRc1C5g4.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-Cj8ZWiNS.js";
5
5
  import { n as u, t as d } from "./copy-icon-CLdENY__.js";
6
6
  import { a as f, c as p, l as m, s as h, t as g } from "./chunk-YOKDWASO-DrWbKnxA.js";
7
7
  import { c as _, d as v, g as y, l as b, s as x, t as ee, u as te } from "./tooltip-qB8NlSqV.js";
8
- import { A as ne, E as re, G as ie, Nt as ae, O as oe, R as se, St as ce, Z as le, Zt as ue, _t as de, en as fe, et as pe, gt as me, h as he, ht as ge, lt as _e, s as ve, t as ye, vt as be, xt as xe, yt as Se, z as Ce } from "./cells-B5-y5EY3.js";
8
+ import { A as ne, E as re, G as ie, Nt as ae, O as oe, R as se, St as ce, Z as le, Zt as ue, _t as de, en as fe, et as pe, gt as me, h as he, ht as ge, lt as _e, s as ve, t as ye, vt as be, xt as xe, yt as Se, z as Ce } from "./cells-Cksce8br.js";
9
9
  import { M as we, O as Te, k as Ee } from "./select-C6plhmZr.js";
10
10
  import { J as De, ht as Oe } from "./dropdown-menu-CZgjYSAh.js";
11
11
  import { g as ke, x as Ae } from "./toDate-C67bxMWn.js";
package/dist/main.js CHANGED
@@ -3,20 +3,20 @@ import { _ as a, c as o, f as s, g as c, h as l, i as u, l as d, m as f, n as p,
3
3
  import { t as y } from "./react-ofJbxM4x.js";
4
4
  import { t as b } from "./compiler-runtime-Cj8ZWiNS.js";
5
5
  import { i as x, n as S, r as C, t as w } from "./copy-icon-CLdENY__.js";
6
- import { C as T, F as E, G as D, I as O, J as k, K as A, L as j, P as M, R as N, X as P, Z as F, _ as I, a as L, b as R, g as ee, i as z, j as te, k as B, n as ne, o as re, q as ie, v as ae, y as oe } from "./html-to-image-BAgJOlSW.js";
6
+ import { C as T, F as E, G as D, I as O, J as k, K as A, L as j, P as M, R as N, X as P, Z as F, _ as I, a as L, b as R, g as ee, i as z, j as te, k as B, n as ne, o as re, q as ie, v as ae, y as oe } from "./html-to-image-jTwYSWRc.js";
7
7
  import { a as se, f as ce, g as V, i as le, n as ue, o as de, p as fe, r as pe, t as me } from "./tooltip-qB8NlSqV.js";
8
- import { $ as he, $t as ge, B as _e, Bt as ve, C as ye, Ct as be, D as xe, Dt as Se, Et as Ce, F as we, G as Te, Gt as Ee, Ht as De, I as Oe, J as ke, Jt as Ae, Kt as je, L as Me, O as Ne, Ot as Pe, P as Fe, Pt as Ie, Q as Le, Qt as Re, Rt as ze, S as Be, St as Ve, T as He, Tt as Ue, U as We, W as Ge, Wt as Ke, bt as qe, c as Je, cn as Ye, ct as Xe, d as Ze, dn as Qe, dt as $e, en as et, f as tt, fn as nt, ft as rt, g as it, gt as at, h as ot, hn as st, k as ct, l as lt, ln as ut, m as dt, mn as ft, n as pt, o as mt, on as ht, ot as gt, p as _t, q as vt, qt as yt, r as bt, rn as xt, rt as St, sn as Ct, st as wt, tn as Tt, u as Et, v as Dt, w as Ot, wt as kt, zt as At } from "./cells-B5-y5EY3.js";
8
+ import { $ as he, $t as ge, B as _e, Bt as ve, C as ye, Ct as be, D as xe, Dt as Se, Et as Ce, F as we, G as Te, Gt as Ee, Ht as De, I as Oe, J as ke, Jt as Ae, Kt as je, L as Me, O as Ne, Ot as Pe, P as Fe, Pt as Ie, Q as Le, Qt as Re, Rt as ze, S as Be, St as Ve, T as He, Tt as Ue, U as We, W as Ge, Wt as Ke, bt as qe, c as Je, cn as Ye, ct as Xe, d as Ze, dn as Qe, dt as $e, en as et, f as tt, fn as nt, ft as rt, g as it, gt as at, h as ot, hn as st, k as ct, l as lt, ln as ut, m as dt, mn as ft, n as pt, o as mt, on as ht, ot as gt, p as _t, q as vt, qt as yt, r as bt, rn as xt, rt as St, sn as Ct, st as wt, tn as Tt, u as Et, v as Dt, w as Ot, wt as kt, zt as At } from "./cells-Cksce8br.js";
9
9
  import { D as jt, E as Mt, O as Nt, S as Pt, T as Ft, _ as It, a as Lt, c as Rt, d as zt, f as Bt, g as Vt, h as Ht, i as Ut, l as Wt, m as Gt, n as Kt, o as qt, p as Jt, r as Yt, s as Xt, t as Zt, u as Qt, v as $t, w as en, x as tn, y as nn } from "./spec-CAYwFeV6.js";
10
- import { $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, X as Xn, Xt as Zn, Y as Qn, Yt as $n, Zt as er, _ as tr, _t as nr, an as rr, at as ir, b as ar, c as or, cn as sr, ct as cr, d as lr, dn as ur, dt as dr, en as fr, et as pr, f as mr, fn as hr, ft as gr, g as _r, gt as vr, h as yr, hn as br, ht as xr, in as Sr, it as Cr, j as wr, jt as Tr, k as Er, kt as Dr, ln as Or, lt as kr, m as Ar, mn as jr, mt as Mr, nn as Nr, nt as Pr, ot as Fr, p as Ir, pn as Lr, pt as Rr, q as zr, qt as Br, r as Vr, rn as Hr, rt as Ur, sn as Wr, st as Gr, t as Kr, tn as qr, tt as Jr, u as Yr, un as Xr, ut as Zr, v as Qr, vt as $r, w as ei, wt as ti, x as ni, y as ri, yt as ii, z as ai, zt as oi } from "./common-CKVUP-3T.js";
10
+ import { $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, X as Xn, Xt as Zn, Y as Qn, Yt as $n, Zt as er, _ as tr, _t as nr, an as rr, at as ir, b as ar, c as or, cn as sr, ct as cr, d as lr, dn as ur, dt as dr, en as fr, et as pr, f as mr, fn as hr, ft as gr, g as _r, gt as vr, h as yr, hn as br, ht as xr, in as Sr, it as Cr, j as wr, jt as Tr, k as Er, kt as Dr, ln as Or, lt as kr, m as Ar, mn as jr, mt as Mr, nn as Nr, nt as Pr, ot as Fr, p as Ir, pn as Lr, pt as Rr, q as zr, qt as Br, r as Vr, rn as Hr, rt as Ur, sn as Wr, st as Gr, t as Kr, tn as qr, tt as Jr, u as Yr, un as Xr, ut as Zr, v as Qr, vt as $r, w as ei, wt as ti, x as ni, y as ri, yt as ii, z as ai, zt as oi } from "./common-DQS4JILK.js";
11
11
  import { c as si, i as ci, n as li, o as ui, t as di } from "./useLifecycle-DPgiiwwU.js";
12
12
  import { t as fi } from "./check-B7cIK6gb.js";
13
13
  import { A as pi, C as mi, D as hi, E as gi, M as _i, O as vi, S as yi, T as bi, a as xi, b as Si, c as Ci, i as wi, k as Ti, l as Ei, n as Di, o as Oi, r as ki, s as Ai, t as ji, w as Mi, x as Ni } from "./select-C6plhmZr.js";
14
14
  import { B as Pi, C as Fi, J as Ii, Mt as Li, Nt as Ri, S as zi, Vt as Bi, W as Vi, _ as Hi, a as Ui, at as Wi, c as Gi, dt as Ki, f as qi, fn as Ji, g as Yi, h as Xi, i as Zi, it as Qi, m as $i, n as ea, p as ta, pn as na, q as ra, r as ia, s as aa, t as oa, v as sa, vt as ca, x as la, z as ua } from "./dropdown-menu-CZgjYSAh.js";
15
15
  import { C as da, S as fa, T as pa, _ as ma, c as ha, d as ga, f as _a, g as va, h as ya, m as ba, u as xa, x as Sa, y as Ca } from "./toDate-C67bxMWn.js";
16
- import { a as wa, c as Ta, d as Ea, f as Da, i as Oa, l as ka, n as Aa, o as ja, r as Ma, s as Na, t as Pa } from "./process-output-zDX4jbhd.js";
16
+ import { a as wa, c as Ta, d as Ea, f as Da, i as Oa, l as ka, n as Aa, o as ja, r as Ma, s as Na, t as Pa } from "./process-output-DevJrL3v.js";
17
17
  import { a as Fa, c as Ia, d as La, i as Ra, l as za, r as Ba, u as Va } from "./glide-utils-B3rUT5PI.js";
18
- import { n as Ha, t as Ua } from "./ErrorBoundary-Dw6ePT6V.js";
19
- import { n as Wa, t as Ga } from "./globals-BQb7ei48.js";
18
+ import { n as Ha, t as Ua } from "./ErrorBoundary-B4i0ev18.js";
19
+ import { n as Wa, t as Ga } from "./globals-RG69U5-c.js";
20
20
  import { t as Ka } from "./react-dom-BUgJ-ab_.js";
21
21
  import { t as qa } from "./jsx-runtime-DgDPJV9S.js";
22
22
  import { B as Ja, C as H, Ct as Ya, D as Xa, E as Za, Et as Qa, F as U, G as $a, H as eo, I as to, L as no, M as W, N as ro, O as io, P as ao, Q as oo, R as so, S as G, St as co, Tt as lo, U as uo, W as fo, Y as po, Z as mo, _ as ho, a as go, b as _o, bt as vo, c as yo, d as bo, dt as xo, f as So, g as Co, gt as wo, h as To, i as Eo, j as K, k as Do, l as Oo, m as ko, n as Ao, o as jo, p as Mo, r as No, s as Po, u as Fo, v as Io, vt as Lo, w as Ro, wt as zo, x as Bo, xt as Vo, y as Ho, yt as Uo } from "./use-restore-focus-D5D9xEjZ.js";
@@ -40,7 +40,7 @@ import { t as Ns } from "./useAsyncData-BD6AStMt.js";
40
40
  import { i as Ps, n as Fs, r as Is } from "./formats-C8rLgZT9.js";
41
41
  import { M as Ls, N as Rs } from "./vega-loader.browser-D95WfUcj.js";
42
42
  import { a as zs, n as Bs } from "./loader-D2W4oM-3.js";
43
- import { c as Vs, d as Hs, i as Us, l as Ws, o as Gs, s as Ks, t as qs, u as Js } from "./code-visibility-nEXuRCpZ.js";
43
+ import { c as Vs, d as Hs, i as Us, l as Ws, o as Gs, s as Ks, t as qs, u as Js } from "./code-visibility-CRc1C5g4.js";
44
44
  import { t as Ys } from "./useDeepCompareMemoize-D_HNdyvI.js";
45
45
  import { t as Xs } from "./esm-BElI3qKH.js";
46
46
  //#region ../node_modules/.pnpm/iconify-icon@2.3.0/node_modules/iconify-icon/dist/iconify-icon.mjs
@@ -9992,7 +9992,7 @@ var PS = (e) => {
9992
9992
  output: t
9993
9993
  };
9994
9994
  } };
9995
- } }, BS = J.lazy(() => import("./chat-ui-HJZsTl7o.js").then((e) => ({ default: e.Chatbot }))), VS = G(W({
9995
+ } }, BS = J.lazy(() => import("./chat-ui-4lXygZ8L.js").then((e) => ({ default: e.Chatbot }))), VS = G(W({
9996
9996
  id: U(),
9997
9997
  role: Io([
9998
9998
  "system",
@@ -10458,7 +10458,7 @@ function RC(e, t) {
10458
10458
  }
10459
10459
  //#endregion
10460
10460
  //#region src/plugins/impl/DataEditorPlugin.tsx
10461
- var zC = J.lazy(() => import("./glide-data-editor-Cau1B1SH.js").then((e) => e.t)), BC = xS("marimo-data-editor", { cssStyles: [WS] }).withData(W({
10461
+ var zC = J.lazy(() => import("./glide-data-editor-DqTwUsOq.js").then((e) => e.t)), BC = xS("marimo-data-editor", { cssStyles: [WS] }).withData(W({
10462
10462
  initialValue: W({ edits: G(W({
10463
10463
  rowIdx: K(),
10464
10464
  columnId: U(),
@@ -23133,7 +23133,7 @@ var FM = (/* @__PURE__ */ i(((e) => {
23133
23133
  });
23134
23134
  }
23135
23135
  }, RM = (e) => {
23136
- let t = (0, X.c)(14), { routes: n, children: r } = e, i = J.Children.count(r);
23136
+ let t = (0, X.c)(11), { routes: n, children: r } = e, i = J.Children.count(r);
23137
23137
  if (i !== n.length) throw Error(`Expected ${n.length} children, but got ${i}`);
23138
23138
  let a;
23139
23139
  t[0] === n ? a = t[1] : (a = new IM(n), t[0] = n, t[1] = a);
@@ -23155,14 +23155,9 @@ var FM = (/* @__PURE__ */ i(((e) => {
23155
23155
  return window.addEventListener("hashchange", e), window.addEventListener("popstate", e), () => {
23156
23156
  window.removeEventListener("hashchange", e), window.removeEventListener("popstate", e);
23157
23157
  };
23158
- }, p = [d], t[6] = d, t[7] = f, t[8] = p), (0, J.useEffect)(f, p), !c) {
23159
- let e;
23160
- return t[9] === Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ (0, Y.jsx)(Y.Fragment, {}), t[9] = e) : e = t[9], e;
23161
- }
23158
+ }, p = [d], t[6] = d, t[7] = f, t[8] = p), (0, J.useEffect)(f, p), !c) return null;
23162
23159
  let m = n.indexOf(c), h;
23163
- t[10] === r ? h = t[11] : (h = J.Children.toArray(r), t[10] = r, t[11] = h);
23164
- let g = h[m], _;
23165
- return t[12] === g ? _ = t[13] : (_ = /* @__PURE__ */ (0, Y.jsx)(Y.Fragment, { children: g }), t[12] = g, t[13] = _), _;
23160
+ return t[9] === r ? h = t[10] : (h = J.Children.toArray(r), t[9] = r, t[10] = h), h[m];
23166
23161
  }, zM = class {
23167
23162
  tagName = "marimo-stat";
23168
23163
  validator = W({
@@ -29932,7 +29927,7 @@ function bR(e) {
29932
29927
  }
29933
29928
  //#endregion
29934
29929
  //#region src/components/editor/renderers/slides-layout/slides-layout.tsx
29935
- var xR = J.lazy(() => import("./reveal-component-IMWiBhGb.js")), SR = (e) => {
29930
+ var xR = J.lazy(() => import("./reveal-component-QBu-zZNO.js")), SR = (e) => {
29936
29931
  let t = (0, X.c)(33), { layout: n, setLayout: r, cells: i, mode: a } = e, o = rs(Ca), s = a === "read" || o, c = rs(_t) > 1, [l, u] = (0, J.useState)(null), d;
29937
29932
  t[0] !== i || t[1] !== n ? (d = vP(i, n), t[0] = i, t[1] = n, t[2] = d) : d = t[2];
29938
29933
  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-ofJbxM4x.js";
3
- import { a as n } from "./glide-data-editor-Cau1B1SH.js";
3
+ import { a as n } from "./glide-data-editor-DqTwUsOq.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.2.8_b9e6aec46d952f631ce71b0585d2a8e5/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-BAgJOlSW.js";
1
+ import { O as e } from "./html-to-image-jTwYSWRc.js";
2
2
  import { g as t } from "./tooltip-qB8NlSqV.js";
3
- import { b as n, y as r } from "./cells-B5-y5EY3.js";
3
+ import { b as n, y as r } from "./cells-Cksce8br.js";
4
4
  import { b as i } from "./select-C6plhmZr.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-DdXAm8iz.js";
3
3
  import { t as o } from "./react-ofJbxM4x.js";
4
4
  import { t as s } from "./compiler-runtime-Cj8ZWiNS.js";
5
5
  import { g as c, t as l } from "./tooltip-qB8NlSqV.js";
6
- import { w as u } from "./cells-B5-y5EY3.js";
7
- import { $ as d, Q as f, Z as p, an as m, i as h, l as g, ln as _, n as v, on as y, r as b, t as x, u as S } from "./common-CKVUP-3T.js";
6
+ import { w as u } from "./cells-Cksce8br.js";
7
+ import { $ as d, Q as f, Z as p, an as m, i as h, l as g, ln as _, n as v, on as y, r as b, t as x, u as S } from "./common-DQS4JILK.js";
8
8
  import { M as C } from "./select-C6plhmZr.js";
9
9
  import { J as ee } from "./dropdown-menu-CZgjYSAh.js";
10
10
  import { y as w } from "./toDate-C67bxMWn.js";
11
11
  import { t as T } from "./jsx-runtime-DgDPJV9S.js";
12
12
  import { q as te } from "./use-restore-focus-D5D9xEjZ.js";
13
13
  import { A as E, C as D, b as O } from "./useTheme-DzXmYZ5V.js";
14
- import { a as k, n as ne, t as re } from "./code-visibility-nEXuRCpZ.js";
14
+ import { a as k, n as ne, t as re } from "./code-visibility-CRc1C5g4.js";
15
15
  /* empty css */
16
16
  var A = 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/islands",
3
- "version": "0.25.1-dev16",
3
+ "version": "0.25.1-dev17",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -40,7 +40,12 @@ const ContributeSnippetModal: React.FC<{
40
40
  <DialogDescription>
41
41
  Have a useful snippet you want to share with the community? Make a
42
42
  pull request{" "}
43
- <a href={Constants.githubPage} target="_blank" className="underline">
43
+ <a
44
+ href={Constants.githubPage}
45
+ target="_blank"
46
+ rel="noreferrer"
47
+ className="underline"
48
+ >
44
49
  on GitHub
45
50
  </a>
46
51
  .
@@ -762,7 +762,7 @@ const EditableCellComponent = ({
762
762
  href="https://links.marimo.app/reusable-definitions"
763
763
  target="_blank"
764
764
  className="hover:underline text-muted-foreground text-xs font-bold"
765
- rel="noopener"
765
+ rel="noreferrer"
766
766
  >
767
767
  reusable
768
768
  </a>
@@ -801,7 +801,7 @@ const EditableCellComponent = ({
801
801
  <a
802
802
  href="https://links.marimo.app/reusable-definitions"
803
803
  target="_blank"
804
- rel="noopener"
804
+ rel="noreferrer"
805
805
  >
806
806
  <HelpCircleIcon
807
807
  size={16}
@@ -177,7 +177,7 @@ export const MarimoTracebackOutput = ({
177
177
  <a
178
178
  target="_blank"
179
179
  href="https://marimo.io/discord?ref=notebook"
180
- rel="noopener"
180
+ rel="noreferrer"
181
181
  >
182
182
  <MessageCircleIcon className="h-4 w-4 mr-2" />
183
183
  Ask in Discord
@@ -7,5 +7,5 @@ interface Props {
7
7
  }
8
8
 
9
9
  export const VideoOutput = ({ src, className }: Props): JSX.Element => {
10
- return <iframe className={className} src={src} />;
10
+ return <iframe className={className} src={src} title="Video output" />;
11
11
  };
@@ -13,8 +13,10 @@ export interface Cursor {
13
13
  export class TerminalBuffer {
14
14
  private lines: string[] = [""];
15
15
  private cursor: Cursor = { row: 0, col: 0 };
16
- // oxlint-ignore-next-line no-control-regex -- Needed for ANSI escape sequence parsing
17
- private static readonly ESCAPE_REGEX = /\u001B\[([0-9;]*)([A-DJKH])/u;
16
+ private static readonly ESCAPE_REGEX = new RegExp(
17
+ String.raw`\u001B\[([0-9;]*)([A-DJKH])`,
18
+ "u",
19
+ );
18
20
 
19
21
  /** Ensure the internal lines array is large enough. */
20
22
  private ensureLine(row: number) {
@@ -180,8 +182,10 @@ export class TerminalBuffer {
180
182
  */
181
183
  export class AnsiParser {
182
184
  // Matches both CSI sequences (ESC[...letter) and other escape sequences like character set selection (ESC(B)
183
- // oxlint-ignore-next-line no-control-regex -- Needed for ANSI parsing
184
- private ESC_REGEX = /\u001B(?:\[[0-9;]*[A-Za-z]|\([0-9A-Za-z])/gu;
185
+ private ESC_REGEX = new RegExp(
186
+ String.raw`\u001B(?:\[[0-9;]*[A-Za-z]|\([0-9A-Za-z])`,
187
+ "gu",
188
+ );
185
189
 
186
190
  parse(input: string): { type: "text" | "escape"; value: string }[] {
187
191
  const tokens: { type: "text" | "escape"; value: string }[] = [];
@@ -256,6 +256,7 @@ export const pipInstallReplacer: Replacer = (domNode: DOMNode) => {
256
256
  );
257
257
  }
258
258
 
259
+ // oxlint-disable-next-line react/jsx-no-useless-fragment -- html-react-parser replacers must return a React element.
259
260
  return <>{segments}</>;
260
261
  };
261
262
 
@@ -283,6 +284,7 @@ export const urlReplacer: Replacer = (domNode: DOMNode) => {
283
284
  return undefined;
284
285
  }
285
286
 
287
+ // oxlint-disable-next-line react/jsx-no-useless-fragment -- html-react-parser replacers must return a React element.
286
288
  return <>{result}</>;
287
289
  };
288
290
 
@@ -331,5 +333,5 @@ export const RenderTextWithLinks = ({ text }: { text: string }) => {
331
333
  );
332
334
  }, [text]);
333
335
 
334
- return <>{content}</>;
336
+ return content;
335
337
  };
@@ -170,6 +170,7 @@ export const ResourceLinks: React.FC = () => {
170
170
  key={resource.title}
171
171
  href={resource.url}
172
172
  target="_blank"
173
+ rel="noreferrer"
173
174
  aria-label={`${resource.title}: ${resource.description}`}
174
175
  className="flex items-start gap-3 py-3 px-3 rounded-lg border hover:bg-accent/20 transition-colors shadow-xs"
175
176
  >
@@ -50,6 +50,7 @@ const Watermark = () => {
50
50
  <a
51
51
  href={Constants.githubPage}
52
52
  target="_blank"
53
+ rel="noreferrer"
53
54
  className="text-sm text-(--grass-11) font-bold tracking-wide transition-colors bg-(--grass-4) hover:bg-(--grass-5) border-t border-l border-(--grass-8) px-3 py-1 rounded-tl-md flex items-center gap-2"
54
55
  >
55
56
  <span>made with marimo</span>
@@ -74,6 +74,7 @@ export const ShareStaticNotebookModal: React.FC<{
74
74
  <a
75
75
  href={Constants.issuesPage}
76
76
  target="_blank"
77
+ rel="noreferrer"
77
78
  className="underline"
78
79
  >
79
80
  GitHub
@@ -102,7 +103,7 @@ export const ShareStaticNotebookModal: React.FC<{
102
103
  <DialogDescription>
103
104
  You can publish a static, non-interactive version of this notebook
104
105
  to the public web. We will create a link for you that lives on{" "}
105
- <a href={BASE_URL} target="_blank">
106
+ <a href={BASE_URL} target="_blank" rel="noreferrer">
106
107
  {BASE_URL}
107
108
  </a>
108
109
  .
@@ -1,6 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  /* oxlint-disable react/jsx-no-comment-textnodes */
3
- /* oxlint-disable react/jsx-no-target-blank */
4
3
 
5
4
  import { useAtomValue } from "jotai";
6
5
  import { CopyIcon, DownloadIcon } from "lucide-react";
@@ -49,6 +48,7 @@ export const StaticBanner: React.FC = () => {
49
48
  <a
50
49
  href={Constants.githubPage}
51
50
  target="_blank"
51
+ rel="noreferrer"
52
52
  className="text-(--sky-11) font-medium underline"
53
53
  >
54
54
  marimo
@@ -93,6 +93,7 @@ const StaticBannerDialog = ({ code }: { code: string }) => {
93
93
  <a
94
94
  href={Constants.githubPage}
95
95
  target="_blank"
96
+ rel="noreferrer"
96
97
  className="text-(--sky-11) hover:underline font-medium"
97
98
  >
98
99
  marimo
@@ -21,7 +21,12 @@ export const ExternalLink = ({
21
21
  children: React.ReactNode;
22
22
  }) => {
23
23
  return (
24
- <a href={href} target="_blank" className="text-link hover:underline">
24
+ <a
25
+ href={href}
26
+ target="_blank"
27
+ rel="noreferrer"
28
+ className="text-link hover:underline"
29
+ >
25
30
  {children}
26
31
  </a>
27
32
  );
@@ -1,6 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import React, {
3
- type JSX,
4
3
  type PropsWithChildren,
5
4
  useEffect,
6
5
  useMemo,
@@ -28,7 +27,7 @@ export class RoutesPlugin implements IStatelessPlugin<Data> {
28
27
  routes: z.array(z.string()),
29
28
  });
30
29
 
31
- render(props: IStatelessPluginProps<Data>): JSX.Element {
30
+ render(props: IStatelessPluginProps<Data>): React.ReactElement {
32
31
  return <RoutesComponent {...props.data}>{props.children}</RoutesComponent>;
33
32
  }
34
33
  }
@@ -36,7 +35,7 @@ export class RoutesPlugin implements IStatelessPlugin<Data> {
36
35
  const RoutesComponent = ({
37
36
  routes,
38
37
  children,
39
- }: PropsWithChildren<Data>): JSX.Element => {
38
+ }: PropsWithChildren<Data>): React.ReactNode => {
40
39
  const childCount = React.Children.count(children);
41
40
  if (childCount !== routes.length) {
42
41
  throw new Error(
@@ -69,12 +68,11 @@ const RoutesComponent = ({
69
68
  }, [handleFindMatch]);
70
69
 
71
70
  if (!matched) {
72
- // oxlint-disable-next-line react/jsx-no-useless-fragment
73
- return <></>;
71
+ return null;
74
72
  }
75
73
 
76
74
  const matchedIndex = routes.indexOf(matched);
77
75
  const child = React.Children.toArray(children)[matchedIndex];
78
76
 
79
- return <>{child}</>;
77
+ return child;
80
78
  };