@marimo-team/frontend 0.22.1-dev38 → 0.22.1-dev39

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 (229) hide show
  1. package/dist/assets/{CellStatus-DKyVv7Zj.js → CellStatus-Cf0Jlrcs.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-BUc9LHJJ.js → ConnectedDataExplorerComponent-DUxaLoL7.js} +1 -1
  3. package/dist/assets/{JsonOutput-DboWEw2n.js → JsonOutput-IpD2GLtO.js} +1 -1
  4. package/dist/assets/{MarimoErrorOutput-RmM7djc-.js → MarimoErrorOutput-dTNCLY-Q.js} +1 -1
  5. package/dist/assets/{Plot-C7NE7pEx.js → Plot-BAM1jEAz.js} +72 -72
  6. package/dist/assets/{RenderHTML-Bmn77an6.js → RenderHTML-C5GEp4ca.js} +1 -1
  7. package/dist/assets/{add-cell-with-ai-RyZ9Xe2b.js → add-cell-with-ai-C0J3LyiV.js} +1 -1
  8. package/dist/assets/{add-connection-dialog-DiHC8_uD.js → add-connection-dialog-C42PDYI7.js} +1 -1
  9. package/dist/assets/{agent-panel-CWWFNdAZ.js → agent-panel-CH-jHjEl.js} +1 -1
  10. package/dist/assets/{ai-model-dropdown-Dnf-CxbP.js → ai-model-dropdown-D14GiszF.js} +1 -1
  11. package/dist/assets/{app-config-button-D1Z_xsvC.js → app-config-button-v-557oRb.js} +1 -1
  12. package/dist/assets/{cell-editor-CKnV9MwH.js → cell-editor-Dd6UaL1A.js} +2 -2
  13. package/dist/assets/{cell-link-D4UrIH9w.js → cell-link-Cimoe3Fv.js} +1 -1
  14. package/dist/assets/{cells-ArUhhHls.js → cells-CcsG9Aum.js} +1 -1
  15. package/dist/assets/{chat-display-YmFjOXkV.js → chat-display-hfpeXiYe.js} +1 -1
  16. package/dist/assets/{chat-panel-B76rxYTh.js → chat-panel-DxT370nA.js} +1 -1
  17. package/dist/assets/{chat-ui-BitNq1z6.js → chat-ui-Dv4y0-td.js} +1 -1
  18. package/dist/assets/{column-preview-BvDPfcdF.js → column-preview-ZSErTRFA.js} +1 -1
  19. package/dist/assets/{command-palette-CPRmmNjA.js → command-palette-CjF_cblG.js} +1 -1
  20. package/dist/assets/{common-CRBlPqv5.js → common-BZK7spst.js} +1 -1
  21. package/dist/assets/{components-DwGcJvMB.js → components-D2OlyENc.js} +1 -1
  22. package/dist/assets/{components-BfHGr__b.js → components-DpxyscxU.js} +1 -1
  23. package/dist/assets/{datasource-D9e37ifa.js → datasource-D9nfSxKS.js} +1 -1
  24. package/dist/assets/{dependency-graph-panel-BBmN-Vc7.js → dependency-graph-panel-5MbMtFss.js} +1 -1
  25. package/dist/assets/{documentation-panel-Dm2xtsTq.js → documentation-panel-DPdXS3YO.js} +1 -1
  26. package/dist/assets/{download-7EtMZf2Y.js → download-BFQaUFKI.js} +1 -1
  27. package/dist/assets/{edit-page-B-kCXJQD.js → edit-page-CMd8_Psc.js} +4 -4
  28. package/dist/assets/{error-panel-C3-vTzaH.js → error-panel-DV8jpRsf.js} +1 -1
  29. package/dist/assets/{file-explorer-panel-DyDct4o3.js → file-explorer-panel-Dr_ZNDk3.js} +1 -1
  30. package/dist/assets/{file-icons-JXAG6vK-.js → file-icons-DSJsG_mI.js} +1 -1
  31. package/dist/assets/{floating-outline-B6Qyid7Q.js → floating-outline-Cfa1ESSb.js} +1 -1
  32. package/dist/assets/{focus-DCN0oEe0.js → focus-C5u0JQUq.js} +1 -1
  33. package/dist/assets/{form-Byef3KYr.js → form-3ZUGKch9.js} +1 -1
  34. package/dist/assets/glide-data-editor-a3qLDl-r.js +132 -0
  35. package/dist/assets/{home-page-Bg02jazh.js → home-page-BrqppCUS.js} +1 -1
  36. package/dist/assets/{hooks-BoxLBXGI.js → hooks-CHE17GG1.js} +1 -1
  37. package/dist/assets/{html-to-image-C5XSE7QT.js → html-to-image-BRbQwG7G.js} +1 -1
  38. package/dist/assets/{index-B1HqiNNr.js → index-Bt8G6SSE.js} +8 -8
  39. package/dist/assets/{kiosk-mode-CriCUOI1.js → kiosk-mode-Cu86-jaD.js} +1 -1
  40. package/dist/assets/{layout-BjQtqcnj.js → layout-B-lTkLKA.js} +1 -1
  41. package/dist/assets/{logs-panel-CoWO9c8s.js → logs-panel-CNVgwoHO.js} +1 -1
  42. package/dist/assets/{markdown-renderer-CyUc0f8D.js → markdown-renderer-B91NzmVT.js} +1 -1
  43. package/dist/assets/{name-cell-input-DeM6upjB.js → name-cell-input-hsV_b1Op.js} +1 -1
  44. package/dist/assets/{outline-panel-C4P3wA7Z.js → outline-panel-C3jvSnZF.js} +1 -1
  45. package/dist/assets/{packages-panel-DnrjjQDF.js → packages-panel-0_Z5vM7i.js} +1 -1
  46. package/dist/assets/{panels-aBXT7_tR.js → panels-uc8QhzpO.js} +1 -1
  47. package/dist/assets/{process-output-e_aMblRk.js → process-output-CsvKn_Mr.js} +1 -1
  48. package/dist/assets/{readonly-python-code-CVgh88Tn.js → readonly-python-code-oFCRG7Wt.js} +1 -1
  49. package/dist/assets/{run-page-yA3m6QEA.js → run-page-DKCqiq_f.js} +1 -1
  50. package/dist/assets/{scratchpad-panel-Cul3iUG0.js → scratchpad-panel-ChHLgDv_.js} +1 -1
  51. package/dist/assets/{session-panel-CzPIEKo8.js → session-panel-CPKKt31q.js} +1 -1
  52. package/dist/assets/{snippets-panel-DQgE3W8I.js → snippets-panel-CDqEDwpY.js} +1 -1
  53. package/dist/assets/{spec-CBbUxOvL.js → spec-CFx2bitO.js} +1 -1
  54. package/dist/assets/{state-pGNeffyB.js → state-BBVlYaRC.js} +1 -1
  55. package/dist/assets/{state-C79RsVoe.js → state-C93JW11U.js} +1 -1
  56. package/dist/assets/{textarea-DqzNK0s9.js → textarea-DJEKmYtw.js} +1 -1
  57. package/dist/assets/{tracing-BUFVOmZw.js → tracing-CLWi5jD3.js} +1 -1
  58. package/dist/assets/{tracing-panel-BsLloPWd.js → tracing-panel-ksnvVrMH.js} +2 -2
  59. package/dist/assets/{useAddCell-cC7JUC0q.js → useAddCell-mJ1PkF-E.js} +1 -1
  60. package/dist/assets/{useCellActionButton-BiYBXHfb.js → useCellActionButton-4HWj1rt3.js} +1 -1
  61. package/dist/assets/{useDeleteCell-D2p4Dz0U.js → useDeleteCell-B0OAS0ly.js} +1 -1
  62. package/dist/assets/{useDependencyPanelTab-c5-eXlcr.js → useDependencyPanelTab-BuZ0fgAR.js} +1 -1
  63. package/dist/assets/useLifecycle-N3bfh_O1.js +1 -0
  64. package/dist/assets/{useNotebookActions-A-2lB6Y1.js → useNotebookActions-DuHUqtII.js} +1 -1
  65. package/dist/assets/{useRunCells-DgBY-vh9.js → useRunCells-Du76UV1R.js} +1 -1
  66. package/dist/assets/{useSplitCell-SS0kKwVk.js → useSplitCell-CeL7eJq1.js} +1 -1
  67. package/dist/index.html +24 -24
  68. package/package.json +1 -1
  69. package/src/__mocks__/common.ts +4 -4
  70. package/src/components/chat/acp/agent-panel.tsx +2 -2
  71. package/src/components/data-table/__tests__/columns.test.tsx +7 -7
  72. package/src/components/data-table/cell-hover-template/types.ts +1 -1
  73. package/src/components/data-table/cell-hover-text/types.ts +1 -1
  74. package/src/components/data-table/cell-selection/__tests__/feature.test.ts +1 -1
  75. package/src/components/data-table/cell-selection/types.ts +1 -1
  76. package/src/components/data-table/cell-styling/types.ts +1 -1
  77. package/src/components/data-table/charts/chart-spec/altair-generator.ts +2 -2
  78. package/src/components/data-table/column-formatting/types.ts +2 -2
  79. package/src/components/data-table/column-summary/legacy-chart-spec.ts +1 -1
  80. package/src/components/data-table/column-wrapping/types.ts +1 -1
  81. package/src/components/data-table/copy-column/types.ts +1 -1
  82. package/src/components/data-table/focus-row/types.ts +1 -1
  83. package/src/components/data-table/loading-table.tsx +1 -1
  84. package/src/components/data-table/range-focus/__tests__/atoms.test.ts +2 -2
  85. package/src/components/data-table/range-focus/atoms.ts +2 -2
  86. package/src/components/dependency-graph/dependency-graph-tree.tsx +1 -1
  87. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +1 -1
  88. package/src/components/editor/ai/ai-completion-editor.tsx +1 -1
  89. package/src/components/editor/app-container.tsx +1 -1
  90. package/src/components/editor/chrome/panels/empty-state.tsx +1 -0
  91. package/src/components/editor/controls/keyboard-shortcuts.tsx +1 -1
  92. package/src/components/editor/navigation/__tests__/navigation.test.ts +1 -1
  93. package/src/components/editor/navigation/navigation.ts +1 -1
  94. package/src/components/editor/notebook-cell.tsx +1 -1
  95. package/src/components/editor/output/JsonOutput.tsx +4 -4
  96. package/src/components/editor/output/ansi-reduce.ts +2 -2
  97. package/src/components/editor/output/console/ConsoleOutput.tsx +1 -1
  98. package/src/components/editor/renderers/cells-renderer.tsx +1 -1
  99. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +1 -1
  100. package/src/components/editor/renderers/plugins.ts +1 -1
  101. package/src/components/editor/renderers/slides-layout/types.ts +2 -2
  102. package/src/components/editor/renderers/vertical-layout/__tests__/useFocusFirstEditor.test.ts +2 -2
  103. package/src/components/editor/renderers/vertical-layout/__tests__/vertical-layout.test.ts +1 -1
  104. package/src/components/find-replace/find-replace.tsx +3 -1
  105. package/src/components/forms/form.tsx +1 -1
  106. package/src/components/forms/options.ts +1 -1
  107. package/src/components/static-html/static-banner.tsx +2 -2
  108. package/src/components/terminal/terminal.tsx +4 -4
  109. package/src/components/ui/button.tsx +1 -1
  110. package/src/components/ui/command.tsx +1 -1
  111. package/src/core/ai/context/providers/__tests__/datasource.test.ts +1 -1
  112. package/src/core/ai/context/providers/__tests__/error.test.ts +1 -1
  113. package/src/core/ai/context/providers/__tests__/variable.test.ts +1 -1
  114. package/src/core/ai/context/registry.ts +2 -2
  115. package/src/core/ai/tools/registry.ts +1 -1
  116. package/src/core/cells/__tests__/cells.test.ts +2 -2
  117. package/src/core/cells/__tests__/scrollCellIntoView.test.ts +1 -1
  118. package/src/core/cells/__tests__/session.test.ts +1 -1
  119. package/src/core/cells/__tests__/utils.test.ts +1 -1
  120. package/src/core/cells/cells.ts +1 -1
  121. package/src/core/cells/ids.ts +1 -1
  122. package/src/core/codemirror/ai/request.ts +1 -1
  123. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +1 -1
  124. package/src/core/codemirror/copilot/__tests__/transport.test.ts +1 -1
  125. package/src/core/codemirror/copilot/language-server.ts +1 -1
  126. package/src/core/codemirror/copilot/types.ts +1 -1
  127. package/src/core/codemirror/facet.ts +1 -1
  128. package/src/core/codemirror/language/__tests__/sql.test.ts +4 -4
  129. package/src/core/codemirror/language/languages/sql/completion-builder.ts +1 -1
  130. package/src/core/codemirror/language/metadata.ts +1 -1
  131. package/src/core/codemirror/language/types.ts +1 -1
  132. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +1 -1
  133. package/src/core/codemirror/lsp/notebook-lsp.ts +1 -1
  134. package/src/core/codemirror/misc/__tests__/dnd.test.ts +1 -1
  135. package/src/core/codemirror/rtc/loro/awareness.ts +1 -1
  136. package/src/core/config/feature-flag.tsx +1 -1
  137. package/src/core/dom/outline.ts +1 -1
  138. package/src/core/export/__tests__/hooks.test.ts +1 -1
  139. package/src/core/hotkeys/__tests__/hotkeys.test.ts +1 -1
  140. package/src/core/hotkeys/shortcuts.ts +1 -1
  141. package/src/core/islands/__tests__/bridge.test.ts +2 -2
  142. package/src/core/islands/bridge.ts +2 -2
  143. package/src/core/islands/components/output-wrapper.tsx +1 -1
  144. package/src/core/islands/parse.ts +1 -1
  145. package/src/core/lsp/__tests__/transport.test.ts +1 -1
  146. package/src/core/network/DeferredRequestRegistry.ts +1 -1
  147. package/src/core/network/__tests__/requests-network.test.ts +1 -1
  148. package/src/core/network/api.ts +2 -2
  149. package/src/core/network/requests-lazy.ts +1 -1
  150. package/src/core/network/requests-toasting.tsx +1 -1
  151. package/src/core/static/files.ts +1 -1
  152. package/src/core/vscode/vscode-bindings.ts +1 -1
  153. package/src/core/wasm/bridge.ts +3 -3
  154. package/src/core/wasm/worker/tracer.ts +1 -1
  155. package/src/core/websocket/useWebSocket.tsx +2 -2
  156. package/src/css/globals.css +37 -61
  157. package/src/custom.d.ts +1 -1
  158. package/src/hooks/__tests__/useDuplicateShortcuts.test.ts +2 -2
  159. package/src/hooks/debug.ts +3 -3
  160. package/src/hooks/useDebounce.ts +1 -1
  161. package/src/hooks/useEventListener.ts +1 -1
  162. package/src/hooks/useHotkey.ts +1 -1
  163. package/src/hooks/useLifecycle.ts +2 -2
  164. package/src/hooks/useNonce.ts +1 -1
  165. package/src/hooks/useResizeObserver.ts +2 -2
  166. package/src/main.tsx +1 -1
  167. package/src/plugins/core/RenderHTML.tsx +3 -3
  168. package/src/plugins/core/__test__/registerReactComponent.test.ts +1 -1
  169. package/src/plugins/core/registerReactComponent.tsx +4 -4
  170. package/src/plugins/core/rpc.ts +1 -1
  171. package/src/plugins/impl/DataTablePlugin.tsx +1 -1
  172. package/src/plugins/impl/FileBrowserPlugin.tsx +1 -1
  173. package/src/plugins/impl/FormPlugin.tsx +1 -1
  174. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +1 -1
  175. package/src/plugins/impl/anywidget/AnyWidgetPlugin.tsx +1 -1
  176. package/src/plugins/impl/anywidget/model.ts +1 -1
  177. package/src/plugins/impl/anywidget/types.ts +2 -2
  178. package/src/plugins/impl/anywidget/widget-binding.ts +1 -1
  179. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  180. package/src/plugins/impl/chat/chat-ui.tsx +1 -1
  181. package/src/plugins/impl/data-editor/glide-data-editor.tsx +1 -1
  182. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +2 -2
  183. package/src/plugins/impl/data-explorer/components/query-form.tsx +1 -1
  184. package/src/plugins/impl/data-explorer/functions/function.ts +1 -1
  185. package/src/plugins/impl/data-explorer/queries/types.ts +1 -1
  186. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -1
  187. package/src/plugins/impl/data-frames/forms/renderers.tsx +1 -1
  188. package/src/plugins/impl/data-frames/utils/operators.ts +1 -1
  189. package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +1 -1
  190. package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +1 -1
  191. package/src/plugins/impl/panel/PanelPlugin.tsx +2 -2
  192. package/src/plugins/impl/plotly/Plot.tsx +3 -3
  193. package/src/plugins/impl/vega/batched.ts +1 -1
  194. package/src/plugins/impl/vega/make-selectable.ts +1 -1
  195. package/src/plugins/impl/vega/types.ts +1 -1
  196. package/src/plugins/layout/DownloadPlugin.tsx +1 -1
  197. package/src/plugins/layout/LazyPlugin.tsx +1 -1
  198. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  199. package/src/plugins/layout/mermaid/mermaid.tsx +1 -1
  200. package/src/plugins/plugins.ts +1 -1
  201. package/src/stories/data-explorer.stories.tsx +1 -1
  202. package/src/stories/dataframe.stories.tsx +1 -1
  203. package/src/stories/editor.stories.tsx +1 -1
  204. package/src/stories/select.stories.tsx +1 -1
  205. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  206. package/src/utils/Logger.ts +1 -1
  207. package/src/utils/__tests__/arrays.test.ts +1 -1
  208. package/src/utils/__tests__/blob.test.ts +1 -1
  209. package/src/utils/__tests__/dates.test.ts +1 -1
  210. package/src/utils/__tests__/errors.test.ts +1 -1
  211. package/src/utils/__tests__/objects.test.ts +3 -3
  212. package/src/utils/__tests__/waitForWs.test.ts +1 -1
  213. package/src/utils/arrays.ts +1 -1
  214. package/src/utils/assertNever.ts +1 -1
  215. package/src/utils/batch-requests.ts +2 -2
  216. package/src/utils/createReducer.ts +2 -2
  217. package/src/utils/id-tree.tsx +2 -2
  218. package/src/utils/idle.ts +1 -1
  219. package/src/utils/invariant.ts +1 -2
  220. package/src/utils/maps.ts +1 -1
  221. package/src/utils/math.ts +0 -1
  222. package/src/utils/multi-map.ts +1 -1
  223. package/src/utils/objects.ts +1 -1
  224. package/src/utils/once.ts +2 -2
  225. package/src/utils/staticImplements.ts +1 -1
  226. package/src/utils/storage/jotai.ts +1 -1
  227. package/src/utils/tracer.ts +2 -2
  228. package/dist/assets/glide-data-editor-CDqunAkw.js +0 -132
  229. package/dist/assets/useLifecycle-D202VvPd.js +0 -1
