@marimo-team/islands 0.20.5-dev5 → 0.20.5-dev51

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 (169) hide show
  1. package/dist/{Combination-Du-o_hC9.js → Combination-Dk6JxauT.js} +1 -1
  2. package/dist/{ConnectedDataExplorerComponent-DUS-zJoR.js → ConnectedDataExplorerComponent-B07FkeWC.js} +10 -10
  3. package/dist/{any-language-editor-BL9o7y0_.js → any-language-editor-BIj11a2e.js} +19 -19
  4. package/dist/{architectureDiagram-VXUJARFQ-DrJeyFHq.js → architectureDiagram-VXUJARFQ-IZt4NuSd.js} +5 -5
  5. package/dist/{blockDiagram-VD42YOAC-BJrP6qKc.js → blockDiagram-VD42YOAC-mhFHC3Ty.js} +5 -5
  6. package/dist/{button-KYalaJYu.js → button-DQpBib29.js} +24 -11
  7. package/dist/{c4Diagram-YG6GDRKO-Bo4gytQ5.js → c4Diagram-YG6GDRKO-BzStmvfT.js} +4 -4
  8. package/dist/{channel-IWLGkaBE.js → channel-CUFaIkTh.js} +1 -1
  9. package/dist/{check-C50jsehH.js → check-DpqPQmzz.js} +1 -1
  10. package/dist/{chunk-ABZYJK2D-CRwanrkd.js → chunk-ABZYJK2D-7QYXAAhe.js} +1 -1
  11. package/dist/{chunk-ATLVNIR6-CMMCMvOK.js → chunk-ATLVNIR6-pmHPAPSd.js} +1 -1
  12. package/dist/{chunk-B4BG7PRW-BNsHrGHG.js → chunk-B4BG7PRW-C9mfKT9i.js} +4 -4
  13. package/dist/{chunk-DI55MBZ5-DQeYbfMV.js → chunk-DI55MBZ5-IKrK49rX.js} +4 -4
  14. package/dist/{chunk-EXTU4WIE-CV_DQeaX.js → chunk-EXTU4WIE-BRFl4iNd.js} +1 -1
  15. package/dist/{chunk-JA3XYJ7Z-Cmt--e0q.js → chunk-JA3XYJ7Z-C9q_MXZQ.js} +2 -2
  16. package/dist/{chunk-JZLCHNYA-CkyMJnI9.js → chunk-JZLCHNYA-DVjoFib5.js} +4 -4
  17. package/dist/{chunk-N4CR4FBY-BJfHtJbD.js → chunk-N4CR4FBY-BYr5N5mX.js} +5 -5
  18. package/dist/{chunk-QN33PNHL-WOLIPUAJ.js → chunk-QN33PNHL-CXfJywHv.js} +1 -1
  19. package/dist/{chunk-QXUST7PY-DYuD50pU.js → chunk-QXUST7PY-YO0PM8b3.js} +5 -5
  20. package/dist/{chunk-S3R3BYOJ-CsnX6RKs.js → chunk-S3R3BYOJ-DgI4FlvW.js} +1 -1
  21. package/dist/{chunk-TZMSLE5B-B3eYTGCw.js → chunk-TZMSLE5B-DSfBOnzx.js} +1 -1
  22. package/dist/{classDiagram-2ON5EDUG-C7C-oefv.js → classDiagram-2ON5EDUG-CvpnTWzz.js} +10 -10
  23. package/dist/{classDiagram-v2-WZHVMYZB-UTw37Gg8.js → classDiagram-v2-WZHVMYZB-DEQrBHLI.js} +10 -10
  24. package/dist/{copy-oc-FcZzt.js → copy-BkBF0Xgk.js} +2 -2
  25. package/dist/{dagre-6UL2VRFP-BgsUhJrV.js → dagre-6UL2VRFP-DC-emrm5.js} +7 -7
  26. package/dist/{diagram-PSM6KHXK-BIUUOfKo.js → diagram-PSM6KHXK-BAgNlpL8.js} +6 -6
  27. package/dist/{diagram-QEK2KX5R-BFjolZQv.js → diagram-QEK2KX5R-BM7QE5WA.js} +4 -4
  28. package/dist/{diagram-S2PKOQOG-4jfkWoZw.js → diagram-S2PKOQOG-qs4mB1gW.js} +4 -4
  29. package/dist/dist-B4MxkKHf.js +8 -0
  30. package/dist/{dist-De9X_Des.js → dist-B9EjSb9T.js} +1 -1
  31. package/dist/{dist-IW_ARJ3S.js → dist-BFxYppVR.js} +4 -4
  32. package/dist/{dist-D7ZGWV_9.js → dist-BGZ7TWS9.js} +3 -3
  33. package/dist/{dist-CwtEWuFb.js → dist-BSfYc7vq.js} +2 -2
  34. package/dist/{dist-DMS81OrU.js → dist-BUrWeMEP.js} +1 -1
  35. package/dist/dist-BYghZv6b.js +5 -0
  36. package/dist/dist-Be-uQhz5.js +6 -0
  37. package/dist/{dist-Ch_JuCvc.js → dist-BpMlUdNO.js} +3 -3
  38. package/dist/{dist-C6z8U-ms.js → dist-Bq5eYK43.js} +2 -2
  39. package/dist/{dist-BFL9TlzD.js → dist-Bq9zYwJs.js} +5 -5
  40. package/dist/{dist-7ZF--V_D.js → dist-C4K7pumm.js} +2 -2
  41. package/dist/{dist-Qjf6pcqK.js → dist-CAKwXCWI.js} +2 -2
  42. package/dist/dist-CB_xf0ju.js +5 -0
  43. package/dist/{dist-BwQHkjA9.js → dist-CDHl2i1x.js} +4 -4
  44. package/dist/dist-CK0qFAbF.js +8 -0
  45. package/dist/{dist-C4XMUaob.js → dist-CPlGUbk-.js} +2 -2
  46. package/dist/{dist-BT6_J2eq.js → dist-CSEWGuDq.js} +7 -2
  47. package/dist/dist-CYEk-qrr.js +8 -0
  48. package/dist/{dist-CYo3w-nC.js → dist-Cl5iM8xL.js} +3 -3
  49. package/dist/dist-CmKoWpMk.js +5 -0
  50. package/dist/{dist-I8MQW60_.js → dist-CseYuPtL.js} +2 -2
  51. package/dist/dist-D1nf4IQl.js +5 -0
  52. package/dist/{dist-CsqiXw7J.js → dist-D4gcY469.js} +2 -2
  53. package/dist/{dist-DUxS2paD.js → dist-D5NMgbbv.js} +2 -2
  54. package/dist/{dist-UYm1IE5s.js → dist-DERtJN02.js} +2 -2
  55. package/dist/{dist-CFToYDWO.js → dist-DEj2X26M.js} +2 -2
  56. package/dist/{dist-BuapEdlD.js → dist-DOoqn-VL.js} +70 -67
  57. package/dist/{dist-BLThQiU4.js → dist-DUretbKK.js} +2 -2
  58. package/dist/{dist-DEFZ7dnD.js → dist-D_-CGmlh.js} +2 -2
  59. package/dist/dist-Df3AcKpt.js +6 -0
  60. package/dist/dist-DgaFHt_I.js +5 -0
  61. package/dist/dist-Dk10C3ui.js +5 -0
  62. package/dist/{dist-D0f6Yrrb.js → dist-DodLQWPg.js} +1 -1
  63. package/dist/dist-DtyPVMHR.js +5 -0
  64. package/dist/{dist-Cb3cLT39.js → dist-HoZO6brh.js} +2 -2
  65. package/dist/{dist-Cqpjy6bK.js → dist-RNGn_-uD.js} +1 -1
  66. package/dist/{dist-BBcqvpvP.js → dist-Ux6dL_VB.js} +1 -1
  67. package/dist/{dist-B8Y11RWn.js → dist-WIWVvdBh.js} +2 -2
  68. package/dist/{dist-CB6qhQ8K.js → dist-gc9KgJuA.js} +1 -1
  69. package/dist/{dist-ovDpXuSB.js → dist-i-ud9aCA.js} +1 -1
  70. package/dist/dist-ko7WnHAO.js +5 -0
  71. package/dist/{dist-BTQbjEKU.js → dist-lNe4i1Nm.js} +1 -1
  72. package/dist/dist-of7gLRFK.js +8 -0
  73. package/dist/{erDiagram-Q2GNP2WA-Cq5Bz5lG.js → erDiagram-Q2GNP2WA-Dh5nhgY3.js} +10 -10
  74. package/dist/{error-banner-D0tXnwl4.js → error-banner-BctofTCP.js} +2 -2
  75. package/dist/{esm-BxMbHo0y.js → esm-BBkPJL8N.js} +29 -27
  76. package/dist/{flowDiagram-NV44I4VS-6WPJVFl7.js → flowDiagram-NV44I4VS-ChR1Vbmj.js} +10 -10
  77. package/dist/{ganttDiagram-JELNMOA3-AfDhh9CI.js → ganttDiagram-JELNMOA3-sK0z-5KM.js} +3 -3
  78. package/dist/{gitGraphDiagram-V2S2FVAM-BRSwuj0Q.js → gitGraphDiagram-V2S2FVAM-9S1VqQrL.js} +3 -3
  79. package/dist/{glide-data-editor-ByPNTNVG.js → glide-data-editor-DI5VFwRB.js} +63 -63
  80. package/dist/{infoDiagram-HS3SLOUP-Cmxo6jKx.js → infoDiagram-HS3SLOUP-C5A8b-2O.js} +3 -3
  81. package/dist/{journeyDiagram-XKPGCS4Q-CKYr8cSR.js → journeyDiagram-XKPGCS4Q-D5BIjS4N.js} +3 -3
  82. package/dist/{kanban-definition-3W4ZIXB7-DVvAZzQD.js → kanban-definition-3W4ZIXB7-C1vZZabj.js} +7 -7
  83. package/dist/{label-CV0KYhtH.js → label-Cx28eo0O.js} +5 -5
  84. package/dist/{loader-eJCvvApN.js → loader-C62dRCuy.js} +1 -1
  85. package/dist/main.js +1542 -1072
  86. package/dist/{mermaid-COOB_abB.js → mermaid-BgeZPIms.js} +41 -41
  87. package/dist/{mindmap-definition-VGOIOE7T-1ExmnvYy.js → mindmap-definition-VGOIOE7T-Cn9_H_5f.js} +9 -9
  88. package/dist/{pieDiagram-ADFJNKIX-CJlIsdsU.js → pieDiagram-ADFJNKIX-iA0mvRW9.js} +4 -4
  89. package/dist/{purify.es-CyOIw8ru.js → purify.es-DGenX2XH.js} +67 -67
  90. package/dist/{quadrantDiagram-AYHSOK5B-BU78RiaH.js → quadrantDiagram-AYHSOK5B-CAcVWXc-.js} +2 -2
  91. package/dist/{requirementDiagram-UZGBJVZJ-DACHtrFr.js → requirementDiagram-UZGBJVZJ-1HxQ6I5Z.js} +9 -9
  92. package/dist/{sankeyDiagram-TZEHDZUN-Bzg7_UWs.js → sankeyDiagram-TZEHDZUN-BVJnR4_b.js} +2 -2
  93. package/dist/{sequenceDiagram-WL72ISMW-agybEe9J.js → sequenceDiagram-WL72ISMW-ByirOtHb.js} +4 -4
  94. package/dist/{slides-component-B0yK5GXP.js → slides-component-DwvL_HJi.js} +2 -2
  95. package/dist/{spec-Dq_reDGM.js → spec-B8V2Bcbi.js} +4 -4
  96. package/dist/{stateDiagram-FKZM4ZOC-DehQAt8g.js → stateDiagram-FKZM4ZOC-DrYNXdQr.js} +10 -10
  97. package/dist/{stateDiagram-v2-4FDKWEC3-8VzeREl9.js → stateDiagram-v2-4FDKWEC3-C9CFKCSr.js} +10 -10
  98. package/dist/style.css +1 -1
  99. package/dist/{timeline-definition-IT6M3QCI-CdCfdaCF.js → timeline-definition-IT6M3QCI-D8B3p7ID.js} +2 -2
  100. package/dist/{tooltip-CL8m4f9y.js → tooltip-SPkubVH3.js} +3 -3
  101. package/dist/{types-BwnzGcE4.js → types-DqrGPzsT.js} +517 -406
  102. package/dist/{useAsyncData-B4hMFGnF.js → useAsyncData-Ioeh75f8.js} +1 -1
  103. package/dist/{useDeepCompareMemoize-DuPhOXzr.js → useDeepCompareMemoize-DtbTAJq3.js} +4 -4
  104. package/dist/{useIframeCapabilities-CAt6D2EI.js → useIframeCapabilities-DFGZKWkO.js} +1 -1
  105. package/dist/{useTheme-BNYQnvu-.js → useTheme-OvBNH9t3.js} +2 -2
  106. package/dist/{vega-component-DouPy8AI.js → vega-component-B_4Lp3hK.js} +8 -8
  107. package/dist/{xychartDiagram-PRI3JC2R-rEm_SIsC.js → xychartDiagram-PRI3JC2R-KuxgQuK9.js} +5 -5
  108. package/package.json +9 -9
  109. package/src/__mocks__/requests.ts +1 -0
  110. package/src/components/app-config/ai-config.tsx +10 -0
  111. package/src/components/datasources/components.tsx +3 -6
  112. package/src/components/datasources/datasources.tsx +8 -21
  113. package/src/components/editor/actions/types.ts +6 -1
  114. package/src/components/editor/actions/useNotebookActions.tsx +50 -13
  115. package/src/components/editor/chrome/types.ts +17 -0
  116. package/src/components/editor/controls/command-palette.tsx +7 -0
  117. package/src/components/editor/controls/keyboard-shortcuts.tsx +3 -1
  118. package/src/components/editor/file-tree/file-explorer.tsx +48 -62
  119. package/src/components/editor/file-tree/file-icons.tsx +132 -0
  120. package/src/components/editor/file-tree/file-viewer.tsx +1 -1
  121. package/src/components/editor/file-tree/tree-actions.tsx +107 -0
  122. package/src/components/editor/file-tree/types.ts +2 -96
  123. package/src/components/editor/header/filename-input.tsx +4 -1
  124. package/src/components/icons/marimo-icons.tsx +2 -2
  125. package/src/components/pages/home-page.tsx +5 -5
  126. package/src/components/storage/__tests__/storage-snippets.test.ts +253 -0
  127. package/src/components/storage/components.tsx +0 -38
  128. package/src/components/storage/storage-file-viewer.tsx +1 -1
  129. package/src/components/storage/storage-inspector.tsx +65 -50
  130. package/src/components/storage/storage-snippets.ts +67 -0
  131. package/src/components/ui/command.tsx +2 -0
  132. package/src/components/ui/links.tsx +1 -0
  133. package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +206 -0
  134. package/src/core/ai/tools/run-cells-tool.ts +75 -40
  135. package/src/core/hotkeys/__tests__/hotkeys.test.ts +64 -1
  136. package/src/core/hotkeys/hotkeys.ts +29 -3
  137. package/src/core/islands/bridge.ts +1 -0
  138. package/src/core/network/__tests__/requests-network.test.ts +17 -0
  139. package/src/core/network/requests-lazy.ts +1 -0
  140. package/src/core/network/requests-network.ts +9 -0
  141. package/src/core/network/requests-static.ts +1 -0
  142. package/src/core/network/requests-toasting.tsx +1 -0
  143. package/src/core/network/types.ts +1 -0
  144. package/src/core/storage/__tests__/state.test.ts +1 -0
  145. package/src/core/wasm/bridge.ts +1 -0
  146. package/src/plugins/impl/FileBrowserPlugin.tsx +4 -4
  147. package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +309 -0
  148. package/src/plugins/impl/mpl-interactive/__tests__/mpl-websocket-shim.test.ts +110 -0
  149. package/src/plugins/impl/mpl-interactive/mpl-websocket-shim.ts +57 -0
  150. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +8 -2
  151. package/src/plugins/plugins.ts +2 -0
  152. package/src/utils/__tests__/filenames.test.ts +7 -0
  153. package/src/utils/__tests__/smartMatch.test.ts +61 -0
  154. package/src/utils/filenames.ts +3 -0
  155. package/src/utils/smartMatch.ts +62 -0
  156. package/dist/dist-BAeGo2rp.js +0 -5
  157. package/dist/dist-BqwCMSEa.js +0 -5
  158. package/dist/dist-Bum8FwTO.js +0 -6
  159. package/dist/dist-C0YiOwt_.js +0 -5
  160. package/dist/dist-C2uPv4iU.js +0 -5
  161. package/dist/dist-C5hOLsJN.js +0 -8
  162. package/dist/dist-C9NIAKMs.js +0 -8
  163. package/dist/dist-CCrzTtvk.js +0 -5
  164. package/dist/dist-CFS9i1rS.js +0 -8
  165. package/dist/dist-CyHZuhPH.js +0 -5
  166. package/dist/dist-CzcjWdIk.js +0 -6
  167. package/dist/dist-DaYyUSNC.js +0 -5
  168. package/dist/dist-DpDcJYNh.js +0 -8
  169. package/dist/dist-U_BfxcPn.js +0 -5
