@marimo-team/islands 0.23.9-dev2 → 0.23.9-dev21
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/{ConnectedDataExplorerComponent-2lBNiUv6.js → ConnectedDataExplorerComponent-DSyAzzpW.js} +20 -20
- package/dist/ErrorBoundary-rULOrC_p.js +175 -0
- package/dist/{ImageComparisonComponent-CNHIsPDj.js → ImageComparisonComponent-CHrI72em.js} +1 -1
- package/dist/{Plot-4wn-lMVn.js → Plot-CAYS29h9.js} +1 -1
- package/dist/{_baseUniq-CxZRxRRo.js → _baseUniq-B_2Hw7zG.js} +3 -3
- package/dist/{any-language-editor-VWs_7v27.js → any-language-editor-DfdpyDv_.js} +23 -23
- package/dist/architecture-7HQA4BMR-Kyc44TmC.js +6 -0
- package/dist/{architectureDiagram-VXUJARFQ-CXVJxFhH.js → architectureDiagram-VXUJARFQ-CT2SuxNw.js} +15 -15
- package/dist/{arrays-CldYf7p7.js → arrays-sEtDRoG4.js} +1 -1
- package/dist/assets/__vite-browser-external-Ddfz4Fpd.js +1 -0
- package/dist/assets/{worker-CpBbwbQo.js → worker-CgL6N0XX.js} +2 -2
- package/dist/{blockDiagram-VD42YOAC-DGDaxR8I.js → blockDiagram-VD42YOAC-Dy7hlFla.js} +7 -7
- package/dist/{button-Dj4BTre0.js → button-C5K9fIPF.js} +2 -2
- package/dist/{c4Diagram-YG6GDRKO-C2hc6ne8.js → c4Diagram-YG6GDRKO-BXlAmZ8Z.js} +4 -4
- package/dist/{capabilities-C9rrYCzf.js → capabilities-BceAxrAW.js} +2 -2
- package/dist/{channel-BBoIVUrJ.js → channel-D_PHgcig.js} +1 -1
- package/dist/{chat-ui-D3XBept8.js → chat-ui-BW28GQUq.js} +3084 -3057
- package/dist/{check-BcUIXnUT.js → check-DTbrK0zt.js} +1 -1
- package/dist/{chunk-4F5CHEZ2-BZq7Kom7.js → chunk-4F5CHEZ2-D9nGEHV8.js} +1 -1
- package/dist/{chunk-5FQGJX7Z-BOg95xG5.js → chunk-5FQGJX7Z-BNjes6Yx.js} +5 -5
- package/dist/{chunk-ABZYJK2D-D0cLy8Bb.js → chunk-ABZYJK2D-Dz0-H2B5.js} +1 -1
- package/dist/{chunk-ATLVNIR6-BXsEjlHF.js → chunk-ATLVNIR6-o0Z5MZLd.js} +1 -1
- package/dist/{chunk-B2363JML-D9-XOau1.js → chunk-B2363JML-KEJpLGGP.js} +1 -1
- package/dist/{chunk-B4BG7PRW-Q1usn6T3.js → chunk-B4BG7PRW-BL98U9B4.js} +4 -4
- package/dist/{chunk-DI55MBZ5-D1qLYNrb.js → chunk-DI55MBZ5-Dwkn0LWm.js} +4 -4
- package/dist/{chunk-EXTU4WIE-BKNXdLmD.js → chunk-EXTU4WIE-9sNjmQrB.js} +1 -1
- package/dist/{chunk-FRFDVMJY-BSBUAX7r.js → chunk-FRFDVMJY-DzQqMWrl.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-D6c6cOBG.js → chunk-JA3XYJ7Z-C32Y7Epf.js} +2 -2
- package/dist/{chunk-JZLCHNYA-BvsPHJmL.js → chunk-JZLCHNYA-C6ftyVMN.js} +4 -4
- package/dist/{chunk-N4CR4FBY-8ycT-O9a.js → chunk-N4CR4FBY-DUhGZhZs.js} +5 -5
- package/dist/{chunk-PL6DKKU2-B0MTXvyc.js → chunk-PL6DKKU2-D7km-08O.js} +1 -1
- package/dist/{chunk-QN33PNHL-Bb-eUBW3.js → chunk-QN33PNHL-0K6SDYn3.js} +1 -1
- package/dist/{chunk-QXUST7PY-DV8yRwBd.js → chunk-QXUST7PY-DMhsRpYK.js} +5 -5
- package/dist/{chunk-S3R3BYOJ-mQeCz5CE.js → chunk-S3R3BYOJ-oAe3dEbO.js} +3 -3
- package/dist/{chunk-SJTYNZTY-CEG4F0pB.js → chunk-SJTYNZTY-BkJrPRFC.js} +1 -1
- package/dist/{chunk-TCCFYFTB-d3HOqL2I.js → chunk-TCCFYFTB-D58KeXnC.js} +6 -6
- package/dist/{chunk-TQ3KTPDO-DiCtqVSi.js → chunk-TQ3KTPDO-D_yA_wAb.js} +1 -1
- package/dist/{chunk-TZMSLE5B-BqW10dHe.js → chunk-TZMSLE5B-yBKS_DQU.js} +1 -1
- package/dist/{chunk-UMXZTB3W-97iS1iEl.js → chunk-UMXZTB3W-D7uwvNjd.js} +1 -1
- package/dist/{classDiagram-2ON5EDUG--Yh__LHb.js → classDiagram-2ON5EDUG-QjoAcuFE.js} +10 -10
- package/dist/{classDiagram-v2-WZHVMYZB-BC7X7Xtc.js → classDiagram-v2-WZHVMYZB-bUCv4gu2.js} +10 -10
- package/dist/{clone-BuIIsfA8.js → clone-Q4Fqwn6q.js} +1 -1
- package/dist/{code-block-37QAKDTI-BsGy1AOJ.js → code-block-37QAKDTI-m92Yc8pv.js} +2 -2
- package/dist/{code-visibility-Dt0Aq6-t.js → code-visibility-k3JE3fvP.js} +8425 -8595
- package/dist/{constants-D0gkYoE2.js → constants-T20xxyNf.js} +2 -2
- package/dist/{copy-DLf4aN7I.js → copy-BuQpJEzp.js} +2 -2
- package/dist/{dagre-6UL2VRFP-DRBWoQUw.js → dagre-6UL2VRFP-J0JKgwOt.js} +11 -11
- package/dist/{dagre-VYEPqXIV.js → dagre-By_QsQgc.js} +11 -11
- package/dist/{data-grid-overlay-editor-efe5ZagF.js → data-grid-overlay-editor-mfEJ5475.js} +2 -2
- package/dist/{diagram-PSM6KHXK-H66ATWP2.js → diagram-PSM6KHXK-DYgJuNk9.js} +18 -18
- package/dist/{diagram-QEK2KX5R-DItl5Wns.js → diagram-QEK2KX5R-CKdBR2sb.js} +14 -14
- package/dist/{diagram-S2PKOQOG-CtuW_ZuL.js → diagram-S2PKOQOG-Dpi7mo5W.js} +14 -14
- package/dist/dist-0Fif7jnk.js +5 -0
- package/dist/{dist-Dh3wkoyH.js → dist-4j4c7bjm.js} +2 -2
- package/dist/{dist-CDFZi-QD.js → dist-B3P2fFpz.js} +1 -1
- package/dist/{dist-BNyrZfqT.js → dist-B3pZ0Ab6.js} +2 -2
- package/dist/dist-B5h_9sHB.js +6 -0
- package/dist/dist-B9M6R5ye.js +5 -0
- package/dist/dist-BCt3tnck.js +8 -0
- package/dist/{dist-BrBucRXs.js → dist-BTfv03uy.js} +2 -2
- package/dist/dist-BUIJwMwn.js +8 -0
- package/dist/{dist-CYEylvZA.js → dist-BbbIBDiQ.js} +1 -1
- package/dist/{dist-KnujRhFL.js → dist-BcuoonNH.js} +4 -4
- package/dist/{dist-DJ6zJQZ4.js → dist-Bde4a2kU.js} +2 -2
- package/dist/{dist-t_qL7eB8.js → dist-Bfwsv11D.js} +2 -2
- package/dist/{dist-CNtV21T_.js → dist-BhM8gdSO.js} +4 -4
- package/dist/{dist-nuW5EDYT.js → dist-BotSqB48.js} +2 -2
- package/dist/dist-BpquMd3k.js +5 -0
- package/dist/dist-BzJsqYfz.js +5 -0
- package/dist/{dist-D029TiHd.js → dist-Bz_sYWbr.js} +2 -2
- package/dist/{dist-D3ZI9nhS.js → dist-C1BYNeCR.js} +4 -4
- package/dist/{dist-Bc5pmZIw.js → dist-C5VC_yzu.js} +1 -1
- package/dist/dist-CA5ELXAf.js +6 -0
- package/dist/dist-CLBRs6Uv.js +5 -0
- package/dist/{dist-Dhk6FMb0.js → dist-CLJWPTX2.js} +3 -3
- package/dist/{dist-C34oIrQ9.js → dist-CLUtPrdy.js} +1 -1
- package/dist/dist-CStVCMbq.js +5 -0
- package/dist/{dist-B8RaFTRF.js → dist-CUCNs1ja.js} +2 -2
- package/dist/dist-CZRIEY3Y.js +8 -0
- package/dist/{dist-UcOPnRMa.js → dist-CcXxepx6.js} +3 -3
- package/dist/dist-CuUHbFD0.js +5 -0
- package/dist/{dist-B8BjrFUE.js → dist-Cy1WxgBD.js} +5 -5
- package/dist/{dist-WdPUFc56.js → dist-D4CewLk6.js} +1 -1
- package/dist/{dist-DMZNjfX4.js → dist-DRfcqpxJ.js} +2 -2
- package/dist/dist-DV7Iabxb.js +8 -0
- package/dist/{dist-usPCDYx8.js → dist-D_bzzWBm.js} +1 -1
- package/dist/{dist-BvCfQQQE.js → dist-DgnE8F-r.js} +1 -1
- package/dist/{dist-JEhxD_cn.js → dist-DhHh0jLg.js} +1 -1
- package/dist/{dist-DGAfI2rB.js → dist-DqAWR3CS.js} +2 -2
- package/dist/{dist--sWVZwjW.js → dist-Du8WkPuU.js} +1 -1
- package/dist/dist-DuEeHMvL.js +5 -0
- package/dist/{dist-BTyJtnNg.js → dist-DxvORzUR.js} +1 -1
- package/dist/{dist-B507mf_I.js → dist-RqXTaiir.js} +2 -2
- package/dist/{dist-Yrfc6L0I.js → dist-fQ0ViXGs.js} +3 -3
- package/dist/{dist-B4LJpMEg.js → dist-h2c8sZvT.js} +1 -1
- package/dist/{dist-C2ej4eOH.js → dist-luvabDEB.js} +2 -2
- package/dist/{dist-B52GXZbd.js → dist-p2qyWijU.js} +2 -2
- package/dist/{erDiagram-Q2GNP2WA--19X2kU5.js → erDiagram-Q2GNP2WA-BU-m41EQ.js} +10 -10
- package/dist/{error-banner-CVkfBUT3.js → error-banner-5bz0L9hS.js} +3 -3
- package/dist/{esm-CWp0KQeK.js → esm-BfhQmZjp.js} +4 -4
- package/dist/{esm-DjNnlmpf.js → esm-Duie8iU-.js} +23 -23
- package/dist/{extends-vAi97cpa.js → extends-BgdxCfYu.js} +6 -6
- package/dist/{flatten-CzBvFdvC.js → flatten-Bbw7g6-K.js} +1 -1
- package/dist/{flowDiagram-NV44I4VS-DQmWlo7f.js → flowDiagram-NV44I4VS-CRoXKjGq.js} +10 -10
- package/dist/{formats-Dsy9kkZu.js → formats-BiH6HX1V.js} +4 -4
- package/dist/{ganttDiagram-JELNMOA3-BOGXJ8Lk.js → ganttDiagram-JELNMOA3-7mq5f9cO.js} +7 -7
- package/dist/{gitGraph-G5XIXVHT-DGlbae5m.js → gitGraph-G5XIXVHT-DiniR35k.js} +3 -3
- package/dist/{gitGraphDiagram-V2S2FVAM-DjzxfF0P.js → gitGraphDiagram-V2S2FVAM-Dfuokq6w.js} +13 -13
- package/dist/{glide-data-editor-DucgdjRo.js → glide-data-editor-Ck-MRdns.js} +557 -557
- package/dist/{graphlib-CVPKjKCS.js → graphlib-Ns7y5crs.js} +5 -5
- package/dist/{hasIn-COs6vImh.js → hasIn-Deg7jl_j.js} +3 -3
- package/dist/{html-to-image-CpggM7u1.js → html-to-image-Bi7maU1p.js} +115 -110
- package/dist/{info-VBDWY6EO-D2lvLLw5.js → info-VBDWY6EO-DVZvGhkQ.js} +3 -3
- package/dist/{infoDiagram-HS3SLOUP-ChNufFsP.js → infoDiagram-HS3SLOUP-CEnzWruK.js} +13 -13
- package/dist/{input-D4kjoQUB.js → input-BwcGY_X1.js} +70 -67
- package/dist/{isEmpty-Dd8mx_WL.js → isEmpty-CJJMn-QP.js} +1 -1
- package/dist/{isSymbol-BvIfMnn6.js → isSymbol-CoUCgMCM.js} +1 -1
- package/dist/{journeyDiagram-XKPGCS4Q-BO_O4Ij1.js → journeyDiagram-XKPGCS4Q-8XYSU1GI.js} +3 -3
- package/dist/{kanban-definition-3W4ZIXB7-CPpiiiWk.js → kanban-definition-3W4ZIXB7--9pT9z1R.js} +7 -7
- package/dist/{label-BLqV33b1.js → label-LWtdw5i8.js} +3 -3
- package/dist/{linear-2NnK4cxi.js → linear-B5-AFRiR.js} +2 -2
- package/dist/{loader-Dr8Qem8p.js → loader-BWLPpjKK.js} +2 -2
- package/dist/main.js +1688 -1569
- package/dist/{memoize-C9ltv0Cw.js → memoize-BOtf2yFf.js} +1 -1
- package/dist/{merge-CHn7Yx0N.js → merge-Be1CqGnU.js} +1 -1
- package/dist/mermaid-4DMBBIKO-DIdL224_.js +6 -0
- package/dist/{mermaid-DO-Daq7u.js → mermaid-YK4c8MNC.js} +44 -44
- package/dist/{mermaid-parser.core-DreccfmS.js → mermaid-parser.core-C3XRsazI.js} +8 -8
- package/dist/{min-BNz2lZfk.js → min-Dtgc8txR.js} +4 -4
- package/dist/{mindmap-definition-VGOIOE7T-CC1_Vl0f.js → mindmap-definition-VGOIOE7T-B-4mnfFG.js} +9 -9
- package/dist/{now-Sgq5m3D-.js → now-Ch98bJO_.js} +2 -2
- package/dist/{number-overlay-editor-CpKi64Fy.js → number-overlay-editor-D-a0qCT8.js} +1 -1
- package/dist/{once-rJImu7SE.js → once-DPuqGUeo.js} +1 -1
- package/dist/{packet-DYOGHKS2-CmWtF3uO.js → packet-DYOGHKS2-34raHOiB.js} +3 -3
- package/dist/{pick-CRAXxDYn.js → pick-D1Qo8s2C.js} +4 -4
- package/dist/{pie-VRWISCQL-B6u8vus8.js → pie-VRWISCQL-BaLlzZa3.js} +3 -3
- package/dist/{pieDiagram-ADFJNKIX-Di34MOFQ.js → pieDiagram-ADFJNKIX-Cr3cNpZY.js} +15 -15
- package/dist/{precisionRound-CnHPY_5v.js → precisionRound-Tqb4mg-H.js} +1 -1
- package/dist/{process-output-X8TR20AK.js → process-output-BimQ_hG4.js} +36 -28
- package/dist/{quadrantDiagram-AYHSOK5B-B9kVk1ny.js → quadrantDiagram-AYHSOK5B-BuNL8Q93.js} +4 -4
- package/dist/{radar-ZZBFDIW7-XAmXSa8s.js → radar-ZZBFDIW7-Ci7bfoZa.js} +3 -3
- package/dist/{react-vega-Dh6-UKKe.js → react-vega-B0sAlDTL.js} +9 -9
- package/dist/react-vega-B6ncY2Tp.js +9 -0
- package/dist/{requirementDiagram-UZGBJVZJ-BxGfGYEx.js → requirementDiagram-UZGBJVZJ-BG2lLUN1.js} +9 -9
- package/dist/{reveal-component-Cj2fUG1Q.js → reveal-component-BykBckM-.js} +31 -31
- package/dist/{sankeyDiagram-TZEHDZUN-D09PBJ-n.js → sankeyDiagram-TZEHDZUN-DMal8sps.js} +3 -3
- package/dist/{sequenceDiagram-WL72ISMW-t_Dpemj0.js → sequenceDiagram-WL72ISMW-DT6Tk-Eo.js} +4 -4
- package/dist/{spec-hVaaZsY5.js → spec-CyLiCjSf.js} +4 -4
- package/dist/{stateDiagram-FKZM4ZOC-B18gTP_j.js → stateDiagram-FKZM4ZOC-CB_lodq3.js} +12 -12
- package/dist/{stateDiagram-v2-4FDKWEC3-B6e_t14A.js → stateDiagram-v2-4FDKWEC3-E0RGjKsm.js} +10 -10
- package/dist/stex-KfRnSHzF.js +4 -0
- package/dist/{strings-BiIhGaI8.js → strings-Bu3vlb6W.js} +7 -7
- package/dist/style.css +1 -1
- package/dist/{swiper-component-DlD2GU2g.js → swiper-component-B2t5sN1q.js} +3 -3
- package/dist/{time-C1SGcFMH.js → time-CsmIF9YZ.js} +3 -3
- package/dist/{timeline-definition-IT6M3QCI-DJnh1ks5.js → timeline-definition-IT6M3QCI-NfSKRvH0.js} +2 -2
- package/dist/{toDate-CIpC_34u.js → toDate-DNWCUEQp.js} +5 -5
- package/dist/{tooltip-DRaMBu06.js → tooltip-C5FYOpQc.js} +4 -4
- package/dist/{treemap-GDKQZRPO-Du95DV6u.js → treemap-GDKQZRPO-Cl6OQh8D.js} +3 -3
- package/dist/{types-Dzuoc3LN.js → types-CVvp1fKr.js} +2 -9
- package/dist/{useAsyncData-C56Khv_R.js → useAsyncData-xWFWzCee.js} +2 -2
- package/dist/{useDateFormatter-B_9k85Ex.js → useDateFormatter-BA4FCquG.js} +2 -2
- package/dist/{useDeepCompareMemoize-Dt98v2ua.js → useDeepCompareMemoize-DSChED4g.js} +1 -1
- package/dist/{useIframeCapabilities-BkYHTrss.js → useIframeCapabilities-C4JTXTIh.js} +1 -1
- package/dist/{useLifecycle-BF6-z62y.js → useLifecycle-B81PFEja.js} +4 -4
- package/dist/{useTheme-DykuNHR2.js → useTheme-EmVyK9N9.js} +23 -21
- package/dist/{vega-component-cSdqoAxe.js → vega-component-BCunE3-9.js} +18 -18
- package/dist/{vega-loader.browser-3_z8GoFC.js → vega-loader.browser-CZ-J8Py3.js} +3 -3
- package/dist/{xychartDiagram-PRI3JC2R-Dk2d_bX0.js → xychartDiagram-PRI3JC2R-BvwftqMA.js} +9 -9
- package/dist/{zod-BWkcDORu.js → zod-CoBiJ5v4.js} +3 -3
- package/package.json +1 -1
- package/src/components/app-config/user-config-form.tsx +36 -0
- package/src/components/chat/__tests__/chat-utils.test.ts +269 -0
- package/src/components/chat/chat-utils.ts +14 -58
- package/src/components/data-table/TableBottomBar.tsx +27 -6
- package/src/components/data-table/TableTopBar.tsx +7 -1
- package/src/components/data-table/__tests__/TableBottomBar.test.tsx +73 -0
- package/src/components/data-table/__tests__/column-explorer.test.tsx +128 -0
- package/src/components/data-table/__tests__/column-header.test.tsx +110 -277
- package/src/components/data-table/__tests__/data-table.test.tsx +52 -1
- package/src/components/data-table/__tests__/date-filter-inputs.test.tsx +33 -0
- package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +75 -38
- package/src/components/data-table/__tests__/filter-pills.test.tsx +287 -0
- package/src/components/data-table/__tests__/filter-test-utils.ts +47 -0
- package/src/components/data-table/__tests__/filters.test.ts +5 -5
- package/src/components/data-table/__tests__/header-items.test.tsx +47 -1
- package/src/components/data-table/__tests__/useColumnVisibility.test.ts +42 -0
- package/src/components/data-table/add-filter-button.tsx +85 -0
- package/src/components/data-table/column-explorer-panel/column-explorer.tsx +98 -26
- package/src/components/data-table/column-header.tsx +94 -691
- package/src/components/data-table/columns.tsx +3 -4
- package/src/components/data-table/context-menu.tsx +26 -12
- package/src/components/data-table/data-table.tsx +125 -56
- package/src/components/data-table/date-filter-inputs.tsx +13 -10
- package/src/components/data-table/export-actions.tsx +17 -6
- package/src/components/data-table/filter-by-values-picker.tsx +13 -19
- package/src/components/data-table/filter-editor-context.tsx +34 -0
- package/src/components/data-table/filter-pill-editor.tsx +152 -175
- package/src/components/data-table/filter-pills.tsx +190 -153
- package/src/components/data-table/filters/builders.ts +102 -0
- package/src/components/data-table/filters/defaults.ts +31 -0
- package/src/components/data-table/filters/format.ts +131 -0
- package/src/components/data-table/filters/guards.ts +51 -0
- package/src/components/data-table/filters/index.ts +7 -0
- package/src/components/data-table/filters/operators.ts +76 -0
- package/src/components/data-table/filters/serialize.ts +186 -0
- package/src/components/data-table/filters/types.ts +33 -0
- package/src/components/data-table/header-items.tsx +25 -85
- package/src/components/data-table/hooks/use-column-visibility.ts +56 -0
- package/src/components/data-table/pagination.tsx +16 -3
- package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +16 -6
- package/src/components/data-table/value-chips.tsx +52 -0
- package/src/components/databases/display.tsx +2 -0
- package/src/components/datasources/__tests__/utils.test.ts +82 -0
- package/src/components/datasources/utils.ts +16 -15
- package/src/components/dependency-graph/minimap-content.tsx +2 -2
- package/src/components/editor/errors/mangled-local-chip.tsx +50 -0
- package/src/components/editor/output/MarimoErrorOutput.tsx +110 -27
- package/src/components/editor/output/MarimoTracebackOutput.tsx +51 -34
- package/src/components/ui/number-field.tsx +13 -1
- package/src/core/cells/__tests__/actions.test.ts +48 -0
- package/src/core/cells/actions.ts +5 -6
- package/src/core/codemirror/__tests__/setup.test.ts +29 -0
- package/src/core/codemirror/cells/traceback-decorations.ts +1 -1
- package/src/core/codemirror/cm.ts +3 -2
- package/src/core/codemirror/format.ts +1 -0
- package/src/core/codemirror/language/languages/sql/sql.ts +1 -0
- package/src/core/codemirror/language/languages/sql/utils.ts +2 -0
- package/src/core/config/__tests__/config-schema.test.ts +2 -0
- package/src/core/config/config-schema.ts +1 -0
- package/src/css/app/Cell.css +0 -1
- package/src/plugins/impl/DataTablePlugin.tsx +94 -33
- package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +1 -0
- package/src/plugins/impl/chat/ChatPlugin.tsx +7 -1
- package/src/plugins/impl/chat/__tests__/chat-ui.test.ts +278 -0
- package/src/plugins/impl/chat/chat-ui.tsx +106 -59
- package/src/plugins/impl/chat/types.ts +5 -0
- package/src/plugins/impl/data-frames/DataFramePlugin.tsx +8 -6
- package/src/stories/dataframe.stories.tsx +1 -0
- package/src/utils/__tests__/local-variables.test.ts +132 -0
- package/src/utils/dates.ts +39 -0
- package/src/utils/local-variables.ts +67 -0
- package/dist/ErrorBoundary-D3wrPNma.js +0 -167
- package/dist/architecture-7HQA4BMR-CS9jOrqM.js +0 -6
- package/dist/assets/__vite-browser-external-CAdMKBac.js +0 -1
- package/dist/dist-21ButRCu.js +0 -8
- package/dist/dist-B--tLnAP.js +0 -5
- package/dist/dist-BoHGySTM.js +0 -5
- package/dist/dist-ByAz19Qc.js +0 -5
- package/dist/dist-C1Ap5CYU.js +0 -5
- package/dist/dist-C93EysN4.js +0 -5
- package/dist/dist-CY-lVor6.js +0 -8
- package/dist/dist-CYDuv4bR.js +0 -8
- package/dist/dist-Cfo5EE2t.js +0 -6
- package/dist/dist-CjivSDvN.js +0 -5
- package/dist/dist-Cqwx-MH7.js +0 -5
- package/dist/dist-DbpcoFAV.js +0 -6
- package/dist/dist-FUNenbiQ.js +0 -5
- package/dist/dist-zhSud5X3.js +0 -8
- package/dist/mermaid-4DMBBIKO-B7VQMwJx.js +0 -6
- package/dist/react-vega-Cavbrg4l.js +0 -9
- package/dist/stex-ChDHQs3R.js +0 -4
- package/src/components/data-table/__tests__/column-header.test.ts +0 -65
- package/src/components/data-table/filters.ts +0 -386
- /package/dist/{_baseFor-BGiY-cm1.js → _baseFor-4jw-lnCC.js} +0 -0
- /package/dist/{clsx-CyyyQ8Ue.js → clsx-CIWA5tNO.js} +0 -0
- /package/dist/{defaultLocale-DoeErsX2.js → defaultLocale-BoHTsDG6.js} +0 -0
- /package/dist/{defaultLocale-BpsHxBd7.js → defaultLocale-u-3osm0P.js} +0 -0
- /package/dist/{dist-CCADb07R.js → dist-DNdhYsgW.js} +0 -0
- /package/dist/{emotion-is-prop-valid.esm-DtW2o230.js → emotion-is-prop-valid.esm-DzSb5hsH.js} +0 -0
- /package/dist/{invariant-UcGKQEhF.js → invariant-wRzNXIsJ.js} +0 -0
- /package/dist/{jsx-runtime-COBk7ree.js → jsx-runtime-DebpN0FN.js} +0 -0
- /package/dist/{main-CThhXnXU.js → main-Tj_-QTyF.js} +0 -0
- /package/dist/{micromark-factory-space-CwHmg6iz.js → micromark-factory-space-DF2w36zS.js} +0 -0
- /package/dist/{ordinal-B43ZeR68.js → ordinal-ArJavP1Q.js} +0 -0
- /package/dist/{purify.es-DT70lfR0.js → purify.es-H92eMd9-.js} +0 -0
- /package/dist/{range-BOiA8qqU.js → range-C-rmrM1O.js} +0 -0
- /package/dist/{react-dom-BWRJ_g_k.js → react-dom-BTJzcVJ9.js} +0 -0
- /package/dist/{stex-DrxP7bb3.js → stex-BIsgBmK4.js} +0 -0
|
@@ -5,17 +5,13 @@ import { useAtomValue } from "jotai";
|
|
|
5
5
|
import {
|
|
6
6
|
BugPlayIcon,
|
|
7
7
|
ChevronDown,
|
|
8
|
+
ChevronRight,
|
|
8
9
|
CopyIcon,
|
|
9
10
|
ExternalLinkIcon,
|
|
10
11
|
MessageCircleIcon,
|
|
11
12
|
SearchIcon,
|
|
12
13
|
} from "lucide-react";
|
|
13
14
|
import { type JSX, useState } from "react";
|
|
14
|
-
import {
|
|
15
|
-
Accordion,
|
|
16
|
-
AccordionContent,
|
|
17
|
-
AccordionItem,
|
|
18
|
-
} from "@/components/ui/accordion";
|
|
19
15
|
import { Button } from "@/components/ui/button";
|
|
20
16
|
import {
|
|
21
17
|
DropdownMenu,
|
|
@@ -36,13 +32,17 @@ import { isWasm } from "@/core/wasm/utils";
|
|
|
36
32
|
import { renderHTML } from "@/plugins/core/RenderHTML";
|
|
37
33
|
import { sanitizeHtml } from "@/plugins/core/sanitize-html";
|
|
38
34
|
import { copyToClipboard } from "@/utils/copy";
|
|
35
|
+
import {
|
|
36
|
+
containsMangledLocal,
|
|
37
|
+
splitMangledLocals,
|
|
38
|
+
} from "@/utils/local-variables";
|
|
39
39
|
import {
|
|
40
40
|
elementContainsMarimoCellFile,
|
|
41
41
|
extractAllTracebackInfo,
|
|
42
42
|
getTracebackInfo,
|
|
43
43
|
} from "@/utils/traceback";
|
|
44
|
-
import { cn } from "../../../utils/cn";
|
|
45
44
|
import { AIFixButton } from "../errors/auto-fix";
|
|
45
|
+
import { MangledSegments } from "../errors/mangled-local-chip";
|
|
46
46
|
import { CellLinkTraceback } from "../links/cell-link";
|
|
47
47
|
import type { OnRefactorWithAI } from "../Output";
|
|
48
48
|
|
|
@@ -52,8 +52,6 @@ interface Props {
|
|
|
52
52
|
onRefactorWithAI?: OnRefactorWithAI;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
const KEY = "item";
|
|
56
|
-
|
|
57
55
|
/**
|
|
58
56
|
* List of errors due to violations of Marimo semantics.
|
|
59
57
|
*/
|
|
@@ -64,9 +62,12 @@ export const MarimoTracebackOutput = ({
|
|
|
64
62
|
}: Props): JSX.Element => {
|
|
65
63
|
const htmlTraceback = renderHTML({
|
|
66
64
|
html: traceback,
|
|
67
|
-
additionalReplacements: [
|
|
65
|
+
additionalReplacements: [
|
|
66
|
+
replaceTracebackFilenames,
|
|
67
|
+
replaceTracebackPrefix,
|
|
68
|
+
replaceMangledLocal,
|
|
69
|
+
],
|
|
68
70
|
});
|
|
69
|
-
const [expanded, setExpanded] = useState(true);
|
|
70
71
|
|
|
71
72
|
const lastTracebackLine = lastLine(traceback);
|
|
72
73
|
const aiEnabled = useAtomValue(aiEnabledAtom);
|
|
@@ -86,6 +87,8 @@ export const MarimoTracebackOutput = ({
|
|
|
86
87
|
|
|
87
88
|
const showSearch = !isStaticNotebook();
|
|
88
89
|
|
|
90
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
91
|
+
|
|
89
92
|
const handleRefactorWithAI = (triggerImmediately: boolean) => {
|
|
90
93
|
onRefactorWithAI?.({
|
|
91
94
|
prompt: `My code gives the following error:\n\n${lastTracebackLine}`,
|
|
@@ -93,32 +96,29 @@ export const MarimoTracebackOutput = ({
|
|
|
93
96
|
});
|
|
94
97
|
};
|
|
95
98
|
|
|
96
|
-
const [error, errorMessage] = lastTracebackLine.split(":", 2);
|
|
97
|
-
|
|
98
99
|
return (
|
|
99
100
|
<div className="flex flex-col gap-2 min-w-full w-fit">
|
|
100
|
-
<
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
</Accordion>
|
|
101
|
+
<button
|
|
102
|
+
type="button"
|
|
103
|
+
onClick={() => setIsOpen(!isOpen)}
|
|
104
|
+
aria-expanded={isOpen}
|
|
105
|
+
aria-label={isOpen ? "Collapse traceback" : "Expand traceback"}
|
|
106
|
+
className="self-start flex items-center gap-1 pt-2 text-muted-foreground/70 hover:text-muted-foreground transition-colors"
|
|
107
|
+
>
|
|
108
|
+
{isOpen ? (
|
|
109
|
+
<ChevronDown className="h-3 w-3" />
|
|
110
|
+
) : (
|
|
111
|
+
<ChevronRight className="h-3 w-3" />
|
|
112
|
+
)}
|
|
113
|
+
<span className="text-[0.6875rem] uppercase tracking-wider">
|
|
114
|
+
Traceback
|
|
115
|
+
</span>
|
|
116
|
+
</button>
|
|
117
|
+
{isOpen && (
|
|
118
|
+
<div className="text-muted-foreground pr-4 text-xs overflow-auto">
|
|
119
|
+
{htmlTraceback}
|
|
120
|
+
</div>
|
|
121
|
+
)}
|
|
122
122
|
<div className="flex gap-2">
|
|
123
123
|
{showAIFix && (
|
|
124
124
|
<AIFixButton
|
|
@@ -249,6 +249,23 @@ export const replaceTracebackFilenames = (domNode: DOMNode) => {
|
|
|
249
249
|
}
|
|
250
250
|
};
|
|
251
251
|
|
|
252
|
+
/**
|
|
253
|
+
* Replace any cell-local mangled name (`_cell_<id>_<name>`) inside a text
|
|
254
|
+
* node with a {@link MangledLocalChip}. The mangled name appears in both
|
|
255
|
+
* the final `NameError:` line and inside compiled-cell source lines because
|
|
256
|
+
* the compiler rewrites underscore-prefixed references at AST-visit time.
|
|
257
|
+
*/
|
|
258
|
+
export const replaceMangledLocal = (domNode: DOMNode) => {
|
|
259
|
+
if (!(domNode instanceof Text) || !domNode.nodeValue) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (!containsMangledLocal(domNode.nodeValue)) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
const segments = splitMangledLocals(domNode.nodeValue);
|
|
266
|
+
return <MangledSegments segments={segments} />;
|
|
267
|
+
};
|
|
268
|
+
|
|
252
269
|
export const replaceTracebackPrefix = (domNode: DOMNode) => {
|
|
253
270
|
if (
|
|
254
271
|
domNode instanceof Text &&
|
|
@@ -15,10 +15,17 @@ import { maxFractionalDigits } from "@/utils/numbers";
|
|
|
15
15
|
export interface NumberFieldProps extends AriaNumberFieldProps {
|
|
16
16
|
placeholder?: string;
|
|
17
17
|
variant?: "default" | "xs";
|
|
18
|
+
/**
|
|
19
|
+
* Fires on every keystroke with the raw text currently in the input.
|
|
20
|
+
* React-aria's `onChange` only fires on commit (blur/Enter/stepper); use this
|
|
21
|
+
* when callers need to peek at the in-progress value, e.g. to enable an Apply
|
|
22
|
+
* button while the user is still typing.
|
|
23
|
+
*/
|
|
24
|
+
onInputText?: (text: string) => void;
|
|
18
25
|
}
|
|
19
26
|
|
|
20
27
|
export const NumberField = React.forwardRef<HTMLInputElement, NumberFieldProps>(
|
|
21
|
-
({ placeholder, variant = "default", ...props }, ref) => {
|
|
28
|
+
({ placeholder, variant = "default", onInputText, ...props }, ref) => {
|
|
22
29
|
const { locale } = useLocale();
|
|
23
30
|
return (
|
|
24
31
|
<AriaNumberField
|
|
@@ -48,6 +55,11 @@ export const NumberField = React.forwardRef<HTMLInputElement, NumberFieldProps>(
|
|
|
48
55
|
e.stopPropagation();
|
|
49
56
|
}
|
|
50
57
|
}}
|
|
58
|
+
onInput={
|
|
59
|
+
onInputText
|
|
60
|
+
? (e) => onInputText(e.currentTarget.value)
|
|
61
|
+
: undefined
|
|
62
|
+
}
|
|
51
63
|
className={cn(
|
|
52
64
|
"flex-1",
|
|
53
65
|
"w-full",
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { MockNotebook } from "@/__mocks__/notebook";
|
|
5
|
+
import { scrollAndHighlightCell } from "@/components/editor/links/cell-link";
|
|
6
|
+
import { notebookAtom } from "@/core/cells/cells";
|
|
7
|
+
import type { CellId } from "@/core/cells/ids";
|
|
8
|
+
import { createCellRuntimeState } from "@/core/cells/types";
|
|
9
|
+
import { store } from "@/core/state/jotai";
|
|
10
|
+
import { notebookScrollToRunning } from "../actions";
|
|
11
|
+
|
|
12
|
+
vi.mock("@/components/editor/links/cell-link", () => ({
|
|
13
|
+
scrollAndHighlightCell: vi.fn(),
|
|
14
|
+
}));
|
|
15
|
+
|
|
16
|
+
describe("notebookScrollToRunning", () => {
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
vi.clearAllMocks();
|
|
19
|
+
store.set(notebookAtom, MockNotebook.notebookState({ cellData: {} }));
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("scrolls to the first running cell in notebook order", () => {
|
|
23
|
+
const runtimeOnlyCellId = "runtime-only" as CellId;
|
|
24
|
+
const idleCellId = "idle-cell" as CellId;
|
|
25
|
+
const runningCellId = "running-cell" as CellId;
|
|
26
|
+
|
|
27
|
+
const notebook = MockNotebook.notebookState({
|
|
28
|
+
cellData: {
|
|
29
|
+
[idleCellId]: {},
|
|
30
|
+
[runningCellId]: {},
|
|
31
|
+
},
|
|
32
|
+
cellRuntime: {
|
|
33
|
+
[idleCellId]: { status: "idle" },
|
|
34
|
+
[runningCellId]: { status: "running" },
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
notebook.cellRuntime = {
|
|
38
|
+
[runtimeOnlyCellId]: createCellRuntimeState({ status: "running" }),
|
|
39
|
+
...notebook.cellRuntime,
|
|
40
|
+
};
|
|
41
|
+
store.set(notebookAtom, notebook);
|
|
42
|
+
|
|
43
|
+
notebookScrollToRunning();
|
|
44
|
+
|
|
45
|
+
expect(scrollAndHighlightCell).toHaveBeenCalledOnce();
|
|
46
|
+
expect(scrollAndHighlightCell).toHaveBeenCalledWith(runningCellId, "focus");
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { scrollAndHighlightCell } from "@/components/editor/links/cell-link";
|
|
4
|
-
import { Objects } from "@/utils/objects";
|
|
5
4
|
import { store } from "../state/jotai";
|
|
6
5
|
import { notebookAtom } from "./cells";
|
|
7
6
|
|
|
@@ -10,12 +9,12 @@ import { notebookAtom } from "./cells";
|
|
|
10
9
|
*/
|
|
11
10
|
export function notebookScrollToRunning() {
|
|
12
11
|
// find cell that is currently in "running" state
|
|
13
|
-
const { cellRuntime } = store.get(notebookAtom);
|
|
14
|
-
const
|
|
15
|
-
(
|
|
12
|
+
const { cellIds, cellRuntime } = store.get(notebookAtom);
|
|
13
|
+
const cellId = cellIds.inOrderIds.find(
|
|
14
|
+
(id) => cellRuntime[id]?.status === "running",
|
|
16
15
|
);
|
|
17
|
-
if (!
|
|
16
|
+
if (!cellId) {
|
|
18
17
|
return;
|
|
19
18
|
}
|
|
20
|
-
scrollAndHighlightCell(
|
|
19
|
+
scrollAndHighlightCell(cellId, "focus");
|
|
21
20
|
}
|
|
@@ -134,6 +134,35 @@ describe("snapshot all duplicate keymaps", () => {
|
|
|
134
134
|
});
|
|
135
135
|
});
|
|
136
136
|
|
|
137
|
+
test("auto_close_pairs: false removes closeBrackets keymaps", () => {
|
|
138
|
+
const withAutoClose = EditorState.create({
|
|
139
|
+
extensions: setup(),
|
|
140
|
+
});
|
|
141
|
+
const withoutAutoClose = EditorState.create({
|
|
142
|
+
extensions: setup({
|
|
143
|
+
completionConfig: {
|
|
144
|
+
...getOpts().completionConfig,
|
|
145
|
+
auto_close_pairs: false,
|
|
146
|
+
},
|
|
147
|
+
}),
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
const keysWith = withAutoClose.facet(keymap).flat();
|
|
151
|
+
const keysWithout = withoutAutoClose.facet(keymap).flat();
|
|
152
|
+
|
|
153
|
+
// closeBracketsKeymap contributes Backspace and Enter handlers
|
|
154
|
+
expect(keysWith.length).toBeGreaterThan(keysWithout.length);
|
|
155
|
+
|
|
156
|
+
const hasBracketPairHandler = (state: EditorState) =>
|
|
157
|
+
state
|
|
158
|
+
.facet(keymap)
|
|
159
|
+
.flat()
|
|
160
|
+
.some((k) => k.run?.name === "deleteBracketPair");
|
|
161
|
+
|
|
162
|
+
expect(hasBracketPairHandler(withAutoClose)).toBe(true);
|
|
163
|
+
expect(hasBracketPairHandler(withoutAutoClose)).toBe(false);
|
|
164
|
+
});
|
|
165
|
+
|
|
137
166
|
test("placeholder adds another extension", () => {
|
|
138
167
|
const opts = getOpts();
|
|
139
168
|
const withAI = new PythonLanguageAdapter()
|
|
@@ -147,7 +147,7 @@ export function errorLineHighlighter(
|
|
|
147
147
|
backgroundColor: "color-mix(in srgb, var(--red-4) 40%, transparent)",
|
|
148
148
|
},
|
|
149
149
|
"&.cm-focused .cm-error-line.cm-activeLine": {
|
|
150
|
-
backgroundColor: "color-mix(in srgb, var(--red-
|
|
150
|
+
backgroundColor: "color-mix(in srgb, var(--red-5) 40%, transparent)",
|
|
151
151
|
},
|
|
152
152
|
}),
|
|
153
153
|
];
|
|
@@ -182,6 +182,7 @@ export const basicBundle = (opts: CodeMirrorSetupOpts): Extension[] => {
|
|
|
182
182
|
diagnosticsConfig,
|
|
183
183
|
} = opts;
|
|
184
184
|
const placeholderType = getPlaceholderType(opts);
|
|
185
|
+
const autoClosePairs = completionConfig.auto_close_pairs !== false;
|
|
185
186
|
|
|
186
187
|
return [
|
|
187
188
|
///// View
|
|
@@ -208,10 +209,10 @@ export const basicBundle = (opts: CodeMirrorSetupOpts): Extension[] => {
|
|
|
208
209
|
copilotBundle(completionConfig),
|
|
209
210
|
foldGutter(),
|
|
210
211
|
stringsAutoCloseBraces(),
|
|
211
|
-
closeBrackets(),
|
|
212
|
+
autoClosePairs ? closeBrackets() : [],
|
|
212
213
|
completionKeymap(acceptCompletionOnEnter),
|
|
213
214
|
// to avoid clash with charDeleteBackward keymap
|
|
214
|
-
Prec.high(keymap.of(closeBracketsKeymap)),
|
|
215
|
+
autoClosePairs ? Prec.high(keymap.of(closeBracketsKeymap)) : [],
|
|
215
216
|
bracketMatching(),
|
|
216
217
|
indentOnInput(),
|
|
217
218
|
indentUnit.of(" "),
|
|
@@ -52,6 +52,7 @@ const KNOWN_DIALECTS_ARRAY = [
|
|
|
52
52
|
"databricks",
|
|
53
53
|
"datafusion",
|
|
54
54
|
"microsoft sql server",
|
|
55
|
+
"dremio",
|
|
55
56
|
] as const;
|
|
56
57
|
const KNOWN_DIALECTS: ReadonlySet<string> = new Set(KNOWN_DIALECTS_ARRAY);
|
|
57
58
|
type KnownDialect = (typeof KNOWN_DIALECTS_ARRAY)[number];
|
|
@@ -115,6 +116,7 @@ export function guessDialect(
|
|
|
115
116
|
case "spark":
|
|
116
117
|
case "databricks":
|
|
117
118
|
case "datafusion":
|
|
119
|
+
case "dremio":
|
|
118
120
|
Logger.debug("Unsupported dialect", { dialect });
|
|
119
121
|
return ModifiedStandardSQL;
|
|
120
122
|
default:
|
|
@@ -56,6 +56,7 @@ test("default UserConfig - empty", () => {
|
|
|
56
56
|
},
|
|
57
57
|
"completion": {
|
|
58
58
|
"activate_on_typing": true,
|
|
59
|
+
"auto_close_pairs": true,
|
|
59
60
|
"copilot": false,
|
|
60
61
|
"signature_hint_on_typing": false,
|
|
61
62
|
},
|
|
@@ -127,6 +128,7 @@ test("default UserConfig - one level", () => {
|
|
|
127
128
|
},
|
|
128
129
|
"completion": {
|
|
129
130
|
"activate_on_typing": true,
|
|
131
|
+
"auto_close_pairs": true,
|
|
130
132
|
"copilot": false,
|
|
131
133
|
"signature_hint_on_typing": false,
|
|
132
134
|
},
|
|
@@ -75,6 +75,7 @@ export const UserConfigSchema = z
|
|
|
75
75
|
.object({
|
|
76
76
|
activate_on_typing: z.boolean().prefault(true),
|
|
77
77
|
signature_hint_on_typing: z.boolean().prefault(false),
|
|
78
|
+
auto_close_pairs: z.boolean().prefault(true),
|
|
78
79
|
copilot: z
|
|
79
80
|
.union([z.boolean(), z.enum(["github", "codeium", "custom"])])
|
|
80
81
|
.prefault(false)
|
package/src/css/app/Cell.css
CHANGED
|
@@ -8,8 +8,9 @@ import type {
|
|
|
8
8
|
PaginationState,
|
|
9
9
|
RowSelectionState,
|
|
10
10
|
SortingState,
|
|
11
|
+
Table as TanstackTable,
|
|
11
12
|
} from "@tanstack/react-table";
|
|
12
|
-
import { Provider } from "jotai";
|
|
13
|
+
import { Provider, useAtomValue } from "jotai";
|
|
13
14
|
import { Table2Icon } from "lucide-react";
|
|
14
15
|
import type { JSX } from "react";
|
|
15
16
|
import React, {
|
|
@@ -28,6 +29,7 @@ import { TablePanel } from "@/components/data-table/charts/charts";
|
|
|
28
29
|
import { hasChart } from "@/components/data-table/charts/storage";
|
|
29
30
|
import { ColumnChartSpecModel } from "@/components/data-table/column-summary/chart-spec-model";
|
|
30
31
|
import { ColumnChartContext } from "@/components/data-table/column-summary/column-summary";
|
|
32
|
+
import { downloadSizeLimitAtom } from "@/components/data-table/download-policy/atoms";
|
|
31
33
|
import { filtersToFilterGroup } from "@/components/data-table/filters";
|
|
32
34
|
import { usePanelOwnership } from "@/components/data-table/hooks/use-panel-ownership";
|
|
33
35
|
import { LoadingTable } from "@/components/data-table/loading-table";
|
|
@@ -190,11 +192,11 @@ interface Data<T> {
|
|
|
190
192
|
fieldTypes?: FieldTypesWithExternalType | null;
|
|
191
193
|
freezeColumnsLeft?: string[];
|
|
192
194
|
freezeColumnsRight?: string[];
|
|
195
|
+
hiddenColumns?: string[];
|
|
193
196
|
textJustifyColumns?: Record<string, "left" | "center" | "right">;
|
|
194
197
|
wrappedColumns?: string[];
|
|
195
198
|
headerTooltip?: Record<string, string>;
|
|
196
199
|
totalColumns: number;
|
|
197
|
-
sizeBytes?: number | null;
|
|
198
200
|
maxColumns: number | "all";
|
|
199
201
|
hasStableRowId: boolean;
|
|
200
202
|
lazy: boolean;
|
|
@@ -221,12 +223,14 @@ type DataTableFunctions = {
|
|
|
221
223
|
cell_styles?: CellStyleState | null;
|
|
222
224
|
cell_hover_texts?: Record<string, Record<string, string | null>> | null;
|
|
223
225
|
raw_data?: TableData<T> | null;
|
|
224
|
-
size_bytes?: number | null;
|
|
225
226
|
}>;
|
|
226
227
|
get_data_url?: GetDataUrl;
|
|
227
228
|
get_row_ids?: GetRowIds;
|
|
228
229
|
calculate_top_k_rows?: CalculateTopKRows;
|
|
229
230
|
preview_column?: PreviewColumn;
|
|
231
|
+
get_size_bytes: (opts: Record<string, never>) => Promise<{
|
|
232
|
+
size_bytes?: number | null;
|
|
233
|
+
}>;
|
|
230
234
|
};
|
|
231
235
|
|
|
232
236
|
type S = (number | string | { rowId: string; columnName?: string })[];
|
|
@@ -265,6 +269,7 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
|
|
|
265
269
|
rowHeaders: columnToFieldTypesSchema,
|
|
266
270
|
freezeColumnsLeft: z.array(z.string()).optional(),
|
|
267
271
|
freezeColumnsRight: z.array(z.string()).optional(),
|
|
272
|
+
hiddenColumns: z.array(z.string()).optional(),
|
|
268
273
|
textJustifyColumns: z
|
|
269
274
|
.record(z.string(), z.enum(["left", "center", "right"]))
|
|
270
275
|
.optional(),
|
|
@@ -272,7 +277,6 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
|
|
|
272
277
|
headerTooltip: z.record(z.string(), z.string()).optional(),
|
|
273
278
|
fieldTypes: columnToFieldTypesSchema.nullish(),
|
|
274
279
|
totalColumns: z.number(),
|
|
275
|
-
sizeBytes: z.number().nullish(),
|
|
276
280
|
maxColumns: z.union([z.number(), z.literal("all")]).default("all"),
|
|
277
281
|
hasStableRowId: z.boolean().default(false),
|
|
278
282
|
maxHeight: z.number().optional(),
|
|
@@ -330,7 +334,6 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
|
|
|
330
334
|
.nullable(),
|
|
331
335
|
cell_hover_texts: cellHoverTextSchema.nullable(),
|
|
332
336
|
raw_data: z.union([z.string(), z.array(z.looseObject({}))]).nullish(),
|
|
333
|
-
size_bytes: z.number().nullish(),
|
|
334
337
|
}),
|
|
335
338
|
),
|
|
336
339
|
get_row_ids: rpc.input(z.object({}).passthrough()).output(
|
|
@@ -362,6 +365,9 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
|
|
|
362
365
|
stats: columnStats.nullable(),
|
|
363
366
|
}),
|
|
364
367
|
),
|
|
368
|
+
get_size_bytes: rpc
|
|
369
|
+
.input(z.object({}))
|
|
370
|
+
.output(z.object({ size_bytes: z.number().nullish() })),
|
|
365
371
|
})
|
|
366
372
|
.renderer((props) => {
|
|
367
373
|
return (
|
|
@@ -536,7 +542,6 @@ export const LoadingDataTableComponent = memo(
|
|
|
536
542
|
rows: T[];
|
|
537
543
|
rawRows?: T[];
|
|
538
544
|
totalRows: number | TooManyRows;
|
|
539
|
-
sizeBytes?: number | null;
|
|
540
545
|
cellStyles: CellStyleState | undefined | null;
|
|
541
546
|
cellHoverTexts?: Record<string, Record<string, string | null>> | null;
|
|
542
547
|
}>(async () => {
|
|
@@ -553,7 +558,6 @@ export const LoadingDataTableComponent = memo(
|
|
|
553
558
|
let tableData = props.data;
|
|
554
559
|
let rawTableData: TableData<T> | undefined | null = props.rawData;
|
|
555
560
|
let totalRows = props.totalRows;
|
|
556
|
-
let sizeBytes = props.sizeBytes ?? null;
|
|
557
561
|
let cellStyles = props.cellStyles;
|
|
558
562
|
let cellHoverTexts = props.cellHoverTexts;
|
|
559
563
|
|
|
@@ -597,7 +601,6 @@ export const LoadingDataTableComponent = memo(
|
|
|
597
601
|
tableData = searchResults.data;
|
|
598
602
|
rawTableData = searchResults.raw_data;
|
|
599
603
|
totalRows = searchResults.total_rows;
|
|
600
|
-
sizeBytes = searchResults.size_bytes ?? null;
|
|
601
604
|
cellStyles = searchResults.cell_styles || {};
|
|
602
605
|
cellHoverTexts = searchResults.cell_hover_texts || {};
|
|
603
606
|
}
|
|
@@ -610,7 +613,6 @@ export const LoadingDataTableComponent = memo(
|
|
|
610
613
|
rows: tableData,
|
|
611
614
|
rawRows: rawData,
|
|
612
615
|
totalRows: totalRows,
|
|
613
|
-
sizeBytes,
|
|
614
616
|
cellStyles,
|
|
615
617
|
cellHoverTexts,
|
|
616
618
|
};
|
|
@@ -622,7 +624,6 @@ export const LoadingDataTableComponent = memo(
|
|
|
622
624
|
useDeepCompareMemoize(props.fieldTypes),
|
|
623
625
|
props.data,
|
|
624
626
|
props.totalRows,
|
|
625
|
-
props.sizeBytes,
|
|
626
627
|
props.lazy,
|
|
627
628
|
props.cellHoverTexts,
|
|
628
629
|
props.cellStyles,
|
|
@@ -630,6 +631,34 @@ export const LoadingDataTableComponent = memo(
|
|
|
630
631
|
paginationState.pageIndex,
|
|
631
632
|
]);
|
|
632
633
|
|
|
634
|
+
const policy = useAtomValue(downloadSizeLimitAtom);
|
|
635
|
+
const { data: sizeBytesData, isPending: sizeBytesPending } = useAsyncData<
|
|
636
|
+
number | null
|
|
637
|
+
>(async () => {
|
|
638
|
+
if (
|
|
639
|
+
!policy ||
|
|
640
|
+
!props.showDownload ||
|
|
641
|
+
props.lazy ||
|
|
642
|
+
props.totalRows === 0
|
|
643
|
+
) {
|
|
644
|
+
return null;
|
|
645
|
+
}
|
|
646
|
+
const result = await props.get_size_bytes({});
|
|
647
|
+
return result.size_bytes ?? null;
|
|
648
|
+
}, [
|
|
649
|
+
policy,
|
|
650
|
+
props.showDownload,
|
|
651
|
+
props.get_size_bytes,
|
|
652
|
+
props.lazy,
|
|
653
|
+
props.totalRows,
|
|
654
|
+
searchQuery,
|
|
655
|
+
useDeepCompareMemoize(filters),
|
|
656
|
+
useDeepCompareMemoize(sorting),
|
|
657
|
+
]);
|
|
658
|
+
const sizeBytes = sizeBytesData ?? null;
|
|
659
|
+
const sizeBytesIsLoading =
|
|
660
|
+
!!policy && props.showDownload && sizeBytesPending;
|
|
661
|
+
|
|
633
662
|
const getRow = useCallback(
|
|
634
663
|
async (rowId: number) => {
|
|
635
664
|
const sortArgs =
|
|
@@ -737,7 +766,8 @@ export const LoadingDataTableComponent = memo(
|
|
|
737
766
|
setFilters={setFilters}
|
|
738
767
|
reloading={isFetching && !isPending}
|
|
739
768
|
totalRows={data?.totalRows ?? props.totalRows}
|
|
740
|
-
sizeBytes={
|
|
769
|
+
sizeBytes={sizeBytes}
|
|
770
|
+
sizeBytesIsLoading={sizeBytesIsLoading}
|
|
741
771
|
paginationState={paginationState}
|
|
742
772
|
setPaginationState={setPaginationState}
|
|
743
773
|
cellStyles={data?.cellStyles ?? props.cellStyles}
|
|
@@ -785,6 +815,7 @@ const DataTableComponent = ({
|
|
|
785
815
|
rawData,
|
|
786
816
|
totalRows,
|
|
787
817
|
sizeBytes,
|
|
818
|
+
sizeBytesIsLoading,
|
|
788
819
|
maxColumns,
|
|
789
820
|
pagination,
|
|
790
821
|
selection,
|
|
@@ -814,6 +845,7 @@ const DataTableComponent = ({
|
|
|
814
845
|
reloading,
|
|
815
846
|
freezeColumnsLeft,
|
|
816
847
|
freezeColumnsRight,
|
|
848
|
+
hiddenColumns,
|
|
817
849
|
textJustifyColumns,
|
|
818
850
|
wrappedColumns,
|
|
819
851
|
headerTooltip,
|
|
@@ -835,6 +867,8 @@ const DataTableComponent = ({
|
|
|
835
867
|
rawData?: unknown[];
|
|
836
868
|
columnSummaries?: ColumnSummaries;
|
|
837
869
|
getRow: (rowIdx: number) => Promise<GetRowResult>;
|
|
870
|
+
sizeBytes?: number | null;
|
|
871
|
+
sizeBytesIsLoading?: boolean;
|
|
838
872
|
}): JSX.Element => {
|
|
839
873
|
const id = useId();
|
|
840
874
|
const [viewedRowIdx, setViewedRowIdx] = useState(0);
|
|
@@ -1007,6 +1041,52 @@ const DataTableComponent = ({
|
|
|
1007
1041
|
const isInVscode = isInVscodeExtension();
|
|
1008
1042
|
const isIslandsMode = isIslands();
|
|
1009
1043
|
|
|
1044
|
+
const renderTableExplorerPanel = useMemo(() => {
|
|
1045
|
+
if (!isAnyPanelOpen || !(showRowExplorer || canShowColumnExplorer)) {
|
|
1046
|
+
return undefined;
|
|
1047
|
+
}
|
|
1048
|
+
return (table: TanstackTable<unknown>) => (
|
|
1049
|
+
<ContextAwarePanelItem>
|
|
1050
|
+
<TableExplorerPanel
|
|
1051
|
+
rowIdx={viewedRowIdx}
|
|
1052
|
+
setRowIdx={setViewedRow}
|
|
1053
|
+
totalRows={totalRows}
|
|
1054
|
+
fieldTypes={memoizedUnclampedFieldTypes}
|
|
1055
|
+
getRow={getRow}
|
|
1056
|
+
isSelectable={isSelectable}
|
|
1057
|
+
isRowSelected={Boolean(rowSelection[viewedRowIdx])}
|
|
1058
|
+
handleRowSelectionChange={handleRowSelectionChange}
|
|
1059
|
+
previewColumn={preview_column}
|
|
1060
|
+
totalColumns={totalColumns}
|
|
1061
|
+
tableId={id}
|
|
1062
|
+
table={table}
|
|
1063
|
+
showRowExplorer={showRowExplorer && !isInVscode}
|
|
1064
|
+
showColumnExplorer={canShowColumnExplorer && !isInVscode}
|
|
1065
|
+
activeTab={panelType}
|
|
1066
|
+
onTabChange={setPanelType}
|
|
1067
|
+
/>
|
|
1068
|
+
</ContextAwarePanelItem>
|
|
1069
|
+
);
|
|
1070
|
+
}, [
|
|
1071
|
+
isAnyPanelOpen,
|
|
1072
|
+
showRowExplorer,
|
|
1073
|
+
canShowColumnExplorer,
|
|
1074
|
+
viewedRowIdx,
|
|
1075
|
+
setViewedRow,
|
|
1076
|
+
totalRows,
|
|
1077
|
+
memoizedUnclampedFieldTypes,
|
|
1078
|
+
getRow,
|
|
1079
|
+
isSelectable,
|
|
1080
|
+
rowSelection,
|
|
1081
|
+
handleRowSelectionChange,
|
|
1082
|
+
preview_column,
|
|
1083
|
+
totalColumns,
|
|
1084
|
+
id,
|
|
1085
|
+
isInVscode,
|
|
1086
|
+
panelType,
|
|
1087
|
+
setPanelType,
|
|
1088
|
+
]);
|
|
1089
|
+
|
|
1010
1090
|
return (
|
|
1011
1091
|
<>
|
|
1012
1092
|
{/* When the totalRows is "too_many" and the pageSize is the same as the
|
|
@@ -1032,28 +1112,6 @@ const DataTableComponent = ({
|
|
|
1032
1112
|
</Banner>
|
|
1033
1113
|
)}
|
|
1034
1114
|
|
|
1035
|
-
{isAnyPanelOpen && (showRowExplorer || canShowColumnExplorer) && (
|
|
1036
|
-
<ContextAwarePanelItem>
|
|
1037
|
-
<TableExplorerPanel
|
|
1038
|
-
rowIdx={viewedRowIdx}
|
|
1039
|
-
setRowIdx={setViewedRow}
|
|
1040
|
-
totalRows={totalRows}
|
|
1041
|
-
fieldTypes={memoizedUnclampedFieldTypes}
|
|
1042
|
-
getRow={getRow}
|
|
1043
|
-
isSelectable={isSelectable}
|
|
1044
|
-
isRowSelected={Boolean(rowSelection[viewedRowIdx])}
|
|
1045
|
-
handleRowSelectionChange={handleRowSelectionChange}
|
|
1046
|
-
previewColumn={preview_column}
|
|
1047
|
-
totalColumns={totalColumns}
|
|
1048
|
-
tableId={id}
|
|
1049
|
-
showRowExplorer={showRowExplorer && !isInVscode}
|
|
1050
|
-
showColumnExplorer={canShowColumnExplorer && !isInVscode}
|
|
1051
|
-
activeTab={panelType}
|
|
1052
|
-
onTabChange={setPanelType}
|
|
1053
|
-
/>
|
|
1054
|
-
</ContextAwarePanelItem>
|
|
1055
|
-
)}
|
|
1056
|
-
|
|
1057
1115
|
<ColumnChartContext value={chartSpecModel}>
|
|
1058
1116
|
<Labeled label={label} align="top" fullWidth={true}>
|
|
1059
1117
|
<DataTable
|
|
@@ -1065,6 +1123,7 @@ const DataTableComponent = ({
|
|
|
1065
1123
|
sorting={sorting}
|
|
1066
1124
|
totalRows={totalRows}
|
|
1067
1125
|
sizeBytes={sizeBytes}
|
|
1126
|
+
sizeBytesIsLoading={sizeBytesIsLoading}
|
|
1068
1127
|
totalColumns={totalColumns}
|
|
1069
1128
|
manualSorting={true}
|
|
1070
1129
|
setSorting={setSorting}
|
|
@@ -1090,6 +1149,7 @@ const DataTableComponent = ({
|
|
|
1090
1149
|
onRowSelectionChange={handleRowSelectionChange}
|
|
1091
1150
|
freezeColumnsLeft={freezeColumnsLeft}
|
|
1092
1151
|
freezeColumnsRight={freezeColumnsRight}
|
|
1152
|
+
hiddenColumns={hiddenColumns}
|
|
1093
1153
|
onCellSelectionChange={handleCellSelectionChange}
|
|
1094
1154
|
getRowIds={get_row_ids}
|
|
1095
1155
|
toggleDisplayHeader={toggleDisplayHeader}
|
|
@@ -1108,6 +1168,7 @@ const DataTableComponent = ({
|
|
|
1108
1168
|
isAnyPanelOpen={isAnyPanelOpen}
|
|
1109
1169
|
viewedRowIdx={viewedRowIdx}
|
|
1110
1170
|
onViewedRowChange={(rowIdx) => setViewedRowIdx(rowIdx)}
|
|
1171
|
+
renderTableExplorerPanel={renderTableExplorerPanel}
|
|
1111
1172
|
/>
|
|
1112
1173
|
</Labeled>
|
|
1113
1174
|
</ColumnChartContext>
|