@marimo-team/frontend 0.16.0-dev96986 → 0.16.0
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/ConnectedDataExplorerComponent-BErMbWvG.js +19 -0
- package/dist/assets/{ImageComparisonComponent-SX7fDaTK.js → ImageComparisonComponent-fTHv1Ih0.js} +1 -1
- package/dist/assets/{VegaLite-MJUW3b7C.js → VegaLite-Bdi-TyfY.js} +1 -1
- package/dist/assets/_baseEach-CNBxBxvS.js +1 -0
- package/dist/assets/_baseMap-D1WHjKrd.js +1 -0
- package/dist/assets/_baseUniq-CCgDNtZb.js +1 -0
- package/dist/assets/{_createAggregator-ZRm2b6Zm.js → _createAggregator-DcD0kTA5.js} +1 -1
- package/dist/assets/{agent-panel-BBd11wNX.js → agent-panel-Crv430aI.js} +57 -76
- package/dist/assets/{any-language-editor-DwAaEQfS.js → any-language-editor-CQh552Wu.js} +1 -1
- package/dist/assets/{architectureDiagram-W76B3OCA-BJmVXUoW.js → architectureDiagram-W76B3OCA-BAJeBxzt.js} +1 -1
- package/dist/assets/{between-horizontal-start-KiwU-a3C.js → between-horizontal-start-Boxgxbt_.js} +1 -1
- package/dist/assets/{blockDiagram-QIGZ2CNN-DzxZjE7B.js → blockDiagram-QIGZ2CNN-CL-1svEK.js} +1 -1
- package/dist/assets/{c4Diagram-FPNF74CW-DjmldG_J.js → c4Diagram-FPNF74CW-BbEqbCTl.js} +1 -1
- package/dist/assets/channel-_2eNSz0n.js +1 -0
- package/dist/assets/chat-panel-CXh5Wl6C.js +3 -0
- package/dist/assets/{chunk-4BX2VUAB-EUTQThiZ.js → chunk-4BX2VUAB-C--8TXeE.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-DZAiDJxy.js → chunk-55IACEB6-Bj00HDqq.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-Bd0Czs-J.js → chunk-FMBD7UC4-C-lhB6hN.js} +1 -1
- package/dist/assets/{chunk-K7UQS3LO-DEKMIknX.js → chunk-K7UQS3LO-B-pGTXPt.js} +1 -1
- package/dist/assets/{chunk-QN33PNHL-E0jwHU_n.js → chunk-QN33PNHL-DqUzGhvm.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-BzaIHJbq.js → chunk-QZHKN3VN-TntJHfSk.js} +1 -1
- package/dist/assets/{chunk-TVAH2DTR-CZFYvqnm.js → chunk-TVAH2DTR-HUJb1psV.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-BNqnFjtv.js → chunk-TZMSLE5B-BK3C__t3.js} +1 -1
- package/dist/assets/{circle-play-D3J_mYrF.js → circle-play-DBLOv1Yu.js} +1 -1
- package/dist/assets/classDiagram-KNZD7YFC-BGmh9POF.js +1 -0
- package/dist/assets/classDiagram-v2-RKCZMP56-BGmh9POF.js +1 -0
- package/dist/assets/{clear-button-ifzRuAR3.js → clear-button-BeoFbEKH.js} +1 -1
- package/dist/assets/clone-BFDSPAj3.js +1 -0
- package/dist/assets/{command-palette-D2fdVSET.js → command-palette-CXZiSv0I.js} +1 -1
- package/dist/assets/{common-Ku-cF_2J.js → common-C7oJcmCT.js} +1 -1
- package/dist/assets/{compile-BgZlHW1c.js → compile-7L0MwhyI.js} +1 -1
- package/dist/assets/{cose-bilkent-S5V4N54A-CVM83SqK.js → cose-bilkent-S5V4N54A-BMkGLcVC.js} +1 -1
- package/dist/assets/{dagre-5GWH7T2D-ouQPkxT3.js → dagre-5GWH7T2D-BJtRienS.js} +1 -1
- package/dist/assets/{data-grid-overlay-editor-B47j5GJJ.js → data-grid-overlay-editor-DBkmGtNs.js} +1 -1
- package/dist/assets/datasources-panel-B7FbYLiy.js +1 -0
- package/dist/assets/{dependency-graph-panel-CZC_B7pK.js → dependency-graph-panel-DEdOxp2X.js} +1 -1
- package/dist/assets/{diagram-N5W7TBWH-CQ817ZdR.js → diagram-N5W7TBWH-CmECY3nb.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-DOK_psUO.js → diagram-QEK2KX5R-DMOVSNKD.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-CVljmOW8.js → diagram-S2PKOQOG-BiJ96PNQ.js} +1 -1
- package/dist/assets/{documentation-panel-C7yIvGg1.js → documentation-panel-xULhaEv3.js} +1 -1
- package/dist/assets/edit-page-BrYda9VE.js +129 -0
- package/dist/assets/{ellipsis-vertical-C7FjlUsY.js → ellipsis-vertical-BBqXIlc2.js} +1 -1
- package/dist/assets/{empty-state-DIOGM_CU.js → empty-state-B3dA3G5P.js} +1 -1
- package/dist/assets/{erDiagram-AWTI2OKA-DYu8cEdc.js → erDiagram-AWTI2OKA-MP1DiFRo.js} +1 -1
- package/dist/assets/{error-panel-Ddb8RkFG.js → error-panel-Cc1sv-Ag.js} +1 -1
- package/dist/assets/file-explorer-panel-Bw59Kva1.js +1 -0
- package/dist/assets/{flowDiagram-PVAE7QVJ-CmvW5iTb.js → flowDiagram-PVAE7QVJ-BX7caPp7.js} +1 -1
- package/dist/assets/{ganttDiagram-OWAHRB6G-BaKQlCaT.js → ganttDiagram-OWAHRB6G-B462g4Yf.js} +4 -4
- package/dist/assets/{gitGraphDiagram-NY62KEGX-CWO24eP6.js → gitGraphDiagram-NY62KEGX-CGgvZ9-9.js} +1 -1
- package/dist/assets/{glide-data-editor-CNDLEJ9a.js → glide-data-editor-C0gUFZON.js} +11 -11
- package/dist/assets/{graph-BZKTtxsc.js → graph-CHRVBzY5.js} +1 -1
- package/dist/assets/home-page-Fb2osjys.js +9 -0
- package/dist/assets/{index-zrSUQXha.js → index-BVgAenPd.js} +1 -1
- package/dist/assets/{index-Brf2DwUM.js → index-BY93Ejhl.js} +1 -1
- package/dist/assets/{index-CerjupfZ.js → index-C-8WADat.js} +1 -1
- package/dist/assets/{index-DZhOPkOB.js → index-C-GhZ7ti.js} +1 -1
- package/dist/assets/{index-CZaurnA9.js → index-C1v_Z9et.js} +1 -1
- package/dist/assets/{index-0XOUPdwT.js → index-C4Tn5NvJ.js} +1 -1
- package/dist/assets/{index-B_d_JZGI.js → index-C77h_TXN.js} +1 -1
- package/dist/assets/{index-BJVyzkx5.js → index-CQDrxQ0j.js} +1 -1
- package/dist/assets/{index-DFrGFNW1.js → index-CWMgowgL.js} +1 -1
- package/dist/assets/{index-DmgwT3sx.js → index-Clbi_Yaq.js} +1 -1
- package/dist/assets/{index-D-tZfElD.js → index-CpTPJo4k.js} +1 -1
- package/dist/assets/index-Cx0bsY1w.css +1 -0
- package/dist/assets/{index-DkntzpX4.js → index-D1vmG6DS.js} +1 -1
- package/dist/assets/{index-D3PqGupX.js → index-D9UKkrr2.js} +1 -1
- package/dist/assets/{index-BgXbBA39.js → index-DEQvTChO.js} +1 -1
- package/dist/assets/index-DKEudB02.js +578 -0
- package/dist/assets/{index-DCkzth56.js → index-DRMm6SNo.js} +1 -1
- package/dist/assets/{index-WXJFkQHg.js → index-DoRmcrKM.js} +1 -1
- package/dist/assets/{index-qE8lHQ-N.js → index-lYa_leQE.js} +1 -1
- package/dist/assets/{index-CXrWwFX6.js → index-vmICa5KN.js} +1 -1
- package/dist/assets/{index-BH7f3aiU.js → index-z9bohSQJ.js} +1 -1
- package/dist/assets/infoDiagram-STP46IZ2-CVyrdLc8.js +2 -0
- package/dist/assets/{isEmpty-D1t7Gran.js → isEmpty-DU_ogP_D.js} +1 -1
- package/dist/assets/{journeyDiagram-BIP6EPQ6-D4Rp6H_h.js → journeyDiagram-BIP6EPQ6-C6EgLP_Q.js} +1 -1
- package/dist/assets/{kanban-definition-6OIFK2YF-DFt9DftA.js → kanban-definition-6OIFK2YF-BXzYO1yj.js} +1 -1
- package/dist/assets/{layout-D8WXi2_g.js → layout-jihVw5-i.js} +1 -1
- package/dist/assets/{linear-BwY8e5hA.js → linear-C4blANlC.js} +1 -1
- package/dist/assets/links-D59GIweI.js +7 -0
- package/dist/assets/{logs-panel-Dxiyt7dO.js → logs-panel-D401qzZh.js} +1 -1
- package/dist/assets/{markdown-renderer-VDu-NBKB.js → markdown-renderer-Cd9eYyaL.js} +20 -20
- package/dist/assets/{mermaid-B-O-Puyi.js → mermaid-BEVuRz_O.js} +1 -1
- package/dist/assets/{mermaid.core-BFFCqfOn.js → mermaid.core-CaSnaLH0.js} +4 -4
- package/dist/assets/min-DUMu_zeK.js +1 -0
- package/dist/assets/{mindmap-definition-Q6HEUPPD-kyvIY8Dg.js → mindmap-definition-Q6HEUPPD-BXUM5MT2.js} +1 -1
- package/dist/assets/{number-overlay-editor-GjLB2UK4.js → number-overlay-editor-4uWXGlPG.js} +1 -1
- package/dist/assets/outline-panel-DIzkvm2I.js +1 -0
- package/dist/assets/{packages-panel-nfXB-bKW.js → packages-panel-CJL0MVlj.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-D8JFQcWR.js → pieDiagram-ADFJNKIX-Dxt5PVNo.js} +1 -1
- package/dist/assets/{quadrantDiagram-LMRXKWRM-Nf8GzxXG.js → quadrantDiagram-LMRXKWRM-D4pUaA31.js} +1 -1
- package/dist/assets/{react-plotly-CnW9p7ZA.js → react-plotly-cJZ0VWBq.js} +1 -1
- package/dist/assets/{requirementDiagram-4UW4RH46-CCUxF8BZ.js → requirementDiagram-4UW4RH46-DVRTjgas.js} +1 -1
- package/dist/assets/{run-page-Bl4p3AbZ.js → run-page-BUEnMC9w.js} +1 -1
- package/dist/assets/{sankeyDiagram-GR3RE2ED-Sr8kDwP1.js → sankeyDiagram-GR3RE2ED-CVFnD9C-.js} +1 -1
- package/dist/assets/{scratchpad-panel-Ja1Mu-W3.js → scratchpad-panel-BIgRENkI.js} +1 -1
- package/dist/assets/{secrets-panel-B-3fcSyP.js → secrets-panel-xY5-V_BD.js} +1 -1
- package/dist/assets/{sequenceDiagram-C3RYC4MD-CBJ152Q3.js → sequenceDiagram-C3RYC4MD-_lY4ZN_S.js} +1 -1
- package/dist/assets/{slides-component-C-LoGC1U.css → slides-component-DMjQomc3.css} +1 -1
- package/dist/assets/{slides-component-DGtsVP5o.js → slides-component-Xjymwj7X.js} +1 -1
- package/dist/assets/snippets-panel-CTPYW41n.js +1 -0
- package/dist/assets/sortBy-BNZKwiq_.js +1 -0
- package/dist/assets/{state-B_RCHTH5.js → state-C4NiC9tO.js} +1 -1
- package/dist/assets/{stateDiagram-KXAO66HF-BlBFSAZr.js → stateDiagram-KXAO66HF-Da0JQWCn.js} +1 -1
- package/dist/assets/stateDiagram-v2-UMBNRL4Z-D5lYZOOt.js +1 -0
- package/dist/assets/storage-CMdLzB_c.js +26 -0
- package/dist/assets/{terminal-CATzv5Hd.js → terminal-BPwTkXae.js} +1 -1
- package/dist/assets/{time-CsYqILfB.js → time-Dv5_Ouz_.js} +1 -1
- package/dist/assets/{timeline-definition-XQNQX7LJ-CGrhjuAs.js → timeline-definition-XQNQX7LJ-Dxh5Zu2e.js} +1 -1
- package/dist/assets/tracing-BCIurUfa.js +2 -0
- package/dist/assets/{tracing-panel-DmzqPUtc.js → tracing-panel-DAzrzNmm.js} +2 -2
- package/dist/assets/{trash-rxdjLzkf.js → trash-Dc6DSjz_.js} +1 -1
- package/dist/assets/{tree-C2Ul1h1C.js → tree-jheoerAX.js} +1 -1
- package/dist/assets/{treemap-75Q7IDZK-N9hyUpyj.js → treemap-75Q7IDZK-IgpxeGaf.js} +27 -27
- package/dist/assets/variable-panel-DYAiLBmF.js +1 -0
- package/dist/assets/{vega-component-CR_MHOBT.js → vega-component-BpfpiPKI.js} +1 -1
- package/dist/assets/worker-X5rxzQGQ.js +1 -0
- package/dist/assets/{xychartDiagram-6GGTOJPD-jdLZsMb2.js → xychartDiagram-6GGTOJPD-CmNigJ31.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +2 -3
- package/src/components/app-config/user-config-form.tsx +1 -46
- package/src/components/chat/acp/__tests__/__snapshots__/prompt.test.ts.snap +43 -62
- package/src/components/chat/acp/__tests__/atoms.test.ts +1 -1
- package/src/components/chat/acp/__tests__/state.test.ts +36 -36
- package/src/components/chat/acp/agent-panel.tsx +27 -24
- package/src/components/chat/acp/blocks.tsx +6 -6
- package/src/components/chat/acp/prompt.ts +43 -62
- package/src/components/chat/chat-panel.tsx +1 -5
- package/src/components/chat/markdown-renderer.tsx +10 -6
- package/src/components/chat/tool-call-accordion.tsx +20 -52
- package/src/components/data-table/SearchBar.tsx +7 -8
- package/src/components/data-table/__tests__/column_formatting.test.ts +35 -50
- package/src/components/data-table/__tests__/data-table.test.tsx +1 -39
- package/src/components/data-table/charts/components/form-fields.tsx +37 -41
- package/src/components/data-table/charts/forms/common-chart.tsx +2 -2
- package/src/components/data-table/column-explorer-panel/column-explorer.tsx +2 -5
- package/src/components/data-table/column-formatting/feature.ts +29 -62
- package/src/components/data-table/column-formatting/types.ts +0 -1
- package/src/components/data-table/column-header.tsx +1 -3
- package/src/components/data-table/column-summary/chart-spec-model.tsx +7 -24
- package/src/components/data-table/column-summary/column-summary.tsx +9 -18
- package/src/components/data-table/columns.tsx +18 -42
- package/src/components/data-table/data-table.tsx +2 -10
- package/src/components/data-table/date-popover.tsx +75 -85
- package/src/components/data-table/filter-pills.tsx +9 -14
- package/src/components/data-table/header-items.tsx +1 -5
- package/src/components/data-table/pagination.tsx +13 -20
- package/src/components/data-table/renderers.tsx +0 -28
- package/src/components/data-table/row-viewer-panel/row-viewer.tsx +8 -10
- package/src/components/datasources/column-preview.tsx +2 -6
- package/src/components/datasources/datasources.tsx +12 -8
- package/src/components/editor/ai/transport/chat-transport.tsx +1 -4
- package/src/components/editor/cell/CellStatus.tsx +20 -23
- package/src/components/editor/cell/CreateCellButton.tsx +4 -3
- package/src/components/editor/cell/code/language-toggle.tsx +4 -3
- package/src/components/editor/chrome/wrapper/footer-items/machine-stats.tsx +28 -39
- package/src/components/editor/controls/notebook-menu-dropdown.tsx +2 -4
- package/src/components/editor/file-tree/requesting-tree.tsx +8 -14
- package/src/components/editor/renderers/CellArray.tsx +4 -3
- package/src/components/editor/renderers/slides-layout/slides-layout.tsx +3 -3
- package/src/components/editor/renderers/slides-layout/types.ts +0 -1
- package/src/components/pages/home-page.tsx +1 -4
- package/src/components/slides/slides-component.tsx +1 -1
- package/src/components/slides/slides.css +0 -6
- package/src/components/terminal/theme.tsx +0 -1
- package/src/components/tracing/tracing-spec.ts +4 -5
- package/src/components/ui/range-slider.tsx +2 -4
- package/src/components/ui/slider.tsx +1 -3
- package/src/components/variables/variables-table.tsx +0 -3
- package/src/core/MarimoApp.tsx +6 -9
- package/src/core/ai/context/__tests__/registry.test.ts +4 -6
- package/src/core/ai/context/providers/cell-output.ts +2 -3
- package/src/core/ai/context/providers/error.ts +1 -3
- package/src/core/ai/context/providers/file.ts +2 -7
- package/src/core/ai/context/providers/tables.ts +2 -3
- package/src/core/ai/context/providers/variable.ts +4 -6
- package/src/core/cells/logs.ts +1 -1
- package/src/core/codemirror/find-replace/search-highlight.ts +1 -3
- package/src/core/codemirror/language/LanguageAdapters.ts +3 -9
- package/src/core/codemirror/lsp/notebook-lsp.ts +2 -8
- package/src/core/codemirror/readonly/__tests__/extension.test.ts +1 -1
- package/src/core/codemirror/rtc/loro/awareness.ts +17 -52
- package/src/core/codemirror/rtc/loro/sync.ts +4 -12
- package/src/core/config/config-schema.ts +0 -1
- package/src/core/config/config.ts +0 -4
- package/src/core/hotkeys/hotkeys.ts +4 -8
- package/src/core/islands/components/web-components.tsx +10 -13
- package/src/core/kernel/RuntimeState.ts +1 -4
- package/src/core/kernel/messages.ts +2 -2
- package/src/core/network/DeferredRequestRegistry.ts +4 -16
- package/src/core/runtime/runtime.ts +4 -5
- package/src/core/wasm/bridge.ts +1 -5
- package/src/core/wasm/store.ts +1 -4
- package/src/core/wasm/worker/message-buffer.ts +2 -3
- package/src/core/websocket/types.ts +16 -22
- package/src/hooks/useTimer.ts +5 -8
- package/src/plugins/core/registerReactComponent.tsx +10 -16
- package/src/plugins/impl/DataTablePlugin.tsx +0 -4
- package/src/plugins/impl/RangeSliderPlugin.tsx +3 -5
- package/src/plugins/impl/SliderPlugin.tsx +1 -3
- package/src/plugins/impl/anywidget/model.ts +5 -16
- package/src/plugins/impl/data-editor/types.ts +5 -7
- package/src/plugins/impl/data-explorer/components/column-summary.tsx +13 -20
- package/src/plugins/impl/panel/utils.ts +4 -6
- package/src/plugins/layout/StatPlugin.tsx +1 -4
- package/src/plugins/plugins.ts +0 -2
- package/src/utils/__tests__/dates.test.ts +24 -45
- package/src/utils/__tests__/numbers.test.ts +30 -42
- package/src/utils/dates.ts +10 -15
- package/src/utils/edit-distance.ts +6 -8
- package/src/utils/errors.ts +1 -1
- package/src/utils/id-tree.tsx +10 -21
- package/src/utils/localStorage.ts +4 -13
- package/src/utils/numbers.ts +11 -11
- package/src/utils/once.ts +0 -32
- package/src/utils/paths.ts +1 -4
- package/src/utils/pluralize.ts +5 -12
- package/src/utils/python-poet/poet.ts +15 -30
- package/src/utils/time.ts +1 -5
- package/dist/assets/ConnectedDataExplorerComponent-CNLoZkWr.js +0 -19
- package/dist/assets/_baseEach-9_logFrf.js +0 -1
- package/dist/assets/_baseMap-NzEbKt5c.js +0 -1
- package/dist/assets/_baseUniq-C5LFcyNC.js +0 -1
- package/dist/assets/channel-DHcKBVM4.js +0 -1
- package/dist/assets/chat-panel-DgJZr0eS.js +0 -3
- package/dist/assets/classDiagram-KNZD7YFC-D-xwLnlX.js +0 -1
- package/dist/assets/classDiagram-v2-RKCZMP56-D-xwLnlX.js +0 -1
- package/dist/assets/clone-CSxIll62.js +0 -1
- package/dist/assets/datasources-panel-Bt41Zir-.js +0 -1
- package/dist/assets/edit-page-CyTMQV2u.js +0 -129
- package/dist/assets/file-explorer-panel-Oy9DbyFP.js +0 -1
- package/dist/assets/home-page-Bvwppn9N.js +0 -9
- package/dist/assets/index-DadI618h.css +0 -1
- package/dist/assets/index-PmY0x4Zd.js +0 -578
- package/dist/assets/infoDiagram-STP46IZ2-CAuVVehw.js +0 -2
- package/dist/assets/links-4B6ldZ5P.js +0 -7
- package/dist/assets/min-DtVSfYKl.js +0 -1
- package/dist/assets/outline-panel-CMJjOoN7.js +0 -1
- package/dist/assets/snippets-panel-ClNnwKBM.js +0 -1
- package/dist/assets/sortBy-D47H6Vyl.js +0 -1
- package/dist/assets/stateDiagram-v2-UMBNRL4Z-DbA-iToo.js +0 -1
- package/dist/assets/storage-BNcWOH3-.js +0 -26
- package/dist/assets/tracing-DUbJtOyq.js +0 -2
- package/dist/assets/variable-panel-BbgupOdG.js +0 -1
- package/dist/assets/worker-fHbtoWvT.js +0 -1
- package/src/components/data-table/cell-hover-template/feature.ts +0 -14
- package/src/components/data-table/cell-hover-template/types.ts +0 -11
- package/src/core/i18n/__tests__/locale-provider.test.tsx +0 -176
- package/src/core/i18n/locale-provider.tsx +0 -35
- package/src/core/i18n/with-locale.tsx +0 -12
- package/src/hooks/useFormatting.ts +0 -97
- package/src/plugins/layout/OutlinePlugin.tsx +0 -69
- package/src/utils/__tests__/once.test.ts +0 -187
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=1e3;function t(e,t){const n=e.map(e=>`"${e}"`).join(", ");return new Error(`This RPC instance cannot ${t} because the transport did not provide one or more of these methods: ${n}`)}function n(n={}){let r={};function s(e){r=e}let a,i={};function o(e){i.unregisterHandler&&i.unregisterHandler(),i=e,i.registerHandler?.(k)}function d(e){a="function"!=typeof e?(t,n)=>{const r=e[t];if(r)return r(n);const s=e._;if(!s)throw new Error(`The requested method has no handler: ${t}`);return s(t,n)}:e}const{maxRequestTime:c=e}=n;n.transport&&o(n.transport),n.requestHandler&&d(n.requestHandler),n._debugHooks&&s(n._debugHooks);let u=0;const l=new Map,p=new Map;function h(e,...n){const s=n[0];return new Promise((n,a)=>{if(!i.send)throw t(["send"],"make requests");const o=u<=1e10?++u:u=0,d={type:"request",id:o,method:e,params:s};l.set(o,{resolve:n,reject:a}),c!==1/0&&p.set(o,setTimeout(()=>{p.delete(o),a(new Error("RPC request timed out."))},c)),r.onSend?.(d),i.send(d)})}const m=new Proxy(h,{get:(e,t,n)=>t in e?Reflect.get(e,t,n):e=>h(t,e)}),f=m;function y(e,...n){const s=n[0];if(!i.send)throw t(["send"],"send messages");const a={type:"message",id:e,payload:s};r.onSend?.(a),i.send(a)}const g=new Proxy(y,{get:(e,t,n)=>t in e?Reflect.get(e,t,n):e=>y(t,e)}),_=g,v=new Map,w=new Set;async function k(e){if(r.onReceive?.(e),!("type"in e))throw new Error("Message does not contain a type.");if("request"===e.type){if(!i.send||!a)throw t(["send","requestHandler"],"handle requests");const{id:s,method:o,params:d}=e;let c;try{c={type:"response",id:s,success:!0,payload:await a(o,d)}}catch(n){if(!(n instanceof Error))throw n;c={type:"response",id:s,success:!1,error:n.message}}return r.onSend?.(c),void i.send(c)}if("response"===e.type){const t=p.get(e.id);null!=t&&clearTimeout(t);const{resolve:n,reject:r}=l.get(e.id)??{};return void(e.success?n?.(e.payload):r?.(new Error(e.error)))}if("message"===e.type){for(const n of w)n(e.id,e.payload);const t=v.get(e.id);if(!t)return;for(const n of t)n(e.payload);return}throw new Error(`Unexpected RPC message type: ${e.type}`)}return{setTransport:o,setRequestHandler:d,request:m,requestProxy:f,send:g,sendProxy:_,addMessageListener:function(e,n){if(!i.registerHandler)throw t(["registerHandler"],"register message listeners");"*"!==e?(v.has(e)||v.set(e,new Set),v.get(e)?.add(n)):w.add(n)},removeMessageListener:function(e,t){"*"!==e?(v.get(e)?.delete(t),0===v.get(e)?.size&&v.delete(e)):w.delete(t)},proxy:{send:_,request:f},_setDebugHooks:s}}const r="[transport-id]";function s(e,t={}){const{transportId:n,filter:s,remotePort:a}=t,i=e,o=a??e;let d;return{send(e){o.postMessage(function(e,t){const{transportId:n}=t;return null!=n?{[r]:n,data:e}:e}(e,{transportId:n}))},registerHandler(e){d=t=>{const a=t.data,[i,o]=function(e,t){const{transportId:n,filter:s}=t,a=s?.();if(null!=n&&null!=a)throw new Error("Cannot use both `transportId` and `filter` at the same time");let i=e;if(n){if(e[r]!==n)return[!0];i=e.data}return!1===a?[!0]:[!1,i]}(a,{transportId:n,filter:()=>s?.(t)});i||e(o)},i.addEventListener("message",d)},unregisterHandler(){d&&i.removeEventListener("message",d)}}}function a(e,t){if(!e)throw new Error(t)}const i=()=>{},o=(e,t)=>{const n=`[${e}]`;return{debug:(...e)=>console.debug(n,...e),log:(...e)=>t.log(n,...e),warn:(...e)=>t.warn(n,...e),error:(...e)=>t.error(n,...e),trace:(...e)=>t.trace(n,...e),get:n=>o(`${e}:${n}`,t),disabled:(e=!0)=>e?c:t}},d={debug:(...e)=>{console.debug(...e)},log:(...e)=>{console.log(...e)},warn:(...e)=>{console.warn(...e)},error:(...e)=>{console.error(...e)},trace:(...e)=>{console.trace(...e)},get:e=>o(`marimo:${e}`,d),disabled:(e=!0)=>e?c:d},c={debug:()=>i,log:()=>i,warn:()=>i,error:()=>i,trace:()=>i,get:()=>c,disabled:()=>c};const u="undefined"!=typeof window&&window.Logger||d,l=e=>(new TextDecoder).decode(e);var p,h;!function(e){e.assertEqual=e=>{},e.assertIs=function(e){},e.assertNever=function(e){throw new Error},e.arrayToEnum=e=>{const t={};for(const n of e)t[n]=n;return t},e.getValidEnumValues=t=>{const n=e.objectKeys(t).filter(e=>"number"!=typeof t[t[e]]),r={};for(const e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys="function"==typeof Object.keys?e=>Object.keys(e):e=>{const t=[];for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(const n of e)if(t(n))return n},e.isInteger="function"==typeof Number.isInteger?e=>Number.isInteger(e):e=>"number"==typeof e&&Number.isFinite(e)&&Math.floor(e)===e,e.joinValues=function(e,t=" | "){return e.map(e=>"string"==typeof e?`'${e}'`:e).join(t)},e.jsonStringifyReplacer=(e,t)=>"bigint"==typeof t?t.toString():t}(p||(p={})),function(e){e.mergeShapes=(e,t)=>({...e,...t})}(h||(h={}));const m=p.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),f=e=>{switch(typeof e){case"undefined":return m.undefined;case"string":return m.string;case"number":return Number.isNaN(e)?m.nan:m.number;case"boolean":return m.boolean;case"function":return m.function;case"bigint":return m.bigint;case"symbol":return m.symbol;case"object":return Array.isArray(e)?m.array:null===e?m.null:e.then&&"function"==typeof e.then&&e.catch&&"function"==typeof e.catch?m.promise:"undefined"!=typeof Map&&e instanceof Map?m.map:"undefined"!=typeof Set&&e instanceof Set?m.set:"undefined"!=typeof Date&&e instanceof Date?m.date:m.object;default:return m.unknown}},y=p.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class g extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};const t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){const t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(const s of e.issues)if("invalid_union"===s.code)s.unionErrors.map(r);else if("invalid_return_type"===s.code)r(s.returnTypeError);else if("invalid_arguments"===s.code)r(s.argumentsError);else if(0===s.path.length)n._errors.push(t(s));else{let e=n,r=0;for(;r<s.path.length;){const n=s.path[r];r===s.path.length-1?(e[n]=e[n]||{_errors:[]},e[n]._errors.push(t(s))):e[n]=e[n]||{_errors:[]},e=e[n],r++}}};return r(this),n}static assert(e){if(!(e instanceof g))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,p.jsonStringifyReplacer,2)}get isEmpty(){return 0===this.issues.length}flatten(e=e=>e.message){const t={},n=[];for(const r of this.issues)if(r.path.length>0){const n=r.path[0];t[n]=t[n]||[],t[n].push(e(r))}else n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}}g.create=e=>new g(e);const _=(e,t)=>{let n;switch(e.code){case y.invalid_type:n=e.received===m.undefined?"Required":`Expected ${e.expected}, received ${e.received}`;break;case y.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,p.jsonStringifyReplacer)}`;break;case y.unrecognized_keys:n=`Unrecognized key(s) in object: ${p.joinValues(e.keys,", ")}`;break;case y.invalid_union:n="Invalid input";break;case y.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${p.joinValues(e.options)}`;break;case y.invalid_enum_value:n=`Invalid enum value. Expected ${p.joinValues(e.options)}, received '${e.received}'`;break;case y.invalid_arguments:n="Invalid function arguments";break;case y.invalid_return_type:n="Invalid function return type";break;case y.invalid_date:n="Invalid date";break;case y.invalid_string:"object"==typeof e.validation?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,"number"==typeof e.validation.position&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:p.assertNever(e.validation):n="regex"!==e.validation?`Invalid ${e.validation}`:"Invalid";break;case y.too_small:n="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:"number"===e.type||"bigint"===e.type?`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:"date"===e.type?`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:"Invalid input";break;case y.too_big:n="array"===e.type?`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:"string"===e.type?`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:"number"===e.type?`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"bigint"===e.type?`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:"date"===e.type?`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:"Invalid input";break;case y.custom:n="Invalid input";break;case y.invalid_intersection_types:n="Intersection results could not be merged";break;case y.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case y.not_finite:n="Number must be finite";break;default:n=t.defaultError,p.assertNever(e)}return{message:n}};let v=_;function w(e,t){const n=v,r=(e=>{const{data:t,path:n,errorMaps:r,issueData:s}=e,a=[...n,...s.path||[]],i={...s,path:a};if(void 0!==s.message)return{...s,path:a,message:s.message};let o="";const d=r.filter(e=>!!e).slice().reverse();for(const c of d)o=c(i,{data:t,defaultError:o}).message;return{...s,path:a,message:o}})({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===_?void 0:_].filter(e=>!!e)});e.common.issues.push(r)}class k{constructor(){this.value="valid"}dirty(){"valid"===this.value&&(this.value="dirty")}abort(){"aborted"!==this.value&&(this.value="aborted")}static mergeArray(e,t){const n=[];for(const r of t){if("aborted"===r.status)return b;"dirty"===r.status&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(e,t){const n=[];for(const r of t){const e=await r.key,t=await r.value;n.push({key:e,value:t})}return k.mergeObjectSync(e,n)}static mergeObjectSync(e,t){const n={};for(const r of t){const{key:t,value:s}=r;if("aborted"===t.status)return b;if("aborted"===s.status)return b;"dirty"===t.status&&e.dirty(),"dirty"===s.status&&e.dirty(),"__proto__"===t.value||void 0===s.value&&!r.alwaysSet||(n[t.value]=s.value)}return{status:e.value,value:n}}}const b=Object.freeze({status:"aborted"}),x=e=>({status:"dirty",value:e}),S=e=>({status:"valid",value:e}),O=e=>"aborted"===e.status,T=e=>"dirty"===e.status,E=e=>"valid"===e.status,N=e=>"undefined"!=typeof Promise&&e instanceof Promise;var P;!function(e){e.errToObj=e=>"string"==typeof e?{message:e}:e||{},e.toString=e=>"string"==typeof e?e:e?.message}(P||(P={}));class j{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const A=(e,t)=>{if(E(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const t=new g(e.common.issues);return this._error=t,this._error}}};function C(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:s}=e;if(t&&(n||r))throw new Error('Can\'t use "invalid_type_error" or "required_error" in conjunction with custom error map.');if(t)return{errorMap:t,description:s};return{errorMap:(t,s)=>{const{message:a}=e;return"invalid_enum_value"===t.code?{message:a??s.defaultError}:void 0===s.data?{message:a??r??s.defaultError}:"invalid_type"!==t.code?{message:s.defaultError}:{message:a??n??s.defaultError}},description:s}}class Z{get description(){return this._def.description}_getType(e){return f(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:f(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new k,ctx:{common:e.parent.common,data:e.data,parsedType:f(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(N(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){const n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:f(e)},r=this._parseSync({data:e,path:n.path,parent:n});return A(n,r)}"~validate"(e){const t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:f(e)};if(!this["~standard"].async)try{const n=this._parseSync({data:e,path:[],parent:t});return E(n)?{value:n.value}:{issues:t.common.issues}}catch(n){n?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>E(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){const n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){const n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:f(e)},r=this._parse({data:e,path:n.path,parent:n}),s=await(N(r)?r:Promise.resolve(r));return A(n,s)}refine(e,t){const n=e=>"string"==typeof t||void 0===t?{message:t}:"function"==typeof t?t(e):t;return this._refinement((t,r)=>{const s=e(t),a=()=>r.addIssue({code:y.custom,...n(t)});return"undefined"!=typeof Promise&&s instanceof Promise?s.then(e=>!!e||(a(),!1)):!!s||(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>!!e(n)||(r.addIssue("function"==typeof t?t(n,r):t),!1))}_refinement(e){return new Ae({schema:this,typeName:De.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:e=>this["~validate"](e)}}optional(){return Ce.create(this,this._def)}nullable(){return Ze.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ye.create(this)}promise(){return je.create(this,this._def)}or(e){return ve.create([this,e],this._def)}and(e){return ke.create(this,e,this._def)}transform(e){return new Ae({...C(this._def),schema:this,typeName:De.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t="function"==typeof e?e:()=>e;return new Fe({...C(this._def),innerType:this,defaultValue:t,typeName:De.ZodDefault})}brand(){return new Re({typeName:De.ZodBranded,type:this,...C(this._def)})}catch(e){const t="function"==typeof e?e:()=>e;return new Ie({...C(this._def),innerType:this,catchValue:t,typeName:De.ZodCatch})}describe(e){return new(0,this.constructor)({...this._def,description:e})}pipe(e){return Le.create(this,e)}readonly(){return Me.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const F=/^c[^\s-]{8,}$/i,I=/^[0-9a-z]+$/,$=/^[0-9A-HJKMNP-TV-Z]{26}$/i,R=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,L=/^[a-z0-9_-]{21}$/i,M=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,D=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,z=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i;let q;const U=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,V=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,H=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,B=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,W=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,K=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,J="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Y=new RegExp(`^${J}$`);function G(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:null==e.precision&&(t=`${t}(\\.\\d+)?`);return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${e.precision?"+":"?"}`}function X(e){return new RegExp(`^${G(e)}$`)}function Q(e){let t=`${J}T${G(e)}`;const n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function ee(e,t){return!("v4"!==t&&t||!U.test(e))||!("v6"!==t&&t||!H.test(e))}function te(e,t){if(!M.test(e))return!1;try{const[n]=e.split(".");if(!n)return!1;const r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return"object"==typeof s&&null!==s&&((!("typ"in s)||"JWT"===s?.typ)&&(!!s.alg&&(!t||s.alg===t)))}catch{return!1}}function ne(e,t){return!("v4"!==t&&t||!V.test(e))||!("v6"!==t&&t||!B.test(e))}class re extends Z{_parse(e){this._def.coerce&&(e.data=String(e.data));if(this._getType(e)!==m.string){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.string,received:t.parsedType}),b}const t=new k;let n;for(const r of this._def.checks)if("min"===r.kind)e.data.length<r.value&&(n=this._getOrReturnCtx(e,n),w(n,{code:y.too_small,minimum:r.value,type:"string",inclusive:!0,exact:!1,message:r.message}),t.dirty());else if("max"===r.kind)e.data.length>r.value&&(n=this._getOrReturnCtx(e,n),w(n,{code:y.too_big,maximum:r.value,type:"string",inclusive:!0,exact:!1,message:r.message}),t.dirty());else if("length"===r.kind){const s=e.data.length>r.value,a=e.data.length<r.value;(s||a)&&(n=this._getOrReturnCtx(e,n),s?w(n,{code:y.too_big,maximum:r.value,type:"string",inclusive:!0,exact:!0,message:r.message}):a&&w(n,{code:y.too_small,minimum:r.value,type:"string",inclusive:!0,exact:!0,message:r.message}),t.dirty())}else if("email"===r.kind)z.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"email",code:y.invalid_string,message:r.message}),t.dirty());else if("emoji"===r.kind)q||(q=new RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),q.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"emoji",code:y.invalid_string,message:r.message}),t.dirty());else if("uuid"===r.kind)R.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"uuid",code:y.invalid_string,message:r.message}),t.dirty());else if("nanoid"===r.kind)L.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"nanoid",code:y.invalid_string,message:r.message}),t.dirty());else if("cuid"===r.kind)F.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"cuid",code:y.invalid_string,message:r.message}),t.dirty());else if("cuid2"===r.kind)I.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"cuid2",code:y.invalid_string,message:r.message}),t.dirty());else if("ulid"===r.kind)$.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"ulid",code:y.invalid_string,message:r.message}),t.dirty());else if("url"===r.kind)try{new URL(e.data)}catch{n=this._getOrReturnCtx(e,n),w(n,{validation:"url",code:y.invalid_string,message:r.message}),t.dirty()}else if("regex"===r.kind){r.regex.lastIndex=0;r.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"regex",code:y.invalid_string,message:r.message}),t.dirty())}else if("trim"===r.kind)e.data=e.data.trim();else if("includes"===r.kind)e.data.includes(r.value,r.position)||(n=this._getOrReturnCtx(e,n),w(n,{code:y.invalid_string,validation:{includes:r.value,position:r.position},message:r.message}),t.dirty());else if("toLowerCase"===r.kind)e.data=e.data.toLowerCase();else if("toUpperCase"===r.kind)e.data=e.data.toUpperCase();else if("startsWith"===r.kind)e.data.startsWith(r.value)||(n=this._getOrReturnCtx(e,n),w(n,{code:y.invalid_string,validation:{startsWith:r.value},message:r.message}),t.dirty());else if("endsWith"===r.kind)e.data.endsWith(r.value)||(n=this._getOrReturnCtx(e,n),w(n,{code:y.invalid_string,validation:{endsWith:r.value},message:r.message}),t.dirty());else if("datetime"===r.kind){Q(r).test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{code:y.invalid_string,validation:"datetime",message:r.message}),t.dirty())}else if("date"===r.kind){Y.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{code:y.invalid_string,validation:"date",message:r.message}),t.dirty())}else if("time"===r.kind){X(r).test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{code:y.invalid_string,validation:"time",message:r.message}),t.dirty())}else"duration"===r.kind?D.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"duration",code:y.invalid_string,message:r.message}),t.dirty()):"ip"===r.kind?ee(e.data,r.version)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"ip",code:y.invalid_string,message:r.message}),t.dirty()):"jwt"===r.kind?te(e.data,r.alg)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"jwt",code:y.invalid_string,message:r.message}),t.dirty()):"cidr"===r.kind?ne(e.data,r.version)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"cidr",code:y.invalid_string,message:r.message}),t.dirty()):"base64"===r.kind?W.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"base64",code:y.invalid_string,message:r.message}),t.dirty()):"base64url"===r.kind?K.test(e.data)||(n=this._getOrReturnCtx(e,n),w(n,{validation:"base64url",code:y.invalid_string,message:r.message}),t.dirty()):p.assertNever(r);return{status:t.value,value:e.data}}_regex(e,t,n){return this.refinement(t=>e.test(t),{validation:t,code:y.invalid_string,...P.errToObj(n)})}_addCheck(e){return new re({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...P.errToObj(e)})}url(e){return this._addCheck({kind:"url",...P.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...P.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...P.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...P.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...P.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...P.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...P.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...P.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...P.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...P.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...P.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...P.errToObj(e)})}datetime(e){return"string"==typeof e?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:void 0===e?.precision?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...P.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return"string"==typeof e?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:void 0===e?.precision?null:e?.precision,...P.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...P.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...P.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...P.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...P.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...P.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...P.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...P.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...P.errToObj(t)})}nonempty(e){return this.min(1,P.errToObj(e))}trim(){return new re({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new re({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new re({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>"datetime"===e.kind)}get isDate(){return!!this._def.checks.find(e=>"date"===e.kind)}get isTime(){return!!this._def.checks.find(e=>"time"===e.kind)}get isDuration(){return!!this._def.checks.find(e=>"duration"===e.kind)}get isEmail(){return!!this._def.checks.find(e=>"email"===e.kind)}get isURL(){return!!this._def.checks.find(e=>"url"===e.kind)}get isEmoji(){return!!this._def.checks.find(e=>"emoji"===e.kind)}get isUUID(){return!!this._def.checks.find(e=>"uuid"===e.kind)}get isNANOID(){return!!this._def.checks.find(e=>"nanoid"===e.kind)}get isCUID(){return!!this._def.checks.find(e=>"cuid"===e.kind)}get isCUID2(){return!!this._def.checks.find(e=>"cuid2"===e.kind)}get isULID(){return!!this._def.checks.find(e=>"ulid"===e.kind)}get isIP(){return!!this._def.checks.find(e=>"ip"===e.kind)}get isCIDR(){return!!this._def.checks.find(e=>"cidr"===e.kind)}get isBase64(){return!!this._def.checks.find(e=>"base64"===e.kind)}get isBase64url(){return!!this._def.checks.find(e=>"base64url"===e.kind)}get minLength(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}function se(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,s=n>r?n:r;return Number.parseInt(e.toFixed(s).replace(".",""))%Number.parseInt(t.toFixed(s).replace(".",""))/10**s}re.create=e=>new re({checks:[],typeName:De.ZodString,coerce:e?.coerce??!1,...C(e)});class ae extends Z{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){this._def.coerce&&(e.data=Number(e.data));if(this._getType(e)!==m.number){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.number,received:t.parsedType}),b}let t;const n=new k;for(const r of this._def.checks)if("int"===r.kind)p.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),w(t,{code:y.invalid_type,expected:"integer",received:"float",message:r.message}),n.dirty());else if("min"===r.kind){(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),w(t,{code:y.too_small,minimum:r.value,type:"number",inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty())}else if("max"===r.kind){(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),w(t,{code:y.too_big,maximum:r.value,type:"number",inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty())}else"multipleOf"===r.kind?0!==se(e.data,r.value)&&(t=this._getOrReturnCtx(e,t),w(t,{code:y.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):"finite"===r.kind?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),w(t,{code:y.not_finite,message:r.message}),n.dirty()):p.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,P.toString(t))}gt(e,t){return this.setLimit("min",e,!1,P.toString(t))}lte(e,t){return this.setLimit("max",e,!0,P.toString(t))}lt(e,t){return this.setLimit("max",e,!1,P.toString(t))}setLimit(e,t,n,r){return new ae({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:P.toString(r)}]})}_addCheck(e){return new ae({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:P.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:P.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:P.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:P.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:P.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:P.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:P.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:P.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:P.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>"int"===e.kind||"multipleOf"===e.kind&&p.isInteger(e.value))}get isFinite(){let e=null,t=null;for(const n of this._def.checks){if("finite"===n.kind||"int"===n.kind||"multipleOf"===n.kind)return!0;"min"===n.kind?(null===t||n.value>t)&&(t=n.value):"max"===n.kind&&(null===e||n.value<e)&&(e=n.value)}return Number.isFinite(t)&&Number.isFinite(e)}}ae.create=e=>new ae({checks:[],typeName:De.ZodNumber,coerce:e?.coerce||!1,...C(e)});class ie extends Z{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==m.bigint)return this._getInvalidInput(e);let t;const n=new k;for(const r of this._def.checks)if("min"===r.kind){(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),w(t,{code:y.too_small,type:"bigint",minimum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty())}else if("max"===r.kind){(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),w(t,{code:y.too_big,type:"bigint",maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty())}else"multipleOf"===r.kind?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),w(t,{code:y.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):p.assertNever(r);return{status:n.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.bigint,received:t.parsedType}),b}gte(e,t){return this.setLimit("min",e,!0,P.toString(t))}gt(e,t){return this.setLimit("min",e,!1,P.toString(t))}lte(e,t){return this.setLimit("max",e,!0,P.toString(t))}lt(e,t){return this.setLimit("max",e,!1,P.toString(t))}setLimit(e,t,n,r){return new ie({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:n,message:P.toString(r)}]})}_addCheck(e){return new ie({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:P.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:P.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:P.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:P.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:P.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return e}}ie.create=e=>new ie({checks:[],typeName:De.ZodBigInt,coerce:e?.coerce??!1,...C(e)});class oe extends Z{_parse(e){this._def.coerce&&(e.data=Boolean(e.data));if(this._getType(e)!==m.boolean){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.boolean,received:t.parsedType}),b}return S(e.data)}}oe.create=e=>new oe({typeName:De.ZodBoolean,coerce:e?.coerce||!1,...C(e)});class de extends Z{_parse(e){this._def.coerce&&(e.data=new Date(e.data));if(this._getType(e)!==m.date){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.date,received:t.parsedType}),b}if(Number.isNaN(e.data.getTime())){return w(this._getOrReturnCtx(e),{code:y.invalid_date}),b}const t=new k;let n;for(const r of this._def.checks)"min"===r.kind?e.data.getTime()<r.value&&(n=this._getOrReturnCtx(e,n),w(n,{code:y.too_small,message:r.message,inclusive:!0,exact:!1,minimum:r.value,type:"date"}),t.dirty()):"max"===r.kind?e.data.getTime()>r.value&&(n=this._getOrReturnCtx(e,n),w(n,{code:y.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:"date"}),t.dirty()):p.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(e){return new de({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:P.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:P.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks)"min"===t.kind&&(null===e||t.value>e)&&(e=t.value);return null!=e?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks)"max"===t.kind&&(null===e||t.value<e)&&(e=t.value);return null!=e?new Date(e):null}}de.create=e=>new de({checks:[],coerce:e?.coerce||!1,typeName:De.ZodDate,...C(e)});class ce extends Z{_parse(e){if(this._getType(e)!==m.symbol){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.symbol,received:t.parsedType}),b}return S(e.data)}}ce.create=e=>new ce({typeName:De.ZodSymbol,...C(e)});class ue extends Z{_parse(e){if(this._getType(e)!==m.undefined){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.undefined,received:t.parsedType}),b}return S(e.data)}}ue.create=e=>new ue({typeName:De.ZodUndefined,...C(e)});class le extends Z{_parse(e){if(this._getType(e)!==m.null){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.null,received:t.parsedType}),b}return S(e.data)}}le.create=e=>new le({typeName:De.ZodNull,...C(e)});class pe extends Z{constructor(){super(...arguments),this._any=!0}_parse(e){return S(e.data)}}pe.create=e=>new pe({typeName:De.ZodAny,...C(e)});class he extends Z{constructor(){super(...arguments),this._unknown=!0}_parse(e){return S(e.data)}}he.create=e=>new he({typeName:De.ZodUnknown,...C(e)});class me extends Z{_parse(e){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.never,received:t.parsedType}),b}}me.create=e=>new me({typeName:De.ZodNever,...C(e)});class fe extends Z{_parse(e){if(this._getType(e)!==m.undefined){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.void,received:t.parsedType}),b}return S(e.data)}}fe.create=e=>new fe({typeName:De.ZodVoid,...C(e)});class ye extends Z{_parse(e){const{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==m.array)return w(t,{code:y.invalid_type,expected:m.array,received:t.parsedType}),b;if(null!==r.exactLength){const e=t.data.length>r.exactLength.value,s=t.data.length<r.exactLength.value;(e||s)&&(w(t,{code:e?y.too_big:y.too_small,minimum:s?r.exactLength.value:void 0,maximum:e?r.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:r.exactLength.message}),n.dirty())}if(null!==r.minLength&&t.data.length<r.minLength.value&&(w(t,{code:y.too_small,minimum:r.minLength.value,type:"array",inclusive:!0,exact:!1,message:r.minLength.message}),n.dirty()),null!==r.maxLength&&t.data.length>r.maxLength.value&&(w(t,{code:y.too_big,maximum:r.maxLength.value,type:"array",inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new j(t,e,t.path,n)))).then(e=>k.mergeArray(n,e));const s=[...t.data].map((e,n)=>r.type._parseSync(new j(t,e,t.path,n)));return k.mergeArray(n,s)}get element(){return this._def.type}min(e,t){return new ye({...this._def,minLength:{value:e,message:P.toString(t)}})}max(e,t){return new ye({...this._def,maxLength:{value:e,message:P.toString(t)}})}length(e,t){return new ye({...this._def,exactLength:{value:e,message:P.toString(t)}})}nonempty(e){return this.min(1,e)}}function ge(e){if(e instanceof _e){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=Ce.create(ge(r))}return new _e({...e._def,shape:()=>t})}return e instanceof ye?new ye({...e._def,type:ge(e.element)}):e instanceof Ce?Ce.create(ge(e.unwrap())):e instanceof Ze?Ze.create(ge(e.unwrap())):e instanceof be?be.create(e.items.map(e=>ge(e))):e}ye.create=(e,t)=>new ye({type:e,minLength:null,maxLength:null,exactLength:null,typeName:De.ZodArray,...C(t)});class _e extends Z{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(null!==this._cached)return this._cached;const e=this._def.shape(),t=p.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==m.object){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.object,received:t.parsedType}),b}const{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:s}=this._getCached(),a=[];if(!(this._def.catchall instanceof me&&"strip"===this._def.unknownKeys))for(const o in n.data)s.includes(o)||a.push(o);const i=[];for(const o of s){const e=r[o],t=n.data[o];i.push({key:{status:"valid",value:o},value:e._parse(new j(n,t,n.path,o)),alwaysSet:o in n.data})}if(this._def.catchall instanceof me){const e=this._def.unknownKeys;if("passthrough"===e)for(const t of a)i.push({key:{status:"valid",value:t},value:{status:"valid",value:n.data[t]}});else if("strict"===e)a.length>0&&(w(n,{code:y.unrecognized_keys,keys:a}),t.dirty());else if("strip"!==e)throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const e=this._def.catchall;for(const t of a){const r=n.data[t];i.push({key:{status:"valid",value:t},value:e._parse(new j(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{const e=[];for(const t of i){const n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>k.mergeObjectSync(t,e)):k.mergeObjectSync(t,i)}get shape(){return this._def.shape()}strict(e){return P.errToObj,new _e({...this._def,unknownKeys:"strict",...void 0!==e?{errorMap:(t,n)=>{const r=this._def.errorMap?.(t,n).message??n.defaultError;return"unrecognized_keys"===t.code?{message:P.errToObj(e).message??r}:{message:r}}}:{}})}strip(){return new _e({...this._def,unknownKeys:"strip"})}passthrough(){return new _e({...this._def,unknownKeys:"passthrough"})}extend(e){return new _e({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new _e({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:De.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new _e({...this._def,catchall:e})}pick(e){const t={};for(const n of p.objectKeys(e))e[n]&&this.shape[n]&&(t[n]=this.shape[n]);return new _e({...this._def,shape:()=>t})}omit(e){const t={};for(const n of p.objectKeys(this.shape))e[n]||(t[n]=this.shape[n]);return new _e({...this._def,shape:()=>t})}deepPartial(){return ge(this)}partial(e){const t={};for(const n of p.objectKeys(this.shape)){const r=this.shape[n];e&&!e[n]?t[n]=r:t[n]=r.optional()}return new _e({...this._def,shape:()=>t})}required(e){const t={};for(const n of p.objectKeys(this.shape))if(e&&!e[n])t[n]=this.shape[n];else{let e=this.shape[n];for(;e instanceof Ce;)e=e._def.innerType;t[n]=e}return new _e({...this._def,shape:()=>t})}keyof(){return Ee(p.objectKeys(this.shape))}}_e.create=(e,t)=>new _e({shape:()=>e,unknownKeys:"strip",catchall:me.create(),typeName:De.ZodObject,...C(t)}),_e.strictCreate=(e,t)=>new _e({shape:()=>e,unknownKeys:"strict",catchall:me.create(),typeName:De.ZodObject,...C(t)}),_e.lazycreate=(e,t)=>new _e({shape:e,unknownKeys:"strip",catchall:me.create(),typeName:De.ZodObject,...C(t)});class ve extends Z{_parse(e){const{ctx:t}=this._processInputParams(e),n=this._def.options;if(t.common.async)return Promise.all(n.map(async e=>{const n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(function(e){for(const t of e)if("valid"===t.result.status)return t.result;for(const r of e)if("dirty"===r.result.status)return t.common.issues.push(...r.ctx.common.issues),r.result;const n=e.map(e=>new g(e.ctx.common.issues));return w(t,{code:y.invalid_union,unionErrors:n}),b});{let e;const r=[];for(const a of n){const n={...t,common:{...t.common,issues:[]},parent:null},s=a._parseSync({data:t.data,path:t.path,parent:n});if("valid"===s.status)return s;"dirty"!==s.status||e||(e={result:s,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;const s=r.map(e=>new g(e));return w(t,{code:y.invalid_union,unionErrors:s}),b}}get options(){return this._def.options}}function we(e,t){const n=f(e),r=f(t);if(e===t)return{valid:!0,data:e};if(n===m.object&&r===m.object){const n=p.objectKeys(t),r=p.objectKeys(e).filter(e=>-1!==n.indexOf(e)),s={...e,...t};for(const a of r){const n=we(e[a],t[a]);if(!n.valid)return{valid:!1};s[a]=n.data}return{valid:!0,data:s}}if(n===m.array&&r===m.array){if(e.length!==t.length)return{valid:!1};const n=[];for(let r=0;r<e.length;r++){const s=we(e[r],t[r]);if(!s.valid)return{valid:!1};n.push(s.data)}return{valid:!0,data:n}}return n===m.date&&r===m.date&&+e===+t?{valid:!0,data:e}:{valid:!1}}ve.create=(e,t)=>new ve({options:e,typeName:De.ZodUnion,...C(t)});class ke extends Z{_parse(e){const{status:t,ctx:n}=this._processInputParams(e),r=(e,r)=>{if(O(e)||O(r))return b;const s=we(e.value,r.value);return s.valid?((T(e)||T(r))&&t.dirty(),{status:t.value,value:s.data}):(w(n,{code:y.invalid_intersection_types}),b)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}}ke.create=(e,t,n)=>new ke({left:e,right:t,typeName:De.ZodIntersection,...C(n)});class be extends Z{_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==m.array)return w(n,{code:y.invalid_type,expected:m.array,received:n.parsedType}),b;if(n.data.length<this._def.items.length)return w(n,{code:y.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),b;!this._def.rest&&n.data.length>this._def.items.length&&(w(n,{code:y.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());const r=[...n.data].map((e,t)=>{const r=this._def.items[t]||this._def.rest;return r?r._parse(new j(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>k.mergeArray(t,e)):k.mergeArray(t,r)}get items(){return this._def.items}rest(e){return new be({...this._def,rest:e})}}be.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new be({items:e,typeName:De.ZodTuple,rest:null,...C(t)})};class xe extends Z{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==m.map)return w(n,{code:y.invalid_type,expected:m.map,received:n.parsedType}),b;const r=this._def.keyType,s=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new j(n,e,n.path,[a,"key"])),value:s._parse(new j(n,t,n.path,[a,"value"]))}));if(n.common.async){const e=new Map;return Promise.resolve().then(async()=>{for(const n of a){const r=await n.key,s=await n.value;if("aborted"===r.status||"aborted"===s.status)return b;"dirty"!==r.status&&"dirty"!==s.status||t.dirty(),e.set(r.value,s.value)}return{status:t.value,value:e}})}{const e=new Map;for(const n of a){const r=n.key,s=n.value;if("aborted"===r.status||"aborted"===s.status)return b;"dirty"!==r.status&&"dirty"!==s.status||t.dirty(),e.set(r.value,s.value)}return{status:t.value,value:e}}}}xe.create=(e,t,n)=>new xe({valueType:t,keyType:e,typeName:De.ZodMap,...C(n)});class Se extends Z{_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==m.set)return w(n,{code:y.invalid_type,expected:m.set,received:n.parsedType}),b;const r=this._def;null!==r.minSize&&n.data.size<r.minSize.value&&(w(n,{code:y.too_small,minimum:r.minSize.value,type:"set",inclusive:!0,exact:!1,message:r.minSize.message}),t.dirty()),null!==r.maxSize&&n.data.size>r.maxSize.value&&(w(n,{code:y.too_big,maximum:r.maxSize.value,type:"set",inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());const s=this._def.valueType;function a(e){const n=new Set;for(const r of e){if("aborted"===r.status)return b;"dirty"===r.status&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}const i=[...n.data.values()].map((e,t)=>s._parse(new j(n,e,n.path,t)));return n.common.async?Promise.all(i).then(e=>a(e)):a(i)}min(e,t){return new Se({...this._def,minSize:{value:e,message:P.toString(t)}})}max(e,t){return new Se({...this._def,maxSize:{value:e,message:P.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}Se.create=(e,t)=>new Se({valueType:e,minSize:null,maxSize:null,typeName:De.ZodSet,...C(t)});class Oe extends Z{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}Oe.create=(e,t)=>new Oe({getter:e,typeName:De.ZodLazy,...C(t)});class Te extends Z{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return w(t,{received:t.data,code:y.invalid_literal,expected:this._def.value}),b}return{status:"valid",value:e.data}}get value(){return this._def.value}}function Ee(e,t){return new Ne({values:e,typeName:De.ZodEnum,...C(t)})}Te.create=(e,t)=>new Te({value:e,typeName:De.ZodLiteral,...C(t)});class Ne extends Z{_parse(e){if("string"!=typeof e.data){const t=this._getOrReturnCtx(e),n=this._def.values;return w(t,{expected:p.joinValues(n),received:t.parsedType,code:y.invalid_type}),b}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const t=this._getOrReturnCtx(e),n=this._def.values;return w(t,{received:t.data,code:y.invalid_enum_value,options:n}),b}return S(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return Ne.create(e,{...this._def,...t})}exclude(e,t=this._def){return Ne.create(this.options.filter(t=>!e.includes(t)),{...this._def,...t})}}Ne.create=Ee;class Pe extends Z{_parse(e){const t=p.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==m.string&&n.parsedType!==m.number){const e=p.objectValues(t);return w(n,{expected:p.joinValues(e),received:n.parsedType,code:y.invalid_type}),b}if(this._cache||(this._cache=new Set(p.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const e=p.objectValues(t);return w(n,{received:n.data,code:y.invalid_enum_value,options:e}),b}return S(e.data)}get enum(){return this._def.values}}Pe.create=(e,t)=>new Pe({values:e,typeName:De.ZodNativeEnum,...C(t)});class je extends Z{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==m.promise&&!1===t.common.async)return w(t,{code:y.invalid_type,expected:m.promise,received:t.parsedType}),b;const n=t.parsedType===m.promise?t.data:Promise.resolve(t.data);return S(n.then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}}je.create=(e,t)=>new je({type:e,typeName:De.ZodPromise,...C(t)});class Ae extends Z{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===De.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,s={addIssue:e=>{w(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(s.addIssue=s.addIssue.bind(s),"preprocess"===r.type){const e=r.transform(n.data,s);if(n.common.async)return Promise.resolve(e).then(async e=>{if("aborted"===t.value)return b;const r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return"aborted"===r.status?b:"dirty"===r.status||"dirty"===t.value?x(r.value):r});{if("aborted"===t.value)return b;const r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return"aborted"===r.status?b:"dirty"===r.status||"dirty"===t.value?x(r.value):r}}if("refinement"===r.type){const e=e=>{const t=r.refinement(e,s);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return e};if(!1===n.common.async){const r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return"aborted"===r.status?b:("dirty"===r.status&&t.dirty(),e(r.value),{status:t.value,value:r.value})}return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>"aborted"===n.status?b:("dirty"===n.status&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if("transform"===r.type){if(!1===n.common.async){const e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!E(e))return b;const a=r.transform(e.value,s);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:a}}return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>E(e)?Promise.resolve(r.transform(e.value,s)).then(e=>({status:t.value,value:e})):b)}p.assertNever(r)}}Ae.create=(e,t,n)=>new Ae({schema:e,typeName:De.ZodEffects,effect:t,...C(n)}),Ae.createWithPreprocess=(e,t,n)=>new Ae({schema:t,effect:{type:"preprocess",transform:e},typeName:De.ZodEffects,...C(n)});class Ce extends Z{_parse(e){return this._getType(e)===m.undefined?S(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Ce.create=(e,t)=>new Ce({innerType:e,typeName:De.ZodOptional,...C(t)});class Ze extends Z{_parse(e){return this._getType(e)===m.null?S(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Ze.create=(e,t)=>new Ze({innerType:e,typeName:De.ZodNullable,...C(t)});class Fe extends Z{_parse(e){const{ctx:t}=this._processInputParams(e);let n=t.data;return t.parsedType===m.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}Fe.create=(e,t)=>new Fe({innerType:e,typeName:De.ZodDefault,defaultValue:"function"==typeof t.default?t.default:()=>t.default,...C(t)});class Ie extends Z{_parse(e){const{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return N(r)?r.then(e=>({status:"valid",value:"valid"===e.status?e.value:this._def.catchValue({get error(){return new g(n.common.issues)},input:n.data})})):{status:"valid",value:"valid"===r.status?r.value:this._def.catchValue({get error(){return new g(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}}Ie.create=(e,t)=>new Ie({innerType:e,typeName:De.ZodCatch,catchValue:"function"==typeof t.catch?t.catch:()=>t.catch,...C(t)});class $e extends Z{_parse(e){if(this._getType(e)!==m.nan){const t=this._getOrReturnCtx(e);return w(t,{code:y.invalid_type,expected:m.nan,received:t.parsedType}),b}return{status:"valid",value:e.data}}}$e.create=e=>new $e({typeName:De.ZodNaN,...C(e)});class Re extends Z{_parse(e){const{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}}class Le extends Z{_parse(e){const{status:t,ctx:n}=this._processInputParams(e);if(n.common.async){return(async()=>{const e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return"aborted"===e.status?b:"dirty"===e.status?(t.dirty(),x(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})()}{const e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return"aborted"===e.status?b:"dirty"===e.status?(t.dirty(),{status:"dirty",value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(e,t){return new Le({in:e,out:t,typeName:De.ZodPipeline})}}class Me extends Z{_parse(e){const t=this._def.innerType._parse(e),n=e=>(E(e)&&(e.value=Object.freeze(e.value)),e);return N(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}}var De;Me.create=(e,t)=>new Me({innerType:e,typeName:De.ZodReadonly,...C(t)}),function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"}(De||(De={}));const ze=re.create;me.create,ye.create;const qe=_e.create;ve.create,ke.create,be.create,Ne.create,je.create,Ce.create,Ze.create;const Ue=qe({detail:ze()}),Ve=qe({error:ze()});function He(e){if(!e)return"Unknown error";if(e instanceof Error){const t=Ue.safeParse(e.cause);return t.success?t.data.detail:function(e){const t=function(e){try{return JSON.parse(e)}catch{return e}}(e);if(!t)return e;const n=Ue.safeParse(t);if(n.success)return n.data.detail;const r=Ve.safeParse(t);if(r.success)return r.data.error;return e}(e.message)}if("object"==typeof e){const t=Ue.safeParse(e);if(t.success)return t.data.detail;const n=Ve.safeParse(e);if(n.success)return n.data.error}try{return JSON.stringify(e)}catch{return String(e)}}function Be(e){return e.FS}const We="notebook.py",Ke="/marimo",Je=We,Ye=e=>{const t=Be(e);try{t.mkdirTree(Ke)}catch{}t.chdir(Ke)},Ge=e=>{Be(e).mount(e.FS.filesystems.IDBFS,{root:"."},Ke)},Xe=async e=>{await tt(e,!0)},Qe=async e=>{await tt(e,!1)},et=e=>{const{pyodide:t,filename:n,code:r}=e,s=Be(t);if(n&&n!==We){const e=(e=>{try{return l(s.readFile(e))}catch{return null}})(n);if(e)return{code:e,filename:n}}return s.writeFile(We,r),{code:r,filename:We}};function tt(e,t){return new Promise((n,r)=>{Be(e).syncfs(t,e=>{e instanceof Error?r(e):n()})})}var nt,rt=Object.defineProperty,st=(e,t)=>rt(e,"name",{value:t,configurable:!0}),at=(nt=function(e){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')},typeof require<"u"?require:typeof Proxy<"u"?new Proxy(nt,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):nt);function it(e){return!isNaN(parseFloat(e))&&isFinite(e)}function ot(e){return e.charAt(0).toUpperCase()+e.substring(1)}function dt(e){return function(){return this[e]}}st(it,"_isNumber"),st(ot,"_capitalize"),st(dt,"_getter");var ct,ut,lt=["isConstructor","isEval","isNative","isToplevel"],pt=["columnNumber","lineNumber"],ht=["fileName","functionName","source"],mt=lt.concat(pt,ht,["args"],["evalOrigin"]);function ft(e){if(e)for(var t=0;t<mt.length;t++)void 0!==e[mt[t]]&&this["set"+ot(mt[t])](e[mt[t]])}for(st(ft,"StackFrame"),ft.prototype={getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(e){if(e instanceof ft)this.evalOrigin=e;else{if(!(e instanceof Object))throw new TypeError("Eval Origin must be an Object or StackFrame");this.evalOrigin=new ft(e)}},toString: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}},ft.fromString=st(function(e){var t=e.indexOf("("),n=e.lastIndexOf(")"),r=e.substring(0,t),s=e.substring(t+1,n).split(","),a=e.substring(n+1);if(0===a.indexOf("@"))var i=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(a,""),o=i[1],d=i[2],c=i[3];return new ft({functionName:r,args:s||void 0,fileName:o,lineNumber:d||void 0,columnNumber:c||void 0})},"StackFrame$$fromString"),ct=0;ct<lt.length;ct++)ft.prototype["get"+ot(lt[ct])]=dt(lt[ct]),ft.prototype["set"+ot(lt[ct])]=function(e){return function(t){this[e]=!!t}}(lt[ct]);for(ut=0;ut<pt.length;ut++)ft.prototype["get"+ot(pt[ut])]=dt(pt[ut]),ft.prototype["set"+ot(pt[ut])]=function(e){return function(t){if(!it(t))throw new TypeError(e+" must be a Number");this[e]=Number(t)}}(pt[ut]);for(yt=0;yt<ht.length;yt++)ft.prototype["get"+ot(ht[yt])]=dt(ht[yt]),ft.prototype["set"+ot(ht[yt])]=function(e){return function(t){this[e]=String(t)}}(ht[yt]);var yt,gt=ft;function _t(){var e=/^\s*at .*(\S+:\d+|\(native\))/m,t=/^(eval@)?(\[native code])?$/;return{parse:st(function(t){if(t.stack&&t.stack.match(e))return this.parseV8OrIE(t);if(t.stack)return this.parseFFOrSafari(t);throw new Error("Cannot parse given Error object")},"ErrorStackParser$$parse"),extractLocation:st(function(e){if(-1===e.indexOf(":"))return[e];var t=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(e.replace(/[()]/g,""));return[t[1],t[2]||void 0,t[3]||void 0]},"ErrorStackParser$$extractLocation"),parseV8OrIE:st(function(t){return t.stack.split("\n").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),s=n&&t||void 0,a=["eval","<anonymous>"].indexOf(r[0])>-1?void 0:r[0];return new gt({functionName:s,fileName:a,lineNumber:r[1],columnNumber:r[2],source:e})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:st(function(e){return e.stack.split("\n").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")),-1===e.indexOf("@")&&-1===e.indexOf(":"))return new gt({functionName:e});var t=/((.*".+"[^@]*)?[^@]*)(?:@)/,n=e.match(t),r=n&&n[1]?n[1]:void 0,s=this.extractLocation(e.replace(t,""));return new gt({functionName:r,fileName:s[0],lineNumber:s[1],columnNumber:s[2],source:e})},this)},"ErrorStackParser$$parseFFOrSafari")}}st(_t,"ErrorStackParser");var vt,wt,kt,bt,xt,St,Ot,Tt,Et,Nt=new _t,Pt="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node&&!process.browser,jt=Pt&&typeof module<"u"&&typeof module.exports<"u"&&typeof at<"u"&&typeof __dirname<"u",At=Pt&&!jt,Ct=typeof Deno<"u",Zt=!Pt&&!Ct,Ft=Zt&&"object"==typeof window&&"object"==typeof document&&"function"==typeof document.createElement&&"sessionStorage"in window&&"function"!=typeof importScripts,It=Zt&&"function"==typeof importScripts&&"object"==typeof self;async function $t(){if(!Pt||(vt=(await import("./__vite-browser-external-CIEyP2s7.js")).default,bt=await import("./__vite-browser-external-CIEyP2s7.js"),xt=await import("./__vite-browser-external-CIEyP2s7.js"),kt=(await import("./__vite-browser-external-CIEyP2s7.js")).default,wt=await import("./__vite-browser-external-CIEyP2s7.js"),Ot=wt.sep,typeof at<"u"))return;let e={fs:bt,crypto:await import("./__vite-browser-external-CIEyP2s7.js"),ws:await import("./__vite-browser-external-CIEyP2s7.js"),child_process:await import("./__vite-browser-external-CIEyP2s7.js")};globalThis.require=function(t){return e[t]}}function Rt(e,t){return wt.resolve(t||".",e)}function Lt(e,t){return void 0===t&&(t=location),new URL(e,t).toString()}function Mt(e,t){return e.startsWith("file://")&&(e=e.slice(7)),e.includes("://")?{response:fetch(e)}:{binary:xt.readFile(e).then(e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}}function Dt(e,t){let n=new URL(e,location);return{response:fetch(n,t?{integrity:t}:{})}}async function zt(e,t){let{response:n,binary:r}=Tt(e,t);if(r)return r;let s=await n;if(!s.ok)throw new Error(`Failed to load '${e}': request failed.`);return new Uint8Array(await s.arrayBuffer())}if("object"==typeof navigator&&"string"==typeof navigator.userAgent&&-1==navigator.userAgent.indexOf("Chrome")&&navigator.userAgent.indexOf("Safari"),st($t,"initNodeModules"),st(Rt,"node_resolvePath"),st(Lt,"browser_resolvePath"),St=Pt?Rt:Lt,Pt||(Ot="/"),st(Mt,"node_getBinaryResponse"),st(Dt,"browser_getBinaryResponse"),Tt=Pt?Mt:Dt,st(zt,"loadBinaryFile"),Ft)Et=st(async e=>await import(e),"loadScript");else if(It)Et=st(async e=>{try{globalThis.importScripts(e)}catch(nn){if(!(nn instanceof TypeError))throw nn;await import(e)}},"loadScript");else{if(!Pt)throw new Error("Cannot determine runtime environment");Et=qt}async function qt(e){e.startsWith("file://")&&(e=e.slice(7)),e.includes("://")?kt.runInThisContext(await(await fetch(e)).text()):await import(vt.pathToFileURL(e).href)}async function Ut(e){if(Pt){await $t();let t=await xt.readFile(e,{encoding:"utf8"});return JSON.parse(t)}return await(await fetch(e)).json()}async function Vt(){if(jt)return __dirname;let e;try{throw new Error}catch(r){e=r}let t=Nt.parse(e)[0].fileName;if(Pt&&!t.startsWith("file://")&&(t=`file://${t}`),At){let e=await import("./__vite-browser-external-CIEyP2s7.js");return(await import("./__vite-browser-external-CIEyP2s7.js")).fileURLToPath(e.dirname(t))}let n=t.lastIndexOf(Ot);if(-1===n)throw new Error("Could not extract indexURL path from pyodide module location");return t.slice(0,n)}function Ht(e){let t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{let r=s.getLocalSet(e),a=await s.getRemoteSet(e),i=t?a:r,o=t?r:a;await s.reconcile(e,i,o),n(null)}catch(r){n(r)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function a(e){return t=>r.join2(e,t)}st(s,"isRealDir"),st(a,"toAbsolute");let i=t.readdir(e.mountpoint).filter(s).map(a(e.mountpoint));for(;i.length;){let e=i.pop(),r=t.stat(e);t.isDir(r.mode)&&i.push.apply(i,t.readdir(e).filter(s).map(a(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{let t=Object.create(null),n=await Bt(e.opts.fileSystemHandle);for(let[a,i]of n)"."!==a&&(t[r.join2(e.mountpoint,a)]={timestamp:"file"===i.kind?new Date((await i.getFile()).lastModified):new Date,mode:"file"===i.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{let r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){let t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:new Date(t.lastModified)}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{let a=e.get(r.dirname(n)),i=t.isFile(s.mode)?await a.getFileHandle(r.basename(n),{create:!0}):await a.getDirectoryHandle(r.basename(n),{create:!0});if("file"===i.kind){let e=await i.createWritable();await e.write(s.contents),await e.close()}e.set(n,i)},removeRemoteEntry:async(e,t)=>{await e.get(r.dirname(t)).removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,a)=>{let i=0,o=[];Object.keys(n.entries).forEach(function(e){let r=n.entries[e],s=a.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(o.push(e),i++)}),o.sort();let d=[];if(Object.keys(a.entries).forEach(function(e){n.entries[e]||(d.push(e),i++)}),d.sort().reverse(),!i)return;let c="remote"===n.type?n.handles:a.handles;for(let t of o){let n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===a.type){let e=c.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{let e=s.loadLocalEntry(t);await s.storeRemoteEntry(c,n,e)}}for(let t of d)if("local"===a.type)s.removeLocalEntry(t);else{let n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(c,n)}}};e.FS.filesystems.NATIVEFS_ASYNC=s}st(qt,"nodeLoadScript"),st(Ut,"loadLockFile"),st(Vt,"calculateDirname"),st(Ht,"initializeNativeFS");var Bt=st(async e=>{let t=[];async function n(e){for await(let r of e.values())t.push(r),"directory"===r.kind&&await n(r)}st(n,"collect"),await n(e);let r=new Map;r.set(".",e);for(let s of t){let t=(await e.resolve(s)).join("/");r.set(t,s)}return r},"getFsHandles");function Wt(e){let t={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preRun:Xt(e),quit(e,n){throw t.exited={status:e,toThrow:n},n},print:e.stdout,printErr:e.stderr,thisProgram:e._sysExecutable,arguments:e.args,API:{config:e},locateFile:t=>e.indexURL+t,instantiateWasm:Qt(e.indexURL)};return t}function Kt(e){return function(t){try{t.FS.mkdirTree(e)}catch(n){console.error(`Error occurred while making a home directory '${e}':`),console.error(n),console.error("Using '/' for a home directory instead"),e="/"}t.FS.chdir(e)}}function Jt(e){return function(t){Object.assign(t.ENV,e)}}function Yt(e){return e?[async t=>{t.addRunDependency("fsInitHook");try{await e(t.FS,{sitePackages:t.API.sitePackages})}finally{t.removeRunDependency("fsInitHook")}}]:[]}function Gt(e){let t=zt(e);return async e=>{let n=e._py_version_major(),r=e._py_version_minor();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 s=await t;e.FS.writeFile(`/lib/python${n}${r}.zip`,s)}catch(s){console.error("Error occurred while installing the standard library:"),console.error(s)}finally{e.removeRunDependency("install-stdlib")}}}function Xt(e){let t;return t=null!=e.stdLibURL?e.stdLibURL:e.indexURL+"python_stdlib.zip",[...Yt(e.fsInit),Gt(t),Kt(e.env.HOME),Jt(e.env),Ht]}function Qt(e){if(typeof WasmOffsetConverter<"u")return;let{binary:t,response:n}=Tt(e+"pyodide.asm.wasm");return function(e,r){return async function(){try{let s;s=n?await WebAssembly.instantiateStreaming(n,e):await WebAssembly.instantiate(await t,e);let{instance:a,module:i}=s;r(a,i)}catch(s){console.warn("wasm instantiation failed!"),console.warn(s)}}(),{}}}st(Wt,"createSettings"),st(Kt,"createHomeDirectory"),st(Jt,"setEnvironment"),st(Yt,"callFsInitHook"),st(Gt,"installStdlib"),st(Xt,"getFileSystemInitializationFuncs"),st(Qt,"getInstantiateWasmFunc");var en="0.27.7";async function tn(e={}){var t,n;await $t();let r=e.indexURL||await Vt();r=St(r),r.endsWith("/")||(r+="/"),e.indexURL=r;let s={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:r+"pyodide-lock.json",args:[],env:{},packageCacheDir:r,packages:[],enableRunUntilComplete:!0,checkAPIVersion:!0,BUILD_ID:"e94377f5ce7dcf67e0417b69a0016733c2cfb6b4622ee8c490a6f17eb58e863b"},a=Object.assign(s,e);(t=a.env).HOME??(t.HOME="/home/pyodide"),(n=a.env).PYTHONINSPECT??(n.PYTHONINSPECT="1");let i,o=Wt(a),d=o.API;if(d.lockFilePromise=Ut(a.lockFileURL),"function"!=typeof _createPyodideModule){let e=`${a.indexURL}pyodide.asm.js`;await Et(e)}if(e._loadSnapshot){let t=await e._loadSnapshot;i=ArrayBuffer.isView(t)?t:new Uint8Array(t),o.noInitialRun=!0,o.INITIAL_MEMORY=i.length}let c,u=await _createPyodideModule(o);if(o.exited)throw o.exited.toThrow;if(e.pyproxyToStringRepr&&d.setPyProxyToStringMethod(!0),d.version!==en&&a.checkAPIVersion)throw new Error(`Pyodide version does not match: '${en}' <==> '${d.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);u.locateFile=e=>{throw new Error("Didn't expect to load any more file_packager files!")},i&&(c=d.restoreSnapshot(i));let l=d.finalizeBootstrap(c,e._snapshotDeserializer);return d.sys.path.insert(0,""),l.version.includes("dev")||d.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${l.version}/full/`),d._pyodide.set_excepthook(),await d.packageIndexReady,d.initializeStreams(a.stdin,a.stdout,a.stderr),l}st(tn,"loadPyodide");const nn=new class{spans=[];startSpan(e,t={}){const 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={}){const r=this.startSpan(t||e.name,n);try{const t=e();return this.endSpan(r),t}catch(s){throw this.endSpan(r,"error"),s}}wrapAsync(e,t,n={}){return async(...r)=>{const s=this.startSpan(t||e.name,n);try{const t=await e(...r);return this.endSpan(s),t}catch(a){throw this.endSpan(s,"error"),a}}}logSpans(){}};globalThis.t=nn;class rn{pyodide=null;get requirePyodide(){return a(this.pyodide,"Pyodide not loaded"),this.pyodide}async bootstrap(e){return await this.loadPyodideAndPackages(e)}async loadPyodideAndPackages(e){if(!tn)throw new Error("loadPyodide is not defined");const t=nn.startSpan("loadPyodide");try{const n=await tn({packages:["micropip","msgspec",(e.version,"marimo-base"),"Markdown","pymdown-extensions","narwhals","packaging"],_makeSnapshot:false,lockFileURL:`https://wasm.marimo.app/pyodide-lock.json?v=${e.version}&pyodide=${e.pyodideVersion}`,indexURL:`https://cdn.jsdelivr.net/pyodide/${e.pyodideVersion}/full/`});return this.pyodide=n,t.end("ok"),n}catch(n){throw u.error("Failed to load Pyodide",n),n}}async mountFilesystem(e){const t=nn.startSpan("mountFilesystem");return Ye(this.requirePyodide),Ge(this.requirePyodide),await Xe(this.requirePyodide),t.end("ok"),et({pyodide:this.requirePyodide,code:e.code,filename:e.filename})}async startSession(e){const{code:t,filename:n,onMessage:r,queryParameters:s,userConfig:a}=e;self.messenger={callback:r},self.query_params=s,self.user_config=a;const i=nn.startSpan("startSession.runPython"),o=n||Je,[d,c,u]=this.requirePyodide.runPython(`\n print("[py] Starting marimo...")\n import asyncio\n import js\n from marimo._pyodide.bootstrap import create_session, instantiate\n\n assert js.messenger, "messenger is not defined"\n assert js.query_params, "query_params is not defined"\n\n session, bridge = create_session(\n filename="${o}",\n query_params=js.query_params.to_py(),\n message_callback=js.messenger.callback,\n user_config=js.user_config.to_py(),\n )\n\n def init(auto_instantiate=True):\n instantiate(session, auto_instantiate)\n asyncio.create_task(session.start())\n\n # Find the packages to install\n with open("${o}", "r") as f:\n packages = session.find_packages(f.read())\n\n bridge, init, packages`);i.end();const l=new Set(u.toJs());return this.loadNotebookDeps(t,l).then(()=>c(a.runtime.auto_instantiate)),d}async loadNotebookDeps(e,t){const n=this.requirePyodide;e.includes("mo.sql")&&(e=`import sqlglot\n${e=`import duckdb\n${e=`import pandas\n${e}`}`}`).includes("polars")&&(e=`import pyarrow\n${e}`),e=`import pyodide_http\n${e=`import jedi\n${e=`import pygments\n${e=`import docutils\n${e}`}`}`}`;const r=[...t];let s=nn.startSpan("pyodide.loadPackage");await n.loadPackagesFromImports(e,{errorCallback:u.error,messageCallback:u.log}),s.end(),s=nn.startSpan("micropip.install");const a=r.filter(e=>!n.loadedPackages[e]);a.length>0&&await n.runPythonAsync(`\n import micropip\n import sys\n # Filter out builtins\n missing = [p for p in ${JSON.stringify(a)} if p not in sys.modules]\n if len(missing) > 0:\n print("Loading from micropip:", missing)\n await micropip.install(missing)\n `).catch(e=>{u.error("Failed to load packages from micropip",e)}),s.end()}}async function sn(e){try{return await import(`/wasm/controller.js?version=${e}`)}catch{return new rn}}const an=nn.startSpan("worker:init");const on=new class{buffer;started=!1;onMessage;constructor(e){this.onMessage=e,this.buffer=[]}push=e=>{this.started?this.onMessage(e):this.buffer.push(e)};start=()=>{this.started=!0,this.buffer.forEach(e=>this.onMessage(e)),this.buffer=[]}}(e=>{ln.send.kernelMessage({message:e})}),dn=new class{promise;resolve;reject;status="pending";constructor(){this.promise=new Promise((e,t)=>{this.reject=e=>{this.status="rejected",t(e)},this.resolve=t=>{this.status="resolved",e(t)}})}};let cn=!1;const un={startSession:async e=>{if(await mn,cn)u.warn("Session already started");else{cn=!0;try{a(self.controller,"Controller not loaded"),await(self.controller.mountFilesystem?.({code:e.code,filename:e.filename}));const t=nn.wrapAsync(self.controller.startSession.bind(self.controller)),n=function(e){let t,n=!1;return function(...r){return n||(n=!0,t=e.apply(this,r)),t}}(()=>{ln.send.initializingMessage({message:"Initializing notebook..."}),ln.send.initialized({})});ln.send.initializingMessage({message:"Loading notebook and dependencies..."});const r=await t({code:e.code,filename:e.filename,queryParameters:e.queryParameters,userConfig:e.userConfig,onMessage:e=>{n(),on.push(e)}});dn.resolve(r),an.end("ok")}catch(t){ln.send.initializedError({error:He(t)}),an.end("error")}}},loadPackages:async e=>{const t=nn.startSpan("loadPackages");await mn,e.includes("mo.sql")&&(e=`import sqlglot\n${e=`import duckdb\n${e=`import pandas\n${e}`}`}`).includes("polars")&&(e=`import pyarrow\n${e}`),await self.pyodide.loadPackagesFromImports(e,{messageCallback:u.log,errorCallback:u.error}),t.end()},readFile:async e=>{const t=nn.startSpan("readFile");await mn;const n=l(self.pyodide.FS.readFile(e));return t.end(),n},setInterruptBuffer:async e=>{await mn,self.pyodide.setInterruptBuffer(e)},addPackage:async e=>{await mn;const{package:t}=e,n=t.split(" ").map(e=>e.trim()),r=await self.pyodide.runPythonAsync(`\n import micropip\n import json\n response = None\n try:\n await micropip.install(${JSON.stringify(n)})\n response = {"success": True}\n except Exception as e:\n response = {"success": False, "error": str(e)}\n json.dumps(response)\n `);return JSON.parse(r)},removePackage:async e=>{await mn;const{package:t}=e,n=await self.pyodide.runPythonAsync(`\n import micropip\n import json\n response = None\n try:\n micropip.uninstall("${t}")\n response = {"success": True}\n except Exception as e:\n response = {"success": False, "error": str(e)}\n json.dumps(response)\n `);return JSON.parse(n)},listPackages:async()=>{const e=nn.startSpan("listPackages");await mn;const t=await self.pyodide.runPythonAsync('\n import json\n import micropip\n\n packages = micropip.list()\n packages = [\n {"name": p.name, "version": p.version}\n for p in packages.values()\n ]\n json.dumps(sorted(packages, key=lambda pkg: pkg["name"]))\n ');return e.end(),{packages:JSON.parse(t)}},saveNotebook:async e=>{await mn;const t=self.pyodide.runPython("\n from marimo._pyodide.bootstrap import save_file\n save_file\n ");await t(JSON.stringify(e),Je)},bridge:async e=>{const t=nn.startSpan("bridge",{functionName:e.functionName});await mn;const{functionName:n,payload:r}=e;"format"===n&&await self.pyodide.runPythonAsync('\n import micropip\n\n try:\n import black\n except ModuleNotFoundError:\n await micropip.install("black")\n '),"export_markdown"===n&&await self.pyodide.runPythonAsync('\n import micropip\n\n try:\n import yaml\n except ModuleNotFoundError:\n await micropip.install("pyyaml")\n ');const s=await dn.promise,a=null==r?null:"string"==typeof r?r:JSON.stringify(r),i=null==a?await s[n]():await s[n](a);return hn.has(n)&&Qe(self.pyodide),t.end(),"string"==typeof i?JSON.parse(i):i}},ln=function(e){return n(e)}({transport:(pn={transportId:"marimo-transport"},s(self,pn)),requestHandler:un});var pn;ln.send("ready",{}),ln.addMessageListener("consumerReady",async()=>{await mn,on.start()});const hn=new Set(["save","save_app_config","rename_file","create_file_or_directory","delete_file_or_directory","move_file_or_directory","update_file"]);const mn=nn.wrapAsync(async function(){try{const e=self.name,t=function(e){return e.includes("dev"),`v${en}`}(e),n=await nn.wrapAsync(sn)(e);self.controller=n,ln.send.initializingMessage({message:"Loading marimo..."}),self.pyodide=await nn.wrapAsync(n.bootstrap.bind(n))({version:e,pyodideVersion:t})}catch(e){u.error("Error bootstrapping",e),ln.send.initializedError({error:He(e)})}})();
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/* Copyright 2025 Marimo. All rights reserved. */
|
|
2
|
-
"use no memo";
|
|
3
|
-
|
|
4
|
-
import type { InitialTableState, TableFeature } from "@tanstack/react-table";
|
|
5
|
-
import type { CellHoverTemplateTableState } from "./types";
|
|
6
|
-
|
|
7
|
-
export const CellHoverTemplateFeature: TableFeature = {
|
|
8
|
-
getInitialState: (state?: InitialTableState): CellHoverTemplateTableState => {
|
|
9
|
-
return {
|
|
10
|
-
...state,
|
|
11
|
-
cellHoverTemplate: null,
|
|
12
|
-
};
|
|
13
|
-
},
|
|
14
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/* Copyright 2025 Marimo. All rights reserved. */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-empty-interface */
|
|
3
|
-
|
|
4
|
-
export interface CellHoverTemplateTableState {
|
|
5
|
-
cellHoverTemplate: string | null;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
// Use declaration merging to add our new feature APIs
|
|
9
|
-
declare module "@tanstack/react-table" {
|
|
10
|
-
interface TableState extends CellHoverTemplateTableState {}
|
|
11
|
-
}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
-
|
|
3
|
-
import { cleanup, render } from "@testing-library/react";
|
|
4
|
-
import { createStore, Provider } from "jotai";
|
|
5
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
-
import { userConfigAtom } from "@/core/config/config";
|
|
7
|
-
import { parseUserConfig } from "@/core/config/config-schema";
|
|
8
|
-
import { LocaleProvider } from "../locale-provider";
|
|
9
|
-
|
|
10
|
-
// Mock navigator.language with a getter
|
|
11
|
-
let mockNavigatorLanguage: string | undefined;
|
|
12
|
-
|
|
13
|
-
Object.defineProperty(window, "navigator", {
|
|
14
|
-
value: {
|
|
15
|
-
get language() {
|
|
16
|
-
return mockNavigatorLanguage;
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
writable: true,
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
// Mock react-aria-components I18nProvider
|
|
23
|
-
vi.mock("react-aria-components", () => ({
|
|
24
|
-
I18nProvider: ({
|
|
25
|
-
children,
|
|
26
|
-
locale,
|
|
27
|
-
}: {
|
|
28
|
-
children: React.ReactNode;
|
|
29
|
-
locale: string;
|
|
30
|
-
}) => (
|
|
31
|
-
<div data-testid="i18n-provider" data-locale={locale}>
|
|
32
|
-
{children}
|
|
33
|
-
</div>
|
|
34
|
-
),
|
|
35
|
-
}));
|
|
36
|
-
|
|
37
|
-
describe("LocaleProvider", () => {
|
|
38
|
-
beforeEach(() => {
|
|
39
|
-
// Reset the mock before each test
|
|
40
|
-
mockNavigatorLanguage = undefined;
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
afterEach(() => {
|
|
44
|
-
cleanup();
|
|
45
|
-
// Clear all mocks after each test
|
|
46
|
-
mockNavigatorLanguage = undefined;
|
|
47
|
-
vi.clearAllMocks();
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it("should render I18nProvider without locale when locale is null", () => {
|
|
51
|
-
const store = createStore();
|
|
52
|
-
const config = parseUserConfig({ display: { locale: null } });
|
|
53
|
-
store.set(userConfigAtom, config);
|
|
54
|
-
|
|
55
|
-
const { getByTestId } = render(
|
|
56
|
-
<Provider store={store}>
|
|
57
|
-
<LocaleProvider>
|
|
58
|
-
<div>Test content</div>
|
|
59
|
-
</LocaleProvider>
|
|
60
|
-
</Provider>,
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
const i18nProvider = getByTestId("i18n-provider");
|
|
64
|
-
expect(i18nProvider).toBeInTheDocument();
|
|
65
|
-
expect(i18nProvider.dataset.locale).toBe(undefined);
|
|
66
|
-
expect(i18nProvider).toHaveTextContent("Test content");
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it("should render I18nProvider without locale when locale is undefined", () => {
|
|
70
|
-
const store = createStore();
|
|
71
|
-
const config = parseUserConfig({ display: { locale: undefined } });
|
|
72
|
-
store.set(userConfigAtom, config);
|
|
73
|
-
|
|
74
|
-
const { getByTestId } = render(
|
|
75
|
-
<Provider store={store}>
|
|
76
|
-
<LocaleProvider>
|
|
77
|
-
<div>Test content</div>
|
|
78
|
-
</LocaleProvider>
|
|
79
|
-
</Provider>,
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
const i18nProvider = getByTestId("i18n-provider");
|
|
83
|
-
expect(i18nProvider).toBeInTheDocument();
|
|
84
|
-
expect(i18nProvider.dataset.locale).toBe(undefined);
|
|
85
|
-
expect(i18nProvider).toHaveTextContent("Test content");
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it("should render I18nProvider with locale when locale is provided", () => {
|
|
89
|
-
const store = createStore();
|
|
90
|
-
const testLocale = "es-ES";
|
|
91
|
-
const config = parseUserConfig({ display: { locale: testLocale } });
|
|
92
|
-
store.set(userConfigAtom, config);
|
|
93
|
-
|
|
94
|
-
const { getByTestId } = render(
|
|
95
|
-
<Provider store={store}>
|
|
96
|
-
<LocaleProvider>
|
|
97
|
-
<div>Test content</div>
|
|
98
|
-
</LocaleProvider>
|
|
99
|
-
</Provider>,
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
const i18nProvider = getByTestId("i18n-provider");
|
|
103
|
-
expect(i18nProvider).toBeInTheDocument();
|
|
104
|
-
expect(i18nProvider.dataset.locale).toBe(testLocale);
|
|
105
|
-
expect(i18nProvider).toHaveTextContent("Test content");
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it("should render I18nProvider with different locale values", () => {
|
|
109
|
-
const testCases = ["en-US", "fr-FR", "de-DE", "ja-JP"];
|
|
110
|
-
|
|
111
|
-
testCases.forEach((locale) => {
|
|
112
|
-
const store = createStore();
|
|
113
|
-
const config = parseUserConfig({ display: { locale } });
|
|
114
|
-
store.set(userConfigAtom, config);
|
|
115
|
-
|
|
116
|
-
const { getByTestId } = render(
|
|
117
|
-
<Provider store={store}>
|
|
118
|
-
<LocaleProvider>
|
|
119
|
-
<div>Test content for {locale}</div>
|
|
120
|
-
</LocaleProvider>
|
|
121
|
-
</Provider>,
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
const i18nProvider = getByTestId("i18n-provider");
|
|
125
|
-
expect(i18nProvider.dataset.locale).toBe(locale);
|
|
126
|
-
expect(i18nProvider).toHaveTextContent(`Test content for ${locale}`);
|
|
127
|
-
|
|
128
|
-
// Clean up after each iteration
|
|
129
|
-
cleanup();
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it("should render children correctly", () => {
|
|
134
|
-
const store = createStore();
|
|
135
|
-
const config = parseUserConfig({ display: { locale: "en-US" } });
|
|
136
|
-
store.set(userConfigAtom, config);
|
|
137
|
-
|
|
138
|
-
const { getByText, getByRole } = render(
|
|
139
|
-
<Provider store={store}>
|
|
140
|
-
<LocaleProvider>
|
|
141
|
-
<div>
|
|
142
|
-
<h1>Test Heading</h1>
|
|
143
|
-
<p>Test paragraph</p>
|
|
144
|
-
<button type="button">Test Button</button>
|
|
145
|
-
</div>
|
|
146
|
-
</LocaleProvider>
|
|
147
|
-
</Provider>,
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
expect(getByText("Test Heading")).toBeInTheDocument();
|
|
151
|
-
expect(getByText("Test paragraph")).toBeInTheDocument();
|
|
152
|
-
expect(getByRole("button", { name: "Test Button" })).toBeInTheDocument();
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
it("should auto-detect locale when no locale is set in config", () => {
|
|
156
|
-
mockNavigatorLanguage = "de-DE";
|
|
157
|
-
|
|
158
|
-
const store = createStore();
|
|
159
|
-
const config = parseUserConfig({});
|
|
160
|
-
store.set(userConfigAtom, config);
|
|
161
|
-
|
|
162
|
-
const { getByTestId } = render(
|
|
163
|
-
<Provider store={store}>
|
|
164
|
-
<LocaleProvider>
|
|
165
|
-
<div>Test content</div>
|
|
166
|
-
</LocaleProvider>
|
|
167
|
-
</Provider>,
|
|
168
|
-
);
|
|
169
|
-
|
|
170
|
-
const i18nProvider = getByTestId("i18n-provider");
|
|
171
|
-
expect(i18nProvider).toBeInTheDocument();
|
|
172
|
-
// When no locale is specified in config, it should use navigator.language
|
|
173
|
-
expect(i18nProvider.dataset.locale).toBe("de-DE");
|
|
174
|
-
expect(i18nProvider).toHaveTextContent("Test content");
|
|
175
|
-
});
|
|
176
|
-
});
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
-
|
|
3
|
-
import { useAtomValue } from "jotai";
|
|
4
|
-
import type { ReactNode } from "react";
|
|
5
|
-
import { I18nProvider } from "react-aria-components";
|
|
6
|
-
import { localeAtom } from "@/core/config/config";
|
|
7
|
-
|
|
8
|
-
interface LocaleProviderProps {
|
|
9
|
-
children: ReactNode;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const LocaleProvider = ({ children }: LocaleProviderProps) => {
|
|
13
|
-
const locale = useAtomValue(localeAtom);
|
|
14
|
-
|
|
15
|
-
return <I18nProvider locale={safeLocale(locale)}>{children}</I18nProvider>;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
function safeLocale(locale: string | null | undefined) {
|
|
19
|
-
if (!locale) {
|
|
20
|
-
return navigator.language;
|
|
21
|
-
}
|
|
22
|
-
if (isValidLocale(locale)) {
|
|
23
|
-
return locale;
|
|
24
|
-
}
|
|
25
|
-
return navigator.language;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function isValidLocale(locale: string) {
|
|
29
|
-
try {
|
|
30
|
-
new Intl.NumberFormat(locale);
|
|
31
|
-
return true;
|
|
32
|
-
} catch {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
-
|
|
3
|
-
import { useLocale } from "react-aria";
|
|
4
|
-
|
|
5
|
-
export const WithLocale = ({
|
|
6
|
-
children,
|
|
7
|
-
}: {
|
|
8
|
-
children: (locale: string) => React.ReactNode;
|
|
9
|
-
}) => {
|
|
10
|
-
const { locale } = useLocale();
|
|
11
|
-
return children(locale);
|
|
12
|
-
};
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
-
|
|
3
|
-
import { useCallback } from "react";
|
|
4
|
-
import { useLocale } from "react-aria";
|
|
5
|
-
import { getShortTimeZone, prettyDate, timeAgo } from "@/utils/dates";
|
|
6
|
-
import {
|
|
7
|
-
prettyEngineeringNumber,
|
|
8
|
-
prettyNumber,
|
|
9
|
-
prettyScientificNumber,
|
|
10
|
-
} from "@/utils/numbers";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Hook that provides locale-aware number formatting using the prettyNumber utility
|
|
14
|
-
*/
|
|
15
|
-
export function usePrettyNumber() {
|
|
16
|
-
const { locale } = useLocale();
|
|
17
|
-
|
|
18
|
-
return useCallback(
|
|
19
|
-
(value: unknown): string => {
|
|
20
|
-
return prettyNumber(value, locale);
|
|
21
|
-
},
|
|
22
|
-
[locale],
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Hook that provides locale-aware scientific number formatting
|
|
28
|
-
*/
|
|
29
|
-
export function usePrettyScientificNumber() {
|
|
30
|
-
const { locale } = useLocale();
|
|
31
|
-
|
|
32
|
-
return useCallback(
|
|
33
|
-
(value: number, opts: { shouldRound?: boolean } = {}): string => {
|
|
34
|
-
return prettyScientificNumber(value, { ...opts, locale });
|
|
35
|
-
},
|
|
36
|
-
[locale],
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Hook that provides locale-aware engineering number formatting
|
|
42
|
-
*/
|
|
43
|
-
export function usePrettyEngineeringNumber() {
|
|
44
|
-
const { locale } = useLocale();
|
|
45
|
-
|
|
46
|
-
return useCallback(
|
|
47
|
-
(value: number): string => {
|
|
48
|
-
return prettyEngineeringNumber(value, locale);
|
|
49
|
-
},
|
|
50
|
-
[locale],
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Hook that provides locale-aware date formatting
|
|
56
|
-
*/
|
|
57
|
-
export function usePrettyDate() {
|
|
58
|
-
const { locale } = useLocale();
|
|
59
|
-
|
|
60
|
-
return useCallback(
|
|
61
|
-
(
|
|
62
|
-
value: string | number | null | undefined,
|
|
63
|
-
type: "date" | "datetime",
|
|
64
|
-
): string => {
|
|
65
|
-
return prettyDate(value, type, locale);
|
|
66
|
-
},
|
|
67
|
-
[locale],
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Hook that provides locale-aware relative time formatting
|
|
73
|
-
*/
|
|
74
|
-
export function useTimeAgo() {
|
|
75
|
-
const { locale } = useLocale();
|
|
76
|
-
|
|
77
|
-
return useCallback(
|
|
78
|
-
(value: string | number | null | undefined): string => {
|
|
79
|
-
return timeAgo(value, locale);
|
|
80
|
-
},
|
|
81
|
-
[locale],
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Hook that provides locale-aware timezone abbreviation
|
|
87
|
-
*/
|
|
88
|
-
export function useShortTimeZone() {
|
|
89
|
-
const { locale } = useLocale();
|
|
90
|
-
|
|
91
|
-
return useCallback(
|
|
92
|
-
(timezone: string): string => {
|
|
93
|
-
return getShortTimeZone(timezone, locale);
|
|
94
|
-
},
|
|
95
|
-
[locale],
|
|
96
|
-
);
|
|
97
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
-
import { Provider, useAtomValue } from "jotai";
|
|
3
|
-
import type { JSX } from "react";
|
|
4
|
-
import { z } from "zod";
|
|
5
|
-
import { notebookOutline } from "@/core/cells/cells";
|
|
6
|
-
import { store } from "@/core/state/jotai";
|
|
7
|
-
import { OutlineList } from "../../components/editor/chrome/panels/outline/floating-outline";
|
|
8
|
-
import {
|
|
9
|
-
findOutlineElements,
|
|
10
|
-
useActiveOutline,
|
|
11
|
-
} from "../../components/editor/chrome/panels/outline/useActiveOutline";
|
|
12
|
-
import type {
|
|
13
|
-
IStatelessPlugin,
|
|
14
|
-
IStatelessPluginProps,
|
|
15
|
-
} from "../stateless-plugin";
|
|
16
|
-
|
|
17
|
-
interface Data {
|
|
18
|
-
label?: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const OutlineContent: React.FC<{ label?: string }> = ({ label }) => {
|
|
22
|
-
const { items } = useAtomValue(notebookOutline);
|
|
23
|
-
const headerElements = findOutlineElements(items);
|
|
24
|
-
const { activeHeaderId, activeOccurrences } =
|
|
25
|
-
useActiveOutline(headerElements);
|
|
26
|
-
|
|
27
|
-
if (items.length === 0) {
|
|
28
|
-
return (
|
|
29
|
-
<div className="text-muted-foreground text-sm p-4 border border-dashed border-border rounded-lg">
|
|
30
|
-
No outline found. Add markdown headings to your notebook to create an
|
|
31
|
-
outline.
|
|
32
|
-
</div>
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return (
|
|
37
|
-
<div className="border border-border rounded-lg">
|
|
38
|
-
{label && (
|
|
39
|
-
<div className="px-4 py-2 border-b border-border font-medium text-sm">
|
|
40
|
-
{label}
|
|
41
|
-
</div>
|
|
42
|
-
)}
|
|
43
|
-
<OutlineList
|
|
44
|
-
className="max-h-[400px]"
|
|
45
|
-
items={items}
|
|
46
|
-
activeHeaderId={activeHeaderId}
|
|
47
|
-
activeOccurrences={activeOccurrences}
|
|
48
|
-
/>
|
|
49
|
-
</div>
|
|
50
|
-
);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
export class OutlinePlugin implements IStatelessPlugin<Data> {
|
|
54
|
-
tagName = "marimo-outline";
|
|
55
|
-
|
|
56
|
-
validator = z.object({
|
|
57
|
-
label: z.string().optional(),
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
render(props: IStatelessPluginProps<Data>): JSX.Element {
|
|
61
|
-
const { label } = props.data;
|
|
62
|
-
|
|
63
|
-
return (
|
|
64
|
-
<Provider store={store}>
|
|
65
|
-
<OutlineContent label={label} />
|
|
66
|
-
</Provider>
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
}
|