@marimo-team/frontend 0.25.3-dev91 → 0.25.3-dev92

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 (113) hide show
  1. package/dist/assets/{CellStatus-DYRvLOiP.js → CellStatus-DwPjR2_8.js} +1 -1
  2. package/dist/assets/{ErrorBoundary-BKQo68Df.js → ErrorBoundary-BhXbaVBa.js} +2 -2
  3. package/dist/assets/{JsonOutput-DryOywaN.js → JsonOutput-Dti6dc1X.js} +3 -3
  4. package/dist/assets/{MarimoErrorOutput-XrTcOYTI.js → MarimoErrorOutput-BKvntkfq.js} +1 -1
  5. package/dist/assets/{RenderHTML-DaVbCAsb.js → RenderHTML-DUI47UDk.js} +1 -1
  6. package/dist/assets/{RunButton-D3ScLvwb.js → RunButton-CLhvSMZG.js} +1 -1
  7. package/dist/assets/__vite-browser-external-8vDMR0Kk.js +1 -0
  8. package/dist/assets/__vite-browser-external-mKcnhO20.js +1 -0
  9. package/dist/assets/{add-cell-with-ai-BKk0pvon.js → add-cell-with-ai-ev63rhN4.js} +1 -1
  10. package/dist/assets/{add-connection-dialog-CNIwGJVL.js → add-connection-dialog-2Tgl7Mjn.js} +1 -1
  11. package/dist/assets/{agent-panel-6t16-QG0.js → agent-panel-D4lNacey.js} +1 -1
  12. package/dist/assets/{ai-model-dropdown-prnCk5hq.js → ai-model-dropdown-BqjVBWQp.js} +2 -2
  13. package/dist/assets/{app-config-button-O_yI5nzB.js → app-config-button-BToMQZBN.js} +1 -1
  14. package/dist/assets/{blob-FjxwDE1i.js → blob-DMgg2NZo.js} +1 -1
  15. package/dist/assets/{cell-editor-CM_kQ_VW.js → cell-editor-DGRa0o5e.js} +1 -1
  16. package/dist/assets/{cell-link-D8EbRFJJ.js → cell-link-D6rI90gy.js} +1 -1
  17. package/dist/assets/{cells-DfF1DLV_.js → cells-Cetiartc.js} +1 -1
  18. package/dist/assets/{chat-display-BtQI9LeB.js → chat-display-CgpJ6XM4.js} +1 -1
  19. package/dist/assets/{chat-panel-tuUN0wet.js → chat-panel-Djs36Uy4.js} +1 -1
  20. package/dist/assets/{chat-ui-Bb-HxAv4.js → chat-ui-B_JGdp0E.js} +1 -1
  21. package/dist/assets/{column-preview-CqFSXTtf.js → column-preview-BIpGfTJf.js} +1 -1
  22. package/dist/assets/{command-palette-CkDj29px.js → command-palette-9pxpuKHs.js} +1 -1
  23. package/dist/assets/{common-D2oGA09G.js → common-D0jeQZnr.js} +1 -1
  24. package/dist/assets/{components-1zsrzJ_K.js → components-DkQChRNr.js} +1 -1
  25. package/dist/assets/{datasource-rV_-mqbc.js → datasource-BXFNO5td.js} +1 -1
  26. package/dist/assets/{dependency-graph-panel-By-cv0Nw.js → dependency-graph-panel-BFVIEz0s.js} +1 -1
  27. package/dist/assets/{documentation-panel-DHMjvOPt.js → documentation-panel-CaUMsgkg.js} +1 -1
  28. package/dist/assets/{download-CMTzX3rG.js → download-C-q7-OBT.js} +1 -1
  29. package/dist/assets/{edit-page-Bgkov1Jy.js → edit-page-VhYLLklC.js} +5 -5
  30. package/dist/assets/{error-entries-BGCjRkVy.js → error-entries-p_IDc4iy.js} +1 -1
  31. package/dist/assets/{error-panel-BDTFHLEt.js → error-panel-B0BwSTRv.js} +1 -1
  32. package/dist/assets/feedback-button-BFoleTOt.js +1 -0
  33. package/dist/assets/{feedback-button-C-ScLxY2.js → feedback-button-D0HjY39R.js} +1 -1
  34. package/dist/assets/{file-explorer-panel-B9jBSwhj.js → file-explorer-panel-BLIEpQzW.js} +1 -1
  35. package/dist/assets/{file-name-input-DIvrcC82.js → file-name-input-CZ_W4QXG.js} +1 -1
  36. package/dist/assets/{floating-outline-DJnZ45VA.js → floating-outline-D7DFh_29.js} +1 -1
  37. package/dist/assets/{gallery-page-CHJD1mdU.js → gallery-page-BLgoybvc.js} +1 -1
  38. package/dist/assets/{glide-data-editor-BsE9Em-a.js → glide-data-editor-DVpOmYXo.js} +1 -1
  39. package/dist/assets/{home-page-CCbdig5p.js → home-page--OLVJPiE.js} +1 -1
  40. package/dist/assets/{hooks-yjSoxKTw.js → hooks-D0Pzb8Q4.js} +1 -1
  41. package/dist/assets/{index-0pnwTVch.js → index-DB50a7AR.js} +5 -5
  42. package/dist/assets/{layout-B2MJFBFp.js → layout-HYpXx9Kc.js} +3 -3
  43. package/dist/assets/{logs-panel-B34vxRV7.js → logs-panel-Cbx5BJ3w.js} +1 -1
  44. package/dist/assets/{markdown-renderer-CkN_xAjW.js → markdown-renderer-B1GLwS-C.js} +1 -1
  45. package/dist/assets/{name-cell-input-eyYneuGK.js → name-cell-input-CgINqxMv.js} +1 -1
  46. package/dist/assets/{outline-panel-rpjpMDYX.js → outline-panel-DaCt5blP.js} +1 -1
  47. package/dist/assets/{packages-panel-gXdFgCro.js → packages-panel-DRKwpeJ2.js} +1 -1
  48. package/dist/assets/{panel-accordion-state-CImIsdc8.js → panel-accordion-state-C4fxJULv.js} +1 -1
  49. package/dist/assets/{panels-DI8gAi31.js → panels-D_TmFEit.js} +1 -1
  50. package/dist/assets/{process-output-BClx23Jv.js → process-output-D1KxMfN7.js} +1 -1
  51. package/dist/assets/{readonly-code-display-JC_YsLL_.js → readonly-code-display-DVn7_uLn.js} +1 -1
  52. package/dist/assets/{readonly-python-code-DeBED4OB.js → readonly-python-code-5F8u1711.js} +1 -1
  53. package/dist/assets/{reveal-component-BoGgZrdo.js → reveal-component-B4rC_fg1.js} +1 -1
  54. package/dist/assets/{run-page-DnvqkxCy.js → run-page-BHdHPiQA.js} +1 -1
  55. package/dist/assets/{runtime-details-state-7JHj3efu.js → runtime-details-state-BLDCeDBF.js} +1 -1
  56. package/dist/assets/{save-worker-BbUSwZRG.js → save-worker-pCkSHhuz.js} +1 -1
  57. package/dist/assets/{scratchpad-panel-DZDmNIPw.js → scratchpad-panel-ChSdhkiu.js} +1 -1
  58. package/dist/assets/{session-panel-B1QB5LN7.js → session-panel-CtQgwbFW.js} +1 -1
  59. package/dist/assets/{snippets-panel-BNjtDbnR.js → snippets-panel-D7PPIwX1.js} +1 -1
  60. package/dist/assets/state-Bd_wAeZf.js +3 -0
  61. package/dist/assets/{state-DhaPGGBO.js → state-pXUWLVXv.js} +1 -1
  62. package/dist/assets/{tracing-Ch4LR62-.js → tracing-WN4XSiAm.js} +1 -1
  63. package/dist/assets/{tracing-panel-B8fX4PhX.js → tracing-panel-BVC4DsH6.js} +2 -2
  64. package/dist/assets/{tree-actions-Zg3Ycse4.js → tree-actions-MaUvbTxA.js} +1 -1
  65. package/dist/assets/{useAddCell-BX9lq_0J.js → useAddCell-D7SKNQll.js} +1 -1
  66. package/dist/assets/{useCellActionButton-D7Ruyes-.js → useCellActionButton-Byz7LlUo.js} +1 -1
  67. package/dist/assets/{useDeleteCell-AbkQI6-c.js → useDeleteCell-D-k2fD1X.js} +1 -1
  68. package/dist/assets/{useDependencyPanelTab-B0b2KkvS.js → useDependencyPanelTab-neRJ4T16.js} +1 -1
  69. package/dist/assets/{useNotebookActions-DJuAUAGI.js → useNotebookActions-Df_jxEKJ.js} +1 -1
  70. package/dist/assets/{useRunCells-CV81rge-.js → useRunCells-AZJD5ITo.js} +1 -1
  71. package/dist/assets/{useSplitCell-BTwCB3JS.js → useSplitCell-CgiU_w77.js} +1 -1
  72. package/dist/assets/{worker-DTQ7oH2A.js → worker-bSCjCvwz.js} +1 -1
  73. package/dist/index.html +20 -20
  74. package/package.json +1 -1
  75. package/src/components/chat/acp/__tests__/state.test.ts +2 -2
  76. package/src/components/data-table/cell-selection/feature.ts +2 -2
  77. package/src/components/data-table/cell-selection/types.ts +2 -2
  78. package/src/components/data-table/column-summary/column-summary.tsx +2 -4
  79. package/src/components/editor/SortableCell.tsx +1 -3
  80. package/src/components/editor/chrome/wrapper/footer-items/runtime-settings.tsx +1 -7
  81. package/src/components/editor/chrome/wrapper/storage.ts +1 -1
  82. package/src/components/editor/output/MarimoTracebackOutput.tsx +1 -1
  83. package/src/components/icons/spinner.tsx +1 -1
  84. package/src/components/ui/alert-dialog.tsx +1 -1
  85. package/src/core/ai/context/providers/datasource.ts +6 -2
  86. package/src/core/cells/session.ts +1 -1
  87. package/src/core/codemirror/__tests__/setup.test.ts +1 -1
  88. package/src/core/codemirror/keymaps/vim.ts +2 -6
  89. package/src/core/codemirror/language/languages/markdown.ts +1 -1
  90. package/src/core/codemirror/language/languages/python.ts +3 -3
  91. package/src/core/kernel/__tests__/RuntimeState.test.ts +1 -1
  92. package/src/core/wasm/bridge.ts +2 -2
  93. package/src/core/wasm/store.ts +3 -3
  94. package/src/core/wasm/worker/bootstrap.ts +1 -1
  95. package/src/core/wasm/worker/getMarimoWheel.ts +1 -1
  96. package/src/plugins/impl/CodeEditorPlugin.tsx +1 -1
  97. package/src/plugins/impl/RangeSliderPlugin.tsx +0 -1
  98. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +1 -1
  99. package/src/plugins/impl/data-explorer/state/reducer.ts +1 -1
  100. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +0 -1
  101. package/src/plugins/impl/panel/PanelPlugin.tsx +1 -1
  102. package/src/plugins/impl/vega/make-selectable.ts +1 -1
  103. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  104. package/src/stories/form-wrapper.stories.tsx +2 -2
  105. package/src/stories/select.stories.tsx +2 -2
  106. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  107. package/src/utils/__tests__/batch-requests.test.ts +3 -3
  108. package/src/utils/blob.ts +1 -1
  109. package/src/utils/zod-utils.ts +1 -3
  110. package/dist/assets/__vite-browser-external-CYO_P3S8.js +0 -1
  111. package/dist/assets/__vite-browser-external-FeDVGZU8.js +0 -1
  112. package/dist/assets/feedback-button-CLRAP9DE.js +0 -1
  113. package/dist/assets/state-DUP4ToPd.js +0 -3
