@marimo-team/islands 0.23.10-dev9 → 0.23.11-dev67

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 (188) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CyV83R2m.js → ConnectedDataExplorerComponent-Z3RP7Vmm.js} +31 -31
  2. package/dist/{ErrorBoundary-rULOrC_p.js → ErrorBoundary-DpbaKVv7.js} +1 -1
  3. package/dist/{any-language-editor-CiES2a2h.js → any-language-editor-CAgFD4Kd.js} +20 -20
  4. package/dist/assets/__vite-browser-external-eshhtsgZ.js +1 -0
  5. package/dist/assets/worker-CC0Oul9k.js +73 -0
  6. package/dist/{chat-ui-K84W5ecY.js → chat-ui-C4-GMW9y.js} +77 -77
  7. package/dist/{check-DTbrK0zt.js → check-BCaJeT-J.js} +1 -1
  8. package/dist/{chunk-5FQGJX7Z-BNjes6Yx.js → chunk-5FQGJX7Z-BbqSm5gU.js} +1227 -1222
  9. package/dist/{code-block-37QAKDTI-m92Yc8pv.js → code-block-37QAKDTI-O6IH6wAi.js} +1 -1
  10. package/dist/{code-visibility-v6ucEVUg.js → code-visibility-UH2371Sv.js} +1943 -1223
  11. package/dist/{copy-5jQ_kGE1.js → copy-UqRYxiOg.js} +1 -1
  12. package/dist/dist-7QfXoMdB.js +5 -0
  13. package/dist/{dist-DgnE8F-r.js → dist-A2846XWO.js} +1 -1
  14. package/dist/dist-BEXXyZig.js +5 -0
  15. package/dist/{dist-B3pZ0Ab6.js → dist-BR_gyG9L.js} +3 -3
  16. package/dist/{dist-CcXxepx6.js → dist-BSAt6RhH.js} +27 -27
  17. package/dist/{dist-Bde4a2kU.js → dist-BY018Paw.js} +8 -8
  18. package/dist/dist-BYj57OV4.js +5 -0
  19. package/dist/{dist-CUCNs1ja.js → dist-BaoDKvdy.js} +2 -2
  20. package/dist/{dist-Cy1WxgBD.js → dist-Bf7SHuNp.js} +5 -5
  21. package/dist/{dist-Bz_sYWbr.js → dist-Bk75fBZA.js} +2 -2
  22. package/dist/dist-BlSvQzNr.js +5 -0
  23. package/dist/{dist-C5VC_yzu.js → dist-BzEzfugY.js} +1 -1
  24. package/dist/dist-CCBlxAgS.js +8 -0
  25. package/dist/dist-CIDTVIUf.js +5 -0
  26. package/dist/{dist-CLUtPrdy.js → dist-CIYBwstr.js} +1 -1
  27. package/dist/{dist-BotSqB48.js → dist-C_Y3oV3C.js} +12 -12
  28. package/dist/{dist-BTfv03uy.js → dist-CcWX6tmx.js} +2 -2
  29. package/dist/{dist-BhM8gdSO.js → dist-CoXAujgg.js} +4 -4
  30. package/dist/{dist-4j4c7bjm.js → dist-CpxNdDkw.js} +3 -3
  31. package/dist/dist-CqQyhAM8.js +8 -0
  32. package/dist/dist-CwRu2Xzh.js +5 -0
  33. package/dist/{dist-BcuoonNH.js → dist-CxJDU6Bh.js} +9 -9
  34. package/dist/{dist-DxvORzUR.js → dist-D-W5ny5a.js} +8 -8
  35. package/dist/dist-D8CDTVgf.js +6 -0
  36. package/dist/dist-D8DNB0nO.js +8 -0
  37. package/dist/dist-DL6N_q-A.js +5 -0
  38. package/dist/{dist-BbbIBDiQ.js → dist-DMjWuVs8.js} +1 -1
  39. package/dist/dist-DOFbNV_b.js +8 -0
  40. package/dist/dist-DPrYzMY0.js +6 -0
  41. package/dist/{dist-h2c8sZvT.js → dist-DZORgqKY.js} +1 -1
  42. package/dist/{dist-B3P2fFpz.js → dist-DZo4nSS0.js} +14 -14
  43. package/dist/{dist-D4CewLk6.js → dist-Dax--nl9.js} +1 -1
  44. package/dist/{dist-DRfcqpxJ.js → dist-DgGbNavJ.js} +2 -2
  45. package/dist/{dist-C1BYNeCR.js → dist-Dk6PV_d3.js} +10 -10
  46. package/dist/{dist-fQ0ViXGs.js → dist-Dv_Y15yk.js} +107 -107
  47. package/dist/{dist-Bfwsv11D.js → dist-DyyjKEYf.js} +2 -2
  48. package/dist/{dist-p2qyWijU.js → dist-GZXUmt0b.js} +2 -2
  49. package/dist/{dist-CLJWPTX2.js → dist-LTU8Hdvn.js} +3 -3
  50. package/dist/{dist-DqAWR3CS.js → dist-M9Vag9Y0.js} +20 -20
  51. package/dist/{dist-DNdhYsgW.js → dist-U4F-tbMs.js} +79 -62
  52. package/dist/{dist-RqXTaiir.js → dist-abid3KgM.js} +11 -11
  53. package/dist/dist-cdmMjgsn.js +5 -0
  54. package/dist/dist-hT4QzYX-.js +1247 -0
  55. package/dist/{dist-luvabDEB.js → dist-t9Kf7xqC.js} +2 -2
  56. package/dist/{error-banner-5bz0L9hS.js → error-banner-CJXYJ6Sb.js} +11 -6
  57. package/dist/esm-BaH2eg5-.js +1171 -0
  58. package/dist/{esm-Duie8iU-.js → esm-ga2Bf3O2.js} +43 -43
  59. package/dist/{extends-CkydH1Q5.js → extends-D_hDsj6R.js} +4 -4
  60. package/dist/files/wasm-intro.py +11 -8
  61. package/dist/{formats-DHxc-FdY.js → formats-C4wO47tk.js} +1 -1
  62. package/dist/{glide-data-editor-CgIxTzAP.js → glide-data-editor-BPkCPs7L.js} +255 -255
  63. package/dist/{html-to-image-B93KtAVY.js → html-to-image-BwfcJJxA.js} +2412 -2282
  64. package/dist/{input-_2sjvfne.js → input-OdWHkobi.js} +263 -245
  65. package/dist/{label-LWtdw5i8.js → label-CC4ytI1X.js} +1 -1
  66. package/dist/main.js +7630 -7558
  67. package/dist/{mermaid-4DMBBIKO-DIdL224_.js → mermaid-4DMBBIKO-Eg3D4FVz.js} +1 -1
  68. package/dist/{mermaid-lXOw5Py9.js → mermaid-BotvIKg9.js} +4 -4
  69. package/dist/{process-output-BOXi9fnS.js → process-output-DsloEDna.js} +3 -3
  70. package/dist/{reveal-component-gRcjQbNL.js → reveal-component-BNU1V1x5.js} +698 -620
  71. package/dist/{spec-B96zNUEA.js → spec-X7FwLJni.js} +4 -4
  72. package/dist/{strings-Bu3vlb6W.js → strings-J57tzLr3.js} +47 -46
  73. package/dist/style.css +1 -1
  74. package/dist/{toDate-x-WRDCH7.js → toDate-d8RCRrRd.js} +2 -2
  75. package/dist/{tooltip-C5FYOpQc.js → tooltip-DpcyNkQ2.js} +2 -2
  76. package/dist/{types-CVvp1fKr.js → types-ChtMFmZ2.js} +1 -1
  77. package/dist/{useAsyncData-iRgKDT5s.js → useAsyncData-PonK__yh.js} +1 -1
  78. package/dist/{useDateFormatter-BA4FCquG.js → useDateFormatter-QB-3MpYr.js} +2 -2
  79. package/dist/{useDeepCompareMemoize-CkQ57VS2.js → useDeepCompareMemoize-D3NGWke6.js} +1 -1
  80. package/dist/{useLifecycle-BBO9PIph.js → useLifecycle-00mO3OSS.js} +2 -2
  81. package/dist/{useTheme-DHIrRQOe.js → useTheme-DEhDzATN.js} +1 -1
  82. package/dist/{vega-component-Dq-SH463.js → vega-component-DGPUhbDs.js} +8 -8
  83. package/dist/{zod-CoBiJ5v4.js → zod-aLSua2NL.js} +24 -23
  84. package/package.json +4 -3
  85. package/src/__tests__/setup.ts +16 -0
  86. package/src/components/chat/chat-display.tsx +2 -2
  87. package/src/components/data-table/TableBottomBar.tsx +1 -15
  88. package/src/components/data-table/TableTopBar.tsx +8 -13
  89. package/src/components/data-table/__tests__/TableBottomBar.test.tsx +6 -12
  90. package/src/components/data-table/__tests__/column-visibility-dropdown.test.tsx +227 -0
  91. package/src/components/data-table/column-visibility-dropdown.tsx +204 -0
  92. package/src/components/data-table/data-table.tsx +1 -1
  93. package/src/components/data-table/filter-by-values-picker.tsx +39 -17
  94. package/src/components/data-table/filter-pills.tsx +1 -1
  95. package/src/components/datasources/__tests__/filter-empty.test.ts +183 -0
  96. package/src/components/datasources/datasources.tsx +92 -3
  97. package/src/components/editor/cell/code/cell-editor.tsx +70 -32
  98. package/src/components/editor/cell/code/code-placeholder.css +18 -0
  99. package/src/components/editor/cell/code/code-placeholder.tsx +47 -0
  100. package/src/components/editor/cell/code/language-toggle.tsx +7 -1
  101. package/src/components/editor/chrome/wrapper/app-chrome.tsx +97 -52
  102. package/src/components/editor/chrome/wrapper/lazy-panels.ts +91 -0
  103. package/src/components/editor/chrome/wrapper/sidebar.tsx +2 -0
  104. package/src/components/editor/connections/storage/__tests__/__snapshots__/as-code.test.ts.snap +9 -2
  105. package/src/components/editor/connections/storage/__tests__/as-code.test.ts +62 -27
  106. package/src/components/editor/connections/storage/add-storage-form.tsx +5 -1
  107. package/src/components/editor/connections/storage/as-code.ts +20 -6
  108. package/src/components/editor/documentation.css +35 -0
  109. package/src/components/editor/file-tree/file-explorer.tsx +8 -18
  110. package/src/components/editor/file-tree/tree-actions.tsx +46 -1
  111. package/src/components/editor/notebook-cell.tsx +3 -3
  112. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +20 -0
  113. package/src/components/editor/renderers/slides-layout/types.ts +1 -0
  114. package/src/components/markdown/__tests__/markdown-renderer.test.tsx +43 -0
  115. package/src/components/markdown/markdown-renderer.tsx +24 -1
  116. package/src/components/slides/__tests__/minimap-actions.test.tsx +166 -0
  117. package/src/components/slides/__tests__/reveal-component.test.ts +425 -0
  118. package/src/components/slides/minimap.tsx +127 -10
  119. package/src/components/slides/reveal-component.tsx +287 -61
  120. package/src/components/slides/slide-cell-view.tsx +26 -2
  121. package/src/components/slides/slide-form.tsx +26 -4
  122. package/src/components/storage/__tests__/storage-inspector.test.ts +180 -0
  123. package/src/components/storage/storage-inspector.tsx +535 -81
  124. package/src/components/ui/combobox.tsx +51 -32
  125. package/src/components/ui/number-field.tsx +5 -1
  126. package/src/components/ui/reorderable-list.tsx +13 -0
  127. package/src/components/ui/select-core/__tests__/use-select-list.test.ts +294 -0
  128. package/src/components/ui/select-core/__tests__/utils.test.ts +222 -0
  129. package/src/components/ui/select-core/index.ts +16 -0
  130. package/src/components/ui/select-core/option-row.tsx +33 -0
  131. package/src/components/ui/select-core/render-slot.ts +20 -0
  132. package/src/components/ui/select-core/select-list.tsx +248 -0
  133. package/src/components/ui/select-core/types.ts +44 -0
  134. package/src/components/ui/select-core/use-select-list.ts +347 -0
  135. package/src/components/ui/select-core/utils.ts +121 -0
  136. package/src/components/ui/toast.tsx +1 -0
  137. package/src/core/cells/__tests__/document-changes.test.ts +2 -2
  138. package/src/core/cells/__tests__/focus.test.ts +45 -2
  139. package/src/core/cells/focus.ts +1 -1
  140. package/src/core/cells/scrollCellIntoView.ts +4 -0
  141. package/src/core/cells/utils.ts +1 -1
  142. package/src/core/codemirror/__tests__/editor-mount-scheduler.test.ts +143 -0
  143. package/src/core/codemirror/copilot/getCodes.ts +3 -1
  144. package/src/core/codemirror/editor-mount-scheduler.ts +101 -0
  145. package/src/core/codemirror/language/languages/python.ts +2 -0
  146. package/src/core/codemirror/language/languages/sql/utils.ts +3 -1
  147. package/src/core/codemirror/lsp/__tests__/markdown-renderer.test.ts +41 -0
  148. package/src/core/codemirror/lsp/markdown-renderer.ts +59 -0
  149. package/src/core/datasets/data-source-connections.ts +2 -0
  150. package/src/core/errors/errors.ts +1 -1
  151. package/src/core/storage/__tests__/state.test.ts +49 -0
  152. package/src/core/storage/__tests__/useStorageEntries.test.tsx +199 -3
  153. package/src/core/storage/state.ts +124 -13
  154. package/src/core/storage/types.ts +6 -0
  155. package/src/core/wasm/worker/bootstrap.ts +12 -4
  156. package/src/plugins/core/__test__/registerReactComponent.test.ts +96 -0
  157. package/src/plugins/core/registerReactComponent.tsx +42 -10
  158. package/src/plugins/impl/MultiselectPlugin.tsx +19 -142
  159. package/src/plugins/impl/SearchableSelect.tsx +16 -97
  160. package/src/plugins/impl/SliderPlugin.tsx +132 -18
  161. package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +5 -2
  162. package/src/plugins/impl/__tests__/MultiSelectPlugin.test.ts +1 -1
  163. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +278 -8
  164. package/src/utils/__tests__/numbers.test.ts +20 -0
  165. package/src/utils/errors.ts +9 -0
  166. package/src/utils/lazy.ts +6 -1
  167. package/src/utils/numbers.ts +27 -0
  168. package/src/utils/schedule-task.ts +71 -0
  169. package/dist/assets/__vite-browser-external-Ci2ZQfXU.js +0 -1
  170. package/dist/assets/worker-ip3AI_sN.js +0 -73
  171. package/dist/dist-0Fif7jnk.js +0 -5
  172. package/dist/dist-B5h_9sHB.js +0 -6
  173. package/dist/dist-B9M6R5ye.js +0 -5
  174. package/dist/dist-BCt3tnck.js +0 -8
  175. package/dist/dist-BUIJwMwn.js +0 -8
  176. package/dist/dist-BpquMd3k.js +0 -5
  177. package/dist/dist-BzJsqYfz.js +0 -5
  178. package/dist/dist-CA5ELXAf.js +0 -6
  179. package/dist/dist-CLBRs6Uv.js +0 -5
  180. package/dist/dist-CStVCMbq.js +0 -5
  181. package/dist/dist-CZRIEY3Y.js +0 -8
  182. package/dist/dist-CuUHbFD0.js +0 -5
  183. package/dist/dist-DV7Iabxb.js +0 -8
  184. package/dist/dist-DhHh0jLg.js +0 -1247
  185. package/dist/dist-DuEeHMvL.js +0 -5
  186. package/dist/esm-CCuYCd3R.js +0 -1171
  187. package/src/plugins/impl/multiselectFilterFn.tsx +0 -22
  188. /package/src/components/{data-table → ui}/value-chips.tsx +0 -0
