@marimo-team/islands 0.23.9-dev34 → 0.23.9-dev36

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 (41) hide show
  1. package/dist/{ConnectedDataExplorerComponent-MJy-Ll40.js → ConnectedDataExplorerComponent-BQBH2XAd.js} +4 -4
  2. package/dist/assets/__vite-browser-external-TaZstNaH.js +1 -0
  3. package/dist/assets/{worker-BoAkAmaG.js → worker-CZaLU0G8.js} +2 -2
  4. package/dist/{chat-ui-CpX2YcGy.js → chat-ui-IyGT4sju.js} +6 -6
  5. package/dist/{code-visibility-y3APpJ-N.js → code-visibility-DP2xSfeW.js} +525 -410
  6. package/dist/{formats-BIKFEOlR.js → formats-B7_JC7Ba.js} +1 -1
  7. package/dist/{glide-data-editor-DjQd6fKp.js → glide-data-editor-BmM4MCbn.js} +2 -2
  8. package/dist/{html-to-image-QL7QveRm.js → html-to-image-CGbhD84m.js} +5 -5
  9. package/dist/{input-Dh0iMVFM.js → input-Ld3tUgdF.js} +1 -1
  10. package/dist/main.js +18 -18
  11. package/dist/{mermaid-CAibas-0.js → mermaid-BrUZ2PpQ.js} +2 -2
  12. package/dist/{process-output-C657UH7t.js → process-output-B8Cqiywi.js} +1 -1
  13. package/dist/{reveal-component-Cbw9hzrS.js → reveal-component-B7RA3HR2.js} +5 -5
  14. package/dist/{spec-BKuFJIDz.js → spec-nqxKYdNH.js} +1 -1
  15. package/dist/{toDate-BeKbrOvs.js → toDate-DLCQY32Y.js} +1 -1
  16. package/dist/{useAsyncData-yp6n17kh.js → useAsyncData-3f5sSgzf.js} +1 -1
  17. package/dist/{useDeepCompareMemoize-DJvAHUIC.js → useDeepCompareMemoize-Cu37j2QD.js} +1 -1
  18. package/dist/{useLifecycle-CsYXf0Ln.js → useLifecycle-DVkMZA_I.js} +1 -1
  19. package/dist/{useTheme-CK_R9Mn8.js → useTheme-DNcgchnA.js} +11 -2
  20. package/dist/{vega-component-ikfBfkZO.js → vega-component-7odw1pLZ.js} +5 -5
  21. package/package.json +1 -1
  22. package/src/components/app-config/ai-config.tsx +74 -15
  23. package/src/components/chat/chat-panel.tsx +2 -2
  24. package/src/components/data-table/__tests__/header-items.test.tsx +220 -10
  25. package/src/components/data-table/column-header.tsx +17 -12
  26. package/src/components/data-table/header-items.tsx +40 -16
  27. package/src/components/editor/actions/useCellActionButton.tsx +3 -3
  28. package/src/components/editor/cell/code/cell-editor.tsx +7 -4
  29. package/src/components/editor/chrome/types.ts +13 -6
  30. package/src/components/editor/chrome/wrapper/app-chrome.tsx +6 -4
  31. package/src/components/editor/chrome/wrapper/footer-items/ai-status.tsx +10 -1
  32. package/src/components/editor/chrome/wrapper/sidebar.tsx +7 -5
  33. package/src/components/editor/errors/auto-fix.tsx +3 -3
  34. package/src/components/editor/navigation/__tests__/navigation.test.ts +15 -0
  35. package/src/components/editor/navigation/navigation.ts +5 -0
  36. package/src/components/editor/output/MarimoTracebackOutput.tsx +4 -3
  37. package/src/components/editor/renderers/cell-array.tsx +27 -24
  38. package/src/core/config/__tests__/config-schema.test.ts +2 -0
  39. package/src/core/config/config-schema.ts +1 -0
  40. package/src/core/config/config.ts +16 -0
  41. package/dist/assets/__vite-browser-external-BBEFRPue.js +0 -1
@@ -2,7 +2,7 @@ import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { g as cn, r as cva } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { t as toDate } from "./toDate-BeKbrOvs.js";
5
+ import { t as toDate } from "./toDate-DLCQY32Y.js";
6
6
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
7
7
  import { i as tableFromIPC } from "./loader-BWLPpjKK.js";
