@marimo-team/frontend 0.24.3-dev21 → 0.24.3-dev22

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.
Files changed (85) hide show
  1. package/dist/assets/{ConnectedDataExplorerComponent-Bj-8QvOO.js → ConnectedDataExplorerComponent-BxEhAvf2.js} +1 -1
  2. package/dist/assets/{JsonOutput-CyYzc60z.js → JsonOutput-BpHpvw85.js} +1 -1
  3. package/dist/assets/{LazyAnyLanguageCodeMirror-BtzjduAK.js → LazyAnyLanguageCodeMirror-Da4h0YCR.js} +2 -2
  4. package/dist/assets/{MarimoErrorOutput-BshpkIVR.js → MarimoErrorOutput-9qSrtrSc.js} +1 -1
  5. package/dist/assets/{RenderHTML-BTFNYa1C.js → RenderHTML-N95NfVow.js} +2 -2
  6. package/dist/assets/{RunButton-Cie2TYpY.js → RunButton-C_M5WUDn.js} +1 -1
  7. package/dist/assets/{abnfDiagram-VCTEODGH-CTw9qxYa.js → abnfDiagram-VCTEODGH-3U62UF6W.js} +1 -1
  8. package/dist/assets/{add-cell-with-ai-YkPnjDjr.js → add-cell-with-ai-JrZ3dZK8.js} +1 -1
  9. package/dist/assets/{agent-panel-BQLa06pr.js → agent-panel-aceUbbtZ.js} +1 -1
  10. package/dist/assets/{ai-model-dropdown-RAsX31Hv.js → ai-model-dropdown-CuFKgpI6.js} +1 -1
  11. package/dist/assets/{any-language-editor-BT05ewla.js → any-language-editor-DIfV5lY9.js} +1 -1
  12. package/dist/assets/{app-config-button-msEMWBIk.js → app-config-button-hChgIp-1.js} +1 -1
  13. package/dist/assets/{architectureDiagram-5GKGNRK7-DCx0yPPP.js → architectureDiagram-5GKGNRK7-XZggJx8Z.js} +1 -1
  14. package/dist/assets/{cache-panel-B8useRmi.js → cache-panel-B369RVf6.js} +1 -1
  15. package/dist/assets/{chat-display-DZGATOY-.js → chat-display-LnKKHJET.js} +1 -1
  16. package/dist/assets/{chat-panel-Dl134EjA.js → chat-panel-CEutKfvM.js} +1 -1
  17. package/dist/assets/{chat-ui-Bnru6Vtf.js → chat-ui-DdFELeut.js} +1 -1
  18. package/dist/assets/{chunk-IMKFNOWR-DsbK9jlz.js → chunk-IMKFNOWR-CWWaj_eZ.js} +1 -1
  19. package/dist/assets/{chunk-SHT3W25Y-DwAAtWpF.js → chunk-SHT3W25Y-DhQFtMYF.js} +1 -1
  20. package/dist/assets/{chunk-SVP7TREG-Cm2QsNfG.js → chunk-SVP7TREG-CGAF68wY.js} +1 -1
  21. package/dist/assets/{chunk-TICWLB2K-DZlYBaKM.js → chunk-TICWLB2K-DUD1nSLR.js} +1 -1
  22. package/dist/assets/{classDiagram-ZZMXUADV-DYe7vEnn.js → classDiagram-ZZMXUADV-BIG-0Wmd.js} +1 -1
  23. package/dist/assets/{classDiagram-v2-VYDZK3BY-DYe7vEnn.js → classDiagram-v2-VYDZK3BY-BIG-0Wmd.js} +1 -1
  24. package/dist/assets/{command-palette-DOB1Bndh.js → command-palette-CWfzxEs_.js} +1 -1
  25. package/dist/assets/{components-BqzG--PP.js → components-BmXgqUuI.js} +1 -1
  26. package/dist/assets/{components-ZGavCSxx.js → components-z1r_qaTx.js} +1 -1
  27. package/dist/assets/{cynefinDiagram-5FMLGOSQ-5_q6hV5Z.js → cynefinDiagram-5FMLGOSQ-I2kn-8SS.js} +1 -1
  28. package/dist/assets/{dagre-BDRVKmaQ.js → dagre-C9a0Ci_H.js} +1 -1
  29. package/dist/assets/{dagre-GXQ25YYZ-CWoZAFmI.js → dagre-GXQ25YYZ-DOEexSWK.js} +1 -1
  30. package/dist/assets/{data-grid-overlay-editor-DFeVItiD.js → data-grid-overlay-editor-DOe6QsGf.js} +1 -1
  31. package/dist/assets/{dependency-graph-panel-IP6d8BbH.js → dependency-graph-panel-vdECXCkM.js} +1 -1
  32. package/dist/assets/{diagram-S7CK7UJ4-B8I8X0CY.js → diagram-S7CK7UJ4-CKRRJ5Hc.js} +1 -1
  33. package/dist/assets/{diagram-UQ7AKVKN-BcweTnXI.js → diagram-UQ7AKVKN-D7mKu_kM.js} +1 -1
  34. package/dist/assets/{diagram-VX7I27RA-AWiaWuJO.js → diagram-VX7I27RA-B0cVx1nI.js} +1 -1
  35. package/dist/assets/{diagram-Z3DM3KII-DDvreGn8.js → diagram-Z3DM3KII-CusYTO8G.js} +1 -1
  36. package/dist/assets/{documentation-panel-CJgkTyIx.js → documentation-panel-qwNYitZ3.js} +1 -1
  37. package/dist/assets/{ebnfDiagram-PWID7BFC-ButzO8HZ.js → ebnfDiagram-PWID7BFC-D46hXu0l.js} +1 -1
  38. package/dist/assets/{edit-page-e1AwBQu4.js → edit-page-DnnhBQPH.js} +4 -4
  39. package/dist/assets/{erDiagram-RLTQ6QDP-CgUjrkP9.js → erDiagram-RLTQ6QDP-Dikv0Fso.js} +1 -1
  40. package/dist/assets/{error-panel-5vJPqB6k.js → error-panel-CPgbldfu.js} +1 -1
  41. package/dist/assets/{file-explorer-panel-DNUKGUzp.js → file-explorer-panel-z-gsa-j2.js} +1 -1
  42. package/dist/assets/{file-name-input-DmflkfHZ.js → file-name-input-BVhk5tHx.js} +1 -1
  43. package/dist/assets/{flowDiagram-HODETNUW-CXcjmXAo.js → flowDiagram-HODETNUW-DyDM12jm.js} +1 -1
  44. package/dist/assets/{gallery-page-CZZnfSrv.js → gallery-page-btVOe2kg.js} +1 -1
  45. package/dist/assets/{glide-data-editor-DgiuGIF0.js → glide-data-editor-CT14Ztd8.js} +4 -4
  46. package/dist/assets/{home-page-ByY_ySER.js → home-page-0z6OTymR.js} +1 -1
  47. package/dist/assets/{index-DGRl4eiy.js → index-984Tnhsz.js} +6 -6
  48. package/dist/assets/{infoDiagram-27XIBGKW-BpOUg5X8.js → infoDiagram-27XIBGKW-C-JWkvBr.js} +1 -1
  49. package/dist/assets/{ishikawaDiagram-5VMMS53U-dBr69cQD.js → ishikawaDiagram-5VMMS53U-CuxCXtSY.js} +1 -1
  50. package/dist/assets/{kanban-definition-UXKFOSKX-BBcfu7Rv.js → kanban-definition-UXKFOSKX-BrvmZNoz.js} +1 -1
  51. package/dist/assets/{markdown-renderer-CpntV5hg.js → markdown-renderer-CrXRdVEi.js} +1 -1
  52. package/dist/assets/{mermaid-DR-TX3zF.js → mermaid-B6sN-hkI.js} +3 -3
  53. package/dist/assets/{mindmap-definition-YA3MSWOX-Cgnk0tk_.js → mindmap-definition-YA3MSWOX-DoltufX9.js} +1 -1
  54. package/dist/assets/{number-overlay-editor-Bl13fk4Z.js → number-overlay-editor-CT3U2G9F.js} +1 -1
  55. package/dist/assets/{outline-panel-uDi-sH56.js → outline-panel-Dvd5CElI.js} +1 -1
  56. package/dist/assets/{packages-panel-u7Zby5GB.js → packages-panel-BT-nYYbr.js} +1 -1
  57. package/dist/assets/{panels-CEerG3VA.js → panels-BUsHuUc8.js} +3 -3
  58. package/dist/assets/{pegDiagram-XKGWAZYB-DDsGRgTQ.js → pegDiagram-XKGWAZYB-d0Tx-bSJ.js} +1 -1
  59. package/dist/assets/{pieDiagram-E7YTZNPT-DUe_eLgm.js → pieDiagram-E7YTZNPT-C81NHOIP.js} +1 -1
  60. package/dist/assets/{process-output-BWxjdXY1.js → process-output-D7QVDScC.js} +1 -1
  61. package/dist/assets/{railroadDiagram-O6MQD6OU-DzY8nHzr.js → railroadDiagram-O6MQD6OU-DnTZDeC4.js} +1 -1
  62. package/dist/assets/{requirementDiagram-BXWQKSXE-DLKr649r.js → requirementDiagram-BXWQKSXE-DLAfuSPO.js} +1 -1
  63. package/dist/assets/{reveal-component-17zLsqZa.js → reveal-component-atpV5Uen.js} +1 -1
  64. package/dist/assets/{run-page-TO2BZZMp.js → run-page-BMJsOzy2.js} +1 -1
  65. package/dist/assets/{scratchpad-panel-VN_tBweQ.js → scratchpad-panel-Cg5zVbhC.js} +1 -1
  66. package/dist/assets/{sequenceDiagram-WJ2MYXX4-Cfg8qssF.js → sequenceDiagram-WJ2MYXX4-Ctefrk2W.js} +1 -1
  67. package/dist/assets/{session-panel-Cw_8kjDt.js → session-panel-Dwbifh51.js} +1 -1
  68. package/dist/assets/{snippets-panel-D7Rp5Zno.js → snippets-panel-Dvy9OdD4.js} +1 -1
  69. package/dist/assets/{stateDiagram-D77RDMKH-D_-rzAPC.js → stateDiagram-D77RDMKH-WccaGLAY.js} +1 -1
  70. package/dist/assets/{stateDiagram-v2-MP3YSRHH-FM75beyR.js → stateDiagram-v2-MP3YSRHH-BitHGOWC.js} +1 -1
  71. package/dist/assets/{swimlanes-42K2YHIH-ph-wyn_r.js → swimlanes-42K2YHIH-BpG4rawk.js} +1 -1
  72. package/dist/assets/{swimlanesDiagram-VR7AAH4N-CF7Gedcx.js → swimlanesDiagram-VR7AAH4N-9ejnJC_u.js} +1 -1
  73. package/dist/assets/{terminal-6SBeMqcn.js → terminal-B53u3qdG.js} +1 -1
  74. package/dist/assets/{timeline-definition-24CTP7MA-ByE-l4B7.js → timeline-definition-24CTP7MA-BIR9BrxG.js} +1 -1
  75. package/dist/assets/{tracing-DauHORbt.js → tracing-DxQsA4VC.js} +1 -1
  76. package/dist/assets/{tracing-panel-LaQEFD_q.js → tracing-panel-Bhq293kV.js} +2 -2
  77. package/dist/assets/{useCellActionButton-BYi2_TYS.js → useCellActionButton-D_9ih-0J.js} +1 -1
  78. package/dist/assets/{vega-component-BcSAqzv5.js → vega-component-AgTiD44W.js} +1 -1
  79. package/dist/assets/{vennDiagram-4TSXK5OY-Dpeno6-G.js → vennDiagram-4TSXK5OY-N8S9_E6a.js} +1 -1
  80. package/dist/assets/{wardleyDiagram-VM6X3IG4-C4cuSkrj.js → wardleyDiagram-VM6X3IG4-CCq_Dopz.js} +1 -1
  81. package/dist/assets/{xychartDiagram-S5SC5T6Z-B8RkSYF6.js → xychartDiagram-S5SC5T6Z-CtyOBwdO.js} +1 -1
  82. package/dist/index.html +6 -6
  83. package/package.json +1 -1
  84. package/src/plugins/core/RenderHTML.tsx +24 -12
  85. package/src/plugins/core/__test__/RenderHTML.test.ts +135 -12
