@marimo-team/islands 0.18.5-dev169 → 0.18.5-dev171
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.
- package/dist/{Combination-CoheOLQf.js → Combination-33P1MEPK.js} +1 -1
- package/dist/{ConnectedDataExplorerComponent-BhnOd8mV.js → ConnectedDataExplorerComponent-BIfUtj_S.js} +9 -9
- package/dist/{any-language-editor-CO_tO4mX.js → any-language-editor-Bda9cY1_.js} +4 -4
- package/dist/{button-BE_o5IpN.js → button-BlF-78eJ.js} +1 -1
- package/dist/{check-Crt1N6cj.js → check-DDykH_Yi.js} +1 -1
- package/dist/{copy-BmWLlwa6.js → copy-B5nooU3m.js} +2 -2
- package/dist/{error-banner-DyX88bLT.js → error-banner-UH0Nxilf.js} +3 -3
- package/dist/{esm-CiSvoGHk.js → esm-D197NGQX.js} +4 -4
- package/dist/{glide-data-editor-tS-A6Szz.js → glide-data-editor-DWlk0mEY.js} +7 -7
- package/dist/{hotkeys-BUVs9ecz.js → hotkeys-C4e3s3sJ.js} +2 -2
- package/dist/{label-C3TPGdQ0.js → label-oKuiQuiM.js} +4 -4
- package/dist/{loader-Cn9P1Cko.js → loader-DH7xXi-E.js} +1 -1
- package/dist/main.js +23 -23
- package/dist/{mermaid-BAHK5egT.js → mermaid-JA6veDHv.js} +3 -3
- package/dist/{slides-component-oQmowhoJ.js → slides-component-BNbVrOMb.js} +2 -2
- package/dist/{spec-D-_Yj0lh.js → spec-hsYzGr6F.js} +5 -5
- package/dist/{types-CJDsYooe.js → types-DEmfj_i8.js} +6 -6
- package/dist/{useAsyncData-CaouoMw5.js → useAsyncData-BGpae_uu.js} +1 -1
- package/dist/{useDeepCompareMemoize-B01JaKw2.js → useDeepCompareMemoize-D3uOrgqD.js} +5 -5
- package/dist/{useIframeCapabilities-oYhPeWtR.js → useIframeCapabilities-BsIPDupA.js} +1 -1
- package/dist/{useTheme-DLCDAdUO.js → useTheme-DdLjooMf.js} +1 -1
- package/dist/{vega-component-D36WQQq8.js → vega-component-C1FaaACt.js} +8 -8
- package/package.json +1 -1
- package/src/components/editor/chrome/panels/panel-context.tsx +34 -0
- package/src/components/editor/chrome/wrapper/app-chrome.tsx +108 -95
- package/src/components/scratchpad/scratchpad.tsx +17 -4
- package/src/core/codemirror/cells/extensions.ts +7 -4
- package/src/core/hotkeys/__tests__/shortcuts.test.ts +61 -4
- package/src/core/hotkeys/shortcuts.ts +34 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { c as useComposedRefs, o as useEventListener, s as composeRefs } from "./button-
|
|
4
|
+
import { c as useComposedRefs, o as useEventListener, s as composeRefs } from "./button-BlF-78eJ.js";
|
|
5
5
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
6
6
|
import { t as require_react_dom } from "./react-dom-DJW8xUDg.js";
|
|
7
7
|
/**
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { a as __toCommonJS, n as __esmMin, r as __export, s as __toESM, t as __commonJSMin } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { N as createLucideIcon } from "./Combination-
|
|
5
|
-
import { A as Badge, B as ListFilter, I as Type, L as ToggleLeft, M as startCase_default, N as $896ba0a80a8f4d36$export$85fd5fdf27bacc79, V as Hash, W as Calendar, j as createReducerAndAtoms, t as augmentSpecWithData, z as SquareFunction } from "./spec-
|
|
6
|
-
import { E as useOnMount, M as $a916eb452884faea$export$b7a616150fdb9f44, a as SelectGroup, c as SelectSeparator, i as SelectContent, l as SelectTrigger, o as SelectItem, r as Select, s as SelectLabel, t as Label, u as SelectValue } from "./label-
|
|
7
|
-
import { t as Button, u as cn } from "./button-
|
|
8
|
-
import { o as Objects, s as Logger } from "./hotkeys-
|
|
4
|
+
import { N as createLucideIcon } from "./Combination-33P1MEPK.js";
|
|
5
|
+
import { A as Badge, B as ListFilter, I as Type, L as ToggleLeft, M as startCase_default, N as $896ba0a80a8f4d36$export$85fd5fdf27bacc79, V as Hash, W as Calendar, j as createReducerAndAtoms, t as augmentSpecWithData, z as SquareFunction } from "./spec-hsYzGr6F.js";
|
|
6
|
+
import { E as useOnMount, M as $a916eb452884faea$export$b7a616150fdb9f44, a as SelectGroup, c as SelectSeparator, i as SelectContent, l as SelectTrigger, o as SelectItem, r as Select, s as SelectLabel, t as Label, u as SelectValue } from "./label-oKuiQuiM.js";
|
|
7
|
+
import { t as Button, u as cn } from "./button-BlF-78eJ.js";
|
|
8
|
+
import { o as Objects, s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
9
9
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
10
10
|
import "./react-dom-DJW8xUDg.js";
|
|
11
|
-
import { l as Tooltip, n as ErrorBanner } from "./error-banner-
|
|
12
|
-
import { S as createStore, g as Provider, n as useTheme, v as useAtomValue, x as atom } from "./useTheme-
|
|
11
|
+
import { l as Tooltip, n as ErrorBanner } from "./error-banner-UH0Nxilf.js";
|
|
12
|
+
import { S as createStore, g as Provider, n as useTheme, v as useAtomValue, x as atom } from "./useTheme-DdLjooMf.js";
|
|
13
13
|
import { t as isString_default } from "./isString-B0JuKBai.js";
|
|
14
|
-
import { a as tooltipHandler, n as vegaLoadData } from "./loader-
|
|
14
|
+
import { a as tooltipHandler, n as vegaLoadData } from "./loader-DH7xXi-E.js";
|
|
15
15
|
import { t as invariant } from "./invariant-BW72tHBT.js";
|
|
16
16
|
import "./vega-loader.browser-nTy1NZD3.js";
|
|
17
|
-
import { t as useAsyncData } from "./useAsyncData-
|
|
17
|
+
import { t as useAsyncData } from "./useAsyncData-BGpae_uu.js";
|
|
18
18
|
import { n as q, r as contains } from "./react-vega-z40f-dXy.js";
|
|
19
19
|
import "./defaultLocale-DZtxSCkJ.js";
|
|
20
20
|
import "./defaultLocale-DMZFeDB8.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import "./Combination-
|
|
5
|
-
import { s as Logger } from "./hotkeys-
|
|
4
|
+
import "./Combination-33P1MEPK.js";
|
|
5
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
6
6
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
7
7
|
import "./react-dom-DJW8xUDg.js";
|
|
8
|
-
import { n as ErrorBanner } from "./error-banner-
|
|
9
|
-
import { d as CopyClipboardIcon, n as loadLanguage, r as esm_default, t as langs } from "./esm-
|
|
8
|
+
import { n as ErrorBanner } from "./error-banner-UH0Nxilf.js";
|
|
9
|
+
import { d as CopyClipboardIcon, n as loadLanguage, r as esm_default, t as langs } from "./esm-D197NGQX.js";
|
|
10
10
|
import "./dist-D7jHtwN8.js";
|
|
11
11
|
import "./dist-BZXKWoES.js";
|
|
12
12
|
import "./dist-CZq4mfrw.js";
|
|
@@ -2,7 +2,7 @@ import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
4
|
import { t as clsx } from "./clsx-D2KVTYnW.js";
|
|
5
|
-
import { i as parseShortcut } from "./hotkeys-
|
|
5
|
+
import { i as parseShortcut } from "./hotkeys-C4e3s3sJ.js";
|
|
6
6
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
7
7
|
var CLASS_PART_SEPARATOR = "-", createClassGroupUtils = (e) => {
|
|
8
8
|
let _ = createClassMap(e), { conflictingClassGroups: v, conflictingClassGroupModifiers: y } = e;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { N as createLucideIcon } from "./Combination-
|
|
5
|
-
import { s as Logger } from "./hotkeys-
|
|
4
|
+
import { N as createLucideIcon } from "./Combination-33P1MEPK.js";
|
|
5
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
6
6
|
require_compiler_runtime(), require_react();
|
|
7
7
|
var TOAST_LIMIT = 1, TOAST_REMOVE_DELAY = 1e4, count = 0;
|
|
8
8
|
function genId() {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { A as createContext2, E as Primitive, M as composeEventHandlers, O as createSlot, S as useId, _ as Arrow, b as createPopperScope, c as withSmartCollisionBoundary, d as Root$1, g as Anchor, h as Portal, i as useFocusGuards, j as createContextScope, k as createSlottable, m as Presence, n as hideOthers, p as useControllableState, r as FocusScope, s as withFullScreenAsRoot, t as Combination_default, u as StyleNamespace, v as Content$1, w as DismissableLayer, y as Root2$1 } from "./Combination-
|
|
5
|
-
import { a as cva, c as useComposedRefs, n as buttonVariants, u as cn } from "./button-
|
|
6
|
-
import { s as Logger } from "./hotkeys-
|
|
4
|
+
import { A as createContext2, E as Primitive, M as composeEventHandlers, O as createSlot, S as useId, _ as Arrow, b as createPopperScope, c as withSmartCollisionBoundary, d as Root$1, g as Anchor, h as Portal, i as useFocusGuards, j as createContextScope, k as createSlottable, m as Presence, n as hideOthers, p as useControllableState, r as FocusScope, s as withFullScreenAsRoot, t as Combination_default, u as StyleNamespace, v as Content$1, w as DismissableLayer, y as Root2$1 } from "./Combination-33P1MEPK.js";
|
|
5
|
+
import { a as cva, c as useComposedRefs, n as buttonVariants, u as cn } from "./button-BlF-78eJ.js";
|
|
6
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
7
7
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
8
8
|
import { P as object, R as string } from "./zod-LbXVxiL9.js";
|
|
9
9
|
var import_react = /* @__PURE__ */ __toESM(require_react(), 1), import_jsx_runtime = /* @__PURE__ */ __toESM(require_jsx_runtime(), 1), [createTooltipContext, createTooltipScope] = createContextScope("Tooltip", [createPopperScope]), usePopperScope = createPopperScope(), PROVIDER_NAME = "TooltipProvider", DEFAULT_DELAY_DURATION = 700, TOOLTIP_OPEN = "tooltip.open", [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME), TooltipProvider$1 = (t) => {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { n as Copy, r as toast, t as copyToClipboard } from "./copy-
|
|
5
|
-
import { t as Check } from "./check-
|
|
6
|
-
import { l as Events, u as cn } from "./button-
|
|
4
|
+
import { n as Copy, r as toast, t as copyToClipboard } from "./copy-B5nooU3m.js";
|
|
5
|
+
import { t as Check } from "./check-DDykH_Yi.js";
|
|
6
|
+
import { l as Events, u as cn } from "./button-BlF-78eJ.js";
|
|
7
7
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
8
|
-
import { l as Tooltip } from "./error-banner-
|
|
8
|
+
import { l as Tooltip } from "./error-banner-UH0Nxilf.js";
|
|
9
9
|
import { $ as ViewPlugin, A as indentString, At as RangeSet, B as tags, Bt as countColumn, C as foldKeymap, Ct as CharCategory, D as getIndentation, Dt as Facet, E as getIndentUnit, Et as EditorState, F as syntaxHighlighting, Ft as Text, H as NodeProp, Ht as fromCodePoint, I as syntaxTree, It as Transaction, J as parseMixed, Lt as codePointAt, N as matchBrackets, Nt as StateEffect, O as indentNodeProp, Pt as StateField, R as Tag, Rt as codePointSize, S as foldInside, St as ChangeSet, Tt as EditorSelection, Vt as findClusterBreak, X as Direction, Y as Decoration, Z as EditorView, _t as showPanel, a as HighlightStyle, bt as Annotation, ct as highlightActiveLineGutter, dt as keymap, et as WidgetType, f as StreamLanguage, ft as lineNumbers, g as defaultHighlightStyle, gt as runScopeHandlers, h as continuedIndent, ht as rectangularSelection, it as getPanel, j as indentUnit, jt as RangeSetBuilder, k as indentOnInput, kt as Prec, lt as highlightSpecialChars, mt as placeholder, n as ExternalTokenizer, nt as drawSelection, o as IndentContext, p as bracketMatching, pt as logException, r as LRParser, rt as dropCursor, s as LRLanguage, st as highlightActiveLine, t as ContextTracker, tt as crosshairCursor, u as LanguageSupport, ut as hoverTooltip, v as delimitedIndent, w as foldNodeProp, x as foldGutter, xt as ChangeDesc, yt as crelt, z as styleTags, zt as combineConfig } from "./dist-D7jHtwN8.js";
|
|
10
10
|
import { a as closeBracketsKeymap, c as completionKeymap, f as snippetCompletion, i as closeBrackets, l as ifNotIn, r as autocompletion, s as completeFromList } from "./dist-g1p2PEVs.js";
|
|
11
11
|
import { a as PLSQL, f as sql, l as StandardSQL, t as Cassandra } from "./dist-DsOyFflT.js";
|
|
@@ -4,15 +4,15 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4
4
|
import { s as __toESM, t as __commonJSMin } from "./chunk-BNovOVIE.js";
|
|
5
5
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
6
6
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
7
|
-
import { n as Copy, r as toast, t as copyToClipboard } from "./copy-
|
|
8
|
-
import "./Combination-
|
|
9
|
-
import { A as logNever, E as useOnMount, i as SelectContent, l as SelectTrigger, o as SelectItem, r as Select, t as Label, u as SelectValue } from "./label-
|
|
10
|
-
import { S as DropdownMenuSubTrigger, W as ErrorBoundary, b as DropdownMenuSub, fn as Trash, g as DropdownMenuItem, hn as Pencil, ht as capitalize_default, i as Input, m as DropdownMenuContent, mn as Plus, mt as marked, p as DropdownMenu, pt as useNonce, t as BulkEdit, v as DropdownMenuPortal, x as DropdownMenuSubContent, y as DropdownMenuSeparator } from "./types-
|
|
11
|
-
import { l as Events, t as Button } from "./button-
|
|
12
|
-
import { s as Logger } from "./hotkeys-
|
|
7
|
+
import { n as Copy, r as toast, t as copyToClipboard } from "./copy-B5nooU3m.js";
|
|
8
|
+
import "./Combination-33P1MEPK.js";
|
|
9
|
+
import { A as logNever, E as useOnMount, i as SelectContent, l as SelectTrigger, o as SelectItem, r as Select, t as Label, u as SelectValue } from "./label-oKuiQuiM.js";
|
|
10
|
+
import { S as DropdownMenuSubTrigger, W as ErrorBoundary, b as DropdownMenuSub, fn as Trash, g as DropdownMenuItem, hn as Pencil, ht as capitalize_default, i as Input, m as DropdownMenuContent, mn as Plus, mt as marked, p as DropdownMenu, pt as useNonce, t as BulkEdit, v as DropdownMenuPortal, x as DropdownMenuSubContent, y as DropdownMenuSeparator } from "./types-DEmfj_i8.js";
|
|
11
|
+
import { l as Events, t as Button } from "./button-BlF-78eJ.js";
|
|
12
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
13
13
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
14
14
|
import "./react-dom-DJW8xUDg.js";
|
|
15
|
-
import { h as useEvent_default, n as useTheme } from "./useTheme-
|
|
15
|
+
import { h as useEvent_default, n as useTheme } from "./useTheme-DdLjooMf.js";
|
|
16
16
|
import { t as require_prop_types } from "./prop-types-DTzjue2h.js";
|
|
17
17
|
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-D90VWx_r.js";
|
|
18
18
|
import { t as styled_default } from "./dist-_FVOHtWJ.js";
|
|
@@ -141,8 +141,8 @@ function areKeysPressed(e2, p) {
|
|
|
141
141
|
function normalizeKey(e2) {
|
|
142
142
|
return {
|
|
143
143
|
control: "ctrl",
|
|
144
|
-
command: "
|
|
145
|
-
cmd: "
|
|
144
|
+
command: "mod",
|
|
145
|
+
cmd: "mod",
|
|
146
146
|
option: "alt",
|
|
147
147
|
return: "enter"
|
|
148
148
|
}[e2.toLowerCase()] || e2.toLowerCase();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { C as useLayoutEffect2, E as Primitive$1, M as composeEventHandlers, N as createLucideIcon, O as createSlot$1, S as useId, T as useCallbackRef, _ as Arrow, b as createPopperScope, c as withSmartCollisionBoundary, f as VISUALLY_HIDDEN_STYLES, g as Anchor, h as Portal, i as useFocusGuards, j as createContextScope, n as hideOthers, p as useControllableState, r as FocusScope, s as withFullScreenAsRoot, t as Combination_default, u as StyleNamespace, v as Content, w as DismissableLayer, y as Root2$1 } from "./Combination-
|
|
5
|
-
import { t as Check } from "./check-
|
|
6
|
-
import { a as cva, c as useComposedRefs, i as createSlot, l as Events, u as cn } from "./button-
|
|
7
|
-
import { s as Logger } from "./hotkeys-
|
|
4
|
+
import { C as useLayoutEffect2, E as Primitive$1, M as composeEventHandlers, N as createLucideIcon, O as createSlot$1, S as useId, T as useCallbackRef, _ as Arrow, b as createPopperScope, c as withSmartCollisionBoundary, f as VISUALLY_HIDDEN_STYLES, g as Anchor, h as Portal, i as useFocusGuards, j as createContextScope, n as hideOthers, p as useControllableState, r as FocusScope, s as withFullScreenAsRoot, t as Combination_default, u as StyleNamespace, v as Content, w as DismissableLayer, y as Root2$1 } from "./Combination-33P1MEPK.js";
|
|
5
|
+
import { t as Check } from "./check-DDykH_Yi.js";
|
|
6
|
+
import { a as cva, c as useComposedRefs, i as createSlot, l as Events, u as cn } from "./button-BlF-78eJ.js";
|
|
7
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
8
8
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
9
9
|
import { t as require_react_dom } from "./react-dom-DJW8xUDg.js";
|
|
10
10
|
import { t as toString_default } from "./toString-C4TLO6FA.js";
|
|
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
4
|
var _a, _b, _c, _d, _e;
|
|
5
|
-
import { o as Objects, s as Logger } from "./hotkeys-
|
|
5
|
+
import { o as Objects, s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
6
6
|
import { E as _baseGetTag_default, T as isObjectLike_default } from "./_baseFor-DSVmVciX.js";
|
|
7
7
|
import { St as isObject, a as loader, c as typeParsers$1, gt as isArray, o as read$1, wt as isString } from "./vega-loader.browser-nTy1NZD3.js";
|
|
8
8
|
var numberTag = "[object Number]";
|
package/dist/main.js
CHANGED
|
@@ -4,23 +4,23 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4
4
|
import { a as __toCommonJS, n as __esmMin, o as __toDynamicImportESM, r as __export$1, s as __toESM, t as __commonJSMin } from "./chunk-BNovOVIE.js";
|
|
5
5
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
6
6
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
7
|
-
import { n as Copy, r as toast, t as copyToClipboard } from "./copy-
|
|
7
|
+
import { n as Copy, r as toast, t as copyToClipboard } from "./copy-B5nooU3m.js";
|
|
8
8
|
import { h as require_cjs$1, i as Go$1, __tla as __tla_0 } from "./chunk-OGVTOU66-RMy3tlM6.js";
|
|
9
|
-
import { C as useLayoutEffect2, D as dispatchDiscreteCustomEvent, E as Primitive$1, M as composeEventHandlers, N as createLucideIcon, O as createSlot, S as useId$12, T as useCallbackRef, _ as Arrow, a as __awaiter, b as createPopperScope, c as withSmartCollisionBoundary, d as Root$5, g as Anchor, h as Portal, i as useFocusGuards, j as createContextScope$1, l as isInVscodeExtension, m as Presence, n as hideOthers, o as MAX_HEIGHT_OFFSET, p as useControllableState, r as FocusScope, s as withFullScreenAsRoot, t as Combination_default, u as StyleNamespace, v as Content$3, w as DismissableLayer, x as useSize, y as Root2$6 } from "./Combination-
|
|
10
|
-
import { A as Badge, B as ListFilter, C as DEFAULT_COLOR_SCHEME, D as SCALE_TYPE_DESCRIPTIONS, E as EMPTY_VALUE$1, F as $5a387cc49350e6db$export$722debc0e56fea39, H as ChartPie, I as Type, L as ToggleLeft, M as startCase_default, N as $896ba0a80a8f4d36$export$85fd5fdf27bacc79, O as TIME_UNIT_DESCRIPTIONS, P as $fb18d541ea1ad717$export$ad991b66133851cf, R as Table$1, S as DEFAULT_AGGREGATION, T as DEFAULT_TIME_UNIT, U as ChartColumn, V as Hash, W as Calendar, _ 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 createReducerAndAtoms, 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, z as SquareFunction } from "./spec-
|
|
11
|
-
import { t as Check } from "./check-
|
|
12
|
-
import { A as logNever, B as ChevronDown, C as useDirection, D as useOnUnmount, E as useOnMount, F as $18f2051aff69b9bf$export$a54013f0d02a8f82, I as $b5e257d569688ac6$export$535bd6ca7f90a273, M as $a916eb452884faea$export$b7a616150fdb9f44, O as usePrevious, P as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7, R as X, S as Trigger$5, T as clamp$2, _ as menuItemVariants, a as SelectGroup, b as menuSubTriggerVariants, c as SelectSeparator, d as NativeSelect, f as selectStyles, g as menuControlVariants, h as menuControlCheckVariants, i as SelectContent, k as assertNever, l as SelectTrigger, m as menuContentCommon, n as Primitive, o as SelectItem, p as MENU_ITEM_DISABLED, r as Select, s as SelectLabel, t as Label, u as SelectValue, v as menuLabelVariants, w as createCollection, x as Icon, y as menuSeparatorVariants } from "./label-
|
|
13
|
-
import { $ as $514c0188e459b4c0$export$9afb8bc826b033ea, $t as $65484d02dcb7eb3e$export$457c3d6518dd4c6f, A as ItemIndicator, At as $6db58dc88e78b024$export$2f817fcdc4b89ae0, B as createMenuScope, Bt as $458b0a5536c1a7cf$export$40bfa8c7b0832715, C as DropdownMenuTrigger, Ct as $e5be200c675c3b3a$export$fc1a364ae1f3ff10, D as Content2$3, Dt as $6c7bd7858deea686$export$cd11ab140839f11d, E as CheckboxItem, Et as $701a24aa0da5b062$export$ea18c227d4417cc3, F as Root3, Ft as $507fabe10e71c6fb$export$630ff653c5ada6a9, G as $3985021b0ad6602f$export$37fb8590cf2c088c, Gt as $df56164dff5785e2$export$4338b53315abf666, H as Root$6, Ht as $b4b717babfbb907b$export$bebd5a1431fec25d, I as Separator, It as $f6c31cce2adf654f$export$45712eceda6fad21, J as $a049562f99e7db0e$export$f9c6924e160136d1, Jt as $c87311424ea30a05$export$78551043582a6a98, K as $3985021b0ad6602f$export$f5b8910cec6cf069, Kt as $313b98861ee5dd6c$export$d6875122194c7b44, L as Sub, Lt as _class_private_field_init, M as Portal$2, Mt as $6179b936705e76d3$export$ae780daf29e6d456, N as RadioGroup$2, Nt as $9ab94262bd0047c7$export$420e68273165f4ec, O as Group$1, Ot as $fca6afa0e843324b$export$87b761675e8eaa10, P as RadioItem, Pt as $3ad3f6e1647bc98d$export$80f3e147d781571c, Q as $514c0188e459b4c0$export$5f1af8db9871e1d6, Qt as $7215afc6de606d6b$export$de79e2c695e052f3, R as SubContent, Rt as $ae1eeba8b9eafd08$export$5165eccb35aaadb5, S as DropdownMenuSubTrigger, St as $e5be200c675c3b3a$export$dad6ae84456c676a, T as Arrow2, Tt as $f7dceffc5ad7768b$export$4e328f61c538687f, U as createRovingFocusGroupScope, Ut as $99facab73266f662$export$5add1d006293d136, V as Item$2, Vt as $b4b717babfbb907b$export$4c063cf1350e6fed, W as ErrorBoundary, Wt as $e9faafb641e167db$export$90fc3a17d93f704c, X as $ee014567cb39d3f0$export$f551688fc98f2e09, Xt as $c87311424ea30a05$export$a11b0059900ceec8, Y as $d3e0e05bdfcf66bd$export$c24727297075ec6a, Yt as $c87311424ea30a05$export$9ac100e40613ea10, Z as $ee014567cb39d3f0$export$ff05c3ac10437e03, Zt as $c87311424ea30a05$export$fedb369cb70207f1, _ as DropdownMenuLabel, _n as ChevronRight, _t as $2baaea4c71418dea$export$294aa081a6c6f55d, a as OnBlurredInput, an as $431fbd86ca7dc216$export$b204af158042fbac, at as $64fa3d84918910a7$export$2881499e37b75b9a, b as DropdownMenuSub, bt as $e5be200c675c3b3a$export$a763b9476acd3eb, c as NumberField, cn as $bdb11010cef70236$export$b4cc09c592e8fdb8, ct as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8, d as prettyNumber, dn as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c, dt as $64fa3d84918910a7$export$ef03459518577ad4, en as $3ef42575df84b30b$export$9d1611c77c2fe928, et as $d2b4bc8c273e7be6$export$24d547caef80ccd1, f as prettyScientificNumber, fn as Trash, ft as $64fa3d84918910a7$export$fabf2dc03a41866e, g as DropdownMenuItem, gn as Circle, gt as $d2e8511e6f209edf$export$e908e06f4b8e3402, h as DropdownMenuGroup, hn as Pencil, ht as capitalize_default, i as Input, in as $f4e2df6bd15f8569$export$98658e8c59125e6a, it as $f39a9eba43920ace$export$b5d7cc18bb8d2b59, j as Label$2, jt as $5b160d28a433310d$export$c17fa47878dc55b6, k as Item2$2, kt as $fca6afa0e843324b$export$f12b703ca79dfbb1, l as maxFractionalDigits, ln as $bdb11010cef70236$export$f680877a34711e37, lt as $64fa3d84918910a7$export$c245e6201fed2f75, m as DropdownMenuContent, mn as Plus, mt as marked, n as DebouncedInput, nn as $d4ee10de306f2510$export$cd4e5573fbe2b576, nt as $01b77f81d0f07f68$export$75b6ee27786ba447, o as useDebounceControlledState, on as $431fbd86ca7dc216$export$f21a1ffae260145a, ot as $64fa3d84918910a7$export$29f1550f4b0d4415, p as DropdownMenu, pn as Search, pt as useNonce, q as $a049562f99e7db0e$export$eb2fcfdbd7ba97d4, qt as $c87311424ea30a05$export$6446a186d09e379e, r as DebouncedNumberInput, rn as $d4ee10de306f2510$export$e58f029f0fbfdb29, rt as $01b77f81d0f07f68$export$b04be29aa201d4f5, s as useDebouncedCallback, sn as $ff5963eb1fccf552$export$e08e3b67e392101e, st as $64fa3d84918910a7$export$4d86445c2cf5e3, t as BulkEdit, tn as $d4ee10de306f2510$export$4282f70798064fe0, tt as $d2b4bc8c273e7be6$export$353f5b6fc5456de1, u as prettyEngineeringNumber, un as $8ae05eaa5c114e9c$export$7f54fc3180508a52, ut as $64fa3d84918910a7$export$c62b8e45d58ddad9, v as DropdownMenuPortal, vt as $e93e671b31057976$export$b8473d3665f3a75a, w as Anchor2, wt as $319e236875307eab$export$a9b970dcc4ae71a9, x as DropdownMenuSubContent, xt as $e5be200c675c3b3a$export$aca958c65c314e6c, y as DropdownMenuSeparator, yt as $e5be200c675c3b3a$export$75ee7c75d68f5b0e, z as SubTrigger, zt as $9446cca9a3875146$export$7d15b64cf5a3a4c4 } from "./types-
|
|
14
|
-
import { S as CircleQuestionMark, _ as isUrl, a as AlertTitle, b as Deferred, c as constructFrom, d as millisecondsInMinute, f as millisecondsInSecond, g as appendQueryParams, h as getRuntimeManager, i as AlertDescription, l as millisecondsInDay, m as asRemoteURL, n as arrow, o as isValid$1, p as millisecondsInWeek, r as Alert, s as toDate, t as useDeepCompareMemoize, u as millisecondsInHour, v as require_cuid2, x as isWasm, y as waitForConnectionOpen } from "./useDeepCompareMemoize-
|
|
9
|
+
import { C as useLayoutEffect2, D as dispatchDiscreteCustomEvent, E as Primitive$1, M as composeEventHandlers, N as createLucideIcon, O as createSlot, S as useId$12, T as useCallbackRef, _ as Arrow, a as __awaiter, b as createPopperScope, c as withSmartCollisionBoundary, d as Root$5, g as Anchor, h as Portal, i as useFocusGuards, j as createContextScope$1, l as isInVscodeExtension, m as Presence, n as hideOthers, o as MAX_HEIGHT_OFFSET, p as useControllableState, r as FocusScope, s as withFullScreenAsRoot, t as Combination_default, u as StyleNamespace, v as Content$3, w as DismissableLayer, x as useSize, y as Root2$6 } from "./Combination-33P1MEPK.js";
|
|
10
|
+
import { A as Badge, B as ListFilter, C as DEFAULT_COLOR_SCHEME, D as SCALE_TYPE_DESCRIPTIONS, E as EMPTY_VALUE$1, F as $5a387cc49350e6db$export$722debc0e56fea39, H as ChartPie, I as Type, L as ToggleLeft, M as startCase_default, N as $896ba0a80a8f4d36$export$85fd5fdf27bacc79, O as TIME_UNIT_DESCRIPTIONS, P as $fb18d541ea1ad717$export$ad991b66133851cf, R as Table$1, S as DEFAULT_AGGREGATION, T as DEFAULT_TIME_UNIT, U as ChartColumn, V as Hash, W as Calendar, _ 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 createReducerAndAtoms, 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, z as SquareFunction } from "./spec-hsYzGr6F.js";
|
|
11
|
+
import { t as Check } from "./check-DDykH_Yi.js";
|
|
12
|
+
import { A as logNever, B as ChevronDown, C as useDirection, D as useOnUnmount, E as useOnMount, F as $18f2051aff69b9bf$export$a54013f0d02a8f82, I as $b5e257d569688ac6$export$535bd6ca7f90a273, M as $a916eb452884faea$export$b7a616150fdb9f44, O as usePrevious, P as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7, R as X, S as Trigger$5, T as clamp$2, _ as menuItemVariants, a as SelectGroup, b as menuSubTriggerVariants, c as SelectSeparator, d as NativeSelect, f as selectStyles, g as menuControlVariants, h as menuControlCheckVariants, i as SelectContent, k as assertNever, l as SelectTrigger, m as menuContentCommon, n as Primitive, o as SelectItem, p as MENU_ITEM_DISABLED, r as Select, s as SelectLabel, t as Label, u as SelectValue, v as menuLabelVariants, w as createCollection, x as Icon, y as menuSeparatorVariants } from "./label-oKuiQuiM.js";
|
|
13
|
+
import { $ as $514c0188e459b4c0$export$9afb8bc826b033ea, $t as $65484d02dcb7eb3e$export$457c3d6518dd4c6f, A as ItemIndicator, At as $6db58dc88e78b024$export$2f817fcdc4b89ae0, B as createMenuScope, Bt as $458b0a5536c1a7cf$export$40bfa8c7b0832715, C as DropdownMenuTrigger, Ct as $e5be200c675c3b3a$export$fc1a364ae1f3ff10, D as Content2$3, Dt as $6c7bd7858deea686$export$cd11ab140839f11d, E as CheckboxItem, Et as $701a24aa0da5b062$export$ea18c227d4417cc3, F as Root3, Ft as $507fabe10e71c6fb$export$630ff653c5ada6a9, G as $3985021b0ad6602f$export$37fb8590cf2c088c, Gt as $df56164dff5785e2$export$4338b53315abf666, H as Root$6, Ht as $b4b717babfbb907b$export$bebd5a1431fec25d, I as Separator, It as $f6c31cce2adf654f$export$45712eceda6fad21, J as $a049562f99e7db0e$export$f9c6924e160136d1, Jt as $c87311424ea30a05$export$78551043582a6a98, K as $3985021b0ad6602f$export$f5b8910cec6cf069, Kt as $313b98861ee5dd6c$export$d6875122194c7b44, L as Sub, Lt as _class_private_field_init, M as Portal$2, Mt as $6179b936705e76d3$export$ae780daf29e6d456, N as RadioGroup$2, Nt as $9ab94262bd0047c7$export$420e68273165f4ec, O as Group$1, Ot as $fca6afa0e843324b$export$87b761675e8eaa10, P as RadioItem, Pt as $3ad3f6e1647bc98d$export$80f3e147d781571c, Q as $514c0188e459b4c0$export$5f1af8db9871e1d6, Qt as $7215afc6de606d6b$export$de79e2c695e052f3, R as SubContent, Rt as $ae1eeba8b9eafd08$export$5165eccb35aaadb5, S as DropdownMenuSubTrigger, St as $e5be200c675c3b3a$export$dad6ae84456c676a, T as Arrow2, Tt as $f7dceffc5ad7768b$export$4e328f61c538687f, U as createRovingFocusGroupScope, Ut as $99facab73266f662$export$5add1d006293d136, V as Item$2, Vt as $b4b717babfbb907b$export$4c063cf1350e6fed, W as ErrorBoundary, Wt as $e9faafb641e167db$export$90fc3a17d93f704c, X as $ee014567cb39d3f0$export$f551688fc98f2e09, Xt as $c87311424ea30a05$export$a11b0059900ceec8, Y as $d3e0e05bdfcf66bd$export$c24727297075ec6a, Yt as $c87311424ea30a05$export$9ac100e40613ea10, Z as $ee014567cb39d3f0$export$ff05c3ac10437e03, Zt as $c87311424ea30a05$export$fedb369cb70207f1, _ as DropdownMenuLabel, _n as ChevronRight, _t as $2baaea4c71418dea$export$294aa081a6c6f55d, a as OnBlurredInput, an as $431fbd86ca7dc216$export$b204af158042fbac, at as $64fa3d84918910a7$export$2881499e37b75b9a, b as DropdownMenuSub, bt as $e5be200c675c3b3a$export$a763b9476acd3eb, c as NumberField, cn as $bdb11010cef70236$export$b4cc09c592e8fdb8, ct as $64fa3d84918910a7$export$9d4c57ee4c6ffdd8, d as prettyNumber, dn as $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c, dt as $64fa3d84918910a7$export$ef03459518577ad4, en as $3ef42575df84b30b$export$9d1611c77c2fe928, et as $d2b4bc8c273e7be6$export$24d547caef80ccd1, f as prettyScientificNumber, fn as Trash, ft as $64fa3d84918910a7$export$fabf2dc03a41866e, g as DropdownMenuItem, gn as Circle, gt as $d2e8511e6f209edf$export$e908e06f4b8e3402, h as DropdownMenuGroup, hn as Pencil, ht as capitalize_default, i as Input, in as $f4e2df6bd15f8569$export$98658e8c59125e6a, it as $f39a9eba43920ace$export$b5d7cc18bb8d2b59, j as Label$2, jt as $5b160d28a433310d$export$c17fa47878dc55b6, k as Item2$2, kt as $fca6afa0e843324b$export$f12b703ca79dfbb1, l as maxFractionalDigits, ln as $bdb11010cef70236$export$f680877a34711e37, lt as $64fa3d84918910a7$export$c245e6201fed2f75, m as DropdownMenuContent, mn as Plus, mt as marked, n as DebouncedInput, nn as $d4ee10de306f2510$export$cd4e5573fbe2b576, nt as $01b77f81d0f07f68$export$75b6ee27786ba447, o as useDebounceControlledState, on as $431fbd86ca7dc216$export$f21a1ffae260145a, ot as $64fa3d84918910a7$export$29f1550f4b0d4415, p as DropdownMenu, pn as Search, pt as useNonce, q as $a049562f99e7db0e$export$eb2fcfdbd7ba97d4, qt as $c87311424ea30a05$export$6446a186d09e379e, r as DebouncedNumberInput, rn as $d4ee10de306f2510$export$e58f029f0fbfdb29, rt as $01b77f81d0f07f68$export$b04be29aa201d4f5, s as useDebouncedCallback, sn as $ff5963eb1fccf552$export$e08e3b67e392101e, st as $64fa3d84918910a7$export$4d86445c2cf5e3, t as BulkEdit, tn as $d4ee10de306f2510$export$4282f70798064fe0, tt as $d2b4bc8c273e7be6$export$353f5b6fc5456de1, u as prettyEngineeringNumber, un as $8ae05eaa5c114e9c$export$7f54fc3180508a52, ut as $64fa3d84918910a7$export$c62b8e45d58ddad9, v as DropdownMenuPortal, vt as $e93e671b31057976$export$b8473d3665f3a75a, w as Anchor2, wt as $319e236875307eab$export$a9b970dcc4ae71a9, x as DropdownMenuSubContent, xt as $e5be200c675c3b3a$export$aca958c65c314e6c, y as DropdownMenuSeparator, yt as $e5be200c675c3b3a$export$75ee7c75d68f5b0e, z as SubTrigger, zt as $9446cca9a3875146$export$7d15b64cf5a3a4c4 } from "./types-DEmfj_i8.js";
|
|
14
|
+
import { S as CircleQuestionMark, _ as isUrl, a as AlertTitle, b as Deferred, c as constructFrom, d as millisecondsInMinute, f as millisecondsInSecond, g as appendQueryParams, h as getRuntimeManager, i as AlertDescription, l as millisecondsInDay, m as asRemoteURL, n as arrow, o as isValid$1, p as millisecondsInWeek, r as Alert, s as toDate, t as useDeepCompareMemoize, u as millisecondsInHour, v as require_cuid2, x as isWasm, y as waitForConnectionOpen } from "./useDeepCompareMemoize-D3uOrgqD.js";
|
|
15
15
|
import { n as clsx_default } from "./clsx-D2KVTYnW.js";
|
|
16
|
-
import { a as cva, c as useComposedRefs, l as Events, n as buttonVariants, o as useEventListener, r as Slot$1, s as composeRefs, t as Button, u as cn } from "./button-
|
|
17
|
-
import { c as Functions, i as parseShortcut, l as throwNotImplemented, o as Objects, r as isPlatformMac, s as Logger, t as NOT_SET } from "./hotkeys-
|
|
16
|
+
import { a as cva, c as useComposedRefs, l as Events, n as buttonVariants, o as useEventListener, r as Slot$1, s as composeRefs, t as Button, u as cn } from "./button-BlF-78eJ.js";
|
|
17
|
+
import { c as Functions, i as parseShortcut, l as throwNotImplemented, o as Objects, r as isPlatformMac, s as Logger, t as NOT_SET } from "./hotkeys-C4e3s3sJ.js";
|
|
18
18
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
19
19
|
import { t as require_react_dom } from "./react-dom-DJW8xUDg.js";
|
|
20
|
-
import { a as Portal$3, c as prettyError, d as TooltipPortal, f as TooltipProvider, h as TooltipProvider$1, i as Overlay, l as Tooltip, m as TooltipTrigger, n as ErrorBanner, o as Root$7, p as TooltipRoot, r as Content$4, s as CellNotInitializedError, t as Banner, u as TooltipContent } from "./error-banner-
|
|
21
|
-
import { a as _extends$5, c as setDiagnostics, d as CopyClipboardIcon, i as minimalSetup, l as historyField, o as forEachDiagnostic, r as esm_default, s as linter, t as langs, u as insertTab } from "./esm-
|
|
20
|
+
import { a as Portal$3, c as prettyError, d as TooltipPortal, f as TooltipProvider, h as TooltipProvider$1, i as Overlay, l as Tooltip, m as TooltipTrigger, n as ErrorBanner, o as Root$7, p as TooltipRoot, r as Content$4, s as CellNotInitializedError, t as Banner, u as TooltipContent } from "./error-banner-UH0Nxilf.js";
|
|
21
|
+
import { a as _extends$5, c as setDiagnostics, d as CopyClipboardIcon, i as minimalSetup, l as historyField, o as forEachDiagnostic, r as esm_default, s as linter, t as langs, u as insertTab } from "./esm-D197NGQX.js";
|
|
22
22
|
import { t as purify } from "./purify.es-Brw-U87Q.js";
|
|
23
|
-
import { C as buildStore, _ as useAtom, a as getResolvedMarimoConfig, b as useStore, c as AppConfigSchema, d as useJotaiEffect, g as Provider, h as useEvent_default, i as autoInstantiateAtom, l as createDeepEqualAtom, m as isEqual_default, n as useTheme, o as localeAtom, p as isIslands, r as aiEnabledAtom, s as useResolvedMarimoConfig, t as resolvedThemeAtom, u as store, v as useAtomValue, w as getBuildingBlocks, x as atom, y as useSetAtom } from "./useTheme-
|
|
23
|
+
import { C as buildStore, _ as useAtom, a as getResolvedMarimoConfig, b as useStore, c as AppConfigSchema, d as useJotaiEffect, g as Provider, h as useEvent_default, i as autoInstantiateAtom, l as createDeepEqualAtom, m as isEqual_default, n as useTheme, o as localeAtom, p as isIslands, r as aiEnabledAtom, s as useResolvedMarimoConfig, t as resolvedThemeAtom, u as store, v as useAtomValue, w as getBuildingBlocks, x as atom, y as useSetAtom } from "./useTheme-DdLjooMf.js";
|
|
24
24
|
import { $ as ViewPlugin, At as RangeSet, B as tags$1, Dt as Facet$1, E as getIndentUnit, Et as EditorState, Ft as Text$2, I as syntaxTree, It as Transaction, J as parseMixed, L as unfoldAll, Nt as StateEffect, Pt as StateField, Q as GutterMarker, S as foldInside, Tt as EditorSelection, Y as Decoration, Z as EditorView, _t as showPanel, b as foldAll, bt as Annotation, dt as keymap, et as WidgetType, f as StreamLanguage, kt as Prec, l as LanguageDescription, mt as placeholder, ot as gutter, u as LanguageSupport, ut as hoverTooltip, vt as showTooltip, w as foldNodeProp, wt as Compartment } from "./dist-D7jHtwN8.js";
|
|
25
25
|
import { d as snippet, n as acceptCompletion, o as closeCompletion, r as autocompletion, u as insertCompletionText } from "./dist-g1p2PEVs.js";
|
|
26
26
|
import { p as _baseTimes_default } from "./_baseFor-DSVmVciX.js";
|
|
@@ -31,11 +31,11 @@ import { l as _arrayFilter_default } from "./_baseIsEqual-BygTGUZ4.js";
|
|
|
31
31
|
import { a as get_default, t as _baseProperty_default } from "./_baseProperty-zelfx9VI.js";
|
|
32
32
|
import { i as debounce_default, r as KnownQueryParams, t as CSSClasses } from "./constants-DuN_eoAL.js";
|
|
33
33
|
import { t as isEmpty_default } from "./isEmpty-D2-li_vO.js";
|
|
34
|
-
import { a as tooltipHandler, n as vegaLoadData, r as createBatchedLoader, t as parseCsvData } from "./loader-
|
|
34
|
+
import { a as tooltipHandler, n as vegaLoadData, r as createBatchedLoader, t as parseCsvData } from "./loader-DH7xXi-E.js";
|
|
35
35
|
import { A as looseObject, B as union, C as any, D as discriminatedUnion, E as custom, F as optional, G as parse$3, H as safeParseAsync, I as record, J as prettifyError, K as parseAsync, L as strictObject, M as never, N as number$2, O as lazy$4, P as object$1, R as string$2, S as _null, T as boolean$2, U as ZodError$1, V as unknown, W as toJSONSchema, _ as ZodString$1, a as ZodIssueCode$1, b as _enum, c as ZodBoolean$1, d as ZodDiscriminatedUnion$1, f as ZodEnum$1, g as ZodOptional$1, h as ZodObject$1, i as string$3, j as nan, k as literal, l as ZodDate$1, m as ZodNumber$1, n as date, o as ZodAny$1, p as ZodLiteral$1, q as $ZodError, r as number$3, s as ZodArray$1, t as zod_default, u as ZodDefault$1, v as ZodType$1, w as array$2, x as _instanceof, y as ZodUnion$1, z as tuple } from "./zod-LbXVxiL9.js";
|
|
36
36
|
import { t as invariant } from "./invariant-BW72tHBT.js";
|
|
37
37
|
import { a as arrayInsert, c as arrayShallowEquals, i as arrayDelete, l as uniqueBy, n as once, o as arrayInsertMany, r as Arrays, s as arrayMove, t as memoizeLastValue, u as clamp } from "./once-C-NkXwWJ.js";
|
|
38
|
-
import { n as getIframeCapabilities, t as useIframeCapabilities } from "./useIframeCapabilities-
|
|
38
|
+
import { n as getIframeCapabilities, t as useIframeCapabilities } from "./useIframeCapabilities-BsIPDupA.js";
|
|
39
39
|
import { i as main_exports, r as init_main } from "./main-DC-71ZOX.js";
|
|
40
40
|
import { a as PLSQL, c as SQLite, d as schemaCompletionSource, f as sql, i as MySQL, l as StandardSQL, n as MSSQL, o as PostgreSQL, r as MariaSQL, s as SQLDialect, t as Cassandra, u as keywordCompletionSource } from "./dist-DsOyFflT.js";
|
|
41
41
|
import { a as markdown, s as markdownLanguage } from "./dist-BZXKWoES.js";
|
|
@@ -47,7 +47,7 @@ import { n as stexMath } from "./stex-BIsgBmK4.js";
|
|
|
47
47
|
import { n as memoize$1, t as isPropValid } from "./emotion-is-prop-valid.esm-_z-EwK5u.js";
|
|
48
48
|
import { t as require_prop_types } from "./prop-types-DTzjue2h.js";
|
|
49
49
|
import { n as formats } from "./vega-loader.browser-nTy1NZD3.js";
|
|
50
|
-
import { t as useAsyncData } from "./useAsyncData-
|
|
50
|
+
import { t as useAsyncData } from "./useAsyncData-BGpae_uu.js";
|
|
51
51
|
import "./defaultLocale-DZtxSCkJ.js";
|
|
52
52
|
import "./defaultLocale-DMZFeDB8.js";
|
|
53
53
|
import "./katex-BTobf3T8.js";
|
|
@@ -57925,7 +57925,7 @@ Database schema: ${c}`), (_a3 = r2.aiFix) == null ? void 0 : _a3.setAiCompletion
|
|
|
57925
57925
|
hasConsoleOutput: (_ == null ? void 0 : _.consoleOutputs) != null
|
|
57926
57926
|
};
|
|
57927
57927
|
}
|
|
57928
|
-
const LazyAnyLanguageCodeMirror = (0, import_react.lazy)(() => import("./any-language-editor-
|
|
57928
|
+
const LazyAnyLanguageCodeMirror = (0, import_react.lazy)(() => import("./any-language-editor-Bda9cY1_.js"));
|
|
57929
57929
|
var import_compiler_runtime$112 = require_compiler_runtime(), extensions = [
|
|
57930
57930
|
EditorView.lineWrapping
|
|
57931
57931
|
], SUPPORTED_LANGUAGES = /* @__PURE__ */ new Set([
|
|
@@ -71985,7 +71985,7 @@ Image URL: ${r.imageUrl}`)), contextToXml({
|
|
|
71985
71985
|
function getVegaFieldTypes(e) {
|
|
71986
71986
|
return !e || Object.keys(e).length === 0 ? "auto" : Objects.mapValues(e, (e2) => e2 === "date" || e2 === "time" ? "string" : e2 === "datetime" ? "date" : e2);
|
|
71987
71987
|
}
|
|
71988
|
-
var import_compiler_runtime$84 = require_compiler_runtime(), LazyDataEditor = import_react.lazy(() => import("./glide-data-editor-
|
|
71988
|
+
var import_compiler_runtime$84 = require_compiler_runtime(), LazyDataEditor = import_react.lazy(() => import("./glide-data-editor-DWlk0mEY.js").then(async (m2) => {
|
|
71989
71989
|
await m2.__tla;
|
|
71990
71990
|
return m2;
|
|
71991
71991
|
}));
|
|
@@ -83620,7 +83620,7 @@ ${c}
|
|
|
83620
83620
|
fullWidth: v,
|
|
83621
83621
|
children: z
|
|
83622
83622
|
}), r[19] = v, r[20] = y, r[21] = c, r[22] = z, r[23] = G) : G = r[23], G;
|
|
83623
|
-
}, LazyDataExplorerComponent = import_react.lazy(() => import("./ConnectedDataExplorerComponent-
|
|
83623
|
+
}, LazyDataExplorerComponent = import_react.lazy(() => import("./ConnectedDataExplorerComponent-BIfUtj_S.js"));
|
|
83624
83624
|
const DataExplorerPlugin = createPlugin("marimo-data-explorer").withData(object$1({
|
|
83625
83625
|
label: string$2().nullish(),
|
|
83626
83626
|
data: string$2()
|
|
@@ -93941,7 +93941,7 @@ ${c}
|
|
|
93941
93941
|
return true;
|
|
93942
93942
|
}
|
|
93943
93943
|
}
|
|
93944
|
-
var LazyVegaComponent = import_react.lazy(() => import("./vega-component-
|
|
93944
|
+
var LazyVegaComponent = import_react.lazy(() => import("./vega-component-C1FaaACt.js")), VegaPlugin = class {
|
|
93945
93945
|
constructor() {
|
|
93946
93946
|
__publicField(this, "tagName", "marimo-vega");
|
|
93947
93947
|
__publicField(this, "validator", object$1({
|
|
@@ -94080,7 +94080,7 @@ ${c}
|
|
|
94080
94080
|
children: e.children
|
|
94081
94081
|
});
|
|
94082
94082
|
}
|
|
94083
|
-
}, LazySlidesComponent$1 = import_react.lazy(() => import("./slides-component-
|
|
94083
|
+
}, LazySlidesComponent$1 = import_react.lazy(() => import("./slides-component-BNbVrOMb.js"));
|
|
94084
94084
|
const DownloadPlugin = createPlugin("marimo-download").withData(object$1({
|
|
94085
94085
|
data: string$2(),
|
|
94086
94086
|
disabled: boolean$2().default(false),
|
|
@@ -94262,7 +94262,7 @@ ${c}
|
|
|
94262
94262
|
diagram: e.data.diagram
|
|
94263
94263
|
});
|
|
94264
94264
|
}
|
|
94265
|
-
}, LazyMermaid = (0, import_react.lazy)(() => import("./mermaid-
|
|
94265
|
+
}, LazyMermaid = (0, import_react.lazy)(() => import("./mermaid-JA6veDHv.js")), import_compiler_runtime$19 = require_compiler_runtime();
|
|
94266
94266
|
function getRootScrollableElement() {
|
|
94267
94267
|
return getInitialAppMode() === "edit" ? document.getElementById("App") : void 0;
|
|
94268
94268
|
}
|
|
@@ -100521,7 +100521,7 @@ Defaulting to \`null\`.`;
|
|
|
100521
100521
|
cells: []
|
|
100522
100522
|
})
|
|
100523
100523
|
};
|
|
100524
|
-
var import_compiler_runtime$8 = require_compiler_runtime(), LazySlidesComponent = import_react.lazy(() => import("./slides-component-
|
|
100524
|
+
var import_compiler_runtime$8 = require_compiler_runtime(), LazySlidesComponent = import_react.lazy(() => import("./slides-component-BNbVrOMb.js"));
|
|
100525
100525
|
const SlidesLayoutRenderer = (e) => {
|
|
100526
100526
|
let r = (0, import_compiler_runtime$8.c)(11), { cells: c, mode: d } = e, f = d === "read", h;
|
|
100527
100527
|
if (r[0] !== c || r[1] !== d) {
|
|
@@ -101019,7 +101019,7 @@ Defaulting to \`null\`.`;
|
|
|
101019
101019
|
return Logger.warn("Failed to get version from mount config"), null;
|
|
101020
101020
|
}
|
|
101021
101021
|
}
|
|
101022
|
-
const marimoVersionAtom = atom(getVersionFromMountConfig() || "0.18.5-
|
|
101022
|
+
const marimoVersionAtom = atom(getVersionFromMountConfig() || "0.18.5-dev171"), showCodeInRunModeAtom = atom(true);
|
|
101023
101023
|
atom(null);
|
|
101024
101024
|
var VIRTUAL_FILE_REGEX = /\/@file\/([^\s"&'/]+)\.([\dA-Za-z]+)/g, VirtualFileTracker = class e {
|
|
101025
101025
|
constructor() {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { s as Logger } from "./hotkeys-
|
|
4
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
5
5
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
6
6
|
import "./purify.es-Brw-U87Q.js";
|
|
7
|
-
import { n as useTheme } from "./useTheme-
|
|
8
|
-
import { t as useAsyncData } from "./useAsyncData-
|
|
7
|
+
import { n as useTheme } from "./useTheme-DdLjooMf.js";
|
|
8
|
+
import { t as useAsyncData } from "./useAsyncData-BGpae_uu.js";
|
|
9
9
|
import "./marked.esm-BiQFxVJV.js";
|
|
10
10
|
import "./chunk-S3R3BYOJ-BhcrQySJ.js";
|
|
11
11
|
import "./src-CHUphWwL.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { o as useEventListener, t as Button, u as cn } from "./button-
|
|
4
|
+
import { o as useEventListener, t as Button, u as cn } from "./button-BlF-78eJ.js";
|
|
5
5
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
6
|
-
import { t as useIframeCapabilities } from "./useIframeCapabilities-
|
|
6
|
+
import { t as useIframeCapabilities } from "./useIframeCapabilities-BsIPDupA.js";
|
|
7
7
|
var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1);
|
|
8
8
|
function isObject$2(t2) {
|
|
9
9
|
return typeof t2 == "object" && !!t2 && "constructor" in t2 && t2.constructor === Object;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { N as createLucideIcon } from "./Combination-
|
|
5
|
-
import { A as logNever, P as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7, j as upperFirst_default } from "./label-
|
|
6
|
-
import { a as cva, u as cn } from "./button-
|
|
7
|
-
import { s as Logger } from "./hotkeys-
|
|
4
|
+
import { N as createLucideIcon } from "./Combination-33P1MEPK.js";
|
|
5
|
+
import { A as logNever, P as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7, j as upperFirst_default } from "./label-oKuiQuiM.js";
|
|
6
|
+
import { a as cva, u as cn } from "./button-BlF-78eJ.js";
|
|
7
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
8
8
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
9
|
-
import { x as atom, y as useSetAtom } from "./useTheme-
|
|
9
|
+
import { x as atom, y as useSetAtom } from "./useTheme-DdLjooMf.js";
|
|
10
10
|
import { t as toString_default } from "./toString-C4TLO6FA.js";
|
|
11
11
|
import { t as _arrayReduce_default } from "./_arrayReduce-BoSa0zEn.js";
|
|
12
12
|
var AlignCenterVertical = createLucideIcon("align-center-vertical", [
|
|
@@ -5,15 +5,15 @@ var _a;
|
|
|
5
5
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
6
6
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
7
7
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
8
|
-
import { D as dispatchDiscreteCustomEvent, E as Primitive, M as composeEventHandlers, N as createLucideIcon, O as createSlot, S as useId, T as useCallbackRef, _ as Arrow, b as createPopperScope, c as withSmartCollisionBoundary, g as Anchor, h as Portal, i as useFocusGuards, j as createContextScope, m as Presence, n as hideOthers, o as MAX_HEIGHT_OFFSET, p as useControllableState, r as FocusScope, s as withFullScreenAsRoot, t as Combination_default, u as StyleNamespace, v as Content, w as DismissableLayer, y as Root2$1 } from "./Combination-
|
|
9
|
-
import { t as Check } from "./check-
|
|
10
|
-
import { B as ChevronDown, C as useDirection, L as $b5e257d569688ac6$export$619500959fc48b26, M as $a916eb452884faea$export$b7a616150fdb9f44, N as $488c6ddbf4ef74c2$export$cc77c4ff7e8673c5, P as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7, R as X, _ as menuItemVariants, b as menuSubTriggerVariants, g as menuControlVariants, h as menuControlCheckVariants, j as upperFirst_default, m as menuContentCommon, v as menuLabelVariants, w as createCollection, y as menuSeparatorVariants, z as ChevronUp } from "./label-
|
|
8
|
+
import { D as dispatchDiscreteCustomEvent, E as Primitive, M as composeEventHandlers, N as createLucideIcon, O as createSlot, S as useId, T as useCallbackRef, _ as Arrow, b as createPopperScope, c as withSmartCollisionBoundary, g as Anchor, h as Portal, i as useFocusGuards, j as createContextScope, m as Presence, n as hideOthers, o as MAX_HEIGHT_OFFSET, p as useControllableState, r as FocusScope, s as withFullScreenAsRoot, t as Combination_default, u as StyleNamespace, v as Content, w as DismissableLayer, y as Root2$1 } from "./Combination-33P1MEPK.js";
|
|
9
|
+
import { t as Check } from "./check-DDykH_Yi.js";
|
|
10
|
+
import { B as ChevronDown, C as useDirection, L as $b5e257d569688ac6$export$619500959fc48b26, M as $a916eb452884faea$export$b7a616150fdb9f44, N as $488c6ddbf4ef74c2$export$cc77c4ff7e8673c5, P as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7, R as X, _ as menuItemVariants, b as menuSubTriggerVariants, g as menuControlVariants, h as menuControlCheckVariants, j as upperFirst_default, m as menuContentCommon, v as menuLabelVariants, w as createCollection, y as menuSeparatorVariants, z as ChevronUp } from "./label-oKuiQuiM.js";
|
|
11
11
|
import { n as clsx_default } from "./clsx-D2KVTYnW.js";
|
|
12
|
-
import { c as useComposedRefs, l as Events, s as composeRefs, t as Button, u as cn } from "./button-
|
|
13
|
-
import { s as Logger } from "./hotkeys-
|
|
12
|
+
import { c as useComposedRefs, l as Events, s as composeRefs, t as Button, u as cn } from "./button-BlF-78eJ.js";
|
|
13
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
14
14
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
15
15
|
import { t as require_react_dom } from "./react-dom-DJW8xUDg.js";
|
|
16
|
-
import { h as useEvent_default } from "./useTheme-
|
|
16
|
+
import { h as useEvent_default } from "./useTheme-DdLjooMf.js";
|
|
17
17
|
import { t as toString_default } from "./toString-C4TLO6FA.js";
|
|
18
18
|
import { i as debounce_default, n as Constants } from "./constants-DuN_eoAL.js";
|
|
19
19
|
import { t as memoizeLastValue } from "./once-C-NkXwWJ.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { h as useEvent_default } from "./useTheme-
|
|
4
|
+
import { h as useEvent_default } from "./useTheme-DdLjooMf.js";
|
|
5
5
|
import { t as invariant } from "./invariant-BW72tHBT.js";
|
|
6
6
|
var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1), Result = {
|
|
7
7
|
error(e, s) {
|
|
@@ -4,13 +4,13 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4
4
|
import { s as __toESM, t as __commonJSMin } from "./chunk-BNovOVIE.js";
|
|
5
5
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
6
6
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
7
|
-
import { N as createLucideIcon } from "./Combination-
|
|
8
|
-
import { a as cva, u as cn } from "./button-
|
|
9
|
-
import { s as Logger } from "./hotkeys-
|
|
7
|
+
import { N as createLucideIcon } from "./Combination-33P1MEPK.js";
|
|
8
|
+
import { a as cva, u as cn } from "./button-BlF-78eJ.js";
|
|
9
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
10
10
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
11
|
-
import { f as waitFor, p as isIslands, u as store, x as atom } from "./useTheme-
|
|
11
|
+
import { f as waitFor, p as isIslands, u as store, x as atom } from "./useTheme-DdLjooMf.js";
|
|
12
12
|
import { r as KnownQueryParams } from "./constants-DuN_eoAL.js";
|
|
13
|
-
import { i as tableFromIPC } from "./loader-
|
|
13
|
+
import { i as tableFromIPC } from "./loader-DH7xXi-E.js";
|
|
14
14
|
var CircleQuestionMark = createLucideIcon("circle-question-mark", [
|
|
15
15
|
["circle", {
|
|
16
16
|
cx: "12",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { s as Logger } from "./hotkeys-
|
|
4
|
+
import { s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
5
5
|
import { n as once } from "./once-C-NkXwWJ.js";
|
|
6
6
|
function testStorage(e) {
|
|
7
7
|
try {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import { a as resolvePlatform, n as OverridingHotkeyProvider, s as Logger } from "./hotkeys-
|
|
4
|
+
import { a as resolvePlatform, n as OverridingHotkeyProvider, s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
5
5
|
import { t as merge_default } from "./merge-Dl1bfxsj.js";
|
|
6
6
|
import { t as _baseIsEqual_default } from "./_baseIsEqual-BygTGUZ4.js";
|
|
7
7
|
import { A as looseObject, B as union, I as record, N as number, P as object, R as string, T as boolean, b as _enum, w as array } from "./zod-LbXVxiL9.js";
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { s as __toESM } from "./chunk-BNovOVIE.js";
|
|
2
2
|
import { t as require_react } from "./react-DdA8EBol.js";
|
|
3
3
|
import { t as require_compiler_runtime } from "./compiler-runtime-DHFVbq0b.js";
|
|
4
|
-
import "./Combination-
|
|
5
|
-
import { S as CircleQuestionMark, a as AlertTitle, m as asRemoteURL, n as arrow, o as isValid, r as Alert, t as useDeepCompareMemoize } from "./useDeepCompareMemoize-
|
|
6
|
-
import { l as Events } from "./button-
|
|
7
|
-
import { o as Objects, s as Logger } from "./hotkeys-
|
|
4
|
+
import "./Combination-33P1MEPK.js";
|
|
5
|
+
import { S as CircleQuestionMark, a as AlertTitle, m as asRemoteURL, n as arrow, o as isValid, r as Alert, t as useDeepCompareMemoize } from "./useDeepCompareMemoize-D3uOrgqD.js";
|
|
6
|
+
import { l as Events } from "./button-BlF-78eJ.js";
|
|
7
|
+
import { o as Objects, s as Logger } from "./hotkeys-C4e3s3sJ.js";
|
|
8
8
|
import { t as require_jsx_runtime } from "./jsx-runtime-CTBg5pdT.js";
|
|
9
9
|
import "./react-dom-DJW8xUDg.js";
|
|
10
|
-
import { l as Tooltip, n as ErrorBanner } from "./error-banner-
|
|
11
|
-
import { h as useEvent_default, n as useTheme } from "./useTheme-
|
|
10
|
+
import { l as Tooltip, n as ErrorBanner } from "./error-banner-UH0Nxilf.js";
|
|
11
|
+
import { h as useEvent_default, n as useTheme } from "./useTheme-DdLjooMf.js";
|
|
12
12
|
import { t as _baseUniq_default } from "./_baseUniq-BUGws47x.js";
|
|
13
13
|
import { i as debounce_default } from "./constants-DuN_eoAL.js";
|
|
14
|
-
import { a as tooltipHandler, n as vegaLoadData } from "./loader-
|
|
14
|
+
import { a as tooltipHandler, n as vegaLoadData } from "./loader-DH7xXi-E.js";
|
|
15
15
|
import { n as formats } from "./vega-loader.browser-nTy1NZD3.js";
|
|
16
|
-
import { t as useAsyncData } from "./useAsyncData-
|
|
16
|
+
import { t as useAsyncData } from "./useAsyncData-BGpae_uu.js";
|
|
17
17
|
import { t as j } from "./react-vega-z40f-dXy.js";
|
|
18
18
|
import "./defaultLocale-DZtxSCkJ.js";
|
|
19
19
|
import "./defaultLocale-DMZFeDB8.js";
|
package/package.json
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
import { invariant } from "@/utils/invariant";
|
|
5
|
+
|
|
6
|
+
export type PanelSection = "sidebar" | "developer-panel";
|
|
7
|
+
|
|
8
|
+
const PanelSectionContext = createContext<PanelSection | null>(null);
|
|
9
|
+
|
|
10
|
+
export const PanelSectionProvider = PanelSectionContext.Provider;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Hook to get the current panel section context.
|
|
14
|
+
* Returns "sidebar" or "developer-panel" depending on where the panel is rendered.
|
|
15
|
+
* Throws if used outside of a panel context.
|
|
16
|
+
*/
|
|
17
|
+
export function usePanelSection(): PanelSection {
|
|
18
|
+
const section = useContext(PanelSectionContext);
|
|
19
|
+
invariant(
|
|
20
|
+
section !== null,
|
|
21
|
+
"usePanelSection must be used within a PanelSectionProvider",
|
|
22
|
+
);
|
|
23
|
+
return section;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Hook to get the preferred orientation based on the panel section.
|
|
28
|
+
* - Sidebar panels should use vertical layouts (stacked)
|
|
29
|
+
* - Developer panel should use horizontal layouts (side-by-side)
|
|
30
|
+
*/
|
|
31
|
+
export function usePanelOrientation(): "horizontal" | "vertical" {
|
|
32
|
+
const section = usePanelSection();
|
|
33
|
+
return section === "sidebar" ? "vertical" : "horizontal";
|
|
34
|
+
}
|
|
@@ -26,6 +26,7 @@ import { getFeatureFlag } from "@/core/config/feature-flag";
|
|
|
26
26
|
import { cn } from "@/utils/cn";
|
|
27
27
|
import { ErrorBoundary } from "../../boundary/ErrorBoundary";
|
|
28
28
|
import { ContextAwarePanel } from "../panels/context-aware-panel/context-aware-panel";
|
|
29
|
+
import { PanelSectionProvider } from "../panels/panel-context";
|
|
29
30
|
import { panelLayoutAtom, useChromeActions, useChromeState } from "../state";
|
|
30
31
|
import { PANEL_MAP, PANELS, type PanelDescriptor } from "../types";
|
|
31
32
|
import { BackendConnectionStatus } from "./footer-items/backend-status";
|
|
@@ -222,72 +223,74 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
|
|
|
222
223
|
|
|
223
224
|
const helpPaneBody = (
|
|
224
225
|
<ErrorBoundary>
|
|
225
|
-
<
|
|
226
|
-
<div className="
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
226
|
+
<PanelSectionProvider value="sidebar">
|
|
227
|
+
<div className="flex flex-col h-full flex-1 overflow-hidden mr-[-4px]">
|
|
228
|
+
<div className="p-3 border-b flex justify-between items-center">
|
|
229
|
+
{selectedPanel === "ai" && agentsEnabled ? (
|
|
230
|
+
<Tabs
|
|
231
|
+
value={aiPanelTab}
|
|
232
|
+
onValueChange={(value) => {
|
|
233
|
+
if (value === "chat" || value === "agents") {
|
|
234
|
+
setAiPanelTab(value);
|
|
235
|
+
}
|
|
236
|
+
}}
|
|
237
|
+
>
|
|
238
|
+
<TabsList>
|
|
239
|
+
<TabsTrigger
|
|
240
|
+
value="chat"
|
|
241
|
+
className="py-0.5 text-xs uppercase tracking-wide font-bold"
|
|
242
|
+
>
|
|
243
|
+
Chat
|
|
244
|
+
</TabsTrigger>
|
|
245
|
+
<TabsTrigger
|
|
246
|
+
value="agents"
|
|
247
|
+
className="py-0.5 text-xs uppercase tracking-wide font-bold"
|
|
248
|
+
>
|
|
249
|
+
Agents
|
|
250
|
+
</TabsTrigger>
|
|
251
|
+
</TabsList>
|
|
252
|
+
</Tabs>
|
|
253
|
+
) : (
|
|
254
|
+
<span className="text-sm text-(--slate-11) uppercase tracking-wide font-semibold flex-1">
|
|
255
|
+
{selectedPanel}
|
|
256
|
+
</span>
|
|
257
|
+
)}
|
|
258
|
+
<Button
|
|
259
|
+
data-testid="close-helper-pane"
|
|
260
|
+
className="m-0"
|
|
261
|
+
size="xs"
|
|
262
|
+
variant="text"
|
|
263
|
+
onClick={() => setIsSidebarOpen(false)}
|
|
235
264
|
>
|
|
236
|
-
<
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
{selectedPanel}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
>
|
|
263
|
-
<XIcon className="w-4 h-4" />
|
|
264
|
-
</Button>
|
|
265
|
+
<XIcon className="w-4 h-4" />
|
|
266
|
+
</Button>
|
|
267
|
+
</div>
|
|
268
|
+
<Suspense>
|
|
269
|
+
<TooltipProvider>
|
|
270
|
+
{selectedPanel === "files" && <LazyFileExplorerPanel />}
|
|
271
|
+
{selectedPanel === "variables" && <LazySessionPanel />}
|
|
272
|
+
{selectedPanel === "dependencies" && <LazyDependencyGraphPanel />}
|
|
273
|
+
{selectedPanel === "packages" && <LazyPackagesPanel />}
|
|
274
|
+
{selectedPanel === "outline" && <LazyOutlinePanel />}
|
|
275
|
+
{selectedPanel === "documentation" && <LazyDocumentationPanel />}
|
|
276
|
+
{selectedPanel === "snippets" && <LazySnippetsPanel />}
|
|
277
|
+
{selectedPanel === "ai" && renderAiPanel()}
|
|
278
|
+
{selectedPanel === "errors" && <LazyErrorsPanel />}
|
|
279
|
+
{selectedPanel === "scratchpad" && <LazyScratchpadPanel />}
|
|
280
|
+
{selectedPanel === "tracing" && <LazyTracingPanel />}
|
|
281
|
+
{selectedPanel === "secrets" && <LazySecretsPanel />}
|
|
282
|
+
{selectedPanel === "logs" && <LazyLogsPanel />}
|
|
283
|
+
{selectedPanel === "terminal" && (
|
|
284
|
+
<LazyTerminal
|
|
285
|
+
visible={isSidebarOpen}
|
|
286
|
+
onClose={() => setIsSidebarOpen(false)}
|
|
287
|
+
/>
|
|
288
|
+
)}
|
|
289
|
+
{selectedPanel === "cache" && <LazyCachePanel />}
|
|
290
|
+
</TooltipProvider>
|
|
291
|
+
</Suspense>
|
|
265
292
|
</div>
|
|
266
|
-
|
|
267
|
-
<TooltipProvider>
|
|
268
|
-
{selectedPanel === "files" && <LazyFileExplorerPanel />}
|
|
269
|
-
{selectedPanel === "variables" && <LazySessionPanel />}
|
|
270
|
-
{selectedPanel === "dependencies" && <LazyDependencyGraphPanel />}
|
|
271
|
-
{selectedPanel === "packages" && <LazyPackagesPanel />}
|
|
272
|
-
{selectedPanel === "outline" && <LazyOutlinePanel />}
|
|
273
|
-
{selectedPanel === "documentation" && <LazyDocumentationPanel />}
|
|
274
|
-
{selectedPanel === "snippets" && <LazySnippetsPanel />}
|
|
275
|
-
{selectedPanel === "ai" && renderAiPanel()}
|
|
276
|
-
{selectedPanel === "errors" && <LazyErrorsPanel />}
|
|
277
|
-
{selectedPanel === "scratchpad" && <LazyScratchpadPanel />}
|
|
278
|
-
{selectedPanel === "tracing" && <LazyTracingPanel />}
|
|
279
|
-
{selectedPanel === "secrets" && <LazySecretsPanel />}
|
|
280
|
-
{selectedPanel === "logs" && <LazyLogsPanel />}
|
|
281
|
-
{selectedPanel === "terminal" && (
|
|
282
|
-
<LazyTerminal
|
|
283
|
-
visible={isSidebarOpen}
|
|
284
|
-
onClose={() => setIsSidebarOpen(false)}
|
|
285
|
-
/>
|
|
286
|
-
)}
|
|
287
|
-
{selectedPanel === "cache" && <LazyCachePanel />}
|
|
288
|
-
</TooltipProvider>
|
|
289
|
-
</Suspense>
|
|
290
|
-
</div>
|
|
293
|
+
</PanelSectionProvider>
|
|
291
294
|
</ErrorBoundary>
|
|
292
295
|
);
|
|
293
296
|
|
|
@@ -409,37 +412,47 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
|
|
|
409
412
|
</div>
|
|
410
413
|
{/* Panel content */}
|
|
411
414
|
<Suspense fallback={<div />}>
|
|
412
|
-
<
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
<
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
415
|
+
<PanelSectionProvider value="developer-panel">
|
|
416
|
+
<div className="flex-1 overflow-hidden">
|
|
417
|
+
{selectedDeveloperPanelTab === "files" && (
|
|
418
|
+
<LazyFileExplorerPanel />
|
|
419
|
+
)}
|
|
420
|
+
{selectedDeveloperPanelTab === "variables" && (
|
|
421
|
+
<LazySessionPanel />
|
|
422
|
+
)}
|
|
423
|
+
{selectedDeveloperPanelTab === "dependencies" && (
|
|
424
|
+
<LazyDependencyGraphPanel />
|
|
425
|
+
)}
|
|
426
|
+
{selectedDeveloperPanelTab === "packages" && (
|
|
427
|
+
<LazyPackagesPanel />
|
|
428
|
+
)}
|
|
429
|
+
{selectedDeveloperPanelTab === "outline" && <LazyOutlinePanel />}
|
|
430
|
+
{selectedDeveloperPanelTab === "documentation" && (
|
|
431
|
+
<LazyDocumentationPanel />
|
|
432
|
+
)}
|
|
433
|
+
{selectedDeveloperPanelTab === "snippets" && (
|
|
434
|
+
<LazySnippetsPanel />
|
|
435
|
+
)}
|
|
436
|
+
{selectedDeveloperPanelTab === "ai" && renderAiPanel()}
|
|
437
|
+
{selectedDeveloperPanelTab === "errors" && <LazyErrorsPanel />}
|
|
438
|
+
{selectedDeveloperPanelTab === "scratchpad" && (
|
|
439
|
+
<LazyScratchpadPanel />
|
|
440
|
+
)}
|
|
441
|
+
{selectedDeveloperPanelTab === "tracing" && <LazyTracingPanel />}
|
|
442
|
+
{selectedDeveloperPanelTab === "secrets" && <LazySecretsPanel />}
|
|
443
|
+
{selectedDeveloperPanelTab === "logs" && <LazyLogsPanel />}
|
|
444
|
+
{/* LazyMount needed for Terminal to avoid spurious connection */}
|
|
445
|
+
{selectedDeveloperPanelTab === "terminal" && (
|
|
446
|
+
<LazyMount isOpen={isDeveloperPanelOpen}>
|
|
447
|
+
<LazyTerminal
|
|
448
|
+
visible={isDeveloperPanelOpen}
|
|
449
|
+
onClose={() => setIsDeveloperPanelOpen(false)}
|
|
450
|
+
/>
|
|
451
|
+
</LazyMount>
|
|
452
|
+
)}
|
|
453
|
+
{selectedDeveloperPanelTab === "cache" && <LazyCachePanel />}
|
|
454
|
+
</div>
|
|
455
|
+
</PanelSectionProvider>
|
|
443
456
|
</Suspense>
|
|
444
457
|
</div>
|
|
445
458
|
</Panel>
|
|
@@ -27,6 +27,10 @@ import { useTheme } from "@/theme/useTheme";
|
|
|
27
27
|
import { cn } from "@/utils/cn";
|
|
28
28
|
import { Functions } from "@/utils/functions";
|
|
29
29
|
import { CellEditor } from "../editor/cell/code/cell-editor";
|
|
30
|
+
import {
|
|
31
|
+
usePanelOrientation,
|
|
32
|
+
usePanelSection,
|
|
33
|
+
} from "../editor/chrome/panels/panel-context";
|
|
30
34
|
import { HideInKioskMode } from "../editor/kiosk-mode";
|
|
31
35
|
import { OutputArea } from "../editor/Output";
|
|
32
36
|
import { ConsoleOutput } from "../editor/output/console/ConsoleOutput";
|
|
@@ -53,6 +57,8 @@ export const ScratchPad: React.FC = () => {
|
|
|
53
57
|
const lastFocusedCellId = useLastFocusedCellId();
|
|
54
58
|
const { createNewCell, updateCellCode } = useCellActions();
|
|
55
59
|
const { sendRunScratchpad } = useRequestClient();
|
|
60
|
+
const orientation = usePanelOrientation();
|
|
61
|
+
const section = usePanelSection();
|
|
56
62
|
|
|
57
63
|
const cellId = SCRATCH_CELL_ID;
|
|
58
64
|
const cellRuntime = notebookState.cellRuntime[cellId];
|
|
@@ -223,13 +229,15 @@ export const ScratchPad: React.FC = () => {
|
|
|
223
229
|
</div>
|
|
224
230
|
);
|
|
225
231
|
|
|
232
|
+
const isVertical = orientation === "vertical";
|
|
233
|
+
|
|
226
234
|
return (
|
|
227
235
|
<div
|
|
228
236
|
className="flex flex-col h-full overflow-hidden"
|
|
229
237
|
id={HTMLCellId.create(cellId)}
|
|
230
238
|
>
|
|
231
|
-
<PanelGroup direction=
|
|
232
|
-
{/*
|
|
239
|
+
<PanelGroup key={section} direction={orientation} className="h-full">
|
|
240
|
+
{/* Editor panel */}
|
|
233
241
|
<Panel defaultSize={40} minSize={20} maxSize={70}>
|
|
234
242
|
<div className="h-full flex flex-col overflow-hidden relative">
|
|
235
243
|
{renderToolbar()}
|
|
@@ -257,8 +265,13 @@ export const ScratchPad: React.FC = () => {
|
|
|
257
265
|
{renderHistory()}
|
|
258
266
|
</div>
|
|
259
267
|
</Panel>
|
|
260
|
-
<PanelResizeHandle
|
|
261
|
-
|
|
268
|
+
<PanelResizeHandle
|
|
269
|
+
className={cn(
|
|
270
|
+
"bg-border hover:bg-primary/50 transition-colors",
|
|
271
|
+
isVertical ? "h-1" : "w-1",
|
|
272
|
+
)}
|
|
273
|
+
/>
|
|
274
|
+
{/* Output panel */}
|
|
262
275
|
<Panel defaultSize={60} minSize={20}>
|
|
263
276
|
<div className="h-full flex flex-col divide-y overflow-hidden">
|
|
264
277
|
<div className="flex-1 overflow-auto">
|
|
@@ -7,6 +7,7 @@ import { createTracebackInfoAtom } from "@/core/cells/cells";
|
|
|
7
7
|
import { type CellId, HTMLCellId, SCRATCH_CELL_ID } from "@/core/cells/ids";
|
|
8
8
|
import type { KeymapConfig } from "@/core/config/config-schema";
|
|
9
9
|
import type { HotkeyProvider } from "@/core/hotkeys/hotkeys";
|
|
10
|
+
import { duplicateWithCtrlModifier } from "@/core/hotkeys/shortcuts";
|
|
10
11
|
import { store } from "@/core/state/jotai";
|
|
11
12
|
import { createObservable } from "@/core/state/observable";
|
|
12
13
|
import { formatKeymapExtension } from "../extensions";
|
|
@@ -33,8 +34,9 @@ function cellKeymaps({
|
|
|
33
34
|
}): Extension[] {
|
|
34
35
|
const keybindings: KeyBinding[] = [];
|
|
35
36
|
|
|
37
|
+
// Run-related keybindings get Ctrl equivalents on macOS for Jupyter/Colab users
|
|
36
38
|
keybindings.push(
|
|
37
|
-
{
|
|
39
|
+
...duplicateWithCtrlModifier({
|
|
38
40
|
key: hotkeys.getHotkey("cell.run").key,
|
|
39
41
|
preventDefault: true,
|
|
40
42
|
stopPropagation: true,
|
|
@@ -43,8 +45,9 @@ function cellKeymaps({
|
|
|
43
45
|
actions.onRun();
|
|
44
46
|
return true;
|
|
45
47
|
},
|
|
46
|
-
},
|
|
48
|
+
}),
|
|
47
49
|
{
|
|
50
|
+
// Shift-Enter has no Cmd, so no Ctrl equivalent needed
|
|
48
51
|
key: hotkeys.getHotkey("cell.runAndNewBelow").key,
|
|
49
52
|
preventDefault: true,
|
|
50
53
|
stopPropagation: true,
|
|
@@ -59,7 +62,7 @@ function cellKeymaps({
|
|
|
59
62
|
return true;
|
|
60
63
|
},
|
|
61
64
|
},
|
|
62
|
-
{
|
|
65
|
+
...duplicateWithCtrlModifier({
|
|
63
66
|
key: hotkeys.getHotkey("cell.runAndNewAbove").key,
|
|
64
67
|
preventDefault: true,
|
|
65
68
|
stopPropagation: true,
|
|
@@ -73,7 +76,7 @@ function cellKeymaps({
|
|
|
73
76
|
actions.moveToNextCell({ cellId, before: true });
|
|
74
77
|
return true;
|
|
75
78
|
},
|
|
76
|
-
},
|
|
79
|
+
}),
|
|
77
80
|
{
|
|
78
81
|
key: hotkeys.getHotkey("cell.aiCompletion").key,
|
|
79
82
|
preventDefault: true,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
import { describe, expect, it, vi } from "vitest";
|
|
3
|
-
import { parseShortcut } from "../shortcuts";
|
|
3
|
+
import { duplicateWithCtrlModifier, parseShortcut } from "../shortcuts";
|
|
4
4
|
|
|
5
5
|
describe("parseShortcut", () => {
|
|
6
6
|
it("should recognize single key shortcuts", () => {
|
|
@@ -21,10 +21,14 @@ describe("parseShortcut", () => {
|
|
|
21
21
|
expect(shortcut(event)).toBe(true);
|
|
22
22
|
});
|
|
23
23
|
|
|
24
|
-
it("should recognize combined Cmd key shortcuts", () => {
|
|
24
|
+
it("should recognize combined Cmd key shortcuts with meta or ctrl", () => {
|
|
25
25
|
const shortcut = parseShortcut("Cmd-a");
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
// Cmd should accept both metaKey and ctrlKey (like Mod)
|
|
27
|
+
const metaEvent = new KeyboardEvent("keydown", { key: "a", metaKey: true });
|
|
28
|
+
expect(shortcut(metaEvent)).toBe(true);
|
|
29
|
+
|
|
30
|
+
const ctrlEvent = new KeyboardEvent("keydown", { key: "a", ctrlKey: true });
|
|
31
|
+
expect(shortcut(ctrlEvent)).toBe(true);
|
|
28
32
|
});
|
|
29
33
|
|
|
30
34
|
it("should recognize Arrow key shortcuts", () => {
|
|
@@ -164,3 +168,56 @@ describe("parseShortcut", () => {
|
|
|
164
168
|
expect(parseShortcut("Ctrl+A")(event)).toBe(false);
|
|
165
169
|
});
|
|
166
170
|
});
|
|
171
|
+
|
|
172
|
+
describe("duplicateWithCtrlModifier", () => {
|
|
173
|
+
it("should duplicate Cmd binding with Ctrl variant on macOS", () => {
|
|
174
|
+
// Mock macOS platform
|
|
175
|
+
vi.spyOn(window.navigator, "platform", "get").mockReturnValue("MacIntel");
|
|
176
|
+
|
|
177
|
+
const binding = { key: "Cmd-Enter", run: () => true };
|
|
178
|
+
const result = duplicateWithCtrlModifier(binding);
|
|
179
|
+
|
|
180
|
+
expect(result).toHaveLength(2);
|
|
181
|
+
expect(result[0].key).toBe("Cmd-Enter");
|
|
182
|
+
expect(result[1].key).toBe("Ctrl-Enter");
|
|
183
|
+
|
|
184
|
+
vi.restoreAllMocks();
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it("should not duplicate binding without Cmd", () => {
|
|
188
|
+
vi.spyOn(window.navigator, "platform", "get").mockReturnValue("MacIntel");
|
|
189
|
+
|
|
190
|
+
const binding = { key: "Shift-Enter", run: () => true };
|
|
191
|
+
const result = duplicateWithCtrlModifier(binding);
|
|
192
|
+
|
|
193
|
+
expect(result).toHaveLength(1);
|
|
194
|
+
expect(result[0].key).toBe("Shift-Enter");
|
|
195
|
+
|
|
196
|
+
vi.restoreAllMocks();
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it("should not duplicate Cmd-Ctrl binding to avoid Ctrl-Ctrl", () => {
|
|
200
|
+
vi.spyOn(window.navigator, "platform", "get").mockReturnValue("MacIntel");
|
|
201
|
+
|
|
202
|
+
const binding = { key: "Cmd-Ctrl-Enter", run: () => true };
|
|
203
|
+
const result = duplicateWithCtrlModifier(binding);
|
|
204
|
+
|
|
205
|
+
// Should NOT create a Ctrl-Ctrl-Enter variant
|
|
206
|
+
expect(result).toHaveLength(1);
|
|
207
|
+
expect(result[0].key).toBe("Cmd-Ctrl-Enter");
|
|
208
|
+
|
|
209
|
+
vi.restoreAllMocks();
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
it("should not duplicate on non-macOS platforms", () => {
|
|
213
|
+
vi.spyOn(window.navigator, "platform", "get").mockReturnValue("Win32");
|
|
214
|
+
|
|
215
|
+
const binding = { key: "Cmd-Enter", run: () => true };
|
|
216
|
+
const result = duplicateWithCtrlModifier(binding);
|
|
217
|
+
|
|
218
|
+
expect(result).toHaveLength(1);
|
|
219
|
+
expect(result[0].key).toBe("Cmd-Enter");
|
|
220
|
+
|
|
221
|
+
vi.restoreAllMocks();
|
|
222
|
+
});
|
|
223
|
+
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
+
import type { KeyBinding } from "@codemirror/view";
|
|
3
4
|
import { Logger } from "@/utils/Logger";
|
|
4
5
|
import { NOT_SET } from "./hotkeys";
|
|
5
6
|
|
|
@@ -106,8 +107,8 @@ function areKeysPressed(keys: string[], e: IKeyboardEvent): boolean {
|
|
|
106
107
|
function normalizeKey(key: string): string {
|
|
107
108
|
const specialKeys: { [key: string]: string } = {
|
|
108
109
|
control: "ctrl",
|
|
109
|
-
command: "
|
|
110
|
-
cmd: "
|
|
110
|
+
command: "mod",
|
|
111
|
+
cmd: "mod",
|
|
111
112
|
option: "alt",
|
|
112
113
|
return: "enter",
|
|
113
114
|
};
|
|
@@ -144,3 +145,34 @@ export function resolvePlatform(): Platform {
|
|
|
144
145
|
}
|
|
145
146
|
return "linux";
|
|
146
147
|
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* On macOS, duplicate a Cmd-based keybinding to also work with Ctrl.
|
|
151
|
+
* This allows users coming from Jupyter/Colab to use Ctrl-Enter to run cells.
|
|
152
|
+
*
|
|
153
|
+
* Returns an array with the original binding, plus a Ctrl variant on macOS.
|
|
154
|
+
* For use with CodeMirror keymap bindings.
|
|
155
|
+
*
|
|
156
|
+
* Design decision: User-defined Cmd shortcuts also get Ctrl equivalents.
|
|
157
|
+
* The edge case is if a user wants `Cmd+<x>` and `Ctrl+<x>` to trigger
|
|
158
|
+
* different actions, this isn't currently supported. Given the relatively
|
|
159
|
+
* small number of keymaps, we're keeping this simple. If it becomes an issue,
|
|
160
|
+
* we can refactor to resolve a special "Mod" key internally and require users
|
|
161
|
+
* to specify explicit single-key mappings.
|
|
162
|
+
*
|
|
163
|
+
* Note: If the binding already contains Ctrl (e.g., Cmd-Ctrl-Enter),
|
|
164
|
+
* no duplication is done to avoid producing invalid Ctrl-Ctrl-key combos.
|
|
165
|
+
*/
|
|
166
|
+
export function duplicateWithCtrlModifier<T extends KeyBinding>(
|
|
167
|
+
binding: T,
|
|
168
|
+
): T[] {
|
|
169
|
+
// Skip if not macOS, not a Cmd binding, or already has Ctrl
|
|
170
|
+
if (
|
|
171
|
+
!isPlatformMac() ||
|
|
172
|
+
!binding.key?.includes("Cmd") ||
|
|
173
|
+
binding.key.includes("Ctrl")
|
|
174
|
+
) {
|
|
175
|
+
return [binding];
|
|
176
|
+
}
|
|
177
|
+
return [binding, { ...binding, key: binding.key.replaceAll("Cmd", "Ctrl") }];
|
|
178
|
+
}
|