@marimo-team/frontend 0.25.3-dev91 → 0.25.3-dev93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{CellStatus-DYRvLOiP.js → CellStatus-CplYFNTy.js} +1 -1
- package/dist/assets/{ConnectedDataExplorerComponent-D9UK8o9A.js → ConnectedDataExplorerComponent-Dft8R6l5.js} +1 -1
- package/dist/assets/{ErrorBoundary-BKQo68Df.js → ErrorBoundary-CdGuz4a_.js} +2 -2
- package/dist/assets/{JsonOutput-DryOywaN.js → JsonOutput-Csbov8Fx.js} +3 -3
- package/dist/assets/{MarimoErrorOutput-XrTcOYTI.js → MarimoErrorOutput-czclLlOn.js} +1 -1
- package/dist/assets/{RenderHTML-DaVbCAsb.js → RenderHTML-CNDedpS4.js} +1 -1
- package/dist/assets/{RunButton-D3ScLvwb.js → RunButton-CRfdOxVd.js} +1 -1
- package/dist/assets/__vite-browser-external-8vDMR0Kk.js +1 -0
- package/dist/assets/__vite-browser-external-mKcnhO20.js +1 -0
- package/dist/assets/{add-cell-with-ai-BKk0pvon.js → add-cell-with-ai-BAIX7r0P.js} +1 -1
- package/dist/assets/{add-connection-dialog-CNIwGJVL.js → add-connection-dialog-DrDuM-tI.js} +1 -1
- package/dist/assets/{agent-panel-6t16-QG0.js → agent-panel-CoXq_rlA.js} +1 -1
- package/dist/assets/{ai-model-dropdown-prnCk5hq.js → ai-model-dropdown-COvWn46z.js} +2 -2
- package/dist/assets/{app-config-button-O_yI5nzB.js → app-config-button-CtxoYG4F.js} +1 -1
- package/dist/assets/{blob-FjxwDE1i.js → blob-DCjrjZKW.js} +1 -1
- package/dist/assets/{cache-panel-Byolv2ht.js → cache-panel-CbWZcBu0.js} +1 -1
- package/dist/assets/{cell-editor-CM_kQ_VW.js → cell-editor-BnL0Sorl.js} +1 -1
- package/dist/assets/{cell-link-D8EbRFJJ.js → cell-link-BFbgKiRH.js} +1 -1
- package/dist/assets/{cells-DfF1DLV_.js → cells-yOs72eZm.js} +2 -2
- package/dist/assets/{chat-display-BtQI9LeB.js → chat-display-DwRM41t_.js} +1 -1
- package/dist/assets/{chat-panel-tuUN0wet.js → chat-panel-DeTEdjxF.js} +1 -1
- package/dist/assets/{chat-ui-Bb-HxAv4.js → chat-ui-D6XucD07.js} +1 -1
- package/dist/assets/{code-visibility-ny5n3-GH.js → code-visibility-DYDagVy7.js} +1 -1
- package/dist/assets/{column-preview-CqFSXTtf.js → column-preview-DXM8SqGY.js} +1 -1
- package/dist/assets/{command-palette-CkDj29px.js → command-palette-CA6yfNLb.js} +1 -1
- package/dist/assets/{common-D2oGA09G.js → common-B-ZYnO1x.js} +1 -1
- package/dist/assets/{components-CJRBUI2s.js → components-CBE8cOLK.js} +1 -1
- package/dist/assets/{components-DrU8dOzy.js → components-DCo7mAWO.js} +1 -1
- package/dist/assets/{components-1zsrzJ_K.js → components-vu2jLG08.js} +1 -1
- package/dist/assets/{config-BWKfkUWA.js → config-CD1IuZFJ.js} +1 -1
- package/dist/assets/{config-CP8Y8_R0.js → config-DMz7oN0r.js} +1 -1
- package/dist/assets/{config-DGX7JYor.js → config-DpY86_Yq.js} +1 -1
- package/dist/assets/{createReducer-HKXUbqyz.js → createReducer-CaI_Oa0v.js} +1 -1
- package/dist/assets/{datasource-rV_-mqbc.js → datasource-BakEOWsf.js} +1 -1
- package/dist/assets/{dependency-graph-panel-By-cv0Nw.js → dependency-graph-panel-DCGB3_id.js} +1 -1
- package/dist/assets/{documentation-panel-DHMjvOPt.js → documentation-panel-CpGZ2Dfn.js} +1 -1
- package/dist/assets/{download-CMTzX3rG.js → download-CV1k4XQ4.js} +1 -1
- package/dist/assets/{edit-page-Bgkov1Jy.js → edit-page-By7n2M84.js} +5 -5
- package/dist/assets/{error-entries-BGCjRkVy.js → error-entries-JgrZYMbe.js} +1 -1
- package/dist/assets/{error-panel-BDTFHLEt.js → error-panel-DS7HWph-.js} +1 -1
- package/dist/assets/feedback-button-Dgs_HOOC.js +1 -0
- package/dist/assets/{feedback-button-C-ScLxY2.js → feedback-button-eYsTCK-g.js} +1 -1
- package/dist/assets/{file-explorer-panel-B9jBSwhj.js → file-explorer-panel-BTLwwwD4.js} +1 -1
- package/dist/assets/{file-name-input-DIvrcC82.js → file-name-input-BaR4h2Ud.js} +1 -1
- package/dist/assets/{floating-outline-DJnZ45VA.js → floating-outline-Drd73Quo.js} +1 -1
- package/dist/assets/{gallery-page-CHJD1mdU.js → gallery-page-DXUD11Rm.js} +1 -1
- package/dist/assets/{glide-data-editor-BsE9Em-a.js → glide-data-editor-DqBBoQBl.js} +1 -1
- package/dist/assets/{home-page-CCbdig5p.js → home-page-DrRto2-v.js} +1 -1
- package/dist/assets/{hooks-yjSoxKTw.js → hooks-D25kP4Sr.js} +1 -1
- package/dist/assets/{index-0pnwTVch.js → index-vBuAUWEe.js} +6 -6
- package/dist/assets/{input-BZdRe7pb.js → input-DmHMEZGh.js} +1 -1
- package/dist/assets/kiosk-mode-DFS6HopF.js +1 -0
- package/dist/assets/{layout-B2MJFBFp.js → layout-DLHIGZTK.js} +3 -3
- package/dist/assets/links-DX2w97N9.js +1 -0
- package/dist/assets/{logs-panel-B34vxRV7.js → logs-panel-D5AAD2s9.js} +1 -1
- package/dist/assets/{markdown-renderer-CkN_xAjW.js → markdown-renderer--CwVm4kJ.js} +1 -1
- package/dist/assets/{mermaid-B6mqMm5_.js → mermaid-BKXlWk4F.js} +1 -1
- package/dist/assets/{name-cell-input-eyYneuGK.js → name-cell-input-BFKZaNI5.js} +1 -1
- package/dist/assets/{outline-panel-rpjpMDYX.js → outline-panel-qcwRnl0R.js} +1 -1
- package/dist/assets/{package-data-dv4FBHxR.js → package-data-CKPmBDtg.js} +1 -1
- package/dist/assets/{packages-panel-gXdFgCro.js → packages-panel-DnSryNcz.js} +1 -1
- package/dist/assets/{panel-accordion-state-CImIsdc8.js → panel-accordion-state-BwJpDMVt.js} +1 -1
- package/dist/assets/{panels-DI8gAi31.js → panels-Aqzwb3UR.js} +1 -1
- package/dist/assets/{process-output-BClx23Jv.js → process-output-DuUfHYSr.js} +1 -1
- package/dist/assets/{readonly-code-display-JC_YsLL_.js → readonly-code-display-BY-9I_Yk.js} +1 -1
- package/dist/assets/{readonly-python-code-DeBED4OB.js → readonly-python-code-DSyr-yE2.js} +1 -1
- package/dist/assets/{renderShortcut-H60uiHBp.js → renderShortcut-rUwGqKgC.js} +1 -1
- package/dist/assets/{requests-lt0JK8Jt.js → requests-BIFR-h4M.js} +1 -1
- package/dist/assets/requests-DuLJN9Tf.js +1 -0
- package/dist/assets/{reveal-component-BoGgZrdo.js → reveal-component-C_Lb7Mom.js} +1 -1
- package/dist/assets/{run-page-DnvqkxCy.js → run-page-ZTw-kCU-.js} +1 -1
- package/dist/assets/{runs-6lJxKV1w.js → runs-C49hleBy.js} +1 -1
- package/dist/assets/{runtime-details-state-7JHj3efu.js → runtime-details-state-B7gpnuXx.js} +1 -1
- package/dist/assets/{save-worker-BbUSwZRG.js → save-worker-pCkSHhuz.js} +1 -1
- package/dist/assets/{scratchpad-panel-DZDmNIPw.js → scratchpad-panel-D2IHkKoG.js} +1 -1
- package/dist/assets/{secrets-panel-Dh3v7XPE.js → secrets-panel-bcfEKxRx.js} +1 -1
- package/dist/assets/{session-B8Y-GJnS.js → session-CMLIzZKw.js} +1 -1
- package/dist/assets/session-panel-cOSO3WCX.js +1 -0
- package/dist/assets/{snippets-panel-BNjtDbnR.js → snippets-panel-BNadUJLU.js} +1 -1
- package/dist/assets/{state-BY4_P6ko.js → state-3mcyTS9q.js} +1 -1
- package/dist/assets/{state-C0irhlOZ.js → state-B_MCKzBL.js} +1 -1
- package/dist/assets/state-BaYudep3.js +3 -0
- package/dist/assets/{state-DaWgt-rn.js → state-C5WAeuTu.js} +1 -1
- package/dist/assets/{state-Ck7FMD5A.js → state-Cv2JW3l9.js} +1 -1
- package/dist/assets/{state-DhaPGGBO.js → state-_1LTGJQM.js} +1 -1
- package/dist/assets/{switch-IoWE8PbW.js → switch-DYjBfpNJ.js} +1 -1
- package/dist/assets/{terminal-BwLC9HS5.js → terminal-Ca-kubKb.js} +1 -1
- package/dist/assets/{tracing-Ch4LR62-.js → tracing-DbTgS4u9.js} +1 -1
- package/dist/assets/{tracing-panel-B8fX4PhX.js → tracing-panel-CjlrpXPy.js} +2 -2
- package/dist/assets/{tree-actions-Zg3Ycse4.js → tree-actions-C_KYlaSv.js} +1 -1
- package/dist/assets/{useAddCell-BX9lq_0J.js → useAddCell-C0J8quGE.js} +1 -1
- package/dist/assets/{useAsyncData-DhhdOGGd.js → useAsyncData-qvoPYHtx.js} +1 -1
- package/dist/assets/{useBoolean-WABMLM83.js → useBoolean-Dd2nWXFJ.js} +1 -1
- package/dist/assets/{useCellActionButton-D7Ruyes-.js → useCellActionButton-CbkOj6BE.js} +1 -1
- package/dist/assets/{useDebounce-k9QTpQ9-.js → useDebounce-DwTQ_1Pu.js} +1 -1
- package/dist/assets/{useDeepCompareMemoize-DFIVN9dn.js → useDeepCompareMemoize-B2DVK2De.js} +1 -1
- package/dist/assets/{useDeleteCell-AbkQI6-c.js → useDeleteCell-DHkF5wgS.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-B0b2KkvS.js → useDependencyPanelTab--yXJW6X5.js} +1 -1
- package/dist/assets/{useEvent-Dfcbgjhg.js → useEvent-BDjgaBtz.js} +1 -1
- package/dist/assets/{useInstallPackage-CWcPxSLP.js → useInstallPackage-wcDq9hYT.js} +1 -1
- package/dist/assets/{useNotebookActions-DJuAUAGI.js → useNotebookActions-dJQalORg.js} +1 -1
- package/dist/assets/{useRunCells-CV81rge-.js → useRunCells-C_IwVJR_.js} +1 -1
- package/dist/assets/{useSplitCell-BTwCB3JS.js → useSplitCell-Ci4MEUj8.js} +1 -1
- package/dist/assets/{useTheme-DLtPc-39.js → useTheme-BAA27lh7.js} +1 -1
- package/dist/assets/{vega-component-CY6HmM06.js → vega-component-BeyxAJad.js} +1 -1
- package/dist/assets/{worker-DTQ7oH2A.js → worker-bSCjCvwz.js} +1 -1
- package/dist/assets/{write-secret-modal-7DzehGyr.js → write-secret-modal-BEx-EUlh.js} +1 -1
- package/dist/index.html +40 -40
- package/package.json +1 -1
- package/src/components/chat/acp/__tests__/state.test.ts +2 -2
- package/src/components/data-table/cell-selection/feature.ts +2 -2
- package/src/components/data-table/cell-selection/types.ts +2 -2
- package/src/components/data-table/column-summary/column-summary.tsx +2 -4
- package/src/components/datasources/__tests__/table-list.test.tsx +118 -0
- package/src/components/datasources/datasources.tsx +35 -21
- package/src/components/editor/SortableCell.tsx +1 -3
- package/src/components/editor/chrome/wrapper/footer-items/runtime-settings.tsx +1 -7
- package/src/components/editor/chrome/wrapper/storage.ts +1 -1
- package/src/components/editor/output/MarimoTracebackOutput.tsx +1 -1
- package/src/components/icons/spinner.tsx +1 -1
- package/src/components/ui/alert-dialog.tsx +1 -1
- package/src/core/ai/context/providers/datasource.ts +6 -2
- package/src/core/cells/session.ts +1 -1
- package/src/core/codemirror/__tests__/setup.test.ts +1 -1
- package/src/core/codemirror/keymaps/vim.ts +2 -6
- package/src/core/codemirror/language/languages/markdown.ts +1 -1
- package/src/core/codemirror/language/languages/python.ts +3 -3
- package/src/core/kernel/__tests__/RuntimeState.test.ts +1 -1
- package/src/core/state/__tests__/jotai.test.tsx +108 -0
- package/src/core/state/jotai.ts +1 -1
- package/src/core/wasm/bridge.ts +2 -2
- package/src/core/wasm/store.ts +3 -3
- package/src/core/wasm/worker/bootstrap.ts +1 -1
- package/src/core/wasm/worker/getMarimoWheel.ts +1 -1
- package/src/plugins/impl/CodeEditorPlugin.tsx +1 -1
- package/src/plugins/impl/RangeSliderPlugin.tsx +0 -1
- package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +1 -1
- package/src/plugins/impl/data-explorer/state/reducer.ts +1 -1
- package/src/plugins/impl/data-frames/DataFramePlugin.tsx +0 -1
- package/src/plugins/impl/panel/PanelPlugin.tsx +1 -1
- package/src/plugins/impl/vega/make-selectable.ts +1 -1
- package/src/plugins/layout/RoutesPlugin.tsx +1 -1
- package/src/stories/form-wrapper.stories.tsx +2 -2
- package/src/stories/select.stories.tsx +2 -2
- package/src/stories/switchable-multi-select.stories.tsx +1 -1
- package/src/utils/__tests__/batch-requests.test.ts +3 -3
- package/src/utils/blob.ts +1 -1
- package/src/utils/zod-utils.ts +1 -3
- package/dist/assets/__vite-browser-external-CYO_P3S8.js +0 -1
- package/dist/assets/__vite-browser-external-FeDVGZU8.js +0 -1
- package/dist/assets/feedback-button-CLRAP9DE.js +0 -1
- package/dist/assets/kiosk-mode-BGmMSc7A.js +0 -1
- package/dist/assets/links-CXcpNIM0.js +0 -1
- package/dist/assets/requests-CgSY1X4a.js +0 -1
- package/dist/assets/session-panel-B1QB5LN7.js +0 -1
- package/dist/assets/state-DUP4ToPd.js +0 -3
- package/src/core/state/__tests__/jotai.test.ts +0 -25
|
@@ -54,7 +54,7 @@ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=
|
|
|
54
54
|
|
|
55
55
|
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}r.count>1&&e.reused===`ref`&&a(n)}e.external&&(e.sharedDefsExtractedFor=e.external)}function Sa(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;Sa(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}const Ca=new Set([`type`,`properties`,`required`,`additionalProperties`]),wa=[`oneOf`,`anyOf`];function Ta(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function Ea(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!Ca.has(e))return null;t.push(n)}let n={},r=new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??Ta(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}v(n,r,e.length===1?e[0]:Ea(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=Ta(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function Da(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of Ca)if(t in e)return;let n=t.filter(e=>wa.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=Ea(t);else{let e=n[0],i=wa.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>Ea([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,_a(e,r))}function Oa(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):_a(i,s),_a(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())Sa(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])Da(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}_a(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,v(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Aa(t,`input`,e.processors),output:Aa(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function I(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return I(r.element,n);if(r.type===`set`)return I(r.valueType,n);if(r.type===`lazy`)return I(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return I(r.innerType,n);if(r.type===`intersection`)return I(r.left,n)||I(r.right,n);if(r.type===`record`||r.type===`map`)return I(r.keyType,n)||I(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:I(r.in,n)||I(r.out,n);if(r.type===`object`){for(let e in r.shape)if(I(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(I(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(I(e,n))return!0;return!!(r.rest&&I(r.rest,n))}return!1}const ka=(e,t={})=>n=>{let r=va({...n,processors:t});return F(e,r),xa(r,e),Oa(r,e)},Aa=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=va({...i??{},target:a,io:t,processors:n});return F(e,o),xa(o,e),Oa(o,e)},L=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},R=(e,t,n)=>{(e[t]===void 0||n<e[t])&&(e[t]=n)},ja=(e,t)=>{L(e,`minimum`,t),R(e,`maximum`,t)},Ma=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},Na=(e,t)=>{e.patterns??=new Set,e.patterns.add(t)},Pa=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},Fa=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},Ia=(e,t)=>L(e,`minimum`,t.minimum),La=(e,t)=>R(e,`maximum`,t.maximum),Ra=e=>(t,n)=>{Fa(t,n.format);let[r,i]=e[n.format];L(t,`minimum`,r),R(t,`maximum`,i)},za={greater_than:(e,t)=>L(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>R(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>Ma(e,t.value),number_format:Ra(Pe),bigint_format:Ra(Fe),min_length:Ia,max_length:La,length_equals:(e,t)=>ja(e,t.length),min_size:Ia,max_size:La,size_equals:(e,t)=>ja(e,t.size),string_format:(e,t)=>{Fa(e,t.format),t.pattern&&Na(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>Pa(e,t.mime)};function Ba(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)za[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&L(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&L(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&R(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&R(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&Ma(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&Pa(t,i.mime);for(let e of i.patterns??[])Na(t,e);return t}const Va={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Ha=new Map([[mr,sn],[gr,cn]]),Ua=e=>Ha.get(e)??e,Wa=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=Ba(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Va[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map(Ua);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Ga=(e,t,n,r)=>{n.not={}},Ka=(e,t,n,r)=>{let i=e._zod.def,a=fe(i.entries);if(a.length===0){n.not={};return}a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},qa=(e,t,n,r)=>{ya(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},Ja=(e,t,n,r)=>{ya(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},Ya=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=Ba(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=F(a.element,t,{...r,path:[...r.path,`items`]})};function Xa(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?Xa(t.out):t.type===`catch`?Xa(t.innerType):e._zod.optin}const Za=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&ya(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)v(i.properties,e,F(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?Xa(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=F(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Qa=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>F(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},$a=(e,t,n,r)=>{let i=e._zod.def,a=F(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=F(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)},eo=(e,t,n,r)=>{let i=e._zod.def,a=F(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},to=(e,t,n,r)=>{let i=e._zod.def;F(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},no=Symbol();function ro(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(ya(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),no):JSON.parse(o)}const io=(e,t,n,r)=>{let i=e._zod.def;F(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=ro(i.defaultValue,e,t,n,r);o!==no&&(n.default=o)},ao=(e,t,n,r)=>{let i=e._zod.def;F(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=ro(i.defaultValue,e,t,n,r);o!==no&&(n._prefault=o)},oo=(e,t,n,r)=>{let i=e._zod.def;F(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{ya(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},so=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;F(o,t,r);let s=t.seen.get(e);s.ref=o},co=(e,t,n,r)=>{let i=e._zod.def;F(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},lo=(e,t,n,r)=>{let i=e._zod.def;F(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},uo=new WeakSet([Object.prototype,Error.prototype]);function fo(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}const z=O(`ZodError`,(e,t)=>{xt.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);uo.has(n)||(uo.add(n),fo(n,`format`,e=>t=>wt(e,t)),fo(n,`flatten`,e=>t=>Ct(e,t)),fo(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,me,2)}),fo(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,me,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},void 0,{Parent:Error}),po=Et(z),mo=Dt(z),ho=Ot(z),go=At(z),_o=It(z),vo=Lt(z),yo=Rt(z),bo=zt(z),xo=Bt(z),So=Vt(z),Co=Ht(z),wo=Ut(z);function To(){A.localeError||j(_i())}function Eo(){A.memoizer||j({memoizer:mi()})}const B=O(`ZodType`,(e,t)=>(To(),N.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(x(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return S(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Ps(e,t))},superRefine(e,t){return this.check(Fs(e,t))},overwrite(e){return this.check(sa(e))},optional(){return gs(this)},exactOptional(){return vs(this)},nullable(){return bs(this)},nullish(){return gs(bs(this))},nonoptional(e){return Es(this,e)},array(){return is(this)},or(e){return cs([this,e])},and(e){return us(this,e)},transform(e){return As(this,ms(e))},default(e){return Ss(this,e)},prefault(e){return ws(this,e)},catch(e){return Os(this,e)},pipe(e){return As(this,e)},readonly(){return Ms(this)},describe(e){let t=this.clone();return xi.add(t,{description:e}),t},meta(...e){if(e.length===0)return xi.get(this);let t=this.clone();return xi.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return tt(this,`~standard`,{...In(this),jsonSchema:{input:Aa(this,`input`),output:Aa(this,`output`)}})},set"~standard"(e){E(this,`~standard`,e)},parse:function e(t,n){return po(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await mo(this,t,n,{callee:e})},safeParse(e,t){return ho(this,e,t)},async safeParseAsync(e,t){return go(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){E(this,`spa`,e)},validate(e,t){return Nt(this,e,t)},validateAsync(e,t){return Ft(this,e,t)},encode:function e(t,n){return _o(this,t,n,{callee:e})},decode:function e(t,n){return vo(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await yo(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await bo(this,t,n,{callee:e})},safeEncode(e,t){return xo(this,e,t)},safeDecode(e,t){return So(this,e,t)},async safeEncodeAsync(e,t){return Co(this,e,t)},async safeDecodeAsync(e,t){return wo(this,e,t)},toJSONSchema(e){return ka(this,{})(e)},get description(){return xi.get(this)?.description},get _def(){return this._zod.def}}),Do=O(`_ZodString`,(e,t)=>{Ln.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wa(e,t,n,r)},nt({format:e=>Ba(e).format??null,minLength:e=>Ba(e).minimum??null,maxLength:e=>Ba(e).maximum??null},{regex(...e){return this.check(ta(...e))},includes(...e){return this.check(ia(...e))},startsWith(...e){return this.check(aa(...e))},endsWith(...e){return this.check(oa(...e))},min(...e){return this.check($i(...e))},max(...e){return this.check(Qi(...e))},length(...e){return this.check(ea(...e))},nonempty(...e){return this.check($i(1,...e))},lowercase(e){return this.check(na(e))},uppercase(e){return this.check(ra(e))},trim(){return this.check(la())},normalize(...e){return this.check(ca(...e))},toLowerCase(){return this.check(ua())},toUpperCase(){return this.check(da())},slugify(){return this.check(fa())}})),Oo=O(`ZodString`,(e,t)=>{Ln.init(e,t),Do.init(e,t)},{email(e){return this.check(wi(Po,e))},url(e){return this.check(Ai(Lo,e))},jwt(e){return this.check(Gi(Qo,e))},emoji(e){return this.check(ji(Ro,e))},guid(e){return this.check(Ti(Fo,e))},uuid(e){return this.check(Ei(Io,e))},uuidv4(e){return this.check(Di(Io,e))},uuidv6(e){return this.check(Oi(Io,e))},uuidv7(e){return this.check(ki(Io,e))},nanoid(e){return this.check(Mi(zo,e))},cuid(e){return this.check(Ni(Bo,e))},cuid2(e){return this.check(Pi(Vo,e))},ulid(e){return this.check(Fi(Ho,e))},base64(e){return this.check(Hi(Yo,e))},base64url(e){return this.check(Ui(Xo,e))},xid(e){return this.check(Ii(Uo,e))},ksuid(e){return this.check(Li(Wo,e))},ipv4(e){return this.check(Ri(Go,e))},ipv6(e){return this.check(zi(Ko,e))},cidrv4(e){return this.check(Bi(qo,e))},cidrv6(e){return this.check(Vi(Jo,e))},e164(e){return this.check(Wi(Zo,e))},datetime(e){return this.check(Ki(Ao,e))},date(e){return this.check(qi(jo,e))},time(e){return this.check(Ji(Mo,e))},duration(e){return this.check(Yi(No,e))}});function ko(e){return Ci(Oo,e)}const V=O(`ZodStringFormat`,(e,t)=>{P.init(e,t),Do.init(e,t)}),Ao=O(`ZodISODateTime`,(e,t)=>{nr.init(e,t),V.init(e,t)}),jo=O(`ZodISODate`,(e,t)=>{rr.init(e,t),V.init(e,t)}),Mo=O(`ZodISOTime`,(e,t)=>{ir.init(e,t),V.init(e,t)}),No=O(`ZodISODuration`,(e,t)=>{ar.init(e,t),V.init(e,t)}),Po=O(`ZodEmail`,(e,t)=>{Bn.init(e,t),V.init(e,t)}),Fo=O(`ZodGUID`,(e,t)=>{Rn.init(e,t),V.init(e,t)}),Io=O(`ZodUUID`,(e,t)=>{zn.init(e,t),V.init(e,t)}),Lo=O(`ZodURL`,(e,t)=>{Jn.init(e,t),V.init(e,t)}),Ro=O(`ZodEmoji`,(e,t)=>{Yn.init(e,t),V.init(e,t)}),zo=O(`ZodNanoID`,(e,t)=>{Xn.init(e,t),V.init(e,t)}),Bo=O(`ZodCUID`,(e,t)=>{Zn.init(e,t),V.init(e,t)}),Vo=O(`ZodCUID2`,(e,t)=>{Qn.init(e,t),V.init(e,t)}),Ho=O(`ZodULID`,(e,t)=>{$n.init(e,t),V.init(e,t)}),Uo=O(`ZodXID`,(e,t)=>{er.init(e,t),V.init(e,t)}),Wo=O(`ZodKSUID`,(e,t)=>{tr.init(e,t),V.init(e,t)}),Go=O(`ZodIPv4`,(e,t)=>{or.init(e,t),V.init(e,t)}),Ko=O(`ZodIPv6`,(e,t)=>{lr.init(e,t),V.init(e,t)}),qo=O(`ZodCIDRv4`,(e,t)=>{ur.init(e,t),V.init(e,t)}),Jo=O(`ZodCIDRv6`,(e,t)=>{fr.init(e,t),V.init(e,t)}),Yo=O(`ZodBase64`,(e,t)=>{hr.init(e,t),V.init(e,t)}),Xo=O(`ZodBase64URL`,(e,t)=>{vr.init(e,t),V.init(e,t)}),Zo=O(`ZodE164`,(e,t)=>{yr.init(e,t),V.init(e,t)}),Qo=O(`ZodJWT`,(e,t)=>{xr.init(e,t),V.init(e,t)}),$o=O(`ZodUnknown`,(e,t)=>{Sr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function es(){return Xi($o)}const ts=O(`ZodNever`,(e,t)=>{Cr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ga(e,t,n,r)});function ns(e){return Zi(ts,e)}const rs=O(`ZodArray`,(e,t)=>{Eo(),Tr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ya(e,t,n,r),e.element=t.element},{min(e,t){return this.check($i(e,t))},nonempty(e){return this.check($i(1,e))},max(e,t){return this.check(Qi(e,t))},length(e,t){return this.check(ea(e,t))},unwrap(){return this.element}});function is(e,t){return pa(rs,e,t)}const as=O(`ZodObject`,(e,t)=>{Eo(),jr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Za(e,t,n,r),ct(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return fs(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(x(this._zod.def,{catchall:e}))},passthrough(){return this.clone(x(this._zod.def,{catchall:es()}))},loose(){return this.clone(x(this._zod.def,{catchall:es()}))},strict(){return this.clone(x(this._zod.def,{catchall:ns()}))},strip(){return this.clone(x(this._zod.def,{catchall:void 0}))},extend(e){return ze(this,e)},safeExtend(e){return Ve(this,e)},merge(e){return He(this,e)},pick(e){return Ie(this,e)},omit(e){return Re(this,e)},partial(...e){return Ue(hs,this,e[0])},exactPartial(...e){return Ue(_s,this,e[0],`exactPartial`)},required(...e){return We(Ts,this,e[0])}});function os(e,t){let n={type:`object`,shape:e??{},...C(t)};return new as(n)}const ss=O(`ZodUnion`,(e,t)=>{Nr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Qa(e,t,n,r),e.options=t.options});function cs(e,t){return new ss({type:`union`,options:e,...C(t)})}const ls=O(`ZodIntersection`,(e,t)=>{Pr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$a(e,t,n,r)});function us(e,t){return new ls({type:`intersection`,left:e,right:t})}const ds=O(`ZodEnum`,(e,t)=>{Lr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ka(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new ds({...t,checks:[],...C(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new ds({...t,checks:[],...C(r),entries:i})}});function fs(e,t){let n=Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e;return new ds({type:`enum`,entries:n,...C(t)})}const ps=O(`ZodTransform`,(e,t)=>{Eo(),Rr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ja(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new mt(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push($e(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push($e(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function ms(e){return new ps({type:`transform`,transform:e})}const hs=O(`ZodOptional`,(e,t)=>{Br.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>lo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function gs(e){return new hs({type:`optional`,innerType:e})}const _s=O(`ZodExactOptional`,(e,t)=>{Vr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>lo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function vs(e){return new _s({type:`optional`,innerType:e})}const ys=O(`ZodNullable`,(e,t)=>{Hr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function bs(e){return new ys({type:`nullable`,innerType:e})}const xs=O(`ZodDefault`,(e,t)=>{Ur.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>io(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Ss(e,t){return new xs({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ke(t)}})}const Cs=O(`ZodPrefault`,(e,t)=>{Gr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ao(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function ws(e,t){return new Cs({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ke(t)}})}const Ts=O(`ZodNonOptional`,(e,t)=>{Kr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>to(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Es(e,t){return new Ts({type:`nonoptional`,innerType:e,...C(t)})}const Ds=O(`ZodCatch`,(e,t)=>{Yr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>oo(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Os(e,t){return new Ds({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:lt(t)})}const ks=O(`ZodPipe`,(e,t)=>{Xr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>so(e,t,n,r),e.in=t.in,e.out=t.out});function As(e,t){return new ks({type:`pipe`,in:e,out:t})}const js=O(`ZodReadonly`,(e,t)=>{Qr.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>co(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ms(e){return new js({type:`readonly`,innerType:e})}const Ns=O(`ZodCustom`,(e,t)=>{ei.init(e,t),B.init(e,t),e._zod.processJSONSchema=(t,n,r)=>qa(e,t,n,r)});function Ps(e,t={}){return ma(Ns,e,t)}function Fs(e,t){return ha(e,t)}const Is=os({detail:ko()}),Ls=os({error:ko()});function Rs(e){if(!e)return`Unknown error`;if(e instanceof Error){let t=Is.safeParse(e.cause);return t.success?t.data.detail:zs(e.message)}if(typeof e==`object`){let t=Is.safeParse(e);if(t.success)return t.data.detail;let n=Ls.safeParse(e);if(n.success)return n.data.error}try{return JSON.stringify(e)}catch{return String(e)}}function zs(e){let t=Bs(e);if(!t)return e;let n=Is.safeParse(t);if(n.success)return n.data.detail;let r=Ls.safeParse(t);return r.success?r.data.error:e}function Bs(e){try{return JSON.parse(e)}catch{return e}}function Vs(e){return e.FS}const Hs=`notebook.py`,Us=`/marimo`,H={NOTEBOOK_FILENAME:Hs,HOME_DIR:Us,createHomeDir:e=>{let t=Vs(e);try{t.mkdirTree(Us)}catch{}t.chdir(Us)},mountFS:e=>{globalThis.origin!==`null`&&Vs(e).mount(e.FS.filesystems.IDBFS,{root:`.`},Us)},populateFilesToMemory:async e=>{await Ws(e,!0)},persistFilesToRemote:async e=>{await Ws(e,!1)},readNotebook:e=>{let t=Vs(e),n=`${Us}/${Hs}`;return le(t.readFile(n))},initNotebookCode:e=>{let{pyodide:t,filename:n,code:r}=e,i=Vs(t),a=e=>{try{return le(i.readFile(e))}catch{return null}};if(n&&n!==Hs){let e=a(n);if(e)return{code:e,filename:n}}return i.writeFile(Hs,r),{code:r,filename:Hs}}};function Ws(e,t){return new Promise((n,r)=>{Vs(e).syncfs(t,e=>{if(e instanceof Error){r(e);return}n()})})}var Gs=Object.defineProperty,U=(e,t)=>Gs(e,`name`,{value:t,configurable:!0}),Ks=(e=>typeof l<`u`?l:typeof Proxy<`u`?new Proxy(e,{get:(e,t)=>(typeof l<`u`?l:e)[t]}):e)(function(e){if(typeof l<`u`)return l.apply(this,arguments);throw Error(`Dynamic require of "`+e+`" is not supported`)}),qs=(()=>{for(var e=new Uint8Array(128),t=0;t<64;t++)e[t<26?t+65:t<52?t+71:t<62?t-4:t*4-205]=t;return t=>{for(var n=t.length,r=new Uint8Array((n-(t[n-1]==`=`)-(t[n-2]==`=`))*3/4|0),i=0,a=0;i<n;){var o=e[t.charCodeAt(i++)],s=e[t.charCodeAt(i++)],c=e[t.charCodeAt(i++)],l=e[t.charCodeAt(i++)];r[a++]=o<<2|s>>4,r[a++]=s<<4|c>>2,r[a++]=c<<6|l}return r}})();function Js(e){return!isNaN(parseFloat(e))&&isFinite(e)}U(Js,`_isNumber`);function W(e){return e.charAt(0).toUpperCase()+e.substring(1)}U(W,`_capitalize`);function Ys(e){return function(){return this[e]}}U(Ys,`_getter`);var G=[`isConstructor`,`isEval`,`isNative`,`isToplevel`],Xs=[`columnNumber`,`lineNumber`],Zs=[`fileName`,`functionName`,`source`],Qs=G.concat(Xs,Zs,[`args`],[`evalOrigin`]);function K(e){if(e)for(var t=0;t<Qs.length;t++)e[Qs[t]]!==void 0&&this[`set`+W(Qs[t])](e[Qs[t]])}for(U(K,`StackFrame`),K.prototype={getArgs:U(function(){return this.args},`getArgs`),setArgs:U(function(e){if(Object.prototype.toString.call(e)!==`[object Array]`)throw TypeError(`Args must be an Array`);this.args=e},`setArgs`),getEvalOrigin:U(function(){return this.evalOrigin},`getEvalOrigin`),setEvalOrigin:U(function(e){if(e instanceof K)this.evalOrigin=e;else if(e instanceof Object)this.evalOrigin=new K(e);else throw TypeError(`Eval Origin must be an Object or StackFrame`)},`setEvalOrigin`),toString:U(function(){var e=this.getFileName()||``,t=this.getLineNumber()||``,n=this.getColumnNumber()||``,r=this.getFunctionName()||``;return this.getIsEval()?e?`[eval] (`+e+`:`+t+`:`+n+`)`:`[eval]:`+t+`:`+n:r?r+` (`+e+`:`+t+`:`+n+`)`:e+`:`+t+`:`+n},`toString`)},K.fromString=U(function(e){var t=e.indexOf(`(`),n=e.lastIndexOf(`)`),r=e.substring(0,t),i=e.substring(t+1,n).split(`,`),a=e.substring(n+1);if(a.indexOf(`@`)===0)var o=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(a,``),s=o[1],c=o[2],l=o[3];return new K({functionName:r,args:i||void 0,fileName:s,lineNumber:c||void 0,columnNumber:l||void 0})},`StackFrame$$fromString`),q=0;q<G.length;q++)K.prototype[`get`+W(G[q])]=Ys(G[q]),K.prototype[`set`+W(G[q])]=function(e){return function(t){this[e]=!!t}}(G[q]);var q;for(J=0;J<Xs.length;J++)K.prototype[`get`+W(Xs[J])]=Ys(Xs[J]),K.prototype[`set`+W(Xs[J])]=function(e){return function(t){if(!Js(t))throw TypeError(e+` must be a Number`);this[e]=Number(t)}}(Xs[J]);var J;for(Y=0;Y<Zs.length;Y++)K.prototype[`get`+W(Zs[Y])]=Ys(Zs[Y]),K.prototype[`set`+W(Zs[Y])]=function(e){return function(t){this[e]=String(t)}}(Zs[Y]);var Y,$s=K;function ec(){var e=/^\s*at .*(\S+:\d+|\(native\))/m,t=/^(eval@)?(\[native code])?$/;return{parse:U(function(t){if(t.stack&&t.stack.match(e))return this.parseV8OrIE(t);if(t.stack)return this.parseFFOrSafari(t);throw Error(`Cannot parse given Error object`)},`ErrorStackParser$$parse`),extractLocation:U(function(e){if(e.indexOf(`:`)===-1)return[e];var t=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(e.replace(/[()]/g,``));return[t[1],t[2]||void 0,t[3]||void 0]},`ErrorStackParser$$extractLocation`),parseV8OrIE:U(function(t){return t.stack.split(`
|
|
56
56
|
`).filter(function(t){return!!t.match(e)},this).map(function(e){e.indexOf(`(eval `)>-1&&(e=e.replace(/eval code/g,`eval`).replace(/(\(eval at [^()]*)|(,.*$)/g,``));var t=e.replace(/^\s+/,``).replace(/\(eval code/g,`(`).replace(/^.*?\s+/,``),n=t.match(/ (\(.+\)$)/);t=n?t.replace(n[0],``):t;var r=this.extractLocation(n?n[1]:t);return new $s({functionName:n&&t||void 0,fileName:[`eval`,`<anonymous>`].indexOf(r[0])>-1?void 0:r[0],lineNumber:r[1],columnNumber:r[2],source:e})},this)},`ErrorStackParser$$parseV8OrIE`),parseFFOrSafari:U(function(e){return e.stack.split(`
|
|
57
|
-
`).filter(function(e){return!e.match(t)},this).map(function(e){if(e.indexOf(` > eval`)>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,`:$1`)),e.indexOf(`@`)===-1&&e.indexOf(`:`)===-1)return new $s({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),r=n&&n[1]?n[1]:void 0,i=this.extractLocation(e.replace(t,``));return new $s({functionName:r,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:e})},this)},`ErrorStackParser$$parseFFOrSafari`)}}U(ec,`ErrorStackParser`);var tc=new ec;function nc(){return typeof API<`u`&&API!==globalThis.API?API.runtimeEnv:rc({IN_BUN:typeof Bun<`u`,IN_DENO:typeof Deno<`u`,IN_NODE:typeof process==`object`&&typeof process.versions==`object`&&typeof process.versions.node==`string`&&!process.browser,IN_SAFARI:typeof navigator==`object`&&typeof navigator.userAgent==`string`&&navigator.userAgent.indexOf(`Chrome`)===-1&&navigator.userAgent.indexOf(`Safari`)>-1,IN_SHELL:typeof read==`function`&&typeof load==`function`,IN_WORKERD:typeof navigator==`object`&&navigator.userAgent?.includes(`Cloudflare-Workers`)})}U(nc,`getGlobalRuntimeEnv`);var X=nc();function rc(e){let t=e.IN_NODE&&typeof module<`u`&&module.exports&&typeof Ks==`function`&&typeof __dirname==`string`,n=e.IN_NODE&&!t,r=!e.IN_NODE&&!e.IN_DENO&&!e.IN_BUN,i=r&&typeof window<`u`&&typeof window.document<`u`&&typeof document.createElement==`function`&&`sessionStorage`in window&&typeof globalThis.importScripts!=`function`,a=r&&typeof globalThis.WorkerGlobalScope<`u`&&typeof globalThis.self<`u`&&globalThis.self instanceof globalThis.WorkerGlobalScope;if(a&&ic())throw Error(`Classic web workers are not supported`);let o={...e,IN_BROWSER:r,IN_BROWSER_MAIN_THREAD:i,IN_BROWSER_WEB_WORKER:a,IN_NODE_COMMONJS:t,IN_NODE_ESM:n};if(!(o.IN_BROWSER_MAIN_THREAD||o.IN_BROWSER_WEB_WORKER||o.IN_NODE||o.IN_SHELL||o.IN_WORKERD))throw Error(`Cannot determine runtime environment: ${JSON.stringify(o)}`);return o}U(rc,`calculateDerivedFlags`);function ic(){try{return globalThis.importScripts(`data:text/javascript,`),!0}catch{return!1}}U(ic,`isClassicWorker`);var ac,oc,sc,cc;async function lc(){if(!X.IN_NODE||(ac=(await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1))).default,sc=await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1)),cc=await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1)),(await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1))).default,oc=await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1)),pc=oc.sep,typeof Ks<`u`))return;let e={fs:sc,crypto:await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1)),ws:await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1)),child_process:await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1))};globalThis.require=function(t){return e[t]}}U(lc,`initNodeModules`);function uc(e,t){return oc.resolve(t||`.`,e)}U(uc,`node_resolvePath`);function dc(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}U(dc,`browser_resolvePath`);var fc=X.IN_NODE?uc:X.IN_SHELL?U(e=>e,`resolvePath`):dc,pc;X.IN_NODE||(pc=`/`);function mc(e,t){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?{response:fetch(e)}:{binary:cc.readFile(e).then(e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}}U(mc,`node_getBinaryResponse`);function hc(e,t){if(e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`))throw Error(`Shell cannot fetch urls`);return{binary:Promise.resolve(new Uint8Array(readbuffer(e)))}}U(hc,`shell_getBinaryResponse`);function gc(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}U(gc,`browser_getBinaryResponse`);var _c=X.IN_NODE?mc:X.IN_SHELL?hc:gc;async function vc(e,t){let{response:n,binary:r}=_c(e,t);if(r)return r;let i=await n;if(!i.ok)throw Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await i.arrayBuffer())}U(vc,`loadBinaryFile`);var yc=X.IN_NODE?bc:U(async e=>await import(e),`loadScript`);async function bc(e){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?await import(e):await import(ac.pathToFileURL(e).href)}U(bc,`nodeLoadScript`);async function xc(e){if(X.IN_NODE){await lc();let t=await cc.readFile(e,{encoding:`utf8`});return JSON.parse(t)}if(X.IN_SHELL){let t=read(e);return JSON.parse(t)}return await(await fetch(e)).json()}U(xc,`loadLockFile`);async function Sc(){if(X.IN_NODE_COMMONJS)return __dirname;let e;try{throw Error()}catch(t){e=t}let t=tc.parse(e)[0].fileName;if(X.IN_NODE&&!t.startsWith(`file://`)&&(t=`file://${t}`),X.IN_NODE_ESM){let e=await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1));return(await import(`./__vite-browser-external-FeDVGZU8.js`).then(e=>c(e.default,1))).fileURLToPath(e.dirname(t))}let n=t.lastIndexOf(pc);if(n===-1)throw Error(`Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.`);return t.slice(0,n)}U(Sc,`calculateDirname`);function Cc(e){return e.substring(0,e.lastIndexOf(`/`)+1)||globalThis.location?.toString()||`.`}U(Cc,`calculateInstallBaseUrl`);function wc(e){let t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,i={DIR_MODE:16895,FILE_MODE:33279,mount:U(function(e){if(!e.opts.fileSystemHandle)throw Error(`opts.fileSystemHandle is required`);return n.mount.apply(null,arguments)},`mount`),syncfs:U(async(e,t,n)=>{try{let r=i.getLocalSet(e),a=await i.getRemoteSet(e),o=t?a:r,s=t?r:a;await i.reconcile(e,o,s),n(null)}catch(e){n(e)}},`syncfs`),getLocalSet:U(e=>{let n=Object.create(null);function i(e){return e!==`.`&&e!==`..`}U(i,`isRealDir`);function a(e){return t=>r.join2(e,t)}U(a,`toAbsolute`);let o=t.readdir(e.mountpoint).filter(i).map(a(e.mountpoint));for(;o.length;){let e=o.pop(),r=t.stat(e);t.isDir(r.mode)&&o.push.apply(o,t.readdir(e).filter(i).map(a(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:`local`,entries:n}},`getLocalSet`),getRemoteSet:U(async e=>{let t=Object.create(null),n=await Tc(e.opts.fileSystemHandle);for(let[a,o]of n)a!==`.`&&(t[r.join2(e.mountpoint,a)]={timestamp:o.kind===`file`?new Date((await o.getFile()).lastModified):new Date,mode:o.kind===`file`?i.FILE_MODE:i.DIR_MODE});return{type:`remote`,entries:t,handles:n}},`getRemoteSet`),loadLocalEntry:U(e=>{let r=t.lookupPath(e,{}).node,i=t.stat(e);if(t.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(t.isFile(i.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:i.mtime,mode:i.mode,contents:r.contents};throw Error(`node type not supported`)},`loadLocalEntry`),storeLocalEntry:U((e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else if(t.isFile(n.mode))t.writeFile(e,n.contents,{canOwn:!0});else throw Error(`node type not supported`);t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},`storeLocalEntry`),removeLocalEntry:U(e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},`removeLocalEntry`),loadRemoteEntry:U(async e=>{if(e.kind===`file`){let t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:i.FILE_MODE,timestamp:new Date(t.lastModified)}}if(e.kind===`directory`)return{mode:i.DIR_MODE,timestamp:new Date};throw Error(`unknown kind: `+e.kind)},`loadRemoteEntry`),storeRemoteEntry:U(async(e,n,i)=>{let a=e.get(r.dirname(n)),o=t.isFile(i.mode)?await a.getFileHandle(r.basename(n),{create:!0}):await a.getDirectoryHandle(r.basename(n),{create:!0});if(o.kind===`file`){let e=await o.createWritable();await e.write(i.contents),await e.close()}e.set(n,o)},`storeRemoteEntry`),removeRemoteEntry:U(async(e,t)=>{await e.get(r.dirname(t)).removeEntry(r.basename(t)),e.delete(t)},`removeRemoteEntry`),reconcile:U(async(e,n,a)=>{let o=0,s=[];Object.keys(n.entries).forEach(function(e){let r=n.entries[e],i=a.entries[e];(!i||t.isFile(r.mode)&&r.timestamp.getTime()>i.timestamp.getTime())&&(s.push(e),o++)}),s.sort();let c=[];if(Object.keys(a.entries).forEach(function(e){n.entries[e]||(c.push(e),o++)}),c.sort().reverse(),!o)return;let l=n.type===`remote`?n.handles:a.handles;for(let t of s){let n=r.normalize(t.replace(e.mountpoint,`/`)).substring(1);if(a.type===`local`){let e=l.get(n),r=await i.loadRemoteEntry(e);i.storeLocalEntry(t,r)}else{let e=i.loadLocalEntry(t);await i.storeRemoteEntry(l,n,e)}}for(let t of c)if(a.type===`local`)i.removeLocalEntry(t);else{let n=r.normalize(t.replace(e.mountpoint,`/`)).substring(1);await i.removeRemoteEntry(l,n)}},`reconcile`)};e.FS.filesystems.NATIVEFS_ASYNC=i}U(wc,`initializeNativeFS`);var Tc=U(async e=>{let t=[];async function n(e){for await(let r of e.values())t.push(r),r.kind===`directory`&&await n(r)}U(n,`collect`),await n(e);let r=new Map;r.set(`.`,e);for(let n of t){let t=(await e.resolve(n)).join(`/`);r.set(t,n)}return r},`getFsHandles`),Ec=qs(`AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECBygCE0pzdl9HZXRFcnJvcl9pbXBvcnQAAA5Kc3ZFcnJvcl9DaGVjawABChMCBwD7AQD7GwsJACAA+xr7FAAL`),Dc=async function(){if(!(globalThis.navigator&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform===`MacIntel`&&typeof navigator.maxTouchPoints<`u`&&navigator.maxTouchPoints>1)))try{let e=await WebAssembly.compile(Ec);return await WebAssembly.instantiate(e)}catch(e){if(e instanceof WebAssembly.CompileError)return;throw e}}();async function Oc(){let e=await Dc;if(e)return e.exports;let t=Symbol(`error marker`);return{Jsv_GetError_import:U(()=>t,`Jsv_GetError_import`),JsvError_Check:U(e=>e===t,`JsvError_Check`)}}U(Oc,`getJsvErrorImport`);function kc(e){let t={config:e,runtimeEnv:X},n={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:Fc(e),print:e.stdout,printErr:e.stderr,onExit(e){n.exitCode=e},thisProgram:e._sysExecutable,arguments:e.args,API:t,locateFile:U(t=>e.indexURL+t,`locateFile`),instantiateWasm:Ic(e.indexURL)};return n}U(kc,`createSettings`);function Ac(e){return function(t){try{t.FS.mkdirTree(e)}catch(t){console.error(`Error occurred while making a home directory '${e}':`),console.error(t),console.error(`Using '/' for a home directory instead`),e=`/`}t.FS.chdir(e)}}U(Ac,`createHomeDirectory`);function jc(e){return function(t){Object.assign(t.ENV,e)}}U(jc,`setEnvironment`);function Mc(e){return e?[async t=>{t.addRunDependency(`fsInitHook`);try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency(`fsInitHook`)}}]:[]}U(Mc,`callFsInitHook`);function Nc(e){let t=e.HEAPU32[e._Py_Version>>>2];return[t>>>24&255,t>>>16&255,t>>>8&255]}U(Nc,`computeVersionTuple`);function Pc(e){let t=vc(e);return async e=>{e.API.pyVersionTuple=Nc(e);let[n,r]=e.API.pyVersionTuple;e.FS.mkdirTree(`/lib`),e.API.sitePackages=`/lib/python${n}.${r}/site-packages`,e.FS.mkdirTree(e.API.sitePackages),e.addRunDependency(`install-stdlib`);try{let i=await t;e.FS.writeFile(`/lib/python${n}${r}.zip`,i)}catch(e){console.error(`Error occurred while installing the standard library:`),console.error(e)}finally{e.removeRunDependency(`install-stdlib`)}}}U(Pc,`installStdlib`);function Fc(e){let t;return t=e.stdLibURL==null?e.indexURL+`python_stdlib.zip`:e.stdLibURL,[Pc(t),Ac(e.env.HOME),jc(e.env),wc,...Mc(e.fsInit)]}U(Fc,`getFileSystemInitializationFuncs`);function Ic(e){if(typeof WasmOffsetConverter<`u`)return;let{binary:t,response:n}=_c(e+`pyodide.asm.wasm`),r=Oc();return function(e,i){return async function(){let{Jsv_GetError_import:a,JsvError_Check:o}=await r;e.env.Jsv_GetError_import=a,e.env.JsvError_Check=o;try{let r;r=n?await WebAssembly.instantiateStreaming(n,e):await WebAssembly.instantiate(await t,e);let{instance:a,module:o}=r;i(a,o)}catch(e){console.warn(`wasm instantiation failed!`),console.warn(e)}}(),{}}}U(Ic,`getInstantiateWasmFunc`);var Lc=`314.0.0`;function Rc(e){return e===void 0||e.endsWith(`/`)?e:e+`/`}U(Rc,`withTrailingSlash`);var zc=Lc;async function Bc(e={}){if(await lc(),e.lockFileContents&&e.lockFileURL)throw Error(`Can't pass both lockFileContents and lockFileURL`);let t=e.indexURL||await Sc();if(t=Rc(fc(t)),e.packageBaseUrl=Rc(e.packageBaseUrl),e.cdnUrl=Rc(e.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v314.0.0/full/`),!e.lockFileContents){let n=e.lockFileURL??t+`pyodide-lock.json`;e.lockFileContents=xc(n),e.packageBaseUrl??=Cc(n)}e.indexURL=t,e.packageCacheDir&&=Rc(fc(e.packageCacheDir));let n={jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:e.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:`2ff9f3fe6c88624a7e283d5651688da7f6169834ab51663b07be67c0bd43e53e`},r=Object.assign(n,e);return r.env.HOME??=`/home/pyodide`,r.env.PYTHONINSPECT??=`1`,r}U(Bc,`initializeConfiguration`);function Vc(e){let t=kc(e),n=t.API;return n.lockFilePromise=Promise.resolve(e.lockFileContents),t}U(Vc,`createEmscriptenSettings`);async function Hc(e){return e.createPyodideModule?e.createPyodideModule:(await yc(`${e.indexURL}pyodide.asm.mjs`)).default}U(Hc,`loadWasmScript`);async function Uc(e,t){if(!e._loadSnapshot)return;let n=await e._loadSnapshot,r=ArrayBuffer.isView(n)?n:new Uint8Array(n);return t.noInitialRun=!0,t.INITIAL_MEMORY=r.length,r}U(Uc,`prepareSnapshot`);async function Wc(e,t){let n=await e(t);if(t.exitCode!==void 0)throw new n.ExitStatus(t.exitCode);return n}U(Wc,`instantiatePyodideModule`);function Gc(e,t){let n=e.API;if(t.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),t.convertNullToNone&&n.setCompatNullToNone(!0),t.toJsLiteralMap&&n.setCompatToJsLiteralMap(!0),n.version!==`314.0.0`&&t.checkAPIVersion)throw Error(`Pyodide version does not match: '${zc}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);e.locateFile=e=>{throw e.endsWith(`.so`)?Error(`Failed to find dynamic library "${e}"`):Error(`Unexpected call to locateFile("${e}")`)}}U(Gc,`configureAPI`);function Kc(e,t,n){let r=e.API,i;return t&&(i=r.restoreSnapshot(t)),r.finalizeBootstrap(i,n._snapshotDeserializer)}U(Kc,`bootstrapPyodide`);async function qc(e,t){let n=e._api;return n.sys.path.insert(0,``),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(t.stdin,t.stdout,t.stderr),e}U(qc,`finalizeSetup`);async function Jc(e={}){let t=await Bc(e),n=Vc(t),r=await Hc(t),i=await Uc(t,n),a=await Wc(r,n);return Gc(a,t),await qc(Kc(a,i,t),t)}U(Jc,`loadPyodide`);function Yc(e){return`marimo-base`}const Z=new class{spans=[];startSpan(e,t={}){let n={name:e,startTime:Date.now(),attributes:t,end:(e=`ok`)=>this.endSpan(n,e)};return this.spans.push(n),n}endSpan(e,t=`ok`){e.endTime=Date.now(),e.status=t}getSpans(){return this.spans}wrap(e,t,n={}){let r=this.startSpan(t||e.name,n);try{let t=e();return this.endSpan(r),t}catch(e){throw this.endSpan(r,`error`),e}}wrapAsync(e,t,n={}){return(async(...r)=>{let i=this.startSpan(t||e.name,n);try{let t=await e(...r);return this.endSpan(i),t}catch(e){throw this.endSpan(i,`error`),e}})}logSpans(){}};globalThis.t=Z;const Xc=/(^|\n)\s*(?:import\s+[^\n#]*\bduckdb\b|from\s+duckdb\b|[^\n#]*\bduckdb\s*\.)/;function Zc(e,t){return e.includes(`mo.sql`)||Xc.test(e)||t?.has(`duckdb`)===!0}function Qc(e){return e.trim().split(/[[<>=!~;@\s]/)[0]}var $c=class{pyodide=null;packageLoadQueue=Promise.resolve();sessionGeneration=0;activeSessionStops=new Set;get requirePyodide(){return g(this.pyodide,`Pyodide not loaded`),this.pyodide}async bootstrap(e){return await this.loadPyodideAndPackages(e)}async loadPyodideAndPackages(e){if(!Jc)throw Error(`loadPyodide is not defined`);let t=Z.startSpan(`loadPyodide`);try{let n=e.pyodideIndexUrl??`https://cdn.jsdelivr.net/pyodide/${e.pyodideVersion}/full/`,r=await Jc({packages:[`micropip`,`msgspec`,Yc(e.version),`Markdown`,`pymdown-extensions`,`narwhals`,`packaging`],_makeSnapshot:!1,lockFileURL:e.pyodideLockfileUrl??`https://wasm.marimo.app/pyodide-lock.json?v=${e.version}&pyodide=${e.pyodideVersion}`,indexURL:n,packageBaseUrl:n,convertNullToNone:!0});if(e.pypiIndexUrl){let t=r.pyimport(`micropip`);try{t.set_index_urls(e.pypiIndexUrl)}finally{t.destroy()}}return this.pyodide=r,t.end(`ok`),r}catch(e){throw _.error(`Failed to load Pyodide`,e),e}}async mountFilesystem(e){let t=Z.startSpan(`mountFilesystem`);return H.createHomeDir(this.requirePyodide),H.mountFS(this.requirePyodide),await H.populateFilesToMemory(this.requirePyodide),t.end(`ok`),H.initNotebookCode({pyodide:this.requirePyodide,code:e.code,filename:e.filename})}async startSession(e){let t=this.sessionGeneration,{code:n,filename:r,onMessage:i,queryParameters:a,userConfig:o}=e;self.messenger={callback:i},self.query_params=a,self.user_config=o;let s=Z.startSpan(`startSession.runPython`),c=r||H.NOTEBOOK_FILENAME,l=this.requirePyodide.runPython(`
|
|
57
|
+
`).filter(function(e){return!e.match(t)},this).map(function(e){if(e.indexOf(` > eval`)>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,`:$1`)),e.indexOf(`@`)===-1&&e.indexOf(`:`)===-1)return new $s({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),r=n&&n[1]?n[1]:void 0,i=this.extractLocation(e.replace(t,``));return new $s({functionName:r,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:e})},this)},`ErrorStackParser$$parseFFOrSafari`)}}U(ec,`ErrorStackParser`);var tc=new ec;function nc(){return typeof API<`u`&&API!==globalThis.API?API.runtimeEnv:rc({IN_BUN:typeof Bun<`u`,IN_DENO:typeof Deno<`u`,IN_NODE:typeof process==`object`&&typeof process.versions==`object`&&typeof process.versions.node==`string`&&!process.browser,IN_SAFARI:typeof navigator==`object`&&typeof navigator.userAgent==`string`&&navigator.userAgent.indexOf(`Chrome`)===-1&&navigator.userAgent.indexOf(`Safari`)>-1,IN_SHELL:typeof read==`function`&&typeof load==`function`,IN_WORKERD:typeof navigator==`object`&&navigator.userAgent?.includes(`Cloudflare-Workers`)})}U(nc,`getGlobalRuntimeEnv`);var X=nc();function rc(e){let t=e.IN_NODE&&typeof module<`u`&&module.exports&&typeof Ks==`function`&&typeof __dirname==`string`,n=e.IN_NODE&&!t,r=!e.IN_NODE&&!e.IN_DENO&&!e.IN_BUN,i=r&&typeof window<`u`&&typeof window.document<`u`&&typeof document.createElement==`function`&&`sessionStorage`in window&&typeof globalThis.importScripts!=`function`,a=r&&typeof globalThis.WorkerGlobalScope<`u`&&typeof globalThis.self<`u`&&globalThis.self instanceof globalThis.WorkerGlobalScope;if(a&&ic())throw Error(`Classic web workers are not supported`);let o={...e,IN_BROWSER:r,IN_BROWSER_MAIN_THREAD:i,IN_BROWSER_WEB_WORKER:a,IN_NODE_COMMONJS:t,IN_NODE_ESM:n};if(!(o.IN_BROWSER_MAIN_THREAD||o.IN_BROWSER_WEB_WORKER||o.IN_NODE||o.IN_SHELL||o.IN_WORKERD))throw Error(`Cannot determine runtime environment: ${JSON.stringify(o)}`);return o}U(rc,`calculateDerivedFlags`);function ic(){try{return globalThis.importScripts(`data:text/javascript,`),!0}catch{return!1}}U(ic,`isClassicWorker`);var ac,oc,sc,cc;async function lc(){if(!X.IN_NODE||(ac=(await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1))).default,sc=await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1)),cc=await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1)),(await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1))).default,oc=await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1)),pc=oc.sep,typeof Ks<`u`))return;let e={fs:sc,crypto:await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1)),ws:await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1)),child_process:await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1))};globalThis.require=function(t){return e[t]}}U(lc,`initNodeModules`);function uc(e,t){return oc.resolve(t||`.`,e)}U(uc,`node_resolvePath`);function dc(e,t){return t===void 0&&(t=location),new URL(e,t).toString()}U(dc,`browser_resolvePath`);var fc=X.IN_NODE?uc:X.IN_SHELL?U(e=>e,`resolvePath`):dc,pc;X.IN_NODE||(pc=`/`);function mc(e,t){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?{response:fetch(e)}:{binary:cc.readFile(e).then(e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}}U(mc,`node_getBinaryResponse`);function hc(e,t){if(e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`))throw Error(`Shell cannot fetch urls`);return{binary:Promise.resolve(new Uint8Array(readbuffer(e)))}}U(hc,`shell_getBinaryResponse`);function gc(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}U(gc,`browser_getBinaryResponse`);var _c=X.IN_NODE?mc:X.IN_SHELL?hc:gc;async function vc(e,t){let{response:n,binary:r}=_c(e,t);if(r)return r;let i=await n;if(!i.ok)throw Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await i.arrayBuffer())}U(vc,`loadBinaryFile`);var yc=X.IN_NODE?bc:U(async e=>await import(e),`loadScript`);async function bc(e){return e.startsWith(`file://`)&&(e=e.slice(7)),e.includes(`://`)?await import(e):await import(ac.pathToFileURL(e).href)}U(bc,`nodeLoadScript`);async function xc(e){if(X.IN_NODE){await lc();let t=await cc.readFile(e,{encoding:`utf8`});return JSON.parse(t)}if(X.IN_SHELL){let t=read(e);return JSON.parse(t)}return await(await fetch(e)).json()}U(xc,`loadLockFile`);async function Sc(){if(X.IN_NODE_COMMONJS)return __dirname;let e;try{throw Error()}catch(t){e=t}let t=tc.parse(e)[0].fileName;if(X.IN_NODE&&!t.startsWith(`file://`)&&(t=`file://${t}`),X.IN_NODE_ESM){let e=await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1));return(await import(`./__vite-browser-external-mKcnhO20.js`).then(e=>c(e.default,1))).fileURLToPath(e.dirname(t))}let n=t.lastIndexOf(pc);if(n===-1)throw Error(`Could not extract indexURL path from pyodide module location. Please pass the indexURL explicitly to loadPyodide.`);return t.slice(0,n)}U(Sc,`calculateDirname`);function Cc(e){return e.substring(0,e.lastIndexOf(`/`)+1)||globalThis.location?.toString()||`.`}U(Cc,`calculateInstallBaseUrl`);function wc(e){let t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,i={DIR_MODE:16895,FILE_MODE:33279,mount:U(function(e){if(!e.opts.fileSystemHandle)throw Error(`opts.fileSystemHandle is required`);return n.mount.apply(null,arguments)},`mount`),syncfs:U(async(e,t,n)=>{try{let r=i.getLocalSet(e),a=await i.getRemoteSet(e),o=t?a:r,s=t?r:a;await i.reconcile(e,o,s),n(null)}catch(e){n(e)}},`syncfs`),getLocalSet:U(e=>{let n=Object.create(null);function i(e){return e!==`.`&&e!==`..`}U(i,`isRealDir`);function a(e){return t=>r.join2(e,t)}U(a,`toAbsolute`);let o=t.readdir(e.mountpoint).filter(i).map(a(e.mountpoint));for(;o.length;){let e=o.pop(),r=t.stat(e);t.isDir(r.mode)&&o.push.apply(o,t.readdir(e).filter(i).map(a(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:`local`,entries:n}},`getLocalSet`),getRemoteSet:U(async e=>{let t=Object.create(null),n=await Tc(e.opts.fileSystemHandle);for(let[a,o]of n)a!==`.`&&(t[r.join2(e.mountpoint,a)]={timestamp:o.kind===`file`?new Date((await o.getFile()).lastModified):new Date,mode:o.kind===`file`?i.FILE_MODE:i.DIR_MODE});return{type:`remote`,entries:t,handles:n}},`getRemoteSet`),loadLocalEntry:U(e=>{let r=t.lookupPath(e,{}).node,i=t.stat(e);if(t.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(t.isFile(i.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:i.mtime,mode:i.mode,contents:r.contents};throw Error(`node type not supported`)},`loadLocalEntry`),storeLocalEntry:U((e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else if(t.isFile(n.mode))t.writeFile(e,n.contents,{canOwn:!0});else throw Error(`node type not supported`);t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},`storeLocalEntry`),removeLocalEntry:U(e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},`removeLocalEntry`),loadRemoteEntry:U(async e=>{if(e.kind===`file`){let t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:i.FILE_MODE,timestamp:new Date(t.lastModified)}}if(e.kind===`directory`)return{mode:i.DIR_MODE,timestamp:new Date};throw Error(`unknown kind: `+e.kind)},`loadRemoteEntry`),storeRemoteEntry:U(async(e,n,i)=>{let a=e.get(r.dirname(n)),o=t.isFile(i.mode)?await a.getFileHandle(r.basename(n),{create:!0}):await a.getDirectoryHandle(r.basename(n),{create:!0});if(o.kind===`file`){let e=await o.createWritable();await e.write(i.contents),await e.close()}e.set(n,o)},`storeRemoteEntry`),removeRemoteEntry:U(async(e,t)=>{await e.get(r.dirname(t)).removeEntry(r.basename(t)),e.delete(t)},`removeRemoteEntry`),reconcile:U(async(e,n,a)=>{let o=0,s=[];Object.keys(n.entries).forEach(function(e){let r=n.entries[e],i=a.entries[e];(!i||t.isFile(r.mode)&&r.timestamp.getTime()>i.timestamp.getTime())&&(s.push(e),o++)}),s.sort();let c=[];if(Object.keys(a.entries).forEach(function(e){n.entries[e]||(c.push(e),o++)}),c.sort().reverse(),!o)return;let l=n.type===`remote`?n.handles:a.handles;for(let t of s){let n=r.normalize(t.replace(e.mountpoint,`/`)).substring(1);if(a.type===`local`){let e=l.get(n),r=await i.loadRemoteEntry(e);i.storeLocalEntry(t,r)}else{let e=i.loadLocalEntry(t);await i.storeRemoteEntry(l,n,e)}}for(let t of c)if(a.type===`local`)i.removeLocalEntry(t);else{let n=r.normalize(t.replace(e.mountpoint,`/`)).substring(1);await i.removeRemoteEntry(l,n)}},`reconcile`)};e.FS.filesystems.NATIVEFS_ASYNC=i}U(wc,`initializeNativeFS`);var Tc=U(async e=>{let t=[];async function n(e){for await(let r of e.values())t.push(r),r.kind===`directory`&&await n(r)}U(n,`collect`),await n(e);let r=new Map;r.set(`.`,e);for(let n of t){let t=(await e.resolve(n)).join(`/`);r.set(t,n)}return r},`getFsHandles`),Ec=qs(`AGFzbQEAAAABDANfAGAAAW9gAW8BfwMDAgECBygCE0pzdl9HZXRFcnJvcl9pbXBvcnQAAA5Kc3ZFcnJvcl9DaGVjawABChMCBwD7AQD7GwsJACAA+xr7FAAL`),Dc=async function(){if(!(globalThis.navigator&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform===`MacIntel`&&typeof navigator.maxTouchPoints<`u`&&navigator.maxTouchPoints>1)))try{let e=await WebAssembly.compile(Ec);return await WebAssembly.instantiate(e)}catch(e){if(e instanceof WebAssembly.CompileError)return;throw e}}();async function Oc(){let e=await Dc;if(e)return e.exports;let t=Symbol(`error marker`);return{Jsv_GetError_import:U(()=>t,`Jsv_GetError_import`),JsvError_Check:U(e=>e===t,`JsvError_Check`)}}U(Oc,`getJsvErrorImport`);function kc(e){let t={config:e,runtimeEnv:X},n={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:Fc(e),print:e.stdout,printErr:e.stderr,onExit(e){n.exitCode=e},thisProgram:e._sysExecutable,arguments:e.args,API:t,locateFile:U(t=>e.indexURL+t,`locateFile`),instantiateWasm:Ic(e.indexURL)};return n}U(kc,`createSettings`);function Ac(e){return function(t){try{t.FS.mkdirTree(e)}catch(t){console.error(`Error occurred while making a home directory '${e}':`),console.error(t),console.error(`Using '/' for a home directory instead`),e=`/`}t.FS.chdir(e)}}U(Ac,`createHomeDirectory`);function jc(e){return function(t){Object.assign(t.ENV,e)}}U(jc,`setEnvironment`);function Mc(e){return e?[async t=>{t.addRunDependency(`fsInitHook`);try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency(`fsInitHook`)}}]:[]}U(Mc,`callFsInitHook`);function Nc(e){let t=e.HEAPU32[e._Py_Version>>>2];return[t>>>24&255,t>>>16&255,t>>>8&255]}U(Nc,`computeVersionTuple`);function Pc(e){let t=vc(e);return async e=>{e.API.pyVersionTuple=Nc(e);let[n,r]=e.API.pyVersionTuple;e.FS.mkdirTree(`/lib`),e.API.sitePackages=`/lib/python${n}.${r}/site-packages`,e.FS.mkdirTree(e.API.sitePackages),e.addRunDependency(`install-stdlib`);try{let i=await t;e.FS.writeFile(`/lib/python${n}${r}.zip`,i)}catch(e){console.error(`Error occurred while installing the standard library:`),console.error(e)}finally{e.removeRunDependency(`install-stdlib`)}}}U(Pc,`installStdlib`);function Fc(e){let t;return t=e.stdLibURL==null?e.indexURL+`python_stdlib.zip`:e.stdLibURL,[Pc(t),Ac(e.env.HOME),jc(e.env),wc,...Mc(e.fsInit)]}U(Fc,`getFileSystemInitializationFuncs`);function Ic(e){if(typeof WasmOffsetConverter<`u`)return;let{binary:t,response:n}=_c(e+`pyodide.asm.wasm`),r=Oc();return function(e,i){return async function(){let{Jsv_GetError_import:a,JsvError_Check:o}=await r;e.env.Jsv_GetError_import=a,e.env.JsvError_Check=o;try{let r;r=n?await WebAssembly.instantiateStreaming(n,e):await WebAssembly.instantiate(await t,e);let{instance:a,module:o}=r;i(a,o)}catch(e){console.warn(`wasm instantiation failed!`),console.warn(e)}}(),{}}}U(Ic,`getInstantiateWasmFunc`);var Lc=`314.0.0`;function Rc(e){return e===void 0||e.endsWith(`/`)?e:e+`/`}U(Rc,`withTrailingSlash`);var zc=Lc;async function Bc(e={}){if(await lc(),e.lockFileContents&&e.lockFileURL)throw Error(`Can't pass both lockFileContents and lockFileURL`);let t=e.indexURL||await Sc();if(t=Rc(fc(t)),e.packageBaseUrl=Rc(e.packageBaseUrl),e.cdnUrl=Rc(e.packageBaseUrl??`https://cdn.jsdelivr.net/pyodide/v314.0.0/full/`),!e.lockFileContents){let n=e.lockFileURL??t+`pyodide-lock.json`;e.lockFileContents=xc(n),e.packageBaseUrl??=Cc(n)}e.indexURL=t,e.packageCacheDir&&=Rc(fc(e.packageCacheDir));let n={jsglobals:globalThis,stdin:globalThis.prompt?()=>globalThis.prompt():void 0,args:[],env:{},packages:[],packageCacheDir:e.packageBaseUrl,enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:`2ff9f3fe6c88624a7e283d5651688da7f6169834ab51663b07be67c0bd43e53e`},r=Object.assign(n,e);return r.env.HOME??=`/home/pyodide`,r.env.PYTHONINSPECT??=`1`,r}U(Bc,`initializeConfiguration`);function Vc(e){let t=kc(e),n=t.API;return n.lockFilePromise=Promise.resolve(e.lockFileContents),t}U(Vc,`createEmscriptenSettings`);async function Hc(e){return e.createPyodideModule?e.createPyodideModule:(await yc(`${e.indexURL}pyodide.asm.mjs`)).default}U(Hc,`loadWasmScript`);async function Uc(e,t){if(!e._loadSnapshot)return;let n=await e._loadSnapshot,r=ArrayBuffer.isView(n)?n:new Uint8Array(n);return t.noInitialRun=!0,t.INITIAL_MEMORY=r.length,r}U(Uc,`prepareSnapshot`);async function Wc(e,t){let n=await e(t);if(t.exitCode!==void 0)throw new n.ExitStatus(t.exitCode);return n}U(Wc,`instantiatePyodideModule`);function Gc(e,t){let n=e.API;if(t.pyproxyToStringRepr&&n.setPyProxyToStringMethod(!0),t.convertNullToNone&&n.setCompatNullToNone(!0),t.toJsLiteralMap&&n.setCompatToJsLiteralMap(!0),n.version!==`314.0.0`&&t.checkAPIVersion)throw Error(`Pyodide version does not match: '${zc}' <==> '${n.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);e.locateFile=e=>{throw e.endsWith(`.so`)?Error(`Failed to find dynamic library "${e}"`):Error(`Unexpected call to locateFile("${e}")`)}}U(Gc,`configureAPI`);function Kc(e,t,n){let r=e.API,i;return t&&(i=r.restoreSnapshot(t)),r.finalizeBootstrap(i,n._snapshotDeserializer)}U(Kc,`bootstrapPyodide`);async function qc(e,t){let n=e._api;return n.sys.path.insert(0,``),n._pyodide.set_excepthook(),await n.packageIndexReady,n.initializeStreams(t.stdin,t.stdout,t.stderr),e}U(qc,`finalizeSetup`);async function Jc(e={}){let t=await Bc(e),n=Vc(t),r=await Hc(t),i=await Uc(t,n),a=await Wc(r,n);return Gc(a,t),await qc(Kc(a,i,t),t)}U(Jc,`loadPyodide`);function Yc(){return`marimo-base`}const Z=new class{spans=[];startSpan(e,t={}){let n={name:e,startTime:Date.now(),attributes:t,end:(e=`ok`)=>this.endSpan(n,e)};return this.spans.push(n),n}endSpan(e,t=`ok`){e.endTime=Date.now(),e.status=t}getSpans(){return this.spans}wrap(e,t,n={}){let r=this.startSpan(t||e.name,n);try{let t=e();return this.endSpan(r),t}catch(e){throw this.endSpan(r,`error`),e}}wrapAsync(e,t,n={}){return(async(...r)=>{let i=this.startSpan(t||e.name,n);try{let t=await e(...r);return this.endSpan(i),t}catch(e){throw this.endSpan(i,`error`),e}})}logSpans(){}};globalThis.t=Z;const Xc=/(^|\n)\s*(?:import\s+[^\n#]*\bduckdb\b|from\s+duckdb\b|[^\n#]*\bduckdb\s*\.)/;function Zc(e,t){return e.includes(`mo.sql`)||Xc.test(e)||t?.has(`duckdb`)===!0}function Qc(e){return e.trim().split(/[[<>=!~;@\s]/)[0]}var $c=class{pyodide=null;packageLoadQueue=Promise.resolve();sessionGeneration=0;activeSessionStops=new Set;get requirePyodide(){return g(this.pyodide,`Pyodide not loaded`),this.pyodide}async bootstrap(e){return await this.loadPyodideAndPackages(e)}async loadPyodideAndPackages(e){if(!Jc)throw Error(`loadPyodide is not defined`);let t=Z.startSpan(`loadPyodide`);try{let n=e.pyodideIndexUrl??`https://cdn.jsdelivr.net/pyodide/${e.pyodideVersion}/full/`,r=await Jc({packages:[`micropip`,`msgspec`,Yc(),`Markdown`,`pymdown-extensions`,`narwhals`,`packaging`],_makeSnapshot:!1,lockFileURL:e.pyodideLockfileUrl??`https://wasm.marimo.app/pyodide-lock.json?v=${e.version}&pyodide=${e.pyodideVersion}`,indexURL:n,packageBaseUrl:n,convertNullToNone:!0});if(e.pypiIndexUrl){let t=r.pyimport(`micropip`);try{t.set_index_urls(e.pypiIndexUrl)}finally{t.destroy()}}return this.pyodide=r,t.end(`ok`),r}catch(e){throw _.error(`Failed to load Pyodide`,e),e}}async mountFilesystem(e){let t=Z.startSpan(`mountFilesystem`);return H.createHomeDir(this.requirePyodide),H.mountFS(this.requirePyodide),await H.populateFilesToMemory(this.requirePyodide),t.end(`ok`),H.initNotebookCode({pyodide:this.requirePyodide,code:e.code,filename:e.filename})}async startSession(e){let t=this.sessionGeneration,{code:n,filename:r,onMessage:i,queryParameters:a,userConfig:o}=e;self.messenger={callback:i},self.query_params=a,self.user_config=o;let s=Z.startSpan(`startSession.runPython`),c=r||H.NOTEBOOK_FILENAME,l=this.requirePyodide.runPython(`
|
|
58
58
|
print("[py] Starting marimo...")
|
|
59
59
|
import asyncio
|
|
60
60
|
import gc
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./react-DVplv7_D.js";import{t as n}from"./compiler-runtime-BrajqUja.js";import{n as r,t as i}from"./cn-ldLVeaqm.js";import{t as a}from"./jsx-runtime-B74pBk57.js";import{x as o}from"./fullscreen-BWTs8pYZ.js";import{a as s,c,i as l,l as u,n as d,r as f,s as p,t as m}from"./alert-dialog-C-sWmKva.js";import{c as h,d as g,i as _,n as ee,s as te,t as ne,u as v}from"./select-3CVGlYrC.js";import{r as y,t as b}from"./button-D8gVKwe-.js";import{t as x}from"./createLucideIcon-DfJ2oMlA.js";import{C as S,Jt as C,Lt as w,N as T,Qt as re,Xt as ie,Yt as ae,Zt as oe,r as E,tn as se,u as D,x as O}from"./input-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./react-DVplv7_D.js";import{t as n}from"./compiler-runtime-BrajqUja.js";import{n as r,t as i}from"./cn-ldLVeaqm.js";import{t as a}from"./jsx-runtime-B74pBk57.js";import{x as o}from"./fullscreen-BWTs8pYZ.js";import{a as s,c,i as l,l as u,n as d,r as f,s as p,t as m}from"./alert-dialog-C-sWmKva.js";import{c as h,d as g,i as _,n as ee,s as te,t as ne,u as v}from"./select-3CVGlYrC.js";import{r as y,t as b}from"./button-D8gVKwe-.js";import{t as x}from"./createLucideIcon-DfJ2oMlA.js";import{C as S,Jt as C,Lt as w,N as T,Qt as re,Xt as ie,Yt as ae,Zt as oe,r as E,tn as se,u as D,x as O}from"./input-DmHMEZGh.js";import{t as k}from"./use-toast-Wu434mLr.js";import{r as ce,t as A}from"./requests-BIFR-h4M.js";import{t as j}from"./Deferred-CrTnjj37.js";import{t as M}from"./uuid-k9DpjH68.js";import{n as N}from"./useDebounce-DwTQ_1Pu.js";var P=x(`key`,[[`path`,{d:`m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4`,key:`g0fldk`}],[`path`,{d:`m21 2-9.6 9.6`,key:`1j0ho8`}],[`circle`,{cx:`7.5`,cy:`15.5`,r:`5.5`,key:`yqb3hr`}]]),F=e(t(),1),I=n(),L=a(),R={create(){return M()}},z=class{requests=new Map;operation;makeRequest;opts;constructor(e,t,n={}){this.operation=e,this.makeRequest=t,this.opts=n}async request(e){if(this.opts.resolveExistingRequests){let e=this.opts.resolveExistingRequests();for(let t of this.requests.values())t.resolve(e);this.requests.clear()}let t=R.create(),n=new j;return this.requests.set(t,n),await this.makeRequest(t,e).catch(e=>{n.reject(e),this.requests.delete(t)}),n.promise}resolve(e,t){let n=this.requests.get(e);n!==void 0&&(n.resolve(t),this.requests.delete(e))}reject(e,t){let n=this.requests.get(e);n!==void 0&&(n.reject(t),this.requests.delete(e))}},B=F.forwardRef((e,t)=>{let n=(0,I.c)(16),r,a,o;n[0]===e?(r=n[1],a=n[2],o=n[3]):({className:a,bottomAdornment:r,...o}=e,n[0]=e,n[1]=r,n[2]=a,n[3]=o);let s;n[4]===a?s=n[5]:(s=i(`shadow-xs-solid hover:shadow-sm-solid disabled:shadow-xs-solid focus-visible:shadow-md-solid`,`flex w-full mb-1 rounded-sm border border-input bg-background px-3 py-2 text-sm font-code ring-offset-background placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring focus-visible:border-accent disabled:cursor-not-allowed disabled:opacity-50 min-h-6`,a),n[4]=a,n[5]=s);let c;n[6]===Symbol.for(`react.memo_cache_sentinel`)?(c=y.stopPropagation(),n[6]=c):c=n[6];let l;n[7]!==o||n[8]!==t||n[9]!==s?(l=(0,L.jsx)(`textarea`,{className:s,onClick:c,ref:t,...o}),n[7]=o,n[8]=t,n[9]=s,n[10]=l):l=n[10];let u;n[11]===r?u=n[12]:(u=r&&(0,L.jsx)(`div`,{className:`absolute right-0 bottom-1 flex items-center pr-[6px] pointer-events-none text-muted-foreground h-6`,children:r}),n[11]=r,n[12]=u);let d;return n[13]!==l||n[14]!==u?(d=(0,L.jsxs)(`div`,{className:`relative`,children:[l,u]}),n[13]=l,n[14]=u,n[15]=d):d=n[15],d});B.displayName=`Textarea`;var V=F.forwardRef((e,t)=>{let n=(0,I.c)(16),r,i,a;n[0]===e?(r=n[1],i=n[2],a=n[3]):({className:r,onValueChange:i,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a);let o;n[4]!==i||n[5]!==a.delay||n[6]!==a.value?(o={initialValue:a.value,delay:a.delay,onChange:i},n[4]=i,n[5]=a.delay,n[6]=a.value,n[7]=o):o=n[7];let{value:s,onChange:c}=N(o),l;n[8]===c?l=n[9]:(l=e=>c(e.target.value),n[8]=c,n[9]=l);let u;return n[10]!==r||n[11]!==a||n[12]!==t||n[13]!==l||n[14]!==s?(u=(0,L.jsx)(B,{ref:t,className:r,...a,onChange:l,value:s}),n[10]=r,n[11]=a,n[12]=t,n[13]=l,n[14]=s,n[15]=u):u=n[15],u});V.displayName=`DebouncedTextarea`;var H=F.forwardRef((e,t)=>{let n=(0,I.c)(23),r,i,a;n[0]===e?(r=n[1],i=n[2],a=n[3]):({className:r,onValueChange:i,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a);let[s,c]=F.useState(a.value),l;n[4]!==s||n[5]!==i||n[6]!==a.value?(l={prop:a.value,defaultProp:s,onChange:i},n[4]=s,n[5]=i,n[6]=a.value,n[7]=l):l=n[7];let[u,d]=o(l),f,p;n[8]===u?(f=n[9],p=n[10]):(f=()=>{c(u||``)},p=[u],n[8]=u,n[9]=f,n[10]=p),F.useEffect(f,p);let m;n[11]===Symbol.for(`react.memo_cache_sentinel`)?(m=e=>c(e.target.value),n[11]=m):m=n[11];let h,g;n[12]!==s||n[13]!==d?(h=()=>d(s),g=e=>{e.ctrlKey&&e.key===`Enter`&&(e.preventDefault(),d(s))},n[12]=s,n[13]=d,n[14]=h,n[15]=g):(h=n[14],g=n[15]);let _;return n[16]!==r||n[17]!==s||n[18]!==a||n[19]!==t||n[20]!==h||n[21]!==g?(_=(0,L.jsx)(B,{ref:t,className:r,...a,value:s,onChange:m,onBlur:h,onKeyDown:g}),n[16]=r,n[17]=s,n[18]=a,n[19]=t,n[20]=h,n[21]=g,n[22]=_):_=n[22],_});H.displayName=`OnBlurredTextarea`;var U=F.createContext({modal:null,setModal:()=>{}}),W=e=>{let t=(0,I.c)(6),[n,r]=F.useState(null),i;t[0]===n?i=t[1]:(i={modal:n,setModal:r},t[0]=n,t[1]=i);let a;return t[2]!==n||t[3]!==e.children||t[4]!==i?(a=(0,L.jsxs)(U,{value:i,children:[n,e.children]}),t[2]=n,t[3]=e.children,t[4]=i,t[5]=a):a=t[5],a};function G(){let e=F.use(U);if(e===void 0)throw Error(`useModal must be used within a ModalProvider`);let t=()=>{e.setModal(null)};return{openModal:n=>{e.setModal((0,L.jsx)(C,{open:!0,onOpenChange:e=>{e||t()},children:n}))},openAlert:n=>{e.setModal((0,L.jsx)(m,{open:!0,onOpenChange:e=>{e||t()},children:(0,L.jsxs)(l,{children:[n,(0,L.jsx)(p,{children:(0,L.jsx)(d,{autoFocus:!0,onClick:t,children:`Ok`})})]})}))},openPrompt:n=>{e.setModal((0,L.jsx)(m,{open:!0,onOpenChange:e=>{e||t()},children:(0,L.jsx)(l,{children:(0,L.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),n.onConfirm(e.currentTarget.prompt.value),t()},children:[(0,L.jsxs)(c,{children:[(0,L.jsx)(u,{children:n.title}),(0,L.jsx)(s,{children:n.description}),(0,L.jsx)(E,{spellCheck:n.spellCheck,defaultValue:n.defaultValue,className:`my-4 h-8`,name:`prompt`,required:!0,autoFocus:!0,autoComplete:`off`})]}),(0,L.jsxs)(p,{children:[(0,L.jsx)(f,{onClick:t,children:`Cancel`}),(0,L.jsx)(b,{type:`submit`,children:n.confirmText??`Ok`})]})]})})}))},openConfirm:n=>{e.setModal((0,L.jsx)(m,{open:!0,onOpenChange:e=>{e||t()},children:(0,L.jsxs)(l,{children:[(0,L.jsxs)(c,{children:[(0,L.jsx)(u,{className:n.variant===`destructive`?`text-destructive`:``,children:n.title}),(0,L.jsx)(s,{children:n.description})]}),(0,L.jsxs)(p,{children:[(0,L.jsx)(f,{onClick:t,children:`Cancel`}),n.confirmAction]})]})}))},closeModal:t}}var K=new z(`secrets-result`,async(e,t)=>{await A().listSecretKeys({requestId:e,...t})}),le=r([`text-sm font-medium leading-none`,`data-disabled:cursor-not-allowed data-disabled:opacity-70`,`group-data-invalid:text-destructive`]),ue=e=>{let t=(0,I.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let a;t[3]===n?a=t[4]:(a=i(le(),n),t[3]=n,t[4]=a);let o;return t[5]!==r||t[6]!==a?(o=(0,L.jsx)(T,{className:a,...r}),t[5]=r,t[6]=a,t[7]=o):o=t[7],o},q=e=>{let t=(0,I.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let a;t[3]===n?a=t[4]:(a=i(`text-sm text-muted-foreground`,n),t[3]=n,t[4]=a);let o;return t[5]!==r||t[6]!==a?(o=(0,L.jsx)(S,{className:a,...r,slot:`description`}),t[5]=r,t[6]=a,t[7]=o):o=t[7],o},de=e=>{let t=(0,I.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let a;t[3]===n?a=t[4]:(a=i(`text-sm font-medium text-destructive`,n),t[3]=n,t[4]=a);let o;return t[5]!==r||t[6]!==a?(o=(0,L.jsx)(O,{className:a,...r}),t[5]=r,t[6]=a,t[7]=o):o=t[7],o},J=r(``,{variants:{variant:{default:[`relative flex w-full items-center overflow-hidden rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background`,v(),`data-focus-within:outline-hidden data-focus-within:ring-2 data-focus-within:ring-ring data-focus-within:ring-offset-2`,`data-disabled:opacity-50`],ghost:``}},defaultVariants:{variant:`default`}}),fe=e=>{let t=(0,I.c)(12),n,r,a;t[0]===e?(n=t[1],r=t[2],a=t[3]):({className:n,variant:a,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=a);let o;t[4]===a?o=t[5]:(o=e=>i(J({variant:a}),e),t[4]=a,t[5]=o);let s;t[6]!==n||t[7]!==o?(s=w(n,o),t[6]=n,t[7]=o,t[8]=s):s=t[8];let c;return t[9]!==r||t[10]!==s?(c=(0,L.jsx)(D,{className:s,...r}),t[9]=r,t[10]=s,t[11]=c):c=t[11],c},Y=e=>{let t=(0,I.c)(3),{href:n,children:r}=e,i;return t[0]!==r||t[1]!==n?(i=(0,L.jsx)(`a`,{href:n,target:`_blank`,rel:`noreferrer`,className:`text-link hover:underline`,children:r}),t[0]=r,t[1]=n,t[2]=i):i=t[2],i},X=`path:`;function Z(e){return typeof e==`string`&&e.startsWith(X)}function pe(e){return`${X}${e}`}function me(e){return e.slice(5)}var Q=`env:`;function he(e){return e}function ge(e){return typeof e==`string`&&e.startsWith(Q)}function _e(e){return`${Q}${e}`}function ve(e){return e.replace(Q,``)}function ye(e,t){return Z(e)?{kind:`path`,path:me(e)}:{kind:`json`,expr:ge(e)?`json.loads(${t(e)})`:`json.loads(r"""${e}""")`}}function be(e){let t=e.trimStart();return t.startsWith(`{`)||t.startsWith(`[`)}function $(e){let t=e.trim();if(!t)return``;try{return JSON.stringify(JSON.parse(t))}catch{return e.replaceAll(/\r?\n/g,``)}}function xe(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
2
|
`,`\\n`).replaceAll(`\r`,`\\r`).replaceAll(` `,`\\t`)}function Se(e){return e.toSorted((e,t)=>e.provider===`env`?1:t.provider===`env`?-1:0)}var Ce=e=>{let t=(0,I.c)(47),{providerNames:n,onClose:r,onSuccess:i,initialValue:a,multiline:o}=e,s=a===void 0?``:a,c=o!==void 0&&o,{writeSecret:l}=ce(),[u,d]=F.useState(``),f;t[0]!==s||t[1]!==c?(f=()=>c?$(s):s,t[0]=s,t[1]=c,t[2]=f):f=t[2];let[p,m]=F.useState(f),[_,v]=F.useState(n[0]),y;t[3]!==u||t[4]!==_||t[5]!==c||t[6]!==i||t[7]!==p||t[8]!==l?(y=async e=>{if(e.preventDefault(),!_){k({title:`Error`,description:`No location selected for the secret.`,variant:`danger`});return}let t=c?$(p):p;if(!u||!t||!_){k({title:`Error`,description:`Please fill in all fields.`,variant:`danger`});return}try{await l({key:u,value:t,provider:`dotenv`,name:_}),k({title:`Secret created`,description:`The secret has been created successfully.`}),i(u)}catch{k({title:`Error`,description:`Failed to create secret. Please try again.`,variant:`danger`})}},t[3]=u,t[4]=_,t[5]=c,t[6]=i,t[7]=p,t[8]=l,t[9]=y):y=t[9];let x=y,S;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,L.jsxs)(re,{children:[(0,L.jsx)(se,{children:`Add Secret`}),(0,L.jsx)(ie,{children:`Add a new secret to your environment variables.`})]}),t[10]=S):S=t[10];let C;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,L.jsx)(g,{htmlFor:`key`,children:`Key`}),t[11]=C):C=t[11];let w;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(w=e=>{d(we(e.target.value))},t[12]=w):w=t[12];let T;t[13]===u?T=t[14]:(T=(0,L.jsxs)(`div`,{className:`grid gap-2`,children:[C,(0,L.jsx)(E,{id:`key`,value:u,onChange:w,placeholder:`MY_SECRET_KEY`,required:!0})]}),t[13]=u,t[14]=T);let D;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(D=(0,L.jsx)(g,{htmlFor:`value`,children:`Value`}),t[15]=D):D=t[15];let O;t[16]!==c||t[17]!==p?(O=c?(0,L.jsx)(B,{id:`value`,value:p,onChange:e=>m($(e.target.value)),required:!0,className:`my-0 font-code text-xs break-all`,rows:8,autoFocus:!0,autoComplete:`off`}):(0,L.jsx)(E,{id:`value`,type:`password`,value:p,onChange:e=>m(e.target.value),required:!0,autoComplete:`off`}),t[16]=c,t[17]=p,t[18]=O):O=t[18];let A;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(A=Te()&&(0,L.jsx)(q,{children:`Note: You are sending this key over http.`}),t[19]=A):A=t[19];let j;t[20]===O?j=t[21]:(j=(0,L.jsxs)(`div`,{className:`grid gap-2`,children:[D,O,A]}),t[20]=O,t[21]=j);let M;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,L.jsx)(g,{htmlFor:`location`,children:`Location`}),t[22]=M):M=t[22];let N;t[23]===n.length?N=t[24]:(N=n.length===0&&(0,L.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No dotenv locations configured.`}),t[23]=n.length,t[24]=N);let P;t[25]!==_||t[26]!==n?(P=n.length>0&&(0,L.jsxs)(ne,{value:_,onValueChange:e=>v(e),children:[(0,L.jsx)(te,{children:(0,L.jsx)(h,{placeholder:`Select a provider`})}),(0,L.jsx)(ee,{children:n.map(Ee)})]}),t[25]=_,t[26]=n,t[27]=P):P=t[27];let R;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,L.jsxs)(q,{children:[`You can configure the location by setting the`,` `,(0,L.jsx)(Y,{href:`https://links.marimo.app/dotenv`,children:`dotenv configuration`}),`.`]}),t[28]=R):R=t[28];let z;t[29]!==N||t[30]!==P?(z=(0,L.jsxs)(`div`,{className:`grid gap-2`,children:[M,N,P,R]}),t[29]=N,t[30]=P,t[31]=z):z=t[31];let V;t[32]!==j||t[33]!==z||t[34]!==T?(V=(0,L.jsxs)(`div`,{className:`grid gap-4 py-4`,children:[T,j,z]}),t[32]=j,t[33]=z,t[34]=T,t[35]=V):V=t[35];let H;t[36]===r?H=t[37]:(H=(0,L.jsx)(b,{type:`button`,variant:`outline`,onClick:r,children:`Cancel`}),t[36]=r,t[37]=H);let U=!u||!p||!_,W;t[38]===U?W=t[39]:(W=(0,L.jsx)(b,{type:`submit`,disabled:U,children:`Add Secret`}),t[38]=U,t[39]=W);let G;t[40]!==H||t[41]!==W?(G=(0,L.jsxs)(oe,{children:[H,W]}),t[40]=H,t[41]=W,t[42]=G):G=t[42];let K;return t[43]!==x||t[44]!==V||t[45]!==G?(K=(0,L.jsx)(ae,{children:(0,L.jsxs)(`form`,{onSubmit:x,children:[S,V,G]})}),t[43]=x,t[44]=V,t[45]=G,t[46]=K):K=t[46],K};function we(e){return e.replaceAll(/\W/g,`_`)}function Te(){return window.location.href.startsWith(`http://`)}function Ee(e){return(0,L.jsx)(_,{value:e,children:e},e)}export{B as C,H as S,P as T,J as _,ye as a,G as b,_e as c,pe as d,me as f,ue as g,fe as h,be as i,ve as l,de as m,Se as n,he as o,Y as p,xe as r,ge as s,Ce as t,Z as u,K as v,z as w,V as x,W as y};
|
package/dist/index.html
CHANGED
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
<marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
|
|
67
67
|
<!-- /TODO -->
|
|
68
68
|
<title>{{ title }}</title>
|
|
69
|
-
<script type="module" crossorigin src="./assets/index-
|
|
69
|
+
<script type="module" crossorigin src="./assets/index-vBuAUWEe.js"></script>
|
|
70
70
|
<link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-B0Z9INg1.js">
|
|
71
71
|
<link rel="modulepreload" crossorigin href="./assets/react-DVplv7_D.js">
|
|
72
72
|
<link rel="modulepreload" crossorigin href="./assets/compiler-runtime-BrajqUja.js">
|
|
73
|
-
<link rel="modulepreload" crossorigin href="./assets/useEvent-
|
|
73
|
+
<link rel="modulepreload" crossorigin href="./assets/useEvent-BDjgaBtz.js">
|
|
74
74
|
<link rel="modulepreload" crossorigin href="./assets/react-dom-_LrxgvjW.js">
|
|
75
75
|
<link rel="modulepreload" crossorigin href="./assets/schemas-ChRqMOTL.js">
|
|
76
76
|
<link rel="modulepreload" crossorigin href="./assets/isObject-BCaOs5rp.js">
|
|
@@ -82,11 +82,11 @@
|
|
|
82
82
|
<link rel="modulepreload" crossorigin href="./assets/objects-rLPlQ3X_.js">
|
|
83
83
|
<link rel="modulepreload" crossorigin href="./assets/useEventListener-CjDeLqFC.js">
|
|
84
84
|
<link rel="modulepreload" crossorigin href="./assets/invariant-Ci2dTZ72.js">
|
|
85
|
-
<link rel="modulepreload" crossorigin href="./assets/config-
|
|
85
|
+
<link rel="modulepreload" crossorigin href="./assets/config-DpY86_Yq.js">
|
|
86
86
|
<link rel="modulepreload" crossorigin href="./assets/utils-B4K466FK.js">
|
|
87
|
-
<link rel="modulepreload" crossorigin href="./assets/session-
|
|
87
|
+
<link rel="modulepreload" crossorigin href="./assets/session-CMLIzZKw.js">
|
|
88
88
|
<link rel="modulepreload" crossorigin href="./assets/Deferred-CrTnjj37.js">
|
|
89
|
-
<link rel="modulepreload" crossorigin href="./assets/config-
|
|
89
|
+
<link rel="modulepreload" crossorigin href="./assets/config-CD1IuZFJ.js">
|
|
90
90
|
<link rel="modulepreload" crossorigin href="./assets/clsx-DB0hHKMi.js">
|
|
91
91
|
<link rel="modulepreload" crossorigin href="./assets/cn-ldLVeaqm.js">
|
|
92
92
|
<link rel="modulepreload" crossorigin href="./assets/jsx-runtime-B74pBk57.js">
|
|
@@ -111,12 +111,12 @@
|
|
|
111
111
|
<link rel="modulepreload" crossorigin href="./assets/arrays-0R2reF2y.js">
|
|
112
112
|
<link rel="modulepreload" crossorigin href="./assets/once-6KNTRW0u.js">
|
|
113
113
|
<link rel="modulepreload" crossorigin href="./assets/numbers-CsZVw3Dc.js">
|
|
114
|
-
<link rel="modulepreload" crossorigin href="./assets/useDebounce-
|
|
115
|
-
<link rel="modulepreload" crossorigin href="./assets/input-
|
|
114
|
+
<link rel="modulepreload" crossorigin href="./assets/useDebounce-DwTQ_1Pu.js">
|
|
115
|
+
<link rel="modulepreload" crossorigin href="./assets/input-DmHMEZGh.js">
|
|
116
116
|
<link rel="modulepreload" crossorigin href="./assets/use-toast-Wu434mLr.js">
|
|
117
|
-
<link rel="modulepreload" crossorigin href="./assets/requests-
|
|
117
|
+
<link rel="modulepreload" crossorigin href="./assets/requests-BIFR-h4M.js">
|
|
118
118
|
<link rel="modulepreload" crossorigin href="./assets/uuid-k9DpjH68.js">
|
|
119
|
-
<link rel="modulepreload" crossorigin href="./assets/write-secret-modal-
|
|
119
|
+
<link rel="modulepreload" crossorigin href="./assets/write-secret-modal-BEx-EUlh.js">
|
|
120
120
|
<link rel="modulepreload" crossorigin href="./assets/plus-C5silF6g.js">
|
|
121
121
|
<link rel="modulepreload" crossorigin href="./assets/trash-2-DcgaW8fn.js">
|
|
122
122
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-uBIymjUX.js">
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
<link rel="modulepreload" crossorigin href="./assets/dist-DBMV4gqt.js">
|
|
125
125
|
<link rel="modulepreload" crossorigin href="./assets/capabilities-Pq1YNPlK.js">
|
|
126
126
|
<link rel="modulepreload" crossorigin href="./assets/cjs-C49f7GXV.js">
|
|
127
|
-
<link rel="modulepreload" crossorigin href="./assets/createReducer-
|
|
127
|
+
<link rel="modulepreload" crossorigin href="./assets/createReducer-CaI_Oa0v.js">
|
|
128
128
|
<link rel="modulepreload" crossorigin href="./assets/dist-qhAY4L2r.js">
|
|
129
129
|
<link rel="modulepreload" crossorigin href="./assets/marked.esm-B_3iMIUq.js">
|
|
130
130
|
<link rel="modulepreload" crossorigin href="./assets/strings-C25fhMR_.js">
|
|
@@ -136,10 +136,10 @@
|
|
|
136
136
|
<link rel="modulepreload" crossorigin href="./assets/dist-LSsCJjA3.js">
|
|
137
137
|
<link rel="modulepreload" crossorigin href="./assets/dist-DusFODSa.js">
|
|
138
138
|
<link rel="modulepreload" crossorigin href="./assets/stex-Dc5bKD4z.js">
|
|
139
|
-
<link rel="modulepreload" crossorigin href="./assets/useTheme-
|
|
140
|
-
<link rel="modulepreload" crossorigin href="./assets/useAsyncData-
|
|
139
|
+
<link rel="modulepreload" crossorigin href="./assets/useTheme-BAA27lh7.js">
|
|
140
|
+
<link rel="modulepreload" crossorigin href="./assets/useAsyncData-qvoPYHtx.js">
|
|
141
141
|
<link rel="modulepreload" crossorigin href="./assets/purify.es--06brOip.js">
|
|
142
|
-
<link rel="modulepreload" crossorigin href="./assets/cells-
|
|
142
|
+
<link rel="modulepreload" crossorigin href="./assets/cells-yOs72eZm.js">
|
|
143
143
|
<link rel="modulepreload" crossorigin href="./assets/coerce-DWjFeXOY.js">
|
|
144
144
|
<link rel="modulepreload" crossorigin href="./assets/get-DjNf4SIX.js">
|
|
145
145
|
<link rel="modulepreload" crossorigin href="./assets/_hasPath-BmRQipI0.js">
|
|
@@ -147,47 +147,47 @@
|
|
|
147
147
|
<link rel="modulepreload" crossorigin href="./assets/_baseSet-Bpdo9AvU.js">
|
|
148
148
|
<link rel="modulepreload" crossorigin href="./assets/pick-DKIID_Mo.js">
|
|
149
149
|
<link rel="modulepreload" crossorigin href="./assets/errors-CNsgAw6m.js">
|
|
150
|
-
<link rel="modulepreload" crossorigin href="./assets/config-
|
|
151
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
152
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
150
|
+
<link rel="modulepreload" crossorigin href="./assets/config-DMz7oN0r.js">
|
|
151
|
+
<link rel="modulepreload" crossorigin href="./assets/state-B_MCKzBL.js">
|
|
152
|
+
<link rel="modulepreload" crossorigin href="./assets/state-C5WAeuTu.js">
|
|
153
153
|
<link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-BPYE76jR.js">
|
|
154
154
|
<link rel="modulepreload" crossorigin href="./assets/copy-KlhazlhB.js">
|
|
155
155
|
<link rel="modulepreload" crossorigin href="./assets/micromark-factory-space-D9Dr-k4J.js">
|
|
156
156
|
<link rel="modulepreload" crossorigin href="./assets/chunk-YOKDWASO-BIpRENEC.js">
|
|
157
|
-
<link rel="modulepreload" crossorigin href="./assets/markdown-renderer
|
|
157
|
+
<link rel="modulepreload" crossorigin href="./assets/markdown-renderer--CwVm4kJ.js">
|
|
158
158
|
<link rel="modulepreload" crossorigin href="./assets/copy-Djr5m5ac.js">
|
|
159
159
|
<link rel="modulepreload" crossorigin href="./assets/copy-icon-8-a5vovc.js">
|
|
160
|
-
<link rel="modulepreload" crossorigin href="./assets/useRunCells-
|
|
161
|
-
<link rel="modulepreload" crossorigin href="./assets/RenderHTML-
|
|
162
|
-
<link rel="modulepreload" crossorigin href="./assets/blob-
|
|
160
|
+
<link rel="modulepreload" crossorigin href="./assets/useRunCells-C_IwVJR_.js">
|
|
161
|
+
<link rel="modulepreload" crossorigin href="./assets/RenderHTML-CNDedpS4.js">
|
|
162
|
+
<link rel="modulepreload" crossorigin href="./assets/blob-DCjrjZKW.js">
|
|
163
163
|
<link rel="modulepreload" crossorigin href="./assets/kbd-pdKBv96t.js">
|
|
164
|
-
<link rel="modulepreload" crossorigin href="./assets/useInstallPackage-
|
|
164
|
+
<link rel="modulepreload" crossorigin href="./assets/useInstallPackage-wcDq9hYT.js">
|
|
165
165
|
<link rel="modulepreload" crossorigin href="./assets/share-BZW3tzEX.js">
|
|
166
166
|
<link rel="modulepreload" crossorigin href="./assets/events-CbeVJ6OD.js">
|
|
167
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
168
|
-
<link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-
|
|
167
|
+
<link rel="modulepreload" crossorigin href="./assets/state-BaYudep3.js">
|
|
168
|
+
<link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-CdGuz4a_.js">
|
|
169
169
|
<link rel="modulepreload" crossorigin href="./assets/chevron-right-eAtVhbNZ.js">
|
|
170
170
|
<link rel="modulepreload" crossorigin href="./assets/dropdown-menu-DS6umAnH.js">
|
|
171
171
|
<link rel="modulepreload" crossorigin href="./assets/html-to-image-D_0rd3_B.js">
|
|
172
|
-
<link rel="modulepreload" crossorigin href="./assets/download-
|
|
173
|
-
<link rel="modulepreload" crossorigin href="./assets/switch-
|
|
172
|
+
<link rel="modulepreload" crossorigin href="./assets/download-CV1k4XQ4.js">
|
|
173
|
+
<link rel="modulepreload" crossorigin href="./assets/switch-DYjBfpNJ.js">
|
|
174
174
|
<link rel="modulepreload" crossorigin href="./assets/tabs-CY8E4r9U.js">
|
|
175
175
|
<link rel="modulepreload" crossorigin href="./assets/table-DG7Ap4H4.js">
|
|
176
176
|
<link rel="modulepreload" crossorigin href="./assets/eye-off-CxVozGAC.js">
|
|
177
177
|
<link rel="modulepreload" crossorigin href="./assets/refresh-cw-Qw1f8Jhy.js">
|
|
178
|
-
<link rel="modulepreload" crossorigin href="./assets/tree-actions-
|
|
178
|
+
<link rel="modulepreload" crossorigin href="./assets/tree-actions-C_KYlaSv.js">
|
|
179
179
|
<link rel="modulepreload" crossorigin href="./assets/ellipsis-63DyBLHQ.js">
|
|
180
180
|
<link rel="modulepreload" crossorigin href="./assets/external-link-UrX9KO36.js">
|
|
181
181
|
<link rel="modulepreload" crossorigin href="./assets/spinner-DyNE-o8o.js">
|
|
182
182
|
<link rel="modulepreload" crossorigin href="./assets/message-circle-C3rKm8_a.js">
|
|
183
183
|
<link rel="modulepreload" crossorigin href="./assets/hat-glasses-C8RhSVii.js">
|
|
184
184
|
<link rel="modulepreload" crossorigin href="./assets/package-GSoSTiIK.js">
|
|
185
|
-
<link rel="modulepreload" crossorigin href="./assets/datasource-
|
|
186
|
-
<link rel="modulepreload" crossorigin href="./assets/error-entries-
|
|
185
|
+
<link rel="modulepreload" crossorigin href="./assets/datasource-BakEOWsf.js">
|
|
186
|
+
<link rel="modulepreload" crossorigin href="./assets/error-entries-JgrZYMbe.js">
|
|
187
187
|
<link rel="modulepreload" crossorigin href="./assets/alert-DTaqCu_d.js">
|
|
188
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
189
|
-
<link rel="modulepreload" crossorigin href="./assets/cell-link-
|
|
190
|
-
<link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-
|
|
188
|
+
<link rel="modulepreload" crossorigin href="./assets/state-_1LTGJQM.js">
|
|
189
|
+
<link rel="modulepreload" crossorigin href="./assets/cell-link-BFbgKiRH.js">
|
|
190
|
+
<link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-czclLlOn.js">
|
|
191
191
|
<link rel="modulepreload" crossorigin href="./assets/useDateFormatter-DA-62E-Y.js">
|
|
192
192
|
<link rel="modulepreload" crossorigin href="./assets/en-US-Buu61juQ.js">
|
|
193
193
|
<link rel="modulepreload" crossorigin href="./assets/isValid-q_Ad80ug.js">
|
|
@@ -207,13 +207,13 @@
|
|
|
207
207
|
<link rel="modulepreload" crossorigin href="./assets/table-vrvqpuKJ.js">
|
|
208
208
|
<link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-Dbe0MrFr.js">
|
|
209
209
|
<link rel="modulepreload" crossorigin href="./assets/useStateForKey-CGMJQT8x.js">
|
|
210
|
-
<link rel="modulepreload" crossorigin href="./assets/JsonOutput-
|
|
210
|
+
<link rel="modulepreload" crossorigin href="./assets/JsonOutput-Csbov8Fx.js">
|
|
211
211
|
<link rel="modulepreload" crossorigin href="./assets/chart-no-axes-column-C4_v6fQW.js">
|
|
212
212
|
<link rel="modulepreload" crossorigin href="./assets/square-function-_W_Lo0P4.js">
|
|
213
213
|
<link rel="modulepreload" crossorigin href="./assets/spec-uCpVvaAR.js">
|
|
214
214
|
<link rel="modulepreload" crossorigin href="./assets/semaphore-BjoL5P0h.js">
|
|
215
215
|
<link rel="modulepreload" crossorigin href="./assets/fileToBase64-BgBraYAr.js">
|
|
216
|
-
<link rel="modulepreload" crossorigin href="./assets/useBoolean-
|
|
216
|
+
<link rel="modulepreload" crossorigin href="./assets/useBoolean-Dd2nWXFJ.js">
|
|
217
217
|
<link rel="modulepreload" crossorigin href="./assets/code-xml-SQaZqvcO.js">
|
|
218
218
|
<link rel="modulepreload" crossorigin href="./assets/file-headphone-Dl35U6h3.js">
|
|
219
219
|
<link rel="modulepreload" crossorigin href="./assets/file-BPBVl9pl.js">
|
|
@@ -221,24 +221,24 @@
|
|
|
221
221
|
<link rel="modulepreload" crossorigin href="./assets/file-icons-CdJgUy-I.js">
|
|
222
222
|
<link rel="modulepreload" crossorigin href="./assets/globe-UdPdIbF7.js">
|
|
223
223
|
<link rel="modulepreload" crossorigin href="./assets/esm-CI_o7NhW.js">
|
|
224
|
-
<link rel="modulepreload" crossorigin href="./assets/useAddCell-
|
|
225
|
-
<link rel="modulepreload" crossorigin href="./assets/readonly-python-code-
|
|
224
|
+
<link rel="modulepreload" crossorigin href="./assets/useAddCell-C0J8quGE.js">
|
|
225
|
+
<link rel="modulepreload" crossorigin href="./assets/readonly-python-code-DSyr-yE2.js">
|
|
226
226
|
<link rel="modulepreload" crossorigin href="./assets/data-grid-types-DgHVN_Zz.js">
|
|
227
227
|
<link rel="modulepreload" crossorigin href="./assets/glide-utils-HFqhvWHI.js">
|
|
228
|
-
<link rel="modulepreload" crossorigin href="./assets/column-preview-
|
|
228
|
+
<link rel="modulepreload" crossorigin href="./assets/column-preview-DXM8SqGY.js">
|
|
229
229
|
<link rel="modulepreload" crossorigin href="./assets/square-BPmgQFnh.js">
|
|
230
230
|
<link rel="modulepreload" crossorigin href="./assets/triangle-alert-DmIqR8sY.js">
|
|
231
231
|
<link rel="modulepreload" crossorigin href="./assets/prop-types-Djf4O40e.js">
|
|
232
232
|
<link rel="modulepreload" crossorigin href="./assets/es-N9SHpmG7.js">
|
|
233
|
-
<link rel="modulepreload" crossorigin href="./assets/package-data-
|
|
233
|
+
<link rel="modulepreload" crossorigin href="./assets/package-data-CKPmBDtg.js">
|
|
234
234
|
<link rel="modulepreload" crossorigin href="./assets/markdown-export-DzhB1FrN.js">
|
|
235
|
-
<link rel="modulepreload" crossorigin href="./assets/renderShortcut-
|
|
235
|
+
<link rel="modulepreload" crossorigin href="./assets/renderShortcut-rUwGqKgC.js">
|
|
236
236
|
<link rel="modulepreload" crossorigin href="./assets/bundle.esm-D3tw5rqW.js">
|
|
237
237
|
<link rel="modulepreload" crossorigin href="./assets/icons-CiZ_8zS-.js">
|
|
238
|
-
<link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-
|
|
238
|
+
<link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-B2DVK2De.js">
|
|
239
239
|
<link rel="modulepreload" crossorigin href="./assets/useDelayElapsed-BlsDT4TV.js">
|
|
240
240
|
<link rel="modulepreload" crossorigin href="./assets/pathUtils-DPmlLd-r.js">
|
|
241
|
-
<link rel="modulepreload" crossorigin href="./assets/floating-outline-
|
|
241
|
+
<link rel="modulepreload" crossorigin href="./assets/floating-outline-Drd73Quo.js">
|
|
242
242
|
<link rel="stylesheet" crossorigin href="./assets/cells-0PFKL3SH.css">
|
|
243
243
|
<link rel="stylesheet" crossorigin href="./assets/markdown-renderer-DjIHoF9Z.css">
|
|
244
244
|
<link rel="stylesheet" crossorigin href="./assets/JsonOutput-B0GmlMnR.css">
|
package/package.json
CHANGED
|
@@ -74,7 +74,7 @@ describe("state utility functions", () => {
|
|
|
74
74
|
const newState = addSession(initialState, session);
|
|
75
75
|
|
|
76
76
|
// Remove the dynamic tabId for snapshot comparison
|
|
77
|
-
const { tabId, ...sessionWithoutId } = newState.sessions[0];
|
|
77
|
+
const { tabId: _tabId, ...sessionWithoutId } = newState.sessions[0];
|
|
78
78
|
expect({
|
|
79
79
|
...newState,
|
|
80
80
|
sessions: [sessionWithoutId],
|
|
@@ -116,7 +116,7 @@ describe("state utility functions", () => {
|
|
|
116
116
|
const newState = addSession(initialState, newSession);
|
|
117
117
|
|
|
118
118
|
// Remove dynamic tabId for snapshot
|
|
119
|
-
const { tabId, ...sessionWithoutId } = newState.sessions[0];
|
|
119
|
+
const { tabId: _tabId, ...sessionWithoutId } = newState.sessions[0];
|
|
120
120
|
expect({
|
|
121
121
|
...newState,
|
|
122
122
|
sessions: [sessionWithoutId],
|
|
@@ -98,7 +98,7 @@ export const CellSelectionFeature: TableFeature = {
|
|
|
98
98
|
]);
|
|
99
99
|
} else {
|
|
100
100
|
// This cell becomes the single selected cell
|
|
101
|
-
table.setCellSelection((
|
|
101
|
+
table.setCellSelection(() => [
|
|
102
102
|
{
|
|
103
103
|
rowId: rowId,
|
|
104
104
|
columnName: columnName,
|
|
@@ -115,7 +115,7 @@ export const CellSelectionFeature: TableFeature = {
|
|
|
115
115
|
);
|
|
116
116
|
} else {
|
|
117
117
|
// Clear the selection
|
|
118
|
-
table.setCellSelection((
|
|
118
|
+
table.setCellSelection(() => []);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
};
|
|
@@ -30,7 +30,7 @@ export interface CellSelectionCell {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
// These are additional properties add to the table instance in createTable
|
|
33
|
-
export interface CellSelectionInstance
|
|
33
|
+
export interface CellSelectionInstance {
|
|
34
34
|
setCellSelection?: (updater: Updater<CellSelectionState>) => void;
|
|
35
35
|
|
|
36
36
|
resetCellSelection?(defaultValue?: CellSelectionState): void;
|
|
@@ -44,7 +44,7 @@ declare module "@tanstack/react-table" {
|
|
|
44
44
|
TData extends RowData,
|
|
45
45
|
> extends CellSelectionOptions {}
|
|
46
46
|
|
|
47
|
-
interface Table<TData extends RowData> extends CellSelectionInstance
|
|
47
|
+
interface Table<TData extends RowData> extends CellSelectionInstance {}
|
|
48
48
|
|
|
49
49
|
interface Cell<TData extends RowData, TValue> extends CellSelectionCell {}
|
|
50
50
|
}
|
|
@@ -16,7 +16,7 @@ export const ColumnChartContext = React.createContext<
|
|
|
16
16
|
ColumnChartSpecModel<unknown>
|
|
17
17
|
>(ColumnChartSpecModel.EMPTY);
|
|
18
18
|
|
|
19
|
-
interface Props
|
|
19
|
+
interface Props {
|
|
20
20
|
columnId: string;
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -24,9 +24,7 @@ interface Props<TData, TValue> {
|
|
|
24
24
|
// for all calls with the same key.
|
|
25
25
|
const batchedLoader = createBatchedLoader();
|
|
26
26
|
|
|
27
|
-
export const TableColumnSummary =
|
|
28
|
-
columnId,
|
|
29
|
-
}: Props<TData, TValue>) => {
|
|
27
|
+
export const TableColumnSummary = ({ columnId }: Props) => {
|
|
30
28
|
const { locale } = useLocale();
|
|
31
29
|
|
|
32
30
|
const chartSpecModel = React.use(ColumnChartContext);
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { render, screen, waitFor } from "@testing-library/react";
|
|
4
|
+
import { Provider } from "jotai";
|
|
5
|
+
import type React from "react";
|
|
6
|
+
import { describe, expect, it } from "vitest";
|
|
7
|
+
import { MockRequestClient } from "@/__mocks__/requests";
|
|
8
|
+
import type { SQLTableContext } from "@/core/datasets/data-source-connections";
|
|
9
|
+
import { PreviewSQLTableList } from "@/core/datasets/request-registry";
|
|
10
|
+
import type { SQLTableListPreview } from "@/core/kernel/messages";
|
|
11
|
+
import type { RequestId } from "@/core/network/DeferredRequestRegistry";
|
|
12
|
+
import { requestClientAtom } from "@/core/network/requests";
|
|
13
|
+
import { store } from "@/core/state/jotai";
|
|
14
|
+
import { TableList } from "../datasources";
|
|
15
|
+
|
|
16
|
+
const wrapper = ({ children }: { children: React.ReactNode }) => (
|
|
17
|
+
<Provider store={store}>{children}</Provider>
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
const sqlTableContext: SQLTableContext = {
|
|
21
|
+
engine: "my_engine",
|
|
22
|
+
database: "my_db",
|
|
23
|
+
schema: "public",
|
|
24
|
+
dialect: "postgres",
|
|
25
|
+
schemaPath: ["public"],
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// The kernel answers table-list requests over the websocket, so the mock
|
|
29
|
+
// settles the deferred request instead of returning the response directly.
|
|
30
|
+
function renderDeferredTableList(settle?: (requestId: RequestId) => void) {
|
|
31
|
+
const client = MockRequestClient.create();
|
|
32
|
+
client.previewSQLTableList.mockImplementation(async ({ requestId }) => {
|
|
33
|
+
settle?.(requestId);
|
|
34
|
+
return null;
|
|
35
|
+
});
|
|
36
|
+
store.set(requestClientAtom, client);
|
|
37
|
+
render(
|
|
38
|
+
<TableList
|
|
39
|
+
tables={[]}
|
|
40
|
+
tablesResolved={false}
|
|
41
|
+
sqlTableContext={sqlTableContext}
|
|
42
|
+
/>,
|
|
43
|
+
{ wrapper },
|
|
44
|
+
);
|
|
45
|
+
return client;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
describe("TableList deferred discovery", () => {
|
|
49
|
+
it("shows the error when the request rejects", async () => {
|
|
50
|
+
renderDeferredTableList((requestId) =>
|
|
51
|
+
PreviewSQLTableList.reject(requestId, new Error("engine offline")),
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
expect(screen.getByText("Loading tables...")).toBeInTheDocument();
|
|
55
|
+
|
|
56
|
+
await waitFor(() => {
|
|
57
|
+
expect(screen.getByText("engine offline")).toBeInTheDocument();
|
|
58
|
+
});
|
|
59
|
+
expect(screen.queryByText("Loading tables...")).toBeNull();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("shows the error when the response has no tables field", async () => {
|
|
63
|
+
renderDeferredTableList((requestId) =>
|
|
64
|
+
PreviewSQLTableList.resolve(requestId, {} as SQLTableListPreview),
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
await waitFor(() => {
|
|
68
|
+
expect(screen.getByText("No tables available")).toBeInTheDocument();
|
|
69
|
+
});
|
|
70
|
+
expect(screen.queryByText("Loading tables...")).toBeNull();
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("shows the empty state for an empty table list", async () => {
|
|
74
|
+
renderDeferredTableList((requestId) =>
|
|
75
|
+
PreviewSQLTableList.resolve(requestId, {
|
|
76
|
+
tables: [],
|
|
77
|
+
} as unknown as SQLTableListPreview),
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
await waitFor(() => {
|
|
81
|
+
expect(screen.getByText("No tables found")).toBeInTheDocument();
|
|
82
|
+
});
|
|
83
|
+
expect(screen.queryByText("Loading tables...")).toBeNull();
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("requests the table list with the table context and waits for the kernel", async () => {
|
|
87
|
+
let pendingRequestId: RequestId | undefined;
|
|
88
|
+
const client = renderDeferredTableList((requestId) => {
|
|
89
|
+
pendingRequestId = requestId;
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
await waitFor(() => {
|
|
93
|
+
expect(client.previewSQLTableList).toHaveBeenCalledTimes(1);
|
|
94
|
+
});
|
|
95
|
+
expect(client.previewSQLTableList).toHaveBeenCalledWith(
|
|
96
|
+
expect.objectContaining({
|
|
97
|
+
engine: "my_engine",
|
|
98
|
+
database: "my_db",
|
|
99
|
+
schema: "public",
|
|
100
|
+
schemaPath: ["public"],
|
|
101
|
+
}),
|
|
102
|
+
);
|
|
103
|
+
expect(screen.getByText("Loading tables...")).toBeInTheDocument();
|
|
104
|
+
|
|
105
|
+
// Settle the request so the process-wide registry does not keep the entry.
|
|
106
|
+
expect(pendingRequestId).toBeDefined();
|
|
107
|
+
PreviewSQLTableList.resolve(
|
|
108
|
+
pendingRequestId as RequestId,
|
|
109
|
+
{
|
|
110
|
+
tables: [],
|
|
111
|
+
} as unknown as SQLTableListPreview,
|
|
112
|
+
);
|
|
113
|
+
await waitFor(() => {
|
|
114
|
+
expect(screen.queryByText("Loading tables...")).toBeNull();
|
|
115
|
+
});
|
|
116
|
+
expect(PreviewSQLTableList.requests.size).toBe(0);
|
|
117
|
+
});
|
|
118
|
+
});
|