8
8
  function isDate(e) {
@@ -7,14 +7,14 @@ import { t as require_react } from "./react-DA-nE2FX.js";
7
7
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
8
8
  import { n as Copy, r as toast, t as copyToClipboard } from "./copy-BuQpJEzp.js";
9
9
  import { S as logNever, i as SelectContent, l as SelectTrigger, n as capitalize, o as SelectItem, r as Select, u as SelectValue } from "./strings-Bu3vlb6W.js";
10
- import { G as marked, W as useNonce, _ as DropdownMenuSub, d as DropdownMenuContent, g as DropdownMenuSeparator, h as DropdownMenuPortal, p as DropdownMenuItem, r as Input, u as DropdownMenu, v as DropdownMenuSubContent, y as DropdownMenuSubTrigger } from "./input-Dh0iMVFM.js";
10
+ import { G as marked, W as useNonce, _ as DropdownMenuSub, d as DropdownMenuContent, g as DropdownMenuSeparator, h as DropdownMenuPortal, p as DropdownMenuItem, r as Input, u as DropdownMenu, v as DropdownMenuSubContent, y as DropdownMenuSubTrigger } from "./input-Ld3tUgdF.js";
11
11
  import { n as Trash, r as Pencil, t as BulkEdit } from "./types-CVvp1fKr.js";
12
12
  import { n as require_prop_types, r as Plus, t as ErrorBoundary } from "./ErrorBoundary-rULOrC_p.js";
13
13
  import "./react-dom-BTJzcVJ9.js";
14
14
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
15
15
  import "./zod-CoBiJ5v4.js";
16
16
  import { t as Label } from "./label-LWtdw5i8.js";
17
- import { T as useEvent_default, n as useTheme } from "./useTheme-CK_R9Mn8.js";
17
+ import { T as useEvent_default, n as useTheme } from "./useTheme-DNcgchnA.js";
18
18
  import { A as require__Map, B as require__baseGetTag, C as require__hasPath, D as require_isArguments, E as require__isIndex, F as require_isFunction, G as assert, H as require__root, I as require_isObject, J as maybe, K as assertNever, L as require__isKey, M as require_eq, N as require__getNative, O as require__castPath, P as require__toSource, R as require_isSymbol, S as resolveCellsThunk, T as require_isLength, U as require__freeGlobal, V as require__Symbol, W as require_isArray, _ as isEditableGridCell, a as mergeAndRealizeTheme, b as isReadWriteCell, c as withAlpha, d as CompactSelection, f as GridCellKind, g as booleanCellIsEditable, h as InnerGridCellKind, i as makeCSSStyle, j as require__ListCache, k as require__MapCache, l as BooleanEmpty, m as GridColumnMenuIcon, n as ThemeContext, o as blend, p as GridColumnIcon, q as deepEqual, r as getDataEditorTheme, s as blendCache, t as ClickOutsideContainer, u as BooleanIndeterminate, v as isInnerOnlyCell, w as require__toKey, x as isSizedGridColumn, y as isObjectEditorCallbackResult, z as require_isObjectLike } from "./click-outside-container-BDd67_1U.js";
19
19
  import { t as styled_default } from "./dist-D_bzzWBm.js";
20
20
  let GlideDataEditor, glide_data_editor_default;
@@ -8,18 +8,18 @@ import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
8
8
  import { r as toast, t as copyToClipboard } from "./copy-BuQpJEzp.js";
9
9
  import { o as xn, s as require_cjs, __tla as __tla_0 } from "./chunk-5FQGJX7Z-BNjes6Yx.js";
10
10
  import { a as createPopperScope, i as Root2$3, l as VisuallyHidden, n as Arrow, o as useSize, r as Content$1, t as Anchor, u as createLucideIcon } from "./dist-C1BYNeCR.js";
11
- import { a as Type, c as Calendar, i as createReducerAndAtoms, o as ToggleLeft, r as Badge, s as Hash, t as useOnMount } from "./useLifecycle-CsYXf0Ln.js";
11
+ import { a as Type, c as Calendar, i as createReducerAndAtoms, o as ToggleLeft, r as Badge, s as Hash, t as useOnMount } from "./useLifecycle-DVkMZA_I.js";
12
12
  import { t as Check } from "./check-DTbrK0zt.js";
13
13
  import { F as X, L as ChevronDown, M as usePrevious, N as useDirection, P as createCollection, S as logNever, a as SelectGroup, c as SelectSeparator, i as SelectContent, l as SelectTrigger, o as SelectItem, r as Select, s as SelectLabel, t as Strings, u as SelectValue, x as assertNever } from "./strings-Bu3vlb6W.js";
14
- import { G as marked, W as useNonce, mt as $f6c31cce2adf654f$export$45712eceda6fad21, q as useDebouncedCallback } from "./input-Dh0iMVFM.js";
15
- import { _ as isWasm, g as Deferred, h as waitForConnectionOpen, l as getRuntimeManager, t as toDate, v as CircleQuestionMark } from "./toDate-BeKbrOvs.js";
14
+ import { G as marked, W as useNonce, mt as $f6c31cce2adf654f$export$45712eceda6fad21, q as useDebouncedCallback } from "./input-Ld3tUgdF.js";
15
+ import { _ as isWasm, g as Deferred, h as waitForConnectionOpen, l as getRuntimeManager, t as toDate, v as CircleQuestionMark } from "./toDate-DLCQY32Y.js";
16
16
  import { t as require_react_dom } from "./react-dom-BTJzcVJ9.js";
17
17
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
18
18
  import { $ as StyleNamespace, B as union, N as number, P as object, R as string, T as boolean, X as withFullScreenAsRoot, Y as MAX_HEIGHT_OFFSET, Z as withSmartCollisionBoundary, _t as Primitive, at as FocusScope, ct as Root$1, dt as Presence, et as hideOthers, ft as useControllableState, gt as createContextScope, it as Portal, k as literal, lt as useCallbackRef, mt as composeEventHandlers, ot as Branch, pt as useLayoutEffect2, rt as useFocusGuards, st as DismissableLayer, tt as Combination_default, ut as useId, vt as dispatchDiscreteCustomEvent, w as array } from "./zod-CoBiJ5v4.js";
19
19
  import { i as TooltipProvider, t as Tooltip } from "./tooltip-C5FYOpQc.js";
20
20
  import { a as setDiagnostics, c as historyField, d as insertTab, f as CopyClipboardIcon, i as linter, n as forEachDiagnostic, s as history } from "./extends-BgdxCfYu.js";
21
21
  import { i as debounce_default } from "./constants-T20xxyNf.js";
22
- import { _ as useAtomValue, a as getResolvedMarimoConfig, b as atom, d as store, g as useAtom, h as Provider, i as autoInstantiateAtom, m as isIslands, n as useTheme, t as resolvedThemeAtom, u as createDeepEqualAtom, w as dequal } from "./useTheme-CK_R9Mn8.js";
22
+ import { _ as useAtomValue, a as getResolvedMarimoConfig, b as atom, d as store, g as useAtom, h as Provider, i as autoInstantiateAtom, m as isIslands, n as useTheme, t as resolvedThemeAtom, u as createDeepEqualAtom, w as dequal } from "./useTheme-DNcgchnA.js";
23
23
  import { $ as ViewPlugin, At as Prec, B as tags, Dt as EditorState, E as getIndentUnit, Et as EditorSelection, Ft as StateField, I as syntaxTree, It as Text, J as parseMixed, L as unfoldAll, Lt as Transaction, Ot as Facet, Pt as StateEffect, Q as GutterMarker, S as foldInside, Tt as Compartment, Y as Decoration, Z as EditorView, b as foldAll, dt as keymap, f as StreamLanguage, jt as RangeSet, l as LanguageDescription, mt as placeholder, ot as gutter, u as LanguageSupport, ut as hoverTooltip, vt as showPanel, w as foldNodeProp, xt as Annotation, yt as showTooltip } from "./dist-DNdhYsgW.js";
24
24
  import { t as invariant } from "./invariant-wRzNXIsJ.js";
25
25
  import { a as arrayMove, i as arrayInsertMany, l as clamp, n as arrayDelete, r as arrayInsert } from "./arrays-sEtDRoG4.js";
@@ -32,7 +32,7 @@ import { a as markdown, s as markdownLanguage } from "./dist-fQ0ViXGs.js";
32
32
  import { a as parser, i as pythonLanguage, n as localCompletionSource, r as python, t as globalCompletion } from "./dist-BotSqB48.js";
33
33
  import { n as stexMath } from "./stex-BIsgBmK4.js";
34
34
  import { t as purify } from "./purify.es-H92eMd9-.js";
35
- import { t as useAsyncData } from "./useAsyncData-yp6n17kh.js";
35
+ import { t as useAsyncData } from "./useAsyncData-3f5sSgzf.js";
36
36
  let useCellActions, getTracebackInfo, ChevronRightIcon, Minus, DeferredRequestRegistry, safeExtractSetUIElementMessageBuffers, CircleAlert, getDataTypeColor, AccordionContent, Root2$2, customPythonLanguageSupport, ChatBubbleIcon, Table2, Paths, BorderAllIcon, Trash2, PathBuilder, base64ToDataView, Eye, jotaiJsonStorage, cellErrorsAtom, convertStatsName, getMarimoExportContext, esm_default, allTablesAtom, base64ToUint8Array, ExternalLink, variablesAtom, getCellNames, useRequestClient, createActions$1, getRequestClient, dataViewToBase64, Database, PluralWord, PinLeftIcon, Layers, useChromeActions, PinRightIcon, Info, repl, CheckIcon, PaintRoller, moveToEndOfEditor, base64ToDataURL, FileText, adaptForLocalStorage, reducer$1, extractAllTracebackInfo, extractBase64FromDataURL, Columns2, PluralWords, Accordion, Item, Checkbox, AccordionTrigger, Wrench, createVariableInfoElement, hasTrustedExportContext, import_lib$1, dataSourceConnectionsAtom, renderHTML, Braces, require_client, hasRunAnyCellAtom, getTableType, notebookOutline, singleFacet, notebookAtom, isUninstantiated, numColumnsAtom, elementContainsMarimoCellFile, Boosts, atomWithStorage, getCellDomProps, useCellFocusActions, parseInitialValue, AnsiUp, AIContextProvider, Close$1, isInternalCellName, Popover, SCRATCH_CELL_ID, kioskModeAtom, PopoverTrigger, OBJECT_ID_ATTR, outputIsLoading, NotebookScopedLocalStorage, useCellIds, isOutputEmpty, RANDOM_ID_ATTR, outputIsStale, getDatasourceContext, atomWithReducer, DATA_CELL_ID, DatasourceContextProvider, jsonToTSV, sanitizeHtml, LazyAnyLanguageCodeMirror, parseDataset, parseHtmlContent, DotFilledIcon, LoaderCircle, generateUUID, ChevronDownIcon, NotebookPen, goToCellLine, PopoverClose, UIElementId, useInstallAllowed, useExpandedOutput, jsonToMarkdown, headingToIdentifier, Spinner, filenameAtom, createCell, useLastFocusedCellId, CellOutputId, getInitialAppMode, useExpandedConsoleOutput, jsonParseWithSpecialChar, isErrorMime, getCellEditorView, requestClientAtom, MarkdownRenderer, parseAttrValue, ansiToPlainText, maybeAddAltairImport, HTMLCellId, initialModeAtom, toPng$1, ZodLocalStorage, useCellNames, PopoverContent, findCellId, viewStateAtom, Sections, selectAtom, displayCellName, AccordionItem, Trigger2, MarkdownLanguageAdapter, AIContextRegistry, Content2$1, normalizeName, contextToXml, Anchor2, getValidName, isDataURLString, CircleX, DATA_TYPE_ICON;
37
37
  let __tla = Promise.all([
38
38
  (() => {
@@ -14,7 +14,7 @@ import { t as require_react_dom } from "./react-dom-BTJzcVJ9.js";
14
14
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
15
15
  import { $ as StyleNamespace, X as withFullScreenAsRoot, Y as MAX_HEIGHT_OFFSET, Z as withSmartCollisionBoundary, _t as Primitive, at as FocusScope, dt as Presence, et as hideOthers, ft as useControllableState, gt as createContextScope, it as Portal, lt as useCallbackRef, mt as composeEventHandlers, rt as useFocusGuards, st as DismissableLayer, tt as Combination_default, ut as useId, vt as dispatchDiscreteCustomEvent } from "./zod-CoBiJ5v4.js";
16
16
  import { i as debounce_default } from "./constants-T20xxyNf.js";
17
- import { T as useEvent_default } from "./useTheme-CK_R9Mn8.js";
17
+ import { T as useEvent_default } from "./useTheme-DNcgchnA.js";
18
18
  import { t as memoizeLastValue } from "./once-DPuqGUeo.js";
19
19
  var ChevronRight = createLucideIcon("chevron-right", [["path", {
20
20
  d: "m9 18 6-6-6-6",
package/dist/main.js CHANGED
@@ -22,17 +22,17 @@ import { _ as Logger, c as Objects, g as cn, h as Events, i as NOT_SET, l as use
22
22
  import { t as require_react } from "./react-DA-nE2FX.js";
23
23
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
24
24
  import { n as Copy, r as toast, t as copyToClipboard } from "./copy-BuQpJEzp.js";
25
- import { $ as useCellActions, At as DeferredRequestRegistry, B as safeExtractSetUIElementMessageBuffers, Bn as CircleAlert, Bt as getDataTypeColor, C as AccordionContent, Cn as Root2$1, Ct as customPythonLanguageSupport, Dn as Table2, Dt as Paths, E as BorderAllIcon, En as Trash2, Et as PathBuilder, F as base64ToDataView, Fn as Eye, Ft as jotaiJsonStorage, Gt as convertStatsName, H as getMarimoExportContext, J as getCellNames, Jt as useRequestClient, K as createActions, Kt as getRequestClient, L as dataViewToBase64, Ln as Database, Mn as Layers, Nn as Info, Nt as repl, On as PaintRoller, Pn as FileText, Q as reducer, Rn as Columns2, Rt as PluralWords, S as Accordion, Sn as Item$1, St as Checkbox, T as AccordionTrigger, U as hasTrustedExportContext, V as renderHTML, Vn as Braces, Vt as require_client, W as hasRunAnyCellAtom, X as notebookOutline, Y as notebookAtom, Yt as isUninstantiated, Z as numColumnsAtom, _n as atomWithStorage, a as useCellFocusActions, an as parseInitialValue, bt as isInternalCellName, ct as kioskModeAtom, dn as OBJECT_ID_ATTR, dt as outputIsLoading, en as NotebookScopedLocalStorage, et as useCellIds, f as isOutputEmpty, fn as RANDOM_ID_ATTR, ft as outputIsStale, gn as atomWithReducer, i as LazyAnyLanguageCodeMirror, in as parseDataset, jn as LoaderCircle, jt as generateUUID, k as ChevronDownIcon, ln as UIElementId, mt as headingToIdentifier, n as Spinner, nt as createCell, o as useLastFocusedCellId, ot as getInitialAppMode, p as useExpandedConsoleOutput, pn as jsonParseWithSpecialChar, pt as isErrorMime, qt as requestClientAtom, rn as parseAttrValue, s as maybeAddAltairImport, sn as HTMLCellId, st as initialModeAtom, un as findCellId, vn as selectAtom, w as AccordionItem, wn as Trigger2, wt as MarkdownLanguageAdapter, xn as Content2, xt as normalizeName, yt as getValidName, zt as DATA_TYPE_ICON, __tla as __tla_0 } from "./html-to-image-QL7QveRm.js";
25
+ import { $ as useCellActions, At as DeferredRequestRegistry, B as safeExtractSetUIElementMessageBuffers, Bn as CircleAlert, Bt as getDataTypeColor, C as AccordionContent, Cn as Root2$1, Ct as customPythonLanguageSupport, Dn as Table2, Dt as Paths, E as BorderAllIcon, En as Trash2, Et as PathBuilder, F as base64ToDataView, Fn as Eye, Ft as jotaiJsonStorage, Gt as convertStatsName, H as getMarimoExportContext, J as getCellNames, Jt as useRequestClient, K as createActions, Kt as getRequestClient, L as dataViewToBase64, Ln as Database, Mn as Layers, Nn as Info, Nt as repl, On as PaintRoller, Pn as FileText, Q as reducer, Rn as Columns2, Rt as PluralWords, S as Accordion, Sn as Item$1, St as Checkbox, T as AccordionTrigger, U as hasTrustedExportContext, V as renderHTML, Vn as Braces, Vt as require_client, W as hasRunAnyCellAtom, X as notebookOutline, Y as notebookAtom, Yt as isUninstantiated, Z as numColumnsAtom, _n as atomWithStorage, a as useCellFocusActions, an as parseInitialValue, bt as isInternalCellName, ct as kioskModeAtom, dn as OBJECT_ID_ATTR, dt as outputIsLoading, en as NotebookScopedLocalStorage, et as useCellIds, f as isOutputEmpty, fn as RANDOM_ID_ATTR, ft as outputIsStale, gn as atomWithReducer, i as LazyAnyLanguageCodeMirror, in as parseDataset, jn as LoaderCircle, jt as generateUUID, k as ChevronDownIcon, ln as UIElementId, mt as headingToIdentifier, n as Spinner, nt as createCell, o as useLastFocusedCellId, ot as getInitialAppMode, p as useExpandedConsoleOutput, pn as jsonParseWithSpecialChar, pt as isErrorMime, qt as requestClientAtom, rn as parseAttrValue, s as maybeAddAltairImport, sn as HTMLCellId, st as initialModeAtom, un as findCellId, vn as selectAtom, w as AccordionItem, wn as Trigger2, wt as MarkdownLanguageAdapter, xn as Content2, xt as normalizeName, yt as getValidName, zt as DATA_TYPE_ICON, __tla as __tla_0 } from "./html-to-image-CGbhD84m.js";
26
26
  import { __tla as __tla_1 } from "./chunk-5FQGJX7Z-BNjes6Yx.js";
27
27
  import { o as useSize, s as Root$2, u as createLucideIcon } from "./dist-C1BYNeCR.js";
28
- import { A as SquareFunction, C as DEFAULT_COLOR_SCHEME, D as SCALE_TYPE_DESCRIPTIONS, E as EMPTY_VALUE$1, O as TIME_UNIT_DESCRIPTIONS, S as DEFAULT_AGGREGATION, T as DEFAULT_TIME_UNIT, _ as AGGREGATION_TYPE_DESCRIPTIONS, a as AGGREGATION_FNS$1, b as COLOR_SCHEMES, c as COLOR_BY_FIELDS, d as NONE_VALUE, f as SELECTABLE_DATA_TYPES, g as TIME_UNITS, h as STRING_AGGREGATION_FNS, i as convertDataTypeToSelectable, j as ChartColumn, k as escapeFieldName, l as COMBINED_TIME_UNITS, m as SORT_TYPES, n as createSpecWithoutData, o as BIN_AGGREGATION, p as SINGLE_TIME_UNITS, r as isFieldSet, s as CHART_TYPES, t as augmentSpecWithData, u as ChartType, v as AGGREGATION_TYPE_ICON, w as DEFAULT_MAX_BINS_FACET, x as COUNT_FIELD, y as CHART_TYPE_ICON } from "./spec-BKuFJIDz.js";
29
- import { $ as TableBody, $t as ChevronLeft, A as ComboboxItem, At as ChartErrorState, B as contextAwarePanelOpen, Bt as $fae977aafc393c5c$export$6b862160d295c8e, C as prettifyRowColumnCount, Ct as dateToLocalISODate, D as DatePicker, Dt as TabsContent, E as useInternalStateWithSync, Et as Tabs, F as CommandList, Ft as RenderTextWithLinks, G as slotsController, H as contextAwarePanelType, Ht as GripHorizontal, I as CommandSeparator, It as Kbd, Jt as Code, K as Toggle, Kt as Ellipsis, L as smartMatch, Lt as HtmlOutput, M as CommandEmpty, Mt as ChartLoadingState, N as CommandInput, Nt as LazyVegaEmbed, O as DateRangePicker, Ot as TabsList, P as CommandItem, Pt as useOverflowDetection, Q as Table, Qt as ChevronsDownUp, R as ContextAwarePanelItem, Rt as EmotionCacheProvider, S as downloadSizeLimitAtom, St as Maps, T as getColumnCountForDisplay, Tt as dateToLocalISOTime, U as isCellAwareAtom, Ut as Funnel, V as contextAwarePanelOwner, Vt as TextWrap, W as SlotNames, Wt as EyeOff, X as Fill, Xt as ChevronsRight, Yt as ChevronsUpDown, Z as Provider$1, Zt as ChevronsLeft, _ as downloadBlob, _t as SELECT_COLUMN_ID, at as generateColumns, b as Progress, bt as getMimeValues, c as Slide, ct as ColumnChartContext, d as JsonOutput, dt as useIntersectionObserver, en as ArrowDownWideNarrow, et as TableCell, f as OutputArea, ft as usePrevious$1, g as ADD_PRINTING_CLASS, gt as INDEX_COLUMN_NAME, h as InstallPackageButton, ht as loadTableData, it as NAMELESS_COLUMN_PREFIX, j as Command, jt as ChartInfoState, k as Combobox, kt as TabsTrigger, l as RadioGroup, lt as ColumnChartSpecModel, m as DataTable, mt as loadTableAndRawData, n as marimoVersionAtom, nt as TableHeader, o as SLIDE_TYPE_OPTIONS_BY_VALUE, ot as inferFieldTypes, p as OutputRenderer, pt as getPageIndexForRow, qt as Download, r as showCodeInRunModeAtom, rt as TableRow, st as renderCellValue, t as useNotebookCodeAvailable, tt as TableHead, u as RadioGroupItem, ut as DelayMount, v as downloadByURL, vt as TOO_MANY_ROWS, w as prettifyRowCount, wt as dateToLocalISODateTime, x as Filenames, xt as isNullishFilter, y as downloadHTMLAsImage, yt as toFieldTypes, z as PANEL_TYPES, zt as $fae977aafc393c5c$export$588937bcd60ade55, __tla as __tla_2 } from "./code-visibility-y3APpJ-N.js";
30
- import { c as Calendar, i as createReducerAndAtoms, n as useOnUnmount, o as ToggleLeft, t as useOnMount } from "./useLifecycle-CsYXf0Ln.js";
28
+ import { A as SquareFunction, C as DEFAULT_COLOR_SCHEME, D as SCALE_TYPE_DESCRIPTIONS, E as EMPTY_VALUE$1, O as TIME_UNIT_DESCRIPTIONS, S as DEFAULT_AGGREGATION, T as DEFAULT_TIME_UNIT, _ as AGGREGATION_TYPE_DESCRIPTIONS, a as AGGREGATION_FNS$1, b as COLOR_SCHEMES, c as COLOR_BY_FIELDS, d as NONE_VALUE, f as SELECTABLE_DATA_TYPES, g as TIME_UNITS, h as STRING_AGGREGATION_FNS, i as convertDataTypeToSelectable, j as ChartColumn, k as escapeFieldName, l as COMBINED_TIME_UNITS, m as SORT_TYPES, n as createSpecWithoutData, o as BIN_AGGREGATION, p as SINGLE_TIME_UNITS, r as isFieldSet, s as CHART_TYPES, t as augmentSpecWithData, u as ChartType, v as AGGREGATION_TYPE_ICON, w as DEFAULT_MAX_BINS_FACET, x as COUNT_FIELD, y as CHART_TYPE_ICON } from "./spec-nqxKYdNH.js";
29
+ import { $ as TableBody, $t as ChevronLeft, A as ComboboxItem, At as ChartErrorState, B as contextAwarePanelOpen, Bt as $fae977aafc393c5c$export$6b862160d295c8e, C as prettifyRowColumnCount, Ct as dateToLocalISODate, D as DatePicker, Dt as TabsContent, E as useInternalStateWithSync, Et as Tabs, F as CommandList, Ft as RenderTextWithLinks, G as slotsController, H as contextAwarePanelType, Ht as GripHorizontal, I as CommandSeparator, It as Kbd, Jt as Code, K as Toggle, Kt as Ellipsis, L as smartMatch, Lt as HtmlOutput, M as CommandEmpty, Mt as ChartLoadingState, N as CommandInput, Nt as LazyVegaEmbed, O as DateRangePicker, Ot as TabsList, P as CommandItem, Pt as useOverflowDetection, Q as Table, Qt as ChevronsDownUp, R as ContextAwarePanelItem, Rt as EmotionCacheProvider, S as downloadSizeLimitAtom, St as Maps, T as getColumnCountForDisplay, Tt as dateToLocalISOTime, U as isCellAwareAtom, Ut as Funnel, V as contextAwarePanelOwner, Vt as TextWrap, W as SlotNames, Wt as EyeOff, X as Fill, Xt as ChevronsRight, Yt as ChevronsUpDown, Z as Provider$1, Zt as ChevronsLeft, _ as downloadBlob, _t as SELECT_COLUMN_ID, at as generateColumns, b as Progress, bt as getMimeValues, c as Slide, ct as ColumnChartContext, d as JsonOutput, dt as useIntersectionObserver, en as ArrowDownWideNarrow, et as TableCell, f as OutputArea, ft as usePrevious$1, g as ADD_PRINTING_CLASS, gt as INDEX_COLUMN_NAME, h as InstallPackageButton, ht as loadTableData, it as NAMELESS_COLUMN_PREFIX, j as Command, jt as ChartInfoState, k as Combobox, kt as TabsTrigger, l as RadioGroup, lt as ColumnChartSpecModel, m as DataTable, mt as loadTableAndRawData, n as marimoVersionAtom, nt as TableHeader, o as SLIDE_TYPE_OPTIONS_BY_VALUE, ot as inferFieldTypes, p as OutputRenderer, pt as getPageIndexForRow, qt as Download, r as showCodeInRunModeAtom, rt as TableRow, st as renderCellValue, t as useNotebookCodeAvailable, tt as TableHead, u as RadioGroupItem, ut as DelayMount, v as downloadByURL, vt as TOO_MANY_ROWS, w as prettifyRowCount, wt as dateToLocalISODateTime, x as Filenames, xt as isNullishFilter, y as downloadHTMLAsImage, yt as toFieldTypes, z as PANEL_TYPES, zt as $fae977aafc393c5c$export$588937bcd60ade55, __tla as __tla_2 } from "./code-visibility-DP2xSfeW.js";
30
+ import { c as Calendar, i as createReducerAndAtoms, n as useOnUnmount, o as ToggleLeft, t as useOnMount } from "./useLifecycle-DVkMZA_I.js";
31
31
  import { t as Check } from "./check-DTbrK0zt.js";
32
32
  import { A as Trigger$1, C as $a916eb452884faea$export$b7a616150fdb9f44, E as $18f2051aff69b9bf$export$a54013f0d02a8f82, F as X, L as ChevronDown, M as usePrevious$2, N as useDirection, P as createCollection, S as logNever, T as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7, a as SelectGroup, c as SelectSeparator, d as NativeSelect, i as SelectContent, j as clamp$2, k as Icon, l as SelectTrigger, n as capitalize, o as SelectItem, r as Select, s as SelectLabel, t as Strings, u as SelectValue, x as assertNever } from "./strings-Bu3vlb6W.js";
33
- import { I as $64fa3d84918910a7$export$29f1550f4b0d4415, K as useDebounceControlledState, L as $64fa3d84918910a7$export$4d86445c2cf5e3, Mt as $65484d02dcb7eb3e$export$457c3d6518dd4c6f, Nt as $3ef42575df84b30b$export$9d1611c77c2fe928, V as $64fa3d84918910a7$export$df3a06d6289f983e, Vt as $ff5963eb1fccf552$export$e08e3b67e392101e, a as NumberField, b as DropdownMenuTrigger, c as prettyNumber, d as DropdownMenuContent, f as DropdownMenuGroup, fn as Circle, g as DropdownMenuSeparator, i as OnBlurredInput, it as $701a24aa0da5b062$export$ea18c227d4417cc3, l as prettyScientificNumber, m as DropdownMenuLabel, n as DebouncedNumberInput, p as DropdownMenuItem, pn as ChevronRight, q as useDebouncedCallback, r as Input, rt as $f7dceffc5ad7768b$export$4e328f61c538687f, t as DebouncedInput, u as DropdownMenu, ut as $6179b936705e76d3$export$ae780daf29e6d456, vt as $458b0a5536c1a7cf$export$40bfa8c7b0832715 } from "./input-Dh0iMVFM.js";
34
- import { _ as isWasm, c as asRemoteURL, d as isStaticNotebook, f as appendQueryParams, g as Deferred, m as require_cuid2, u as getStaticVirtualFiles, v as CircleQuestionMark } from "./toDate-BeKbrOvs.js";
35
- import { a as MarimoIncomingMessageEvent, c as MarimoValueUpdateEvent, d as Square, f as File, i as PythonIcon, l as createInputEvent, n as blobToString, o as MarimoValueInputEvent, r as filesToBase64, s as MarimoValueReadyEvent, t as processOutput, u as deserializeBlob } from "./process-output-C657UH7t.js";
33
+ import { I as $64fa3d84918910a7$export$29f1550f4b0d4415, K as useDebounceControlledState, L as $64fa3d84918910a7$export$4d86445c2cf5e3, Mt as $65484d02dcb7eb3e$export$457c3d6518dd4c6f, Nt as $3ef42575df84b30b$export$9d1611c77c2fe928, V as $64fa3d84918910a7$export$df3a06d6289f983e, Vt as $ff5963eb1fccf552$export$e08e3b67e392101e, a as NumberField, b as DropdownMenuTrigger, c as prettyNumber, d as DropdownMenuContent, f as DropdownMenuGroup, fn as Circle, g as DropdownMenuSeparator, i as OnBlurredInput, it as $701a24aa0da5b062$export$ea18c227d4417cc3, l as prettyScientificNumber, m as DropdownMenuLabel, n as DebouncedNumberInput, p as DropdownMenuItem, pn as ChevronRight, q as useDebouncedCallback, r as Input, rt as $f7dceffc5ad7768b$export$4e328f61c538687f, t as DebouncedInput, u as DropdownMenu, ut as $6179b936705e76d3$export$ae780daf29e6d456, vt as $458b0a5536c1a7cf$export$40bfa8c7b0832715 } from "./input-Ld3tUgdF.js";
34
+ import { _ as isWasm, c as asRemoteURL, d as isStaticNotebook, f as appendQueryParams, g as Deferred, m as require_cuid2, u as getStaticVirtualFiles, v as CircleQuestionMark } from "./toDate-DLCQY32Y.js";
35
+ import { a as MarimoIncomingMessageEvent, c as MarimoValueUpdateEvent, d as Square, f as File, i as PythonIcon, l as createInputEvent, n as blobToString, o as MarimoValueInputEvent, r as filesToBase64, s as MarimoValueReadyEvent, t as processOutput, u as deserializeBlob } from "./process-output-B8Cqiywi.js";
36
36
  import { n as Trash, r as Pencil, t as BulkEdit } from "./types-CVvp1fKr.js";
37
37
  import { n as require_prop_types, r as Plus, t as ErrorBoundary } from "./ErrorBoundary-rULOrC_p.js";
38
38
  import { t as require_react_dom } from "./react-dom-BTJzcVJ9.js";
@@ -45,7 +45,7 @@ import { f as CopyClipboardIcon } from "./extends-BgdxCfYu.js";
45
45
  import { a as get_default } from "./hasIn-Deg7jl_j.js";
46
46
  import { n as _baseSet_default, t as pick_default } from "./pick-D1Qo8s2C.js";
47
47
  import { i as debounce_default, r as KnownQueryParams, t as CSSClasses } from "./constants-T20xxyNf.js";
48
- import { T as useEvent_default, _ as useAtomValue, b as atom, c as useResolvedMarimoConfig, d as store, g as useAtom, h as Provider, i as autoInstantiateAtom, l as AppConfigSchema, m as isIslands, n as useTheme, o as localeAtom, w as dequal } from "./useTheme-CK_R9Mn8.js";
48
+ import { T as useEvent_default, _ as useAtomValue, b as atom, c as useResolvedMarimoConfig, d as store, g as useAtom, h as Provider, i as autoInstantiateAtom, l as AppConfigSchema, m as isIslands, n as useTheme, o as localeAtom, w as dequal } from "./useTheme-DNcgchnA.js";
49
49
  import { Z as EditorView } from "./dist-DNdhYsgW.js";
50
50
  import { t as invariant } from "./invariant-wRzNXIsJ.js";
51
51
  import { l as clamp, o as arrayShallowEquals, t as Arrays } from "./arrays-sEtDRoG4.js";
@@ -59,13 +59,13 @@ import "./dist-DqAWR3CS.js";
59
59
  import { r as python } from "./dist-BotSqB48.js";
60
60
  import { n as minimalSetup, t as esm_default } from "./esm-BfhQmZjp.js";
61
61
  import "./purify.es-H92eMd9-.js";
62
- import { i as AlertTitle, n as Alert, r as AlertDescription } from "./formats-BIKFEOlR.js";
62
+ import { i as AlertTitle, n as Alert, r as AlertDescription } from "./formats-B7_JC7Ba.js";
63
63
  import "./vega-loader.browser-CZ-J8Py3.js";
64
64
  import { a as getContainerWidth, n as vegaLoadData, o as getVegaFieldTypes, s as tooltipHandler } from "./loader-BWLPpjKK.js";
65
65
  import "./defaultLocale-u-3osm0P.js";
66
66
  import "./defaultLocale-BoHTsDG6.js";
67
- import { t as useAsyncData } from "./useAsyncData-yp6n17kh.js";
68
- import { t as useDeepCompareMemoize } from "./useDeepCompareMemoize-DJvAHUIC.js";
67
+ import { t as useAsyncData } from "./useAsyncData-3f5sSgzf.js";
68
+ import { t as useDeepCompareMemoize } from "./useDeepCompareMemoize-Cu37j2QD.js";
69
69
  import "./dist-CLUtPrdy.js";
70
70
  import "./dist-RqXTaiir.js";
71
71
  import "./dist-DgnE8F-r.js";
@@ -5590,7 +5590,7 @@ let __tla = Promise.all([
5590
5590
  };
5591
5591
  }
5592
5592
  };
5593
- var LazyChatbot = import_react.lazy(() => import("./chat-ui-CpX2YcGy.js").then((e) => ({
5593
+ var LazyChatbot = import_react.lazy(() => import("./chat-ui-IyGT4sju.js").then((e) => ({
5594
5594
  default: e.Chatbot
5595
5595
  }))), messageSchema = array(object({
5596
5596
  id: string(),
@@ -5739,7 +5739,7 @@ let __tla = Promise.all([
5739
5739
  "time",
5740
5740
  "unknown"
5741
5741
  ];
5742
- var import_compiler_runtime$78 = require_compiler_runtime(), LazyDataEditor = import_react.lazy(() => import("./glide-data-editor-DjQd6fKp.js").then(async (m) => {
5742
+ var import_compiler_runtime$78 = require_compiler_runtime(), LazyDataEditor = import_react.lazy(() => import("./glide-data-editor-BmM4MCbn.js").then(async (m) => {
5743
5743
  await m.__tla;
5744
5744
  return m;
5745
5745
  }));
@@ -15164,7 +15164,7 @@ ${c}
15164
15164
  fullWidth: m,
15165
15165
  children: T
15166
15166
  }), r[20] = m, r[21] = g, r[22] = c, r[23] = T, r[24] = E) : E = r[24], E;
15167
- }, LazyDataExplorerComponent = import_react.lazy(() => import("./ConnectedDataExplorerComponent-MJy-Ll40.js"));
15167
+ }, LazyDataExplorerComponent = import_react.lazy(() => import("./ConnectedDataExplorerComponent-BQBH2XAd.js"));
15168
15168
  const DataExplorerPlugin = createPlugin("marimo-data-explorer").withData(object({
15169
15169
  label: string().nullish(),
15170
15170
  data: string()
@@ -26519,7 +26519,7 @@ ${c}
26519
26519
  return true;
26520
26520
  }
26521
26521
  }
26522
- var LazyVegaComponent = import_react.lazy(() => import("./vega-component-ikfBfkZO.js")), VegaPlugin = class {
26522
+ var LazyVegaComponent = import_react.lazy(() => import("./vega-component-7odw1pLZ.js")), VegaPlugin = class {
26523
26523
  constructor() {
26524
26524
  __publicField(this, "tagName", "marimo-vega");
26525
26525
  __publicField(this, "validator", object({
@@ -26849,7 +26849,7 @@ ${c}
26849
26849
  themeVariables: e.data.theme_variables
26850
26850
  });
26851
26851
  }
26852
- }, LazyMermaid = (0, import_react.lazy)(() => import("./mermaid-CAibas-0.js").then(async (m) => {
26852
+ }, LazyMermaid = (0, import_react.lazy)(() => import("./mermaid-BrUZ2PpQ.js").then(async (m) => {
26853
26853
  await m.__tla;
26854
26854
  return m;
26855
26855
  })), import_compiler_runtime$20 = require_compiler_runtime();
@@ -36093,7 +36093,7 @@ ${c}
36093
36093
  if (l && l !== "slide") return l;
36094
36094
  if (c == null ? void 0 : c.has(e)) return "skip";
36095
36095
  }
36096
- var LazySlidesComponent = import_react.lazy(() => import("./reveal-component-Cbw9hzrS.js"));
36096
+ var LazySlidesComponent = import_react.lazy(() => import("./reveal-component-B7RA3HR2.js"));
36097
36097
  const SlidesLayoutRenderer = ({ layout: e, setLayout: r, cells: c, mode: l }) => {
36098
36098
  var _a3;
36099
36099
  let u = useAtomValue(kioskModeAtom), d = l === "read" || u, f = useAtomValue(numColumnsAtom) > 1, [p, m] = (0, import_react.useState)(null), { cellsWithOutput: h, skippedIds: g, slideTypes: _, startCellIndex: v } = (0, import_react.useMemo)(() => computeSlideCellsInfo(c, e), [
@@ -37976,7 +37976,7 @@ ${r}
37976
37976
  });
37977
37977
  }
37978
37978
  const getMarimoVersion = () => store.get(marimoVersionAtom);
37979
- var worker_default = "/assets/worker-BoAkAmaG.js", DefaultWorkerFactory = class {
37979
+ var worker_default = "/assets/worker-CZaLU0G8.js", DefaultWorkerFactory = class {
37980
37980
  constructor(e = {}) {
37981
37981
  this.url = e.workerUrl || this.getDefaultWorkerUrl(), this.name = e.workerName || getMarimoVersion();
37982
37982
  }
@@ -7,9 +7,9 @@ import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
7
7
  import "./zod-CoBiJ5v4.js";
8
8
  import { n as ErrorBanner } from "./error-banner-5bz0L9hS.js";
9
9
  import { t as isEmpty_default } from "./isEmpty-CJJMn-QP.js";
10
- import { n as useTheme } from "./useTheme-CK_R9Mn8.js";
10
+ import { n as useTheme } from "./useTheme-DNcgchnA.js";
11
11
  import { t as purify } from "./purify.es-H92eMd9-.js";
12
- import { t as useAsyncData } from "./useAsyncData-yp6n17kh.js";
12
+ import { t as useAsyncData } from "./useAsyncData-3f5sSgzf.js";
13
13
  import { a as decodeEntities, f as isDetailedError, g as utils_default, h as removeDirectives, i as cleanAndMerge, o as encodeEntities } from "./chunk-S3R3BYOJ-oAe3dEbO.js";
14
14
  import { a as setLogLevel, i as log, r as __name, t as select_default } from "./src-Bf2iLOlr.js";
15
15
  import { t as package_default } from "./chunk-DR5Q36YT-BflwErH1.js";
@@ -1,6 +1,6 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
3
- import { it as parseHtmlContent, rt as ansiToPlainText } from "./html-to-image-QL7QveRm.js";
3
+ import { it as parseHtmlContent, rt as ansiToPlainText } from "./html-to-image-CGbhD84m.js";
4
4
  import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
5
5
  import { t as Strings } from "./strings-Bu3vlb6W.js";
6
6
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
@@ -6,17 +6,17 @@ import { s as __toESM } from "./chunk-BNovOVIE.js";
6
6
  import { _ as Logger, g as cn, h as Events, l as useEventListener, t as Button } from "./button-C5K9fIPF.js";
7
7
  import { t as require_react } from "./react-DA-nE2FX.js";
8
8
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
9
- import { ct as kioskModeAtom } from "./html-to-image-QL7QveRm.js";
9
+ import { ct as kioskModeAtom } from "./html-to-image-CGbhD84m.js";
10
10
  import "./chunk-5FQGJX7Z-BNjes6Yx.js";
11
11
  import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
12
- import { Gt as Expand, J as PanelGroup, Jt as Code, Wt as EyeOff, Y as PanelResizeHandle, a as DEFAULT_SLIDE_TYPE, c as Slide, i as DEFAULT_DECK_TRANSITION, q as Panel, s as SlideSidebar, t as useNotebookCodeAvailable } from "./code-visibility-y3APpJ-N.js";
13
- import { q as useDebouncedCallback } from "./input-Dh0iMVFM.js";
14
- import "./toDate-BeKbrOvs.js";
12
+ import { Gt as Expand, J as PanelGroup, Jt as Code, Wt as EyeOff, Y as PanelResizeHandle, a as DEFAULT_SLIDE_TYPE, c as Slide, i as DEFAULT_DECK_TRANSITION, q as Panel, s as SlideSidebar, t as useNotebookCodeAvailable } from "./code-visibility-DP2xSfeW.js";
13
+ import { q as useDebouncedCallback } from "./input-Ld3tUgdF.js";
14
+ import "./toDate-DLCQY32Y.js";
15
15
  import "./react-dom-BTJzcVJ9.js";
16
16
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
17
17
  import "./zod-CoBiJ5v4.js";
18
18
  import { t as Tooltip } from "./tooltip-C5FYOpQc.js";
19
- import { T as useEvent_default, _ as useAtomValue, m as isIslands } from "./useTheme-CK_R9Mn8.js";
19
+ import { T as useEvent_default, _ as useAtomValue, m as isIslands } from "./useTheme-DNcgchnA.js";
20
20
  import "./dist-DNdhYsgW.js";
21
21
  import "./main-Tj_-QTyF.js";
22
22
  import "./dist-fQ0ViXGs.js";
@@ -1,5 +1,5 @@
1
1
  import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
2
- import { s as Hash } from "./useLifecycle-CsYXf0Ln.js";
2
+ import { s as Hash } from "./useLifecycle-DVkMZA_I.js";
3
3
  import { i as Table, o as ChartPie } from "./useDateFormatter-BA4FCquG.js";
4
4
  import { S as logNever } from "./strings-Bu3vlb6W.js";
5
5
  var AlignCenterVertical = createLucideIcon("align-center-vertical", [
@@ -6,7 +6,7 @@ import { _ as Logger } from "./button-C5K9fIPF.js";
6
6
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
7
7
  import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
8
8
  import { r as KnownQueryParams } from "./constants-T20xxyNf.js";
9
- import { b as atom, d as store, m as isIslands, p as waitFor } from "./useTheme-CK_R9Mn8.js";
9
+ import { b as atom, d as store, m as isIslands, p as waitFor } from "./useTheme-DNcgchnA.js";
10
10
  import { t as invariant } from "./invariant-wRzNXIsJ.js";
11
11
  var CircleQuestionMark = createLucideIcon("circle-question-mark", [
12
12
  ["circle", {
@@ -1,7 +1,7 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
3
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
4
- import { T as useEvent_default } from "./useTheme-CK_R9Mn8.js";
4
+ import { T as useEvent_default } from "./useTheme-DNcgchnA.js";
5
5
  import { t as invariant } from "./invariant-wRzNXIsJ.js";
6
6
  var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1), Result = {
7
7
  error(e, s) {
@@ -1,6 +1,6 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
- import { w as dequal } from "./useTheme-CK_R9Mn8.js";
3
+ import { w as dequal } from "./useTheme-DNcgchnA.js";
4
4
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
5
5
  function useDeepCompareMemoize(e) {
6
6
  let i = import_react.useRef(e);
@@ -4,7 +4,7 @@ import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
5
  import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
6
6
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
7
- import { b as atom, v as useSetAtom } from "./useTheme-CK_R9Mn8.js";
7
+ import { b as atom, v as useSetAtom } from "./useTheme-DNcgchnA.js";
8
8
  var Calendar = createLucideIcon("calendar", [
9
9
  ["path", {
10
10
  d: "M8 2v4",
@@ -606,6 +606,7 @@ const UserConfigSchema = looseObject({
606
606
  }).prefault({}),
607
607
  package_management: looseObject({ manager: _enum(PackageManagerNames).prefault("pip") }).prefault({}),
608
608
  ai: looseObject({
609
+ enabled: boolean().prefault(true),
609
610
  rules: string().prefault(""),
610
611
  max_tokens: number().int().positive().nullable().optional(),
611
612
  mode: _enum(COPILOT_MODES).prefault("manual"),
@@ -706,13 +707,21 @@ function useResolvedMarimoConfig() {
706
707
  function getResolvedMarimoConfig() {
707
708
  return store.get(resolvedMarimoConfigAtom);
708
709
  }
709
- const aiEnabledAtom = atom((e) => isAiEnabled(e(resolvedMarimoConfigAtom)));
710
+ atom((e) => isAiEnabled(e(resolvedMarimoConfigAtom))), atom((e) => isAiModelConfigured(e(resolvedMarimoConfigAtom)));
711
+ const aiFeaturesEnabledAtom = atom((e) => isAiFeatureEnabled(e(resolvedMarimoConfigAtom)));
710
712
  atom((e) => e(resolvedMarimoConfigAtom).display.code_editor_font_size);
711
713
  const localeAtom = atom((e) => e(resolvedMarimoConfigAtom).display.locale);
712
714
  function isAiEnabled(e) {
715
+ var _a;
716
+ return ((_a = e.ai) == null ? void 0 : _a.enabled) !== false;
717
+ }
718
+ function isAiModelConfigured(e) {
713
719
  var _a, _b, _c, _d, _e, _f;
714
720
  return !!((_b = (_a = e.ai) == null ? void 0 : _a.models) == null ? void 0 : _b.chat_model) || !!((_d = (_c = e.ai) == null ? void 0 : _c.models) == null ? void 0 : _d.edit_model) || !!((_f = (_e = e.ai) == null ? void 0 : _e.models) == null ? void 0 : _f.autocomplete_model);
715
721
  }
722
+ function isAiFeatureEnabled(e) {
723
+ return isAiEnabled(e) && isAiModelConfigured(e);
724
+ }
716
725
  const appConfigAtom = atom(parseAppConfig({}));
717
726
  atom((e) => e(appConfigAtom).width), atom((e) => {
718
727
  var _a, _b;
@@ -796,7 +805,7 @@ export {
796
805
  useTheme as n,
797
806
  localeAtom as o,
798
807
  waitFor as p,
799
- aiEnabledAtom as r,
808
+ aiFeaturesEnabledAtom as r,
800
809
  resolvedMarimoConfigAtom as s,
801
810
  resolvedThemeAtom as t,
802
811
  createDeepEqualAtom as u,
@@ -2,23 +2,23 @@ import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { _ as Logger, c as Objects, g as cn, h as Events } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { c as asRemoteURL, v as CircleQuestionMark } from "./toDate-BeKbrOvs.js";
5
+ import { c as asRemoteURL, v as CircleQuestionMark } from "./toDate-DLCQY32Y.js";
6
6
  import "./react-dom-BTJzcVJ9.js";
7
7
  import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
8
8
  import "./zod-CoBiJ5v4.js";
9
9
  import { n as ErrorBanner } from "./error-banner-5bz0L9hS.js";
10
10
  import { t as Tooltip } from "./tooltip-C5FYOpQc.js";
11
11
  import { i as debounce_default } from "./constants-T20xxyNf.js";
12
- import { T as useEvent_default, n as useTheme } from "./useTheme-CK_R9Mn8.js";
12
+ import { T as useEvent_default, n as useTheme } from "./useTheme-DNcgchnA.js";
13
13
  import { s as uniq } from "./arrays-sEtDRoG4.js";
14
- import { a as isValid, i as AlertTitle, n as Alert, t as arrow } from "./formats-BIKFEOlR.js";
14
+ import { a as isValid, i as AlertTitle, n as Alert, t as arrow } from "./formats-B7_JC7Ba.js";
15
15
  import { n as formats } from "./vega-loader.browser-CZ-J8Py3.js";
16
16
  import { a as getContainerWidth, n as vegaLoadData, s as tooltipHandler } from "./loader-BWLPpjKK.js";
17
17
  import { t as j } from "./react-vega-B0sAlDTL.js";
18
18
  import "./defaultLocale-u-3osm0P.js";
19
19
  import "./defaultLocale-BoHTsDG6.js";
20
- import { t as useAsyncData } from "./useAsyncData-yp6n17kh.js";
21
- import { t as useDeepCompareMemoize } from "./useDeepCompareMemoize-DJvAHUIC.js";
20
+ import { t as useAsyncData } from "./useAsyncData-3f5sSgzf.js";
21
+ import { t as useDeepCompareMemoize } from "./useDeepCompareMemoize-Cu37j2QD.js";
22
22
  import { t as Semaphore } from "./semaphore-CNDGTzkX.js";
23
23
  var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1);
24
24
  function fixRelativeUrl(e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/islands",
3
- "version": "0.23.9-dev34",
3
+ "version": "0.23.9-dev36",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -1849,6 +1849,38 @@ export type AiSettingsSubTab =
1849
1849
  | "ai-models"
1850
1850
  | "mcp";
1851
1851
 
1852
+ const AiEnabledConfig: React.FC<AiConfigProps> = ({ form, config }) => {
1853
+ return (
1854
+ <SettingGroup>
1855
+ <FormField
1856
+ control={form.control}
1857
+ name="ai.enabled"
1858
+ render={({ field }) => (
1859
+ <div className="flex flex-col gap-y-1">
1860
+ <FormItem className={formItemClasses}>
1861
+ <FormLabel className="font-normal">Enable AI features</FormLabel>
1862
+ <FormControl>
1863
+ <Checkbox
1864
+ data-testid="ai-enabled-checkbox"
1865
+ checked={field.value !== false}
1866
+ onCheckedChange={(checked) =>
1867
+ field.onChange(checked === true)
1868
+ }
1869
+ />
1870
+ </FormControl>
1871
+ <IsOverridden userConfig={config} name="ai.enabled" />
1872
+ </FormItem>
1873
+ <FormDescription>
1874
+ When disabled, AI actions and panels are hidden from the marimo
1875
+ UI.
1876
+ </FormDescription>
1877
+ </div>
1878
+ )}
1879
+ />
1880
+ </SettingGroup>
1881
+ );
1882
+ };
1883
+
1852
1884
  export const AiConfig: React.FC<AiConfigProps> = ({
1853
1885
  form,
1854
1886
  config,
@@ -1857,18 +1889,30 @@ export const AiConfig: React.FC<AiConfigProps> = ({
1857
1889
  // MCP is not supported in WASM
1858
1890
  const wasm = isWasm();
1859
1891
  const [activeTab, setActiveTab] = useAtom(aiSettingsSubTabAtom);
1892
+ const aiEnabled = useWatch({
1893
+ control: form.control,
1894
+ name: "ai.enabled",
1895
+ });
1896
+ const activeVisibleTab =
1897
+ aiEnabled === false && activeTab !== "ai-features"
1898
+ ? "ai-features"
1899
+ : activeTab;
1860
1900
 
1861
1901
  return (
1862
1902
  <Tabs
1863
- value={activeTab}
1903
+ value={activeVisibleTab}
1864
1904
  onValueChange={(value) => setActiveTab(value as AiSettingsSubTab)}
1865
1905
  className="flex-1"
1866
1906
  >
1867
1907
  <TabsList className="mb-2">
1868
1908
  <TabsTrigger value="ai-features">AI Features</TabsTrigger>
1869
- <TabsTrigger value="ai-providers">AI Providers</TabsTrigger>
1870
- <TabsTrigger value="ai-models">AI Models</TabsTrigger>
1871
- {!wasm && <TabsTrigger value="mcp">MCP</TabsTrigger>}
1909
+ {aiEnabled !== false && (
1910
+ <>
1911
+ <TabsTrigger value="ai-providers">AI Providers</TabsTrigger>
1912
+ <TabsTrigger value="ai-models">AI Models</TabsTrigger>
1913
+ {!wasm && <TabsTrigger value="mcp">MCP</TabsTrigger>}
1914
+ </>
1915
+ )}
1872
1916
  </TabsList>
1873
1917
 
1874
1918
  <TabsContent value="ai-features">
@@ -1877,18 +1921,33 @@ export const AiConfig: React.FC<AiConfigProps> = ({
1877
1921
  config={config}
1878
1922
  onSubmit={onSubmit}
1879
1923
  />
1880
- <AiAssistConfig form={form} config={config} onSubmit={onSubmit} />
1881
- </TabsContent>
1882
- <TabsContent value="ai-providers">
1883
- <AiProvidersConfig form={form} config={config} onSubmit={onSubmit} />
1884
- </TabsContent>
1885
- <TabsContent value="ai-models">
1886
- <AiModelDisplayConfig form={form} config={config} onSubmit={onSubmit} />
1924
+ <AiEnabledConfig form={form} config={config} onSubmit={onSubmit} />
1925
+ {aiEnabled !== false && (
1926
+ <AiAssistConfig form={form} config={config} onSubmit={onSubmit} />
1927
+ )}
1887
1928
  </TabsContent>
1888
- {!wasm && (
1889
- <TabsContent value="mcp">
1890
- <MCPConfig form={form} onSubmit={onSubmit} />
1891
- </TabsContent>
1929
+ {aiEnabled !== false && (
1930
+ <>
1931
+ <TabsContent value="ai-providers">
1932
+ <AiProvidersConfig
1933
+ form={form}
1934
+ config={config}
1935
+ onSubmit={onSubmit}
1936
+ />
1937
+ </TabsContent>
1938
+ <TabsContent value="ai-models">
1939
+ <AiModelDisplayConfig
1940
+ form={form}
1941
+ config={config}
1942
+ onSubmit={onSubmit}
1943
+ />
1944
+ </TabsContent>
1945
+ {!wasm && (
1946
+ <TabsContent value="mcp">
1947
+ <MCPConfig form={form} onSubmit={onSubmit} />
1948
+ </TabsContent>
1949
+ )}
1950
+ </>
1892
1951
  )}
1893
1952
  </Tabs>
1894
1953
  );
@@ -51,7 +51,7 @@ import {
51
51
  FRONTEND_TOOL_REGISTRY,
52
52
  } from "@/core/ai/tools/registry";
53
53
  import { useCellActions } from "@/core/cells/cells";
54
- import { aiAtom, aiEnabledAtom } from "@/core/config/config";
54
+ import { aiAtom, aiModelConfiguredAtom } from "@/core/config/config";
55
55
  import { DEFAULT_AI_MODEL } from "@/core/config/config-schema";
56
56
  import { useRequestClient } from "@/core/network/requests";
57
57
  import { useRuntimeManager } from "@/core/runtime/config";
@@ -442,7 +442,7 @@ const PairWithAgentCallout: React.FC<{
442
442
  };
443
443
 
444
444
  const ChatPanel = () => {
445
- const aiConfigured = useAtomValue(aiEnabledAtom);
445
+ const aiConfigured = useAtomValue(aiModelConfiguredAtom);
446
446
  const { handleClick } = useOpenSettingsToTab();
447
447
 
448
448
  if (!aiConfigured) {