@@ -1,7 +1,7 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-Bs6Z0kvn.js";
3
3
  import { t as require_compiler_runtime } from "./compiler-runtime-B_OLMU9S.js";
4
- import { C as useEvent_default } from "./useTheme-BNYQnvu-.js";
4
+ import { C as useEvent_default } from "./useTheme-OvBNH9t3.js";
5
5
  import { t as invariant } from "./invariant-D9QLJ4SZ.js";
6
6
  var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1), Result = {
7
7
  error(e, s) {
@@ -4,12 +4,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
4
4
  import { s as __toESM, t as __commonJSMin } from "./chunk-BNovOVIE.js";
5
5
  import { t as require_react } from "./react-Bs6Z0kvn.js";
6
6
  import { t as require_compiler_runtime } from "./compiler-runtime-B_OLMU9S.js";
7
- import { l as createLucideIcon } from "./dist-B8Y11RWn.js";
8
- import { a as cva, g as Logger, y as cn } from "./button-KYalaJYu.js";
7
+ import { l as createLucideIcon } from "./dist-WIWVvdBh.js";
8
+ import { a as cva, g as Logger, y as cn } from "./button-DQpBib29.js";
9
9
  import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
10
10
  import { r as KnownQueryParams } from "./constants-D1Tbg_6B.js";
11
- import { f as waitFor, p as isIslands, u as store, y as atom } from "./useTheme-BNYQnvu-.js";
12
- import { i as tableFromIPC } from "./loader-eJCvvApN.js";
11
+ import { f as waitFor, p as isIslands, u as store, y as atom } from "./useTheme-OvBNH9t3.js";
12
+ import { i as tableFromIPC } from "./loader-C62dRCuy.js";
13
13
  var CircleQuestionMark = createLucideIcon("circle-question-mark", [
14
14
  ["circle", {
15
15
  cx: "12",
@@ -1,7 +1,7 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-Bs6Z0kvn.js";
3
3
  import { t as require_compiler_runtime } from "./compiler-runtime-B_OLMU9S.js";
4
- import { g as Logger } from "./button-KYalaJYu.js";
4
+ import { g as Logger } from "./button-DQpBib29.js";
5
5
  import { n as once } from "./once-BqS42WgZ.js";
6
6
  function testStorage(e) {
7
7
  try {
@@ -1,8 +1,8 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-Bs6Z0kvn.js";
3
3
  import { t as require_compiler_runtime } from "./compiler-runtime-B_OLMU9S.js";
4
- import { g as Logger, s as OverridingHotkeyProvider, u as resolvePlatform } from "./button-KYalaJYu.js";
5
- import { B as record, H as string, L as number, O as array, P as looseObject, R as object, W as union, k as boolean, w as _enum } from "./Combination-Du-o_hC9.js";
4
+ import { g as Logger, s as OverridingHotkeyProvider, u as resolvePlatform } from "./button-DQpBib29.js";
5
+ import { B as record, H as string, L as number, O as array, P as looseObject, R as object, W as union, k as boolean, w as _enum } from "./Combination-Dk6JxauT.js";
6
6
  import { t as _baseIsEqual_default } from "./_baseIsEqual-5cAxzk6f.js";
7
7
  import { t as merge_default } from "./merge-CGQkMGzr.js";
8
8
  function isEqual(e, A) {
@@ -1,19 +1,19 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-Bs6Z0kvn.js";
3
3
  import { t as require_compiler_runtime } from "./compiler-runtime-B_OLMU9S.js";
4
- import { S as CircleQuestionMark, a as AlertTitle, m as asRemoteURL, n as arrow, o as isValid, r as Alert, t as useDeepCompareMemoize } from "./useDeepCompareMemoize-DuPhOXzr.js";
5
- import { d as Objects, g as Logger, h as Events } from "./button-KYalaJYu.js";
6
- import "./Combination-Du-o_hC9.js";
4
+ import { S as CircleQuestionMark, a as AlertTitle, m as asRemoteURL, n as arrow, o as isValid, r as Alert, t as useDeepCompareMemoize } from "./useDeepCompareMemoize-DtbTAJq3.js";
5
+ import { d as Objects, g as Logger, h as Events } from "./button-DQpBib29.js";
6
+ import "./Combination-Dk6JxauT.js";
7
7
  import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
8
8
  import "./react-dom-CqtLRVZP.js";
9
- import { t as Tooltip } from "./tooltip-CL8m4f9y.js";
9
+ import { t as Tooltip } from "./tooltip-SPkubVH3.js";
10
10
  import { i as debounce_default } from "./constants-D1Tbg_6B.js";
11
- import { C as useEvent_default, n as useTheme } from "./useTheme-BNYQnvu-.js";
12
- import { a as tooltipHandler, n as vegaLoadData } from "./loader-eJCvvApN.js";
11
+ import { C as useEvent_default, n as useTheme } from "./useTheme-OvBNH9t3.js";
12
+ import { a as tooltipHandler, n as vegaLoadData } from "./loader-C62dRCuy.js";
13
13
  import { t as uniq_default } from "./uniq-cCc07Q8K.js";
14
- import { n as ErrorBanner } from "./error-banner-D0tXnwl4.js";
14
+ import { n as ErrorBanner } from "./error-banner-BctofTCP.js";
15
15
  import { n as formats } from "./vega-loader.browser-CQ-lnUkI.js";
16
- import { t as useAsyncData } from "./useAsyncData-B4hMFGnF.js";
16
+ import { t as useAsyncData } from "./useAsyncData-Ioeh75f8.js";
17
17
  import { t as j } from "./react-vega-C6kwcd86.js";
18
18
  import "./defaultLocale-Bklbu-Tp.js";
19
19
  import "./defaultLocale-CfQ4kBaV.js";
@@ -1,17 +1,17 @@
1
1
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
2
- import "./purify.es-CyOIw8ru.js";
2
+ import "./purify.es-DGenX2XH.js";
3
3
  import { t as linear } from "./linear-DIp6l9sg.js";
4
4
  import { n as ordinal } from "./ordinal-Dcvf4J1m.js";
5
5
  import { t as range } from "./range-BToS7LsA.js";
6
6
  import "./defaultLocale-Bklbu-Tp.js";
7
7
  import { t as line_default } from "./line-C1k1rG3Z.js";
8
- import { i as cleanAndMerge } from "./chunk-S3R3BYOJ-CsnX6RKs.js";
8
+ import { i as cleanAndMerge } from "./chunk-S3R3BYOJ-DgI4FlvW.js";
9
9
  import { n as initRange } from "./init-Ci8VD8ZH.js";
10
10
  import { i as log, r as __name } from "./src-CHUphWwL.js";
11
- import { B as setAccTitle, C as getDiagramTitle, I as sanitizeText, T as getThemeVariables3, U as setDiagramTitle, _ as getAccDescription, a as clear, c as configureSvgSize, d as defaultConfig_default, v as getAccTitle, y as getConfig, z as setAccDescription } from "./chunk-ABZYJK2D-CRwanrkd.js";
12
- import { t as selectSvgElement } from "./chunk-EXTU4WIE-CV_DQeaX.js";
11
+ import { B as setAccTitle, C as getDiagramTitle, I as sanitizeText, T as getThemeVariables3, U as setDiagramTitle, _ as getAccDescription, a as clear, c as configureSvgSize, d as defaultConfig_default, v as getAccTitle, y as getConfig, z as setAccDescription } from "./chunk-ABZYJK2D-7QYXAAhe.js";
12
+ import { t as selectSvgElement } from "./chunk-EXTU4WIE-BRFl4iNd.js";
13
13
  import "./dist-Bymy0kEH.js";
14
- import { t as computeDimensionOfText } from "./chunk-JA3XYJ7Z-Cmt--e0q.js";
14
+ import { t as computeDimensionOfText } from "./chunk-JA3XYJ7Z-C9q_MXZQ.js";
15
15
  function band() {
16
16
  var e = ordinal().unknown(void 0), w = e.domain, T = e.range, D = 0, O = 1, k, A, j = false, M = 0, N = 0, P = 0.5;
17
17
  delete e.unknown;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/islands",
3
- "version": "0.20.5-dev5",
3
+ "version": "0.20.5-dev51",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -23,20 +23,20 @@
23
23
  "dependencies": {
24
24
  "@ai-sdk/react": "^2.0.125",
25
25
  "@anywidget/types": "^0.2.0",
26
- "@codemirror/autocomplete": "^6.20.0",
26
+ "@codemirror/autocomplete": "^6.20.1",
27
27
  "@codemirror/commands": "^6.10.2",
28
28
  "@codemirror/lang-markdown": "^6.5.0",
29
29
  "@codemirror/lang-python": "^6.2.1",
30
30
  "@codemirror/lang-sql": "^6.10.0",
31
- "@codemirror/language": "^6.12.1",
31
+ "@codemirror/language": "^6.12.2",
32
32
  "@codemirror/language-data": "^6.5.2",
33
33
  "@codemirror/legacy-modes": "^6.5.2",
34
- "@codemirror/lint": "^6.9.3",
35
- "@codemirror/merge": "^6.11.2",
34
+ "@codemirror/lint": "^6.9.5",
35
+ "@codemirror/merge": "^6.12.0",
36
36
  "@codemirror/search": "^6.6.0",
37
37
  "@codemirror/state": "^6.5.4",
38
38
  "@codemirror/theme-one-dark": "^6.1.3",
39
- "@codemirror/view": "^6.39.12",
39
+ "@codemirror/view": "^6.39.16",
40
40
  "@dagrejs/dagre": "^1.1.8",
41
41
  "@date-fns/tz": "^1.4.1",
42
42
  "@dnd-kit/core": "^6.3.1",
@@ -102,7 +102,7 @@
102
102
  "@types/jsdom": "^21.1.7",
103
103
  "@types/react-grid-layout": "^1.3.6",
104
104
  "@uidotdev/usehooks": "^2.4.1",
105
- "@uiw/codemirror-extensions-langs": "^4.25.4",
105
+ "@uiw/codemirror-extensions-langs": "^4.25.7",
106
106
  "@uiw/react-codemirror": "4.25.4",
107
107
  "@uwdata/flechette": "^1.1.2",
108
108
  "@valtown/codemirror-codeium": "^1.1.1",
@@ -147,8 +147,8 @@
147
147
  "plotly.js": "^3.3.1",
148
148
  "pyodide": "0.27.7",
149
149
  "react-arborist": "^3.4.3",
150
- "react-aria": "3.44.0",
151
- "react-aria-components": "1.13.0",
150
+ "react-aria": "3.47.0",
151
+ "react-aria-components": "1.16.0",
152
152
  "react-codemirror-merge": "4.25.4",
153
153
  "react-dnd": "^16.0.1",
154
154
  "react-dnd-html5-backend": "^16.0.1",
@@ -59,6 +59,7 @@ export const MockRequestClient = {
59
59
  getRunningNotebooks: vi.fn().mockResolvedValue({ files: [] }),
60
60
  shutdownSession: vi.fn().mockResolvedValue({}),
61
61
  exportAsHTML: vi.fn().mockResolvedValue({ html: "" }),
62
+ exportAsIPYNB: vi.fn().mockResolvedValue(""),
62
63
  exportAsMarkdown: vi.fn().mockResolvedValue({ markdown: "" }),
63
64
  exportAsPDF: vi.fn().mockResolvedValue(new Blob()),
64
65
  autoExportAsHTML: vi.fn().mockResolvedValue({}),
@@ -60,6 +60,7 @@ import {
60
60
  AccordionItem,
61
61
  AccordionTrigger,
62
62
  } from "../ui/accordion";
63
+ import { Alert, AlertDescription } from "../ui/alert";
63
64
  import { Button } from "../ui/button";
64
65
  import { Checkbox } from "../ui/checkbox";
65
66
  import { DropdownMenuSeparator } from "../ui/dropdown-menu";
@@ -966,6 +967,15 @@ export const AiProvidersConfig: React.FC<AiConfigProps> = ({
966
967
  provider="github"
967
968
  isConfigured={hasValue("ai.github.api_key")}
968
969
  >
970
+ <Alert variant="warning" className="py-1.5 px-3 text-xs">
971
+ <AlertDescription>
972
+ Free tier models have low token limits which can cause errors with
973
+ larger prompts.{" "}
974
+ <ExternalLink href="https://docs.github.com/en/github-models/prototyping-with-ai-models#rate-limits">
975
+ Learn more
976
+ </ExternalLink>
977
+ </AlertDescription>
978
+ </Alert>
969
979
  <ApiKey
970
980
  form={form}
971
981
  config={config}
@@ -1,18 +1,15 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { ChevronRightIcon, LoaderCircle, XIcon } from "lucide-react";
3
+ import { LoaderCircle, XIcon } from "lucide-react";
4
4
  import type { CSSProperties } from "react";
5
+ import { TreeChevron } from "@/components/editor/file-tree/tree-actions";
5
6
  import type { DataType } from "@/core/kernel/messages";
6
7
  import { cn } from "@/utils/cn";
7
8
  import { DATA_TYPE_ICON, getDataTypeColor } from "../datasets/icons";
8
9
 
9
10
  export const RotatingChevron: React.FC<{ isExpanded: boolean }> = ({
10
11
  isExpanded,
11
- }) => (
12
- <ChevronRightIcon
13
- className={cn("h-3 w-3 transition-transform", isExpanded && "rotate-90")}
14
- />
15
- );
12
+ }) => <TreeChevron isExpanded={isExpanded} className="h-3 w-3" />;
16
13
 
17
14
  export const DatasourceLabel: React.FC<{
18
15
  children: React.ReactNode;
@@ -3,11 +3,12 @@
3
3
  import { CommandList } from "cmdk";
4
4
  import { atom, useAtomValue, useSetAtom } from "jotai";
5
5
  import { sortBy } from "lodash-es";
6
- import { PlusIcon, PlusSquareIcon, RefreshCwIcon, XIcon } from "lucide-react";
6
+ import { PlusIcon, PlusSquareIcon, XIcon } from "lucide-react";
7
7
  import React from "react";
8
8
  import { dbDisplayName } from "@/components/databases/display";
9
9
  import { EngineVariable } from "@/components/databases/engine-variable";
10
10
  import { DatabaseLogo } from "@/components/databases/icon";
11
+ import { RefreshIconButton } from "@/components/editor/file-tree/tree-actions";
11
12
  import { CopyClipboardIcon } from "@/components/icons/copy-icon";
12
13
  import { Button } from "@/components/ui/button";
13
14
  import { Command, CommandInput, CommandItem } from "@/components/ui/command";
@@ -265,15 +266,10 @@ const Engine: React.FC<{
265
266
  const engineName = internalEngine ? "In-Memory" : connection.name;
266
267
  const { previewDataSourceConnection } = useRequestClient();
267
268
 
268
- const [isSpinning, setIsSpinning] = React.useState(false);
269
-
270
269
  const handleRefreshConnection = async () => {
271
- setIsSpinning(true);
272
270
  await previewDataSourceConnection({
273
271
  engine: connection.name,
274
272
  });
275
- // Artificially spin the icon if the request is really fast
276
- setTimeout(() => setIsSpinning(false), 500);
277
273
  };
278
274
 
279
275
  return (
@@ -288,21 +284,12 @@ const Engine: React.FC<{
288
284
  (<EngineVariable variableName={engineName as VariableName} />)
289
285
  </span>
290
286
  {!internalEngine && (
291
- <Tooltip content="Refresh connection">
292
- <Button
293
- variant="ghost"
294
- size="icon"
295
- className="ml-auto hover:bg-transparent hover:shadow-none"
296
- onClick={handleRefreshConnection}
297
- >
298
- <RefreshCwIcon
299
- className={cn(
300
- "h-4 w-4 text-muted-foreground hover:text-foreground",
301
- isSpinning && "animate-[spin_0.5s]",
302
- )}
303
- />
304
- </Button>
305
- </Tooltip>
287
+ <RefreshIconButton
288
+ onClick={handleRefreshConnection}
289
+ tooltip="Refresh connection"
290
+ className="ml-auto h-4 p-0"
291
+ iconClassName="h-3.5 w-3.5"
292
+ />
306
293
  )}
307
294
  </DatasourceLabel>
308
295
  {hasChildren ? (
@@ -27,6 +27,7 @@ export interface ActionButton {
27
27
  handleHeadless?: (event?: Event) => void;
28
28
  divider?: boolean;
29
29
  dropdown?: ActionButton[];
30
+ additionalKeywords?: string[];
30
31
  }
31
32
 
32
33
  export function isParentAction(
@@ -51,6 +52,10 @@ export function flattenActions(
51
52
  if (isParentAction(action)) {
52
53
  return flattenActions(action.dropdown, `${prevLabel + action.label} > `);
53
54
  }
54
- return { ...action, label: prevLabel + action.label };
55
+ return {
56
+ ...action,
57
+ label: prevLabel + action.label,
58
+ additionalKeywords: action.additionalKeywords,
59
+ };
55
60
  });
56
61
  }
@@ -31,6 +31,7 @@ import {
31
31
  LayoutTemplateIcon,
32
32
  LinkIcon,
33
33
  MessagesSquareIcon,
34
+ NotebookIcon,
34
35
  PanelLeftIcon,
35
36
  PowerSquareIcon,
36
37
  PresentationIcon,
@@ -123,8 +124,13 @@ export function useNotebookActions() {
123
124
  const setCommandPaletteOpen = useSetAtom(commandPaletteAtom);
124
125
  const setSettingsDialogOpen = useSetAtom(settingDialogAtom);
125
126
  const setKeyboardShortcutsOpen = useSetAtom(keyboardShortcutsAtom);
126
- const { exportAsMarkdown, readCode, saveCellConfig, updateCellOutputs } =
127
- useRequestClient();
127
+ const {
128
+ exportAsIPYNB,
129
+ exportAsMarkdown,
130
+ readCode,
131
+ saveCellConfig,
132
+ updateCellOutputs,
133
+ } = useRequestClient();
128
134
  const takeScreenshots = useEnrichCellOutputs();
129
135
 
130
136
  const hasDisabledCells = useAtomValue(hasDisabledCellsAtom);
@@ -199,6 +205,27 @@ export function useNotebookActions() {
199
205
  setTimeout(() => window.dispatchEvent(afterprint), 0);
200
206
  };
201
207
 
208
+ const handleDownloadAsIPYNB = async () => {
209
+ if (!filename) {
210
+ toastNotebookMustBeNamed();
211
+ return;
212
+ }
213
+
214
+ const runDownload = async (progress: ProgressState) => {
215
+ await updateCellOutputsWithScreenshots({
216
+ takeScreenshots: () => takeScreenshots({ progress }),
217
+ updateCellOutputs,
218
+ });
219
+ const ipynb = await exportAsIPYNB({ download: false });
220
+ downloadBlob(
221
+ new Blob([ipynb], { type: "application/x-ipynb+json" }),
222
+ Filenames.toIPYNB(document.title),
223
+ );
224
+ };
225
+
226
+ await withLoadingToast("Downloading IPYNB...", runDownload);
227
+ };
228
+
202
229
  const actions: ActionButton[] = [
203
230
  {
204
231
  icon: <DownloadIcon size={14} strokeWidth={1.5} />,
@@ -240,6 +267,11 @@ export function useNotebookActions() {
240
267
  );
241
268
  },
242
269
  },
270
+ {
271
+ icon: <NotebookIcon size={14} strokeWidth={1.5} />,
272
+ label: "Download as ipynb",
273
+ handle: handleDownloadAsIPYNB,
274
+ },
243
275
  {
244
276
  icon: <CodeIcon size={14} strokeWidth={1.5} />,
245
277
  label: "Download Python code",
@@ -347,17 +379,20 @@ export function useNotebookActions() {
347
379
  label: "Helper panel",
348
380
  redundant: true,
349
381
  handle: NOOP_HANDLER,
350
- dropdown: PANELS.flatMap(({ type: id, Icon, hidden }) => {
351
- if (hidden) {
352
- return [];
353
- }
354
- return {
355
- label: startCase(id),
356
- rightElement: renderCheckboxElement(selectedPanel === id),
357
- icon: <Icon size={14} strokeWidth={1.5} />,
358
- handle: () => toggleApplication(id),
359
- };
360
- }),
382
+ dropdown: PANELS.flatMap(
383
+ ({ type: id, Icon, hidden, additionalKeywords }) => {
384
+ if (hidden) {
385
+ return [];
386
+ }
387
+ return {
388
+ label: startCase(id),
389
+ rightElement: renderCheckboxElement(selectedPanel === id),
390
+ icon: <Icon size={14} strokeWidth={1.5} />,
391
+ handle: () => toggleApplication(id),
392
+ additionalKeywords,
393
+ };
394
+ },
395
+ ),
361
396
  },
362
397
 
363
398
  {
@@ -478,6 +513,7 @@ export function useNotebookActions() {
478
513
  label: "Restart kernel",
479
514
  variant: "danger",
480
515
  handle: restartKernel,
516
+ additionalKeywords: ["reset", "reload", "restart"],
481
517
  },
482
518
  {
483
519
  icon: <FastForwardIcon size={14} strokeWidth={1.5} />,
@@ -535,6 +571,7 @@ export function useNotebookActions() {
535
571
  label: "User settings",
536
572
  handle: () => setSettingsDialogOpen((open) => !open),
537
573
  redundant: true,
574
+ additionalKeywords: ["preferences", "options", "configuration"],
538
575
  },
539
576
  {
540
577
  icon: <ExternalLinkIcon size={14} strokeWidth={1.5} />,
@@ -59,6 +59,8 @@ export interface PanelDescriptor {
59
59
  defaultSection: PanelSection;
60
60
  /** Capability required for this panel to be visible. If the capability is false, the panel is hidden. */
61
61
  requiredCapability?: keyof Capabilities;
62
+ /** Additional search keywords for the command palette */
63
+ additionalKeywords?: string[];
62
64
  }
63
65
 
64
66
  /**
@@ -73,6 +75,7 @@ export const PANELS: PanelDescriptor[] = [
73
75
  label: "Files",
74
76
  tooltip: "View files",
75
77
  defaultSection: "sidebar",
78
+ additionalKeywords: ["explorer", "browser", "directory"],
76
79
  },
77
80
  {
78
81
  type: "variables",
@@ -80,6 +83,7 @@ export const PANELS: PanelDescriptor[] = [
80
83
  label: "Variables",
81
84
  tooltip: "Explore variables and data sources",
82
85
  defaultSection: "sidebar",
86
+ additionalKeywords: ["state", "scope", "inspector"],
83
87
  },
84
88
  {
85
89
  type: "packages",
@@ -87,6 +91,7 @@ export const PANELS: PanelDescriptor[] = [
87
91
  label: "Packages",
88
92
  tooltip: "Manage packages",
89
93
  defaultSection: "sidebar",
94
+ additionalKeywords: ["dependencies", "pip", "install"],
90
95
  },
91
96
  {
92
97
  type: "ai",
@@ -94,6 +99,7 @@ export const PANELS: PanelDescriptor[] = [
94
99
  label: "AI",
95
100
  tooltip: "Chat & Agents",
96
101
  defaultSection: "sidebar",
102
+ additionalKeywords: ["chat", "copilot", "assistant"],
97
103
  },
98
104
  {
99
105
  type: "outline",
@@ -101,6 +107,7 @@ export const PANELS: PanelDescriptor[] = [
101
107
  label: "Outline",
102
108
  tooltip: "View outline",
103
109
  defaultSection: "sidebar",
110
+ additionalKeywords: ["toc", "structure", "headings"],
104
111
  },
105
112
  {
106
113
  type: "documentation",
@@ -108,6 +115,7 @@ export const PANELS: PanelDescriptor[] = [
108
115
  label: "Docs",
109
116
  tooltip: "View live docs",
110
117
  defaultSection: "sidebar",
118
+ additionalKeywords: ["reference", "api"],
111
119
  },
112
120
  {
113
121
  type: "dependencies",
@@ -115,6 +123,7 @@ export const PANELS: PanelDescriptor[] = [
115
123
  label: "Dependencies",
116
124
  tooltip: "Explore dependencies",
117
125
  defaultSection: "sidebar",
126
+ additionalKeywords: ["graph", "imports"],
118
127
  },
119
128
  // Developer panel defaults
120
129
  {
@@ -123,6 +132,7 @@ export const PANELS: PanelDescriptor[] = [
123
132
  label: "Errors",
124
133
  tooltip: "View errors",
125
134
  defaultSection: "developer-panel",
135
+ additionalKeywords: ["exceptions", "problems", "diagnostics"],
126
136
  },
127
137
  {
128
138
  type: "scratchpad",
@@ -130,6 +140,7 @@ export const PANELS: PanelDescriptor[] = [
130
140
  label: "Scratchpad",
131
141
  tooltip: "Scratchpad",
132
142
  defaultSection: "developer-panel",
143
+ additionalKeywords: ["scratch", "draft", "playground"],
133
144
  },
134
145
  {
135
146
  type: "tracing",
@@ -137,6 +148,7 @@ export const PANELS: PanelDescriptor[] = [
137
148
  label: "Tracing",
138
149
  tooltip: "View tracing",
139
150
  defaultSection: "developer-panel",
151
+ additionalKeywords: ["profiling", "performance"],
140
152
  },
141
153
  {
142
154
  type: "secrets",
@@ -145,6 +157,7 @@ export const PANELS: PanelDescriptor[] = [
145
157
  tooltip: "Manage secrets",
146
158
  defaultSection: "developer-panel",
147
159
  hidden: isWasm(),
160
+ additionalKeywords: ["env", "environment", "keys", "credentials"],
148
161
  },
149
162
  {
150
163
  type: "logs",
@@ -152,6 +165,7 @@ export const PANELS: PanelDescriptor[] = [
152
165
  label: "Logs",
153
166
  tooltip: "View logs",
154
167
  defaultSection: "developer-panel",
168
+ additionalKeywords: ["console", "stdout"],
155
169
  },
156
170
  {
157
171
  type: "terminal",
@@ -161,6 +175,7 @@ export const PANELS: PanelDescriptor[] = [
161
175
  hidden: isWasm(),
162
176
  defaultSection: "developer-panel",
163
177
  requiredCapability: "terminal",
178
+ additionalKeywords: ["shell", "console", "bash", "command"],
164
179
  },
165
180
  {
166
181
  type: "snippets",
@@ -168,6 +183,7 @@ export const PANELS: PanelDescriptor[] = [
168
183
  label: "Snippets",
169
184
  tooltip: "Snippets",
170
185
  defaultSection: "developer-panel",
186
+ additionalKeywords: ["templates", "examples"],
171
187
  },
172
188
  {
173
189
  type: "cache",
@@ -176,6 +192,7 @@ export const PANELS: PanelDescriptor[] = [
176
192
  tooltip: "View cache",
177
193
  defaultSection: "developer-panel",
178
194
  hidden: !getFeatureFlag("cache_panel"),
195
+ additionalKeywords: ["memory", "memoize"],
179
196
  },
180
197
  ];
181
198
 
@@ -78,6 +78,7 @@ const CommandPalette = () => {
78
78
  return (
79
79
  <CommandItem
80
80
  disabled={props.disabled}
81
+ keywords={hotkey.additionalKeywords}
81
82
  onSelect={() => {
82
83
  addRecentCommand(shortcut);
83
84
  // Close first and then run the action, so the dialog doesn't steal focus
@@ -105,15 +106,18 @@ const CommandPalette = () => {
105
106
  handle,
106
107
  props = {},
107
108
  hotkey,
109
+ additionalKeywords,
108
110
  }: {
109
111
  label: string;
110
112
  handle: () => void;
111
113
  props?: { disabled?: boolean; tooltip?: React.ReactNode };
112
114
  hotkey?: HotkeyAction;
115
+ additionalKeywords?: string[];
113
116
  }) => {
114
117
  return (
115
118
  <CommandItem
116
119
  disabled={props.disabled}
120
+ keywords={additionalKeywords}
117
121
  onSelect={() => {
118
122
  addRecentCommand(label);
119
123
  setOpen(false);
@@ -163,6 +167,7 @@ const CommandPalette = () => {
163
167
  disabled: action.disabled,
164
168
  tooltip: action.tooltip,
165
169
  },
170
+ additionalKeywords: action.additionalKeywords,
166
171
  });
167
172
  }
168
173
  return null;
@@ -190,6 +195,7 @@ const CommandPalette = () => {
190
195
  label: action.label,
191
196
  handle: action.handleHeadless || action.handle,
192
197
  props: { disabled: action.disabled, tooltip: action.tooltip },
198
+ additionalKeywords: action.additionalKeywords,
193
199
  });
194
200
  })}
195
201
  {cellActions.map((action) => {
@@ -200,6 +206,7 @@ const CommandPalette = () => {
200
206
  label: `Cell > ${action.label}`,
201
207
  handle: action.handleHeadless || action.handle,
202
208
  props: { disabled: action.disabled, tooltip: action.tooltip },
209
+ additionalKeywords: action.additionalKeywords,
203
210
  });
204
211
  })}
205
212
  </CommandGroup>
@@ -174,7 +174,9 @@ export const KeyboardShortcuts: React.FC = () => {
174
174
  return;
175
175
  }
176
176
 
177
- let key = e.key.toLowerCase();
177
+ // Single character keys are always lowercase (e.g. "a", "b", "c")
178
+ // But we should preserve the original case for other keys (e.g. "Enter", "Escape")
179
+ let key = e.key.length === 1 ? e.key.toLowerCase() : e.key;
178
180
  // Handle edge cases
179
181
  if (e.key === " ") {
180
182
  key = "Space";