@marimo-team/islands 0.24.1-dev115 → 0.24.1-dev119

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 (65) hide show
  1. package/dist/{ConnectedDataExplorerComponent-3vyrwCHu.js → ConnectedDataExplorerComponent-qIKbwYin.js} +10 -10
  2. package/dist/{ErrorBoundary-QF0xsxMw.js → ErrorBoundary-CR-ZQN_c.js} +2 -2
  3. package/dist/{any-language-editor-B2e3EkTe.js → any-language-editor-CpTnK43-.js} +3 -3
  4. package/dist/assets/__vite-browser-external-BdKGjRZ4.js +1 -0
  5. package/dist/assets/{worker-C3TCEtlU.js → worker-DlIBfp9S.js} +2 -2
  6. package/dist/{chat-ui-BgGHMO2G.js → chat-ui-DttQ-5Ut.js} +15 -15
  7. package/dist/{check-C_-c2CXl.js → check-CHig47QV.js} +1 -1
  8. package/dist/{common-Cdx64lyR.js → common-B2pVJVWJ.js} +7590 -7548
  9. package/dist/{copy-D4GHy7GA.js → copy-CD7S58CY.js} +1 -1
  10. package/dist/{dist-mymH-A_x.js → dist-3_o3T78I.js} +14 -14
  11. package/dist/{dropdown-menu-Div6gwlw.js → dropdown-menu-DhCfcscX.js} +123 -123
  12. package/dist/{error-banner-DmgOcFS3.js → error-banner-WDhUzJyg.js} +202 -202
  13. package/dist/{esm-CmFEQJjP.js → esm-CesmlDrs.js} +1 -1
  14. package/dist/{extends-CGTKDWHv.js → extends-BPB6_lTK.js} +3 -3
  15. package/dist/{formats-DuRRWVwb.js → formats-CJMVUfb3.js} +1 -1
  16. package/dist/{glide-data-editor-ekJ5GwaZ.js → glide-data-editor-sPZ8fUFn.js} +7 -7
  17. package/dist/{glide-utils-Dwc8Eh8G.js → glide-utils-NShAPPtn.js} +2 -2
  18. package/dist/{html-to-image-u8Ik6EnK.js → html-to-image-BTYnN4ev.js} +3378 -3378
  19. package/dist/{label-DdGS_CZZ.js → label-lwzzBHUW.js} +1 -1
  20. package/dist/main.js +793 -793
  21. package/dist/{mermaid-Bt45Zzl4.js → mermaid-BsHdQeQf.js} +3 -3
  22. package/dist/{process-output-DQiqt-_U.js → process-output-CsALk6tp.js} +3 -3
  23. package/dist/{reveal-component-tQ-rgxcQ.js → reveal-component-CiaqFa0B.js} +8 -8
  24. package/dist/{schemas-BjeOpZLk.js → schemas-DzK6U94N.js} +1379 -1363
  25. package/dist/{select-DotAQ4jp.js → select-3qHpFKF9.js} +286 -286
  26. package/dist/{spec-BesaYkGC.js → spec-CutWdqo3.js} +4 -4
  27. package/dist/style.css +1 -1
  28. package/dist/{toDate-CrAIOASL.js → toDate-D-Rx3ux5.js} +2 -2
  29. package/dist/{tooltip-COXZxyl7.js → tooltip-Dt77sBeT.js} +87 -87
  30. package/dist/{useAsyncData-x0_tWDWI.js → useAsyncData-CH6-CgJF.js} +1 -1
  31. package/dist/{useDateFormatter-B3V__WqX.js → useDateFormatter-Cp9Jdxls.js} +2 -2
  32. package/dist/{useDeepCompareMemoize-KaRHJEEU.js → useDeepCompareMemoize-JC87C_jO.js} +1 -1
  33. package/dist/{useLifecycle-x0OriHo-.js → useLifecycle-B4RGlyf0.js} +2 -2
  34. package/dist/{useTheme-Bm9_FyqO.js → useTheme-CVJ0UOf2.js} +2 -1
  35. package/dist/{vega-component-nD2oP6WN.js → vega-component-D-IXRnlx.js} +7 -7
  36. package/package.json +1 -1
  37. package/src/components/ai/ai-provider-icon.tsx +2 -2
  38. package/src/components/ai/ai-utils.ts +1 -1
  39. package/src/components/app-config/ai-config.tsx +33 -37
  40. package/src/components/app-config/user-config-form.tsx +1 -1
  41. package/src/components/data-table/renderers.tsx +2 -6
  42. package/src/components/editor/Output.tsx +40 -0
  43. package/src/components/editor/__tests__/Output.test.tsx +85 -2
  44. package/src/components/editor/file-tree/__tests__/file-explorer-navigation.test.tsx +832 -0
  45. package/src/components/editor/file-tree/__tests__/file-viewer.test.tsx +27 -0
  46. package/src/components/editor/file-tree/__tests__/requesting-tree.test.ts +130 -0
  47. package/src/components/editor/file-tree/file-browser-row.tsx +82 -0
  48. package/src/components/editor/file-tree/file-explorer.tsx +377 -159
  49. package/src/components/editor/file-tree/file-operations.tsx +1 -1
  50. package/src/components/editor/file-tree/file-search-results.tsx +142 -0
  51. package/src/components/editor/file-tree/file-tree-row.tsx +40 -0
  52. package/src/components/editor/file-tree/file-viewer.tsx +2 -1
  53. package/src/components/editor/file-tree/requesting-tree.tsx +162 -32
  54. package/src/components/editor/file-tree/use-file-search.ts +142 -0
  55. package/src/components/editor/file-tree/use-hover-expand.ts +34 -0
  56. package/src/components/ui/__tests__/fullscreen.test.tsx +88 -0
  57. package/src/components/ui/fullscreen.tsx +43 -1
  58. package/src/components/ui/links.tsx +2 -1
  59. package/src/core/ai/ids/__tests__/ids.test.ts +0 -8
  60. package/src/core/ai/ids/ids.ts +1 -1
  61. package/src/core/config/config-schema.ts +1 -0
  62. package/src/core/network/__tests__/requests-toasting.test.tsx +14 -0
  63. package/src/core/network/requests-toasting.tsx +1 -1
  64. package/src/hooks/useEventListener.ts +1 -1
  65. package/dist/assets/__vite-browser-external-Cf4O9gnt.js +0 -1
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { g as t } from "./button-CKBkqR9J.js";
3
3
  import { t as n } from "./compiler-runtime-CAH9RLw2.js";