@@ -469,7 +469,7 @@ export const Chatbot: React.FC<Props> = (props) => {
469
469
  resetInput();
470
470
  }}
471
471
  ref={formRef}
472
- // biome-ignore lint/a11y/useSemanticElements: inert is used to disable the entire form
472
+ // oxlint-ignore-next-line -- inert is used to disable the entire form
473
473
  inert={props.disabled || undefined}
474
474
  className={cn(
475
475
  "flex w-full border-t border-(--slate-6) px-2 py-1 items-center",
@@ -227,7 +227,7 @@ export const GlideDataEditor = <T,>({
227
227
 
228
228
  // Force re-render to update the total rows
229
229
  rerender();
230
- // eslint-disable-next-line react-hooks/exhaustive-deps
230
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
231
231
  }, [data.length]);
232
232
 
233
233
  const getCellContent = useCallback(
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-base-to-string */
2
+ /* oxlint-disable typescript/no-base-to-string */
3
3
  import * as cql from "compassql/build/src";
4
4
  import { createStore, Provider, useAtomValue } from "jotai";
5
5
  import { ListFilterIcon } from "lucide-react";
@@ -268,7 +268,7 @@ const HorizontalCarouselItem = ({
268
268
  );
269
269
  };
270
270
  // Make the plot responsive
271
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
271
+ // oxlint-disable-next-line typescript/no-explicit-any
272
272
  function makeResponsive(spec: any) {
273
273
  // NOTE: for row/column, this applies to the inner plot
274
274
  // so we tend to overflow due to the legends,
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-base-to-string */
2
+ /* oxlint-disable typescript/no-base-to-string */
3
3
 
4
4
  import { ExpandedType } from "compassql/build/src/query/expandedtype";
5
5
  import { PrimitiveType, type Schema } from "compassql/build/src/schema";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-base-to-string */
2
+ /* oxlint-disable typescript/no-base-to-string */
3
3
  import type { FieldQuery } from "compassql/build/src/query/encoding";
4
4
  import { type FieldFunction, isAggregateOp, type TimeUnitOp } from "./types";
5
5
 
@@ -28,7 +28,7 @@ export interface Result {
28
28
  limit: number;
29
29
  }
30
30
 
31
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-redundant-type-constituents
31
+ // oxlint-disable-next-line typescript/no-explicit-any, typescript/no-redundant-type-constituents
32
32
  export type TopLevelFacetedUnitSpec = TopLevel<FacetedUnitSpec<any, any>> & {
33
33
  data: NamedData;
34
34
  };
@@ -54,7 +54,7 @@ interface Data {
54
54
  lazy: boolean;
55
55
  }
56
56
 
57
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
57
+ // oxlint-disable-next-line typescript/consistent-type-definitions
58
58
  type PluginFunctions = {
59
59
  get_dataframe: (req: {}) => Promise<{
60
60
  url: string;
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  import React, { useEffect } from "react";
5
5
  import {
@@ -194,7 +194,7 @@ export function isConditionValueValid(operator: string, value: unknown) {
194
194
  return possibleSchemas.some((schema) => schema.safeParse(value).success);
195
195
  }
196
196
 
197
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
197
+ // oxlint-disable-next-line typescript/no-explicit-any
198
198
  const safeGet = (obj: any, key: string): [z.ZodType] | [] => {
199
199
  if (obj[key]) {
200
200
  return obj[key];
@@ -57,7 +57,7 @@ const MatplotlibComponent = (props: MatplotlibState) => {
57
57
  controller.abort();
58
58
  instance.current = null;
59
59
  };
60
- // eslint-disable-next-line react-hooks/exhaustive-deps
60
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
61
61
  }, []);
62
62
 
63
63
  // No dependency array: intentionally syncs all props into the imperative
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  import { useCallback, useEffect, useRef } from "react";
5
5
  import { z } from "zod";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  import { useCallback, useEffect, useRef, useState } from "react";
5
5
  import { z } from "zod";
@@ -74,7 +74,7 @@ interface PanelData {
74
74
 
75
75
  type T = Record<string, unknown>;
76
76
 
77
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
77
+ // oxlint-disable-next-line typescript/consistent-type-definitions
78
78
  type PluginFunctions = {
79
79
  send_to_widget: <T>(req: {
80
80
  message?: unknown;
@@ -4,7 +4,7 @@ import type * as PlotlyTypes from "plotly.js";
4
4
  // Import the pre-built dist bundle, not the source entry point.
5
5
  // The source entry point requires Node.js polyfills (e.g. `buffer/`)
6
6
  // that are unavailable in the browser/bundler environment.
7
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
7
+ // oxlint-disable-next-line typescript/ban-ts-comment
8
8
  // @ts-expect-error — no type declarations for dist path, we use PlotlyTypes above
9
9
  import Plotly from "plotly.js/dist/plotly";
10
10
  import { useEffect, useRef } from "react";
@@ -107,7 +107,7 @@ export const Plot = (props: PlotProps) => {
107
107
 
108
108
  const plotlyEl = el as unknown as PlotlyElement;
109
109
 
110
- // eslint-disable-next-line @typescript-eslint/ban-types -- Plotly's event API uses generic function references
110
+ // oxlint-disable-next-line typescript/ban-types -- Plotly's event API uses generic function references
111
111
  const attached: {
112
112
  plotlyName: string;
113
113
  handler: (...args: never[]) => void;
@@ -131,7 +131,7 @@ export const Plot = (props: PlotProps) => {
131
131
  }
132
132
  };
133
133
  // Re-sync whenever any event handler prop changes
134
- // eslint-disable-next-line react-hooks/exhaustive-deps
134
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
135
135
  },
136
136
  EVENT_NAMES.map((name) => props[propName(name)]),
137
137
  );
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  import { tableFromIPC } from "@uwdata/flechette";
5
5
  import { batch } from "@/utils/batch-requests";
@@ -160,7 +160,7 @@ function findCommonParams(
160
160
  if (!signatureCounts.has(signature)) {
161
161
  signatureCounts.set(signature, { count: 0, param });
162
162
  }
163
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
163
+ // oxlint-disable-next-line typescript/no-non-null-assertion
164
164
  signatureCounts.get(signature)!.count++;
165
165
  }
166
166
  }
@@ -25,7 +25,7 @@ export type {
25
25
  } from "vega-lite/types_unstable/spec/unit.js";
26
26
 
27
27
  export type VegaLiteUnitSpec = TopLevelUnitSpec<Field>;
28
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ // oxlint-disable-next-line typescript/no-explicit-any
29
29
  export type GenericVegaSpec = GenericUnitSpec<any, any, any>;
30
30
  export type EncodingType = keyof Encoding<Field>;
31
31
  export type Encodings = Encoding<Field>;
@@ -35,7 +35,7 @@ interface Data {
35
35
  lazy?: boolean;
36
36
  }
37
37
 
38
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
38
+ // oxlint-disable-next-line typescript/consistent-type-definitions
39
39
  type Functions = {
40
40
  /**
41
41
  * Function to call for lazy loading
@@ -14,7 +14,7 @@ interface Data {
14
14
  showLoadingIndicator: boolean;
15
15
  }
16
16
 
17
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
17
+ // oxlint-disable-next-line typescript/consistent-type-definitions
18
18
  type PluginFunctions = {
19
19
  load: (req: {}) => Promise<{
20
20
  html: string;
@@ -69,7 +69,7 @@ const RoutesComponent = ({
69
69
  }, [handleFindMatch]);
70
70
 
71
71
  if (!matched) {
72
- // biome-ignore lint/complexity/noUselessFragments: this is intentional
72
+ // oxlint-disable-next-line react/jsx-no-useless-fragment
73
73
  return <></>;
74
74
  }
75
75
 
@@ -63,7 +63,7 @@ function randomAlpha() {
63
63
  }
64
64
 
65
65
  const Mermaid: React.FC<Props> = ({ diagram }) => {
66
- // eslint-disable-next-line react/hook-use-state
66
+ // oxlint-disable-next-line react/hook-use-state
67
67
  const [id] = useState(() => randomAlpha());
68
68
 
69
69
  const darkMode = useTheme().theme === "dark";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  import { NavigationMenuPlugin } from "@/plugins/layout/NavigationMenuPlugin";
5
5
  import { initializeUIElement } from "../core/dom/ui-element";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable react-hooks/rules-of-hooks */
2
+ /* oxlint-disable react-hooks/rules-of-hooks */
3
3
 
4
4
  import type { Meta, StoryObj } from "@storybook/react-vite";
5
5
  import { useState } from "react";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable react-hooks/rules-of-hooks */
2
+ /* oxlint-disable react-hooks/rules-of-hooks */
3
3
  import type { Meta, StoryObj } from "@storybook/react-vite";
4
4
  import { useState } from "react";
5
5
  import { DataFrameComponent } from "@/plugins/impl/data-frames/DataFramePlugin";
@@ -52,7 +52,7 @@ const Editor = (opts: { extensions?: Extension[] }): React.ReactNode => {
52
52
  });
53
53
 
54
54
  return () => view.destroy();
55
- // eslint-disable-next-line react-hooks/exhaustive-deps
55
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
56
56
  }, [ref.current]);
57
57
 
58
58
  return <div className="cm" ref={ref} />;
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable react-hooks/rules-of-hooks */
2
+ /* oxlint-disable react-hooks/rules-of-hooks */
3
3
 
4
4
  import type { Meta, StoryObj } from "@storybook/react-vite";
5
5
  import { useState } from "react";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable react-hooks/rules-of-hooks */
2
+ /* oxlint-disable react-hooks/rules-of-hooks */
3
3
  import type { Meta, StoryObj } from "@storybook/react-vite";
4
4
  import { useState } from "react";
5
5
  import { SwitchableMultiSelect } from "@/components/forms/switchable-multi-select";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /** biome-ignore-all lint/suspicious/noConsole: For console logging */
2
+ /* oxlint-disable no-console -- For console logging */
3
3
 
4
4
  import { Functions } from "./functions";
5
5
 
@@ -124,7 +124,7 @@ describe("arrays", () => {
124
124
  });
125
125
 
126
126
  it("should handle undefined/null array", () => {
127
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
127
+ // oxlint-disable-next-line typescript/no-explicit-any
128
128
  expect(arrayToggle(undefined as any, 1)).toEqual([1]);
129
129
  });
130
130
 
@@ -30,7 +30,7 @@ describe("Blob serialization and deserialization", () => {
30
30
  const serialized = await serializeBlob(testBlob);
31
31
  const deserialized = deserializeBlob(serialized);
32
32
  const reader = new FileReader();
33
- // eslint-disable-next-line unicorn/prefer-blob-reading-methods
33
+ // oxlint-disable-next-line unicorn/prefer-blob-reading-methods
34
34
  reader.readAsText(deserialized);
35
35
  await new Promise((resolve) => {
36
36
  reader.onload = () => {
@@ -73,7 +73,7 @@ describe("dates", () => {
73
73
 
74
74
  describe("with different locales", () => {
75
75
  // Save original implementation
76
- // eslint-disable-next-line @typescript-eslint/unbound-method
76
+ // oxlint-disable-next-line typescript/unbound-method
77
77
  const originalToLocaleDateString = Date.prototype.toLocaleDateString;
78
78
 
79
79
  afterAll(() => {
@@ -46,7 +46,7 @@ describe("prettyError", () => {
46
46
  });
47
47
 
48
48
  it("handles circular references", () => {
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ // oxlint-disable-next-line typescript/no-explicit-any
50
50
  const circular: any = { foo: "bar" };
51
51
  circular.self = circular;
52
52
  expect(prettyError(circular)).toBe("[object Object]");
@@ -29,9 +29,9 @@ describe("Objects", () => {
29
29
  });
30
30
 
31
31
  it("should return falsy input unchanged", () => {
32
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ // oxlint-disable-next-line typescript/no-explicit-any
33
33
  expect(Objects.mapValues(null as any, (v) => v)).toBe(null);
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ // oxlint-disable-next-line typescript/no-explicit-any
35
35
  expect(Objects.mapValues(undefined as any, (v) => v)).toBe(undefined);
36
36
  });
37
37
  });
@@ -249,7 +249,7 @@ describe("Objects", () => {
249
249
 
250
250
  it("should handle omitting non-existent keys", () => {
251
251
  const obj = { a: 1, b: 2 };
252
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
252
+ // oxlint-disable-next-line typescript/no-explicit-any
253
253
  const result = Objects.omit(obj, ["c" as any]);
254
254
  expect(result).toEqual({ a: 1, b: 2 });
255
255
  });
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
4
  import { waitForWs } from "../waitForWs";
5
5
 
@@ -53,7 +53,7 @@ export function arrayShallowEquals<T>(a: T[], b: T[]): boolean {
53
53
  }
54
54
 
55
55
  export const Arrays = {
56
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
+ // oxlint-disable-next-line typescript/no-explicit-any
57
57
  EMPTY: [] as any,
58
58
  zip: <T, U>(a: T[], b: U[]): [T, U][] => {
59
59
  invariant(a.length === b.length, "Arrays must be the same length");
@@ -15,6 +15,6 @@ export function assertNever(x: never): never {
15
15
  */
16
16
  export function logNever(x: never): void {
17
17
  Logger.warn(`Unexpected object: ${JSON.stringify(x)}`);
18
- // biome-ignore lint/correctness/noVoidTypeReturn: <explanation>
18
+ // oxlint-ignore-next-line -- noVoidTypeReturn: function returns void but value is needed for exhaustiveness
19
19
  return x;
20
20
  }
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  /**
5
5
  * Debounces multiple calls to a loader function, returning the same promise for
@@ -14,7 +14,7 @@ export function batch<T, REQ extends unknown[]>(
14
14
  return (...args: REQ): Promise<T> => {
15
15
  const key = toKey(...args);
16
16
  if (requestCache.has(key)) {
17
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
17
+ // oxlint-disable-next-line typescript/no-non-null-assertion
18
18
  return requestCache.get(key)!;
19
19
  }
20
20
 
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  import { atom, useSetAtom } from "jotai";
5
5
  import type { Reducer } from "react";
@@ -139,7 +139,7 @@ export function createReducerAndAtoms<
139
139
  );
140
140
  }
141
141
 
142
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
142
+ // oxlint-disable-next-line typescript/no-non-null-assertion
143
143
  return actionsMap.get(setState)!;
144
144
  }
145
145
 
@@ -43,7 +43,7 @@ export class TreeNode<T> {
43
43
  const stack = [...this.children];
44
44
 
45
45
  while (stack.length > 0) {
46
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
46
+ // oxlint-disable-next-line typescript/no-non-null-assertion
47
47
  const node = stack.pop()!;
48
48
  count++;
49
49
 
@@ -62,7 +62,7 @@ export class TreeNode<T> {
62
62
  const stack = [...this.children];
63
63
 
64
64
  while (stack.length > 0) {
65
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
65
+ // oxlint-disable-next-line typescript/no-non-null-assertion
66
66
  const node = stack.pop()!;
67
67
  result.push(node.value);
68
68
 
package/src/utils/idle.ts CHANGED
@@ -7,7 +7,7 @@
7
7
  */
8
8
  export function onIdle(callback: () => void) {
9
9
  if ("scheduler" in window) {
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ // oxlint-disable-next-line typescript/no-explicit-any
11
11
  (window as any).scheduler.postTask(callback, {
12
12
  priority: "background",
13
13
  });
@@ -29,8 +29,7 @@ export function invariant(
29
29
  if (!expression) {
30
30
  if (import.meta.env.DEV) {
31
31
  // Triggers a breakpoint in development; stripped out in production builds.
32
- // biome-ignore lint/suspicious/noDebugger: code block is stripped out in production builds
33
- debugger; // eslint-disable-line no-debugger
32
+ debugger; // oxlint-disable-line no-debugger -- stripped out in production builds
34
33
  }
35
34
  throw new Error(msg);
36
35
  }
package/src/utils/maps.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  import { Logger } from "./Logger";
5
5
 
package/src/utils/math.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- // biome-ignore lint: preferObjectParams ok to ignore for common util
4
3
  export function clamp(value: number, min: number, max: number) {
5
4
  return Math.min(Math.max(value, min), max);
6
5
  }
@@ -16,7 +16,7 @@ export class MultiMap<K, V> {
16
16
 
17
17
  add(key: K, value: V): void {
18
18
  if (this.map.has(key)) {
19
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
19
+ // oxlint-disable-next-line typescript/no-non-null-assertion
20
20
  this.map.get(key)!.push(value);
21
21
  } else {
22
22
  this.map.set(key, [value]);
@@ -106,7 +106,7 @@ export const Objects = {
106
106
  return Objects.filter(obj, (_, key) => !set.has(key));
107
107
  },
108
108
 
109
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
+ // oxlint-disable-next-line typescript/no-explicit-any
110
110
  pick<V extends Record<string, any>, K extends string>(
111
111
  obj: V,
112
112
  keys: readonly K[],
package/src/utils/once.ts CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { arrayShallowEquals } from "./arrays";
4
4
 
5
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ // oxlint-disable-next-line typescript/no-explicit-any
6
6
  export function once<T extends (...args: any[]) => any>(fn: T): T {
7
7
  let result: ReturnType<T>;
8
8
  let called = false;
@@ -18,7 +18,7 @@ export function once<T extends (...args: any[]) => any>(fn: T): T {
18
18
  } as T;
19
19
  }
20
20
 
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ // oxlint-disable-next-line typescript/no-explicit-any
22
22
  export function memoizeLastValue<T extends (...args: any[]) => any>(fn: T): T {
23
23
  let result: ReturnType<T>;
24
24
  let lastArgs: Parameters<T> | undefined;
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  export function staticImplements<T>() {
3
3
  return <U extends T>(_constructor: U) => {
4
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
4
+ // oxlint-disable-next-line typescript/no-unused-expressions
5
5
  _constructor;
6
6
  };
7
7
  }
@@ -46,5 +46,5 @@ export function adaptForLocalStorage<Value, Serializable>(opts: {
46
46
  /**
47
47
  * A JSON storage adapter that uses the best available storage.
48
48
  */
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ // oxlint-disable-next-line typescript/no-explicit-any
50
50
  export const jotaiJsonStorage = createJSONStorage<any>(() => availableStorage);
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- /* eslint-disable @typescript-eslint/no-explicit-any */
4
- /** biome-ignore-all lint/suspicious/noConsole: for debugging */
3
+ /* oxlint-disable typescript/no-explicit-any */
4
+ /* oxlint-disable no-console -- for debugging */
5
5
 
6
6
  import { Logger } from "./Logger";
7
7