@@ -30,7 +30,7 @@ export interface CellSelectionCell {
30
30
  }
31
31
 
32
32
  // These are additional properties add to the table instance in createTable
33
- export interface CellSelectionInstance<TData extends RowData> {
33
+ export interface CellSelectionInstance {
34
34
  setCellSelection?: (updater: Updater<CellSelectionState>) => void;
35
35
 
36
36
  resetCellSelection?(defaultValue?: CellSelectionState): void;
@@ -44,7 +44,7 @@ declare module "@tanstack/react-table" {
44
44
  TData extends RowData,
45
45
  > extends CellSelectionOptions {}
46
46
 
47
- interface Table<TData extends RowData> extends CellSelectionInstance<TData> {}
47
+ interface Table<TData extends RowData> extends CellSelectionInstance {}
48
48
 
49
49
  interface Cell<TData extends RowData, TValue> extends CellSelectionCell {}
50
50
  }
@@ -16,7 +16,7 @@ export const ColumnChartContext = React.createContext<
16
16
  ColumnChartSpecModel<unknown>
17
17
  >(ColumnChartSpecModel.EMPTY);
18
18
 
19
- interface Props<TData, TValue> {
19
+ interface Props {
20
20
  columnId: string;
21
21
  }
22
22
 
@@ -24,9 +24,7 @@ interface Props<TData, TValue> {
24
24
  // for all calls with the same key.
25
25
  const batchedLoader = createBatchedLoader();
26
26
 
27
- export const TableColumnSummary = <TData, TValue>({
28
- columnId,
29
- }: Props<TData, TValue>) => {
27
+ export const TableColumnSummary = ({ columnId }: Props) => {
30
28
  const { locale } = useLocale();
31
29
 
32
30
  const chartSpecModel = React.use(ColumnChartContext);
@@ -71,7 +71,6 @@ export const SortableCell = React.forwardRef(
71
71
  return (
72
72
  <SortableCellInternal
73
73
  ref={ref}
74
- cellId={cellId}
75
74
  canMoveX={canMoveX}
76
75
  {...props}
77
76
  attributes={attributes}
@@ -86,7 +85,7 @@ export const SortableCell = React.forwardRef(
86
85
  );
87
86
  SortableCell.displayName = "SortableCell";
88
87
 
89
- interface SortableCellInternalProps extends Props {
88
+ interface SortableCellInternalProps extends Omit<Props, "cellId"> {
90
89
  children: React.ReactNode;
91
90
  attributes: DraggableAttributes;
92
91
  listeners: SyntheticListenerMap | undefined;
@@ -99,7 +98,6 @@ interface SortableCellInternalProps extends Props {
99
98
  const SortableCellInternal = React.forwardRef(
100
99
  (
101
100
  {
102
- cellId,
103
101
  canMoveX,
104
102
  children,
105
103
  attributes,
@@ -26,13 +26,7 @@ import { isWasm } from "@/core/wasm/utils";
26
26
  import { cn } from "@/utils/cn";
27
27
  import { FooterItem } from "../footer-item";
28
28
 
29
- interface RuntimeSettingsProps {
30
- className?: string;
31
- }
32
-
33
- export const RuntimeSettings: React.FC<RuntimeSettingsProps> = ({
34
- className,
35
- }) => {
29
+ export const RuntimeSettings: React.FC = () => {
36
30
  const { saveUserConfig } = useRequestClient();
37
31
  const [config, setUserConfig] = useResolvedMarimoConfig();
38
32
 
@@ -15,7 +15,7 @@ let storedValue: string | null = null;
15
15
  */
16
16
  export function createStorage(location: "left" | "bottom"): PanelGroupStorage {
17
17
  return {
18
- getItem(name) {
18
+ getItem(_name) {
19
19
  if (!storedValue) {
20
20
  return storedValue ?? null;
21
21
  }
@@ -274,7 +274,7 @@ export const replaceTracebackFilenames = (domNode: DOMNode) => {
274
274
  return (
275
275
  <div
276
276
  className="inline-block cursor-pointer text-destructive hover:underline"
277
- onClick={(_) => {
277
+ onClick={() => {
278
278
  getRequestClient().openFile({
279
279
  path: info.filePath,
280
280
  lineNumber: info.lineNumber,
@@ -25,7 +25,7 @@ const spinnerVariants = cva("animate-spin", {
25
25
  const Spinner = React.forwardRef<
26
26
  SVGSVGElement,
27
27
  React.SVGProps<SVGSVGElement> & VariantProps<typeof spinnerVariants>
28
- >(({ className, children, centered, size, ...props }, ref) => (
28
+ >(({ className, children: _children, centered, size, ...props }, ref) => (
29
29
  <Loader2Icon
30
30
  ref={ref}
31
31
  className={cn(spinnerVariants({ centered, size }), className)}
@@ -28,7 +28,7 @@ AlertDialogPortal.displayName = AlertDialogPrimitive.Portal.displayName;
28
28
  const AlertDialogOverlay = React.forwardRef<
29
29
  React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
30
30
  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
31
- >(({ className, children, ...props }, ref) => (
31
+ >(({ className, children: _children, ...props }, ref) => (
32
32
  <AlertDialogPrimitive.Overlay
33
33
  className={cn(
34
34
  "fixed inset-0 z-50 bg-background/80 backdrop-blur-xs transition-opacity animate-in fade-in",
@@ -98,8 +98,12 @@ export class DatasourceContextProvider extends AIContextProvider<DatasourceConte
98
98
  public formatContext(item: DatasourceContextItem): string {
99
99
  const data = item.data;
100
100
  // Remove certain fields that are not needed in the context
101
- const { name, display_name, source, ...filteredDatasource } =
102
- data.connection;
101
+ const {
102
+ name,
103
+ display_name: _displayName,
104
+ source: _source,
105
+ ...filteredDatasource
106
+ } = data.connection;
103
107
 
104
108
  let datasource = filteredDatasource;
105
109
  const isInternalEngine = INTERNAL_SQL_ENGINES.has(name as ConnectionName);
@@ -56,7 +56,7 @@ function mergeSessionAndNotebookCells(
56
56
  return {
57
57
  cellIds,
58
58
  sessionCellData: new Map(
59
- cellIds.map((id, idx) => [id, null] as [CellId, SessionCell | null]),
59
+ cellIds.map((id) => [id, null] as [CellId, SessionCell | null]),
60
60
  ),
61
61
  notebookCellData: new Map(
62
62
  cellIds.map(
@@ -100,7 +100,7 @@ function getDuplicateKeymaps(state: EditorState) {
100
100
  (keymap) => keymap,
101
101
  );
102
102
  const duplicates = Objects.fromEntries(
103
- Object.entries(groupBy).filter(([key, value]) => value.length > 1),
103
+ Object.entries(groupBy).filter(([_key, value]) => value.length > 1),
104
104
  );
105
105
  return duplicates;
106
106
  }
@@ -369,7 +369,7 @@ class CodeMirrorVimSync {
369
369
  // We use onIdle to keep the focused editor snappy
370
370
  onIdle(() => {
371
371
  if (!skipBroadcast) {
372
- this.broadcastModeChange(instance, e.mode, e.subMode);
372
+ this.broadcastModeChange(instance, e.mode);
373
373
  }
374
374
  this.isBroadcasting = false;
375
375
  });
@@ -380,11 +380,7 @@ class CodeMirrorVimSync {
380
380
  this.instances.delete(instance);
381
381
  }
382
382
 
383
- public broadcastModeChange(
384
- originInstance: EditorView,
385
- mode: string,
386
- subMode?: string,
387
- ) {
383
+ public broadcastModeChange(originInstance: EditorView, mode: string) {
388
384
  invariant(
389
385
  "exitInsertMode" in Vim,
390
386
  "Vim does not have an exitInsertMode method",
@@ -73,7 +73,7 @@ export class MarkdownLanguageAdapter implements LanguageAdapter<MarkdownLanguage
73
73
  _cellId: CellId,
74
74
  _completionConfig: CompletionConfig,
75
75
  hotkeys: HotkeyProvider,
76
- _: PlaceholderType,
76
+ _placeholderType: PlaceholderType,
77
77
  ): Extension[] {
78
78
  const markdownLanguageData = markdown().language.data;
79
79
  let view: EditorView | undefined;
@@ -157,7 +157,7 @@ const pylspClient = once((lspConfig: LSPConfig) => {
157
157
  return notebookClient;
158
158
  });
159
159
 
160
- const tyLspClient = once((_: LSPConfig) => {
160
+ const tyLspClient = once((_config: LSPConfig) => {
161
161
  // oxlint-disable-next-line prefer-const -- reassigned after closure capture
162
162
  let resyncCallback: (() => Promise<void>) | undefined;
163
163
 
@@ -176,7 +176,7 @@ const tyLspClient = once((_: LSPConfig) => {
176
176
  const notebookClient = new NotebookLanguageServerClient(
177
177
  new LanguageServerClient({
178
178
  ...lspClientOpts,
179
- getWorkspaceConfiguration: (_) => [{ disableLanguageServices: true }],
179
+ getWorkspaceConfiguration: () => [{ disableLanguageServices: true }],
180
180
  }),
181
181
  {},
182
182
  );
@@ -226,7 +226,7 @@ const pyreflyClient = once(
226
226
  },
227
227
  );
228
228
 
229
- const pyrightClient = once((_: LSPConfig) => {
229
+ const pyrightClient = once((_config: LSPConfig) => {
230
230
  // oxlint-disable-next-line prefer-const -- reassigned after closure capture
231
231
  let resyncCallback: (() => Promise<void>) | undefined;
232
232
 
@@ -25,7 +25,7 @@ describe("RuntimeState", () => {
25
25
 
26
26
  beforeEach(() => {
27
27
  vi.clearAllMocks();
28
- mockSendComponentValues = vi.fn((args) => Promise.resolve(null));
28
+ mockSendComponentValues = vi.fn(() => Promise.resolve(null));
29
29
  uiElementRegistry = UIElementRegistry.INSTANCE;
30
30
  uiElementRegistry.entries.clear();
31
31
 
@@ -407,7 +407,7 @@ export class PyodideBridge implements RunRequests, EditRequests {
407
407
  return response as Snippets;
408
408
  };
409
409
 
410
- public openFile: EditRequests["openFile"] = async ({ path }) => {
410
+ public openFile: EditRequests["openFile"] = async () => {
411
411
  const url = createShareableLink({
412
412
  code: null,
413
413
  baseUrl: window.location.origin,
@@ -451,7 +451,7 @@ export class PyodideBridge implements RunRequests, EditRequests {
451
451
  return null;
452
452
  };
453
453
 
454
- public sendInstantiate: RunRequests["sendInstantiate"] = async (request) => {
454
+ public sendInstantiate: RunRequests["sendInstantiate"] = async () => {
455
455
  return null;
456
456
  };
457
457
 
@@ -41,7 +41,7 @@ const urlFileStore: FileStore = {
41
41
  };
42
42
 
43
43
  export const domElementFileStore: FileStore = {
44
- saveFile(contents: string) {
44
+ saveFile(_contents: string) {
45
45
  // Do nothing
46
46
  },
47
47
  readFile() {
@@ -54,7 +54,7 @@ export const domElementFileStore: FileStore = {
54
54
  };
55
55
 
56
56
  const remoteDefaultFileStore: FileStore = {
57
- saveFile(contents: string) {
57
+ saveFile(_contents: string) {
58
58
  // Do nothing
59
59
  },
60
60
  readFile() {
@@ -79,7 +79,7 @@ export const mountConfigFileStore: FileStore = {
79
79
  };
80
80
 
81
81
  const emptyFileStore: FileStore = {
82
- saveFile(contents: string) {
82
+ saveFile(_contents: string) {
83
83
  // Do nothing
84
84
  },
85
85
  readFile() {
@@ -85,7 +85,7 @@ export class DefaultWasmController implements WasmController {
85
85
  packages: [
86
86
  "micropip",
87
87
  "msgspec",
88
- getMarimoWheel(opts.version),
88
+ getMarimoWheel(),
89
89
  "Markdown",
90
90
  "pymdown-extensions",
91
91
  "narwhals",
@@ -1,6 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- export function getMarimoWheel(version: string) {
3
+ export function getMarimoWheel() {
4
4
  if (import.meta.env.DEV && import.meta.env.VITE_WASM_MARIMO_PREBUILT_WHEEL) {
5
5
  return "marimo-base";
6
6
  }
@@ -71,7 +71,7 @@ const CodeEditorComponent = (props: CodeEditorComponentProps) => {
71
71
  });
72
72
 
73
73
  const handleChange = useEvent((newValue: string) => {
74
- setLocalValue((_) => newValue);
74
+ setLocalValue(newValue);
75
75
  if (typeof props.debounce === "number") {
76
76
  setValueDebounced(newValue);
77
77
  } else if (!props.debounce) {
@@ -74,7 +74,6 @@ const RangeSliderComponent = ({
74
74
  start,
75
75
  stop,
76
76
  step,
77
- steps,
78
77
  debounce,
79
78
  orientation,
80
79
  showValue,
@@ -47,7 +47,7 @@ const ConnectedDataExplorerComponent = (props: DataTableProps): JSX.Element => {
47
47
  // Subscribe to the store
48
48
  const unsub = store.sub(chartSpecAtom, () => {
49
49
  const value = store.get(chartSpecAtom);
50
- const { schema, ...withoutSchema } = value;
50
+ const { schema: _schema, ...withoutSchema } = value;
51
51
  props.setValue(withoutSchema);
52
52
  });
53
53
 
@@ -47,7 +47,7 @@ const { valueAtom: chartSpecAtom, useActions } = createReducerAndAtoms(
47
47
  },
48
48
  set: (state, next: ChartSpec) => {
49
49
  // remove schema
50
- const { schema, ...rest } = next;
50
+ const { schema: _schema, ...rest } = next;
51
51
  return { ...state, ...rest };
52
52
  },
53
53
  },
@@ -192,7 +192,6 @@ const EMPTY: Transformations = {
192
192
  export const DataFrameComponent = memo(
193
193
  ({
194
194
  columns,
195
- dataframeName,
196
195
  pageSize,
197
196
  showDownload,
198
197
  lazy,
@@ -78,7 +78,7 @@ type T = Record<string, unknown>;
78
78
 
79
79
  // oxlint-disable-next-line typescript/consistent-type-definitions
80
80
  type PluginFunctions = {
81
- send_to_widget: <T>(req: {
81
+ send_to_widget: (req: {
82
82
  message?: unknown;
83
83
  buffers?: unknown;
84
84
  }) => Promise<null | undefined>;
@@ -219,7 +219,7 @@ function removeSpecificParamsFromNestedSpecs(
219
219
  }
220
220
 
221
221
  if (filteredParams.length === 0) {
222
- const { params, ...rest } = spec;
222
+ const { params: _params, ...rest } = spec;
223
223
  return rest as SpecWithParams;
224
224
  }
225
225
 
@@ -56,7 +56,7 @@ const RoutesComponent = ({
56
56
 
57
57
  useEffect(() => {
58
58
  // Listen for route changes
59
- const listener = (e: PopStateEvent | HashChangeEvent) => {
59
+ const listener = () => {
60
60
  handleFindMatch(window.location);
61
61
  };
62
62
  window.addEventListener("hashchange", listener);
@@ -20,7 +20,7 @@ type Story = StoryObj<typeof FormWrapper>;
20
20
  const props: FormWrapperProps<string> = {
21
21
  currentValue: "currentValue",
22
22
  newValue: "currentValue",
23
- setValue: (v) => {
23
+ setValue: () => {
24
24
  toast({
25
25
  title: "Form submitted",
26
26
  });
@@ -133,7 +133,7 @@ export const Validate: Story = {
133
133
  <FormWrapper
134
134
  {...props}
135
135
  shouldValidate={true}
136
- validate={async ({ value }) => {
136
+ validate={async () => {
137
137
  const random = Math.random();
138
138
  if (random < 0.8) {
139
139
  return `Failed to validate. Random number was ${random}`;
@@ -24,7 +24,7 @@ export default meta;
24
24
  type Story = StoryObj;
25
25
 
26
26
  export const Primary: Story = {
27
- render: (args, ctx) => (
27
+ render: () => (
28
28
  <Select>
29
29
  <SelectTrigger className="w-64">
30
30
  <SelectValue placeholder="Select a fruit" />
@@ -63,7 +63,7 @@ export const Primary: Story = {
63
63
  };
64
64
 
65
65
  export const Clearable: Story = {
66
- render: (args, ctx) => {
66
+ render: () => {
67
67
  const [value, setValue] = useState<string>("");
68
68
  return (
69
69
  <>
@@ -15,7 +15,7 @@ export default meta;
15
15
  type Story = StoryObj;
16
16
 
17
17
  export const Primary: Story = {
18
- render: (args, ctx) => {
18
+ render: () => {
19
19
  const [value, setValue] = useState<string[]>([]);
20
20
  return (
21
21
  <TooltipProvider>
@@ -8,7 +8,7 @@ async function sleep(ms: number) {
8
8
 
9
9
  describe("batch", () => {
10
10
  it("should return the same promise for calls with the same key", async () => {
11
- const loader = vi.fn().mockImplementation(async (arg) => {
11
+ const loader = vi.fn().mockImplementation(async () => {
12
12
  await sleep(10);
13
13
  return "response";
14
14
  });
@@ -25,7 +25,7 @@ describe("batch", () => {
25
25
  });
26
26
 
27
27
  it("should call loader again after the first promise resolves", async () => {
28
- const loader = vi.fn().mockImplementation(async (arg) => {
28
+ const loader = vi.fn().mockImplementation(async () => {
29
29
  await sleep(10);
30
30
  return "response";
31
31
  });
@@ -40,7 +40,7 @@ describe("batch", () => {
40
40
  });
41
41
 
42
42
  it("should handle different keys separately", async () => {
43
- const loader = vi.fn().mockImplementation(async (arg) => {
43
+ const loader = vi.fn().mockImplementation(async () => {
44
44
  await sleep(10);
45
45
  return "response";
46
46
  });
package/src/utils/blob.ts CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  type DataURLString,
6
6
  } from "./json/base64";
7
7
 
8
- export function serializeBlob<T>(blob: Blob): Promise<DataURLString> {
8
+ export function serializeBlob(blob: Blob): Promise<DataURLString> {
9
9
  return new Promise<DataURLString>((resolve, reject) => {
10
10
  const reader = new FileReader();
11
11
  reader.onload = (event) => {
@@ -2,9 +2,7 @@
2
2
 
3
3
  import z from "zod";
4
4
 
5
- export function isZodArray<T>(
6
- schema: z.ZodType,
7
- ): schema is z.ZodArray<z.ZodType> {
5
+ export function isZodArray(schema: z.ZodType): schema is z.ZodArray<z.ZodType> {
8
6
  return schema instanceof z.ZodArray;
9
7
  }
10
8
 
@@ -1 +0,0 @@
1
- import{t as e}from"./save-worker-BbUSwZRG.js";var t=e(((e,t)=>{t.exports={}}));export default t();
@@ -1 +0,0 @@
1
- import{t as e}from"./worker-DTQ7oH2A.js";var t=e(((e,t)=>{t.exports={}}));export default t();
@@ -1 +0,0 @@
1
- import{n as e}from"./feedback-button-C-ScLxY2.js";export{e as FeedbackModal};
@@ -1,3 +0,0 @@
1
- import{r as e}from"./useEvent-Dfcbgjhg.js";import{$n as t,La as n,Pa as r,Qn as i,_o as a,oi as o,vo as s,x as c,za as l}from"./cells-DfF1DLV_.js";import{t as u}from"./get-DjNf4SIX.js";import{t as d}from"./debounce-aFmHgJZY.js";import{E as f}from"./config-DGX7JYor.js";import{t as p}from"./_baseSet-Bpdo9AvU.js";import{g as m,v as h}from"./useEventListener-CjDeLqFC.js";import{t as g}from"./invariant-Ci2dTZ72.js";import{s as _}from"./config-CP8Y8_R0.js";import{d as v,v as y}from"./session-B8Y-GJnS.js";import{D as ee,M as b,c as x,l as S,n as te}from"./config-BWKfkUWA.js";import{c as ne,o as C}from"./state-DaWgt-rn.js";import{c as w,o as T}from"./markdown-renderer-CkN_xAjW.js";import{w as re}from"./write-secret-modal-7DzehGyr.js";import{t as ie}from"./use-toast-Wu434mLr.js";import{t as ae}from"./preload-helper-uBIymjUX.js";import{r as oe}from"./strings-C25fhMR_.js";import{t as E}from"./requests-lt0JK8Jt.js";import{t as se}from"./Deferred-CrTnjj37.js";import{t as ce}from"./uuid-k9DpjH68.js";import{n as le}from"./RenderHTML-DaVbCAsb.js";import{t as ue}from"./useRunCells-CV81rge-.js";import{r as de,t as fe}from"./blob-FjxwDE1i.js";import{f as pe}from"./useInstallPackage-CWcPxSLP.js";import{n as me,t as he}from"./share-BZW3tzEX.js";import{i as D,r as ge,t as _e}from"./events-CbeVJ6OD.js";function O(e,t,n){return e==null?e:p(e,t,n)}function k(e,t){if(e.origin===globalThis.origin)return new Worker(e.href,{...t,type:`module`});let n=`import ${JSON.stringify(e.href)}`,r=globalThis.origin===`null`?`data:application/javascript,${encodeURIComponent(n)}`:URL.createObjectURL(new Blob([n],{type:`application/javascript`}));try{return new Worker(r,{...t,type:`module`})}finally{r.startsWith(`blob:`)&&URL.revokeObjectURL(r)}}function A(e){return e.assetUrl,e}var ve=1e10,ye=1e3;function j(e,t){let n=e.map(e=>`"${e}"`).join(`, `);return Error(`This RPC instance cannot ${t} because the transport did not provide one or more of these methods: ${n}`)}function be(e={}){let t={};function n(e){t=e}let r={};function i(e){r.unregisterHandler&&r.unregisterHandler(),r=e,r.registerHandler?.(x)}let a;function o(e){if(typeof e==`function`){a=e;return}a=(t,n)=>{let r=e[t];if(r)return r(n);let i=e._;if(!i)throw Error(`The requested method has no handler: ${t}`);return i(t,n)}}let{maxRequestTime:s=ye}=e;e.transport&&i(e.transport),e.requestHandler&&o(e.requestHandler),e._debugHooks&&n(e._debugHooks);let c=0;function l(){return c<=ve?++c:c=0}let u=new Map,d=new Map;function f(e,...n){let i=n[0];return new Promise((n,a)=>{if(!r.send)throw j([`send`],`make requests`);let o=l(),c={type:`request`,id:o,method:e,params:i};u.set(o,{resolve:n,reject:a}),s!==1/0&&d.set(o,setTimeout(()=>{d.delete(o),a(Error(`RPC request timed out.`))},s)),t.onSend?.(c),r.send(c)})}let p=new Proxy(f,{get:(e,t,n)=>t in e?Reflect.get(e,t,n):e=>f(t,e)}),m=p;function h(e,...n){let i=n[0];if(!r.send)throw j([`send`],`send messages`);let a={type:`message`,id:e,payload:i};t.onSend?.(a),r.send(a)}let g=new Proxy(h,{get:(e,t,n)=>t in e?Reflect.get(e,t,n):e=>h(t,e)}),_=g,v=new Map,y=new Set;function ee(e,t){if(!r.registerHandler)throw j([`registerHandler`],`register message listeners`);if(e===`*`){y.add(t);return}v.has(e)||v.set(e,new Set),v.get(e)?.add(t)}function b(e,t){if(e===`*`){y.delete(t);return}v.get(e)?.delete(t),v.get(e)?.size===0&&v.delete(e)}async function x(e){if(t.onReceive?.(e),!(`type`in e))throw Error(`Message does not contain a type.`);if(e.type===`request`){if(!r.send||!a)throw j([`send`,`requestHandler`],`handle requests`);let{id:n,method:i,params:o}=e,s;try{s={type:`response`,id:n,success:!0,payload:await a(i,o)}}catch(e){if(!(e instanceof Error))throw e;s={type:`response`,id:n,success:!1,error:e.message}}t.onSend?.(s),r.send(s);return}if(e.type===`response`){let t=d.get(e.id);t!=null&&clearTimeout(t);let{resolve:n,reject:r}=u.get(e.id)??{};e.success?n?.(e.payload):r?.(Error(e.error));return}if(e.type===`message`){for(let t of y)t(e.id,e.payload);let t=v.get(e.id);if(!t)return;for(let n of t)n(e.payload);return}throw Error(`Unexpected RPC message type: ${e.type}`)}return{setTransport:i,setRequestHandler:o,request:p,requestProxy:m,send:g,sendProxy:_,addMessageListener:ee,removeMessageListener:b,proxy:{send:_,request:m},_setDebugHooks:n}}function xe(e){return be(e)}var M=`[transport-id]`;function Se(e,t){let{transportId:n}=t;return n==null?e:{[M]:n,data:e}}function Ce(e,t){let{transportId:n,filter:r}=t,i=r?.();if(n!=null&&i!=null)throw Error("Cannot use both `transportId` and `filter` at the same time");let a=e;if(n){if(e[M]!==n)return[!0];a=e.data}return i===!1?[!0]:[!1,a]}function we(e,t={}){let{transportId:n,filter:r,remotePort:i}=t,a=e,o=i??e,s;return{send(e){o.postMessage(Se(e,{transportId:n}))},registerHandler(e){s=t=>{let i=t.data,[a,o]=Ce(i,{transportId:n,filter:()=>r?.(t)});a||e(o)},a.addEventListener(`message`,s)},unregisterHandler(){s&&a.removeEventListener(`message`,s)}}}function Te(e,t){return we(e,t)}var Ee=`::controller`,De=`marimo-transport`;function N(e){return xe({transport:Te(e,{transportId:De}),maxRequestTime:2e4,_debugHooks:{onSend:e=>{m.debug(`[rpc] Parent -> Worker`,e)},onReceive:e=>{m.debug(`[rpc] Worker -> Parent`,e)}}})}function P(){let e=document.querySelector(`marimo-wasm`),t=e=>{try{return e?new URL(e,document.baseURI).href:void 0}catch{return}};return{version:ne(),pyodideIndexUrl:t(e?.dataset.pyodideIndexUrl),pyodideLockfileUrl:t(e?.dataset.pyodideLockfileUrl),pypiIndexUrl:t(e?.dataset.pypiIndexUrl)?.replaceAll(`%7Bpackage_name%7D`,`{package_name}`)}}var F=me(),I=`marimo:file`,L=new r(null),Oe={saveFile(e){L.set(I,e)},readFile(){return L.get(I)}},ke={saveFile(e){s.setCodeForHash((0,F.compressToEncodedURIComponent)(e))},readFile(){let e=s.getCodeFromHash()||s.getCodeFromSearchParam();return e?(0,F.decompressFromEncodedURIComponent)(e):null}},Ae={saveFile(e){},readFile(){let e=document.querySelector(`marimo-code`);return e?decodeURIComponent(e.textContent||``).trim():null}},je={saveFile(e){},readFile(){if(window.location.hostname!==`marimo.app`)return null;let e=new URL(`export_demos/wasm-intro.py`,document.baseURI);return fetch(e.toString()).then(e=>e.ok?e.text():null).catch(()=>null)}},Me={saveFile(e){},readFile(){return e.get(n)??null}},Ne={saveFile(e){},readFile(){return[`import marimo`,`app = marimo.App()`,``,`@app.cell`,`def __():`,` return`,``,`if __name__ == "__main__":`,` app.run()`].join(`
2
- `)}},R=class{stores;constructor(e){this.stores=e}insert(e,t){this.stores.splice(e,0,t)}saveFile(e){this.stores.forEach(t=>t.saveFile(e))}readFile(){for(let e of this.stores){let t=e.readFile();if(t)return t}return null}},z=new R([Me,Ae,ke]),B=new R([Oe,je,Ne]),Pe=new URL(`save-worker-BbUSwZRG.js`,import.meta.url).href,Fe=new URL(`worker-DTQ7oH2A.js`,import.meta.url).href,Ie=class t{static get INSTANCE(){let e=`_marimo_private_PyodideBridge`;return window[e]||(window[e]=new t),window[e]}rpc;saveRpc;pendingSessionSave=Promise.resolve();interruptBuffer;messageConsumer;initialized=new se;getSaveWorker(){if(v()===`read`)return m.debug(`Using partially disabled SaveWorker in read-mode`),{readFile:h,readNotebook:async()=>await z.readFile()??``,saveNotebook:h};let e=P(),t=N(k(new URL(Pe,import.meta.url),{name:V()}));return t.send.bootstrap(e),t.proxy.request}constructor(){if(!b())return;let t=P(),n=k(new URL(Fe,import.meta.url),{name:V()});this.rpc=N(n),this.rpc.send.bootstrap(t),this.rpc.addMessageListener(`ready`,()=>{this.startSession()}),this.rpc.addMessageListener(`initialized`,()=>{this.saveRpc=this.getSaveWorker(),this.setInterruptBuffer(),e.set(C,{kind:`ready`}),this.initialized.resolve()}),this.rpc.addMessageListener(`initializingMessage`,({message:t})=>{e.get(C).kind===`loading`&&e.set(C,{kind:`loading`,message:t})}),this.rpc.addMessageListener(`initializedError`,({error:t})=>{if(this.initialized.status===`resolved`){m.error(t),ie({title:`Error initializing`,description:t,variant:`danger`});return}e.set(C,{kind:`error`,message:t}),this.initialized.reject(Error(t))}),this.rpc.addMessageListener(`kernelMessage`,({message:e})=>{this.messageConsumer?.(new MessageEvent(`message`,{data:e}))})}async startSession(){let t=await z.readFile(),n=await B.readFile(),r=e.get(l)??s.getFilename(),i=e.get(f),a={},o=new URLSearchParams(window.location.search);for(let e of o.keys()){let t=o.getAll(e);a[e]=t.length===1?t[0]:t}await this.rpc.proxy.request.startSession({queryParameters:a,code:t||n||``,filename:r,userConfig:{...i,runtime:{...i.runtime,auto_instantiate:v()===`read`||i.runtime.auto_instantiate}}})}setInterruptBuffer(){crossOriginIsolated?(this.interruptBuffer=new Uint8Array(new SharedArrayBuffer(1)),this.rpc.proxy.request.setInterruptBuffer(this.interruptBuffer)):m.warn(`Not running in a secure context; interrupts are not available.`)}attachMessageConsumer(e){this.messageConsumer=e,this.rpc.proxy.send.consumerReady({})}sendRename=async({filename:e})=>e===null?null:(s.setFilename(e),await this.rpc.proxy.request.bridge({functionName:`rename_file`,payload:e}),null);sendSave=async e=>{if(!this.saveRpc)return m.warn(`Save RPC not initialized`),null;let t=this.saveRpc.saveNotebook(e);this.pendingSessionSave=this.pendingSessionSave.catch(()=>void 0).then(async()=>{await t,await this.rpc.proxy.request.saveNotebook(e)}),this.pendingSessionSave.catch(e=>{m.error(e)}),await t;let n=await this.readCode();return n.contents&&(z.saveFile(n.contents),B.saveFile(n.contents)),null};sendCopy=async()=>{h()};sendStdin=async e=>(await this.rpc.proxy.request.bridge({functionName:`put_input`,payload:e.text}),null);sendPdb=async()=>{h()};sendSetBreakpoints=async()=>{h()};sendRun=async e=>(await this.rpc.proxy.request.loadPackages(e.codes.join(`
3
- `)),await this.putControlRequest({type:`execute-cells`,...e}),null);sendRunScratchpad=async e=>(await this.rpc.proxy.request.loadPackages(e.code),await this.putControlRequest({type:`execute-scratchpad`,...e}),null);sendInterrupt=async()=>(this.interruptBuffer!==void 0&&(this.interruptBuffer[0]=2),null);sendShutdown=async()=>(window.close(),null);sendFormat=async e=>await this.rpc.proxy.request.bridge({functionName:`format`,payload:e});sendDeleteCell=async e=>(await this.putControlRequest({type:`delete-cell`,...e}),null);sendInstallMissingPackages=async e=>(this.putControlRequest({type:`install-packages`,...e}),null);sendCodeCompletionRequest=async t=>(e.get(c)||await this.rpc.proxy.request.bridge({functionName:`code_complete`,payload:t}),null);saveUserConfig=async e=>(await this.rpc.proxy.request.bridge({functionName:`save_user_config`,payload:e}),_.post(`/kernel/save_user_config`,e,{baseUrl:`/`}).catch(e=>(m.error(e),null)));saveAppConfig=async e=>(await this.rpc.proxy.request.bridge({functionName:`save_app_config`,payload:e}),null);saveCellConfig=async e=>(await this.putControlRequest({type:`update-cell-config`,...e}),null);sendRestart=async()=>{let e=await this.readCode();return e.contents&&(z.saveFile(e.contents),B.saveFile(e.contents)),pe(),null};readCode=async()=>this.saveRpc?{contents:await this.saveRpc.readNotebook()}:(m.warn(`Save RPC not initialized`),{contents:``});readSnippets=async()=>await this.rpc.proxy.request.bridge({functionName:`read_snippets`,payload:void 0});openFile=async({path:e})=>{let t=he({code:null,baseUrl:window.location.origin});return window.open(t,`_blank`),null};sendListFiles=async e=>await this.rpc.proxy.request.bridge({functionName:`list_files`,payload:e});getFileRoots=async()=>await this.rpc.proxy.request.bridge({functionName:`file_roots`,payload:void 0});sendSearchFiles=async e=>await this.rpc.proxy.request.bridge({functionName:`search_files`,payload:e});sendComponentValues=async e=>(await this.putControlRequest({type:`update-ui-element`,...e,token:ce()}),null);sendInstantiate=async e=>null;sendFunctionRequest=async e=>(await this.putControlRequest({type:`invoke-function`,...e}),null);sendCreateFileOrFolder=async e=>{let t=null;return e.file&&(t=(await de(e.file)).split(`,`)[1]??``),await this.rpc.proxy.request.bridge({functionName:`create_file_or_directory`,payload:{path:e.path,type:e.type,name:e.name,contents:t}})};sendDeleteFileOrFolder=async e=>await this.rpc.proxy.request.bridge({functionName:`delete_file_or_directory`,payload:e});sendCopyFileOrFolder=async e=>await this.rpc.proxy.request.bridge({functionName:`copy_file_or_directory`,payload:e});sendRenameFileOrFolder=async e=>await this.rpc.proxy.request.bridge({functionName:`move_file_or_directory`,payload:e});sendUpdateFile=async e=>await this.rpc.proxy.request.bridge({functionName:`update_file`,payload:e});sendFileDetails=async e=>await this.rpc.proxy.request.bridge({functionName:`file_details`,payload:e});exportAsHTML=async e=>(await this.pendingSessionSave,await this.rpc.proxy.request.bridge({functionName:`export_html`,payload:A(e)}));exportAsMarkdown=async e=>(await this.pendingSessionSave,await this.rpc.proxy.request.bridge({functionName:`export_markdown`,payload:e}));exportAsScript=async e=>(await this.pendingSessionSave,await this.rpc.proxy.request.bridge({functionName:`export_script`,payload:e}));previewDatasetColumn=async e=>(await this.putControlRequest({type:`preview-dataset-column`,...e}),null);previewSQLTable=async e=>(await this.putControlRequest({type:`preview-sql-table`,...e}),null);previewSQLTableList=async e=>(await this.putControlRequest({type:`list-sql-tables`,...e}),null);previewSQLSchemaList=async e=>(await this.putControlRequest({type:`list-sql-schemas`,...e}),null);previewDataSourceConnection=async e=>(await this.putControlRequest({type:`list-data-source-connection`,...e}),null);validateSQL=async e=>(await this.putControlRequest({type:`validate-sql`,...e}),null);sendModelValue=async e=>(await this.putControlRequest({type:`model`,...e}),null);sendDocumentTransaction=()=>Promise.resolve(null);addPackage=async e=>this.rpc.proxy.request.addPackage(e);removePackage=async e=>this.rpc.proxy.request.removePackage(e);getPackageList=async()=>await this.rpc.proxy.request.listPackages();getSandbox=async()=>({backend:null,manifest:null,filename:null});updateManifest=async()=>{throw Error(`Sandboxes are not supported in WebAssembly`)};syncSandbox=async()=>{throw Error(`Sandboxes are not supported in WebAssembly`)};getDependencyTree=async()=>({tree:{dependencies:[],name:``,tags:[],version:null},context:{kind:`package-manager`,name:`micropip`}});listSecretKeys=async e=>(await this.putControlRequest({type:`list-secret-keys`,...e}),null);discoverDataSources=async e=>(await this.putControlRequest({type:`discover-data-sources`,...e}),null);getUsageStats=h;getEnvironmentInfo=async()=>await this.rpc.proxy.request.bridge({functionName:`get_environment_info`,payload:void 0});openTutorial=h;getRecentFiles=h;getWorkspaceFiles=h;getRunningNotebooks=h;shutdownSession=h;getExportAvailability=h;installExportRequirements=h;exportAsIPYNB=h;exportAsPDF=h;autoExportAsHTML=h;autoExportAsMarkdown=h;autoExportAsIPYNB=h;updateCellOutputs=h;writeSecret=h;invokeAiTool=h;clearCache=h;getCacheInfo=h;listStorageEntries=h;downloadStorage=h;async putControlRequest(e){await this.rpc.proxy.request.bridge({functionName:`put_control_request`,payload:e})}};function V(){return`marimo${typeof window<`u`&&window.__MARIMO_HAS_WASM_CONTROLLER__===!0?Ee:``}`}function Le(e=x()){let t=window.fetch;return window.fetch=async(n,r)=>{let i=n instanceof Request?n.url:n.toString();if(i.startsWith(`data:`))return t(n,r);try{let a=U(i,e);if(a){let e=await(await t(a)).arrayBuffer();return new Response(e,{headers:{"Content-Type":Re(i)}})}return t(n,r)}catch(e){return m.error(`Error parsing URL`,e),t(n,r)}},()=>{window.fetch=t}}function Re(e){return e.endsWith(`.csv`)?`text/csv`:e.endsWith(`.json`)?`application/json`:e.endsWith(`.txt`)?`text/plain`:`application/octet-stream`}function ze(e,t=x()){let n=e.http.bind(e),r=e.load.bind(e);return e.http=async e=>{let r=U(e,t);if(r)return await window.fetch(r).then(e=>e.text());try{return await n(e)}catch(t){if(e.startsWith(`data:`))return await window.fetch(e).then(e=>e.text());throw t}},e.load=async e=>{let n=U(e,t);if(n)return await window.fetch(n).then(e=>e.text());try{return await r(e)}catch(t){if(e.startsWith(`data:`))return await window.fetch(e).then(e=>e.text());throw t}},()=>{e.http=n,e.load=r}}function H(e){return e.startsWith(`.`)?e.slice(1):e}function Be(e,t=x()){let n=U(e,t);if(!n)return e;let r=fe(n);return URL.createObjectURL(r)}function U(e,t){let n=document.baseURI;n.startsWith(`blob:`)&&(n=n.replace(`blob:`,``));let r=new URL(e,n).pathname,i=W(e),a=W(r);return t[e]||t[H(e)]||t[r]||t[H(r)]||i&&t[i]||a&&t[a]}function W(e){let t=e.indexOf(`/@file/`);return t===-1?null:e.slice(t)}function G(e,t){return{get(t){return e.get(t)},set(t,n){e.set(t,n)},save_changes(){e.save_changes()},send:e.send.bind(e),on(n,r){t.aborted||(e.on(n,r),t.addEventListener(`abort`,()=>e.off(n,r),{once:!0}))},off(t,n){e.off(t??null,n??null)},widget_manager:{async get_model(n){return G(await e.widget_manager.get_model(n),t)}}}}function K(e){return typeof e==`string`&&e.length>0}function q(e){if(typeof e==`string`&&e.startsWith(`anywidget:`)){let t=e.slice(10);if(K(t))return t}throw Error(`[anywidget] Invalid widget reference: ${JSON.stringify(e)}`)}function Ve(e,t){return{async getModel(n){let r=q(n);return G(await e.getModel(r),t)},async getWidget(n){let r=q(n),i=await e.getWidget(r);return{exports:i.exports,async render({el:e,signal:n}){await i.render({el:e,signal:n??t})}}}}}var He=Symbol(`marimo`);function J(e){return e[He]}var Ue=class e{#e=`change`;#t;#n;#r;#i={};static _modelManager;constructor(e,t,n){this.#n=e,this.#r=t,this.#t=new Set,n&&n.addEventListener(`abort`,()=>{m.debug(`[Model] Signal aborted, clearing all listeners`),this.#i={}})}[He]={updateAndEmitDiffs:e=>this.#o(e),emitCustomMessage:(e,t)=>this.#s(e,t)};off(e,t){if(!e){this.#i={};return}if(!t){this.#i[e]=new Set;return}this.#i[e]?.delete(t)}send(e,t,n){let r=(n??[]).map(e=>e instanceof ArrayBuffer?new DataView(e):new DataView(e.buffer,e.byteOffset,e.byteLength));return this.#r.sendCustomMessage(e,r).then(()=>t?.())}widget_manager={async get_model(t){let n=await e._modelManager.getModel(t);if(!n)throw Error(`Model not found with id: ${t}. This is likely because the model was not registered.`);return n}};get(e){return this.#n[e]}set(e,t){this.#n={...this.#n,[e]:t},this.#t.add(e),this.#a(`change:${e}`,t),this.#c()}save_changes(){if(this.#t.size===0)return;let e=Object.fromEntries([...this.#t].map(e=>[e,this.#n[e]]));this.#t.clear(),this.#r.sendUpdate(e)}on(e,t,n){let r=n?.signal;r?.aborted||(this.#i[e]||(this.#i[e]=new Set),this.#i[e].add(t),r?.addEventListener(`abort`,()=>this.off(e,t),{once:!0}))}#a(e,t){let n=this.#i[e];if(n)for(let e of[...n])try{e(t)}catch(e){m.error(`Error emitting event`,e)}}#o(e){e!=null&&Object.keys(e).forEach(t=>{let n=t;this.#t.delete(n),this.#n[n]!==e[n]&&(this.#n={...this.#n,[n]:e[n]},this.#a(`change:${n}`,e[n]),this.#c())})}#s(e,t=[]){let n=this.#i[`msg:custom`];if(n)for(let r of[...n])try{r(e.content,t)}catch(e){m.error(`Error emitting event`,e)}}#c=d(()=>{let e=this.#i[this.#e];if(e)for(let t of[...e])try{t()}catch(e){m.error(`Error emitting event`,e)}},0)};function We(e){return typeof e==`function`}function Ge(e){return typeof e==`function`}function Ke(e){return t(e)&&(We(e.render)||Ge(e.initialize))}function qe(e){return typeof e==`function`||Ke(e)}function Je(e){return t(e)&&qe(e.default)}var Ye=new Set,Xe=new WeakMap;function Ze(e,n){if(Je(e))return e.default;if(!t(e)||e.default!==void 0)return null;let r=We(e.render)?e.render:void 0,i=Ge(e.initialize)?e.initialize:void 0;if(r===void 0&&i===void 0)return null;let a=Xe.get(e);if(a)return a;Ye.has(n)||(Ye.add(n),m.warn(`Anywidget module at ${n} uses deprecated top-level named exports (\`render\`/\`initialize\`). Per the AFM spec, use a default export instead: \`export default { render }\`. See https://anywidget.dev/en/afm/`));let o={render:r,initialize:i};return Xe.set(e,o),o}function Qe(e,n){let r=`https://anywidget.dev/en/afm/`,a=t(e)&&i(e,`render`),o=t(e)&&i(e,`initialize`);if(t(e)&&e.default!==void 0)return Error(`Anywidget module at ${n} has an invalid default export. Expected a factory function or an object with \`render\` or \`initialize\`. See ${r}`);if(a||o){let e=[a?"`render`":null,o?"`initialize`":null].filter(Boolean).join(` and `),t=[a?`render`:null,o?`initialize`:null].filter(e=>e!==null),i=`export default { ${t.join(`, `)} }`,s=t.length===1?`export function ${t[0]}`:`named export function ...`;return Error(`Anywidget module at ${n} uses named exports (${e}). Per the AFM spec, use a default export instead: \`${i}\` (not \`${s}\`). See ${r}`)}return Error(`Anywidget module at ${n} is missing a default export. Per the AFM spec, use \`export default { render }\` or \`export default async () => ({ render })\`. See ${r}`)}function $e(e){return typeof e!=`string`||e.length===0?!1:!!(/^(\.?\/)?@file\/[^?#]+$/.test(e)||tt(e))}function et(){return e.get(ue)||le()}function tt(e){return e.startsWith(`data:text/javascript;base64,`)||e.startsWith(`data:application/javascript;base64,`)||e.startsWith(`data:text/css;base64,`)?et():!1}var nt={invoke:async()=>{let e=`anywidget.invoke not supported in marimo. Please file an issue at https://github.com/marimo-team/marimo/issues`;throw m.warn(e),Error(e)}};function rt(e){if(typeof AbortSignal.any==`function`)return AbortSignal.any(e);let t=new AbortController;for(let n of e){if(n.aborted)return t.abort(n.reason),t.signal;n.addEventListener(`abort`,()=>t.abort(n.reason),{once:!0})}return t.signal}var it=class{#e=new Map;getModule(e){let{jsUrl:t,jsHash:n,kernelAuthored:r=!1,lifetime:i}=e,a=this.#e.get(n);if(!a){let e={references:0,dispose:()=>void 0,promise:this.#t(t,{kernelAuthored:r}).then(({module:t,dispose:n})=>(e.dispose=n,t),t=>{throw this.#e.get(n)===e&&this.#e.delete(n),t})};this.#e.set(n,e),a=e}let o=a;o.references+=1;let s=()=>{--o.references,o.references===0&&o.promise.then(()=>{o.dispose(),o.dispose=()=>void 0},()=>void 0)};return i?.aborted?s():i?.addEventListener(`abort`,s,{once:!0}),o.promise}invalidate(e){this.#e.delete(e)}async#t(e,t={}){if(!($e(e)||t.kernelAuthored===!0&&/^(https?:|data:)/.test(e)))throw Error(`Refusing to load anywidget module from untrusted URL: ${String(e)}`);let n=te(e).toString(),r=S()?Be(n):n,i=()=>{r!==n&&URL.revokeObjectURL(r)};try{return{module:await ae(()=>import(r),[],import.meta.url),dispose:i}}catch(e){throw i(),e}}};function Y(e){return typeof e==`function`}async function at(e,t){try{await e()}catch(e){m.warn(`[WidgetBinding] ${t} cleanup failed`,e)}}var ot=class e{#e;#t;#n;#r;#i;#a=new Set;#o=new Set;#s;constructor(e){this.#t=e.widget,this.#n=e.model,this.#r=e.exports,this.#e=e.controller,this.#i=e.createHost,this.#s=e.onDestroy}static async create({widgetDef:t,model:n,createHost:r,controller:i=new AbortController,onDestroy:a}){let o=i.signal,s;try{let c=typeof t==`function`?await t():t;if(o.aborted)throw Error(`[anywidget] binding destroyed`);let l=Promise.resolve(c.initialize?.({model:G(n,o),experimental:nt,signal:o}));s=l.then(async e=>{o.aborted&&Y(e)&&await at(e,`late initialize`)}).catch(()=>void 0);let u=await Promise.race([l,new Promise((e,t)=>{let n=()=>t(Error(`[anywidget] binding destroyed`));if(o.aborted){n();return}o.addEventListener(`abort`,n,{once:!0})})]);if(o.aborted)throw Error(`[anywidget] binding destroyed`);let d,f;Y(u)?(f=u,d=void 0):d=typeof u==`object`&&u?u:void 0;let p=new e({widget:c,model:n,exports:d,controller:i,createHost:r,onDestroy:a});return f&&o.addEventListener(`abort`,()=>void p.#l(f,`initialize`),{once:!0}),p}catch(e){throw s?s.then(()=>a?.()):a?.(),e}}get exports(){return this.#r}async createView(e,t){let n=this.#c(e,t);this.#o.add(n);try{await n}finally{this.#o.delete(n)}}async#c(e,t){let n=this.#t;if(!n.render)return;let r=rt([t.signal,this.#e.signal]);if(r.aborted)return;e.el.innerHTML=``;let i=this.#i(r),a=await n.render({model:G(this.#n,r),el:e.el,experimental:nt,signal:r,host:i});if(Y(a)){let e=()=>{let e=t.signal.aborted?`view unmount`:`binding destroyed`;return m.debug(`[WidgetBinding] Render cleanup triggered (reason: ${e})`),this.#l(a,`render`)};if(r.aborted){await e();return}r.addEventListener(`abort`,()=>void e(),{once:!0})}}#l(e,t){let n=at(e,t);return this.#a.add(n),n.finally(()=>this.#a.delete(n)),n}async destroy(){for(m.debug(`[WidgetBinding] Destroying binding generation`),this.#e.abort(),await Promise.allSettled(this.#o);this.#a.size>0;)await Promise.all(this.#a);this.#s?.(),this.#s=void 0}},st=new it,ct=class{#e;#t;#n;#r;#i;#a=new AbortController;#o=new se;#s=new Set;#c=new Map;#l;#u;#d;#f=Promise.resolve();#p=``;constructor(e,t){this.#e=e,this.#t=t.timeout,this.#n=t.isEditMode,this.#r=t.createHost,this.#i=t.onModelTimeout}getModel(){return this.#o.status===`pending`&&!this.#l&&(this.#l=setTimeout(()=>{this.#o.status===`pending`&&(this.#l=void 0,this.#o.reject(Error(`Model not found for key: ${this.#e}`)),this.#i())},this.#t)),this.#o.promise}getModelSync(){return this.#o.status===`resolved`?this.#o.value:void 0}createModel(e){this.#o.status===`pending`&&this.#m(e(this.#a.signal))}setModel(e){this.#o.status===`pending`&&this.#m(e)}#m(e){this.#l&&=(clearTimeout(this.#l),void 0),this.#o.resolve(e);let t=e.get(`_css`);this.#p=typeof t==`string`?t:``,e.on(`change:_css`,e=>{this.#p=typeof e==`string`?e:``;for(let e of this.#c.values())e.update(this.#p)},{signal:this.#a.signal})}setSpec(e){if(!this.#u){this.#u=e;return}this.#n()&&(this.#u=e,this.#d&&this.#d.hash!==e.hash&&this.#v(e))}async getWidget(){return{exports:(await this.#h()).exports,render:async({el:e,signal:t})=>{await this.createView({el:e,signal:t??this.#a.signal})}}}async createView(e){if(e.signal.aborted||this.#a.signal.aborted)return;let t={el:e.el,signal:e.signal};this.#s.add(t),this.#x(t),e.signal.addEventListener(`abort`,()=>this.#s.delete(t),{once:!0}),await this.#b(t)}async#h(){for(;!this.#a.signal.aborted;){let e=await this.getModel(),t=this.#d;if(!t){let n=this.#u;if(!n)throw Error(`[anywidget] No ESM spec for model ${this.#e}: nothing ever provided this widget's code`);t=this.#_(n,e)}try{let e=await t.promise;if(t===this.#d)return e}catch(e){if(!this.#d||t===this.#d)throw e}}throw Error(`[anywidget] widget runtime destroyed`)}async#g(e){let{spec:t,model:n,controller:r}=e,i=new AbortController,a;try{let e=await st.getModule({jsUrl:t.url,jsHash:t.hash,kernelAuthored:!0,lifetime:i.signal}),n=Ze(e,t.url);if(!n)throw st.invalidate(t.hash),Qe(e,t.url);a=n}catch(e){throw i.abort(),e}return ot.create({widgetDef:a,model:n,createHost:this.#r,controller:r,onDestroy:()=>i.abort()})}#_(e,t){let n=new AbortController,r={hash:e.hash,controller:n,promise:this.#g({spec:e,model:t,controller:n})};return r.promise.catch(()=>{this.#d===r&&(this.#d=void 0)}),this.#d=r,r}#v(e){let t=this.#d;if(!t)return;m.debug(`[WidgetRuntime] Hot-swapping generation for model=${this.#e}`);let n=this.#y(t),r=this.getModelSync();if(!r)return;let i=this.#_(e,r);for(let e of this.#s)e.generation=void 0,n.then(()=>this.#b(e,i)).catch(e=>{m.error(`[WidgetRuntime] Error replacing widget view`,e)})}#y(e){e.controller.abort();let t=this.#f.then(async()=>{try{await(await e.promise).destroy()}catch{}});return this.#f=t,t}async#b(e,t){if(e.signal.aborted||this.#a.signal.aborted)return;let n=t??this.#d,r=n?await n.promise:await this.#h(),i=this.#d;if(!(!i||i!==(n??i))&&e.generation!==i){e.generation=i;try{await r.createView({el:e.el},{signal:e.signal})}catch(t){if(i!==this.#d){e.generation=void 0;return}throw t}}}#x(e){let t=e.el.getRootNode();if(!X(t)&&!lt(t))return;let n=this.#c.get(t);n||(n=ut(t,this.#p),this.#c.set(t,n)),n.references+=1;let r=!1;e.signal.addEventListener(`abort`,()=>{if(r)return;r=!0;let e=this.#c.get(t);e&&(--e.references,e.references===0&&(e.dispose(),this.#c.delete(t)))},{once:!0})}dispose(){if(!this.#a.signal.aborted){m.debug(`[WidgetRuntime] Disposing model=${this.#e}`),this.#l&&=(clearTimeout(this.#l),void 0),this.#o.status===`pending`&&(this.#o.promise.catch(()=>void 0),this.#o.reject(Error(`[anywidget] widget runtime destroyed`))),this.#d&&this.#y(this.#d),this.#a.abort(),this.#s.clear();for(let e of this.#c.values())e.dispose();this.#c.clear()}}};function X(e){return e.nodeType===Node.DOCUMENT_NODE}function lt(e){return e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&`host`in e}function ut(e,t){let n=X(e)?e:e.ownerDocument??document,r=n.defaultView??window;if(`adoptedStyleSheets`in e&&r.CSSStyleSheet!==void 0&&typeof r.CSSStyleSheet.prototype.replaceSync==`function`)try{let n=new r.CSSStyleSheet;return n.replaceSync(t),e.adoptedStyleSheets=[...e.adoptedStyleSheets,n],{references:0,update(e){n.replaceSync(e)},dispose(){e.adoptedStyleSheets=e.adoptedStyleSheets.filter(e=>e!==n)}}}catch{}let i=n.createElement(`style`);return i.textContent=t,X(e)?n.head.append(i):e.append(i),{references:0,update(e){i.textContent=e},dispose(){i.remove()}}}function Z(e,t=[]){let n=[];if(e instanceof DataView)n.push(t);else if(Array.isArray(e))for(let[r,i]of e.entries())n.push(...Z(i,[...t,r]));else if(typeof e==`object`&&e)for(let[r,i]of Object.entries(e))n.push(...Z(i,[...t,r]));return n}function dt(e){let t=Z(e);if(t.length===0)return{state:e,buffers:[],bufferPaths:[]};let n=structuredClone(e),r=[],i=[];for(let a of t){let t=u(e,a);if(t instanceof DataView){let e=w(t);r.push(e),i.push(a),O(n,a,e)}}return{state:n,buffers:r,bufferPaths:i}}function ft(e){let{state:t,bufferPaths:n,buffers:r}=e;if(!n||n.length===0)return t;r&&g(r.length===n.length,`Buffers and buffer paths not the same length`);let i=t;for(let[e,t]of n.entries()){let n=r?.[e];if(n==null){m.warn(`[anywidget] Could not find buffer at path`,t);continue}typeof n==`string`?O(i,t,T(n)):O(i,t,n)}return i}function pt(){let t=e.get(y).mode;return t===`edit`||t===`present`}var Q=new class{#e=new Map;#t;#n;constructor(e=1e4,t=pt){this.#t=e,this.#n=t}#r(e){let t=this.#e.get(e);if(!t){let n=new ct(e,{timeout:this.#t,isEditMode:this.#n,createHost:e=>Ve(this,e),onModelTimeout:()=>{this.#e.get(e)===n&&(n.dispose(),this.#e.delete(e))}});t=n,this.#e.set(e,t)}return t}getModel(e){return this.#r(e).getModel()}getModelSync(e){return this.#e.get(e)?.getModelSync()}createModel(e,t){this.#r(e).createModel(t)}setModel(e,t){this.#r(e).setModel(t)}setSpec(e,t){this.#r(e).setSpec(t)}getWidget(e){return this.#r(e).getWidget()}createView(e){return this.#r(e.modelId).createView(e)}delete(e){let t=this.#e.get(e);t&&(t.dispose(),this.#e.delete(e))}};Ue._modelManager=Q;async function mt(e,t){let n=t.model_id;if(!K(n))throw Error(`[anywidget] Invalid model id: ${String(n)}`);let r=t.message,i=(`buffers`in r?r.buffers:[]).map(T);switch(r.method){case`open`:{let{state:t,buffer_paths:a=[]}=r;r.esm_spec&&e.setSpec(n,r.esm_spec);let o=ft({state:t,bufferPaths:a,buffers:i}),s=e.getModelSync(n);if(s){J(s).updateAndEmitDiffs(o);return}e.createModel(n,e=>{let t=S()?{sendUpdate:async()=>void 0,sendCustomMessage:async()=>void 0}:{async sendUpdate(t){if(e.aborted){m.debug(`[Model] sendUpdate suppressed for model=${n} (signal aborted)`);return}let{state:r,buffers:i,bufferPaths:a}=dt(t);await E().sendModelValue({modelId:n,message:{method:`update`,state:r,bufferPaths:a},buffers:i})},async sendCustomMessage(t,r){if(e.aborted){m.debug(`[Model] sendCustomMessage suppressed for model=${n} (signal aborted)`);return}await E().sendModelValue({modelId:n,message:{method:`custom`,content:t},buffers:r.map(w)})}};return new Ue(o,t,e)});return}case`custom`:J(await e.getModel(n)).emitCustomMessage({method:`custom`,content:r.content},i);return;case`close`:e.delete(n);return;case`update`:{let{state:t,buffer_paths:a=[]}=r;r.esm_spec&&e.setSpec(n,r.esm_spec);let o=ft({state:t,bufferPaths:a,buffers:i});J(await e.getModel(n)).updateAndEmitDiffs(o);return}default:oe(r)}}o(Q,`WIDGET_REGISTRY`);function ht(e){return typeof e!=`object`||!e?!1:`type`in e&&e.type===`marimo-ui-value-update`}var $=class e{entries;static get INSTANCE(){let t=`_marimo_private_UIElementRegistry`;return window[t]||(window[t]=new e),window[t]}constructor(){this.entries=new Map}has(e){return this.entries.has(e)}set(e,t){this.entries.has(e)&&m.debug(`UIElementRegistry overwriting entry for objectId.`,e),this.entries.set(e,{objectId:e,value:t,elements:new Set})}registerInstance(e,t){let n=this.entries.get(e);n===void 0?this.entries.set(e,{objectId:e,value:a(t,this),elements:new Set([t])}):n.elements.add(t)}removeInstance(e,t){let n=this.entries.get(e);n?.elements.has(t)&&n.elements.delete(t)}removeElementsByCell(e){[...this.entries.keys()].filter(t=>t.startsWith(`${e}-`)).forEach(e=>{this.entries.delete(e)})}lookupValue(e){let t=this.entries.get(e);return t===void 0?void 0:t.value}broadcastMessage(e,t,n){let r=this.entries.get(e);if(r===void 0){m.warn(`UIElementRegistry missing entry`,e);return}if(ht(t)){r.value=t.value,r.elements.forEach(e=>{e.dispatchEvent(D.create({bubbles:!1,composed:!0,detail:{value:t.value,element:e}}))});return}r.elements.forEach(r=>{r.dispatchEvent(_e.create({bubbles:!1,composed:!0,detail:{objectId:e,message:t,buffers:n}}))})}broadcastValueUpdate(e,t,n){let r=this.entries.get(t);r===void 0?m.warn(`UIElementRegistry missing entry`,t):(r.value=n,r.elements.forEach(t=>{t!==e&&t.dispatchEvent(D.create({bubbles:!1,composed:!0,detail:{value:n,element:t}}))}),document.dispatchEvent(ge.create({bubbles:!0,composed:!0,detail:{objectId:t}})))}},gt=$.INSTANCE,_t=new re(`function-call-result`,async(e,t)=>{await E().sendFunctionRequest({functionCallId:e,...t})}),vt=`68px`,yt=`288px`,bt=e=>e?/^\d+$/.test(e)?`${e}px`:e:yt,xt=ee({isOpen:!0},(e,t)=>{if(!t)return e;switch(t.type){case`toggle`:return{...e,isOpen:t.isOpen??e.isOpen};case`setWidth`:return{...e,width:t.width};default:return e}});export{$ as a,mt as c,Le as d,ze as f,O as g,A as h,_t as i,$e as l,z as m,bt as n,gt as o,Ie as p,xt as r,Q as s,vt as t,K as u};