4
- import { u as r } from "./dist-mymH-A_x.js";
5
- import { E as i, _ as a, a as o, b as s } from "./useTheme-Bm9_FyqO.js";
4
+ import { u as r } from "./dist-3_o3T78I.js";
5
+ import { E as i, _ as a, a as o, b as s } from "./useTheme-CVJ0UOf2.js";
6
6
  import { t as c } from "./invariant-DLmrl-hA.js";
7
7
  var l = r("circle-question-mark", [
8
8
  ["circle", {
@@ -2,116 +2,116 @@ import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { d as t, h as n, p as r } from "./button-CKBkqR9J.js";
3
3
  import { t as i } from "./react-DMWcHin-.js";
4
4
  import { t as a } from "./compiler-runtime-CAH9RLw2.js";
5
- import { a as o, i as s, n as c, r as l, s as u, t as d } from "./dist-mymH-A_x.js";
5
+ import { a as o, i as s, n as c, r as l, s as u, t as d } from "./dist-3_o3T78I.js";
6
6
  import { t as f } from "./jsx-runtime-CpoKNRgu.js";
7
- import { Bc as p, Dc as m, Ec as h, Hc as ee, Kc as g, Lc as _, Pc as v, Vc as y, Wc as b, kc as x, qc as S } from "./schemas-BjeOpZLk.js";
7
+ import { Ac as p, Dc as m, Fc as h, Gc as g, Hc as _, Jc as v, Oc as y, Rc as b, Uc as ee, Vc as te, qc as x } from "./schemas-DzK6U94N.js";
8
8
  //#region ../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.8_@types+react-dom@19.2.3_@types+react@19.2.10__@types+reac_6c936392a1aa34d496e116dc55299197/node_modules/@radix-ui/react-tooltip/dist/index.mjs
9
- var C = /* @__PURE__ */ e(i(), 1), w = f(), [T, E] = g("Tooltip", [o]), D = o(), O = "TooltipProvider", te = 700, k = "tooltip.open", [ne, A] = T(O), j = (e) => {
10
- let { __scopeTooltip: t, delayDuration: n = te, skipDelayDuration: r = 300, disableHoverableContent: i = !1, children: a } = e, o = C.useRef(!0), s = C.useRef(!1), c = C.useRef(0);
11
- return C.useEffect(() => {
9
+ var S = /* @__PURE__ */ e(i(), 1), C = f(), [w, T] = x("Tooltip", [o]), E = o(), D = "TooltipProvider", ne = 700, O = "tooltip.open", [re, k] = w(D), A = (e) => {
10
+ let { __scopeTooltip: t, delayDuration: n = ne, skipDelayDuration: r = 300, disableHoverableContent: i = !1, children: a } = e, o = S.useRef(!0), s = S.useRef(!1), c = S.useRef(0);
11
+ return S.useEffect(() => {
12
12
  let e = c.current;
13
13
  return () => window.clearTimeout(e);
14
- }, []), /* @__PURE__ */ (0, w.jsx)(ne, {
14
+ }, []), /* @__PURE__ */ (0, C.jsx)(re, {
15
15
  scope: t,
16
16
  isOpenDelayedRef: o,
17
17
  delayDuration: n,
18
- onOpen: C.useCallback(() => {
18
+ onOpen: S.useCallback(() => {
19
19
  window.clearTimeout(c.current), o.current = !1;
20
20
  }, []),
21
- onClose: C.useCallback(() => {
21
+ onClose: S.useCallback(() => {
22
22
  window.clearTimeout(c.current), c.current = window.setTimeout(() => o.current = !0, r);
23
23
  }, [r]),
24
24
  isPointerInTransitRef: s,
25
- onPointerInTransitChange: C.useCallback((e) => {
25
+ onPointerInTransitChange: S.useCallback((e) => {
26
26
  s.current = e;
27
27
  }, []),
28
28
  disableHoverableContent: i,
29
29
  children: a
30
30
  });
31
31
  };
32
- j.displayName = O;
33
- var M = "Tooltip", [N, P] = T(M), F = (e) => {
34
- let { __scopeTooltip: t, children: n, open: r, defaultOpen: i, onOpenChange: a, disableHoverableContent: o, delayDuration: c } = e, l = A(M, e.__scopeTooltip), u = D(t), [d, f] = C.useState(null), m = p(), h = C.useRef(0), g = o ?? l.disableHoverableContent, _ = c ?? l.delayDuration, v = C.useRef(!1), [y, b] = ee({
32
+ A.displayName = D;
33
+ var j = "Tooltip", [M, N] = w(j), P = (e) => {
34
+ let { __scopeTooltip: t, children: n, open: r, defaultOpen: i, onOpenChange: a, disableHoverableContent: o, delayDuration: c } = e, l = k(j, e.__scopeTooltip), u = E(t), [d, f] = S.useState(null), p = te(), m = S.useRef(0), h = o ?? l.disableHoverableContent, g = c ?? l.delayDuration, _ = S.useRef(!1), [v, y] = ee({
35
35
  prop: r,
36
36
  defaultProp: i ?? !1,
37
37
  onChange: (e) => {
38
- e ? (l.onOpen(), document.dispatchEvent(new CustomEvent(k))) : l.onClose(), a?.(e);
38
+ e ? (l.onOpen(), document.dispatchEvent(new CustomEvent(O))) : l.onClose(), a?.(e);
39
39
  },
40
- caller: M
41
- }), x = C.useMemo(() => y ? v.current ? "delayed-open" : "instant-open" : "closed", [y]), S = C.useCallback(() => {
42
- window.clearTimeout(h.current), h.current = 0, v.current = !1, b(!0);
43
- }, [b]), T = C.useCallback(() => {
44
- window.clearTimeout(h.current), h.current = 0, b(!1);
45
- }, [b]), E = C.useCallback(() => {
46
- window.clearTimeout(h.current), h.current = window.setTimeout(() => {
47
- v.current = !0, b(!0), h.current = 0;
48
- }, _);
49
- }, [_, b]);
50
- return C.useEffect(() => () => {
51
- h.current &&= (window.clearTimeout(h.current), 0);
52
- }, []), /* @__PURE__ */ (0, w.jsx)(s, {
40
+ caller: j
41
+ }), b = S.useMemo(() => v ? _.current ? "delayed-open" : "instant-open" : "closed", [v]), x = S.useCallback(() => {
42
+ window.clearTimeout(m.current), m.current = 0, _.current = !1, y(!0);
43
+ }, [y]), w = S.useCallback(() => {
44
+ window.clearTimeout(m.current), m.current = 0, y(!1);
45
+ }, [y]), T = S.useCallback(() => {
46
+ window.clearTimeout(m.current), m.current = window.setTimeout(() => {
47
+ _.current = !0, y(!0), m.current = 0;
48
+ }, g);
49
+ }, [g, y]);
50
+ return S.useEffect(() => () => {
51
+ m.current &&= (window.clearTimeout(m.current), 0);
52
+ }, []), /* @__PURE__ */ (0, C.jsx)(s, {
53
53
  ...u,
54
- children: /* @__PURE__ */ (0, w.jsx)(N, {
54
+ children: /* @__PURE__ */ (0, C.jsx)(M, {
55
55
  scope: t,
56
- contentId: m,
57
- open: y,
58
- stateAttribute: x,
56
+ contentId: p,
57
+ open: v,
58
+ stateAttribute: b,
59
59
  trigger: d,
60
60
  onTriggerChange: f,
61
- onTriggerEnter: C.useCallback(() => {
62
- l.isOpenDelayedRef.current ? E() : S();
61
+ onTriggerEnter: S.useCallback(() => {
62
+ l.isOpenDelayedRef.current ? T() : x();
63
63
  }, [
64
64
  l.isOpenDelayedRef,
65
- E,
66
- S
65
+ T,
66
+ x
67
67
  ]),
68
- onTriggerLeave: C.useCallback(() => {
69
- g ? T() : (window.clearTimeout(h.current), h.current = 0);
70
- }, [T, g]),
71
- onOpen: S,
72
- onClose: T,
73
- disableHoverableContent: g,
68
+ onTriggerLeave: S.useCallback(() => {
69
+ h ? w() : (window.clearTimeout(m.current), m.current = 0);
70
+ }, [w, h]),
71
+ onOpen: x,
72
+ onClose: w,
73
+ disableHoverableContent: h,
74
74
  children: n
75
75
  })
76
76
  });
77
77
  };
78
- F.displayName = M;
79
- var I = "TooltipTrigger", L = C.forwardRef((e, t) => {
80
- let { __scopeTooltip: n, ...i } = e, a = P(I, n), o = A(I, n), s = D(n), c = C.useRef(null), l = r(t, c, a.onTriggerChange), u = C.useRef(!1), f = C.useRef(!1), p = C.useCallback(() => u.current = !1, []);
81
- return C.useEffect(() => () => document.removeEventListener("pointerup", p), [p]), /* @__PURE__ */ (0, w.jsx)(d, {
78
+ P.displayName = j;
79
+ var F = "TooltipTrigger", I = S.forwardRef((e, t) => {
80
+ let { __scopeTooltip: n, ...i } = e, a = N(F, n), o = k(F, n), s = E(n), c = S.useRef(null), l = r(t, c, a.onTriggerChange), u = S.useRef(!1), f = S.useRef(!1), p = S.useCallback(() => u.current = !1, []);
81
+ return S.useEffect(() => () => document.removeEventListener("pointerup", p), [p]), /* @__PURE__ */ (0, C.jsx)(d, {
82
82
  asChild: !0,
83
83
  ...s,
84
- children: /* @__PURE__ */ (0, w.jsx)(S.button, {
84
+ children: /* @__PURE__ */ (0, C.jsx)(v.button, {
85
85
  "aria-describedby": a.open ? a.contentId : void 0,
86
86
  "data-state": a.stateAttribute,
87
87
  ...i,
88
88
  ref: l,
89
- onPointerMove: b(e.onPointerMove, (e) => {
89
+ onPointerMove: g(e.onPointerMove, (e) => {
90
90
  e.pointerType !== "touch" && !f.current && !o.isPointerInTransitRef.current && (a.onTriggerEnter(), f.current = !0);
91
91
  }),
92
- onPointerLeave: b(e.onPointerLeave, () => {
92
+ onPointerLeave: g(e.onPointerLeave, () => {
93
93
  a.onTriggerLeave(), f.current = !1;
94
94
  }),
95
- onPointerDown: b(e.onPointerDown, () => {
95
+ onPointerDown: g(e.onPointerDown, () => {
96
96
  a.open && a.onClose(), u.current = !0, document.addEventListener("pointerup", p, { once: !0 });
97
97
  }),
98
- onFocus: b(e.onFocus, () => {
98
+ onFocus: g(e.onFocus, () => {
99
99
  u.current || a.onOpen();
100
100
  }),
101
- onBlur: b(e.onBlur, a.onClose),
102
- onClick: b(e.onClick, a.onClose)
101
+ onBlur: g(e.onBlur, a.onClose),
102
+ onClick: g(e.onClick, a.onClose)
103
103
  })
104
104
  });
105
105
  });
106
- L.displayName = I;
107
- var R = "TooltipPortal", [re, z] = T(R, { forceMount: void 0 }), B = (e) => {
108
- let { __scopeTooltip: t, forceMount: n, children: r, container: i } = e, a = P(R, t);
109
- return /* @__PURE__ */ (0, w.jsx)(re, {
106
+ I.displayName = F;
107
+ var L = "TooltipPortal", [R, z] = w(L, { forceMount: void 0 }), B = (e) => {
108
+ let { __scopeTooltip: t, forceMount: n, children: r, container: i } = e, a = N(L, t);
109
+ return /* @__PURE__ */ (0, C.jsx)(R, {
110
110
  scope: t,
111
111
  forceMount: n,
112
- children: /* @__PURE__ */ (0, w.jsx)(y, {
112
+ children: /* @__PURE__ */ (0, C.jsx)(_, {
113
113
  present: n || a.open,
114
- children: /* @__PURE__ */ (0, w.jsx)(v, {
114
+ children: /* @__PURE__ */ (0, C.jsx)(h, {
115
115
  asChild: !0,
116
116
  container: i,
117
117
  children: r
@@ -119,32 +119,32 @@ var R = "TooltipPortal", [re, z] = T(R, { forceMount: void 0 }), B = (e) => {
119
119
  })
120
120
  });
121
121
  };
122
- B.displayName = R;
123
- var V = "TooltipContent", H = C.forwardRef((e, t) => {
124
- let n = z(V, e.__scopeTooltip), { forceMount: r = n.forceMount, side: i = "top", ...a } = e, o = P(V, e.__scopeTooltip);
125
- return /* @__PURE__ */ (0, w.jsx)(y, {
122
+ B.displayName = L;
123
+ var V = "TooltipContent", H = S.forwardRef((e, t) => {
124
+ let n = z(V, e.__scopeTooltip), { forceMount: r = n.forceMount, side: i = "top", ...a } = e, o = N(V, e.__scopeTooltip);
125
+ return /* @__PURE__ */ (0, C.jsx)(_, {
126
126
  present: r || o.open,
127
- children: o.disableHoverableContent ? /* @__PURE__ */ (0, w.jsx)(G, {
127
+ children: o.disableHoverableContent ? /* @__PURE__ */ (0, C.jsx)(G, {
128
128
  side: i,
129
129
  ...a,
130
130
  ref: t
131
- }) : /* @__PURE__ */ (0, w.jsx)(ie, {
131
+ }) : /* @__PURE__ */ (0, C.jsx)(ie, {
132
132
  side: i,
133
133
  ...a,
134
134
  ref: t
135
135
  })
136
136
  });
137
- }), ie = C.forwardRef((e, t) => {
138
- let n = P(V, e.__scopeTooltip), i = A(V, e.__scopeTooltip), a = C.useRef(null), o = r(t, a), [s, c] = C.useState(null), { trigger: l, onClose: u } = n, d = a.current, { onPointerInTransitChange: f } = i, p = C.useCallback(() => {
137
+ }), ie = S.forwardRef((e, t) => {
138
+ let n = N(V, e.__scopeTooltip), i = k(V, e.__scopeTooltip), a = S.useRef(null), o = r(t, a), [s, c] = S.useState(null), { trigger: l, onClose: u } = n, d = a.current, { onPointerInTransitChange: f } = i, p = S.useCallback(() => {
139
139
  c(null), f(!1);
140
- }, [f]), m = C.useCallback((e, t) => {
140
+ }, [f]), m = S.useCallback((e, t) => {
141
141
  let n = e.currentTarget, r = {
142
142
  x: e.clientX,
143
143
  y: e.clientY
144
144
  }, i = se(r, oe(r, n.getBoundingClientRect())), a = ce(t.getBoundingClientRect()), o = ue([...i, ...a]);
145
145
  c(o), f(!0);
146
146
  }, [f]);
147
- return C.useEffect(() => () => p(), [p]), C.useEffect(() => {
147
+ return S.useEffect(() => () => p(), [p]), S.useEffect(() => {
148
148
  if (l && d) {
149
149
  let e = (e) => m(e, d), t = (e) => m(e, l);
150
150
  return l.addEventListener("pointerleave", e), d.addEventListener("pointerleave", t), () => {
@@ -156,7 +156,7 @@ var V = "TooltipContent", H = C.forwardRef((e, t) => {
156
156
  d,
157
157
  m,
158
158
  p
159
- ]), C.useEffect(() => {
159
+ ]), S.useEffect(() => {
160
160
  if (s) {
161
161
  let e = (e) => {
162
162
  let t = e.target, n = {
@@ -173,27 +173,27 @@ var V = "TooltipContent", H = C.forwardRef((e, t) => {
173
173
  s,
174
174
  u,
175
175
  p
176
- ]), /* @__PURE__ */ (0, w.jsx)(G, {
176
+ ]), /* @__PURE__ */ (0, C.jsx)(G, {
177
177
  ...e,
178
178
  ref: o
179
179
  });
180
- }), [ae, U] = T(M, { isInside: !1 }), W = t("TooltipContent"), G = C.forwardRef((e, t) => {
181
- let { __scopeTooltip: n, children: r, "aria-label": i, onEscapeKeyDown: a, onPointerDownOutside: o, ...s } = e, c = P(V, n), d = D(n), { onClose: f } = c;
182
- return C.useEffect(() => (document.addEventListener(k, f), () => document.removeEventListener(k, f)), [f]), C.useEffect(() => {
180
+ }), [ae, U] = w(j, { isInside: !1 }), W = t("TooltipContent"), G = S.forwardRef((e, t) => {
181
+ let { __scopeTooltip: n, children: r, "aria-label": i, onEscapeKeyDown: a, onPointerDownOutside: o, ...s } = e, c = N(V, n), d = E(n), { onClose: f } = c;
182
+ return S.useEffect(() => (document.addEventListener(O, f), () => document.removeEventListener(O, f)), [f]), S.useEffect(() => {
183
183
  if (c.trigger) {
184
184
  let e = (e) => {
185
185
  e.target?.contains(c.trigger) && f();
186
186
  };
187
187
  return window.addEventListener("scroll", e, { capture: !0 }), () => window.removeEventListener("scroll", e, { capture: !0 });
188
188
  }
189
- }, [c.trigger, f]), /* @__PURE__ */ (0, w.jsx)(_, {
189
+ }, [c.trigger, f]), /* @__PURE__ */ (0, C.jsx)(b, {
190
190
  asChild: !0,
191
191
  disableOutsidePointerEvents: !1,
192
192
  onEscapeKeyDown: a,
193
193
  onPointerDownOutside: o,
194
194
  onFocusOutside: (e) => e.preventDefault(),
195
195
  onDismiss: f,
196
- children: /* @__PURE__ */ (0, w.jsxs)(l, {
196
+ children: /* @__PURE__ */ (0, C.jsxs)(l, {
197
197
  "data-state": c.stateAttribute,
198
198
  ...d,
199
199
  ...s,
@@ -206,10 +206,10 @@ var V = "TooltipContent", H = C.forwardRef((e, t) => {
206
206
  "--radix-tooltip-trigger-width": "var(--radix-popper-anchor-width)",
207
207
  "--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
208
208
  },
209
- children: [/* @__PURE__ */ (0, w.jsx)(W, { children: r }), /* @__PURE__ */ (0, w.jsx)(ae, {
209
+ children: [/* @__PURE__ */ (0, C.jsx)(W, { children: r }), /* @__PURE__ */ (0, C.jsx)(ae, {
210
210
  scope: n,
211
211
  isInside: !0,
212
- children: /* @__PURE__ */ (0, w.jsx)(u, {
212
+ children: /* @__PURE__ */ (0, C.jsx)(u, {
213
213
  id: c.contentId,
214
214
  role: "tooltip",
215
215
  children: i || r
@@ -219,9 +219,9 @@ var V = "TooltipContent", H = C.forwardRef((e, t) => {
219
219
  });
220
220
  });
221
221
  H.displayName = V;
222
- var K = "TooltipArrow", q = C.forwardRef((e, t) => {
223
- let { __scopeTooltip: n, ...r } = e, i = D(n);
224
- return U(K, n).isInside ? null : /* @__PURE__ */ (0, w.jsx)(c, {
222
+ var K = "TooltipArrow", q = S.forwardRef((e, t) => {
223
+ let { __scopeTooltip: n, ...r } = e, i = E(n);
224
+ return U(K, n).isInside ? null : /* @__PURE__ */ (0, C.jsx)(c, {
225
225
  ...i,
226
226
  ...r,
227
227
  ref: t
@@ -336,21 +336,21 @@ function de(e) {
336
336
  }
337
337
  return n.pop(), t.length === 1 && n.length === 1 && t[0].x === n[0].x && t[0].y === n[0].y ? t : t.concat(n);
338
338
  }
339
- var fe = j, pe = F, me = L, he = B, J = H, Y = a(), ge = (e) => {
339
+ var fe = A, pe = P, me = I, he = B, J = H, Y = a(), ge = (e) => {
340
340
  let t = (0, Y.c)(6), n, r;
341
341
  t[0] === e ? (n = t[1], r = t[2]) : ({delayDuration: r, ...n} = e, t[0] = e, t[1] = n, t[2] = r);
342
342
  let i = r === void 0 ? 400 : r, a;
343
- return t[3] !== i || t[4] !== n ? (a = /* @__PURE__ */ (0, w.jsx)(fe, {
343
+ return t[3] !== i || t[4] !== n ? (a = /* @__PURE__ */ (0, C.jsx)(fe, {
344
344
  delayDuration: i,
345
345
  ...n
346
346
  }), t[3] = i, t[4] = n, t[5] = a) : a = t[5], a;
347
- }, X = h(he), Z = pe, _e = m(J), Q = me, $ = C.forwardRef((e, t) => {
347
+ }, X = m(he), Z = pe, _e = y(J), Q = me, $ = S.forwardRef((e, t) => {
348
348
  let r = (0, Y.c)(11), i, a, o;
349
349
  r[0] === e ? (i = r[1], a = r[2], o = r[3]) : ({className: i, sideOffset: o, ...a} = e, r[0] = e, r[1] = i, r[2] = a, r[3] = o);
350
350
  let s = o === void 0 ? 4 : o, c;
351
351
  r[4] === i ? c = r[5] : (c = n("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-xs data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1", i), r[4] = i, r[5] = c);
352
352
  let l;
353
- return r[6] !== a || r[7] !== t || r[8] !== s || r[9] !== c ? (l = /* @__PURE__ */ (0, w.jsx)(x, { children: /* @__PURE__ */ (0, w.jsx)(_e, {
353
+ return r[6] !== a || r[7] !== t || r[8] !== s || r[9] !== c ? (l = /* @__PURE__ */ (0, C.jsx)(p, { children: /* @__PURE__ */ (0, C.jsx)(_e, {
354
354
  ref: t,
355
355
  sideOffset: s,
356
356
  className: c,
@@ -364,23 +364,23 @@ var ve = (e) => {
364
364
  let u = s === void 0 || s, d = c === void 0 || c;
365
365
  if (i == null || i === "") return r;
366
366
  let f;
367
- t[9] !== d || t[10] !== r || t[11] !== l ? (f = /* @__PURE__ */ (0, w.jsx)(Q, {
367
+ t[9] !== d || t[10] !== r || t[11] !== l ? (f = /* @__PURE__ */ (0, C.jsx)(Q, {
368
368
  asChild: d,
369
369
  tabIndex: l,
370
370
  children: r
371
371
  }), t[9] = d, t[10] = r, t[11] = l, t[12] = f) : f = t[12];
372
372
  let p;
373
- t[13] !== n || t[14] !== i || t[15] !== o || t[16] !== u ? (p = u ? /* @__PURE__ */ (0, w.jsx)(X, { children: /* @__PURE__ */ (0, w.jsx)($, {
373
+ t[13] !== n || t[14] !== i || t[15] !== o || t[16] !== u ? (p = u ? /* @__PURE__ */ (0, C.jsx)(X, { children: /* @__PURE__ */ (0, C.jsx)($, {
374
374
  side: o,
375
375
  align: n,
376
376
  children: i
377
- }) }) : /* @__PURE__ */ (0, w.jsx)($, {
377
+ }) }) : /* @__PURE__ */ (0, C.jsx)($, {
378
378
  side: o,
379
379
  align: n,
380
380
  children: i
381
381
  }), t[13] = n, t[14] = i, t[15] = o, t[16] = u, t[17] = p) : p = t[17];
382
382
  let m;
383
- return t[18] !== a || t[19] !== f || t[20] !== p ? (m = /* @__PURE__ */ (0, w.jsxs)(Z, {
383
+ return t[18] !== a || t[19] !== f || t[20] !== p ? (m = /* @__PURE__ */ (0, C.jsxs)(Z, {
384
384
  disableHoverableContent: !0,
385
385
  ...a,
386
386
  children: [f, p]
@@ -1,7 +1,7 @@
1
1
  import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { t } from "./react-DMWcHin-.js";
3
3
  import { t as n } from "./compiler-runtime-CAH9RLw2.js";
4
- import { j as r } from "./useTheme-Bm9_FyqO.js";
4
+ import { j as r } from "./useTheme-CVJ0UOf2.js";
5
5
  import { t as i } from "./invariant-DLmrl-hA.js";
6
6
  //#region src/hooks/useAsyncData.ts
7
7
  var a = n(), o = /* @__PURE__ */ e(t(), 1), s = {
@@ -1,7 +1,7 @@
1
1
  import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { t } from "./react-DMWcHin-.js";
3
- import { u as n } from "./dist-mymH-A_x.js";
4
- import { E as r } from "./select-DotAQ4jp.js";
3
+ import { u as n } from "./dist-3_o3T78I.js";
4
+ import { E as r } from "./select-3qHpFKF9.js";
5
5
  var i = n("chart-pie", [["path", {
6
6
  d: "M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",
7
7
  key: "pzmjnu"
@@ -1,6 +1,6 @@
1
1
  import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { t } from "./react-DMWcHin-.js";
3
- import { A as n } from "./useTheme-Bm9_FyqO.js";
3
+ import { A as n } from "./useTheme-CVJ0UOf2.js";
4
4
  //#region src/hooks/useDeepCompareMemoize.ts
5
5
  var r = /* @__PURE__ */ e(t(), 1);
6
6
  function i(e) {
@@ -2,9 +2,9 @@ import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { g as t, h as n, r } from "./button-CKBkqR9J.js";
3
3
  import { t as i } from "./react-DMWcHin-.js";
4
4
  import { t as a } from "./compiler-runtime-CAH9RLw2.js";
5
- import { u as o } from "./dist-mymH-A_x.js";
5
+ import { u as o } from "./dist-3_o3T78I.js";
6
6
  import { t as s } from "./jsx-runtime-CpoKNRgu.js";
7
- import { E as c, w as l } from "./useTheme-Bm9_FyqO.js";
7
+ import { E as c, w as l } from "./useTheme-CVJ0UOf2.js";
8
8
  var u = o("calendar", [
9
9
  ["path", {
10
10
  d: "M8 2v4",
@@ -2,7 +2,7 @@ import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { a as t, g as n, s as r } from "./button-CKBkqR9J.js";
3
3
  import { t as i } from "./react-DMWcHin-.js";
4
4
  import { t as a } from "./compiler-runtime-CAH9RLw2.js";
5
- import { Cn as o, In as s, Jn as c, Sn as l, Tt as u, jn as d, kt as f, un as p, vt as m } from "./schemas-BjeOpZLk.js";
5
+ import { Cn as o, In as s, Jn as c, Sn as l, Tt as u, jn as d, kt as f, un as p, vt as m } from "./schemas-DzK6U94N.js";
6
6
  import { n as h, t as g } from "./_baseMerge-Dv8bBloN.js";
7
7
  //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/mergeWith.js
8
8
  var _ = h(function(e, t, n, r) {
@@ -618,6 +618,7 @@ var Ie = [
618
618
  inline_tooltip: f().prefault(!1),
619
619
  allow_provider_config: f().prefault(!0),
620
620
  open_ai: q.optional(),
621
+ github: q.optional(),
621
622
  anthropic: q.optional(),
622
623
  google: q.optional(),
623
624
  ollama: q.optional(),
@@ -2,20 +2,20 @@ import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { g as t, h as n, m as r, o as i } from "./button-CKBkqR9J.js";
3
3
  import { t as a } from "./react-DMWcHin-.js";
4
4
  import { t as o } from "./compiler-runtime-CAH9RLw2.js";
5
- import { c as s, v as c } from "./toDate-CrAIOASL.js";
5
+ import { c as s, v as c } from "./toDate-D-Rx3ux5.js";
6
6
  import { t as l } from "./jsx-runtime-CpoKNRgu.js";
7
- import { n as u } from "./error-banner-DmgOcFS3.js";
8
- import { t as d } from "./tooltip-COXZxyl7.js";
7
+ import { n as u } from "./error-banner-WDhUzJyg.js";
8
+ import { t as d } from "./tooltip-Dt77sBeT.js";
9
9
  import { t as f } from "./debounce-C3jyATpc.js";
10
- import { j as p, n as ee } from "./useTheme-Bm9_FyqO.js";
10
+ import { j as p, n as ee } from "./useTheme-CVJ0UOf2.js";
11
11
  import { c as m } from "./arrays-CN1djC4k.js";
12
12
  import { t as te } from "./objects-CzUgoMIF.js";
13
- import { t as h } from "./useAsyncData-x0_tWDWI.js";
14
- import { a as ne, i as re, n as ie, t as g } from "./formats-DuRRWVwb.js";
13
+ import { t as h } from "./useAsyncData-CH6-CgJF.js";
14
+ import { a as ne, i as re, n as ie, t as g } from "./formats-CJMVUfb3.js";
15
15
  import { A as ae, n as oe } from "./vega-loader.browser-DEggZzni.js";
16
16
  import { t as se } from "./react-vega-DSD5aT7_.js";
17
17
  import { a as ce, n as _ } from "./loader-VZ__bv4g.js";
18
- import { t as le } from "./useDeepCompareMemoize-KaRHJEEU.js";
18
+ import { t as le } from "./useDeepCompareMemoize-JC87C_jO.js";
19
19
  import { t as ue } from "./semaphore-89jsoHtS.js";
20
20
  import { t as de } from "./use-vega-container-remeasure-DUW4tRxq.js";
21
21
  //#region src/plugins/impl/vega/fix-relative-url.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/islands",
3
- "version": "0.24.1-dev115",
3
+ "version": "0.24.1-dev119",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -5,8 +5,8 @@ import BedrockIcon from "@marimo-team/llm-info/icons/aws.svg?inline";
5
5
  import AzureIcon from "@marimo-team/llm-info/icons/azure.svg?inline";
6
6
  import CursorIcon from "@marimo-team/llm-info/icons/cursor.svg?inline";
7
7
  import DeepseekIcon from "@marimo-team/llm-info/icons/deepseek.svg?inline";
8
- import GitHubIcon from "@marimo-team/llm-info/icons/github.svg?inline";
9
8
  import GeminiIcon from "@marimo-team/llm-info/icons/googlegemini.svg?inline";
9
+ import GitHubIcon from "@marimo-team/llm-info/icons/github.svg?inline";
10
10
  import OllamaIcon from "@marimo-team/llm-info/icons/ollama.svg?inline";
11
11
  import OpenAIIcon from "@marimo-team/llm-info/icons/openai.svg?inline";
12
12
  import OpencodeIcon from "@marimo-team/llm-info/icons/opencode-logo-light.svg?inline";
@@ -21,6 +21,7 @@ import type { ExternalAgentId } from "../chat/acp/state";
21
21
 
22
22
  const icons: Record<ProviderId | ExternalAgentId, string> = {
23
23
  openai: OpenAIIcon,
24
+ github: GitHubIcon,
24
25
  anthropic: AnthropicIcon,
25
26
  claude: AnthropicIcon,
26
27
  gemini: GeminiIcon,
@@ -30,7 +31,6 @@ const icons: Record<ProviderId | ExternalAgentId, string> = {
30
31
  azure: AzureIcon,
31
32
  bedrock: BedrockIcon,
32
33
  deepseek: DeepseekIcon,
33
- github: GitHubIcon,
34
34
  openrouter: OpenRouterIcon,
35
35
  wandb: WandbIcon,
36
36
  "opencode-go": OpencodeIcon,
@@ -15,9 +15,9 @@ type CredentialChecker = (ai: AiConfig | undefined) => boolean;
15
15
  */
16
16
  const CREDENTIAL_CHECKERS: Record<KnownProviderId, CredentialChecker> = {
17
17
  openai: (ai) => Boolean(ai?.open_ai?.api_key),
18
+ github: (ai) => Boolean(ai?.github?.api_key),
18
19
  anthropic: (ai) => Boolean(ai?.anthropic?.api_key),
19
20
  google: (ai) => Boolean(ai?.google?.api_key),
20
- github: (ai) => Boolean(ai?.github?.api_key),
21
21
  openrouter: (ai) => Boolean(ai?.openrouter?.api_key),
22
22
  azure: (ai) => Boolean(ai?.azure?.api_key && ai?.azure?.base_url),
23
23
  wandb: (ai) => Boolean(ai?.wandb?.api_key),
@@ -65,7 +65,6 @@ import {
65
65
  AccordionItem,
66
66
  AccordionTrigger,
67
67
  } from "../ui/accordion";
68
- import { Alert, AlertDescription } from "../ui/alert";
69
68
  import { Button } from "../ui/button";
70
69
  import { Checkbox } from "../ui/checkbox";
71
70
  import { DropdownMenuSeparator } from "../ui/dropdown-menu";
@@ -969,6 +968,39 @@ export const AiProvidersConfig: React.FC<AiConfigProps> = ({
969
968
  />
970
969
  </AccordionFormItem>
971
970
 
971
+ <AccordionFormItem
972
+ title="GitHub Copilot"
973
+ provider="github"
974
+ isConfigured={hasValue("ai.github.api_key")}
975
+ >
976
+ <ApiKey
977
+ form={form}
978
+ config={config}
979
+ name="ai.github.api_key"
980
+ placeholder="gho_..."
981
+ testId="ai-github-copilot-api-key-input"
982
+ description={
983
+ <>
984
+ Your GitHub OAuth token. Run{" "}
985
+ <Kbd className="inline">gh auth token</Kbd> after you sign in
986
+ with the GitHub CLI. A GitHub Copilot subscription is required.
987
+ See the{" "}
988
+ <ExternalLink href="https://pydantic.dev/docs/ai/models/github-copilot/">
989
+ authentication guide
990
+ </ExternalLink>
991
+ .
992
+ </>
993
+ }
994
+ />
995
+ <BaseUrl
996
+ form={form}
997
+ config={config}
998
+ name="ai.github.base_url"
999
+ placeholder="https://api.githubcopilot.com"
1000
+ testId="ai-github-copilot-base-url-input"
1001
+ />
1002
+ </AccordionFormItem>
1003
+
972
1004
  <AccordionFormItem
973
1005
  title="Anthropic"
974
1006
  provider="anthropic"
@@ -1029,42 +1061,6 @@ export const AiProvidersConfig: React.FC<AiConfigProps> = ({
1029
1061
  />
1030
1062
  </AccordionFormItem>
1031
1063
 
1032
- <AccordionFormItem
1033
- title="GitHub"
1034
- provider="github"
1035
- isConfigured={hasValue("ai.github.api_key")}
1036
- >
1037
- <Alert variant="warning" className="py-1.5 px-3 text-xs">
1038
- <AlertDescription>
1039
- Free tier models have low token limits which can cause errors with
1040
- larger prompts.{" "}
1041
- <ExternalLink href="https://docs.github.com/en/github-models/prototyping-with-ai-models#rate-limits">
1042
- Learn more
1043
- </ExternalLink>
1044
- </AlertDescription>
1045
- </Alert>
1046
- <ApiKey
1047
- form={form}
1048
- config={config}
1049
- name="ai.github.api_key"
1050
- placeholder="gho_..."
1051
- testId="ai-github-api-key-input"
1052
- description={
1053
- <>
1054
- Your GitHub API token from{" "}
1055
- <Kbd className="inline">gh auth token</Kbd>.
1056
- </>
1057
- }
1058
- />
1059
- <BaseUrl
1060
- form={form}
1061
- config={config}
1062
- name="ai.github.base_url"
1063
- placeholder="https://models.github.ai/inference"
1064
- testId="ai-github-base-url-input"
1065
- />
1066
- </AccordionFormItem>
1067
-
1068
1064
  <AccordionFormItem
1069
1065
  title="OpenRouter"
1070
1066
  provider="openrouter"
@@ -1304,7 +1304,7 @@ export const UserConfigForm: React.FC = () => {
1304
1304
  <IsOverridden override={override} />
1305
1305
  <FormDescription>
1306
1306
  Enable experimental external agents such as Claude Code and
1307
- Gemini CLI. Learn more in the{" "}
1307
+ Codex. Learn more in the{" "}
1308
1308
  <ExternalLink href="https://docs.marimo.io/guides/editor_features/agents/">
1309
1309
  docs
1310
1310
  </ExternalLink>
@@ -71,11 +71,7 @@ export function renderTableHeader<TData>(
71
71
  {renderHeaderGroup(table.getCenterHeaderGroups())}
72
72
  {renderHeaderGroup(table.getRightHeaderGroups())}
73
73
  {table.getAllColumns().length <= AUTO_WIDTH_MAX_COLUMNS && (
74
- <th
75
- className="w-full border-0"
76
- aria-hidden="true"
77
- role="presentation"
78
- />
74
+ <th className="w-full border-0" aria-hidden="true" />
79
75
  )}
80
76
  </TableRow>
81
77
  </TableHeader>
@@ -217,7 +213,7 @@ export const DataTableBody = <TData,>({
217
213
  {renderCells(row.getCenterVisibleCells())}
218
214
  {renderCells(row.getRightVisibleCells())}
219
215
  {columns.length <= AUTO_WIDTH_MAX_COLUMNS && (
220
- <td className="border-0" aria-hidden="true" role="presentation" />
216
+ <td className="border-0" aria-hidden="true" />
221
217
  )}
222
218
  </TableRow>
223
219
  );