@@ -4,9 +4,9 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
4
4
  import { t as __commonJSMin } from "./chunk-BNovOVIE.js";
5
5
  import { _ as Logger } from "./button-C5K9fIPF.js";
6
6
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
7
- import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
7
+ import { u as createLucideIcon } from "./dist-Dk6PV_d3.js";
8
8
  import { r as KnownQueryParams } from "./constants-T20xxyNf.js";
9
- import { b as atom, d as store, m as isIslands, p as waitFor } from "./useTheme-DHIrRQOe.js";
9
+ import { b as atom, d as store, m as isIslands, p as waitFor } from "./useTheme-DEhDzATN.js";
10
10
  import { t as invariant } from "./invariant-wRzNXIsJ.js";
11
11
  var CircleQuestionMark = createLucideIcon("circle-question-mark", [
12
12
  ["circle", {
@@ -2,9 +2,9 @@ import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { f as createSlottable, g as cn, m as useComposedRefs } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { a as createPopperScope, i as Root2, n as Arrow, r as Content, s as Root, t as Anchor } from "./dist-C1BYNeCR.js";
5
+ import { a as createPopperScope, i as Root2, n as Arrow, r as Content, s as Root, t as Anchor } from "./dist-Dk6PV_d3.js";
6
6
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
7
- import { $ as StyleNamespace, X as withFullScreenAsRoot, Z as withSmartCollisionBoundary, _t as Primitive, dt as Presence, ft as useControllableState, gt as createContextScope, it as Portal, mt as composeEventHandlers, st as DismissableLayer, ut as useId } from "./zod-CoBiJ5v4.js";
7
+ import { Q as withSmartCollisionBoundary, Z as withFullScreenAsRoot, _t as createContextScope, at as Portal, ct as DismissableLayer, dt as useId, et as StyleNamespace, ft as Presence, ht as composeEventHandlers, pt as useControllableState, vt as Primitive } from "./zod-aLSua2NL.js";
8
8
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1), import_jsx_runtime = /* @__PURE__ */ __toESM(require_jsx_runtime(), 1), [createTooltipContext, createTooltipScope] = createContextScope("Tooltip", [createPopperScope]), usePopperScope = createPopperScope(), PROVIDER_NAME = "TooltipProvider", DEFAULT_DELAY_DURATION = 700, TOOLTIP_OPEN = "tooltip.open", [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME), TooltipProvider$1 = (n) => {
9
9
  let { __scopeTooltip: j, delayDuration: M = DEFAULT_DELAY_DURATION, skipDelayDuration: N = 300, disableHoverableContent: P = false, children: F } = n, I = import_react.useRef(true), L = import_react.useRef(false), R = import_react.useRef(0);
10
10
  return import_react.useEffect(() => {
@@ -1,4 +1,4 @@
1
- import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
1
+ import { u as createLucideIcon } from "./dist-Dk6PV_d3.js";
2
2
  var Pencil = createLucideIcon("pencil", [["path", {
3
3
  d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",
4
4
  key: "1a8usu"
@@ -1,7 +1,7 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
3
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
4
- import { T as useEvent_default } from "./useTheme-DHIrRQOe.js";
4
+ import { T as useEvent_default } from "./useTheme-DEhDzATN.js";
5
5
  import { t as invariant } from "./invariant-wRzNXIsJ.js";
6
6
  var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1), Result = {
7
7
  error(e, s) {
@@ -1,7 +1,7 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
- import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
4
- import { T as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 } from "./strings-Bu3vlb6W.js";
3
+ import { u as createLucideIcon } from "./dist-Dk6PV_d3.js";
4
+ import { E as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 } from "./strings-J57tzLr3.js";
5
5
  var ChartPie = createLucideIcon("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 { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
- import { w as dequal } from "./useTheme-DHIrRQOe.js";
3
+ import { w as dequal } from "./useTheme-DEhDzATN.js";
4
4
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
5
5
  function useDeepCompareMemoize(e) {
6
6
  let i = import_react.useRef(e);
@@ -2,9 +2,9 @@ import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { _ as Logger, g as cn, r as cva } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
5
+ import { u as createLucideIcon } from "./dist-Dk6PV_d3.js";
6
6
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
7
- import { b as atom, v as useSetAtom } from "./useTheme-DHIrRQOe.js";
7
+ import { b as atom, v as useSetAtom } from "./useTheme-DEhDzATN.js";
8
8
  var Calendar = createLucideIcon("calendar", [
9
9
  ["path", {
10
10
  d: "M8 2v4",
@@ -2,7 +2,7 @@ import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { _ as Logger, a as OverridingHotkeyProvider, s as resolvePlatform } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { A as looseObject, B as union, I as record, N as number, P as object, R as string, T as boolean, b as _enum, w as array } from "./zod-CoBiJ5v4.js";
5
+ import { A as looseObject, B as union, I as record, N as number, P as object, R as string, T as boolean, b as _enum, w as array } from "./zod-aLSua2NL.js";
6
6
  import { t as merge_default } from "./merge-Be1CqGnU.js";
7
7
  var import_react = /* @__PURE__ */ __toESM(require_react()), useInsertionEffect = typeof window < "u" ? import_react.useInsertionEffect || import_react.useLayoutEffect : () => {
8
8
  };
@@ -2,23 +2,23 @@ import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { _ as Logger, c as Objects, g as cn, h as Events } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { c as asRemoteURL, v as CircleQuestionMark } from "./toDate-x-WRDCH7.js";
5
+ import { c as asRemoteURL, v as CircleQuestionMark } from "./toDate-d8RCRrRd.js";
6
6
  import "./react-dom-BTJzcVJ9.js";
7
7
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
8
- import "./zod-CoBiJ5v4.js";
9
- import { n as ErrorBanner } from "./error-banner-5bz0L9hS.js";
10
- import { t as Tooltip } from "./tooltip-C5FYOpQc.js";
8
+ import "./zod-aLSua2NL.js";
9
+ import { n as ErrorBanner } from "./error-banner-CJXYJ6Sb.js";
10
+ import { t as Tooltip } from "./tooltip-DpcyNkQ2.js";
11
11
  import { i as debounce_default } from "./constants-T20xxyNf.js";
12
- import { T as useEvent_default, n as useTheme } from "./useTheme-DHIrRQOe.js";
12
+ import { T as useEvent_default, n as useTheme } from "./useTheme-DEhDzATN.js";
13
13
  import { s as uniq } from "./arrays-sEtDRoG4.js";
14
- import { a as isValid, i as AlertTitle, n as Alert, t as arrow } from "./formats-DHxc-FdY.js";
14
+ import { a as isValid, i as AlertTitle, n as Alert, t as arrow } from "./formats-C4wO47tk.js";
15
15
  import { n as formats } from "./vega-loader.browser-CZ-J8Py3.js";
16
16
  import { a as getContainerWidth, n as vegaLoadData, s as tooltipHandler } from "./loader-BWLPpjKK.js";
17
17
  import { t as j } from "./react-vega-B0sAlDTL.js";
18
18
  import "./defaultLocale-u-3osm0P.js";
19
19
  import "./defaultLocale-BoHTsDG6.js";
20
- import { t as useAsyncData } from "./useAsyncData-iRgKDT5s.js";
21
- import { t as useDeepCompareMemoize } from "./useDeepCompareMemoize-CkQ57VS2.js";
20
+ import { t as useAsyncData } from "./useAsyncData-PonK__yh.js";
21
+ import { t as useDeepCompareMemoize } from "./useDeepCompareMemoize-D3NGWke6.js";
22
22
  import { t as Semaphore } from "./semaphore-CNDGTzkX.js";
23
23
  var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1);
24
24
  function fixRelativeUrl(e) {
@@ -11758,7 +11758,7 @@ var external_exports = /* @__PURE__ */ __export({
11758
11758
  config(en_default());
11759
11759
  var zod_default = external_exports;
11760
11760
  export {
11761
- StyleNamespace as $,
11761
+ isInVscodeExtension as $,
11762
11762
  looseObject as A,
11763
11763
  union as B,
11764
11764
  any as C,
@@ -11775,59 +11775,60 @@ export {
11775
11775
  number$1 as N,
11776
11776
  lazy as O,
11777
11777
  object as P,
11778
- isInVscodeExtension as Q,
11778
+ withSmartCollisionBoundary as Q,
11779
11779
  string$1 as R,
11780
11780
  _null as S,
11781
11781
  boolean$1 as T,
11782
11782
  ZodError as U,
11783
11783
  unknown as V,
11784
11784
  toJSONSchema as W,
11785
- withFullScreenAsRoot as X,
11785
+ useFullScreenElement as X,
11786
11786
  MAX_HEIGHT_OFFSET as Y,
11787
- withSmartCollisionBoundary as Z,
11787
+ withFullScreenAsRoot as Z,
11788
11788
  ZodString as _,
11789
- Primitive as _t,
11789
+ createContextScope as _t,
11790
11790
  ZodIssueCode as a,
11791
- FocusScope as at,
11791
+ Portal as at,
11792
11792
  _enum as b,
11793
11793
  ZodBoolean as c,
11794
- Root as ct,
11794
+ DismissableLayer as ct,
11795
11795
  ZodDiscriminatedUnion as d,
11796
- Presence as dt,
11797
- hideOthers as et,
11796
+ useId as dt,
11797
+ StyleNamespace as et,
11798
11798
  ZodEnum as f,
11799
- useControllableState as ft,
11799
+ Presence as ft,
11800
11800
  ZodOptional as g,
11801
- createContextScope as gt,
11801
+ createContext2 as gt,
11802
11802
  ZodObject as h,
11803
- createContext2 as ht,
11803
+ composeEventHandlers as ht,
11804
11804
  string as i,
11805
- Portal as it,
11805
+ useFocusGuards as it,
11806
11806
  nan as j,
11807
11807
  literal as k,
11808
11808
  ZodDate as l,
11809
- useCallbackRef$1 as lt,
11809
+ Root as lt,
11810
11810
  ZodNumber as m,
11811
- composeEventHandlers as mt,
11811
+ useLayoutEffect2 as mt,
11812
11812
  date as n,
11813
- __awaiter as nt,
11813
+ Combination_default as nt,
11814
11814
  ZodAny as o,
11815
- Branch as ot,
11815
+ FocusScope as ot,
11816
11816
  ZodLiteral as p,
11817
- useLayoutEffect2 as pt,
11817
+ useControllableState as pt,
11818
11818
  $ZodError as q,
11819
11819
  number as r,
11820
- useFocusGuards as rt,
11820
+ __awaiter as rt,
11821
11821
  ZodArray as s,
11822
- DismissableLayer as st,
11822
+ Branch as st,
11823
11823
  zod_default as t,
11824
- Combination_default as tt,
11824
+ hideOthers as tt,
11825
11825
  ZodDefault as u,
11826
- useId as ut,
11826
+ useCallbackRef$1 as ut,
11827
11827
  ZodType as v,
11828
- dispatchDiscreteCustomEvent as vt,
11828
+ Primitive as vt,
11829
11829
  array as w,
11830
11830
  _instanceof as x,
11831
11831
  ZodUnion as y,
11832
+ dispatchDiscreteCustomEvent as yt,
11832
11833
  tuple as z
11833
11834
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/islands",
3
- "version": "0.23.10-dev9",
3
+ "version": "0.23.11-dev67",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -57,7 +57,7 @@
57
57
  "@marimo-team/codemirror-ai": "^0.3.7",
58
58
  "@marimo-team/codemirror-languageserver": "^1.16.12",
59
59
  "@marimo-team/codemirror-mcp": "^0.1.5",
60
- "@marimo-team/codemirror-sql": "^0.2.4",
60
+ "@marimo-team/codemirror-sql": "^0.2.8",
61
61
  "@marimo-team/llm-info": "workspace:*",
62
62
  "@marimo-team/marimo-api": "workspace:*",
63
63
  "@marimo-team/react-slotz": "^0.2.0",
@@ -123,7 +123,7 @@
123
123
  "partysocket": "1.1.13",
124
124
  "path-to-regexp": "^8.4.0",
125
125
  "plotly.js": "^3.3.1",
126
- "pyodide": "0.27.7",
126
+ "pyodide": "314.0.0",
127
127
  "radix-ui": "1.4.3",
128
128
  "react-arborist": "^3.4.3",
129
129
  "react-aria": "3.47.0",
@@ -141,6 +141,7 @@
141
141
  "react-vega": "^8.0.0",
142
142
  "react-virtuoso": "^4.18.1",
143
143
  "reactflow": "^11.11.4",
144
+ "rehype-sanitize": "^6.0.0",
144
145
  "remark-gfm": "^4.0.1",
145
146
  "reveal.js": "^6.0.0",
146
147
  "rpc-anywhere": "^1.7.0",
@@ -20,6 +20,22 @@ globalThis.ResizeObserver ??= class {
20
20
  }
21
21
  } as never;
22
22
 
23
+ // mock implementation because jsdom doesn't support IntersectionObserver
24
+ globalThis.IntersectionObserver ??= class {
25
+ observe(_target: Element) {
26
+ /* noop */
27
+ }
28
+ unobserve(_target: Element) {
29
+ /* noop */
30
+ }
31
+ disconnect() {
32
+ /* noop */
33
+ }
34
+ takeRecords() {
35
+ return [];
36
+ }
37
+ } as never;
38
+
23
39
  // Global setup for all tests
24
40
  beforeEach(() => {
25
41
  // Reset all mocks before each test
@@ -60,8 +60,8 @@ export const renderUIMessage = ({
60
60
 
61
61
  switch (part.type) {
62
62
  case "text":
63
- // Streamdown sanitizes the HTML which strips out marimo elements
64
- // So instead, we render the HTML with our custom renderer.
63
+ // Streamdown strips marimo elements, so render them with our own HTML
64
+ // renderer. Other markdown (incl. mo.md HTML) goes through Streamdown.
65
65
  if (part.text.includes("<marimo-")) {
66
66
  return (
67
67
  <React.Fragment key={index}>
@@ -7,10 +7,6 @@ import type { GetRowIds } from "@/plugins/impl/DataTablePlugin";
7
7
  import { cn } from "@/utils/cn";
8
8
  import { Events } from "@/utils/events";
9
9
  import { prettyNumber } from "@/utils/numbers";
10
- import {
11
- PANEL_TYPES,
12
- type PanelType,
13
- } from "../editor/chrome/panels/context-aware-panel/context-aware-panel";
14
10
  import { Button } from "../ui/button";
15
11
  import { toast } from "../ui/use-toast";
16
12
  import { getColumnCountForDisplay } from "./hooks/use-column-visibility";
@@ -27,7 +23,6 @@ interface TableBottomBarProps<TData> {
27
23
  getRowIds?: GetRowIds;
28
24
  showPageSizeSelector?: boolean;
29
25
  tableLoading?: boolean;
30
- togglePanel?: (panelType: PanelType) => void;
31
26
  part?: string;
32
27
  className?: string;
33
28
  }
@@ -41,7 +36,6 @@ export const TableBottomBar = <TData,>({
41
36
  getRowIds,
42
37
  showPageSizeSelector,
43
38
  tableLoading,
44
- togglePanel,
45
39
  part,
46
40
  className,
47
41
  }: TableBottomBarProps<TData>) => {
@@ -159,15 +153,7 @@ export const TableBottomBar = <TData,>({
159
153
  return (
160
154
  <span className="flex items-center gap-1">
161
155
  <span>{rowsAndColumns}</span>
162
- {hiddenSuffix && (
163
- <button
164
- type="button"
165
- className="text-xs underline-offset-2 hover:underline cursor-pointer"
166
- onClick={() => togglePanel?.(PANEL_TYPES.COLUMN_EXPLORER)}
167
- >
168
- {hiddenSuffix}
169
- </button>
170
- )}
156
+ {hiddenSuffix && <span className="text-xs">{hiddenSuffix}</span>}
171
157
  </span>
172
158
  );
173
159
  };
@@ -1,6 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  "use no memo";
3
3
 
4
+ import type { Table } from "@tanstack/react-table";
4
5
  import { useDebounce } from "@uidotdev/usehooks";
5
6
  import {
6
7
  ChartSplineIcon,
@@ -17,13 +18,15 @@ import {
17
18
  } from "../editor/chrome/panels/context-aware-panel/context-aware-panel";
18
19
  import { Spinner } from "../icons/spinner";
19
20
  import { Button } from "../ui/button";
21
+ import { ColumnVisibilityDropdown } from "./column-visibility-dropdown";
20
22
  import { type ExportActionProps, ExportMenu } from "./export-actions";
21
23
 
22
24
  const NOOP_ON_SEARCH = () => {
23
25
  /** no-op*/
24
26
  };
25
27
 
26
- interface TableTopBarProps extends Partial<ExportActionProps> {
28
+ interface TableTopBarProps<TData> extends Partial<ExportActionProps> {
29
+ table: Table<TData>;
27
30
  enableSearch: boolean;
28
31
  searchQuery?: string;
29
32
  onSearchQueryChange?: (query: string) => void;
@@ -38,7 +41,8 @@ interface TableTopBarProps extends Partial<ExportActionProps> {
38
41
  sizeBytesIsLoading?: boolean;
39
42
  }
40
43
 
41
- export const TableTopBar: React.FC<TableTopBarProps> = ({
44
+ export const TableTopBar = <TData,>({
45
+ table,
42
46
  enableSearch,
43
47
  searchQuery,
44
48
  onSearchQueryChange,
@@ -52,7 +56,7 @@ export const TableTopBar: React.FC<TableTopBarProps> = ({
52
56
  downloadAs,
53
57
  sizeBytes,
54
58
  sizeBytesIsLoading,
55
- }) => {
59
+ }: TableTopBarProps<TData>) => {
56
60
  const [internalValue, setInternalValue] = useState(searchQuery || "");
57
61
  const debouncedSearch = useDebounce(internalValue, 500);
58
62
  const onSearch = useEvent(onSearchQueryChange ?? NOOP_ON_SEARCH);
@@ -62,16 +66,6 @@ export const TableTopBar: React.FC<TableTopBarProps> = ({
62
66
  onSearch(debouncedSearch);
63
67
  }, [debouncedSearch, onSearch]);
64
68
 
65
- const hasAnyAction =
66
- (enableSearch && onSearchQueryChange) ||
67
- showChartBuilder ||
68
- showTableExplorer ||
69
- downloadAs;
70
-
71
- if (!hasAnyAction) {
72
- return null;
73
- }
74
-
75
69
  return (
76
70
  <div className="flex items-center h-10 px-2 border-b gap-2">
77
71
  {onSearchQueryChange && enableSearch && (
@@ -106,6 +100,7 @@ export const TableTopBar: React.FC<TableTopBarProps> = ({
106
100
  )}
107
101
 
108
102
  <div className="flex items-center shrink-0">
103
+ <ColumnVisibilityDropdown table={table} />
109
104
  {showChartBuilder && (
110
105
  <Button
111
106
  variant="text"
@@ -3,7 +3,7 @@
3
3
 
4
4
  import { getCoreRowModel, useReactTable } from "@tanstack/react-table";
5
5
  import { render, screen } from "@testing-library/react";
6
- import { describe, expect, it, vi } from "vitest";
6
+ import { describe, expect, it } from "vitest";
7
7
  import { TooltipProvider } from "@/components/ui/tooltip";
8
8
  import { CellSelectionProvider } from "../range-focus/provider";
9
9
  import { TableBottomBar } from "../TableBottomBar";
@@ -11,7 +11,6 @@ import { TableBottomBar } from "../TableBottomBar";
11
11
  function renderWithTable(opts: {
12
12
  totalColumns: number;
13
13
  hiddenColumns?: string[];
14
- togglePanel?: (panelType: string) => void;
15
14
  }) {
16
15
  const Wrapper = () => {
17
16
  const table = useReactTable({
@@ -34,7 +33,6 @@ function renderWithTable(opts: {
34
33
  pagination={false}
35
34
  totalColumns={opts.totalColumns}
36
35
  table={table}
37
- togglePanel={opts.togglePanel}
38
36
  />
39
37
  );
40
38
  };
@@ -60,14 +58,10 @@ describe("TableBottomBar — hidden column count", () => {
60
58
  expect(screen.getByText(/\(1 hidden\)/)).toBeInTheDocument();
61
59
  });
62
60
 
63
- it("invokes togglePanel('column-explorer') when '(n hidden)' is clicked", () => {
64
- const togglePanel = vi.fn();
65
- renderWithTable({
66
- totalColumns: 3,
67
- hiddenColumns: ["col1"],
68
- togglePanel,
69
- });
70
- screen.getByText(/\(1 hidden\)/).click();
71
- expect(togglePanel).toHaveBeenCalledWith("column-explorer");
61
+ it("renders '(n hidden)' as inert text, not a button", () => {
62
+ renderWithTable({ totalColumns: 3, hiddenColumns: ["col1"] });
63
+ const suffix = screen.getByText(/\(1 hidden\)/);
64
+ expect(suffix.tagName).toBe("SPAN");
65
+ expect(suffix.closest("button")).toBeNull();
72
66
  });
73
67
  });