@marimo-team/islands 0.23.7-dev8 → 0.23.7-dev82
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-PmilQqXR.js → ConnectedDataExplorerComponent-2lBNiUv6.js} +14 -14
- package/dist/{ErrorBoundary-Da4UeYxT.js → ErrorBoundary-D3wrPNma.js} +1 -1
- package/dist/{any-language-editor-BVR0l12r.js → any-language-editor-VWs_7v27.js} +15 -15
- package/dist/apl-Bdc61P1y.js +4 -0
- package/dist/{arc-CHF8PiiF.js → arc-DfkSnvZm.js} +2 -2
- package/dist/{architecture-7HQA4BMR-D0JB_3hE.js → architecture-7HQA4BMR-CS9jOrqM.js} +1 -1
- package/dist/{architectureDiagram-VXUJARFQ-BXQEUDtK.js → architectureDiagram-VXUJARFQ-CXVJxFhH.js} +16 -16
- package/dist/asciiarmor-DVRHDGzT.js +4 -0
- package/dist/asn1-BmuKfkfu.js +4 -0
- package/dist/assets/__vite-browser-external-CAdMKBac.js +1 -0
- package/dist/assets/worker-CpBbwbQo.js +73 -0
- package/dist/{blockDiagram-VD42YOAC-DhJe-Y9i.js → blockDiagram-VD42YOAC-DGDaxR8I.js} +11 -11
- package/dist/brainfuck-DPrRpyTV.js +4 -0
- package/dist/{button-CA5pI2YF.js → button-Dj4BTre0.js} +5 -0
- package/dist/{c4Diagram-YG6GDRKO-9dSfzOFR.js → c4Diagram-YG6GDRKO-C2hc6ne8.js} +5 -5
- package/dist/{capabilities-6laDasij.js → capabilities-C9rrYCzf.js} +1 -1
- package/dist/{channel-MqYIiKgS.js → channel-BBoIVUrJ.js} +1 -1
- package/dist/{chat-ui-D8SqlFay.js → chat-ui-D3XBept8.js} +626 -234
- package/dist/{check-CFM2mVDr.js → check-BcUIXnUT.js} +1 -1
- package/dist/{chunk-4BX2VUAB-BwfrWBqN.js → chunk-4BX2VUAB-CzXltWHN.js} +1 -1
- package/dist/{chunk-55IACEB6-D8THf2mi.js → chunk-55IACEB6-B-1mjMMC.js} +1 -1
- package/dist/{chunk-5FQGJX7Z-CO1e63h_.js → chunk-5FQGJX7Z-BOg95xG5.js} +2 -2
- package/dist/{chunk-ABZYJK2D-BrBb_0yY.js → chunk-ABZYJK2D-D0cLy8Bb.js} +2 -2
- package/dist/{chunk-ATLVNIR6-D-0XqNah.js → chunk-ATLVNIR6-BXsEjlHF.js} +2 -2
- package/dist/{chunk-B4BG7PRW-8iRKvugR.js → chunk-B4BG7PRW-Q1usn6T3.js} +7 -7
- package/dist/{chunk-CVBHYZKI-B6xhgaBd.js → chunk-CVBHYZKI-B_c5YBcW.js} +1 -1
- package/dist/{chunk-DI55MBZ5-C0_2D4m4.js → chunk-DI55MBZ5-D1qLYNrb.js} +6 -6
- package/dist/{chunk-EXTU4WIE-Jiw9ca1u.js → chunk-EXTU4WIE-BKNXdLmD.js} +2 -2
- package/dist/{chunk-FMBD7UC4-CHdus51S.js → chunk-FMBD7UC4-Ie8M9q0W.js} +1 -1
- package/dist/{chunk-HN2XXSSU-2Vfbq-kU.js → chunk-HN2XXSSU-E3n-Ys7Z.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-6wbaigKe.js → chunk-JA3XYJ7Z-D6c6cOBG.js} +3 -3
- package/dist/{chunk-JZLCHNYA-_rfptlUP.js → chunk-JZLCHNYA-BvsPHJmL.js} +6 -6
- package/dist/{chunk-MI3HLSF2-Do0-KRc0.js → chunk-MI3HLSF2-CUYEasXO.js} +1 -1
- package/dist/{chunk-N4CR4FBY-DIZG9dVD.js → chunk-N4CR4FBY-8ycT-O9a.js} +7 -7
- package/dist/{chunk-QN33PNHL-Cc64y40m.js → chunk-QN33PNHL-Bb-eUBW3.js} +2 -2
- package/dist/{chunk-QXUST7PY-BDG0-0Or.js → chunk-QXUST7PY-DV8yRwBd.js} +10 -10
- package/dist/{chunk-QZHKN3VN-B_Mdb8GC.js → chunk-QZHKN3VN-DRjXVwuJ.js} +1 -1
- package/dist/{chunk-S3R3BYOJ-DphMP0FA.js → chunk-S3R3BYOJ-mQeCz5CE.js} +4 -4
- package/dist/{chunk-TZMSLE5B-C9LUoYkc.js → chunk-TZMSLE5B-BqW10dHe.js} +3 -3
- package/dist/classDiagram-2ON5EDUG--Yh__LHb.js +30 -0
- package/dist/classDiagram-v2-WZHVMYZB-BC7X7Xtc.js +30 -0
- package/dist/{clike-sBZrGeF8.js → clike-DTxNUn7l.js} +1 -1
- package/dist/clojure-DEttQW5T.js +4 -0
- package/dist/cmake-jNlx_DaM.js +4 -0
- package/dist/cobol-BvvIm5MJ.js +4 -0
- package/dist/{code-block-37QAKDTI-0JNwiPGv.js → code-block-37QAKDTI-BsGy1AOJ.js} +1 -1
- package/dist/{code-visibility-i-wZHH96.js → code-visibility-Cv_QR0EA.js} +11481 -1993
- package/dist/coffeescript-DTpBMyFU.js +4 -0
- package/dist/commonlisp-BmmUG8jb.js +4 -0
- package/dist/{copy-TGGAUEWp.js → copy-DLf4aN7I.js} +2 -2
- package/dist/{cose-bilkent-S5V4N54A-DXHZkJKX.js → cose-bilkent-S5V4N54A-kjoZoid4.js} +2 -2
- package/dist/crystal-BxyqmEWC.js +4 -0
- package/dist/css-BGoCtuG3.js +4 -0
- package/dist/cypher-BmCbdl3u.js +4 -0
- package/dist/d-CFrlbjZt.js +4 -0
- package/dist/{dagre-6UL2VRFP-tH87fkPA.js → dagre-6UL2VRFP-DRBWoQUw.js} +10 -10
- package/dist/{data-grid-overlay-editor-CWUN78-s.js → data-grid-overlay-editor-efe5ZagF.js} +2 -2
- package/dist/{diagram-PSM6KHXK-2VjPSCDn.js → diagram-PSM6KHXK-H66ATWP2.js} +18 -18
- package/dist/{diagram-QEK2KX5R-CiLmNyta.js → diagram-QEK2KX5R-DItl5Wns.js} +14 -14
- package/dist/{diagram-S2PKOQOG-Zha_1CLx.js → diagram-S2PKOQOG-CtuW_ZuL.js} +14 -14
- package/dist/diff-D6XwL6P8.js +4 -0
- package/dist/{dist-Brkazupz.js → dist--sWVZwjW.js} +1 -1
- package/dist/{dist-FN0ZA_8F.js → dist-21ButRCu.js} +1 -1
- package/dist/{dist-BetEKbPG.js → dist-B8RaFTRF.js} +1 -1
- package/dist/dist-BoHGySTM.js +5 -0
- package/dist/dist-ByAz19Qc.js +5 -0
- package/dist/dist-C93EysN4.js +5 -0
- package/dist/{dist-BHnX0ia_.js → dist-CY-lVor6.js} +1 -1
- package/dist/{dist-YP-G7W0f.js → dist-CYDuv4bR.js} +1 -1
- package/dist/{dist-CMjD5MQb.js → dist-Cfo5EE2t.js} +1 -1
- package/dist/dist-CjivSDvN.js +5 -0
- package/dist/dist-Cqwx-MH7.js +5 -0
- package/dist/{dist-ESg7xyoD.js → dist-D3ZI9nhS.js} +2 -2
- package/dist/{dist-DkC6YEo0.js → dist-DMZNjfX4.js} +1 -1
- package/dist/{dist-ChC1BhqM.js → dist-DbpcoFAV.js} +1 -1
- package/dist/dist-FUNenbiQ.js +5 -0
- package/dist/{dist-BEOU2g1b.js → dist-zhSud5X3.js} +1 -1
- package/dist/{dockerfile-COvlVLcE.js → dockerfile-twL37N91.js} +1 -1
- package/dist/dtd-Bw0lRN0-.js +4 -0
- package/dist/dylan-B55eBHTt.js +4 -0
- package/dist/ecl-C8G4p0wn.js +4 -0
- package/dist/eiffel-BmH46VJl.js +4 -0
- package/dist/elm-DhzeFqkl.js +4 -0
- package/dist/{erDiagram-Q2GNP2WA-biHZS05w.js → erDiagram-Q2GNP2WA--19X2kU5.js} +14 -14
- package/dist/erlang-CY-wdlsU.js +4 -0
- package/dist/{error-banner-DnBPzEWg.js → error-banner-CVkfBUT3.js} +2 -2
- package/dist/{esm-Dd1z1auZ.js → esm-CWp0KQeK.js} +1 -1
- package/dist/{esm-CYEyrE3Y.js → esm-DjNnlmpf.js} +96 -96
- package/dist/{extends-CzJgxo2J.js → extends-vAi97cpa.js} +4 -4
- package/dist/{factor-C2GT7jfQ.js → factor-CajWS6mS.js} +1 -1
- package/dist/factor-DWkgl0xw.js +4 -0
- package/dist/{flowDiagram-NV44I4VS-CWWlUpBR.js → flowDiagram-NV44I4VS-DQmWlo7f.js} +16 -16
- package/dist/{formats-CgaK7Gmx.js → formats-Dsy9kkZu.js} +3 -3
- package/dist/forth-Cij_ie2t.js +4 -0
- package/dist/fortran-Br3X9cfm.js +4 -0
- package/dist/{ganttDiagram-JELNMOA3-D7B2c4Z9.js → ganttDiagram-JELNMOA3-BOGXJ8Lk.js} +7 -7
- package/dist/gas-DYsGcMN2.js +4 -0
- package/dist/gherkin-eVgXQ0fQ.js +4 -0
- package/dist/{gitGraph-G5XIXVHT-BdepdFa_.js → gitGraph-G5XIXVHT-DGlbae5m.js} +1 -1
- package/dist/{gitGraphDiagram-V2S2FVAM-CtLvNR1S.js → gitGraphDiagram-V2S2FVAM-DjzxfF0P.js} +14 -14
- package/dist/{glide-data-editor-CvlvtPWJ.js → glide-data-editor-DucgdjRo.js} +13 -13
- package/dist/groovy-_NFHIXG7.js +4 -0
- package/dist/haskell-D6xNG_bH.js +4 -0
- package/dist/haxe-sU_rzAwn.js +5 -0
- package/dist/{html-to-image-_jxGvsrc.js → html-to-image-CpggM7u1.js} +2798 -2539
- package/dist/idl-Ds_VbrUx.js +4 -0
- package/dist/{info-VBDWY6EO--JNA2rNu.js → info-VBDWY6EO-D2lvLLw5.js} +1 -1
- package/dist/{infoDiagram-HS3SLOUP-BbZyOxsP.js → infoDiagram-HS3SLOUP-ChNufFsP.js} +12 -12
- package/dist/{input-BAOe64zx.js → input-D4kjoQUB.js} +8 -6
- package/dist/javascript-CztfIl0i.js +4 -0
- package/dist/{journeyDiagram-XKPGCS4Q-BU2mjjzl.js → journeyDiagram-XKPGCS4Q-BO_O4Ij1.js} +6 -6
- package/dist/julia-DDv40QMV.js +4 -0
- package/dist/{kanban-definition-3W4ZIXB7-BlmczUuw.js → kanban-definition-3W4ZIXB7-CPpiiiWk.js} +11 -11
- package/dist/{katex-qPqrBHZ8.js → katex-9-9QRhxz.js} +1 -1
- package/dist/{label-BCWi-Oqu.js → label-BLqV33b1.js} +2 -2
- package/dist/{line-BWRi3U3S.js → line-C5s_12ee.js} +3 -3
- package/dist/{linear-DnHwODZa.js → linear-2NnK4cxi.js} +2 -2
- package/dist/livescript-BEOngLLc.js +4 -0
- package/dist/{loader-BvW0-YWZ.js → loader-Dr8Qem8p.js} +1 -1
- package/dist/lua-9-7BhQ4Y.js +4 -0
- package/dist/main.js +1712 -10297
- package/dist/mathematica-DDa0Pfxm.js +4 -0
- package/dist/mbox-iO03mmoE.js +4 -0
- package/dist/{mermaid-4DMBBIKO-CG1ECj5W.js → mermaid-4DMBBIKO-B7VQMwJx.js} +1 -1
- package/dist/{mermaid-CEbzCxCc.js → mermaid-DO-Daq7u.js} +46 -46
- package/dist/{mermaid-parser.core-CleJseNW.js → mermaid-parser.core-DreccfmS.js} +7 -7
- package/dist/{mhchem-BwoRNwg_.js → mhchem-yiCCuiEF.js} +1 -1
- package/dist/{mindmap-definition-VGOIOE7T-CcSYqYP9.js → mindmap-definition-VGOIOE7T-CC1_Vl0f.js} +13 -13
- package/dist/mirc-C9z5LT4X.js +4 -0
- package/dist/mllike-jGJbdm_C.js +6 -0
- package/dist/modelica-DzF7oIEL.js +4 -0
- package/dist/mscgen-DB-u125o.js +6 -0
- package/dist/mumps-CRTFHhzh.js +4 -0
- package/dist/nsis-C4NPTuox.js +4 -0
- package/dist/{nsis-B5K1qoyo.js → nsis-ClF3r5Tr.js} +1 -1
- package/dist/ntriples-BCOoGph1.js +4 -0
- package/dist/{number-overlay-editor-_GnlYFHC.js → number-overlay-editor-CpKi64Fy.js} +1 -1
- package/dist/octave-DTwNlazz.js +4 -0
- package/dist/{ordinal-2jIulmcR.js → ordinal-B43ZeR68.js} +1 -1
- package/dist/oz-DD38AzSz.js +4 -0
- package/dist/{packet-DYOGHKS2-CBxXGWNr.js → packet-DYOGHKS2-CmWtF3uO.js} +1 -1
- package/dist/pascal-BohSp9jV.js +4 -0
- package/dist/perl-f5OutoPM.js +4 -0
- package/dist/{pie-VRWISCQL-Bmdnqjip.js → pie-VRWISCQL-B6u8vus8.js} +1 -1
- package/dist/{pieDiagram-ADFJNKIX-DNyLF5H2.js → pieDiagram-ADFJNKIX-Di34MOFQ.js} +19 -19
- package/dist/pig-Dv7wSmHb.js +4 -0
- package/dist/powershell-rYgjKB39.js +4 -0
- package/dist/{process-output-ClDgSR3m.js → process-output-X8TR20AK.js} +30 -25
- package/dist/properties-BFUNLRDN.js +4 -0
- package/dist/protobuf-B9QJQPPv.js +4 -0
- package/dist/{pug-tjbzJCFk.js → pug-B_rby2yb.js} +1 -1
- package/dist/pug-DzvWpaMC.js +4 -0
- package/dist/puppet-B_K-n_xK.js +4 -0
- package/dist/python-CAiFcaA2.js +4 -0
- package/dist/q-cLeFIBLK.js +4 -0
- package/dist/{quadrantDiagram-AYHSOK5B-rXwjifrj.js → quadrantDiagram-AYHSOK5B-B9kVk1ny.js} +3 -3
- package/dist/r-04Y-Wco3.js +4 -0
- package/dist/{radar-ZZBFDIW7-BmCWDffL.js → radar-ZZBFDIW7-XAmXSa8s.js} +1 -1
- package/dist/{react-vega-B-rkEqtS.js → react-vega-Cavbrg4l.js} +1 -1
- package/dist/{react-vega-k9ODWPlI.js → react-vega-Dh6-UKKe.js} +13 -13
- package/dist/{requirementDiagram-UZGBJVZJ-DBdrMVbs.js → requirementDiagram-UZGBJVZJ-BxGfGYEx.js} +13 -13
- package/dist/reveal-component-BDu5jI2e.js +7447 -0
- package/dist/rpm-FUdrIia9.js +5 -0
- package/dist/ruby-DMjFXuEW.js +4 -0
- package/dist/{sankeyDiagram-TZEHDZUN-CxmzalGv.js → sankeyDiagram-TZEHDZUN-D09PBJ-n.js} +4 -4
- package/dist/sas-DzHZxjXK.js +4 -0
- package/dist/scheme-DxHd_Rb9.js +4 -0
- package/dist/semaphore-CNDGTzkX.js +46 -0
- package/dist/{sequenceDiagram-WL72ISMW-CVCDsJ9h.js → sequenceDiagram-WL72ISMW-t_Dpemj0.js} +7 -7
- package/dist/shell-C8Kwypgf.js +4 -0
- package/dist/sieve-DdyqOKXZ.js +4 -0
- package/dist/smalltalk-pB7X1D9y.js +4 -0
- package/dist/sparql-NhBO6oOa.js +4 -0
- package/dist/{spec-DSIuqd3f.js → spec-hVaaZsY5.js} +4 -4
- package/dist/{src-BY0BGg6V.js → src-Bf2iLOlr.js} +1 -1
- package/dist/{stateDiagram-FKZM4ZOC-D_2djEhW.js → stateDiagram-FKZM4ZOC-B18gTP_j.js} +16 -16
- package/dist/stateDiagram-v2-4FDKWEC3-B6e_t14A.js +29 -0
- package/dist/{step-DGAGWg3y.js → step-CWipAYTY.js} +1 -1
- package/dist/{strings-B_FOH6eV.js → strings-BiIhGaI8.js} +4 -4
- package/dist/style.css +1 -1
- package/dist/stylus-SfWSnzPv.js +4 -0
- package/dist/swift-jRPdq2zR.js +4 -0
- package/dist/{swiper-component-KkEVUDd3.js → swiper-component-DlD2GU2g.js} +2 -2
- package/dist/tcl-_hpTHGX3.js +4 -0
- package/dist/textile-C9h8slqH.js +4 -0
- package/dist/{time-CMdrp3hw.js → time-C1SGcFMH.js} +2 -2
- package/dist/{timeline-definition-IT6M3QCI-E4NzxCs3.js → timeline-definition-IT6M3QCI-DJnh1ks5.js} +3 -3
- package/dist/{toDate-CHtl9vts.js → toDate-CIpC_34u.js} +33 -20
- package/dist/toml-DWvtinD4.js +4 -0
- package/dist/{tooltip-B0mtKTXm.js → tooltip-DRaMBu06.js} +3 -3
- package/dist/{treemap-GDKQZRPO-CoKHPxa7.js → treemap-GDKQZRPO-Du95DV6u.js} +1 -1
- package/dist/troff-Dwo_A0y7.js +4 -0
- package/dist/ttcn-V--CPFKq.js +4 -0
- package/dist/ttcn-cfg-CPSMchTG.js +4 -0
- package/dist/turtle-B4rPGBWu.js +4 -0
- package/dist/{types-DBtDeUKD.js → types-Dzuoc3LN.js} +1 -1
- package/dist/{useAsyncData-B6hCGywC.js → useAsyncData-C56Khv_R.js} +1 -1
- package/dist/{useDateFormatter-B3mCQMP3.js → useDateFormatter-B_9k85Ex.js} +2 -2
- package/dist/{useDeepCompareMemoize-CmwDuYUH.js → useDeepCompareMemoize-Dt98v2ua.js} +1 -1
- package/dist/{useIframeCapabilities-DbdLoEDm.js → useIframeCapabilities-BkYHTrss.js} +1 -1
- package/dist/{useLifecycle-CjMjllqy.js → useLifecycle-BF6-z62y.js} +3 -3
- package/dist/{useTheme-CByZUW0p.js → useTheme-DykuNHR2.js} +2 -2
- package/dist/vb-DaMBBd4j.js +4 -0
- package/dist/vbscript-BMJQqcE2.js +4 -0
- package/dist/{vega-component-CC8TqWWV.js → vega-component-cSdqoAxe.js} +26 -24
- package/dist/velocity-CGq2QRq2.js +4 -0
- package/dist/verilog-CUNo8F5u.js +4 -0
- package/dist/vhdl-CCzA0msW.js +4 -0
- package/dist/webidl-CqIMDIBL.js +4 -0
- package/dist/xquery-XC5Kbr-1.js +4 -0
- package/dist/{xychartDiagram-PRI3JC2R-CuxTvjw5.js → xychartDiagram-PRI3JC2R-Dk2d_bX0.js} +10 -10
- package/dist/yacas-CGOv7Dzy.js +4 -0
- package/dist/z80-CXhVmi-f.js +4 -0
- package/dist/{zod-BxdsqRPd.js → zod-BWkcDORu.js} +1 -1
- package/package.json +3 -3
- package/src/components/chat/chat-components.tsx +47 -0
- package/src/components/chat/chat-display.tsx +41 -7
- package/src/components/chat/chat-panel.tsx +37 -10
- package/src/components/chat/chat-utils.ts +42 -20
- package/src/components/chat/reasoning-accordion.tsx +14 -3
- package/src/components/chat/tool-call/shared.ts +13 -0
- package/src/components/chat/tool-call/tool-approval-card.tsx +62 -0
- package/src/components/chat/tool-call/tool-args.tsx +26 -0
- package/src/components/chat/tool-call/tool-call-view.tsx +99 -0
- package/src/components/chat/tool-call/tool-error-card.tsx +81 -0
- package/src/components/chat/tool-call/tool-history-row.tsx +153 -0
- package/src/components/chat/tool-call/tool-result.tsx +101 -0
- package/src/components/data-table/__tests__/column-header.test.ts +3 -1
- package/src/components/data-table/__tests__/column-header.test.tsx +308 -0
- package/src/components/data-table/__tests__/filter-by-values-picker.test.tsx +112 -0
- package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +261 -0
- package/src/components/data-table/__tests__/filters.test.ts +196 -49
- package/src/components/data-table/charts/components/form-fields.tsx +1 -0
- package/src/components/data-table/column-header.tsx +349 -170
- package/src/components/data-table/date-filter-inputs.tsx +325 -0
- package/src/components/data-table/filter-by-values-picker.tsx +70 -9
- package/src/components/data-table/filter-pill-editor.tsx +410 -156
- package/src/components/data-table/filter-pills.tsx +69 -54
- package/src/components/data-table/filters.ts +218 -101
- package/src/components/data-table/header-items.tsx +8 -1
- package/src/components/data-table/operator-labels.ts +25 -0
- package/src/components/data-table/regex-input.tsx +61 -0
- package/src/components/dependency-graph/minimap-content.tsx +14 -3
- package/src/components/editor/actions/pair-with-agent-modal.tsx +140 -49
- package/src/components/editor/actions/useNotebookActions.tsx +3 -1
- package/src/components/editor/app-container.tsx +7 -1
- package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +10 -2
- package/src/components/editor/chrome/wrapper/app-chrome.tsx +1 -0
- package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +1 -1
- package/src/components/editor/chrome/wrapper/footer.tsx +4 -1
- package/src/components/editor/chrome/wrapper/panels.tsx +4 -1
- package/src/components/editor/chrome/wrapper/sidebar.tsx +4 -1
- package/src/components/editor/controls/Controls.tsx +11 -3
- package/src/components/editor/file-tree/file-explorer.tsx +12 -2
- package/src/components/editor/file-tree/requesting-tree.tsx +27 -25
- package/src/components/editor/file-tree/upload.tsx +23 -17
- package/src/components/editor/header/__tests__/status.test.tsx +108 -0
- package/src/components/editor/header/status.tsx +44 -10
- package/src/components/editor/navigation/__tests__/clipboard.test.ts +106 -0
- package/src/components/editor/navigation/__tests__/navigation.test.ts +70 -0
- package/src/components/editor/navigation/clipboard.ts +99 -25
- package/src/components/editor/navigation/navigation.ts +15 -1
- package/src/components/editor/notebook-cell.tsx +5 -0
- package/src/components/editor/output/console/ConsoleOutput.tsx +23 -5
- package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +114 -0
- package/src/components/editor/renderers/slides-layout/__tests__/compute-slide-cells.test.ts +5 -4
- package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +55 -15
- package/src/components/editor/renderers/slides-layout/plugin.tsx +8 -25
- package/src/components/editor/renderers/slides-layout/slides-layout.tsx +19 -6
- package/src/components/editor/renderers/slides-layout/types.ts +40 -31
- package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +1 -0
- package/src/components/home/components.tsx +6 -0
- package/src/components/pages/run-page.tsx +4 -1
- package/src/components/scratchpad/scratchpad.tsx +1 -0
- package/src/components/slides/__tests__/slide-notes.test.ts +131 -0
- package/src/components/slides/reveal-component.tsx +252 -147
- package/src/components/slides/slide-notes-editor.tsx +127 -0
- package/src/components/slides/slide-notes.ts +64 -0
- package/src/components/slides/slides.css +14 -0
- package/src/components/ui/combobox.tsx +24 -5
- package/src/components/ui/number-field.tsx +2 -0
- package/src/core/ai/tools/__tests__/registry.test.ts +10 -12
- package/src/core/ai/tools/registry.ts +9 -5
- package/src/core/cells/__tests__/cells.test.ts +187 -0
- package/src/core/cells/__tests__/pending-cut-service.test.tsx +123 -0
- package/src/core/cells/cells.ts +102 -17
- package/src/core/cells/document-changes.ts +6 -1
- package/src/core/cells/pending-cut-service.ts +55 -0
- package/src/core/cells/utils.ts +11 -0
- package/src/core/codemirror/cells/extensions.ts +10 -0
- package/src/core/codemirror/go-to-definition/__tests__/commands.test.ts +152 -0
- package/src/core/codemirror/go-to-definition/__tests__/utils.test.ts +99 -0
- package/src/core/codemirror/go-to-definition/commands.ts +382 -22
- package/src/core/codemirror/go-to-definition/utils.ts +23 -5
- package/src/core/edit-app.tsx +3 -2
- package/src/core/hotkeys/hotkeys.ts +5 -0
- package/src/core/islands/worker/worker.tsx +3 -2
- package/src/core/run-app.tsx +2 -1
- package/src/core/runtime/__tests__/runtime.test.ts +38 -17
- package/src/core/runtime/runtime.ts +57 -34
- package/src/core/wasm/__tests__/utils.test.ts +34 -0
- package/src/core/wasm/utils.ts +14 -0
- package/src/core/wasm/worker/bootstrap.ts +3 -2
- package/src/core/wasm/worker/worker.ts +3 -2
- package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +156 -0
- package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +101 -0
- package/src/core/websocket/transports/__tests__/ws.test.ts +125 -0
- package/src/core/websocket/transports/basic.ts +1 -1
- package/src/core/websocket/transports/ws.ts +96 -0
- package/src/core/websocket/useMarimoKernelConnection.tsx +133 -54
- package/src/core/websocket/useWebSocket.tsx +3 -15
- package/src/css/app/Cell.css +10 -0
- package/src/plugins/core/__test__/sanitize.test.ts +30 -0
- package/src/plugins/impl/DropdownPlugin.tsx +12 -1
- package/src/plugins/impl/MultiselectPlugin.tsx +4 -0
- package/src/plugins/impl/SearchableSelect.tsx +11 -1
- package/src/plugins/impl/TabsPlugin.tsx +35 -7
- package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +56 -0
- package/src/plugins/impl/__tests__/TabsPlugin.test.tsx +154 -0
- package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +48 -36
- package/src/plugins/impl/data-frames/schema.ts +4 -1
- package/src/plugins/impl/vega/resolve-data.ts +8 -1
- package/src/plugins/layout/DownloadPlugin.tsx +9 -7
- package/src/utils/__tests__/id-tree.test.ts +71 -0
- package/src/utils/__tests__/semaphore.test.ts +218 -0
- package/src/utils/download.ts +4 -2
- package/src/utils/fileToBase64.ts +8 -7
- package/src/utils/id-tree.tsx +89 -0
- package/src/utils/semaphore.ts +88 -0
- package/dist/apl-BKoVld9y.js +0 -4
- package/dist/asciiarmor-DQrKIjoo.js +0 -4
- package/dist/asn1-BZvnj0dq.js +0 -4
- package/dist/assets/__vite-browser-external-rrUYDKRl.js +0 -1
- package/dist/assets/worker-Bfy15ViQ.js +0 -73
- package/dist/brainfuck-D558nlUv.js +0 -4
- package/dist/classDiagram-2ON5EDUG-CBHMR6ZU.js +0 -30
- package/dist/classDiagram-v2-WZHVMYZB-BsUtUGM_.js +0 -30
- package/dist/clojure-Cq8mTSrE.js +0 -4
- package/dist/cmake-D8HCovWK.js +0 -4
- package/dist/cobol-UolN-9iU.js +0 -4
- package/dist/coffeescript-VdNuWrt5.js +0 -4
- package/dist/commonlisp-ALX7fpDc.js +0 -4
- package/dist/crystal-PbyO9Q_s.js +0 -4
- package/dist/css-DFklJkr_.js +0 -4
- package/dist/cypher-BifNeYlv.js +0 -4
- package/dist/d-BA-JP4PJ.js +0 -4
- package/dist/diff-CtkDpav4.js +0 -4
- package/dist/dist-BuBwsFva.js +0 -5
- package/dist/dist-BzmEQ9u7.js +0 -5
- package/dist/dist-Cih01ssx.js +0 -5
- package/dist/dist-CqfONiY9.js +0 -5
- package/dist/dist-D0iD0Fi9.js +0 -5
- package/dist/dist-DtNLXm8d.js +0 -5
- package/dist/dtd-DW3_UFEG.js +0 -4
- package/dist/dylan-pDhodO2N.js +0 -4
- package/dist/ecl-BJT8-YD7.js +0 -4
- package/dist/eiffel-Dmns-9vS.js +0 -4
- package/dist/elm-Da4sO4Bz.js +0 -4
- package/dist/erlang-C-zBsDi7.js +0 -4
- package/dist/factor-4xPWlWB5.js +0 -4
- package/dist/forth-l-c75zSd.js +0 -4
- package/dist/fortran-DIujSODW.js +0 -4
- package/dist/gas-CXnG5g_b.js +0 -4
- package/dist/gherkin-VPeqd4-X.js +0 -4
- package/dist/groovy-CphhZQgg.js +0 -4
- package/dist/haskell-CCvlS5Iq.js +0 -4
- package/dist/haxe-C_bi66fP.js +0 -5
- package/dist/idl-1DcP4Dm8.js +0 -4
- package/dist/javascript-DUIGhBvO.js +0 -4
- package/dist/julia-Cs2G4PQi.js +0 -4
- package/dist/livescript-DMtVFaAN.js +0 -4
- package/dist/lua-BAoLtdJg.js +0 -4
- package/dist/mathematica-C_NoFtbo.js +0 -4
- package/dist/mbox-DcFJFYrH.js +0 -4
- package/dist/mirc-71dccf_u.js +0 -4
- package/dist/mllike-CWcOFVDq.js +0 -6
- package/dist/modelica-Ape2VXxx.js +0 -4
- package/dist/mscgen-Cc6TwbSN.js +0 -6
- package/dist/mumps-h-ZbdkJ9.js +0 -4
- package/dist/nsis-C0p3m7JW.js +0 -4
- package/dist/ntriples-c9lEeT5w.js +0 -4
- package/dist/octave-DzEgB_74.js +0 -4
- package/dist/oz-CAxvHkyQ.js +0 -4
- package/dist/pascal-BJzu1sgP.js +0 -4
- package/dist/perl--IrOzZ2Z.js +0 -4
- package/dist/pig-CiBKKNhC.js +0 -4
- package/dist/powershell-KY0j6Qop.js +0 -4
- package/dist/properties-BW8q3ziV.js +0 -4
- package/dist/protobuf-BGaeuTGV.js +0 -4
- package/dist/pug-DjOKK-4J.js +0 -4
- package/dist/puppet-DWm2o6zX.js +0 -4
- package/dist/python-Bp2gezZy.js +0 -4
- package/dist/q-DljPshos.js +0 -4
- package/dist/r-BajPMnEu.js +0 -4
- package/dist/reveal-component-DisX89FD.js +0 -4863
- package/dist/rpm-BKx-ZZ62.js +0 -5
- package/dist/ruby-DJq_HNKc.js +0 -4
- package/dist/sas-WANvpcOU.js +0 -4
- package/dist/scheme-CliBbhGF.js +0 -4
- package/dist/shell-BwhrNUvM.js +0 -4
- package/dist/sieve-BIVePvMp.js +0 -4
- package/dist/smalltalk-D6G48JmY.js +0 -4
- package/dist/sparql-jjc3BmEP.js +0 -4
- package/dist/stateDiagram-v2-4FDKWEC3-Cv9Av10H.js +0 -29
- package/dist/stylus-WPBPQ4PE.js +0 -4
- package/dist/swift-O1Qy6iCm.js +0 -4
- package/dist/tcl-BAFdhvsi.js +0 -4
- package/dist/textile-DFuzhNLG.js +0 -4
- package/dist/toml-DRSTeely.js +0 -4
- package/dist/troff-B_ZjwBW0.js +0 -4
- package/dist/ttcn-CAyiB3ic.js +0 -4
- package/dist/ttcn-cfg-BS5_BGBJ.js +0 -4
- package/dist/turtle-CUBEDy3E.js +0 -4
- package/dist/vb-DY9S6-U2.js +0 -4
- package/dist/vbscript-gaHC39Jq.js +0 -4
- package/dist/velocity-TfCOtJZ_.js +0 -4
- package/dist/verilog-c2JOX8mv.js +0 -4
- package/dist/vhdl-dHBirRiO.js +0 -4
- package/dist/webidl-Bauj-i07.js +0 -4
- package/dist/xquery-CtaEAOt8.js +0 -4
- package/dist/yacas-BZ85agQP.js +0 -4
- package/dist/z80-hCgR-L4U.js +0 -4
- package/src/components/chat/tool-call-accordion.tsx +0 -247
- /package/dist/{ImageComparisonComponent-DaocPIse.js → ImageComparisonComponent-CNHIsPDj.js} +0 -0
- /package/dist/{Plot-PIeIvFnD.js → Plot-4wn-lMVn.js} +0 -0
- /package/dist/{apl-Dt8GMXYg.js → apl-BCgCq9iM.js} +0 -0
- /package/dist/{array-B-MVxRIF.js → array-tvvEqPy7.js} +0 -0
- /package/dist/{asciiarmor-CitDQ85h.js → asciiarmor-BtqU-KJQ.js} +0 -0
- /package/dist/{asn1-abrf9SMK.js → asn1-Dmb-dTMx.js} +0 -0
- /package/dist/{asterisk-BUZwqih-.js → asterisk-DaVJJDnV.js} +0 -0
- /package/dist/{brainfuck-BL-Boof0.js → brainfuck-C1HoZKlE.js} +0 -0
- /package/dist/{chunk-4F5CHEZ2-C6tO9vjs.js → chunk-4F5CHEZ2-BZq7Kom7.js} +0 -0
- /package/dist/{chunk-B2363JML-Ds8wZXyP.js → chunk-B2363JML-D9-XOau1.js} +0 -0
- /package/dist/{chunk-DR5Q36YT-CP69aZS_.js → chunk-DR5Q36YT-BflwErH1.js} +0 -0
- /package/dist/{chunk-FRFDVMJY-BgQv1HBE.js → chunk-FRFDVMJY-BSBUAX7r.js} +0 -0
- /package/dist/{chunk-PL6DKKU2-DHfTUHy8.js → chunk-PL6DKKU2-B0MTXvyc.js} +0 -0
- /package/dist/{chunk-SJTYNZTY-Diciw4sx.js → chunk-SJTYNZTY-CEG4F0pB.js} +0 -0
- /package/dist/{chunk-TQ3KTPDO-CQfP9npd.js → chunk-TQ3KTPDO-DiCtqVSi.js} +0 -0
- /package/dist/{chunk-UMXZTB3W-MSKeGL7W.js → chunk-UMXZTB3W-97iS1iEl.js} +0 -0
- /package/dist/{click-outside-container-BZgN7xS_.js → click-outside-container-BDd67_1U.js} +0 -0
- /package/dist/{clike-RWg7anhx.js → clike-CdT0yHjt.js} +0 -0
- /package/dist/{clojure-DaojKHow.js → clojure-CdyrCpUv.js} +0 -0
- /package/dist/{cmake-DN-_v0XE.js → cmake-BFlPxym7.js} +0 -0
- /package/dist/{cobol-C3VpMyux.js → cobol-CcJXewp8.js} +0 -0
- /package/dist/{coffeescript-DIkz3Tbt.js → coffeescript-DnKuIKRo.js} +0 -0
- /package/dist/{colors-Cn2p_FA3.js → colors-CQAOa8cK.js} +0 -0
- /package/dist/{common-keywords-hbLeU7VU.js → common-keywords-FBrXPTcz.js} +0 -0
- /package/dist/{commonlisp-CB1boOiP.js → commonlisp-B-kok83Z.js} +0 -0
- /package/dist/{crystal-DI2oCml6.js → crystal-FYRYjI1I.js} +0 -0
- /package/dist/{css-BdEVwQDV.js → css-B45lc2V3.js} +0 -0
- /package/dist/{cypher-BNHToqxU.js → cypher-DZMLyVY_.js} +0 -0
- /package/dist/{cytoscape.esm-WbbDoCfu.js → cytoscape.esm-ayF70frT.js} +0 -0
- /package/dist/{d-D7we7I1b.js → d-x-VVT4o9.js} +0 -0
- /package/dist/{diff-Cia6fzjN.js → diff-Dxe2mpXk.js} +0 -0
- /package/dist/{dist-BK-3fF4P.js → dist-B4LJpMEg.js} +0 -0
- /package/dist/{dist-CxdUraQr.js → dist-B507mf_I.js} +0 -0
- /package/dist/{dist-C89sHDXk.js → dist-BGdYVvOu.js} +0 -0
- /package/dist/{dist-DquyVv5H.js → dist-BNyrZfqT.js} +0 -0
- /package/dist/{dist-Zn0KNbo9.js → dist-Bc5pmZIw.js} +0 -0
- /package/dist/{dist-C-J0pt5p.js → dist-BvCfQQQE.js} +0 -0
- /package/dist/{dist-D9r7Cmw7.js → dist-C2ej4eOH.js} +0 -0
- /package/dist/{dist-HVuryI1a.js → dist-C34oIrQ9.js} +0 -0
- /package/dist/{dist-CGLzXdrt.js → dist-CDFZi-QD.js} +0 -0
- /package/dist/{dist-C9fmTOin.js → dist-CYEylvZA.js} +0 -0
- /package/dist/{dist-DadjmS-4.js → dist-DJ6zJQZ4.js} +0 -0
- /package/dist/{dist-CtCY55Jf.js → dist-Dh3wkoyH.js} +0 -0
- /package/dist/{dist-C474qFoq.js → dist-Dhk6FMb0.js} +0 -0
- /package/dist/{dist-DZjQ_MBo.js → dist-KnujRhFL.js} +0 -0
- /package/dist/{dist-CinA9Enb.js → dist-WdPUFc56.js} +0 -0
- /package/dist/{dist-DBLeRrPp.js → dist-t_qL7eB8.js} +0 -0
- /package/dist/{dist-CyFFzJTb.js → dist-usPCDYx8.js} +0 -0
- /package/dist/{dtd-H4Hubdwp.js → dtd-C9VM_Wfu.js} +0 -0
- /package/dist/{duckdb-keywords-CZ_ZTscu.js → duckdb-keywords-CvJhR_Yd.js} +0 -0
- /package/dist/{dylan-fVO6rnq3.js → dylan-DTSnEIFO.js} +0 -0
- /package/dist/{ebnf-WEXPLEWb.js → ebnf-2D4Ctp3y.js} +0 -0
- /package/dist/{ecl-B94VPjNR.js → ecl-N04ptnRK.js} +0 -0
- /package/dist/{eiffel-C_R6TusS.js → eiffel-Dd8rpqr_.js} +0 -0
- /package/dist/{elm-DzCHbO2g.js → elm-GT2E866W.js} +0 -0
- /package/dist/{erlang-BGNkx6JU.js → erlang-Cf0Bp5pY.js} +0 -0
- /package/dist/{esm-Bb_hbWan.js → esm-BaaaPNGl.js} +0 -0
- /package/dist/{fcl-B_Gv5Jfx.js → fcl-Ccj8Z5Xd.js} +0 -0
- /package/dist/{forth-Bybw0cJ7.js → forth-wd_XzGTg.js} +0 -0
- /package/dist/{fortran-C6PoCLkI.js → fortran-DcwUTZFe.js} +0 -0
- /package/dist/{gas-BBlhenj4.js → gas-DeALIER3.js} +0 -0
- /package/dist/{gherkin-NXtNG85X.js → gherkin-CKTqaJNX.js} +0 -0
- /package/dist/{groovy-BoFYK9xM.js → groovy-Bwdp_d8D.js} +0 -0
- /package/dist/{haskell-BtBdvQ1n.js → haskell-DCdCcPLK.js} +0 -0
- /package/dist/{haxe-D--o6dr0.js → haxe-DAyktQWJ.js} +0 -0
- /package/dist/{http-Dc2fv19V.js → http-_DVAYWoR.js} +0 -0
- /package/dist/{idl-AqTq5l7e.js → idl-CBuZiRYu.js} +0 -0
- /package/dist/{init-D-g0ONX1.js → init-uv0kkh4g.js} +0 -0
- /package/dist/{javascript-DvwNVye9.js → javascript-DzigE11c.js} +0 -0
- /package/dist/{julia-DoKiagZC.js → julia-PwfB-0Cm.js} +0 -0
- /package/dist/{katex-B7pMJpE0.js → katex-C_XRmjAP.js} +0 -0
- /package/dist/{livescript-DxBZMiWB.js → livescript-BJLz1EbT.js} +0 -0
- /package/dist/{lua-DmS_0NTu.js → lua-ZC-XC2jf.js} +0 -0
- /package/dist/{math-BYK36kWZ.js → math-DFcdCCU8.js} +0 -0
- /package/dist/{mathematica-ChlDFeIC.js → mathematica-DCYMx6qB.js} +0 -0
- /package/dist/{mbox-CguZuODr.js → mbox-OxMK_9XI.js} +0 -0
- /package/dist/{mirc-CFtY8dqz.js → mirc-nJVyhA0H.js} +0 -0
- /package/dist/{mllike-C0EJrEOk.js → mllike-DRO89bsU.js} +0 -0
- /package/dist/{modelica-C1kO1nfS.js → modelica-Don3E6ZD.js} +0 -0
- /package/dist/{mscgen-DEYdr7AY.js → mscgen-DJfqD3bN.js} +0 -0
- /package/dist/{mumps-B3NVJs2V.js → mumps-SjGTvDYL.js} +0 -0
- /package/dist/{nginx-ComVAAGN.js → nginx-DasThI7R.js} +0 -0
- /package/dist/{node-sql-parser-DNGGJ-Rw.js → node-sql-parser-B8nBD36q.js} +0 -0
- /package/dist/{ntriples-DHol9X9H.js → ntriples-CNBKRl3I.js} +0 -0
- /package/dist/{octave-CYGz0bfo.js → octave-DdeVHNlx.js} +0 -0
- /package/dist/{oz-kPxb2ni5.js → oz-CcKSoNvN.js} +0 -0
- /package/dist/{pascal-bZ0yrJKy.js → pascal-6leftwNj.js} +0 -0
- /package/dist/{path-Du6n3sOU.js → path-BGaWgPKg.js} +0 -0
- /package/dist/{perl-z4hvqyqz.js → perl-BhJIwWzN.js} +0 -0
- /package/dist/{pig-DZO8QDF9.js → pig-r-xDHqRf.js} +0 -0
- /package/dist/{powershell-BSuaDQEC.js → powershell-D-BELeNi.js} +0 -0
- /package/dist/{properties-BXhGLlIx.js → properties-CnuDhbll.js} +0 -0
- /package/dist/{protobuf-DM6iybWV.js → protobuf-CO8RBhvX.js} +0 -0
- /package/dist/{puppet-Bn05sQT8.js → puppet-NmXHjLy8.js} +0 -0
- /package/dist/{python-Cvnhm0g7.js → python-DAQXi720.js} +0 -0
- /package/dist/{q-B9V8hzex.js → q-DlikXfV0.js} +0 -0
- /package/dist/{r-Cf0gFqmq.js → r-CuohilwT.js} +0 -0
- /package/dist/{rpm-D-LMkTV1.js → rpm-0Pjwp0Pb.js} +0 -0
- /package/dist/{ruby-DeuPikpK.js → ruby-Dq8NJTDG.js} +0 -0
- /package/dist/{sas-C9tjgAo9.js → sas-CuwonyVP.js} +0 -0
- /package/dist/{scheme-D1_bUF0G.js → scheme-CYU-RRIf.js} +0 -0
- /package/dist/{shell-CJBmnks3.js → shell-COPmX2qE.js} +0 -0
- /package/dist/{sieve-1fSV75CF.js → sieve-B_3zyLne.js} +0 -0
- /package/dist/{simple-mode-B90Wdavj.js → simple-mode-DSBniks8.js} +0 -0
- /package/dist/{smalltalk-sZNPD0HO.js → smalltalk-DRft7iPv.js} +0 -0
- /package/dist/{solr-DTkyqJ-Z.js → solr-RZ9uTl59.js} +0 -0
- /package/dist/{sparql-oHc1nm77.js → sparql-CN6qj55H.js} +0 -0
- /package/dist/{spreadsheet-CER0raqY.js → spreadsheet-BNNUNXA2.js} +0 -0
- /package/dist/{sql-ByOoEONQ.js → sql-B4x8IkwU.js} +0 -0
- /package/dist/{stylus-KzkX6zRB.js → stylus-Bn_ZjOQ3.js} +0 -0
- /package/dist/{swift-DqVxZvKo.js → swift-BLUJhMbz.js} +0 -0
- /package/dist/{tcl-BtWSwXfA.js → tcl-C86fxecl.js} +0 -0
- /package/dist/{textile-CWDbn9Ql.js → textile-DmHh2rsK.js} +0 -0
- /package/dist/{tiddlywiki-Cr9xyOY1.js → tiddlywiki-DI0mF2WJ.js} +0 -0
- /package/dist/{tiki-D5JONyfZ.js → tiki-2HU6XLLn.js} +0 -0
- /package/dist/{timer-D7JVdX9U.js → timer-YZl28NYN.js} +0 -0
- /package/dist/{toml-BfehlgmL.js → toml-GWANRNAD.js} +0 -0
- /package/dist/{treemap-qFGzn7xk.js → treemap-D-ka1hvx.js} +0 -0
- /package/dist/{troff-BZBk6AAu.js → troff-BHTsomIy.js} +0 -0
- /package/dist/{ttcn-DVwvXg0_.js → ttcn-DQuhn5Mn.js} +0 -0
- /package/dist/{ttcn-cfg-gjbVLf1L.js → ttcn-cfg-HjFYtdB-.js} +0 -0
- /package/dist/{turtle-CgxKXorV.js → turtle-nCay33Nv.js} +0 -0
- /package/dist/{vb-B9kSwTdM.js → vb-BG-XlqqJ.js} +0 -0
- /package/dist/{vbscript-DrUKSCdb.js → vbscript-B6vyW0-D.js} +0 -0
- /package/dist/{velocity-AlMYTnMy.js → velocity-CWegueqO.js} +0 -0
- /package/dist/{verilog-DLUaM05j.js → verilog-CzSQm4cG.js} +0 -0
- /package/dist/{vhdl-DUJOtSmO.js → vhdl-DqnNVL7r.js} +0 -0
- /package/dist/{webidl-CQp4aHk_.js → webidl-DXEUpDWH.js} +0 -0
- /package/dist/{xquery-IxkjlwOD.js → xquery-Ba_NB5bD.js} +0 -0
- /package/dist/{yacas-Bnctn5w8.js → yacas-HKQU6hyk.js} +0 -0
- /package/dist/{z80-DrFwhx53.js → z80-CXkHXLdj.js} +0 -0
|
@@ -85,6 +85,7 @@ interface Props {
|
|
|
85
85
|
className?: string;
|
|
86
86
|
consoleOutputs: WithResponse<OutputMessage>[];
|
|
87
87
|
stale: boolean;
|
|
88
|
+
interrupted: boolean;
|
|
88
89
|
debuggerActive: boolean;
|
|
89
90
|
onRefactorWithAI?: OnRefactorWithAI;
|
|
90
91
|
onClear?: () => void;
|
|
@@ -111,6 +112,7 @@ const ConsoleOutputInternal = (props: Props): React.ReactNode => {
|
|
|
111
112
|
const {
|
|
112
113
|
consoleOutputs: rawConsoleOutputs,
|
|
113
114
|
stale,
|
|
115
|
+
interrupted,
|
|
114
116
|
cellName,
|
|
115
117
|
cellId,
|
|
116
118
|
onSubmitDebugger,
|
|
@@ -280,6 +282,7 @@ const ConsoleOutputInternal = (props: Props): React.ReactNode => {
|
|
|
280
282
|
output={output.data}
|
|
281
283
|
response={output.response}
|
|
282
284
|
isPassword={isPassword}
|
|
285
|
+
interrupted={interrupted}
|
|
283
286
|
/>
|
|
284
287
|
);
|
|
285
288
|
}
|
|
@@ -359,9 +362,9 @@ const StdInput = (props: {
|
|
|
359
362
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
360
363
|
if (value) {
|
|
361
364
|
addToHistory(value);
|
|
362
|
-
onSubmit(value);
|
|
363
|
-
setValue("");
|
|
364
365
|
}
|
|
366
|
+
onSubmit(value);
|
|
367
|
+
setValue("");
|
|
365
368
|
e.preventDefault();
|
|
366
369
|
e.stopPropagation();
|
|
367
370
|
}
|
|
@@ -382,12 +385,27 @@ const StdInputWithResponse = (props: {
|
|
|
382
385
|
output: string;
|
|
383
386
|
response?: string;
|
|
384
387
|
isPassword?: boolean;
|
|
388
|
+
interrupted?: boolean;
|
|
385
389
|
}) => {
|
|
390
|
+
const { output, response, isPassword, interrupted } = props;
|
|
391
|
+
const hasResponse = response != null && response !== "";
|
|
392
|
+
const wasInterruptedWithoutResponse = interrupted && !hasResponse;
|
|
393
|
+
|
|
386
394
|
return (
|
|
387
395
|
<div className="flex gap-2 items-center">
|
|
388
|
-
{renderText(
|
|
389
|
-
{!
|
|
390
|
-
<span
|
|
396
|
+
{renderText(output)}
|
|
397
|
+
{!isPassword && !wasInterruptedWithoutResponse && (
|
|
398
|
+
<span
|
|
399
|
+
className="inline-flex items-center gap-1 text-(--sky-11)"
|
|
400
|
+
aria-label="stdin response"
|
|
401
|
+
>
|
|
402
|
+
<ChevronRightIcon className="w-4 h-4 shrink-0 opacity-70" />
|
|
403
|
+
{hasResponse ? (
|
|
404
|
+
response
|
|
405
|
+
) : (
|
|
406
|
+
<span className="italic opacity-70">(empty)</span>
|
|
407
|
+
)}
|
|
408
|
+
</span>
|
|
391
409
|
)}
|
|
392
410
|
</div>
|
|
393
411
|
);
|
|
@@ -28,6 +28,7 @@ describe("ConsoleOutput integration", () => {
|
|
|
28
28
|
cellName: "test_cell",
|
|
29
29
|
consoleOutputs: [] as WithResponse<OutputMessage>[],
|
|
30
30
|
stale: false,
|
|
31
|
+
interrupted: false,
|
|
31
32
|
debuggerActive: false,
|
|
32
33
|
onSubmitDebugger: () => {
|
|
33
34
|
// noop
|
|
@@ -59,6 +60,7 @@ describe("ConsoleOutput pdb history", () => {
|
|
|
59
60
|
cellName: "test_cell",
|
|
60
61
|
consoleOutputs: [] as WithResponse<OutputMessage>[],
|
|
61
62
|
stale: false,
|
|
63
|
+
interrupted: false,
|
|
62
64
|
debuggerActive: false,
|
|
63
65
|
onSubmitDebugger: vi.fn(),
|
|
64
66
|
};
|
|
@@ -118,6 +120,82 @@ describe("ConsoleOutput pdb history", () => {
|
|
|
118
120
|
expect(newInput).toHaveValue("next");
|
|
119
121
|
});
|
|
120
122
|
|
|
123
|
+
it("should submit an empty string when Enter is pressed with no input", () => {
|
|
124
|
+
// Many CLIs prompt "Press Enter to continue" and expect "" back.
|
|
125
|
+
const onSubmitDebugger = vi.fn();
|
|
126
|
+
const outputs: WithResponse<OutputMessage>[] = [
|
|
127
|
+
stdinPrompt("Press Enter to continue: "),
|
|
128
|
+
];
|
|
129
|
+
|
|
130
|
+
renderWithProvider(
|
|
131
|
+
<ConsoleOutput
|
|
132
|
+
{...defaultProps}
|
|
133
|
+
consoleOutputs={outputs}
|
|
134
|
+
onSubmitDebugger={onSubmitDebugger}
|
|
135
|
+
/>,
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
const input = screen.getByTestId("console-input");
|
|
139
|
+
fireEvent.keyDown(input, { key: "Enter" });
|
|
140
|
+
|
|
141
|
+
expect(onSubmitDebugger).toHaveBeenCalledWith("", 0);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("should not record empty submissions in input history", () => {
|
|
145
|
+
const onSubmitDebugger = vi.fn();
|
|
146
|
+
const outputs1: WithResponse<OutputMessage>[] = [stdinPrompt("(Pdb) ")];
|
|
147
|
+
|
|
148
|
+
const { rerender } = renderWithProvider(
|
|
149
|
+
<ConsoleOutput
|
|
150
|
+
{...defaultProps}
|
|
151
|
+
consoleOutputs={outputs1}
|
|
152
|
+
onSubmitDebugger={onSubmitDebugger}
|
|
153
|
+
/>,
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
let input = screen.getByTestId("console-input");
|
|
157
|
+
fireEvent.change(input, { target: { value: "step" } });
|
|
158
|
+
fireEvent.keyDown(input, { key: "Enter" });
|
|
159
|
+
|
|
160
|
+
const outputs2: WithResponse<OutputMessage>[] = [
|
|
161
|
+
stdinPrompt("(Pdb) ", "step"),
|
|
162
|
+
stdinPrompt("(Pdb) "),
|
|
163
|
+
];
|
|
164
|
+
rerender(
|
|
165
|
+
<TooltipProvider>
|
|
166
|
+
<ConsoleOutput
|
|
167
|
+
{...defaultProps}
|
|
168
|
+
consoleOutputs={outputs2}
|
|
169
|
+
onSubmitDebugger={onSubmitDebugger}
|
|
170
|
+
/>
|
|
171
|
+
</TooltipProvider>,
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
// Submit an empty value; this should NOT enter the history stack.
|
|
175
|
+
input = screen.getByTestId("console-input");
|
|
176
|
+
fireEvent.keyDown(input, { key: "Enter" });
|
|
177
|
+
|
|
178
|
+
const outputs3: WithResponse<OutputMessage>[] = [
|
|
179
|
+
stdinPrompt("(Pdb) ", "step"),
|
|
180
|
+
stdinPrompt("(Pdb) ", ""),
|
|
181
|
+
stdinPrompt("(Pdb) "),
|
|
182
|
+
];
|
|
183
|
+
rerender(
|
|
184
|
+
<TooltipProvider>
|
|
185
|
+
<ConsoleOutput
|
|
186
|
+
{...defaultProps}
|
|
187
|
+
consoleOutputs={outputs3}
|
|
188
|
+
onSubmitDebugger={onSubmitDebugger}
|
|
189
|
+
/>
|
|
190
|
+
</TooltipProvider>,
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
// ArrowUp should jump back to "step", skipping the empty submission.
|
|
194
|
+
input = screen.getByTestId("console-input");
|
|
195
|
+
fireEvent.keyDown(input, { key: "ArrowUp" });
|
|
196
|
+
expect(input).toHaveValue("step");
|
|
197
|
+
});
|
|
198
|
+
|
|
121
199
|
it("should navigate through multiple history entries across remounts", () => {
|
|
122
200
|
const onSubmitDebugger = vi.fn();
|
|
123
201
|
|
|
@@ -192,6 +270,41 @@ describe("ConsoleOutput pdb history", () => {
|
|
|
192
270
|
fireEvent.keyDown(input, { key: "ArrowDown" });
|
|
193
271
|
expect(input).toHaveValue("");
|
|
194
272
|
});
|
|
273
|
+
|
|
274
|
+
it("should distinguish an interrupted prompt from a bare-Enter submission", () => {
|
|
275
|
+
// After interrupt, cell.ts coerces pending stdin prompts to response: "".
|
|
276
|
+
// We must render that case differently from a real bare-Enter response,
|
|
277
|
+
// so the user isn't told they "submitted" a blank value.
|
|
278
|
+
const interruptedOutputs: WithResponse<OutputMessage>[] = [
|
|
279
|
+
stdinPrompt("Press Enter to continue: ", ""),
|
|
280
|
+
];
|
|
281
|
+
|
|
282
|
+
const { rerender } = renderWithProvider(
|
|
283
|
+
<ConsoleOutput
|
|
284
|
+
{...defaultProps}
|
|
285
|
+
consoleOutputs={interruptedOutputs}
|
|
286
|
+
interrupted={true}
|
|
287
|
+
/>,
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
// No response chunk should be rendered for an interrupted pending prompt.
|
|
291
|
+
expect(screen.queryByLabelText("stdin response")).not.toBeInTheDocument();
|
|
292
|
+
|
|
293
|
+
// Same outputs, but the cell isn't interrupted -- this is a real
|
|
294
|
+
// bare-Enter submission, so we should render the (empty) placeholder.
|
|
295
|
+
rerender(
|
|
296
|
+
<TooltipProvider>
|
|
297
|
+
<ConsoleOutput
|
|
298
|
+
{...defaultProps}
|
|
299
|
+
consoleOutputs={interruptedOutputs}
|
|
300
|
+
interrupted={false}
|
|
301
|
+
/>
|
|
302
|
+
</TooltipProvider>,
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
expect(screen.getByLabelText("stdin response")).toBeInTheDocument();
|
|
306
|
+
expect(screen.getByText("(empty)")).toBeInTheDocument();
|
|
307
|
+
});
|
|
195
308
|
});
|
|
196
309
|
|
|
197
310
|
describe("ConsoleOutput debounced clearing", () => {
|
|
@@ -219,6 +332,7 @@ describe("ConsoleOutput debounced clearing", () => {
|
|
|
219
332
|
cellName: "test_cell",
|
|
220
333
|
consoleOutputs: [] as WithResponse<OutputMessage>[],
|
|
221
334
|
stale: false,
|
|
335
|
+
interrupted: false,
|
|
222
336
|
debuggerActive: false,
|
|
223
337
|
onSubmitDebugger: vi.fn(),
|
|
224
338
|
};
|
|
@@ -4,6 +4,7 @@ import { describe, it, expect } from "vitest";
|
|
|
4
4
|
import { computeSlideCellsInfo } from "../compute-slide-cells";
|
|
5
5
|
import type { SlideConfig, SlidesLayout } from "../types";
|
|
6
6
|
import type { CellId } from "@/core/cells/ids";
|
|
7
|
+
import { cellId } from "@/__tests__/branded";
|
|
7
8
|
|
|
8
9
|
interface TestCell {
|
|
9
10
|
id: CellId;
|
|
@@ -15,10 +16,10 @@ const DEFAULT_OUTPUT: TestCell["output"] = { data: "ok" };
|
|
|
15
16
|
const cell = (
|
|
16
17
|
id: string,
|
|
17
18
|
output: TestCell["output"] = DEFAULT_OUTPUT,
|
|
18
|
-
): TestCell => ({ id: id
|
|
19
|
+
): TestCell => ({ id: cellId(id), output });
|
|
19
20
|
|
|
20
21
|
const layoutOf = (entries: Array<[string, SlideConfig]>): SlidesLayout => ({
|
|
21
|
-
cells: new Map(entries.map(([id, cfg]) => [id
|
|
22
|
+
cells: new Map(entries.map(([id, cfg]) => [cellId(id), cfg])),
|
|
22
23
|
deck: {},
|
|
23
24
|
});
|
|
24
25
|
|
|
@@ -121,7 +122,7 @@ describe("computeSlideCellsInfo", () => {
|
|
|
121
122
|
// Skipped cells are still "visible" deck cells — they just aren't rendered
|
|
122
123
|
// in reveal. The minimap relies on the full list plus skippedIds.
|
|
123
124
|
expect(result.cellsWithOutput.map((c) => c.id)).toEqual(["a", "b", "c"]);
|
|
124
|
-
expect(result.slideTypes.get("b"
|
|
125
|
+
expect(result.slideTypes.get(cellId("b"))).toBe("skip");
|
|
125
126
|
});
|
|
126
127
|
|
|
127
128
|
it("ignores layout entries for cells that have no output", () => {
|
|
@@ -137,7 +138,7 @@ describe("computeSlideCellsInfo", () => {
|
|
|
137
138
|
);
|
|
138
139
|
expect(result.cellsWithOutput.map((c) => c.id)).toEqual(["a"]);
|
|
139
140
|
expect(result.skippedIds.size).toBe(0);
|
|
140
|
-
expect(result.slideTypes.has("b"
|
|
141
|
+
expect(result.slideTypes.has(cellId("b"))).toBe(false);
|
|
141
142
|
});
|
|
142
143
|
|
|
143
144
|
it("preserves the input order of cells in cellsWithOutput", () => {
|
|
@@ -4,10 +4,11 @@ import { describe, it, expect } from "vitest";
|
|
|
4
4
|
import { SlidesLayoutPlugin } from "../plugin";
|
|
5
5
|
import type { CellData } from "@/core/cells/types";
|
|
6
6
|
import type { CellId } from "@/core/cells/ids";
|
|
7
|
+
import { cellId } from "@/__tests__/branded";
|
|
7
8
|
|
|
8
9
|
function makeCell(id: string, code = "print('hi')"): CellData {
|
|
9
10
|
return {
|
|
10
|
-
id: id
|
|
11
|
+
id: cellId(id),
|
|
11
12
|
name: id,
|
|
12
13
|
code,
|
|
13
14
|
edited: false,
|
|
@@ -198,7 +199,10 @@ const BACKWARDS_COMPAT_SNAPSHOTS: BackwardsCompatCase[] = [
|
|
|
198
199
|
},
|
|
199
200
|
{
|
|
200
201
|
// Defensive: if a future version adds a new SlideConfig field and a user
|
|
201
|
-
// downgrades, we must not crash on unknown keys
|
|
202
|
+
// downgrades, we must not crash on unknown keys — AND we must not silently
|
|
203
|
+
// drop them either. `notes` / `background` aren't in the current schema;
|
|
204
|
+
// they must still be present after validate + (de)serialize so a downgrade
|
|
205
|
+
// followed by a save doesn't erase the newer marimo's data.
|
|
202
206
|
label: "forward-compat: unknown SlideConfig fields present",
|
|
203
207
|
input: {
|
|
204
208
|
cells: [{ type: "slide", notes: "x", background: "#000" }],
|
|
@@ -206,7 +210,42 @@ const BACKWARDS_COMPAT_SNAPSHOTS: BackwardsCompatCase[] = [
|
|
|
206
210
|
expected: {
|
|
207
211
|
deck: {},
|
|
208
212
|
cellIds: ["a"],
|
|
209
|
-
cellEntries: [["a", { type: "slide" }]],
|
|
213
|
+
cellEntries: [["a", { type: "slide", notes: "x", background: "#000" }]],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
// Same forward-compat guarantee for unknown deck-level fields (e.g. future
|
|
218
|
+
// Reveal options we haven't modeled yet).
|
|
219
|
+
label: "forward-compat: unknown deck fields present",
|
|
220
|
+
input: {
|
|
221
|
+
cells: [{}],
|
|
222
|
+
deck: { transition: "fade", controls: false, autoSlide: 5000 },
|
|
223
|
+
},
|
|
224
|
+
expected: {
|
|
225
|
+
deck: { transition: "fade", controls: false, autoSlide: 5000 },
|
|
226
|
+
cellIds: ["a"],
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
// `speakerNotes` was added to SlideConfig. The validator must
|
|
231
|
+
// know about it (so it isn't silently stripped), the deserializer must
|
|
232
|
+
// carry it through, and serialize → deserialize must round-trip it.
|
|
233
|
+
label: "speakerNotes round-trips through validate + (de)serialize",
|
|
234
|
+
input: {
|
|
235
|
+
cells: [
|
|
236
|
+
{ type: "slide", speakerNotes: "intro" },
|
|
237
|
+
{ type: "fragment", speakerNotes: "" },
|
|
238
|
+
{ type: "fragment", speakerNotes: "multi\n\nline\n\nnotes" },
|
|
239
|
+
],
|
|
240
|
+
},
|
|
241
|
+
expected: {
|
|
242
|
+
deck: {},
|
|
243
|
+
cellIds: ["a", "b", "c"],
|
|
244
|
+
cellEntries: [
|
|
245
|
+
["a", { type: "slide", speakerNotes: "intro" }],
|
|
246
|
+
["b", { type: "fragment", speakerNotes: "" }],
|
|
247
|
+
["c", { type: "fragment", speakerNotes: "multi\n\nline\n\nnotes" }],
|
|
248
|
+
],
|
|
210
249
|
},
|
|
211
250
|
},
|
|
212
251
|
];
|
|
@@ -223,20 +262,21 @@ describe("SlidesLayoutPlugin backwards compatibility", () => {
|
|
|
223
262
|
parsed.success,
|
|
224
263
|
`validator rejected: ${JSON.stringify(input)}`,
|
|
225
264
|
).toBe(true);
|
|
265
|
+
if (!parsed.success) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
226
268
|
|
|
227
|
-
// 2.
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
cells,
|
|
234
|
-
);
|
|
269
|
+
// 2. Deserializing the *validator output* (not the raw input) must
|
|
270
|
+
// preserve every field listed in `expected.cellEntries`. This is what
|
|
271
|
+
// catches a schema regression: if the validator silently strips a
|
|
272
|
+
// known field, the deserialized config won't carry it and the
|
|
273
|
+
// assertion below fails.
|
|
274
|
+
const layout = SlidesLayoutPlugin.deserializeLayout(parsed.data, cells);
|
|
235
275
|
if (expected.deck !== undefined) {
|
|
236
276
|
expect(layout.deck).toEqual(expected.deck);
|
|
237
277
|
}
|
|
238
|
-
for (const [
|
|
239
|
-
expect(layout.cells.get(cellId
|
|
278
|
+
for (const [cellEntryId, expectedConfig] of expected.cellEntries ?? []) {
|
|
279
|
+
expect(layout.cells.get(cellId(cellEntryId))).toMatchObject(
|
|
240
280
|
expectedConfig as object,
|
|
241
281
|
);
|
|
242
282
|
}
|
|
@@ -251,8 +291,8 @@ describe("SlidesLayoutPlugin backwards compatibility", () => {
|
|
|
251
291
|
reserialized,
|
|
252
292
|
cells,
|
|
253
293
|
);
|
|
254
|
-
for (const [
|
|
255
|
-
expect(redeserialized.cells.get(cellId
|
|
294
|
+
for (const [cellEntryId, expectedConfig] of expected.cellEntries ?? []) {
|
|
295
|
+
expect(redeserialized.cells.get(cellId(cellEntryId))).toMatchObject(
|
|
256
296
|
expectedConfig as object,
|
|
257
297
|
);
|
|
258
298
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import type { CellId } from "@/core/cells/ids";
|
|
4
|
+
import { Logger } from "@/utils/Logger";
|
|
4
5
|
import type { ICellRendererPlugin } from "../types";
|
|
5
6
|
import { SlidesLayoutRenderer } from "./slides-layout";
|
|
6
|
-
import
|
|
7
|
-
SerializedSlidesLayout,
|
|
8
|
-
SlideConfig,
|
|
9
|
-
SlidesLayout,
|
|
7
|
+
import {
|
|
8
|
+
type SerializedSlidesLayout,
|
|
9
|
+
type SlideConfig,
|
|
10
|
+
type SlidesLayout,
|
|
11
|
+
SlidesLayoutSchema,
|
|
10
12
|
} from "./types";
|
|
11
|
-
import { Logger } from "@/utils/Logger";
|
|
12
|
-
import type { CellId } from "@/core/cells/ids";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Plugin definition for the slides layout.
|
|
@@ -20,24 +20,7 @@ export const SlidesLayoutPlugin: ICellRendererPlugin<
|
|
|
20
20
|
> = {
|
|
21
21
|
type: "slides",
|
|
22
22
|
name: "Slides",
|
|
23
|
-
|
|
24
|
-
// All fields are optional so layouts saved by older marimo versions will work
|
|
25
|
-
validator: z.object({
|
|
26
|
-
cells: z
|
|
27
|
-
.array(
|
|
28
|
-
z.object({
|
|
29
|
-
type: z.enum(["slide", "sub-slide", "fragment", "skip"]).optional(),
|
|
30
|
-
}),
|
|
31
|
-
)
|
|
32
|
-
.optional(),
|
|
33
|
-
deck: z
|
|
34
|
-
.object({
|
|
35
|
-
transition: z
|
|
36
|
-
.enum(["none", "fade", "slide", "convex", "concave", "zoom"])
|
|
37
|
-
.optional(),
|
|
38
|
-
})
|
|
39
|
-
.optional(),
|
|
40
|
-
}),
|
|
23
|
+
validator: SlidesLayoutSchema,
|
|
41
24
|
|
|
42
25
|
deserializeLayout: (serialized, cells): SlidesLayout => {
|
|
43
26
|
const serializedCells = serialized.cells ?? [];
|
|
@@ -3,6 +3,7 @@ import React, { useMemo, useState } from "react";
|
|
|
3
3
|
import { useAtomValue } from "jotai";
|
|
4
4
|
import { numColumnsAtom } from "@/core/cells/cells";
|
|
5
5
|
import type { CellId } from "@/core/cells/ids";
|
|
6
|
+
import { kioskModeAtom } from "@/core/mode";
|
|
6
7
|
import type { ICellRendererProps } from "../types";
|
|
7
8
|
import type { SlidesLayout } from "./types";
|
|
8
9
|
import { computeSlideCellsInfo } from "./compute-slide-cells";
|
|
@@ -21,7 +22,10 @@ export const SlidesLayoutRenderer: React.FC<Props> = ({
|
|
|
21
22
|
cells,
|
|
22
23
|
mode,
|
|
23
24
|
}) => {
|
|
24
|
-
|
|
25
|
+
// Kiosk clients (e.g. reveal.js's speaker-view iframes) are read-only and
|
|
26
|
+
// shouldn't show authoring chrome, so we collapse to the read-mode layout.
|
|
27
|
+
const kioskMode = useAtomValue(kioskModeAtom);
|
|
28
|
+
const isReading = mode === "read" || kioskMode;
|
|
25
29
|
const numColumns = useAtomValue(numColumnsAtom);
|
|
26
30
|
const isMultiColumn = numColumns > 1;
|
|
27
31
|
const [activeCellId, setActiveCellId] = useState<CellId | null>(null);
|
|
@@ -52,14 +56,23 @@ export const SlidesLayoutRenderer: React.FC<Props> = ({
|
|
|
52
56
|
activeIndex={resolvedIndex}
|
|
53
57
|
onSlideChange={handleSlideChange}
|
|
54
58
|
configWidth={300}
|
|
55
|
-
mode={mode}
|
|
56
|
-
isEditable={
|
|
59
|
+
mode={isReading ? "read" : mode}
|
|
60
|
+
isEditable={!isReading}
|
|
57
61
|
/>
|
|
58
62
|
);
|
|
59
63
|
|
|
60
64
|
if (isReading) {
|
|
61
|
-
//
|
|
62
|
-
//
|
|
65
|
+
// In kiosk mode (e.g. reveal.js's speaker-view iframes), anchor to the
|
|
66
|
+
// iframe viewport with `dvh`/`dvw` so the deck resizes with the popup
|
|
67
|
+
// window. The non-kiosk read mode keeps its 16:9 cap so the deck doesn't
|
|
68
|
+
// balloon to the full viewport on wide screens.
|
|
69
|
+
if (kioskMode) {
|
|
70
|
+
return (
|
|
71
|
+
<div className="flex h-dvh w-dvw overflow-hidden bg-background">
|
|
72
|
+
{slides}
|
|
73
|
+
</div>
|
|
74
|
+
);
|
|
75
|
+
}
|
|
63
76
|
return (
|
|
64
77
|
<div className="p-4 flex flex-1 items-center justify-center min-h-0">
|
|
65
78
|
<div className="h-full max-h-[95vh] aspect-video max-w-full flex">
|
|
@@ -70,7 +83,7 @@ export const SlidesLayoutRenderer: React.FC<Props> = ({
|
|
|
70
83
|
}
|
|
71
84
|
|
|
72
85
|
return (
|
|
73
|
-
<div className="pr-18 pb-2 flex flex-row gap-2 min-h-0">
|
|
86
|
+
<div className="flex-1 pr-18 pb-2 flex flex-row gap-2 min-h-0">
|
|
74
87
|
<SlidesMinimap
|
|
75
88
|
cells={cellsWithOutput}
|
|
76
89
|
thumbnailWidth={220}
|
|
@@ -1,41 +1,50 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/* oxlint-disable typescript/no-empty-object-type */
|
|
3
2
|
|
|
3
|
+
import { z } from "zod";
|
|
4
4
|
import type { CellId } from "@/core/cells/ids";
|
|
5
5
|
|
|
6
|
+
const SlideTypeSchema = z.enum(["slide", "sub-slide", "fragment", "skip"]);
|
|
7
|
+
export type SlideType = z.infer<typeof SlideTypeSchema>;
|
|
8
|
+
|
|
9
|
+
const SlideConfigSchema = z.looseObject({
|
|
10
|
+
type: SlideTypeSchema.optional(),
|
|
11
|
+
speakerNotes: z.string().optional(),
|
|
12
|
+
});
|
|
13
|
+
export type SlideConfig = z.infer<typeof SlideConfigSchema>;
|
|
14
|
+
|
|
15
|
+
const DeckTransitionSchema = z.enum([
|
|
16
|
+
"none",
|
|
17
|
+
"fade",
|
|
18
|
+
"slide",
|
|
19
|
+
"convex",
|
|
20
|
+
"concave",
|
|
21
|
+
"zoom",
|
|
22
|
+
]);
|
|
23
|
+
export type DeckTransition = z.infer<typeof DeckTransitionSchema>;
|
|
24
|
+
|
|
25
|
+
const DeckConfigSchema = z.looseObject({
|
|
26
|
+
transition: DeckTransitionSchema.optional(),
|
|
27
|
+
});
|
|
28
|
+
export type DeckConfig = z.infer<typeof DeckConfigSchema>;
|
|
29
|
+
|
|
6
30
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
31
|
+
* Schema for the serialized form of a slides layout.
|
|
32
|
+
*
|
|
33
|
+
* This must be backwards-compatible as it is stored on the user's disk —
|
|
34
|
+
* fields are optional so files saved before they existed (e.g. the bare `{}`
|
|
35
|
+
* emitted by earlier marimo versions) still deserialize cleanly. Unknown
|
|
36
|
+
* keys are preserved (via `looseObject`) for the same reason.
|
|
9
37
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
cells?: SlideConfig[];
|
|
16
|
-
};
|
|
38
|
+
export const SlidesLayoutSchema = z.looseObject({
|
|
39
|
+
cells: z.array(SlideConfigSchema).optional(),
|
|
40
|
+
deck: DeckConfigSchema.optional(),
|
|
41
|
+
});
|
|
42
|
+
export type SerializedSlidesLayout = z.infer<typeof SlidesLayoutSchema>;
|
|
17
43
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// We map the cells to their IDs so that we can track them as they move around.
|
|
44
|
+
/**
|
|
45
|
+
* Runtime form of a slides layout.
|
|
46
|
+
*/
|
|
47
|
+
export interface SlidesLayout {
|
|
23
48
|
cells: Map<CellId, SlideConfig>;
|
|
24
49
|
deck: DeckConfig;
|
|
25
50
|
}
|
|
26
|
-
|
|
27
|
-
export type SlideType = "slide" | "sub-slide" | "fragment" | "skip";
|
|
28
|
-
export interface SlideConfig {
|
|
29
|
-
type?: SlideType;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export type DeckTransition =
|
|
33
|
-
| "none"
|
|
34
|
-
| "fade"
|
|
35
|
-
| "slide"
|
|
36
|
-
| "convex"
|
|
37
|
-
| "concave"
|
|
38
|
-
| "zoom";
|
|
39
|
-
export interface DeckConfig {
|
|
40
|
-
transition?: DeckTransition;
|
|
41
|
-
}
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
LinkIcon,
|
|
17
17
|
MessagesSquareIcon,
|
|
18
18
|
OrbitIcon,
|
|
19
|
+
PackageIcon,
|
|
19
20
|
YoutubeIcon,
|
|
20
21
|
} from "lucide-react";
|
|
21
22
|
import type React from "react";
|
|
@@ -58,6 +59,11 @@ const TUTORIALS: Record<
|
|
|
58
59
|
FileIcon,
|
|
59
60
|
"Understand marimo's pure-Python file format",
|
|
60
61
|
],
|
|
62
|
+
"external-dependencies": [
|
|
63
|
+
"External dependencies",
|
|
64
|
+
PackageIcon,
|
|
65
|
+
"Declare dependencies with Python script metadata",
|
|
66
|
+
],
|
|
61
67
|
"for-jupyter-users": [
|
|
62
68
|
"For Jupyter users",
|
|
63
69
|
OrbitIcon,
|
|
@@ -34,7 +34,10 @@ const RunPage = (props: Props) => {
|
|
|
34
34
|
|
|
35
35
|
const Watermark = () => {
|
|
36
36
|
return (
|
|
37
|
-
<div
|
|
37
|
+
<div
|
|
38
|
+
className="fixed bottom-0 right-0 z-50 print:hidden"
|
|
39
|
+
data-testid="watermark"
|
|
40
|
+
>
|
|
38
41
|
<a
|
|
39
42
|
href={Constants.githubPage}
|
|
40
43
|
target="_blank"
|