{"version":3,"mappings":"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","names":["TokenizerState","_ruleStack","other","normalizeColor","color","c","textmateThemeToMonacoTheme","theme","rules","themeSettings","scope","foreground","background","fontStyle","scopes","s","colors","key","value","shikiToMonaco","highlighter","monaco","options","themeMap","themeIds","themeId","tmTheme","monacoTheme","colorMap","colorToScopeMap","_setTheme","themeName","ret","i","rule","findScopeByColor","tokenizeMaxLineLength","tokenizeTimeLimit","monacoLanguageIds","l","lang","INITIAL","line","state","result","tokensLength","tokens","j","startIndex","metadata","EncodedTokenMetadata","insert_hydration","target","div3","anchor","if_block","ctx","firstLoad","create_if_block","toggle_class","div","container","source","$$props","showLineNum","wrap","editor","core","loadLanguage","language","getHighlighter","dispatch","createEventDispatcher","onMount","$$invalidate","set_store_value","showMenu","$showMenu","onDestroy","reload","$$value","safeOnDestroy","fn","derivedWithUnsubscribe","stores","unsubscribers","onUnsubscribe","cb","unsubscribe","derivedStore","derived","$storeValues","args","unsub","clientEffect","isBrowser","returned","toWritableStores","properties","propertyKey","writable","getOptionUpdater","store","styleToString","style","str","currentState","element","getCursorStyle","resetGlobalCursorStyle","setGlobalCursorStyle","computePaneFlexBoxStyle","defaultSize","dragState","layout","paneData","paneIndex","precision","size","flexGrow","calculateAriaValues","panesArray","pivotIndices","currentMinSize","currentMaxSize","totalMinSize","totalMaxSize","firstIndex","constraints","maxSize","minSize","valueMax","valueMin","valueNow","generateId","idFromProps","nanoid","LOCAL_STORAGE_DEBOUNCE_INTERVAL","PRECISION","initializeStorage","storageObject","name","err","getPaneGroupKey","autoSaveId","getPaneKey","panes","pane","id","idIsFromProps","order","loadSerializedPaneGroupState","storage","paneGroupKey","serialized","parsed","loadPaneGroupState","paneKey","savePaneGroupState","paneSizesBeforeCollapse","sizes","error","debounceMap","debounce","callback","durationMs","timeoutId","updateStorageValues","paneDataArrayStore","paneSizeBeforeCollapseStore","$paneDataArray","get","debouncedSave","clonedPaneDataArray","$paneSizeBeforeCollapse","clonedPaneSizesBeforeCollapse","removeUndefined","obj","chain","callbacks","addEventListener","event","handler","events","_event","areNumbersAlmostEqual","actual","expected","fractionDigits","compareNumbersWithTolerance","roundedActual","roundTo","roundedExpected","areArraysEqual","arrA","arrB","index","decimals","assert","expectedCondition","message","resizePane","paneConstraintsArray","initialSize","paneConstraints","collapsedSize","collapsible","newSize","getAdjustedSizeForCollapsible","halfwayPoint","adjustLayoutByDelta","delta","prevLayout","trigger","nextLayout","firstPivotIndex","secondPivotIndex","deltaApplied","prevSize","localDelta","increment","maxAvailableDelta","minAbsDelta","deltaRemaining","unsafeSize","safeSize","pivotIndex","totalSize","total","isHTMLElement","isKeyDown","isMouseEvent","isTouchEvent","defaultStorage","defaultProps","createPaneForge","props","withDefaults","direction","keyboardResizeBy","onLayout","groupId","paneDataArray","paneDataArrayChanged","paneIdToLastNotifiedSizeMap","paneSizeBeforeCollapseMap","prevDelta","$groupId","$layout","updateResizeHandleAriaValues","setResizeHandlerEventListeners","$autoSaveId","$storage","collapsePane","$prevLayout","paneSize","paneDataHelper","curr","findPaneDataIndex","$onLayout","callPaneCallbacks","getPaneSize","getPaneStyle","$dragState","isPaneExpanded","registerPane","newArr","paneA","paneB","orderA","orderB","$paneDataArrayChanged","unsafeLayout","getUnsafeDefaultLayout","validatePaneGroupLayout","registerResizeHandle","dragHandleId","$direction","$keyboardResizeBy","initialLayout","getPivotIndices","getDeltaPercentage","isHorizontal","layoutChanged","unsafePaneSize","paneConstraintsArr","startDragging","handleElement","getResizeHandleElement","initialCursorPosition","getResizeEventCursorPosition","stopDragging","unregisterPane","isPaneCollapsed","expandPane","prevPaneSize","baseSize","paneGroupStyle","paneGroupSelectors","paneGroupAttrs","$style","$selectors","unsubHandlers","getResizeHandleElementsForGroup","handle","handleId","noop","idBefore","idAfter","getResizeHandlePaneIds","unsubListener","e","setLayout","newLayout","getLayout","resizeHandleElements","resizeHandleEl","resizeHandleElement","getPaneGroupElement","handles","_a","_b","getResizeHandleElementIndex","prevPaneData","paneArray","paneId","lastNotifiedSize","onCollapse","onExpand","onResize","numPanesWithSizes","remainingSize","numRemainingPanes","nextLayoutTotalSize","accumulated","current","dir","initialDragState","movement","getDragOffsetPercentage","cursorPosition","groupElement","groupRect","groupSizeInPixels","firstTouch","PF_GROUP_CTX","setCtx","paneForge","updateOption","ctxValue","setContext","getCtx","componentName","hasContext","getContext","onLayoutChange","el","paneGroup","styleFromProps","$paneGroupStyle","div_levels","getSize","isCollapsed","isExpanded","$getPaneStyle","attrs","resizeHandleAction","node","params","update","disabled","resizeHandler","isDragging","onDragging","onMove","onMouseLeave","stopDraggingAndBlur","onDraggingChange","tabIndex","resizeHandleId","isFocused","handleKeydown","nextIndex","blur_handler","focus_handler","getLanguage","dirty","editor_changes","section","append_hydration","div0","div1","ext","content","t1_value","button","set_data","t1","each_blocks","tree_1_changes","style___depth","attr","div0_class_value","null_to_empty","getFileIcon","div4","div2","if_block0","create_if_block_2","collapseStates","item","folder","parent","focusedFile","collapse","depth","getPath","countFlattenLength","children","length","deleteFile","path","_","rest","$sources","renameFile","input","click_handler","click_handler_2","tree","unflatten","paths","root","parts","currentFolder","part","isFile","child","h2","files","title","registerCommandGroup","groupName","newCommands","commands","$commands","text","is_function","html_tag","raw_value","highlight","info","handle_promise","promise","highlight_changes","ansiPattern","span","t","t_value","prompt","each_value","ensure_array_like","installTitle","pyConsole","prefixes","$prefixes","$placeholder","$input","$items","items","tick","packages","getPy","show","$show","needScroll","threshold","scrollToBottom","behavior","ready","status","log","complete","loading","syncLog","py","$currentConsole","autoscroll","beforeUpdate","afterUpdate","push","res","icon","tips","currentWorkspace","sources","workspace","$currentWorkspace","input_1","consoleprompt_changes","newChat","div2_intro","create_in_transition","fly","history","inputRef","focusedError","showErrorExplain","traceback","code","type","reformatInputSource","focusToInput","$currentConsolePush","pushBlock","runStartupScripts","configModule","preRun","run","pushMany","lines","wait","hidden","finallySetInput","pushHistory","patchSource","handleInput","start","end","onPaste","textBefore","textAfter","distanceToEnd","onKeyDown","selectionStart","selectionEnd","startDistance","endDistance","results","position","click_handler_1","func","goto","$focusedFile","$pyodideReady","extras","$$restProps","filelist_changes","filecontent_props","filecontent_changes","getDefaultFile","readmeFiles","longest","$$self","toastMarkdown"],"ignoreList":[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],"sources":["../../../../../../node_modules/@shikijs/monaco/dist/index.mjs","../../../../../../src/lib/components/Editor.svelte","../../../../../../node_modules/paneforge/dist/internal/utils/lifecycle.js","../../../../../../node_modules/paneforge/dist/internal/utils/store.js","../../../../../../node_modules/paneforge/dist/internal/utils/style.js","../../../../../../node_modules/paneforge/dist/internal/utils/aria.js","../../../../../../node_modules/paneforge/dist/internal/utils/id.js","../../../../../../node_modules/paneforge/dist/internal/constants.js","../../../../../../node_modules/paneforge/dist/internal/utils/storage.js","../../../../../../node_modules/paneforge/dist/internal/utils/object.js","../../../../../../node_modules/paneforge/dist/internal/utils/chain.js","../../../../../../node_modules/paneforge/dist/internal/utils/event.js","../../../../../../node_modules/paneforge/dist/internal/utils/compare.js","../../../../../../node_modules/paneforge/dist/internal/utils/assert.js","../../../../../../node_modules/paneforge/dist/internal/utils/resize.js","../../../../../../node_modules/paneforge/dist/internal/utils/adjust-layout.js","../../../../../../node_modules/paneforge/dist/internal/utils/is.js","../../../../../../node_modules/paneforge/dist/internal/paneforge.js","../../../../../../node_modules/paneforge/dist/components/ctx.js","../../../../../../node_modules/paneforge/dist/components/pane-group.svelte","../../../../../../node_modules/paneforge/dist/components/pane.svelte","../../../../../../node_modules/paneforge/dist/components/pane-resizer.js","../../../../../../node_modules/paneforge/dist/components/pane-resizer.svelte","../../../../../../src/routes/(workspace)/FileContent.svelte","../../../../../../src/routes/(workspace)/Tree.svelte","../../../../../../src/lib/utils/list2tree.ts","../../../../../../src/routes/(workspace)/FileList.svelte","../../../../../../src/lib/components/command/helper.ts","../../../../../../src/lib/components/console/ButtonGroup.svelte","../../../../../../src/lib/components/console/Copy.svelte","../../../../../../src/lib/components/console/Highlight.svelte","../../../../../../src/lib/components/console/MaybeANSI.svelte","../../../../../../src/lib/components/console/Err.svelte","../../../../../../src/lib/components/ConsolePrompt.svelte","../../../../../../src/lib/components/console/In.svelte","../../../../../../src/lib/components/console/Out.svelte","../../../../../../src/lib/components/console/Repr.svelte","../../../../../../src/lib/components/console/WithConsoleCommands.svelte","../../../../../../src/lib/utils/scroll.ts","../../../../../../src/lib/components/console/HeadlessConsole.svelte","../../../../../../src/lib/components/ConsoleAction.svelte","../../../../../../src/lib/components/reusable/WorkspaceLifecycle.svelte","../../../../../../src/lib/components/Console.svelte","../../../../../../src/routes/(workspace)/Workspace.svelte"],"sourcesContent":["import { EncodedTokenMetadata, INITIAL } from '@shikijs/vscode-textmate';\n\nclass TokenizerState {\n  constructor(_ruleStack) {\n    this._ruleStack = _ruleStack;\n  }\n  get ruleStack() {\n    return this._ruleStack;\n  }\n  clone() {\n    return new TokenizerState(this._ruleStack);\n  }\n  equals(other) {\n    if (!other || !(other instanceof TokenizerState) || other !== this || other._ruleStack !== this._ruleStack) {\n      return false;\n    }\n    return true;\n  }\n}\n\nfunction normalizeColor(color) {\n  if (Array.isArray(color))\n    color = color[0];\n  if (!color)\n    return void 0;\n  color = (color.charCodeAt(0) === 35 ? color.slice(1) : color).toLowerCase();\n  if (color.length === 3 || color.length === 4)\n    color = color.split(\"\").map((c) => c + c).join(\"\");\n  return color;\n}\n\nfunction textmateThemeToMonacoTheme(theme) {\n  let rules = \"rules\" in theme ? theme.rules : void 0;\n  if (!rules) {\n    rules = [];\n    const themeSettings = theme.settings || theme.tokenColors;\n    for (const { scope, settings: { foreground, background, fontStyle } = {} } of themeSettings) {\n      const scopes = Array.isArray(scope) ? scope : [scope];\n      for (const s of scopes) {\n        if (s && (foreground || background || fontStyle)) {\n          rules.push({\n            token: s,\n            foreground: normalizeColor(foreground),\n            background: normalizeColor(background),\n            fontStyle\n          });\n        }\n      }\n    }\n  }\n  const colors = Object.fromEntries(\n    Object.entries(theme.colors || {}).map(([key, value]) => [key, `#${normalizeColor(value)}`])\n  );\n  return {\n    base: theme.type === \"light\" ? \"vs\" : \"vs-dark\",\n    inherit: false,\n    colors,\n    rules\n  };\n}\nfunction shikiToMonaco(highlighter, monaco, options = {}) {\n  const themeMap = /* @__PURE__ */ new Map();\n  const themeIds = highlighter.getLoadedThemes();\n  for (const themeId of themeIds) {\n    const tmTheme = highlighter.getTheme(themeId);\n    const monacoTheme = textmateThemeToMonacoTheme(tmTheme);\n    themeMap.set(themeId, monacoTheme);\n    monaco.editor.defineTheme(themeId, monacoTheme);\n  }\n  const colorMap = [];\n  const colorToScopeMap = /* @__PURE__ */ new Map();\n  const _setTheme = monaco.editor.setTheme.bind(monaco.editor);\n  monaco.editor.setTheme = (themeName) => {\n    const ret = highlighter.setTheme(themeName);\n    const theme = themeMap.get(themeName);\n    colorMap.length = ret.colorMap.length;\n    ret.colorMap.forEach((color, i) => {\n      colorMap[i] = color;\n    });\n    colorToScopeMap.clear();\n    theme?.rules.forEach((rule) => {\n      const c = normalizeColor(rule.foreground);\n      if (c && !colorToScopeMap.has(c))\n        colorToScopeMap.set(c, rule.token);\n    });\n    _setTheme(themeName);\n  };\n  monaco.editor.setTheme(themeIds[0]);\n  function findScopeByColor(color) {\n    return colorToScopeMap.get(color);\n  }\n  const {\n    tokenizeMaxLineLength = 2e4,\n    tokenizeTimeLimit = 500\n  } = options;\n  const monacoLanguageIds = new Set(monaco.languages.getLanguages().map((l) => l.id));\n  for (const lang of highlighter.getLoadedLanguages()) {\n    if (monacoLanguageIds.has(lang)) {\n      monaco.languages.setTokensProvider(lang, {\n        getInitialState() {\n          return new TokenizerState(INITIAL);\n        },\n        tokenize(line, state) {\n          if (line.length >= tokenizeMaxLineLength) {\n            return {\n              endState: state,\n              tokens: [{ startIndex: 0, scopes: \"\" }]\n            };\n          }\n          const grammar = highlighter.getLanguage(lang);\n          const result = grammar.tokenizeLine2(line, state.ruleStack, tokenizeTimeLimit);\n          if (result.stoppedEarly)\n            console.warn(`Time limit reached when tokenizing line: ${line.substring(0, 100)}`);\n          const tokensLength = result.tokens.length / 2;\n          const tokens = [];\n          for (let j = 0; j < tokensLength; j++) {\n            const startIndex = result.tokens[2 * j];\n            const metadata = result.tokens[2 * j + 1];\n            const color = normalizeColor(colorMap[EncodedTokenMetadata.getForeground(metadata)] || \"\");\n            const scope = findScopeByColor(color) || \"\";\n            tokens.push({ startIndex, scopes: scope });\n          }\n          return { endState: new TokenizerState(result.ruleStack), tokens };\n        }\n      });\n    }\n  }\n}\n\nexport { shikiToMonaco, textmateThemeToMonacoTheme };\n","<script context=\"module\">\n  let firstLoad = true;\n</script>\n\n<script lang=\"ts\">\n  import type monaco from \"monaco-editor-core\";\n\n  import { show as showMenu } from \"./command/CmdK.svelte\";\n  import { shikiToMonaco } from \"@shikijs/monaco\";\n  import { getHighlighter } from \"$lib/highlight\";\n  import { createEventDispatcher, onDestroy, onMount } from \"svelte\";\n  import { fade } from \"svelte/transition\";\n\n  let container: HTMLDivElement;\n\n  export let source: string;\n  export let showLineNum = false;\n  export let wrap = false;\n  export let lang: string;\n\n  let editor: monaco.editor.IStandaloneCodeEditor;\n  let core: typeof monaco;\n\n  async function loadLanguage(language: string) {\n    core.languages.register({ id: language });\n    shikiToMonaco(await getHighlighter(language), core);\n  }\n\n  const dispatch = createEventDispatcher<{\n    save: string;\n  }>();\n\n  onMount(async () => {\n    [core] = await Promise.all([import(\"monaco-editor-core\"), getHighlighter(lang)]);\n    await loadLanguage(lang);\n\n    if (!container)\n      return;\n\n    editor = core.editor.create(container, {\n      value: source,\n      language: lang,\n      theme: \"vitesse-dark\",\n      fontFamily: \"fira code\",\n      smoothScrolling: true,\n      lineHeight: 1.6,\n      minimap: { enabled: false },\n      fontLigatures: true,\n      lineNumbers: showLineNum ? \"interval\" : \"off\",\n      roundedSelection: false,\n      cursorBlinking: \"phase\",\n      wordWrap: wrap ? \"on\" : \"off\",\n      cursorSmoothCaretAnimation: \"explicit\",\n      renderLineHighlight: \"all\",\n      renderLineHighlightOnlyWhenFocus: true,\n      padding: { top: 24 },\n      scrollBeyondLastLine: false,\n      automaticLayout: true,\n    });\n\n    firstLoad = false;\n\n    editor.onDidChangeModelContent(() => source = editor.getValue());\n\n    editor.addCommand(core.KeyMod.CtrlCmd | core.KeyCode.KeyS, () => dispatch(\"save\", source));\n    editor.addCommand(core.KeyMod.CtrlCmd | core.KeyCode.KeyK, () => $showMenu = true);\n  });\n\n  onDestroy(() => editor?.dispose());\n\n  function reload(source: string, language = lang) {\n    if (language !== editor.getModel()!.getLanguageId()) {\n      core.editor.setModelLanguage(editor.getModel()!, language);\n      loadLanguage(language);\n    }\n    if (source !== editor.getValue()) {\n      editor.setValue(source);\n      editor.updateOptions({ detectIndentation: false });\n      editor.updateOptions({ detectIndentation: true });\n    }\n  }\n\n  $: editor && reload(source, lang);\n</script>\n\n<div bind:this={container} class=\"h-full w-full overflow-hidden transition-opacity duration-400\" class:op-0={!editor && firstLoad} />\n\n{#if !editor && firstLoad}\n  <div class=\"absolute inset-0 grid place-items-center @container\" out:fade>\n    <div class=\"flex flex-row items-center gap-2 op-80\">\n      <div class=\"i-svg-spinners-90-ring-with-bg\" />\n      <div class=\"hidden text-sm tracking-wide @lg:block\">初始化 monaco 编辑器</div>\n    </div>\n  </div>\n{/if}\n","import { onDestroy } from \"svelte\";\n/**\n * Safely calls `onDestroy` and catches any errors that occur.\n */\nexport function safeOnDestroy(fn) {\n    try {\n        onDestroy(fn);\n    }\n    catch {\n        return fn();\n    }\n}\n","import { isBrowser, safeOnDestroy } from \"./index.js\";\nimport { derived, writable, } from \"svelte/store\";\n/**\n * A utility function that creates a derived store that automatically\n * unsubscribes from its dependencies.\n *\n * Originally written by @tglide for use in Melt UI. <3\n *\n * @template S - The type of the stores object\n * @template T - The type of the derived store\n * @param stores - The stores object to derive from\n * @param fn - The function to derive the store from\n * @returns A derived store that automatically unsubscribes from its dependencies\n */\nexport function derivedWithUnsubscribe(stores, fn) {\n    let unsubscribers = [];\n    const onUnsubscribe = (cb) => {\n        unsubscribers.push(cb);\n    };\n    const unsubscribe = () => {\n        // Call all of the unsubscribe functions from the previous run of the function\n        unsubscribers.forEach((fn) => fn());\n        // Clear the list of unsubscribe functions\n        unsubscribers = [];\n    };\n    const derivedStore = derived(stores, ($storeValues) => {\n        unsubscribe();\n        return fn($storeValues, onUnsubscribe);\n    });\n    safeOnDestroy(unsubscribe);\n    const subscribe = (...args) => {\n        const unsub = derivedStore.subscribe(...args);\n        return () => {\n            unsub();\n            unsubscribe();\n        };\n    };\n    return {\n        ...derivedStore,\n        subscribe,\n    };\n}\n/**\n * A utility function that creates an effect from a set of stores and a function.\n * The effect is automatically cleaned up when the component is destroyed.\n *\n * Originally written by @tglide for use in Melt UI. <3\n *\n * @template S - The type of the stores object\n * @param stores - The stores object to derive from\n * @param fn - The function to run when the stores change\n * @returns A function that can be used to unsubscribe the effect\n */\nexport function clientEffect(stores, fn) {\n    if (!isBrowser)\n        return () => { };\n    // Create a derived store that contains the stores object and an onUnsubscribe function\n    const unsub = derivedWithUnsubscribe(stores, (stores, onUnsubscribe) => {\n        return {\n            stores,\n            onUnsubscribe,\n        };\n    }).subscribe(({ stores, onUnsubscribe }) => {\n        const returned = fn(stores);\n        // If the function returns a cleanup function, call it when the effect is unsubscribed\n        if (returned) {\n            onUnsubscribe(returned);\n        }\n    });\n    // Automatically unsubscribe the effect when the component is destroyed\n    safeOnDestroy(unsub);\n    return unsub;\n}\n/**\n * Given an object of properties, returns an object of writable stores\n * with the same properties and values.\n */\nexport function toWritableStores(properties) {\n    const result = {};\n    Object.keys(properties).forEach((key) => {\n        const propertyKey = key;\n        const value = properties[propertyKey];\n        result[propertyKey] = writable(value);\n    });\n    return result;\n}\n/**\n * Returns a function that can be used to update the values of options\n * in a store based on the modification of a prop.\n */\nexport function getOptionUpdater(options) {\n    return function (key, value) {\n        if (value === undefined)\n            return;\n        const store = options[key];\n        if (store) {\n            store.set(value);\n        }\n    };\n}\n","/**\n * A utility function that converts a style object to a string,\n * which can be used as the value of the `style` attribute for\n * an element.\n *\n * @param style - The style object to convert\n * @returns The style object as a string\n */\nexport function styleToString(style) {\n    return Object.keys(style).reduce((str, key) => {\n        if (style[key] === undefined)\n            return str;\n        return str + `${key}:${style[key]};`;\n    }, \"\");\n}\n/* Global cursor state */\nlet currentState = null;\n/* Global cursor element */\nlet element = null;\n/**\n * Returns the cursor style for a given cursor state.\n */\nexport function getCursorStyle(state) {\n    switch (state) {\n        case \"horizontal\":\n            return \"ew-resize\";\n        case \"horizontal-max\":\n            return \"w-resize\";\n        case \"horizontal-min\":\n            return \"e-resize\";\n        case \"vertical\":\n            return \"ns-resize\";\n        case \"vertical-max\":\n            return \"n-resize\";\n        case \"vertical-min\":\n            return \"s-resize\";\n    }\n}\n/**\n * Resets the global cursor style to the default.\n */\nexport function resetGlobalCursorStyle() {\n    if (element === null)\n        return;\n    document.head.removeChild(element);\n    currentState = null;\n    element = null;\n}\n/**\n * Sets the global cursor style to the given state.\n */\nexport function setGlobalCursorStyle(state) {\n    if (currentState === state)\n        return;\n    currentState = state;\n    const style = getCursorStyle(state);\n    if (element === null) {\n        element = document.createElement(\"style\");\n        document.head.appendChild(element);\n    }\n    element.innerHTML = `*{cursor: ${style}!important;}`;\n}\n/**\n * Computes the flexbox style for a pane given its layout and drag state.\n */\nexport function computePaneFlexBoxStyle({ defaultSize, dragState, layout, paneData, paneIndex, precision = 3, }) {\n    const size = layout[paneIndex];\n    let flexGrow;\n    if (size == null) {\n        // Initial render (before panes have registered themselves)\n        // To support server rendering, fallback to default size\n        flexGrow = defaultSize ?? \"1\";\n    }\n    else if (paneData.length === 1) {\n        //  Single pane group should always fill full width/height\n        flexGrow = \"1\";\n    }\n    else {\n        flexGrow = size.toPrecision(precision);\n    }\n    return styleToString({\n        \"flex-basis\": 0,\n        \"flex-grow\": flexGrow,\n        \"flex-shrink\": 1,\n        // Without this, pane sizes may be unintentionally overridden by their content\n        overflow: \"hidden\",\n        // Disable pointer events inside of a pane during resize\n        // This avoid edge cases like nested iframes\n        \"pointer-events\": dragState !== null ? \"none\" : undefined,\n    });\n}\n","/**\n * A utility function that calculates the `aria-valuemax`, `aria-valuemin`,\n * and `aria-valuenow` values for a pane based on its layout and constraints.\n */\nexport function calculateAriaValues({ layout, panesArray, pivotIndices, }) {\n    let currentMinSize = 0;\n    let currentMaxSize = 100;\n    let totalMinSize = 0;\n    let totalMaxSize = 0;\n    const firstIndex = pivotIndices[0];\n    // A pane's effective min/max sizes also need to account for other pane's sizes.\n    for (let i = 0; i < panesArray.length; i++) {\n        const { constraints } = panesArray[i];\n        const { maxSize = 100, minSize = 0 } = constraints;\n        if (i === firstIndex) {\n            currentMinSize = minSize;\n            currentMaxSize = maxSize;\n        }\n        else {\n            totalMinSize += minSize;\n            totalMaxSize += maxSize;\n        }\n    }\n    const valueMax = Math.min(currentMaxSize, 100 - totalMinSize);\n    const valueMin = Math.max(currentMinSize, 100 - totalMaxSize);\n    const valueNow = layout[firstIndex];\n    return {\n        valueMax,\n        valueMin,\n        valueNow,\n    };\n}\n","import { nanoid } from \"nanoid/non-secure\";\n/**\n * If an id is provided return it, otherwise generate a new id and return that.\n */\nexport function generateId(idFromProps = null) {\n    if (idFromProps == null)\n        return nanoid(10);\n    return idFromProps;\n}\n","export const LOCAL_STORAGE_DEBOUNCE_INTERVAL = 100;\nexport const PRECISION = 10;\n","import { get } from \"svelte/store\";\nimport { LOCAL_STORAGE_DEBOUNCE_INTERVAL } from \"../constants.js\";\n/**\n * Initializes the storage object with the appropriate getItem\n *  and setItem functions depending on the environment (browser or not).\n */\nexport function initializeStorage(storageObject) {\n    try {\n        if (typeof localStorage === \"undefined\") {\n            throw new Error(\"localStorage is not supported in this environment\");\n        }\n        storageObject.getItem = (name) => localStorage.getItem(name);\n        storageObject.setItem = (name, value) => localStorage.setItem(name, value);\n    }\n    catch (err) {\n        // eslint-disable-next-line no-console\n        console.error(err);\n        storageObject.getItem = () => null;\n        storageObject.setItem = () => { };\n    }\n}\n/**\n * Returns the key to use for storing the pane group state in local storage.\n */\nfunction getPaneGroupKey(autoSaveId) {\n    return `paneforge:${autoSaveId}`;\n}\n/**\n * Returns a key to use for storing the pane state in local storage.\n * The key is based on the pane order and constraints.\n */\nfunction getPaneKey(panes) {\n    const sortedPaneIds = panes\n        .map((pane) => {\n        const { constraints, id, idIsFromProps, order } = pane;\n        return idIsFromProps\n            ? id\n            : order\n                ? `${order}:${JSON.stringify(constraints)}`\n                : JSON.stringify(constraints);\n    })\n        .sort()\n        .join(\",\");\n    return sortedPaneIds;\n}\n/**\n * Loads the serialized pane group state from local storage.\n * If the state is not found, returns null.\n */\nfunction loadSerializedPaneGroupState(autoSaveId, storage) {\n    try {\n        const paneGroupKey = getPaneGroupKey(autoSaveId);\n        const serialized = storage.getItem(paneGroupKey);\n        const parsed = JSON.parse(serialized || \"\");\n        if (typeof parsed === \"object\" && parsed !== null) {\n            return parsed;\n        }\n    }\n    catch {\n        // noop\n    }\n    return null;\n}\n/**\n * Loads the pane group state from local storage.\n * If the state is not found, returns null.\n */\nexport function loadPaneGroupState(autoSaveId, panes, storage) {\n    const state = loadSerializedPaneGroupState(autoSaveId, storage) || {};\n    const paneKey = getPaneKey(panes);\n    return state[paneKey] || null;\n}\n/**\n * Saves the pane group state to local storage.\n */\nexport function savePaneGroupState(autoSaveId, panes, paneSizesBeforeCollapse, sizes, storage) {\n    const paneGroupKey = getPaneGroupKey(autoSaveId);\n    const paneKey = getPaneKey(panes);\n    const state = loadSerializedPaneGroupState(autoSaveId, storage) || {};\n    state[paneKey] = {\n        expandToSizes: Object.fromEntries(paneSizesBeforeCollapse.entries()),\n        layout: sizes,\n    };\n    try {\n        storage.setItem(paneGroupKey, JSON.stringify(state));\n    }\n    catch (error) {\n        // eslint-disable-next-line no-console\n        console.error(error);\n    }\n}\nconst debounceMap = {};\n/**\n * Returns a debounced version of the given function.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction debounce(callback, durationMs = 10) {\n    let timeoutId = null;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const callable = (...args) => {\n        if (timeoutId !== null) {\n            clearTimeout(timeoutId);\n        }\n        timeoutId = setTimeout(() => {\n            callback(...args);\n        }, durationMs);\n    };\n    return callable;\n}\n/**\n * Updates the values in local storage based on the current state of\n * the pane group.\n * This function is debounced to limit the frequency of local storage writes.\n */\nexport function updateStorageValues({ autoSaveId, layout, storage, paneDataArrayStore, paneSizeBeforeCollapseStore, }) {\n    const $paneDataArray = get(paneDataArrayStore);\n    // If this pane has been configured to persist sizing\n    // information, save sizes to local storage.\n    if (layout.length === 0 || layout.length !== $paneDataArray.length)\n        return;\n    let debouncedSave = debounceMap[autoSaveId];\n    // Limit frequency of local storage writes.\n    if (debouncedSave == null) {\n        debouncedSave = debounce(savePaneGroupState, LOCAL_STORAGE_DEBOUNCE_INTERVAL);\n        debounceMap[autoSaveId] = debouncedSave;\n    }\n    // Clone mutable data before passing to the debounced function,\n    // else we run the risk of saving an incorrect combination of mutable and immutable values to state.\n    const clonedPaneDataArray = [...$paneDataArray];\n    const $paneSizeBeforeCollapse = get(paneSizeBeforeCollapseStore);\n    const clonedPaneSizesBeforeCollapse = new Map($paneSizeBeforeCollapse);\n    debouncedSave(autoSaveId, clonedPaneDataArray, clonedPaneSizesBeforeCollapse, layout, storage);\n}\n","/**\n * Removes all undefined properties from the given object.\n */\nexport function removeUndefined(obj) {\n    const result = {};\n    for (const key in obj) {\n        const value = obj[key];\n        if (value !== undefined) {\n            result[key] = value;\n        }\n    }\n    return result;\n}\n","/**\n * Executes an array of callback functions with the same arguments.\n * @template T The types of the arguments that the callback functions take.\n * @param n array of callback functions to execute.\n * @returns A new function that executes all of the original callback functions with the same arguments.\n */\nexport function chain(...callbacks) {\n    return (...args) => {\n        for (const callback of callbacks) {\n            if (typeof callback === \"function\") {\n                callback(...args);\n            }\n        }\n    };\n}\n","/**\n * Adds an event listener to the specified target element(s) for the given event(s), and returns a function to remove it.\n * @param target The target element(s) to add the event listener to.\n * @param event The event(s) to listen for.\n * @param handler The function to be called when the event is triggered.\n * @param options An optional object that specifies characteristics about the event listener.\n * @returns A function that removes the event listener from the target element(s).\n */\nexport function addEventListener(target, event, handler, options) {\n    const events = Array.isArray(event) ? event : [event];\n    // Add the event listener to each specified event for the target element(s).\n    events.forEach((_event) => target.addEventListener(_event, handler, options));\n    // Return a function that removes the event listener from the target element(s).\n    return () => {\n        events.forEach((_event) => target.removeEventListener(_event, handler, options));\n    };\n}\n","import { PRECISION } from \"../constants.js\";\n/**\n * Compares two numbers for equality with a given fractional precision.\n */\nexport function areNumbersAlmostEqual(actual, expected, fractionDigits = PRECISION) {\n    return compareNumbersWithTolerance(actual, expected, fractionDigits) === 0;\n}\n/**\n * Compares two numbers with a given tolerance.\n *\n * @returns `-1` if `actual` is less than `expected`, `0` if they are equal,\n * and `1` if `actual` is greater than `expected`.\n */\nexport function compareNumbersWithTolerance(actual, expected, fractionDigits = PRECISION) {\n    const roundedActual = roundTo(actual, fractionDigits);\n    const roundedExpected = roundTo(expected, fractionDigits);\n    return Math.sign(roundedActual - roundedExpected);\n}\n/**\n * Compares two arrays for equality.\n */\nexport function areArraysEqual(arrA, arrB) {\n    if (arrA.length !== arrB.length)\n        return false;\n    for (let index = 0; index < arrA.length; index++) {\n        if (arrA[index] !== arrB[index])\n            return false;\n    }\n    return true;\n}\n/**\n * Rounds a number to a given number of decimal places.\n */\nfunction roundTo(value, decimals) {\n    return parseFloat(value.toFixed(decimals));\n}\n","export function assert(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexpectedCondition, message = \"Assertion failed!\") {\n    if (!expectedCondition) {\n        // eslint-disable-next-line no-console\n        console.error(message);\n        throw Error(message);\n    }\n}\n","import { PRECISION } from \"../constants.js\";\nimport { assert } from \"./assert.js\";\nimport { compareNumbersWithTolerance } from \"./compare.js\";\n/**\n * Resizes a pane based on its constraints.\n */\nexport function resizePane({ paneConstraints: paneConstraintsArray, paneIndex, initialSize, }) {\n    const paneConstraints = paneConstraintsArray[paneIndex];\n    assert(paneConstraints != null, \"Pane constraints should not be null.\");\n    const { collapsedSize = 0, collapsible, maxSize = 100, minSize = 0 } = paneConstraints;\n    let newSize = initialSize;\n    if (compareNumbersWithTolerance(newSize, minSize) < 0) {\n        newSize = getAdjustedSizeForCollapsible(newSize, collapsible, collapsedSize, minSize);\n    }\n    newSize = Math.min(maxSize, newSize);\n    return parseFloat(newSize.toFixed(PRECISION));\n}\n/**\n * Adjusts the size of a pane based on its collapsible state.\n *\n * If the pane is collapsible, the size will be snapped to the collapsed size\n * or the minimum size based on the halfway point.\n */\nfunction getAdjustedSizeForCollapsible(size, collapsible, collapsedSize, minSize) {\n    if (!collapsible)\n        return minSize;\n    // Snap collapsible panes closed or open based on the halfway point.\n    const halfwayPoint = (collapsedSize + minSize) / 2;\n    return compareNumbersWithTolerance(size, halfwayPoint) < 0 ? collapsedSize : minSize;\n}\n","import { assert } from \"./assert.js\";\nimport { compareNumbersWithTolerance, areNumbersAlmostEqual, resizePane, } from \"./index.js\";\n/**\n * Adjusts the layout of panes based on the delta of the resize handle.\n * All units must be in percentages; pixel values should be pre-converted.\n *\n * Credit: https://github.com/bvaughn/react-resizable-panels\n */\nexport function adjustLayoutByDelta({ delta, layout: prevLayout, paneConstraints: paneConstraintsArray, pivotIndices, trigger, }) {\n    if (areNumbersAlmostEqual(delta, 0))\n        return prevLayout;\n    const nextLayout = [...prevLayout];\n    const [firstPivotIndex, secondPivotIndex] = pivotIndices;\n    let deltaApplied = 0;\n    // A resizing pane affects the panes before or after it.\n    //\n    // A negative delta means the pane(s) immediately after the resize handle should grow/expand by decreasing its offset.\n    // Other panes may also need to shrink/contract (and shift) to make room, depending on the min weights.\n    //\n    // A positive delta means the pane(s) immediately before the resize handle should \"expand\".\n    // This is accomplished by shrinking/contracting (and shifting) one or more of the panes after the resize handle.\n    {\n        // If this is a resize triggered by a keyboard event, our logic for expanding/collapsing is different.\n        // We no longer check the halfway threshold because this may prevent the pane from expanding at all.\n        if (trigger === \"keyboard\") {\n            {\n                // Check if we should expand a collapsed pane\n                const index = delta < 0 ? secondPivotIndex : firstPivotIndex;\n                const paneConstraints = paneConstraintsArray[index];\n                assert(paneConstraints);\n                if (paneConstraints.collapsible) {\n                    const prevSize = prevLayout[index];\n                    assert(prevSize != null);\n                    const paneConstraints = paneConstraintsArray[index];\n                    assert(paneConstraints);\n                    const { collapsedSize = 0, minSize = 0 } = paneConstraints;\n                    if (areNumbersAlmostEqual(prevSize, collapsedSize)) {\n                        const localDelta = minSize - prevSize;\n                        //DEBUG.push(`  -> expand delta: ${localDelta}`);\n                        if (compareNumbersWithTolerance(localDelta, Math.abs(delta)) > 0) {\n                            delta = delta < 0 ? 0 - localDelta : localDelta;\n                            //DEBUG.push(`  -> delta: ${delta}`);\n                        }\n                    }\n                }\n            }\n            {\n                // Check if we should collapse a pane at its minimum size\n                const index = delta < 0 ? firstPivotIndex : secondPivotIndex;\n                const paneConstraints = paneConstraintsArray[index];\n                assert(paneConstraints);\n                const { collapsible } = paneConstraints;\n                if (collapsible) {\n                    const prevSize = prevLayout[index];\n                    assert(prevSize != null);\n                    const paneConstraints = paneConstraintsArray[index];\n                    assert(paneConstraints);\n                    const { collapsedSize = 0, minSize = 0 } = paneConstraints;\n                    if (areNumbersAlmostEqual(prevSize, minSize)) {\n                        const localDelta = prevSize - collapsedSize;\n                        if (compareNumbersWithTolerance(localDelta, Math.abs(delta)) > 0) {\n                            delta = delta < 0 ? 0 - localDelta : localDelta;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    {\n        // Pre-calculate max available delta in the opposite direction of our pivot.\n        // This will be the maximum amount we're allowed to expand/contract the panes in the primary direction.\n        // If this amount is less than the requested delta, adjust the requested delta.\n        // If this amount is greater than the requested delta, that's useful information too–\n        // as an expanding pane might change from collapsed to min size.\n        const increment = delta < 0 ? 1 : -1;\n        let index = delta < 0 ? secondPivotIndex : firstPivotIndex;\n        let maxAvailableDelta = 0;\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const prevSize = prevLayout[index];\n            assert(prevSize != null);\n            const maxSafeSize = resizePane({\n                paneConstraints: paneConstraintsArray,\n                paneIndex: index,\n                initialSize: 100,\n            });\n            const delta = maxSafeSize - prevSize;\n            maxAvailableDelta += delta;\n            index += increment;\n            if (index < 0 || index >= paneConstraintsArray.length) {\n                break;\n            }\n        }\n        const minAbsDelta = Math.min(Math.abs(delta), Math.abs(maxAvailableDelta));\n        delta = delta < 0 ? 0 - minAbsDelta : minAbsDelta;\n    }\n    {\n        // Delta added to a pane needs to be subtracted from other panes (within the constraints that those panes allow).\n        const pivotIndex = delta < 0 ? firstPivotIndex : secondPivotIndex;\n        let index = pivotIndex;\n        while (index >= 0 && index < paneConstraintsArray.length) {\n            const deltaRemaining = Math.abs(delta) - Math.abs(deltaApplied);\n            const prevSize = prevLayout[index];\n            assert(prevSize != null);\n            const unsafeSize = prevSize - deltaRemaining;\n            const safeSize = resizePane({\n                paneConstraints: paneConstraintsArray,\n                paneIndex: index,\n                initialSize: unsafeSize,\n            });\n            if (!areNumbersAlmostEqual(prevSize, safeSize)) {\n                deltaApplied += prevSize - safeSize;\n                nextLayout[index] = safeSize;\n                if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {\n                    numeric: true,\n                }) >= 0) {\n                    break;\n                }\n            }\n            if (delta < 0) {\n                index--;\n            }\n            else {\n                index++;\n            }\n        }\n    }\n    // If we were unable to resize any of the panes, return the previous state.\n    // This will essentially bailout and ignore e.g. drags past a pane's boundaries\n    if (areNumbersAlmostEqual(deltaApplied, 0)) {\n        return prevLayout;\n    }\n    {\n        // Now distribute the applied delta to the panes in the other direction\n        const pivotIndex = delta < 0 ? secondPivotIndex : firstPivotIndex;\n        const prevSize = prevLayout[pivotIndex];\n        assert(prevSize != null);\n        const unsafeSize = prevSize + deltaApplied;\n        const safeSize = resizePane({\n            paneConstraints: paneConstraintsArray,\n            paneIndex: pivotIndex,\n            initialSize: unsafeSize,\n        });\n        // Adjust the pivot pane before, but only by the amount that surrounding panes were able to shrink/contract.\n        nextLayout[pivotIndex] = safeSize;\n        // Edge case where expanding or contracting one pane caused another one to change collapsed state\n        if (!areNumbersAlmostEqual(safeSize, unsafeSize)) {\n            let deltaRemaining = unsafeSize - safeSize;\n            const pivotIndex = delta < 0 ? secondPivotIndex : firstPivotIndex;\n            let index = pivotIndex;\n            while (index >= 0 && index < paneConstraintsArray.length) {\n                const prevSize = nextLayout[index];\n                assert(prevSize != null);\n                const unsafeSize = prevSize + deltaRemaining;\n                const safeSize = resizePane({\n                    paneConstraints: paneConstraintsArray,\n                    paneIndex: index,\n                    initialSize: unsafeSize,\n                });\n                if (!areNumbersAlmostEqual(prevSize, safeSize)) {\n                    deltaRemaining -= safeSize - prevSize;\n                    nextLayout[index] = safeSize;\n                }\n                if (areNumbersAlmostEqual(deltaRemaining, 0))\n                    break;\n                delta > 0 ? index-- : index++;\n            }\n        }\n    }\n    const totalSize = nextLayout.reduce((total, size) => size + total, 0);\n    if (!areNumbersAlmostEqual(totalSize, 100))\n        return prevLayout;\n    return nextLayout;\n}\n","export const isBrowser = typeof document !== \"undefined\";\nexport function isHTMLElement(element) {\n    return element instanceof HTMLElement;\n}\nexport function isKeyDown(event) {\n    return event.type === \"keydown\";\n}\nexport function isMouseEvent(event) {\n    return event.type.startsWith(\"mouse\");\n}\nexport function isTouchEvent(event) {\n    return event.type.startsWith(\"touch\");\n}\n","import { initializeStorage, loadPaneGroupState, resizePane, resetGlobalCursorStyle, setGlobalCursorStyle, updateStorageValues, adjustLayoutByDelta, areNumbersAlmostEqual, areArraysEqual, generateId, removeUndefined, clientEffect, toWritableStores, calculateAriaValues, addEventListener, computePaneFlexBoxStyle, styleToString, isBrowser, isHTMLElement, isKeyDown, isMouseEvent, isTouchEvent, } from \"./utils/index.js\";\nimport { derived, get, writable } from \"svelte/store\";\nimport { assert } from \"./utils/assert.js\";\nimport { onMount } from \"svelte\";\nexport const defaultStorage = {\n    getItem: (name) => {\n        initializeStorage(defaultStorage);\n        return defaultStorage.getItem(name);\n    },\n    setItem: (name, value) => {\n        initializeStorage(defaultStorage);\n        defaultStorage.setItem(name, value);\n    },\n};\nconst defaultProps = {\n    id: null,\n    onLayout: null,\n    keyboardResizeBy: null,\n    autoSaveId: null,\n    direction: \"horizontal\",\n    storage: defaultStorage,\n};\nexport function createPaneForge(props) {\n    const withDefaults = {\n        ...defaultProps,\n        ...removeUndefined(props),\n    };\n    const options = toWritableStores(withDefaults);\n    const { autoSaveId, direction, keyboardResizeBy, storage, onLayout } = options;\n    const groupId = writable(generateId());\n    const dragState = writable(null);\n    const layout = writable([]);\n    const paneDataArray = writable([]);\n    const paneDataArrayChanged = writable(false);\n    const paneIdToLastNotifiedSizeMap = writable({});\n    const paneSizeBeforeCollapseMap = writable(new Map());\n    const prevDelta = writable(0);\n    clientEffect([groupId, layout, paneDataArray], ([$groupId, $layout, $paneDataArray]) => {\n        const unsub = updateResizeHandleAriaValues({\n            groupId: $groupId,\n            layout: $layout,\n            paneDataArray: $paneDataArray,\n        });\n        return unsub;\n    });\n    onMount(() => {\n        const unsub = setResizeHandlerEventListeners();\n        return unsub;\n    });\n    clientEffect([autoSaveId, layout, storage], ([$autoSaveId, $layout, $storage]) => {\n        if (!$autoSaveId)\n            return;\n        updateStorageValues({\n            autoSaveId: $autoSaveId,\n            layout: $layout,\n            storage: $storage,\n            paneDataArrayStore: paneDataArray,\n            paneSizeBeforeCollapseStore: paneSizeBeforeCollapseMap,\n        });\n    });\n    function collapsePane(paneData) {\n        const $prevLayout = get(layout);\n        const $paneDataArray = get(paneDataArray);\n        if (!paneData.constraints.collapsible)\n            return;\n        const paneConstraintsArray = $paneDataArray.map((paneData) => paneData.constraints);\n        const { collapsedSize = 0, paneSize, pivotIndices, } = paneDataHelper($paneDataArray, paneData, $prevLayout);\n        assert(paneSize != null);\n        if (paneSize === collapsedSize)\n            return;\n        // Store the size before collapse, which is returned when `expand()` is called\n        paneSizeBeforeCollapseMap.update((curr) => {\n            curr.set(paneData.id, paneSize);\n            return curr;\n        });\n        const isLastPane = findPaneDataIndex($paneDataArray, paneData) === $paneDataArray.length - 1;\n        const delta = isLastPane ? paneSize - collapsedSize : collapsedSize - paneSize;\n        const nextLayout = adjustLayoutByDelta({\n            delta,\n            layout: $prevLayout,\n            paneConstraints: paneConstraintsArray,\n            pivotIndices,\n            trigger: \"imperative-api\",\n        });\n        if (areArraysEqual($prevLayout, nextLayout))\n            return;\n        layout.set(nextLayout);\n        const $onLayout = get(onLayout);\n        if ($onLayout) {\n            $onLayout(nextLayout);\n        }\n        callPaneCallbacks($paneDataArray, nextLayout, get(paneIdToLastNotifiedSizeMap));\n    }\n    function getPaneSize(paneData) {\n        const $layout = get(layout);\n        const $paneDataArray = get(paneDataArray);\n        const { paneSize } = paneDataHelper($paneDataArray, paneData, $layout);\n        return paneSize;\n    }\n    const getPaneStyle = derived([paneDataArray, layout, dragState], ([$paneDataArray, $layout, $dragState]) => {\n        return (paneData, defaultSize) => {\n            const paneIndex = findPaneDataIndex($paneDataArray, paneData);\n            return computePaneFlexBoxStyle({\n                defaultSize,\n                dragState: $dragState,\n                layout: $layout,\n                paneData: $paneDataArray,\n                paneIndex,\n            });\n        };\n    });\n    function isPaneExpanded(paneData) {\n        const $paneDataArray = get(paneDataArray);\n        const $layout = get(layout);\n        const { collapsedSize = 0, collapsible, paneSize, } = paneDataHelper($paneDataArray, paneData, $layout);\n        return !collapsible || paneSize > collapsedSize;\n    }\n    function registerPane(paneData) {\n        paneDataArray.update((curr) => {\n            const newArr = [...curr, paneData];\n            newArr.sort((paneA, paneB) => {\n                const orderA = paneA.order;\n                const orderB = paneB.order;\n                if (orderA == null && orderB == null) {\n                    return 0;\n                }\n                else if (orderA == null) {\n                    return -1;\n                }\n                else if (orderB == null) {\n                    return 1;\n                }\n                else {\n                    return orderA - orderB;\n                }\n            });\n            return newArr;\n        });\n        paneDataArrayChanged.set(true);\n    }\n    clientEffect([paneDataArrayChanged], ([$paneDataArrayChanged]) => {\n        if (!$paneDataArrayChanged)\n            return;\n        paneDataArrayChanged.set(false);\n        const $autoSaveId = get(autoSaveId);\n        const $storage = get(storage);\n        const $prevLayout = get(layout);\n        const $paneDataArray = get(paneDataArray);\n        // If this pane has been configured to persist sizing information,\n        // default size should be restored from local storage if possible.\n        let unsafeLayout = null;\n        if ($autoSaveId) {\n            const state = loadPaneGroupState($autoSaveId, $paneDataArray, $storage);\n            if (state) {\n                paneSizeBeforeCollapseMap.set(new Map(Object.entries(state.expandToSizes)));\n                unsafeLayout = state.layout;\n            }\n        }\n        if (unsafeLayout == null) {\n            unsafeLayout = getUnsafeDefaultLayout({\n                paneDataArray: $paneDataArray,\n            });\n        }\n        // Validate even saved layouts in case something has changed since last render\n        const nextLayout = validatePaneGroupLayout({\n            layout: unsafeLayout,\n            paneConstraints: $paneDataArray.map((paneData) => paneData.constraints),\n        });\n        if (areArraysEqual($prevLayout, nextLayout))\n            return;\n        layout.set(nextLayout);\n        const $onLayout = get(onLayout);\n        if ($onLayout) {\n            $onLayout(nextLayout);\n        }\n        callPaneCallbacks($paneDataArray, nextLayout, get(paneIdToLastNotifiedSizeMap));\n    });\n    function registerResizeHandle(dragHandleId) {\n        return function resizeHandler(event) {\n            event.preventDefault();\n            const $direction = get(direction);\n            const $dragState = get(dragState);\n            const $groupId = get(groupId);\n            const $keyboardResizeBy = get(keyboardResizeBy);\n            const $prevLayout = get(layout);\n            const $paneDataArray = get(paneDataArray);\n            const { initialLayout } = $dragState ?? {};\n            const pivotIndices = getPivotIndices($groupId, dragHandleId);\n            let delta = getDeltaPercentage(event, dragHandleId, $direction, $dragState, $keyboardResizeBy);\n            if (delta === 0)\n                return;\n            // support RTL\n            const isHorizontal = $direction === \"horizontal\";\n            if (document.dir === \"rtl\" && isHorizontal) {\n                delta = -delta;\n            }\n            const paneConstraints = $paneDataArray.map((paneData) => paneData.constraints);\n            const nextLayout = adjustLayoutByDelta({\n                delta,\n                layout: initialLayout ?? $prevLayout,\n                paneConstraints: paneConstraints,\n                pivotIndices,\n                trigger: isKeyDown(event) ? \"keyboard\" : \"mouse-or-touch\",\n            });\n            const layoutChanged = !areArraysEqual($prevLayout, nextLayout);\n            // Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)\n            // Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)\n            if (isMouseEvent(event) || isTouchEvent(event)) {\n                // Watch for multiple subsequent deltas; this might occur for tiny cursor movements.\n                // In this case, Pane sizes might not change–\n                // but updating cursor in this scenario would cause a flicker.\n                const $prevDelta = get(prevDelta);\n                if ($prevDelta != delta) {\n                    prevDelta.set(delta);\n                    if (!layoutChanged) {\n                        // If the pointer has moved too far to resize the pane any further,\n                        // update the cursor style for a visual clue.\n                        // This mimics VS Code behavior.\n                        if (isHorizontal) {\n                            setGlobalCursorStyle(delta < 0 ? \"horizontal-min\" : \"horizontal-max\");\n                        }\n                        else {\n                            setGlobalCursorStyle(delta < 0 ? \"vertical-min\" : \"vertical-max\");\n                        }\n                    }\n                    else {\n                        setGlobalCursorStyle(isHorizontal ? \"horizontal\" : \"vertical\");\n                    }\n                }\n            }\n            if (layoutChanged) {\n                layout.set(nextLayout);\n                const $onLayout = get(onLayout);\n                if ($onLayout) {\n                    $onLayout(nextLayout);\n                }\n                callPaneCallbacks($paneDataArray, nextLayout, get(paneIdToLastNotifiedSizeMap));\n            }\n        };\n    }\n    function resizePane(paneData, unsafePaneSize) {\n        const $prevLayout = get(layout);\n        const $paneDataArray = get(paneDataArray);\n        const paneConstraintsArr = $paneDataArray.map((paneData) => paneData.constraints);\n        const { paneSize, pivotIndices } = paneDataHelper($paneDataArray, paneData, $prevLayout);\n        assert(paneSize != null);\n        const isLastPane = findPaneDataIndex($paneDataArray, paneData) === $paneDataArray.length - 1;\n        const delta = isLastPane ? paneSize - unsafePaneSize : unsafePaneSize - paneSize;\n        const nextLayout = adjustLayoutByDelta({\n            delta,\n            layout: $prevLayout,\n            paneConstraints: paneConstraintsArr,\n            pivotIndices,\n            trigger: \"imperative-api\",\n        });\n        if (areArraysEqual($prevLayout, nextLayout))\n            return;\n        layout.set(nextLayout);\n        const $onLayout = get(onLayout);\n        $onLayout?.(nextLayout);\n        callPaneCallbacks($paneDataArray, nextLayout, get(paneIdToLastNotifiedSizeMap));\n    }\n    function startDragging(dragHandleId, event) {\n        const $direction = get(direction);\n        const $layout = get(layout);\n        const handleElement = getResizeHandleElement(dragHandleId);\n        assert(handleElement);\n        const initialCursorPosition = getResizeEventCursorPosition($direction, event);\n        dragState.set({\n            dragHandleId,\n            dragHandleRect: handleElement.getBoundingClientRect(),\n            initialCursorPosition,\n            initialLayout: $layout,\n        });\n    }\n    function stopDragging() {\n        resetGlobalCursorStyle();\n        dragState.set(null);\n    }\n    function unregisterPane(paneData) {\n        const $paneDataArray = get(paneDataArray);\n        const index = findPaneDataIndex($paneDataArray, paneData);\n        if (index < 0)\n            return;\n        paneDataArray.update((curr) => {\n            curr.splice(index, 1);\n            paneIdToLastNotifiedSizeMap.update((curr) => {\n                delete curr[paneData.id];\n                return curr;\n            });\n            paneDataArrayChanged.set(true);\n            return curr;\n        });\n    }\n    function isPaneCollapsed(paneData) {\n        const $paneDataArray = get(paneDataArray);\n        const $layout = get(layout);\n        const { collapsedSize = 0, collapsible, paneSize, } = paneDataHelper($paneDataArray, paneData, $layout);\n        return collapsible === true && paneSize === collapsedSize;\n    }\n    function expandPane(paneData) {\n        const $prevLayout = get(layout);\n        const $paneDataArray = get(paneDataArray);\n        if (!paneData.constraints.collapsible)\n            return;\n        const paneConstraintsArray = $paneDataArray.map((paneData) => paneData.constraints);\n        const { collapsedSize = 0, paneSize, minSize = 0, pivotIndices, } = paneDataHelper($paneDataArray, paneData, $prevLayout);\n        if (paneSize !== collapsedSize)\n            return;\n        // Restore this pane to the size it was before it was collapsed, if possible.\n        const prevPaneSize = get(paneSizeBeforeCollapseMap).get(paneData.id);\n        const baseSize = prevPaneSize != null && prevPaneSize >= minSize ? prevPaneSize : minSize;\n        const isLastPane = findPaneDataIndex($paneDataArray, paneData) === $paneDataArray.length - 1;\n        const delta = isLastPane ? paneSize - baseSize : baseSize - paneSize;\n        const nextLayout = adjustLayoutByDelta({\n            delta,\n            layout: $prevLayout,\n            paneConstraints: paneConstraintsArray,\n            pivotIndices,\n            trigger: \"imperative-api\",\n        });\n        if (areArraysEqual($prevLayout, nextLayout))\n            return;\n        layout.set(nextLayout);\n        const $onLayout = get(onLayout);\n        $onLayout?.(nextLayout);\n        callPaneCallbacks($paneDataArray, nextLayout, get(paneIdToLastNotifiedSizeMap));\n    }\n    const paneGroupStyle = derived([direction], ([$direction]) => {\n        return styleToString({\n            display: \"flex\",\n            \"flex-direction\": $direction === \"horizontal\" ? \"row\" : \"column\",\n            height: \"100%\",\n            overflow: \"hidden\",\n            width: \"100%\",\n        });\n    });\n    const paneGroupSelectors = derived([direction, groupId], ([$direction, $groupId]) => {\n        return {\n            \"data-pane-group\": \"\",\n            \"data-direction\": $direction,\n            \"data-pane-group-id\": $groupId,\n        };\n    });\n    const paneGroupAttrs = derived([paneGroupStyle, paneGroupSelectors], ([$style, $selectors]) => {\n        return {\n            style: $style,\n            ...$selectors,\n        };\n    });\n    function setResizeHandlerEventListeners() {\n        const $groupId = get(groupId);\n        const handles = getResizeHandleElementsForGroup($groupId);\n        const unsubHandlers = handles.map((handle) => {\n            const handleId = handle.getAttribute(\"data-pane-resizer-id\");\n            if (!handleId)\n                return noop;\n            const [idBefore, idAfter] = getResizeHandlePaneIds($groupId, handleId, get(paneDataArray));\n            if (idBefore == null || idAfter == null)\n                return noop;\n            const onKeydown = (e) => {\n                if (e.defaultPrevented || e.key !== \"Enter\")\n                    return;\n                e.preventDefault();\n                const $paneDataArray = get(paneDataArray);\n                const index = $paneDataArray.findIndex((paneData) => paneData.id === idBefore);\n                if (index < 0)\n                    return;\n                const paneData = $paneDataArray[index];\n                assert(paneData);\n                const $layout = get(layout);\n                const size = $layout[index];\n                const { collapsedSize = 0, collapsible, minSize = 0 } = paneData.constraints;\n                if (!(size != null && collapsible))\n                    return;\n                const nextLayout = adjustLayoutByDelta({\n                    delta: areNumbersAlmostEqual(size, collapsedSize) ? minSize - size : collapsedSize - size,\n                    layout: $layout,\n                    paneConstraints: $paneDataArray.map((paneData) => paneData.constraints),\n                    pivotIndices: getPivotIndices($groupId, handleId),\n                    trigger: \"keyboard\",\n                });\n                if ($layout !== nextLayout) {\n                    layout.set(nextLayout);\n                }\n            };\n            const unsubListener = addEventListener(handle, \"keydown\", onKeydown);\n            return () => {\n                unsubListener();\n            };\n        });\n        return () => {\n            unsubHandlers.forEach((unsub) => unsub());\n        };\n    }\n    function setLayout(newLayout) {\n        layout.set(newLayout);\n    }\n    function getLayout() {\n        return get(layout);\n    }\n    return {\n        methods: {\n            collapsePane,\n            expandPane,\n            getSize: getPaneSize,\n            getPaneStyle,\n            isCollapsed: isPaneCollapsed,\n            isExpanded: isPaneExpanded,\n            registerPane,\n            registerResizeHandle,\n            resizePane,\n            startDragging,\n            stopDragging,\n            unregisterPane,\n            setLayout,\n            getLayout,\n        },\n        states: {\n            direction,\n            dragState,\n            groupId,\n            paneGroupAttrs,\n            paneGroupSelectors,\n            paneGroupStyle,\n            layout,\n        },\n        options,\n    };\n}\nfunction updateResizeHandleAriaValues({ groupId, layout, paneDataArray, }) {\n    const resizeHandleElements = getResizeHandleElementsForGroup(groupId);\n    for (let index = 0; index < paneDataArray.length - 1; index++) {\n        const { valueMax, valueMin, valueNow } = calculateAriaValues({\n            layout,\n            panesArray: paneDataArray,\n            pivotIndices: [index, index + 1],\n        });\n        const resizeHandleEl = resizeHandleElements[index];\n        if (isHTMLElement(resizeHandleEl)) {\n            const paneData = paneDataArray[index];\n            resizeHandleEl.setAttribute(\"aria-controls\", paneData.id);\n            resizeHandleEl.setAttribute(\"aria-valuemax\", \"\" + Math.round(valueMax));\n            resizeHandleEl.setAttribute(\"aria-valuemin\", \"\" + Math.round(valueMin));\n            resizeHandleEl.setAttribute(\"aria-valuenow\", valueNow != null ? \"\" + Math.round(valueNow) : \"\");\n        }\n    }\n    return () => {\n        resizeHandleElements.forEach((resizeHandleElement) => {\n            resizeHandleElement.removeAttribute(\"aria-controls\");\n            resizeHandleElement.removeAttribute(\"aria-valuemax\");\n            resizeHandleElement.removeAttribute(\"aria-valuemin\");\n            resizeHandleElement.removeAttribute(\"aria-valuenow\");\n        });\n    };\n}\nexport function getResizeHandleElementsForGroup(groupId) {\n    if (!isBrowser)\n        return [];\n    return Array.from(document.querySelectorAll(`[data-pane-resizer-id][data-pane-group-id=\"${groupId}\"]`));\n}\nfunction getPaneGroupElement(id) {\n    if (!isBrowser)\n        return null;\n    const element = document.querySelector(`[data-pane-group][data-pane-group-id=\"${id}\"]`);\n    if (element) {\n        return element;\n    }\n    return null;\n}\nfunction noop() {\n    // do nothing\n}\nexport function getResizeHandlePaneIds(groupId, handleId, panesArray) {\n    const handle = getResizeHandleElement(handleId);\n    const handles = getResizeHandleElementsForGroup(groupId);\n    const index = handle ? handles.indexOf(handle) : -1;\n    const idBefore = panesArray[index]?.id ?? null;\n    const idAfter = panesArray[index + 1]?.id ?? null;\n    return [idBefore, idAfter];\n}\nexport function getResizeHandleElement(id) {\n    if (!isBrowser)\n        return null;\n    const element = document.querySelector(`[data-pane-resizer-id=\"${id}\"]`);\n    if (element) {\n        return element;\n    }\n    return null;\n}\nexport function getResizeHandleElementIndex(groupId, id) {\n    if (!isBrowser)\n        return null;\n    const handles = getResizeHandleElementsForGroup(groupId);\n    const index = handles.findIndex((handle) => handle.getAttribute(\"data-pane-resizer-id\") === id);\n    return index ?? null;\n}\nfunction getPivotIndices(groupId, dragHandleId) {\n    const index = getResizeHandleElementIndex(groupId, dragHandleId);\n    return index != null ? [index, index + 1] : [-1, -1];\n}\nfunction paneDataHelper(paneDataArray, paneData, layout) {\n    const paneConstraintsArray = paneDataArray.map((paneData) => paneData.constraints);\n    const paneIndex = findPaneDataIndex(paneDataArray, paneData);\n    const paneConstraints = paneConstraintsArray[paneIndex];\n    const isLastPane = paneIndex === paneDataArray.length - 1;\n    const pivotIndices = isLastPane ? [paneIndex - 1, paneIndex] : [paneIndex, paneIndex + 1];\n    const paneSize = layout[paneIndex];\n    return {\n        ...paneConstraints,\n        paneSize,\n        pivotIndices,\n    };\n}\nfunction findPaneDataIndex(paneDataArray, paneData) {\n    return paneDataArray.findIndex((prevPaneData) => prevPaneData.id === paneData.id);\n}\n// Layout should be pre-converted into percentages\nfunction callPaneCallbacks(paneArray, layout, paneIdToLastNotifiedSizeMap) {\n    layout.forEach((size, index) => {\n        const paneData = paneArray[index];\n        assert(paneData);\n        const { callbacks, constraints, id: paneId } = paneData;\n        const { collapsedSize = 0, collapsible } = constraints;\n        const lastNotifiedSize = paneIdToLastNotifiedSizeMap[paneId];\n        // invert the logic from below\n        if (!(lastNotifiedSize == null || size !== lastNotifiedSize))\n            return;\n        paneIdToLastNotifiedSizeMap[paneId] = size;\n        const { onCollapse, onExpand, onResize } = callbacks;\n        onResize?.(size, lastNotifiedSize);\n        if (collapsible && (onCollapse || onExpand)) {\n            if (onExpand &&\n                (lastNotifiedSize == null || lastNotifiedSize === collapsedSize) &&\n                size !== collapsedSize) {\n                onExpand();\n            }\n            if (onCollapse &&\n                (lastNotifiedSize == null || lastNotifiedSize !== collapsedSize) &&\n                size === collapsedSize) {\n                onCollapse();\n            }\n        }\n    });\n}\nfunction getUnsafeDefaultLayout({ paneDataArray }) {\n    const layout = Array(paneDataArray.length);\n    const paneConstraintsArray = paneDataArray.map((paneData) => paneData.constraints);\n    let numPanesWithSizes = 0;\n    let remainingSize = 100;\n    // Distribute default sizes first\n    for (let index = 0; index < paneDataArray.length; index++) {\n        const paneConstraints = paneConstraintsArray[index];\n        assert(paneConstraints);\n        const { defaultSize } = paneConstraints;\n        if (defaultSize != null) {\n            numPanesWithSizes++;\n            layout[index] = defaultSize;\n            remainingSize -= defaultSize;\n        }\n    }\n    // Remaining size should be distributed evenly between panes without default sizes\n    for (let index = 0; index < paneDataArray.length; index++) {\n        const paneConstraints = paneConstraintsArray[index];\n        assert(paneConstraints);\n        const { defaultSize } = paneConstraints;\n        if (defaultSize != null) {\n            continue;\n        }\n        const numRemainingPanes = paneDataArray.length - numPanesWithSizes;\n        const size = remainingSize / numRemainingPanes;\n        numPanesWithSizes++;\n        layout[index] = size;\n        remainingSize -= size;\n    }\n    return layout;\n}\n// All units must be in percentages\nfunction validatePaneGroupLayout({ layout: prevLayout, paneConstraints, }) {\n    const nextLayout = [...prevLayout];\n    const nextLayoutTotalSize = nextLayout.reduce((accumulated, current) => accumulated + current, 0);\n    // Validate layout expectations\n    if (nextLayout.length !== paneConstraints.length) {\n        throw Error(`Invalid ${paneConstraints.length} pane layout: ${nextLayout\n            .map((size) => `${size}%`)\n            .join(\", \")}`);\n    }\n    else if (!areNumbersAlmostEqual(nextLayoutTotalSize, 100)) {\n        for (let index = 0; index < paneConstraints.length; index++) {\n            const unsafeSize = nextLayout[index];\n            assert(unsafeSize != null);\n            const safeSize = (100 / nextLayoutTotalSize) * unsafeSize;\n            nextLayout[index] = safeSize;\n        }\n    }\n    let remainingSize = 0;\n    // First pass: Validate the proposed layout given each pane's constraints\n    for (let index = 0; index < paneConstraints.length; index++) {\n        const unsafeSize = nextLayout[index];\n        assert(unsafeSize != null);\n        const safeSize = resizePane({\n            paneConstraints,\n            paneIndex: index,\n            initialSize: unsafeSize,\n        });\n        if (unsafeSize != safeSize) {\n            remainingSize += unsafeSize - safeSize;\n            nextLayout[index] = safeSize;\n        }\n    }\n    // If there is additional, left over space, assign it to any pane(s) that permits it\n    // (It's not worth taking multiple additional passes to evenly distribute)\n    if (!areNumbersAlmostEqual(remainingSize, 0)) {\n        for (let index = 0; index < paneConstraints.length; index++) {\n            const prevSize = nextLayout[index];\n            assert(prevSize != null);\n            const unsafeSize = prevSize + remainingSize;\n            const safeSize = resizePane({\n                paneConstraints,\n                paneIndex: index,\n                initialSize: unsafeSize,\n            });\n            if (prevSize !== safeSize) {\n                remainingSize -= safeSize - prevSize;\n                nextLayout[index] = safeSize;\n                // Once we've used up the remainder, bail\n                if (areNumbersAlmostEqual(remainingSize, 0)) {\n                    break;\n                }\n            }\n        }\n    }\n    return nextLayout;\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX\nfunction getDeltaPercentage(e, dragHandleId, dir, initialDragState, keyboardResizeBy) {\n    if (isKeyDown(e)) {\n        const isHorizontal = dir === \"horizontal\";\n        let delta = 0;\n        if (e.shiftKey) {\n            delta = 100;\n        }\n        else if (keyboardResizeBy != null) {\n            delta = keyboardResizeBy;\n        }\n        else {\n            delta = 10;\n        }\n        let movement = 0;\n        switch (e.key) {\n            case \"ArrowDown\":\n                movement = isHorizontal ? 0 : delta;\n                break;\n            case \"ArrowLeft\":\n                movement = isHorizontal ? -delta : 0;\n                break;\n            case \"ArrowRight\":\n                movement = isHorizontal ? delta : 0;\n                break;\n            case \"ArrowUp\":\n                movement = isHorizontal ? 0 : -delta;\n                break;\n            case \"End\":\n                movement = 100;\n                break;\n            case \"Home\":\n                movement = -100;\n                break;\n        }\n        return movement;\n    }\n    else {\n        if (initialDragState == null)\n            return 0;\n        return getDragOffsetPercentage(e, dragHandleId, dir, initialDragState);\n    }\n}\nfunction getDragOffsetPercentage(e, dragHandleId, dir, initialDragState) {\n    const isHorizontal = dir === \"horizontal\";\n    const handleElement = getResizeHandleElement(dragHandleId);\n    assert(handleElement);\n    const groupId = handleElement.getAttribute(\"data-pane-group-id\");\n    assert(groupId);\n    const { initialCursorPosition } = initialDragState;\n    const cursorPosition = getResizeEventCursorPosition(dir, e);\n    const groupElement = getPaneGroupElement(groupId);\n    assert(groupElement);\n    const groupRect = groupElement.getBoundingClientRect();\n    const groupSizeInPixels = isHorizontal ? groupRect.width : groupRect.height;\n    const offsetPixels = cursorPosition - initialCursorPosition;\n    const offsetPercentage = (offsetPixels / groupSizeInPixels) * 100;\n    return offsetPercentage;\n}\nfunction getResizeEventCursorPosition(dir, e) {\n    const isHorizontal = dir === \"horizontal\";\n    if (isMouseEvent(e)) {\n        return isHorizontal ? e.clientX : e.clientY;\n    }\n    else if (isTouchEvent(e)) {\n        const firstTouch = e.touches[0];\n        assert(firstTouch);\n        return isHorizontal ? firstTouch.screenX : firstTouch.screenY;\n    }\n    else {\n        throw Error(`Unsupported event type \"${e.type}\"`);\n    }\n}\n","import { createPaneForge } from \"../internal/paneforge.js\";\nimport { getContext, hasContext, setContext } from \"svelte\";\nimport { removeUndefined, getOptionUpdater } from \"../internal/utils/index.js\";\nconst PF_GROUP_CTX = Symbol(\"PF_GROUP_CTX\");\nexport function setCtx(props) {\n    const paneForge = createPaneForge(removeUndefined(props));\n    const updateOption = getOptionUpdater(paneForge.options);\n    const ctxValue = { ...paneForge, updateOption };\n    setContext(PF_GROUP_CTX, ctxValue);\n    return ctxValue;\n}\nexport function getCtx(componentName) {\n    if (!hasContext(PF_GROUP_CTX)) {\n        throw new Error(`${componentName} components must be rendered with a <PaneGroup> container`);\n    }\n    return getContext(PF_GROUP_CTX);\n}\n","<script>import { setCtx } from \"./ctx.js\";\nimport {} from \"../internal/utils/index.js\";\nimport { defaultStorage } from \"../internal/paneforge.js\";\nexport let autoSaveId = null;\nexport let direction;\nexport let id = null;\nexport let keyboardResizeBy = null;\nexport let onLayoutChange = null;\nexport let storage = defaultStorage;\nexport let el = void 0;\nexport let paneGroup = void 0;\nlet styleFromProps = void 0;\nexport { styleFromProps as style };\nconst {\n  states: { paneGroupStyle, paneGroupSelectors, groupId },\n  methods: { setLayout, getLayout },\n  updateOption\n} = setCtx({\n  autoSaveId,\n  direction,\n  id,\n  keyboardResizeBy,\n  onLayout: onLayoutChange,\n  storage\n});\n$:\n  updateOption(\"autoSaveId\", autoSaveId);\n$:\n  updateOption(\"direction\", direction);\n$:\n  updateOption(\"id\", id);\n$:\n  updateOption(\"keyboardResizeBy\", keyboardResizeBy);\n$:\n  updateOption(\"onLayout\", onLayoutChange);\n$:\n  updateOption(\"storage\", storage);\npaneGroup = {\n  getLayout,\n  setLayout,\n  getId: () => $groupId\n};\n$:\n  style = $paneGroupStyle + (styleFromProps ?? \"\");\n</script>\n\n<div bind:this={el} id={$groupId} {...$paneGroupSelectors} {style} {...$$restProps}>\n\t<slot />\n</div>\n","<script>import { generateId } from \"../internal/utils/index.js\";\nimport { onMount } from \"svelte\";\nimport { getCtx } from \"./ctx.js\";\nexport let collapsedSize = void 0;\nexport let collapsible = void 0;\nexport let defaultSize = void 0;\nexport let maxSize = void 0;\nexport let minSize = void 0;\nexport let onCollapse = void 0;\nexport let onExpand = void 0;\nexport let onResize = void 0;\nexport let order = void 0;\nexport let el = void 0;\nexport let pane = void 0;\nlet idFromProps = void 0;\nexport { idFromProps as id };\nlet styleFromProps = void 0;\nexport { styleFromProps as style };\nconst {\n  methods: {\n    getPaneStyle,\n    registerPane,\n    unregisterPane,\n    collapsePane,\n    expandPane,\n    getSize,\n    isCollapsed,\n    isExpanded,\n    resizePane\n  },\n  states: { groupId }\n} = getCtx(\"Pane\");\nconst paneId = generateId(idFromProps);\nlet paneData;\n$:\n  paneData = {\n    callbacks: {\n      onCollapse,\n      onExpand,\n      onResize\n    },\n    constraints: {\n      collapsedSize,\n      collapsible,\n      defaultSize,\n      maxSize,\n      minSize\n    },\n    id: paneId,\n    idIsFromProps: idFromProps !== void 0,\n    order\n  };\npane = {\n  collapse: () => {\n    collapsePane(paneData);\n  },\n  expand: () => expandPane(paneData),\n  getSize: () => getSize(paneData),\n  isCollapsed: () => isCollapsed(paneData),\n  isExpanded: () => isExpanded(paneData),\n  resize: (size) => resizePane(paneData, size),\n  getId: () => paneId\n};\nonMount(() => {\n  registerPane(paneData);\n  return () => {\n    unregisterPane(paneData);\n  };\n});\n$:\n  style = $getPaneStyle(paneData, defaultSize) + (styleFromProps ?? \"\");\n$:\n  attrs = {\n    \"data-pane\": \"\",\n    \"data-pane-id\": paneId,\n    \"data-pane-group-id\": $groupId\n  };\n</script>\n\n<div bind:this={el} {style} {...attrs} {...$$restProps}>\n\t<slot />\n</div>\n","import { chain } from \"../internal/utils/chain.js\";\nimport { addEventListener } from \"../internal/utils/event.js\";\n/**\n * A Svelte action that adds resize handle functionality to an element.\n * This action is used to handle the dragging of a resize handle.\n */\nexport function resizeHandleAction(node, params) {\n    let unsub = () => { };\n    function update(params) {\n        unsub();\n        const { disabled, resizeHandler, isDragging, stopDragging, onDragging = undefined } = params;\n        if (disabled || resizeHandler === null || !isDragging)\n            return;\n        const onMove = (event) => {\n            resizeHandler(event);\n        };\n        const onMouseLeave = (event) => {\n            resizeHandler(event);\n        };\n        const stopDraggingAndBlur = () => {\n            node.blur();\n            stopDragging();\n            if (onDragging) {\n                onDragging(false);\n            }\n        };\n        unsub = chain(addEventListener(document.body, \"contextmenu\", stopDraggingAndBlur), addEventListener(document.body, \"mousemove\", onMove), addEventListener(document.body, \"touchmove\", onMove, { passive: false }), addEventListener(document.body, \"mouseleave\", onMouseLeave), addEventListener(window, \"mouseup\", stopDraggingAndBlur), addEventListener(window, \"touchend\", stopDraggingAndBlur));\n    }\n    update(params);\n    return {\n        update,\n        onDestroy() {\n            unsub();\n        },\n    };\n}\n","<script>import {\n  getResizeHandleElementIndex,\n  getResizeHandleElementsForGroup\n} from \"../internal/paneforge.js\";\nimport { generateId, getCursorStyle, styleToString } from \"../internal/utils/index.js\";\nimport { onMount } from \"svelte\";\nimport { getCtx } from \"./ctx.js\";\nimport { resizeHandleAction } from \"./pane-resizer.js\";\nexport let disabled = false;\nexport let onDraggingChange = void 0;\nexport let tabIndex = 0;\nexport let el = null;\nexport let idFromProps = void 0;\nexport { idFromProps as id };\nexport let styleFromProps = void 0;\nexport { styleFromProps as style };\nconst {\n  methods: { registerResizeHandle, startDragging, stopDragging },\n  states: { direction, dragState, groupId }\n} = getCtx(\"PaneResizer\");\nconst resizeHandleId = generateId(idFromProps);\n$:\n  isDragging = $dragState?.dragHandleId === resizeHandleId;\nlet isFocused = false;\nlet resizeHandler = null;\nfunction stopDraggingAndBlur() {\n  const element = el;\n  if (!element)\n    return;\n  element.blur();\n  stopDragging();\n  onDraggingChange?.(false);\n}\nonMount(() => {\n  if (disabled) {\n    resizeHandler = null;\n  } else {\n    resizeHandler = registerResizeHandle(resizeHandleId);\n  }\n});\n$:\n  if (disabled) {\n    resizeHandler = null;\n  } else {\n    resizeHandler = registerResizeHandle(resizeHandleId);\n  }\nfunction handleKeydown(event) {\n  if (disabled || !resizeHandler || event.defaultPrevented)\n    return;\n  const resizeKeys = [\"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"End\", \"Home\"];\n  if (resizeKeys.includes(event.key)) {\n    event.preventDefault();\n    resizeHandler(event);\n    return;\n  }\n  if (event.key !== \"F6\")\n    return;\n  event.preventDefault();\n  const handles = getResizeHandleElementsForGroup($groupId);\n  const index = getResizeHandleElementIndex($groupId, resizeHandleId);\n  if (index === null)\n    return;\n  const nextIndex = event.shiftKey ? index > 0 ? index - 1 : handles.length - 1 : index + 1 < handles.length ? index + 1 : 0;\n  const nextHandle = handles[nextIndex];\n  nextHandle.focus();\n}\n$:\n  style = styleToString({\n    cursor: getCursorStyle($direction),\n    \"touch-action\": \"none\",\n    \"user-select\": \"none\",\n    \"-webkit-user-select\": \"none\",\n    \"-webkit-touch-callout\": \"none\"\n  }) + styleFromProps;\n$:\n  attrs = {\n    \"data-direction\": $direction,\n    \"data-pane-group-id\": $groupId,\n    \"data-active\": isDragging ? \"pointer\" : isFocused ? \"keyboard\" : void 0,\n    \"data-enabled\": !disabled,\n    \"data-pane-resizer-id\": resizeHandleId,\n    \"data-pane-resizer\": \"\"\n  };\n</script>\n\n<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->\n<!-- eslint-disable-next-line svelte/valid-compile -->\n<!-- svelte-ignore a11y-no-noninteractive-tabindex -->\n<div\n\tbind:this={el}\n\trole=\"separator\"\n\t{style}\n\tuse:resizeHandleAction={{\n\t\tdisabled,\n\t\tresizeHandler,\n\t\tstopDragging,\n\t\tisDragging,\n\t\tonDragging: onDraggingChange,\n\t}}\n\ton:keydown={handleKeydown}\n\ton:blur={() => (isFocused = false)}\n\ton:focus={() => (isFocused = true)}\n\ton:mousedown={(e) => {\n\t\te.preventDefault();\n\t\tstartDragging(resizeHandleId, e);\n\t\tonDraggingChange?.(true);\n\t}}\n\ton:mouseup={stopDraggingAndBlur}\n\ton:touchcancel={stopDraggingAndBlur}\n\ton:touchend={stopDraggingAndBlur}\n\ton:touchstart={(e) => {\n\t\te.preventDefault();\n\t\tstartDragging(resizeHandleId, e);\n\t\tonDraggingChange?.(true);\n\t}}\n\ttabindex={tabIndex}\n\t{...attrs}\n\t{...$$restProps}\n>\n\t<slot />\n</div>\n","<script lang=\"ts\">\n  import Editor from \"$lib/components/Editor.svelte\";\n  import Notebook from \"$lib/components/notebook/Notebook.svelte\";\n  import { Pane, PaneGroup, PaneResizer } from \"paneforge\";\n\n  export let content: string;\n  export let lang: string;\n\n  function getLanguage(ext: string) {\n    switch (ext) {\n      case \"j2\":\n        return \"jinja\";\n      case \"pyi\":\n        return \"python\";\n      default:\n        return ext;\n    }\n  }\n</script>\n\n<PaneGroup direction=\"horizontal\" class=\"h-full w-full\">\n  <Pane minSize={15} class=\"relative\">\n    <Editor on:save lang={getLanguage(lang)} showLineNum bind:source={content} />\n  </Pane>\n  {#if lang === \"md\"}\n    <PaneResizer class=\"group\">\n      <div class=\"mx-1 h-full w-0.11em bg-white/10 transition group-active:bg-current group-hover:bg-white/30\" />\n    </PaneResizer>\n    <Pane minSize={15} class=\"@container\">\n      <section class=\"relative h-full [&>article>*]:text-base\">\n        <div class=\"pointer-events-none absolute top-0 z-1 h-5 w-full bg-gradient-(from-neutral-9 to-neutral-9/0 to-b) @lg:h-7\" />\n        <Notebook text={content} />\n        <div class=\"pointer-events-none absolute bottom-0 z-1 h-5 w-full bg-gradient-(from-neutral-9/80 to-neutral-9/0 to-t) @lg:h-7\" />\n      </section>\n    </Pane>\n  {/if}\n</PaneGroup>\n\n<style>\n  section > :global(article) {\n    --uno: h-full overflow-scroll p-5 @lg:p-7;\n  }\n</style>\n","<script context=\"module\" lang=\"ts\">\n  const collapseStates = new Map<string, boolean>();\n</script>\n\n<script lang=\"ts\">\n  import type { File, Folder, Tree } from \"$lib/utils/list2tree\";\n\n  import { sources } from \"./store\";\n  import { input } from \"$lib/components/Input.svelte\";\n  import { slide } from \"svelte/transition\";\n\n  export let folder: Folder;\n  export let parent = \"\";\n  export let focusedFile: string | null = null;\n\n  let collapse = collapseStates.get(parent) ?? folder.children.length > 20;\n  $: collapseStates.set(parent, collapse);\n\n  $: tree = folder.children;\n\n  export let depth = 0;\n\n  function getPath(item: Tree[number]) {\n    return parent ? `${parent}/${item.name}` : item.name;\n  }\n\n  function countFlattenLength(children: Tree) {\n    let length = 0;\n    for (const item of children) {\n      length++;\n      if (item.type === \"folder\" && !(collapseStates.get(getPath(item)) ?? item.children.length > 5))\n        length += countFlattenLength(item.children);\n    }\n    return length;\n  }\n\n  function getFileIcon(item: File) {\n    switch (item.name.split(\".\").at(-1)) {\n      case \"py\":\n      case \"pyi\":\n        return \"i-catppuccin-python\";\n      case \"j2\":\n        return \"i-catppuccin-jinja\";\n      case \"svelte\":\n        return \"i-catppuccin-svelte\";\n      case \"yml\":\n      case \"yaml\":\n        return \"i-catppuccin-yaml\";\n      case \"toml\":\n        return \"i-catppuccin-toml\";\n      case \"ts\":\n      case \"mts\":\n      case \"cts\":\n        return \"i-catppuccin-typescript\";\n      case \"js\":\n      case \"mjs\":\n      case \"cjs\":\n        return \"i-catppuccin-javascript\";\n      case \"md\":\n        return \"i-catppuccin-markdown\";\n      default:\n        return \"i-catppuccin-file\";\n    }\n  }\n\n  function deleteFile(path: string) {\n    const { [path]: _, ...rest } = $sources;\n    $sources = rest;\n  }\n\n  async function renameFile(item: File) {\n    const path = getPath(item);\n    const name = await input(\"重命名为\", item.name);\n    if (name) {\n      const { [path]: content, ...rest } = $sources;\n      const target = `${parent}/${name}`.replace(/^\\//, \"\");\n      $sources = { ...rest, [target]: content };\n      focusedFile = target;\n    }\n  }\n</script>\n\n<section data-container>\n  {#if parent !== \"\"}\n    <button data-folder style:--depth=\"{depth - 1 + 0.8}em\" on:click={() => collapse = !collapse}>\n      <div class={collapse ? \"i-catppuccin-folder\" : \"i-catppuccin-folder-open\"} />\n      <div>{parent.split(\"/\").at(-1)}</div>\n    </button>\n  {/if}\n\n  {#if parent === \"\" || !collapse}\n\n    <section transition:slide={{ duration: 100 * (countFlattenLength(tree) ** 0.4) }}>\n\n      {#each tree as item}\n        {#if item.type === \"file\"}\n          <button data-file class=\"group\" style:--depth=\"{depth + 0.8}em\" class:!bg-neutral-8={focusedFile === getPath(item)} on:click={() => (focusedFile = getPath(item))}>\n            <div class={getFileIcon(item)} />\n            <div>{item.name}</div>\n            <div class=\"absolute right-1 top-1/2 flex flex-row-reverse gap-1 text-neutral-4 transition group-not-hover:(pointer-events-none op-0) -translate-y-1/2 [&>div:hover]:text-neutral-3\">\n              <!-- svelte-ignore a11y-interactive-supports-focus a11y-click-events-have-key-events -->\n              <div role=\"button\" on:click|stopPropagation={() => deleteFile(getPath(item))} class=\"i-carbon-trash-can\" />\n              <!-- svelte-ignore a11y-interactive-supports-focus a11y-click-events-have-key-events -->\n              <div role=\"button\" on:click|stopPropagation={() => renameFile(item)} class=\"i-carbon-edit\" />\n            </div>\n          </button>\n        {:else}\n          <svelte:self folder={item} parent={getPath(item)} depth={depth + 1} bind:focusedFile />\n        {/if}\n      {/each}\n\n    </section>\n\n  {/if}\n</section>\n\n<style>\n  section {\n    --uno: flex flex-col text-ellipsis ws-nowrap;\n  }\n\n  button:where([data-file], [data-folder]) {\n    --uno: relative w-full flex shrink-0 flex-row items-center gap-1.4 overflow-x-hidden rounded-r-sm py-0.6 pl-$depth pr-1 text-left text-xs text-neutral-1/95 font-mono transition-background-color duration-100 active:bg-neutral-8/70 hover:bg-neutral-8/50;\n  }\n\n  div {\n    --uno: shrink-0;\n  }\n\n  [data-container] {\n    --uno: transition-background-color duration-100;\n  }\n\n  [data-container]:has(> button:first-child:hover) {\n    --uno: rounded-r-sm bg-neutral-8/10;\n  }\n</style>\n","export interface File {\n  type: \"file\";\n  name: string;\n}\n\nexport interface Folder {\n  type: \"folder\";\n  name: string;\n  children: Tree;\n}\n\nexport type Tree = (File | Folder)[];\n\nexport function unflatten(paths: string[]) {\n  const root: Folder = { type: \"folder\", name: \"\", children: [] };\n\n  paths.forEach((path) => {\n    const parts = path.split(\"/\");\n    let currentFolder = root;\n\n    parts.forEach((part, index) => {\n      // Check if the part is the last part in the path\n      const isFile = index === parts.length - 1;\n\n      // Try to find the child in the current folder\n      let child = currentFolder.children.find(child => child.name === part);\n\n      if (!child) {\n        if (isFile) {\n          // If it's a file, create a File object\n          child = { type: \"file\", name: part };\n        }\n        else {\n          // If it's a folder, create a Folder object\n          child = { type: \"folder\", name: part, children: [] };\n        }\n\n        // Add the child to the current folder's children\n        currentFolder.children.push(child);\n      }\n\n      // Move to the child folder if it's a folder\n      if (!isFile) {\n        currentFolder = child as Folder;\n      }\n    });\n  });\n\n  return root.children;\n}\n","<script lang=\"ts\">\n  import type { Folder } from \"$lib/utils/list2tree\";\n\n  import Tree from \"./Tree.svelte\";\n  import { unflatten } from \"$lib/utils/list2tree\";\n\n  export let files: string[] = [];\n\n  export let focusedFile = files.length ? files![0] : null;\n\n  export let title = \"文件\";\n\n  $: root = { name: \"\", children: unflatten(files), type: \"folder\" } as Folder;\n</script>\n\n<div class=\"relative h-full select-none gap-1 overflow-y-scroll\">\n  <h2 class=\"sticky top-0 bg-gradient-(from-neutral-9/0 to-neutral-9/80 to-t) pb-1 pl-2 pt-2 text-sm tracking-wide\">{title}</h2>\n  <div class=\"pb-1.5 font-normal\">\n    {#if files.length}\n      <Tree folder={root} bind:focusedFile />\n    {:else}\n      <div class=\"grid place-items-center text-xs text-neutral-6 font-300\">目前是空的</div>\n    {/if}\n  </div>\n</div>\n","import type { Cmd } from \"./Item.svelte\";\n\nimport { commands } from \"./CmdK.svelte\";\nimport { onDestroy } from \"svelte\";\n\nexport interface Command {\n  text: string;\n  handler: (value: string) => any;\n}\n\nexport function registerCommandGroup(groupName: string, newCommands: Command[]) {\n  commands.update($commands => (\n    {\n      ...$commands,\n      [groupName]: newCommands.map(\n        ({ text, handler }) => ({ type: \"cmd\", text, callback: handler } as Cmd),\n      ),\n    }\n  ));\n  onDestroy(() => {\n    commands.update(({ [groupName]: _, ...rest }) => rest);\n  });\n}\n","<div class=\"absolute bottom-0.4em right-0.4em flex flex-row-reverse items-center gap-1.5 text-1em op-0 [&>button:active]:scale-85 [&>button:hover]:op-70 group-hover:(op-100 transition-opacity duration-300)\">\n  <slot />\n</div>\n","<script lang=\"ts\">\n  import WithTooltip from \"../reusable/WithTooltip.svelte\";\n  import UseCopy from \"./UseCopy.svelte\";\n\n  export let text: string;\n</script>\n\n<UseCopy {text} let:handleClick>\n  <WithTooltip tips=\"复制\" let:builder>\n    <button on:click={handleClick} class=\"i-icon-park-twotone-copy\" {...builder} use:builder.action />\n  </WithTooltip>\n</UseCopy>\n","<script lang=\"ts\">\n  import { highlight } from \"../../highlight\";\n\n  export let lang = \"python\";\n  export let text: string;\n</script>\n\n<div tabindex=\"-1\" class=\"contents [&>pre]:(inline whitespace-pre-wrap) [&_code>span]:min-h-[calc(2em-8px)] [&_code]:(flex flex-col gap-0.2em) [&_span]:font-mono ![&>pre]:bg-transparent\">\n  {#await highlight(lang, text)}\n    {text}\n  {:then html}\n    {@html html}\n  {/await}\n</div>\n","<script lang=\"ts\">\n  import Highlight from \"./Highlight.svelte\";\n\n  export let text: string;\n\n  // eslint-disable-next-line no-control-regex\n  const ansiPattern = /\\x1B\\[[0-9;]*[mK]/;\n</script>\n\n{#if ansiPattern.test(text)}\n  <Highlight text={text.replace(/\\n$/, \"\")} lang=\"ansi\" />\n{:else}\n  {text}\n{/if}\n","<script lang=\"ts\">\n  import WithTooltip from \"../reusable/WithTooltip.svelte\";\n  import ButtonGroup from \"./ButtonGroup.svelte\";\n  import Copy from \"./Copy.svelte\";\n  import MaybeAnsi from \"./MaybeANSI.svelte\";\n\n  export let text: string;\n</script>\n\n<div class=\"group relative whitespace-normal\">\n  <div class=\"whitespace-pre-wrap text-red-4\">\n    <MaybeAnsi {text} />\n  </div>\n\n  <ButtonGroup>\n    <Copy {text} />\n    <WithTooltip tips=\"AI 解释\" let:builder>\n      <button on:click class=\"i-majesticons-lightbulb-shine\" {...builder} use:builder.action />\n    </WithTooltip>\n  </ButtonGroup>\n\n</div>\n","<script>\n  export let prompt = \">>>\";\n</script>\n\n<span class=\"flex-shrink-0 select-none op-25 group-hover:op-100\">{`${prompt} `}</span>\n\n<style>\n  span {\n    font-feature-settings: \"calt\" 0;\n  }\n</style>\n","<script lang=\"ts\">\n  import ConsolePrompt from \"../ConsolePrompt.svelte\";\n  import WithTooltip from \"../reusable/WithTooltip.svelte\";\n  import ButtonGroup from \"./ButtonGroup.svelte\";\n  import Copy from \"./Copy.svelte\";\n  import Highlight from \"./Highlight.svelte\";\n\n  export let text = \"\";\n</script>\n\n{#if text !== \"\"}\n  <div class=\"group relative flex flex-row\">\n    <div class=\"flex flex-col gap-0.2em\">\n      <ConsolePrompt />\n      {#each Array.from({ length: text.match(/\\n/g)?.length ?? 0 }) as _}\n        <ConsolePrompt prompt=\"...\" />\n      {/each}\n    </div>\n    <Highlight {text}></Highlight>\n    <ButtonGroup>\n      <Copy {text} />\n      <WithTooltip tips=\"再次运行\" let:builder>\n        <button on:click class=\"i-mingcute-play-fill\" {...builder} use:builder.action />\n      </WithTooltip>\n    </ButtonGroup>\n  </div>\n{:else}\n  <section class=\"animate-(fade-out duration-300 both)\">\n    <ConsolePrompt />\n  </section>\n{/if}\n","<script lang=\"ts\">\n  import ButtonGroup from \"./ButtonGroup.svelte\";\n  import Copy from \"./Copy.svelte\";\n  import MaybeAnsi from \"./MaybeANSI.svelte\";\n\n  export let text: string;\n</script>\n\n<div class=\"group relative whitespace-normal\">\n  <div class=\"whitespace-pre-wrap text-yellow-2\">\n    <MaybeAnsi {text} />\n  </div>\n  <ButtonGroup>\n    <Copy {text} />\n  </ButtonGroup>\n</div>\n","<script lang=\"ts\">\n  import ButtonGroup from \"./ButtonGroup.svelte\";\n  import Copy from \"./Copy.svelte\";\n\n  export let text: string;\n</script>\n\n<div class=\"group relative whitespace-normal\">\n  <div class=\"whitespace-pre-wrap text-cyan-2\">{text}</div>\n  <ButtonGroup>\n    <Copy {text} />\n  </ButtonGroup>\n</div>\n","<script lang=\"ts\">\n  import type { ConsoleAPI } from \"$py/console/console\";\n\n  import { input, items, placeholder, prefixes, show } from \"../command/CmdK.svelte\";\n  import { registerCommandGroup } from \"../command/helper\";\n  import getPy from \"$lib/pyodide\";\n  import { tick } from \"svelte\";\n\n  export let pyConsole: ConsoleAPI;\n\n  const installTitle = \"安装第三方库\";\n\n  registerCommandGroup(\"控制台\", [\n    {\n      text: installTitle,\n      async handler() {\n        $prefixes = [installTitle];\n        $placeholder = \"<包名1> <包名2> ...\";\n\n        const unsubscribe = input.subscribe(($input) => {\n          $items = [{\n            async callback() {\n              $items = [];\n              $prefixes = [];\n              $placeholder = \"\";\n              unsubscribe();\n              await tick();\n\n              const packages = $input.split(\" \").filter(Boolean);\n              if (packages?.length) {\n                const py = await getPy();\n                py.pyimport(\"micropip.install\")(packages);\n              }\n              else {\n                requestAnimationFrame(() => $show = true);\n              }\n            },\n            type: \"cmd\",\n            text: $input ? `pip install ${$input}` : \"<取消>\",\n            alwaysRender: true,\n          }];\n        });\n\n        requestAnimationFrame(() => $show = true);\n      },\n    },\n    {\n      text: \"清空控制台\",\n      handler() {\n        pyConsole.clear();\n      },\n    },\n  ]);\n</script>\n","export function needScroll(element?: HTMLElement, threshold = 200) {\n  if (!element)\n    return false;\n\n  const offsetBottom = element.scrollHeight - element.clientHeight - element.scrollTop;\n\n  return offsetBottom < threshold;\n}\n\nexport function scrollToBottom(element?: HTMLElement, behavior: ScrollBehavior = \"smooth\") {\n  if (!element)\n    return;\n\n  element.scrollTo({ top: element.scrollHeight, behavior });\n}\n","<script context=\"module\" lang=\"ts\">\n  export interface Item {\n    type: \"out\" | \"err\" | \"in\" | \"repr\";\n    text: string;\n    incomplete?: boolean;\n    is_traceback?: boolean;\n  }\n\n  export type AutoComplete = (source: string) => [string[], number];\n  export type Status = \"incomplete\" | \"complete\";\n</script>\n\n<script lang=\"ts\">\n  import type { ConsoleAPI } from \"$py/console/console\";\n\n  import { currentConsole } from \"./store\";\n  import WithConsoleCommands from \"./WithConsoleCommands.svelte\";\n  import getPy from \"$lib/pyodide\";\n  import { needScroll, scrollToBottom } from \"$lib/utils/scroll\";\n  import { afterUpdate, beforeUpdate, onDestroy, onMount } from \"svelte\";\n\n  export let ready = false;\n  export let status: Status = \"complete\";\n  export let log: Item[] = [];\n  export let pyConsole: ConsoleAPI;\n  export let complete: AutoComplete | undefined;\n  export let container: HTMLElement | undefined;\n\n  let loading = 0;\n\n  function syncLog() {\n    log = pyConsole.get_items();\n    status = pyConsole.incomplete ? \"incomplete\" : \"complete\";\n  }\n\n  onMount(async () => {\n    const py = await getPy({ console: true });\n    pyConsole = (py.pyimport(\"console.console\")).ConsoleAPI((syncLog));\n    $currentConsole = pyConsole;\n    complete = pyConsole.complete;\n    ready = true;\n  });\n\n  onDestroy(() => {\n    $currentConsole = null;\n    pyConsole?.close();\n    pyConsole?.destroy();\n  });\n\n  let autoscroll = false;\n\n  beforeUpdate(() => {\n    autoscroll = needScroll(container ?? document.documentElement, 500);\n  });\n\n  afterUpdate(() => {\n    autoscroll && scrollToBottom(container ?? document.documentElement);\n  });\n\n  export async function push(source: string) {\n    const res = pyConsole.push(source);\n    if (res.status === \"complete\") {\n      loading++;\n      res.future.add_done_callback(() => loading--);\n    }\n    return res;\n  }\n</script>\n\n<slot {status} {loading} />\n\n<WithConsoleCommands {pyConsole} />\n","<script lang=\"ts\">\n  import WithTooltip from \"./reusable/WithTooltip.svelte\";\n\n  export let icon: string;\n  export let tips: string;\n</script>\n\n<WithTooltip {tips} let:builder>\n  <button on:click class=\"rounded-full p-0.3em hover:bg-neutral-7 not-hover:text-neutral-3\" {...builder} use:builder.action>\n    <div class={icon} />\n  </button>\n</WithTooltip>\n","<script context=\"module\" lang=\"ts\">\n  import type { WorkspaceAPI } from \"$py/workspace/workspace\";\n\n  import { writable } from \"svelte/store\";\n\n  export const currentWorkspace = writable<WorkspaceAPI | undefined>();\n</script>\n\n<script lang=\"ts\">\n  import getPy from \"$lib/pyodide\";\n  import { onDestroy, onMount } from \"svelte\";\n\n  export let sources: Record<string, string>;\n\n  let workspace: WorkspaceAPI;\n\n  onMount(async () => {\n    const py = await getPy({ workspace: true });\n    workspace = py.pyimport(\"workspace.WorkspaceAPI\")(py.toPy(sources));\n    $currentWorkspace = workspace;\n  });\n\n  onDestroy(() => {\n    $currentWorkspace = undefined;\n    workspace?.close();\n    workspace?.destroy();\n  });\n</script>\n\n<slot {workspace} />\n","<script lang=\"ts\">\n  import type { AutoComplete, Item, Status } from \"./console/HeadlessConsole.svelte\";\n  import type { ConfigModule } from \"$py/common/config\";\n  import type { ConsoleAPI } from \"$py/console/console\";\n  import type { ClipboardEventHandler, KeyboardEventHandler } from \"svelte/elements\";\n\n  import { sources } from \"../../routes/(workspace)/store\";\n  import { focusedFile } from \"../../routes/(workspace)/Workspace.svelte\";\n  import { Err, In, Out, Repr } from \"./console\";\n  import HeadlessConsole from \"./console/HeadlessConsole.svelte\";\n  import { currentConsolePush } from \"./console/store\";\n  import ConsoleAction from \"./ConsoleAction.svelte\";\n  import ConsolePrompt from \"./ConsolePrompt.svelte\";\n  import Modal from \"./Modal.svelte\";\n  import { currentWorkspace } from \"./reusable/WorkspaceLifecycle.svelte\";\n  import { goto } from \"$app/navigation\";\n  import { newChat } from \"$lib/components/ChatWindow.svelte\";\n  import getPy from \"$lib/pyodide\";\n  import { pyodideReady } from \"$lib/stores\";\n  import { patchSource, reformatInputSource } from \"$lib/utils/formatSource\";\n  import { onDestroy, onMount } from \"svelte\";\n  import { fly } from \"svelte/transition\";\n\n  // eslint-disable-next-line no-undef-init\n  export let container: HTMLElement | undefined = undefined;\n\n  let log: Item[] = [];\n\n  const history: string[] = [];\n  let index = -1;\n\n  let input = \"\";\n  let inputRef: HTMLInputElement;\n\n  let pyConsole: ConsoleAPI;\n  let complete: AutoComplete;\n  let status: Status;\n\n  let focusedError: { traceback: string; code: string } | undefined;\n\n  function showErrorExplain(index: number) {\n    if (log[index]?.type !== \"err\")\n      return;\n\n    const traceback = log[index].text;\n\n    const code = log\n      .slice(0, index)\n      .map(({ text, type }) => (type === \"in\" ? reformatInputSource(text) : text))\n      .join(\"\\n\");\n\n    focusedError = { traceback, code };\n  }\n\n  let push: (source: string) => Promise<any>;\n\n  onMount(async () => {\n    history.unshift(...(JSON.parse(localStorage.getItem(\"console-history\") || \"[]\") as string[]));\n    focusToInput();\n    $currentConsolePush = pushBlock;\n  });\n\n  onDestroy(() => {\n    $currentConsolePush = null;\n  });\n\n  async function runStartupScripts() {\n    const py = await getPy();\n    const configModule: ConfigModule = py.pyimport(\"common.config\");\n    const [preRun, run] = configModule.get_scripts();\n    if (preRun) {\n      await py.runPythonAsync(preRun, { globals: pyConsole.context });\n    }\n    if (run) {\n      await pushBlock(run);\n    }\n    if (location.hash) {\n      const source = atob(decodeURIComponent(location.hash.slice(1)));\n      pushBlock(source);\n    }\n  }\n\n  $: $pyodideReady && pyConsole && runStartupScripts();\n\n  async function pushMany(lines: string[], wait = true, hidden = false, finallySetInput = \"\") {\n    let promise: Promise<any> | null = null;\n    for (const line of lines) {\n      if (hidden) {\n        promise = pyConsole.push(line).future;\n      }\n      else {\n        promise && (input = line);\n        wait && (await promise);\n        pushHistory(line);\n        promise = push(line);\n      }\n    }\n    input = finallySetInput;\n    wait && (await promise);\n  }\n\n  async function pushBlock(source: string, wait = true, hidden = false) {\n    const lines = patchSource(source.replaceAll(\"\\r\\n\", \"\\n\")).split(\"\\n\");\n    await pushMany(lines.slice(0, -1), wait, hidden, lines.at(-1));\n  }\n\n  let ready: boolean;\n\n  function pushHistory(source: string) {\n    if (source.trim() && source !== history[0]) {\n      history.unshift(source);\n      localStorage.setItem(\"console-history\", JSON.stringify(history.slice(0, 200)));\n    }\n  }\n\n  function handleInput() {\n    if (!pyConsole)\n      return;\n    push(input);\n    pushHistory(input);\n    input = \"\";\n  }\n\n  function focusToInput(start?: number, end?: number) {\n    inputRef.scrollIntoView({ block: \"center\" });\n    inputRef.focus();\n    if (start !== undefined) {\n      requestAnimationFrame(() => inputRef.setSelectionRange(start, end ?? start));\n    }\n  }\n\n  const onPaste: ClipboardEventHandler<Document> = async (event) => {\n    if (!(event.target! as Node).contains(inputRef))\n      return;\n    event.preventDefault();\n    const text = event.clipboardData?.getData(\"text\") ?? \"\";\n    const textBefore = input.slice(0, inputRef.selectionStart!);\n    const textAfter = input.slice(inputRef.selectionEnd!);\n    const distanceToEnd = input.length - inputRef.selectionEnd!;\n    await pushBlock(textBefore + text + textAfter);\n    focusToInput(input.length - distanceToEnd);\n  };\n\n  const onKeyDown: KeyboardEventHandler<Document | HTMLInputElement> = (event) => {\n    if (!(event.target! as Node).contains(inputRef))\n      return;\n    if (!event.ctrlKey && !event.metaKey && !event.altKey && event.key.length === 1)\n      focusToInput();\n    else if (document.activeElement !== inputRef)\n      return;\n\n    switch (event.key) {\n      case \"ArrowUp\": {\n        const text = history.at(++index);\n        if (text) {\n          input = text;\n          focusToInput(input.length);\n        }\n        else {\n          index = history.length;\n        }\n        break;\n      }\n\n      case \"ArrowDown\": {\n        index--;\n        if (index <= -1) {\n          input = \"\";\n          index = -1;\n          break;\n        }\n        input = history.at(index)!;\n        focusToInput();\n        break;\n      }\n\n      case \"Tab\": {\n        event.preventDefault();\n        const { selectionStart, selectionEnd } = inputRef;\n        if (event.shiftKey || selectionStart !== selectionEnd || !input.slice(0, selectionStart!).trim()) {\n          const startDistance = input.length - selectionStart!;\n          const endDistance = input.length - selectionEnd!;\n          if (event.shiftKey)\n            input = input.replace(/ {0,4}/, \"\");\n          else input = `    ${input}`;\n          const start = Math.max(0, input.length - startDistance);\n          const end = Math.max(0, input.length - endDistance);\n          focusToInput(start, end);\n        }\n        else {\n          const [results, position] = complete(input.slice(0, selectionStart!));\n          if (results.length === 1) {\n            const [result] = results;\n            input = input.slice(0, position) + result + input.slice(selectionEnd!);\n            focusToInput(position + result.length);\n          }\n        }\n        index = -1;\n        break;\n      }\n\n      case \"Enter\": {\n        handleInput();\n        index = -1;\n        break;\n      }\n\n      case \"Backspace\": {\n        if (inputRef.selectionStart === 0 && inputRef.selectionEnd === 0 && status === \"incomplete\") {\n          input = pyConsole.pop();\n          history.at(0) === input && history.shift();\n          index = -1;\n          event.preventDefault();\n        }\n        break;\n      }\n\n      default: {\n        index = -1;\n      }\n    }\n  };\n\n  $: extras = ` ${$$restProps.class ?? \"p-3\"}`;\n</script>\n\n<svelte:document on:keydown={onKeyDown} on:paste={onPaste} />\n\n<div class=\"w-full @container\">\n  <div class=\"w-full flex flex-col gap-0.7 overflow-x-scroll whitespace-pre-wrap break-all text-neutral-3 font-normal font-mono [&>div:hover]:(rounded-sm bg-white/2) [&>div]:(px-1.7 py-0.6 -mx-1.7 -my-0.6) {extras}\">\n    <HeadlessConsole {container} bind:ready bind:log bind:push bind:complete bind:pyConsole bind:status let:loading>\n      {#each log as { type, text }, index}\n        {#if type === \"out\"}\n          <Out {text} />\n        {:else if type === \"in\"}\n          <In {text} on:click={() => push(text)} />\n        {:else if type === \"err\"}\n          <Err {text} on:click={() => showErrorExplain(index)} />\n        {:else if type === \"repr\"}\n          <Repr {text} />\n        {/if}\n      {/each}\n      <div class=\"group flex flex-row\" class:animate-pulse={loading || !ready}>\n        <ConsolePrompt prompt={status === \"incomplete\" ? \"...\" : \">>>\"} />\n        <!-- svelte-ignore a11y-autofocus -->\n        <input autofocus bind:this={inputRef} class=\"w-full bg-transparent outline-none\" bind:value={input} type=\"text\" autocapitalize=\"off\" spellcheck=\"false\" autocomplete=\"off\" autocorrect=\"off\" />\n      </div>\n    </HeadlessConsole>\n  </div>\n</div>\n\n{#await import(\"./ErrorExplainer.svelte\") then { default: ErrorExplainer }}\n  <Modal let:close show={!!focusedError} cleanup={() => (focusedError = undefined)}>\n    <ErrorExplainer errorInfo={focusedError} {close} />\n  </Modal>\n{/await}\n\n<slot {ready} />\n\n<div role=\"toolbar\" in:fly={{ y: 10 }} class=\"fixed bottom-4 right-4 flex flex-row rounded-full bg-neutral-8/70 p-0.3em text-lg transition-all <sm:(right-1/2 translate-x-1/2 text-base)\">\n  {#if $currentWorkspace}\n    <ConsoleAction on:click={runStartupScripts} tips=\"重新运行启动命令\" icon=\"i-mingcute-refresh-anticlockwise-1-line\" />\n  {/if}\n  <ConsoleAction\n    on:click={async () => {\n      const source = log.map(({ text, type }) => (type === \"in\" ? text : \"\")).join(\"\\n\");\n      await goto(\"/new\");\n      $sources = { \"main.py\": source };\n      $focusedFile = \"main.py\";\n    }}\n    tips=\"创建新项目\"\n    icon=\"i-mingcute-add-circle-line\"\n  />\n  <ConsoleAction on:click={newChat} tips=\"与 AI 对话\" icon=\"i-mingcute-ai-line\" />\n  <ConsoleAction tips=\"检查工具\" icon=\"i-mingcute-inspect-line\" />\n</div>\n","<script context=\"module\" lang=\"ts\">\n  import { writable } from \"svelte/store\";\n\n  export const focusedFile = writable<string | undefined>();\n</script>\n\n<script lang=\"ts\">\n  import FileContent from \"./FileContent.svelte\";\n  import FileList from \"./FileList.svelte\";\n  import { registerCommandGroup } from \"$lib/components/command/helper\";\n  import Console from \"$lib/components/Console.svelte\";\n  import SetupWorkspace, { currentWorkspace } from \"$lib/components/reusable/WorkspaceLifecycle.svelte\";\n  import { toastMarkdown } from \"$lib/utils/toast\";\n  import { Pane, PaneGroup, PaneResizer } from \"paneforge\";\n  import { fade } from \"svelte/transition\";\n\n  export let sources: Record<string, string> = {};\n\n  function getDefaultFile() {\n    const readmeFiles = Object.keys(sources).filter(name => name.toUpperCase().includes(\"README\"));\n    if (readmeFiles.length === 0)\n      return Object.keys(sources)[0];\n    return readmeFiles.reduce((longest, current) => sources[current].length > sources[longest].length ? current : longest, readmeFiles[0]);\n  }\n\n  $focusedFile = getDefaultFile();\n  let container: HTMLElement;\n\n  $: registerCommandGroup(\"工作区\", Object.keys(sources).map(name => ({\n    text: `打开 ${name}`,\n    handler() {\n      $focusedFile = name;\n    },\n  })));\n\n  $: if ($focusedFile && !($focusedFile in sources)) {\n    $focusedFile = undefined;\n  }\n\n  $: $currentWorkspace?.sync(sources);\n</script>\n\n<div class=\"h-full\">\n  <PaneGroup direction=\"horizontal\">\n    <Pane defaultSize={20} minSize={10}>\n      <FileList files={Object.keys(sources).toSorted()} bind:focusedFile={$focusedFile} />\n    </Pane>\n    <PaneResizer class=\"group\">\n      <div class=\"mx-1 h-full w-0.11em bg-white/10 transition group-active:bg-current group-hover:bg-white/30\" />\n    </PaneResizer>\n    <Pane defaultSize={80} minSize={10}>\n      <PaneGroup direction=\"vertical\">\n        <SetupWorkspace {sources} let:workspace>\n          <Pane defaultSize={70} minSize={10} class=\"relative\">\n            {#if $focusedFile}\n              <FileContent on:save={() => {\n                toastMarkdown(`\\`${$focusedFile}\\` 已同步`);\n              }} bind:content={sources[$focusedFile]} lang={$focusedFile.slice($focusedFile.lastIndexOf(\".\") + 1)} />\n            {:else}\n              <div class=\"grid h-full w-full place-items-center\">\n                <div class=\"text-sm text-neutral-6\">打开或新建一个文件以编辑</div>\n              </div>\n            {/if}\n          </Pane>\n          <PaneResizer class=\"group\">\n            <div class=\"my-1 h-0.11em w-full bg-white/10 transition group-active:bg-current group-hover:bg-white/30\" />\n          </PaneResizer>\n          <Pane defaultSize={30} minSize={10}>\n            <div class=\"relative h-full w-full overflow-y-scroll\" bind:this={container}>\n              {#if workspace}\n                <Console class=\"p-2 text-xs [&>div:hover]:rounded-r-none @2xl:(text-13px line-height-18px) @7xl:text-sm\" {container} />\n              {:else}\n                <div class=\"absolute inset-0 grid place-items-center\">\n                  <div class=\"flex flex-row items-center gap-2 op-80\" out:fade>\n                    <div class=\"i-svg-spinners-90-ring-with-bg\" />\n                    <div class=\"text-sm tracking-wide\">初始化工作区</div>\n                  </div>\n                </div>\n\n              {/if}\n            </div>\n          </Pane>\n        </SetupWorkspace>\n      </PaneGroup>\n    </Pane>\n  </PaneGroup>\n</div>\n"],"file":"_app/immutable/chunks/BAG5G5jM.mjs"}