@@ -1,5 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import type { ExtractAtomValue } from "jotai";
3
+ import { isValidElement, type ReactNode } from "react";
4
+ import { renderToStaticMarkup } from "react-dom/server";
3
5
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
4
6
  import { hasRunAnyCellAtom } from "@/components/editor/cell/useRunCells";
5
7
  import { userConfigAtom } from "@/core/config/config";
@@ -458,13 +460,21 @@ describe("wrapTooltipTargets", () => {
458
460
  expect(result).toMatchInlineSnapshot(`
459
461
  <Tooltip
460
462
  content={
461
- [
462
- "Line A",
463
- <br />,
464
- "Line B",
465
- <br />,
466
- "Line C",
467
- ]
463
+ <span
464
+ className="whitespace-pre-wrap"
465
+ >
466
+ <React.Fragment>
467
+ Line A
468
+ </React.Fragment>
469
+ <React.Fragment>
470
+ <br />
471
+ Line B
472
+ </React.Fragment>
473
+ <React.Fragment>
474
+ <br />
475
+ Line C
476
+ </React.Fragment>
477
+ </span>
468
478
  }
469
479
  >
470
480
  <span
@@ -483,11 +493,17 @@ describe("wrapTooltipTargets", () => {
483
493
  expect(parseHtml({ html })).toMatchInlineSnapshot(`
484
494
  <Tooltip
485
495
  content={
486
- [
487
- "Line A",
488
- <br />,
489
- "Line B",
490
- ]
496
+ <span
497
+ className="whitespace-pre-wrap"
498
+ >
499
+ <React.Fragment>
500
+ Line A
501
+ </React.Fragment>
502
+ <React.Fragment>
503
+ <br />
504
+ Line B
505
+ </React.Fragment>
506
+ </span>
491
507
  }
492
508
  >
493
509
  <span
@@ -514,6 +530,113 @@ describe("wrapTooltipTargets", () => {
514
530
  </Tooltip>
515
531
  `);
516
532
  });
533
+
534
+ test.each([
535
+ ["CRLF", "A\r\nB", '<span class="whitespace-pre-wrap">A<br/>B</span>'],
536
+ [
537
+ "encoded CRLF",
538
+ "A&#13;&#10;B",
539
+ '<span class="whitespace-pre-wrap">A<br/>B</span>',
540
+ ],
541
+ ["leading newline", "\nA", "A"],
542
+ ["trailing newline", "A\n", "A"],
543
+ [
544
+ "boundary newlines",
545
+ "\n\nA\nB\n\n",
546
+ '<span class="whitespace-pre-wrap">A<br/>B</span>',
547
+ ],
548
+ [
549
+ "boundary CRLF",
550
+ "&#13;&#10;A&#13;&#10;B&#13;&#10;",
551
+ '<span class="whitespace-pre-wrap">A<br/>B</span>',
552
+ ],
553
+ ["only newlines", "\n\n", ""],
554
+ ["only CRLF", "&#13;&#10;&#13;&#10;", ""],
555
+ [
556
+ "internal blank line",
557
+ "A\n\nB",
558
+ '<span class="whitespace-pre-wrap">A<br/><br/>B</span>',
559
+ ],
560
+ [
561
+ "spaces and tabs",
562
+ "\n A\t\n\tB \n",
563
+ '<span class="whitespace-pre-wrap"> A\t<br/>\tB </span>',
564
+ ],
565
+ [
566
+ "HTML text",
567
+ "&lt;b&gt;A&lt;/b&gt;\nB",
568
+ '<span class="whitespace-pre-wrap">&lt;b&gt;A&lt;/b&gt;<br/>B</span>',
569
+ ],
570
+ ])("data-tooltip handles %s", (_, content, expected) => {
571
+ const result = parseHtml({
572
+ html: `<span data-tooltip="${content}">Hover me</span>`,
573
+ });
574
+ if (!isValidElement<{ content: ReactNode }>(result)) {
575
+ throw new Error("Expected a Tooltip element");
576
+ }
577
+ expect(renderToStaticMarkup(result.props.content)).toBe(expected);
578
+ });
579
+
580
+ test("data-tooltip with newline renders as line breaks", () => {
581
+ const html = '<span data-tooltip="Line one\nLine two">Hover me</span>';
582
+ expect(parseHtml({ html })).toMatchInlineSnapshot(`
583
+ <Tooltip
584
+ content={
585
+ <span
586
+ className="whitespace-pre-wrap"
587
+ >
588
+ <React.Fragment>
589
+ Line one
590
+ </React.Fragment>
591
+ <React.Fragment>
592
+ <br />
593
+ Line two
594
+ </React.Fragment>
595
+ </span>
596
+ }
597
+ >
598
+ <span
599
+ data-tooltip="Line one
600
+ Line two"
601
+ >
602
+ Hover me
603
+ </span>
604
+ </Tooltip>
605
+ `);
606
+ });
607
+
608
+ test("data-tooltip with multiple newlines renders all as line breaks", () => {
609
+ const html = '<span data-tooltip="A\nB\nC">Hover me</span>';
610
+ expect(parseHtml({ html })).toMatchInlineSnapshot(`
611
+ <Tooltip
612
+ content={
613
+ <span
614
+ className="whitespace-pre-wrap"
615
+ >
616
+ <React.Fragment>
617
+ A
618
+ </React.Fragment>
619
+ <React.Fragment>
620
+ <br />
621
+ B
622
+ </React.Fragment>
623
+ <React.Fragment>
624
+ <br />
625
+ C
626
+ </React.Fragment>
627
+ </span>
628
+ }
629
+ >
630
+ <span
631
+ data-tooltip="A
632
+ B
633
+ C"
634
+ >
635
+ Hover me
636
+ </span>
637
+ </Tooltip>
638
+ `);
639
+ });
517
640
  });
518
641
 
519
642
  describe("parseHtml with < nad >", () => {