@marimo-team/islands 0.23.17-dev8 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (643) hide show
  1. package/dist/{ConnectedDataExplorerComponent-f9vLjQiF.js → ConnectedDataExplorerComponent-BUC1MrsF.js} +24 -24
  2. package/dist/{ErrorBoundary-DhLqwSWA.js → ErrorBoundary-BniTEhHn.js} +7 -7
  3. package/dist/{ImageComparisonComponent-C3y7L3eJ.js → ImageComparisonComponent-B7b8DcJI.js} +42 -31
  4. package/dist/{Plot-YQOuVIei.js → Plot-eTseCFf_.js} +4 -4
  5. package/dist/_initCloneObject-DNUst5Cg.js +91 -0
  6. package/dist/abnfDiagram-N423BO3Z-DA4j92-C.js +112 -0
  7. package/dist/{any-language-editor-DifE-fl7.js → any-language-editor-LHl8ZmVN.js} +26 -26
  8. package/dist/apl-Cwo7GIH7.js +4 -0
  9. package/dist/{arc-CTIpFoOn.js → arc-9nABupDE.js} +2 -2
  10. package/dist/architecture-TIHT7OUA-DxLlkuAK.js +5 -0
  11. package/dist/{architectureDiagram-VXUJARFQ-DXwkyAaM.js → architectureDiagram-T3A2C74G-BBlBK1Oh.js} +327 -214
  12. package/dist/{arrays-sEtDRoG4.js → arrays-C56grfjL.js} +1 -1
  13. package/dist/asciiarmor-jrfEZ3j_.js +4 -0
  14. package/dist/asn1-BNEiJ4nQ.js +4 -0
  15. package/dist/assets/__vite-browser-external-DUz7vvG0.js +1 -0
  16. package/dist/assets/{worker-CDEKsBgX.js → worker-Cl1KJG2_.js} +2 -2
  17. package/dist/blockDiagram-VBNYF7ZC-Datz1WNn.js +3284 -0
  18. package/dist/brainfuck-BCunvTbd.js +4 -0
  19. package/dist/{button-BSm8IXRU.js → button-Dr2uAwhT.js} +9 -7
  20. package/dist/{c4Diagram-YG6GDRKO-B6dZC_oU.js → c4Diagram-5PPSVZJV-DTIsibpE.js} +165 -162
  21. package/dist/{capabilities-C6OQ5YBO.js → capabilities-BilXeZ7p.js} +2 -2
  22. package/dist/{channel-BN070S0F.js → channel-CuV_jmG4.js} +1 -1
  23. package/dist/chat-ui-o-tATfmW.js +8619 -0
  24. package/dist/{check-DP7U0H0G.js → check-58HHfHKy.js} +1 -1
  25. package/dist/chunk-2GRJ4B5K-DRayWnnu.js +68 -0
  26. package/dist/{chunk-QZHKN3VN-Dym5BS7y.js → chunk-2Q5K7J3B-BSLyFOHa.js} +1 -1
  27. package/dist/chunk-3NCLNEKW-BPlp8K7N.js +11 -0
  28. package/dist/chunk-4I5QYGJK-CYJC3pkC.js +260 -0
  29. package/dist/chunk-5FCAYU7R-C3cMIeyz.js +24 -0
  30. package/dist/{chunk-5FQGJX7Z-B9WoXK1R.js → chunk-5FQGJX7Z-BRZ_XYUw.js} +6 -6
  31. package/dist/chunk-5HE753X5-D2jFCVXb.js +34 -0
  32. package/dist/chunk-5JV3BV7I-B7tzprBU.js +50 -0
  33. package/dist/{chunk-DI55MBZ5-D4Y8yV8B.js → chunk-5RXB4S5H-DcCPfb0q.js} +373 -327
  34. package/dist/chunk-5TONJI2A-LRqbgPte.js +59 -0
  35. package/dist/{chunk-FMBD7UC4-quJmebXa.js → chunk-5VM5RSS4-ChXEBudA.js} +1 -1
  36. package/dist/chunk-6Q2QTUOP-zcnb3OaV.js +503 -0
  37. package/dist/{chunk-HN2XXSSU-Bv0QkeMr.js → chunk-7BUUIJ7U-CkIbJNZo.js} +32 -25
  38. package/dist/chunk-7Z6QIM7H-1j-x7ddW.js +606 -0
  39. package/dist/{chunk-FRFDVMJY-BHBqN-vD.js → chunk-BIQX33UG-B-BYk6sM.js} +3 -3
  40. package/dist/chunk-Bfp04NdC.js +25 -0
  41. package/dist/chunk-CQNSW5MT-DBXDKSOU.js +34 -0
  42. package/dist/{chunk-4F5CHEZ2-VlodlEGo.js → chunk-CYSBUYHQ-Cv-vKQV-.js} +1 -1
  43. package/dist/{chunk-SJTYNZTY-DnXoKWpW.js → chunk-EMLP6XTP-DCtMkXLF.js} +1 -1
  44. package/dist/{chunk-B4BG7PRW-B_z2FEHm.js → chunk-GF5L2VYU-esTxzELH.js} +878 -636
  45. package/dist/chunk-I66GZJ75-9xAsFrdW.js +3744 -0
  46. package/dist/chunk-J7OUQ5F2-CbNBTlFM.js +81 -0
  47. package/dist/chunk-JG7HCLWE-CZIm6axg.js +59 -0
  48. package/dist/{flowDiagram-NV44I4VS-BRhSg-ro.js → chunk-JQJVKLGR-ZALkKVji.js} +1019 -1001
  49. package/dist/{chunk-4BX2VUAB-iU5lQTDI.js → chunk-JWPE2WC7-C_Daz-Oc.js} +1 -1
  50. package/dist/{chunk-QN33PNHL-DPBNNzpR.js → chunk-KBJHAD2P-B7m9DztL.js} +3 -2
  51. package/dist/chunk-KEIR6QF5-aP6TmWQ-.js +21095 -0
  52. package/dist/{chunk-UMXZTB3W-D1uHz8MN.js → chunk-MOZMSUNE-BQi-ggQx.js} +7 -4
  53. package/dist/{chunk-S3R3BYOJ-BdgLc8AM.js → chunk-NSK5VX7P-BmmoJBbx.js} +320 -29
  54. package/dist/chunk-OSBZ3O6U-BcrmpSY_.js +22 -0
  55. package/dist/{chunk-TQ3KTPDO-CsDx6v37.js → chunk-QBLGF6JB-BACuPUWb.js} +3 -3
  56. package/dist/chunk-QR6OTTB3-C4L1dLRd.js +3762 -0
  57. package/dist/{chunk-B2363JML-zL3VngtH.js → chunk-R7FJI6CG-BYAXJpIb.js} +3 -3
  58. package/dist/chunk-RYQCIY6F-poA0Ugpr.js +243 -0
  59. package/dist/chunk-U6XO7XAA-I8tCjTeT.js +60 -0
  60. package/dist/chunk-UBXNYLIW-C8LueN5Q.js +34 -0
  61. package/dist/{chunk-ATLVNIR6-qFiszptQ.js → chunk-W5SLKNZC-DK-_KuKT.js} +2 -2
  62. package/dist/{chunk-JA3XYJ7Z-CY4CRbV5.js → chunk-WRU74C26-DLgw-V0j.js} +262 -451
  63. package/dist/chunk-XXDRQBXY-Dzcp3rUR.js +9 -0
  64. package/dist/chunk-Y2CYZVJY-DX3DSigL.js +13 -0
  65. package/dist/{chunk-PL6DKKU2-CAHKc95s.js → chunk-YOTPTUD7-C8qfgaz5.js} +5 -5
  66. package/dist/{chunk-MI3HLSF2-HGWI-8Pg.js → chunk-ZIRB5QZD-_JX1DzEJ.js} +12 -8
  67. package/dist/classDiagram-JCYQIIEL-D8A6ZyXv.js +32 -0
  68. package/dist/classDiagram-v2-OCEON4UE-DIdYl-t3.js +32 -0
  69. package/dist/{click-outside-container-BSIeYt4y.js → click-outside-container-BZNsAj09.js} +2 -2
  70. package/dist/{clike-7lgyEYRk.js → clike-CWndBX_M.js} +1 -1
  71. package/dist/clojure-2X0Rfij9.js +4 -0
  72. package/dist/cmake-DEwzCy9U.js +4 -0
  73. package/dist/cobol-Ck4eCoAB.js +4 -0
  74. package/dist/{code-block-37QAKDTI-MSxEjskJ.js → code-block-37QAKDTI-B4pWe5MI.js} +4 -4
  75. package/dist/coffeescript-bB1IDwhg.js +4 -0
  76. package/dist/{common-BLoQG6ym.js → common-DV4qU2ew.js} +797 -804
  77. package/dist/commonlisp-BDYrVBNC.js +4 -0
  78. package/dist/{compiler-runtime-CEbnTgxf.js → compiler-runtime-DsR6imPN.js} +2 -2
  79. package/dist/{copy-DNq8q3zw.js → copy-C7ZKMKox.js} +5 -5
  80. package/dist/{cose-bilkent-S5V4N54A-BYj0aL7z.js → cose-bilkent-JH36ORCC-D6iQzSi6.js} +6 -5
  81. package/dist/crystal-BSoiVUiH.js +4 -0
  82. package/dist/css-w1h9i21f.js +4 -0
  83. package/dist/cynefin-VYW2F7L2-DnZOHyNF.js +5 -0
  84. package/dist/cynefinDiagram-MW4NZA55-B1GNPS2u.js +367 -0
  85. package/dist/cypher-B4xzuKGP.js +4 -0
  86. package/dist/{cytoscape.esm-Dr8XzXWK.js → cytoscape.esm-BPa26Dup.js} +393 -334
  87. package/dist/d-D50Bz34p.js +4 -0
  88. package/dist/{dagre-By_QsQgc.js → dagre-ThTNj8pe.js} +60 -45
  89. package/dist/dagre-VZM6K2ZE-DEs5dfXA.js +343 -0
  90. package/dist/{data-grid-overlay-editor-BWRG2b_o.js → data-grid-overlay-editor-Ci7TXVf5.js} +5 -5
  91. package/dist/{debounce-BOD3DbfP.js → debounce-D784bpms.js} +2 -2
  92. package/dist/{defaultLocale-BpsHxBd7.js → defaultLocale-CMezyvMc.js} +26 -26
  93. package/dist/diagram-7IWD3JNH-Bdk1_wJO.js +321 -0
  94. package/dist/diagram-B4RE2ZJO-Be9eYLJ0.js +464 -0
  95. package/dist/{diagram-S2PKOQOG-CGh4OMEV.js → diagram-LBJQPF4R-BNSnzxFw.js} +26 -18
  96. package/dist/{diagram-PSM6KHXK-D4ftnaua.js → diagram-Q27KOJAE-NPRzyGtd.js} +68 -63
  97. package/dist/diagram-UB23O5K3-Dogz4itg.js +236 -0
  98. package/dist/diff-BMdzfXq-.js +4 -0
  99. package/dist/{dist-BTdrwBWP.js → dist-72nb8Uag.js} +3 -3
  100. package/dist/{dist-CV79CsQ0.js → dist-9PC5KxMl.js} +2 -2
  101. package/dist/{dist-BOMbzyb3.js → dist-Awj73yUw.js} +3 -3
  102. package/dist/{dist-w_gWE5Wf.js → dist-B0Ctcrt9.js} +1 -1
  103. package/dist/{dist-BO5HRiTf.js → dist-B1Donbpk.js} +2 -2
  104. package/dist/dist-BC6wzWNb.js +5 -0
  105. package/dist/{dist-De-GlSAs.js → dist-BJ2IUa0l.js} +15 -9
  106. package/dist/dist-BMd_RcOy.js +5 -0
  107. package/dist/dist-BZEWjN6r.js +5 -0
  108. package/dist/{dist-BP39XM8u.js → dist-B_K4AAkc.js} +1 -1
  109. package/dist/dist-BeuGjR3n.js +6 -0
  110. package/dist/dist-BfDQCUe6.js +5 -0
  111. package/dist/dist-BhNblTOV.js +8 -0
  112. package/dist/{dist-BPF0gTRZ.js → dist-C0ifRfXi.js} +1 -1
  113. package/dist/{dist-pqIwD8VD.js → dist-C3mEki35.js} +2 -2
  114. package/dist/{dist-LpLXa9Lb.js → dist-CNfV2vDI.js} +2 -2
  115. package/dist/{dist-DviUBLUp.js → dist-COcQ5Vyc.js} +4 -4
  116. package/dist/dist-CRCm4Fuo.js +5 -0
  117. package/dist/{dist-4lVIWUT3.js → dist-CSZpLb9d.js} +1 -1
  118. package/dist/{dist-BIEt-mlF.js → dist-CWswQBvu.js} +1 -1
  119. package/dist/{dist-D3bdsa1d.js → dist-CXYro_Nw.js} +4 -4
  120. package/dist/{dist-CRmSjkLP.js → dist-Ckfsc8C3.js} +2 -2
  121. package/dist/{dist-CSlJrrAw.js → dist-Cyq6Pxtv.js} +1 -1
  122. package/dist/{dist-JGehap7K.js → dist-D-BWPyoX.js} +5 -5
  123. package/dist/{dist-BCX980mU.js → dist-D-YB6j-O.js} +2 -2
  124. package/dist/{dist-DgjbnqTg.js → dist-D1vYHETp.js} +2 -2
  125. package/dist/{dist-BpeiYpG2.js → dist-D9-ePb6D.js} +2 -2
  126. package/dist/dist-DBPEbGkd.js +8 -0
  127. package/dist/{dist-C2_4pjuS.js → dist-DC409ROm.js} +1 -1
  128. package/dist/{dist-BdqCKQ1O.js → dist-DJRUd9aM.js} +2 -2
  129. package/dist/{dist-DaXJPX8F.js → dist-DLvxZEAK.js} +2 -2
  130. package/dist/dist-DSsl8IAI.js +5 -0
  131. package/dist/{dist-3NCqaWjt.js → dist-D_ulymry.js} +2 -2
  132. package/dist/{dist-DZwp8lro.js → dist-DgY27bJ4.js} +3 -3
  133. package/dist/{dist-BwhXBwMd.js → dist-DiwVZiK7.js} +1 -1
  134. package/dist/{dist-DwqBJ014.js → dist-DnYHhW6c.js} +2 -2
  135. package/dist/dist-Dx0kkrek.js +5 -0
  136. package/dist/{dist-DsoKosxi.js → dist-HaLHv0k5.js} +2 -3
  137. package/dist/dist-NKA1TU8a.js +6 -0
  138. package/dist/dist-ZFcsIdHj.js +8 -0
  139. package/dist/{dist-C18MUWTj.js → dist-iZ8-rtUy.js} +2 -2
  140. package/dist/{dist-DIlxLFXG.js → dist-j30bBjjN.js} +15 -15
  141. package/dist/{dist-SXNmlE8A.js → dist-kOCFEa1U.js} +3 -3
  142. package/dist/{dist-CFSb_Frm.js → dist-sxRUVPmt.js} +1 -1
  143. package/dist/dist-uA2RbGmY.js +5 -0
  144. package/dist/{dist-B2jmQKKx.js → dist-xVU82Nq7.js} +2 -2
  145. package/dist/dist-zSCo-xCB.js +8 -0
  146. package/dist/{dockerfile-B82Pkz_V.js → dockerfile-DImRFUlA.js} +1 -1
  147. package/dist/dtd-B9dCT0pu.js +4 -0
  148. package/dist/dylan-DLghDyuR.js +4 -0
  149. package/dist/ebnfDiagram-BXEA7PRR-CqRWkG7L.js +129 -0
  150. package/dist/ecl-w0qdPHDB.js +4 -0
  151. package/dist/eiffel-C5AWRCNP.js +4 -0
  152. package/dist/elm-CT8FZrOm.js +4 -0
  153. package/dist/{erDiagram-Q2GNP2WA-BcKAHFqF.js → erDiagram-JOGREHBK-BZMJX-Au.js} +568 -436
  154. package/dist/erlang-DPD-9M5g.js +4 -0
  155. package/dist/{error-banner-B_GQfxxD.js → error-banner-BwCLtmkH.js} +6 -6
  156. package/dist/{esm-CuQHjs36.js → esm-BJ4n0NUT.js} +1 -1
  157. package/dist/{esm-DKOv6P2M.js → esm-Dusmf6uu.js} +105 -105
  158. package/dist/{esm-DzZVaNH4.js → esm-QLUgkqzZ.js} +6 -6
  159. package/dist/eventmodeling-45OFAUF4-D8Kbnsr6.js +5 -0
  160. package/dist/{extends-w2_S44bV.js → extends-iFBneQO_.js} +9 -9
  161. package/dist/{factor-Bq2mGIHt.js → factor-BonZgUGg.js} +1 -1
  162. package/dist/factor-rFfeJu3r.js +4 -0
  163. package/dist/flowDiagram-UKHOOZJN-DqIE8_b3.js +21 -0
  164. package/dist/{formats-Dwq1THhr.js → formats-HSfYlcA8.js} +7 -7
  165. package/dist/forth-C-3AyQx4.js +4 -0
  166. package/dist/fortran-BSN9TeT7.js +4 -0
  167. package/dist/ganttDiagram-PKOTCBZU-Bc9puoXb.js +2207 -0
  168. package/dist/gas-DwmuvQpB.js +4 -0
  169. package/dist/gherkin-gmCjL-Sn.js +4 -0
  170. package/dist/{gitGraph-G5XIXVHT-BjTx0kww.js → gitGraph-TEB2WS4Q-DVzLmQHc.js} +2 -3
  171. package/dist/gitGraphDiagram-DS77QQ5N-CqKr-Dfg.js +766 -0
  172. package/dist/{glide-data-editor-B9K6-MJe.js → glide-data-editor-BI2i_IEE.js} +18 -18
  173. package/dist/graphlib-DMVIRZap.js +614 -0
  174. package/dist/groovy-DCjvesOy.js +4 -0
  175. package/dist/hasIn-synBnXn4.js +119 -0
  176. package/dist/haskell-C1p0D9L8.js +4 -0
  177. package/dist/haxe-q-fgv0zr.js +5 -0
  178. package/dist/{html-to-image-CZ1kLKkq.js → html-to-image-BOiFHx3u.js} +7535 -3056
  179. package/dist/idl-Bmg4bsnK.js +4 -0
  180. package/dist/{info-VBDWY6EO-CA67FznA.js → info-DKCQHKI2-BxOTqQHM.js} +2 -3
  181. package/dist/infoDiagram-6WML65LV-B869X2KY.js +37 -0
  182. package/dist/{input-C5K4VBvB.js → input-BRE2a7Ay.js} +13 -13
  183. package/dist/{_baseFor-4jw-lnCC.js → isArrayLikeObject-CBUaLibE.js} +96 -29
  184. package/dist/{isEmpty-CJJMn-QP.js → isEmpty-CgME6WRV.js} +15 -15
  185. package/dist/{isSymbol-CoUCgMCM.js → isSymbol-Ch3GYg4S.js} +1 -1
  186. package/dist/ishikawaDiagram-WSZJBQD7-BrOMFBYy.js +731 -0
  187. package/dist/javascript-BY5QZ-eN.js +4 -0
  188. package/dist/{journeyDiagram-XKPGCS4Q-DEal0aT1.js → journeyDiagram-NVQOT4AX-CTwHlsTm.js} +124 -123
  189. package/dist/{jsx-runtime-DebpN0FN.js → jsx-runtime-Dp_oQwaf.js} +1 -1
  190. package/dist/julia-DbR1YalK.js +4 -0
  191. package/dist/{kanban-definition-3W4ZIXB7-Dl90wENN.js → kanban-definition-27J2QSJJ-CKowzO9_.js} +51 -45
  192. package/dist/{katex-C4t-BmrK.js → katex-Ci33kJVq.js} +1 -1
  193. package/dist/{katex-Bld7b-fk.js → katex-Dp22h6yO.js} +2871 -3002
  194. package/dist/{label-DjoYwqmj.js → label-CMh2d8pJ.js} +6 -6
  195. package/dist/{line-C43FIPBd.js → line-Bc27KE1D.js} +3 -3
  196. package/dist/{linear-H_vsH9ao.js → linear-6pDlrp1I.js} +4 -4
  197. package/dist/livescript-BDUooIeL.js +4 -0
  198. package/dist/{loader-DX-IDS7n.js → loader-DTnbNSVZ.js} +11 -11
  199. package/dist/lua-CswAWSkH.js +4 -0
  200. package/dist/main.js +747 -752
  201. package/dist/map-BQ_Xp80D.js +137 -0
  202. package/dist/mathematica-Bw7v11B5.js +4 -0
  203. package/dist/mbox-j35IMz1j.js +4 -0
  204. package/dist/merge-CDbSrd9f.js +69 -0
  205. package/dist/mermaid-4DMBBIKO-BZSpTmcx.js +6 -0
  206. package/dist/mermaid-DpAz2sTy.js +1265 -0
  207. package/dist/mermaid-parser.core-BQzz3_BI.js +87 -0
  208. package/dist/{mhchem-EGhUZR1V.js → mhchem-BDHjke3h.js} +1 -1
  209. package/dist/{micromark-factory-space-CwHmg6iz.js → micromark-factory-space-Cr4NxAt3.js} +1 -1
  210. package/dist/{mindmap-definition-VGOIOE7T-CCDupjWW.js → mindmap-definition-FAOFIHXS-CTsi-HFj.js} +126 -80
  211. package/dist/mirc-Ba_RHVXO.js +4 -0
  212. package/dist/mllike-DbTP2dPp.js +6 -0
  213. package/dist/modelica-lpT3V1X6.js +4 -0
  214. package/dist/mscgen-BN4ZSJMx.js +6 -0
  215. package/dist/mumps-uI5g1A0g.js +4 -0
  216. package/dist/{node-sql-parser-v1Vi-Fft.js → node-sql-parser-BaLGWQe1.js} +1 -1
  217. package/dist/{now-Ch98bJO_.js → now-sFWt-GLC.js} +2 -2
  218. package/dist/{nsis-i9_sgigf.js → nsis-C68fFq_o.js} +1 -1
  219. package/dist/nsis-Df56GiRg.js +4 -0
  220. package/dist/ntriples-B3LWuG7W.js +4 -0
  221. package/dist/{number-overlay-editor-Ck_mc_gT.js → number-overlay-editor-CeBHRJvI.js} +3 -3
  222. package/dist/octave-CovfQgOx.js +4 -0
  223. package/dist/{once-B60G2fuJ.js → once-Boutk_9X.js} +1 -1
  224. package/dist/{ordinal-Bkv2-veX.js → ordinal-Bdajf2BE.js} +1 -1
  225. package/dist/oz-DQQAvVFb.js +4 -0
  226. package/dist/{packet-DYOGHKS2-Bkgofxf3.js → packet-7NZHBO7P-BG8whXXH.js} +2 -3
  227. package/dist/pascal-xz94P9sf.js +4 -0
  228. package/dist/pegDiagram-VL7TDLO6-CNpT8Sqz.js +124 -0
  229. package/dist/perl-aEWKE-1n.js +4 -0
  230. package/dist/pick-CaEWivSF.js +47 -0
  231. package/dist/{pie-VRWISCQL-B1AMhN_7.js → pie-RZYD4A2V-Cc_QhFbT.js} +2 -3
  232. package/dist/pieDiagram-7S7Q4E2Y-Ct8jRpe_.js +219 -0
  233. package/dist/pig-DB6DOZl7.js +4 -0
  234. package/dist/powershell-DM5saUx1.js +4 -0
  235. package/dist/{precisionRound-CnHPY_5v.js → precisionRound-BOoJTbDj.js} +1 -1
  236. package/dist/{process-output-bVfbcx5_.js → process-output-HrsM52f8.js} +7 -7
  237. package/dist/properties-BGjYQuGo.js +4 -0
  238. package/dist/protobuf-BPpEyPud.js +4 -0
  239. package/dist/{pug-BhE2JRSg.js → pug-DFPPZ3LA.js} +1 -1
  240. package/dist/pug-uJzB88ft.js +4 -0
  241. package/dist/puppet-oIm2d_Lg.js +4 -0
  242. package/dist/{purify.es-EnR5yhgI.js → purify.es-DR5PNXwx.js} +160 -155
  243. package/dist/python-WE57eUzD.js +4 -0
  244. package/dist/q-CR8xPodo.js +4 -0
  245. package/dist/{quadrantDiagram-AYHSOK5B-BqDB9tUC.js → quadrantDiagram-CIZ2JOQS-B5n_xFcF.js} +429 -401
  246. package/dist/r-CJdmQZNj.js +4 -0
  247. package/dist/{radar-ZZBFDIW7-C2b7A32s.js → radar-I7S5WNFK-OhUkecXA.js} +2 -3
  248. package/dist/railroad-3IZDKUUU-1CmOpo1B.js +5 -0
  249. package/dist/railroad-abnf-AHOZXSZD-DmH4lsDS.js +5 -0
  250. package/dist/railroad-ebnf-EBAXGLYW-CzK0md4e.js +5 -0
  251. package/dist/railroad-peg-LSFZ7HO6-DOklooKz.js +5 -0
  252. package/dist/railroadDiagram-AXF67PYL-BbUWbtf8.js +100 -0
  253. package/dist/{react-DA-nE2FX.js → react-DhGsCS90.js} +1 -1
  254. package/dist/{react-dom-BTJzcVJ9.js → react-dom-CmENFV8Q.js} +2 -2
  255. package/dist/{react-vega-BazDALhI.js → react-vega-zyfTF9SY.js} +8036 -4796
  256. package/dist/{requirementDiagram-UZGBJVZJ-KbVt8SPH.js → requirementDiagram-LRYGKXZP-CpoDmKSf.js} +137 -105
  257. package/dist/{reveal-component-BejXPHja.js → reveal-component-CYZAzXrV.js} +27 -28
  258. package/dist/rough.esm-lGyFQ0B-.js +1363 -0
  259. package/dist/rpm-Cm5K4RH9.js +5 -0
  260. package/dist/ruby-ArsuTozQ.js +4 -0
  261. package/dist/sankeyDiagram-W5VNT64P-D82rYiAG.js +942 -0
  262. package/dist/sas-DShligrE.js +4 -0
  263. package/dist/scheme-kDLirQL7.js +4 -0
  264. package/dist/sequenceDiagram-SI44F4Z6-DgVKU1s5.js +4281 -0
  265. package/dist/shell-CVQuWP_N.js +4 -0
  266. package/dist/sieve-BW-ePwnq.js +4 -0
  267. package/dist/sizeCapture-X5ZJPWSS-BQgxHTji.js +48 -0
  268. package/dist/smalltalk-DI4aAXxY.js +4 -0
  269. package/dist/sparql-B2sp0oiz.js +4 -0
  270. package/dist/{spec-CQKL_D3i.js → spec-BL1GSUUF.js} +4 -4
  271. package/dist/{src-DV3ha_nA.js → src-BwVZVGyf.js} +13 -22
  272. package/dist/{stateDiagram-FKZM4ZOC-ByOvQf2n.js → stateDiagram-OKZ733FA-Cc9BchXz.js} +61 -58
  273. package/dist/stateDiagram-v2-UEYNNEHI-Dd4Tuw6F.js +32 -0
  274. package/dist/{step-BqHnkgWE.js → step-BqVgkWtk.js} +1 -1
  275. package/dist/stex-D2rme5UG.js +4 -0
  276. package/dist/{strings-DIy9NAmg.js → strings-DMLVGXRo.js} +305 -305
  277. package/dist/style.css +1 -1
  278. package/dist/stylus-xxO-85eO.js +4 -0
  279. package/dist/swift-Ctg533nZ.js +4 -0
  280. package/dist/swimlanes-SLNWSIFB-BHvhO5uv.js +5564 -0
  281. package/dist/swimlanesDiagram-ULZ7WXOC-aI_zgQ8O.js +33 -0
  282. package/dist/{swiper-component-CEdAYjb7.js → swiper-component-Cx0cRWLk.js} +6 -6
  283. package/dist/tcl-phm9c5Nd.js +4 -0
  284. package/dist/textile-CphjAg90.js +4 -0
  285. package/dist/{time-Bb4A7I6a.js → time-DAJu9fnj.js} +4 -4
  286. package/dist/timeline-definition-Z64GVDOM-BAHuDYyA.js +1107 -0
  287. package/dist/{timer-BpI_FKSA.js → timer-aIIabkbI.js} +1 -1
  288. package/dist/{toDate-CqhBWjvO.js → toDate-BGM7kFtQ.js} +6 -6
  289. package/dist/toml-BUuMK772.js +4 -0
  290. package/dist/{tooltip-f-qR0iUx.js → tooltip-BtUxZT5h.js} +7 -7
  291. package/dist/treeView-QDETBFTQ-DsLN_c8p.js +5 -0
  292. package/dist/{treemap-GDKQZRPO-SDux0AV8.js → treemap-6X3UGDF4-K1bi3LJm.js} +2 -3
  293. package/dist/troff-lCtc05A3.js +4 -0
  294. package/dist/ttcn-CcykzBcW.js +4 -0
  295. package/dist/ttcn-cfg-C-XYdqpE.js +4 -0
  296. package/dist/turtle-CpfVZs8G.js +4 -0
  297. package/dist/{types-DicH9Oi0.js → types-DT8UHI5w.js} +1 -1
  298. package/dist/{use-vega-container-remeasure-DGNrIQSk.js → use-vega-container-remeasure-B7OD7yUY.js} +3 -3
  299. package/dist/{useAsyncData-CYOQb1EW.js → useAsyncData-CDcbh-Qv.js} +5 -5
  300. package/dist/{useDateFormatter-Bt2qr_XS.js → useDateFormatter-B_vTzxpm.js} +4 -4
  301. package/dist/{useDeepCompareMemoize-CSHQeQEI.js → useDeepCompareMemoize-Bj6QvwiG.js} +3 -3
  302. package/dist/{useIframeCapabilities-kA09ykNq.js → useIframeCapabilities-CxuXXwjj.js} +4 -4
  303. package/dist/{useLifecycle-CMJGqBaY.js → useLifecycle-Bw4wRj_O.js} +7 -7
  304. package/dist/{useTheme-DYfby65G.js → useTheme-BzEXeAR5.js} +8 -7
  305. package/dist/vb-VOIzXwm9.js +4 -0
  306. package/dist/vbscript-D0WfcnVk.js +4 -0
  307. package/dist/{vega-component-C7nO5zcf.js → vega-component-CJug-VdR.js} +24 -24
  308. package/dist/{vega-embed-container-DAQAMjiO.js → vega-embed-container-BRjjqRGz.js} +9 -9
  309. package/dist/{vega-loader.browser-DmpxCJqx.js → vega-loader.browser-CGb-2Kwi.js} +106 -113
  310. package/dist/velocity-CCrc5n-0.js +4 -0
  311. package/dist/vennDiagram-T6HMQDX7-CTyzMewS.js +1913 -0
  312. package/dist/verilog-BLFhaDBH.js +4 -0
  313. package/dist/vhdl-DjuqPE9b.js +4 -0
  314. package/dist/wardley-OPB4EBWU-CP99MvU1.js +5 -0
  315. package/dist/wardleyDiagram-T6FBY63Y-vcno_rbk.js +669 -0
  316. package/dist/webidl-Cc7RrfeK.js +4 -0
  317. package/dist/xquery-BiCRLnNG.js +4 -0
  318. package/dist/{xychartDiagram-PRI3JC2R-BSkNxYNw.js → xychartDiagram-ELKLHX3M-DyFDERhM.js} +417 -353
  319. package/dist/yacas-CWcjav-O.js +4 -0
  320. package/dist/z80-DpYS2lE7.js +4 -0
  321. package/dist/{zod-BUcyXSdR.js → zod-BFY2SnzC.js} +42 -43
  322. package/package.json +7 -7
  323. package/src/__mocks__/requests.ts +5 -0
  324. package/src/components/ai/ai-model-dropdown.tsx +2 -2
  325. package/src/components/app-config/user-config-form.tsx +26 -0
  326. package/src/components/chat/__tests__/capabilities-popover.test.tsx +38 -0
  327. package/src/components/chat/__tests__/chat-abort.test.ts +51 -0
  328. package/src/components/chat/__tests__/use-chat-controller-id.test.tsx +39 -0
  329. package/src/components/chat/capabilities-popover.tsx +68 -0
  330. package/src/components/chat/chat-abort.ts +44 -0
  331. package/src/components/chat/chat-display.tsx +17 -0
  332. package/src/components/chat/chat-panel.tsx +107 -50
  333. package/src/components/chat/chat-utils.ts +1 -1
  334. package/src/components/chat/use-chat-controller-id.ts +24 -0
  335. package/src/components/data-table/charts/__tests__/schemas.test.ts +35 -0
  336. package/src/components/data-table/charts/schemas.ts +5 -2
  337. package/src/components/databases/icons/huggingface.svg +8 -0
  338. package/src/components/datasets/__tests__/icons.test.ts +21 -0
  339. package/src/components/datasets/icons.tsx +10 -0
  340. package/src/components/datasources/__tests__/components.test.tsx +29 -0
  341. package/src/components/datasources/components.tsx +8 -3
  342. package/src/components/editor/actions/export-dialog/__tests__/export-dialog.test.tsx +35 -0
  343. package/src/components/editor/actions/export-dialog/__tests__/state.test.ts +61 -0
  344. package/src/components/editor/actions/export-dialog/export-command.ts +4 -9
  345. package/src/components/editor/actions/export-dialog/format-notice.tsx +28 -0
  346. package/src/components/editor/actions/export-dialog/state.ts +23 -5
  347. package/src/components/editor/actions/export-dialog/use-export-dialog.ts +3 -13
  348. package/src/components/editor/actions/useConfigActions.tsx +24 -0
  349. package/src/components/editor/ai/add-cell-with-ai.tsx +2 -2
  350. package/src/components/editor/ai/ai-completion-editor.tsx +2 -2
  351. package/src/components/editor/chrome/panels/outline/__tests__/useActiveOutline.test.ts +26 -0
  352. package/src/components/editor/chrome/wrapper/useOpenAiAssistant.ts +2 -2
  353. package/src/components/editor/code/__tests__/readonly-python-code.test.tsx +114 -2
  354. package/src/components/editor/connections/storage/__tests__/__snapshots__/as-code.test.ts.snap +14 -0
  355. package/src/components/editor/connections/storage/__tests__/as-code.test.ts +20 -0
  356. package/src/components/editor/connections/storage/add-storage-form.tsx +10 -0
  357. package/src/components/editor/connections/storage/as-code.ts +19 -1
  358. package/src/components/editor/connections/storage/schemas.ts +19 -0
  359. package/src/components/storage/__tests__/storage-snippets.test.ts +88 -0
  360. package/src/components/storage/components.tsx +2 -0
  361. package/src/components/storage/storage-snippets.ts +58 -0
  362. package/src/core/__tests__/mode.test.ts +85 -0
  363. package/src/core/ai/__tests__/config.test.tsx +96 -0
  364. package/src/core/ai/config.ts +16 -22
  365. package/src/core/ai/constants.ts +7 -0
  366. package/src/core/ai/staged-cells.ts +3 -0
  367. package/src/core/ai/state.ts +10 -0
  368. package/src/core/codemirror/__tests__/setup.test.ts +1 -1
  369. package/src/core/codemirror/cm.ts +2 -2
  370. package/src/core/codemirror/code-lens/__tests__/extension.test.ts +85 -6
  371. package/src/core/codemirror/code-lens/extension.ts +144 -47
  372. package/src/core/codemirror/find-replace/search-highlight.ts +8 -3
  373. package/src/core/codemirror/language/languages/sql/__tests__/renderers.test.tsx +44 -0
  374. package/src/core/codemirror/language/languages/sql/renderers.tsx +3 -3
  375. package/src/core/codemirror/theme/__tests__/light.test.ts +59 -123
  376. package/src/core/codemirror/theme/dark.ts +6 -5
  377. package/src/core/codemirror/theme/light.ts +6 -4
  378. package/src/core/config/__tests__/config-schema.test.ts +2 -0
  379. package/src/core/config/config-schema.ts +1 -0
  380. package/src/core/config/feature-flag.tsx +0 -2
  381. package/src/core/dom/outline.ts +25 -2
  382. package/src/core/hotkeys/hotkeys.ts +2 -0
  383. package/src/core/mode.ts +11 -9
  384. package/src/core/network/__tests__/api.test.ts +132 -17
  385. package/src/core/network/__tests__/export-filename.test.ts +43 -0
  386. package/src/core/network/__tests__/requests-lazy.test.ts +1 -0
  387. package/src/core/network/api.ts +47 -12
  388. package/src/core/network/export-filename.ts +37 -0
  389. package/src/core/network/markdown-export.ts +19 -0
  390. package/src/core/network/requests-network.ts +29 -5
  391. package/src/core/network/types.ts +4 -0
  392. package/src/core/storage/types.ts +1 -0
  393. package/src/css/app/codemirror.css +11 -7
  394. package/src/css/globals.css +8 -0
  395. package/src/plugins/impl/DataEditorPlugin.tsx +2 -9
  396. package/src/plugins/impl/__tests__/DataEditorPlugin.test.ts +18 -0
  397. package/src/plugins/impl/chat/chat-ui.tsx +51 -3
  398. package/src/plugins/impl/data-frames/__tests__/schema.test.ts +30 -0
  399. package/src/plugins/impl/data-frames/schema.ts +4 -1
  400. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +20 -1
  401. package/src/plugins/impl/image-comparison/__tests__/ImageComparisonComponent.test.tsx +58 -0
  402. package/src/stories/theme.stories.tsx +71 -1
  403. package/dist/_baseUniq-B_2Hw7zG.js +0 -380
  404. package/dist/apl-e1B5LPEL.js +0 -4
  405. package/dist/architecture-7HQA4BMR-DHUrQjL4.js +0 -6
  406. package/dist/asciiarmor-B-gwgesP.js +0 -4
  407. package/dist/asn1-DF2ckRB4.js +0 -4
  408. package/dist/assets/__vite-browser-external-DltVXDv7.js +0 -1
  409. package/dist/blockDiagram-VD42YOAC-CIOjvxeD.js +0 -3131
  410. package/dist/brainfuck-4G-7_gq_.js +0 -4
  411. package/dist/chat-ui-DsZJj75A.js +0 -8369
  412. package/dist/chunk-55IACEB6-7h71GwyW.js +0 -8
  413. package/dist/chunk-ABZYJK2D-BxBDji1u.js +0 -2438
  414. package/dist/chunk-BNovOVIE.js +0 -28
  415. package/dist/chunk-CVBHYZKI-CwazXVlJ.js +0 -13
  416. package/dist/chunk-DR5Q36YT-5Yp2GWwR.js +0 -137
  417. package/dist/chunk-EXTU4WIE-BQPBhApE.js +0 -10
  418. package/dist/chunk-JZLCHNYA-DWIR9m5O.js +0 -4901
  419. package/dist/chunk-N4CR4FBY-Bw2HcMNc.js +0 -65
  420. package/dist/chunk-QXUST7PY-DtC2t9Mk.js +0 -498
  421. package/dist/chunk-TCCFYFTB-DPWJa9zL.js +0 -13948
  422. package/dist/chunk-TZMSLE5B-BzSHcq-K.js +0 -63
  423. package/dist/classDiagram-2ON5EDUG-BiQPjMNY.js +0 -30
  424. package/dist/classDiagram-v2-WZHVMYZB-YHdR8fqM.js +0 -30
  425. package/dist/clojure-CUybM11R.js +0 -4
  426. package/dist/clone-Q4Fqwn6q.js +0 -9
  427. package/dist/cmake-BPjGcuDL.js +0 -4
  428. package/dist/cobol-BETk_nb6.js +0 -4
  429. package/dist/coffeescript-CManZxXL.js +0 -4
  430. package/dist/commonlisp-DWkn7GW8.js +0 -4
  431. package/dist/crystal-CCbg5EUH.js +0 -4
  432. package/dist/css-By8eo-XS.js +0 -4
  433. package/dist/cypher-DwfHg3nP.js +0 -4
  434. package/dist/d-Brs1wNbw.js +0 -4
  435. package/dist/dagre-6UL2VRFP-DpYjBqQs.js +0 -296
  436. package/dist/diagram-QEK2KX5R-DVlUOgs1.js +0 -228
  437. package/dist/diff-DJIRmJ1g.js +0 -4
  438. package/dist/dist-5o9uz19x.js +0 -5
  439. package/dist/dist-BpDH0DEP.js +0 -5
  440. package/dist/dist-BpXhbQXO.js +0 -8
  441. package/dist/dist-ByadAk_L.js +0 -5
  442. package/dist/dist-CK0g7JvP.js +0 -8
  443. package/dist/dist-CfzCtiq2.js +0 -5
  444. package/dist/dist-D8JtVFrW.js +0 -8
  445. package/dist/dist-DK2Oocpu.js +0 -6
  446. package/dist/dist-DnSu977r.js +0 -5
  447. package/dist/dist-UmxJm6sW.js +0 -8
  448. package/dist/dist-aYSBQSyM.js +0 -5
  449. package/dist/dist-kkZ1Ztlh.js +0 -6
  450. package/dist/dist-ngPczwNi.js +0 -5
  451. package/dist/dist-wQRyxyTV.js +0 -5
  452. package/dist/dtd-Dyiazv4N.js +0 -4
  453. package/dist/dylan-D8Fcw7NA.js +0 -4
  454. package/dist/ecl-CjKp8Vii.js +0 -4
  455. package/dist/eiffel-K9ViOX5r.js +0 -4
  456. package/dist/elm-B5NVtRco.js +0 -4
  457. package/dist/erlang-BnLzgk7R.js +0 -4
  458. package/dist/factor-C7f9Jz5R.js +0 -4
  459. package/dist/flatten-Bbw7g6-K.js +0 -8
  460. package/dist/forth-rGM8jLao.js +0 -4
  461. package/dist/fortran-B3acSe0i.js +0 -4
  462. package/dist/ganttDiagram-JELNMOA3-CXXCN7LN.js +0 -2170
  463. package/dist/gas-Bb1Vmv_N.js +0 -4
  464. package/dist/gherkin-C9Lyidgd.js +0 -4
  465. package/dist/gitGraphDiagram-V2S2FVAM-BOlkMSqK.js +0 -652
  466. package/dist/graphlib-Ns7y5crs.js +0 -359
  467. package/dist/groovy-DQk6XcGH.js +0 -4
  468. package/dist/hasIn-Deg7jl_j.js +0 -108
  469. package/dist/haskell-mV0Vw9gv.js +0 -4
  470. package/dist/haxe-DqxN89zH.js +0 -5
  471. package/dist/idl-ya8W561J.js +0 -4
  472. package/dist/infoDiagram-HS3SLOUP-D3TyKnL_.js +0 -30
  473. package/dist/javascript-CgqgptVu.js +0 -4
  474. package/dist/julia-CFQ-HusI.js +0 -4
  475. package/dist/livescript-D__3TmDo.js +0 -4
  476. package/dist/lua-Bytcgj_W.js +0 -4
  477. package/dist/main-B1Jo_8pC.js +0 -4321
  478. package/dist/mathematica-DJhvVKvl.js +0 -4
  479. package/dist/mbox-IGHPCjfR.js +0 -4
  480. package/dist/memoize-BOtf2yFf.js +0 -17
  481. package/dist/merge-Be1CqGnU.js +0 -222
  482. package/dist/mermaid-4DMBBIKO-FXbOziy9.js +0 -6
  483. package/dist/mermaid-hv6IckVw.js +0 -1100
  484. package/dist/mermaid-parser.core-DoivvxPd.js +0 -54
  485. package/dist/min-Dtgc8txR.js +0 -38
  486. package/dist/mirc-tcwvVugm.js +0 -4
  487. package/dist/mllike-Dx91i62r.js +0 -6
  488. package/dist/modelica-_SRt-yU5.js +0 -4
  489. package/dist/mscgen-GZrGS9gt.js +0 -6
  490. package/dist/mumps-Cv3ygyod.js +0 -4
  491. package/dist/nsis-BU7GeGbI.js +0 -4
  492. package/dist/ntriples-CL-FCYXb.js +0 -4
  493. package/dist/octave-Dc6_3DIu.js +0 -4
  494. package/dist/oz-DpUAJCXf.js +0 -4
  495. package/dist/pascal-B17mncXs.js +0 -4
  496. package/dist/perl-BTpK97q9.js +0 -4
  497. package/dist/pick-D1Qo8s2C.js +0 -43
  498. package/dist/pieDiagram-ADFJNKIX-JvXG_6hk.js +0 -170
  499. package/dist/pig-CFb638Ap.js +0 -4
  500. package/dist/powershell-Cxo-_2A5.js +0 -4
  501. package/dist/properties-BPgT1xTB.js +0 -4
  502. package/dist/protobuf-BgHBaIIK.js +0 -4
  503. package/dist/pug-25-oS0SG.js +0 -4
  504. package/dist/puppet-DarIr20S.js +0 -4
  505. package/dist/python-BqmOsBsi.js +0 -4
  506. package/dist/q-D3QJCTup.js +0 -4
  507. package/dist/r-Cz_yBX4z.js +0 -4
  508. package/dist/rpm-DGOtYwAI.js +0 -5
  509. package/dist/ruby-DBZu4rPc.js +0 -4
  510. package/dist/sankeyDiagram-TZEHDZUN-DgkF38jx.js +0 -892
  511. package/dist/sas-Dd1D9qTq.js +0 -4
  512. package/dist/scheme-BmDjvTHX.js +0 -4
  513. package/dist/sequenceDiagram-WL72ISMW-BDmx9n95.js +0 -3652
  514. package/dist/shell-BL8zFSaj.js +0 -4
  515. package/dist/sieve-BAx2WqUP.js +0 -4
  516. package/dist/smalltalk-CYRzF7VV.js +0 -4
  517. package/dist/sparql-YWaDRO4A.js +0 -4
  518. package/dist/stateDiagram-v2-4FDKWEC3-C3xqeavR.js +0 -29
  519. package/dist/stex-B5O-env2.js +0 -4
  520. package/dist/stylus-lYsyLFc1.js +0 -4
  521. package/dist/swift-ClQz9z1n.js +0 -4
  522. package/dist/tcl-B3jhsfqY.js +0 -4
  523. package/dist/textile-Cb1Dw7Aq.js +0 -4
  524. package/dist/timeline-definition-IT6M3QCI-CkD_trIn.js +0 -856
  525. package/dist/toml-nHZhetdO.js +0 -4
  526. package/dist/troff-DuJAGWKH.js +0 -4
  527. package/dist/ttcn-BxrcwP21.js +0 -4
  528. package/dist/ttcn-cfg-BAg_9dcc.js +0 -4
  529. package/dist/turtle-zCq949as.js +0 -4
  530. package/dist/vb-De5hElus.js +0 -4
  531. package/dist/vbscript-Cypcpv4F.js +0 -4
  532. package/dist/velocity-Di7l-yhe.js +0 -4
  533. package/dist/verilog-Bzi-S3g2.js +0 -4
  534. package/dist/vhdl-B0ZZITaW.js +0 -4
  535. package/dist/webidl-0sviiRcN.js +0 -4
  536. package/dist/xquery-B4qMVWaB.js +0 -4
  537. package/dist/yacas-Jt25Fuv8.js +0 -4
  538. package/dist/z80-CrcbYzmp.js +0 -4
  539. /package/dist/{apl-99A7dLQe.js → apl-CMUKiT2b.js} +0 -0
  540. /package/dist/{array-O78LT16Y.js → array-CEIRxyh3.js} +0 -0
  541. /package/dist/{asciiarmor-DLEhpFDx.js → asciiarmor-C_r6K6db.js} +0 -0
  542. /package/dist/{asn1-CMrcTsT4.js → asn1-DnlnCQTu.js} +0 -0
  543. /package/dist/{asterisk-CqykImq7.js → asterisk-DaVJJDnV.js} +0 -0
  544. /package/dist/{brainfuck-ChPt5yBe.js → brainfuck-CtQoQVkV.js} +0 -0
  545. /package/dist/{clike-CE0fXfM_.js → clike-CIAs0ABt.js} +0 -0
  546. /package/dist/{clojure-QkBEMU-g.js → clojure-C6tKQYjD.js} +0 -0
  547. /package/dist/{cmake-CU1jX7Mo.js → cmake-D-nfcg14.js} +0 -0
  548. /package/dist/{cobol-DMOKzzky.js → cobol-DYTC58p9.js} +0 -0
  549. /package/dist/{coffeescript-DjnjLyfk.js → coffeescript-DctDWA58.js} +0 -0
  550. /package/dist/{colors-DmiH1bIH.js → colors-DR_aHfmQ.js} +0 -0
  551. /package/dist/{common-keywords-D3nPJNQP.js → common-keywords-FBrXPTcz.js} +0 -0
  552. /package/dist/{commonlisp-CYd9iOSe.js → commonlisp-BmvTqU5y.js} +0 -0
  553. /package/dist/{crystal-Dy55yoYG.js → crystal-BPIK2UMa.js} +0 -0
  554. /package/dist/{css-CNU8w3HJ.js → css-CDo_Lwzn.js} +0 -0
  555. /package/dist/{cypher-q47DGzK7.js → cypher-KztbD63v.js} +0 -0
  556. /package/dist/{d-jEkaLvxX.js → d-HXBWOoe9.js} +0 -0
  557. /package/dist/{defaultLocale-DoeErsX2.js → defaultLocale-DMZFeDB8.js} +0 -0
  558. /package/dist/{diff-vb2-unFN.js → diff-B9rWZH0m.js} +0 -0
  559. /package/dist/{dtd-C9kR-bXa.js → dtd-LtAMP5y8.js} +0 -0
  560. /package/dist/{duckdb-keywords-B6HYCMOT.js → duckdb-keywords-CvJhR_Yd.js} +0 -0
  561. /package/dist/{dylan-BLckrK-V.js → dylan-DXMK92pf.js} +0 -0
  562. /package/dist/{ebnf-Cnp3L9jg.js → ebnf-2D4Ctp3y.js} +0 -0
  563. /package/dist/{ecl-CEsf6XVg.js → ecl-Dqq8ser2.js} +0 -0
  564. /package/dist/{eiffel-2KGZNzx6.js → eiffel-ChExWBDx.js} +0 -0
  565. /package/dist/{elm-D2s3K5wF.js → elm-BMBz2xbZ.js} +0 -0
  566. /package/dist/{emotion-is-prop-valid.esm-DdVSF4FD.js → emotion-is-prop-valid.esm-_z-EwK5u.js} +0 -0
  567. /package/dist/{erlang-0PMFOndk.js → erlang-CGSDzg9P.js} +0 -0
  568. /package/dist/{fcl-D9nccAWI.js → fcl-Ccj8Z5Xd.js} +0 -0
  569. /package/dist/{forth-DG89iUsu.js → forth-vTkfR0aY.js} +0 -0
  570. /package/dist/{fortran-ytKsAVvu.js → fortran-CF4LAVFn.js} +0 -0
  571. /package/dist/{gas-Cg2Fm0N2.js → gas-mMFbQ2x4.js} +0 -0
  572. /package/dist/{gherkin-B87FEnZ-.js → gherkin-DLS1q0XM.js} +0 -0
  573. /package/dist/{groovy-Dcs08AWD.js → groovy-Zt6CNPxV.js} +0 -0
  574. /package/dist/{haskell-cwkOuhx6.js → haskell-kVOgzpVy.js} +0 -0
  575. /package/dist/{haxe-DWEo4q10.js → haxe-Bo21F6gc.js} +0 -0
  576. /package/dist/{http-B8jdG64J.js → http-_DVAYWoR.js} +0 -0
  577. /package/dist/{idl-WWQwDcRV.js → idl-B865GSM-.js} +0 -0
  578. /package/dist/{init-DNBbYZd_.js → init-TaqZJsBY.js} +0 -0
  579. /package/dist/{invariant-wRzNXIsJ.js → invariant-hOqqBz8A.js} +0 -0
  580. /package/dist/{javascript-BeR74dxD.js → javascript-CSLuHpxZ.js} +0 -0
  581. /package/dist/{julia-UlvCUYGL.js → julia-BCOLeQif.js} +0 -0
  582. /package/dist/{livescript-GPmFcmYV.js → livescript-DqUzLZFs.js} +0 -0
  583. /package/dist/{lua-DYoT_0zM.js → lua-D0ciLwkO.js} +0 -0
  584. /package/dist/{math-CBNc2Ib0.js → math-CTnb-N1W.js} +0 -0
  585. /package/dist/{mathematica-DSFIQlbG.js → mathematica-DujD1RDf.js} +0 -0
  586. /package/dist/{mbox-ej8lFMdL.js → mbox-8OkSQMDn.js} +0 -0
  587. /package/dist/{mirc-CAdIdvHQ.js → mirc-D47x8yRQ.js} +0 -0
  588. /package/dist/{mllike-CjTB1lHF.js → mllike-Dcfw-g6D.js} +0 -0
  589. /package/dist/{modelica-BB68FYMa.js → modelica-BHtr9gKR.js} +0 -0
  590. /package/dist/{mscgen-BkbzgGGI.js → mscgen-uZedQc_A.js} +0 -0
  591. /package/dist/{mumps-Cu-28E9F.js → mumps-Bc9QS1-K.js} +0 -0
  592. /package/dist/{nginx-C1ofKPst.js → nginx-DasThI7R.js} +0 -0
  593. /package/dist/{ntriples-D9cQiZxZ.js → ntriples-Clpn9Mrg.js} +0 -0
  594. /package/dist/{objects-De59twF-.js → objects-UzwQd5gx.js} +0 -0
  595. /package/dist/{octave-BvtAnPX0.js → octave-DA2esRWi.js} +0 -0
  596. /package/dist/{oz-COaVHk2E.js → oz-D8i-brWx.js} +0 -0
  597. /package/dist/{pascal-BFpqVD2x.js → pascal-Dt1a0CeN.js} +0 -0
  598. /package/dist/{path-DwWbhZFI.js → path-7gr7eZmp.js} +0 -0
  599. /package/dist/{perl-DaiORxHP.js → perl-CXy9EfRp.js} +0 -0
  600. /package/dist/{pig-DFzRhmsF.js → pig-DnXnrjQg.js} +0 -0
  601. /package/dist/{powershell-BG2LQNKN.js → powershell-BYE6u-Qk.js} +0 -0
  602. /package/dist/{properties-CqJJR5QY.js → properties-DlhyusaK.js} +0 -0
  603. /package/dist/{protobuf-WwDYV1yY.js → protobuf-DoMSrsPi.js} +0 -0
  604. /package/dist/{puppet-QNY3w_uN.js → puppet-DGi4idFA.js} +0 -0
  605. /package/dist/{python-4QrQ3Ugi.js → python-CYhALYh0.js} +0 -0
  606. /package/dist/{q-DhwXuxE2.js → q-Cs_qWJkU.js} +0 -0
  607. /package/dist/{r-Df-nkR25.js → r-DWJSQl1c.js} +0 -0
  608. /package/dist/{range-BOiA8qqU.js → range-Bieq5MNc.js} +0 -0
  609. /package/dist/{rpm-Cokue07s.js → rpm-DIip1m0n.js} +0 -0
  610. /package/dist/{ruby-DrYcL3qF.js → ruby-NgZGoa7Q.js} +0 -0
  611. /package/dist/{sas-CoiPirA5.js → sas-DEKzCzM2.js} +0 -0
  612. /package/dist/{scheme-CwFLjzHv.js → scheme-CBrGar2n.js} +0 -0
  613. /package/dist/{semaphore-C8rmHdhj.js → semaphore-P832H4YT.js} +0 -0
  614. /package/dist/{shell-BFV-R24I.js → shell-D7XFPOM_.js} +0 -0
  615. /package/dist/{sieve-CxwXF5T9.js → sieve-BOxOVQ18.js} +0 -0
  616. /package/dist/{simple-mode-DTaJtKPt.js → simple-mode-D-FXBgPn.js} +0 -0
  617. /package/dist/{smalltalk-QivVOCtX.js → smalltalk-DYK-HkUK.js} +0 -0
  618. /package/dist/{solr-BLvysN-c.js → solr-RZ9uTl59.js} +0 -0
  619. /package/dist/{sparql-nKsFk8j7.js → sparql-CU1uk9Py.js} +0 -0
  620. /package/dist/{spreadsheet-BWc8C2FT.js → spreadsheet-BNNUNXA2.js} +0 -0
  621. /package/dist/{sql-CWfUjlV1.js → sql-B4x8IkwU.js} +0 -0
  622. /package/dist/{stex-DtMAhV4-.js → stex-DIvyJfNO.js} +0 -0
  623. /package/dist/{stylus-BLKQAycn.js → stylus-BokZhKWB.js} +0 -0
  624. /package/dist/{swift-CJoKqiKj.js → swift-TlA42tbT.js} +0 -0
  625. /package/dist/{tcl-YTeYFNUc.js → tcl-C-m7N_9k.js} +0 -0
  626. /package/dist/{textile-C6rKQqMQ.js → textile-BWOWG894.js} +0 -0
  627. /package/dist/{tiddlywiki-ZXwTHGNT.js → tiddlywiki-DI0mF2WJ.js} +0 -0
  628. /package/dist/{tiki-C628O_u4.js → tiki-2HU6XLLn.js} +0 -0
  629. /package/dist/{toml-DxlPGbRy.js → toml-GapOS-6U.js} +0 -0
  630. /package/dist/{treemap-DY3NBr79.js → treemap-CQJ0bIDy.js} +0 -0
  631. /package/dist/{troff-DFCfH7Ku.js → troff-ChPXSGgg.js} +0 -0
  632. /package/dist/{ttcn-DAW-ERVP.js → ttcn-CGf_ktUb.js} +0 -0
  633. /package/dist/{ttcn-cfg-CpJ8b7EN.js → ttcn-cfg-E0kw_vEm.js} +0 -0
  634. /package/dist/{turtle-BneV2f8L.js → turtle-DDIYttZr.js} +0 -0
  635. /package/dist/{vb-D973Vxxh.js → vb-DsGz8YA-.js} +0 -0
  636. /package/dist/{vbscript-Dckaq3YO.js → vbscript-BfQcpKZn.js} +0 -0
  637. /package/dist/{velocity-DKty-GUC.js → velocity-BMi53hPb.js} +0 -0
  638. /package/dist/{verilog-aNaK_biA.js → verilog-B_WDxmCB.js} +0 -0
  639. /package/dist/{vhdl-CQuehnQy.js → vhdl-C52-TT0z.js} +0 -0
  640. /package/dist/{webidl-Bhg8vaMr.js → webidl-Cnphjlul.js} +0 -0
  641. /package/dist/{xquery-D2q16GaM.js → xquery-X_kWyOft.js} +0 -0
  642. /package/dist/{yacas-DHGOHnNa.js → yacas-Dpp9zAZ5.js} +0 -0
  643. /package/dist/{z80-BPhTmO22.js → z80-BZLZAthF.js} +0 -0
@@ -29,12 +29,108 @@ import { mountLensPopover } from "./popover";
29
29
  // Delay (in ms) before showing the hover popover, matching the app's
30
30
  // tooltip delay
31
31
  export const CODE_LENS_HOVER_DELAY_MS = 400;
32
+ // Grace period (in ms) after the pointer leaves the icon (or the popover)
33
+ // before hiding, so the pointer can travel from the icon into the popover
34
+ // without it closing underneath
35
+ export const CODE_LENS_HOVER_GRACE_MS = 200;
32
36
 
33
37
  const setCodeLenses = StateEffect.define<CodeLensSpec[]>();
34
38
  const setHoveredLens = StateEffect.define<CodeLensSpec | null>();
35
39
 
36
- // Pending hover timers, keyed by widget element so `destroy` can cancel them
37
- const HOVER_TIMERS = new WeakMap<HTMLElement, number>();
40
+ function specEquals(a: CodeLensSpec, b: CodeLensSpec): boolean {
41
+ return (
42
+ a.pos === b.pos &&
43
+ a.kind === b.kind &&
44
+ a.name === b.name &&
45
+ a.cache?.boundName === b.cache?.boundName &&
46
+ a.cache?.cacheName === b.cache?.cacheName
47
+ );
48
+ }
49
+
50
+ /**
51
+ * Per-view hover state shared by the lens icons and their popover, so the
52
+ * popover stays open while the pointer is over either of them.
53
+ */
54
+ class LensHoverController {
55
+ private readonly view: EditorView;
56
+ private showTimer: number | undefined;
57
+ private hideTimer: number | undefined;
58
+
59
+ constructor(view: EditorView) {
60
+ this.view = view;
61
+ }
62
+
63
+ /** Pointer entered a lens icon */
64
+ enterLens(spec: CodeLensSpec, icon: HTMLElement): void {
65
+ this.clearTimers();
66
+ dismissEditorHoverTooltips(this.view, icon);
67
+ const hovered = this.view.state.field(codeLensHoverField, false);
68
+ if (hovered && specEquals(hovered.spec, spec)) {
69
+ // Already showing this lens (e.g. pointer came back from the popover)
70
+ return;
71
+ }
72
+ this.showTimer = window.setTimeout(() => {
73
+ this.showTimer = undefined;
74
+ this.view.dispatch({ effects: setHoveredLens.of(spec) });
75
+ }, CODE_LENS_HOVER_DELAY_MS);
76
+ }
77
+
78
+ /** Pointer left a lens icon or the popover */
79
+ leave(): void {
80
+ this.clearTimers();
81
+ this.hideTimer = window.setTimeout(() => {
82
+ this.hideTimer = undefined;
83
+ this.hide();
84
+ }, CODE_LENS_HOVER_GRACE_MS);
85
+ }
86
+
87
+ /** Pointer entered the popover */
88
+ enterPopover(): void {
89
+ window.clearTimeout(this.hideTimer);
90
+ this.hideTimer = undefined;
91
+ }
92
+
93
+ hide(): void {
94
+ this.clearTimers();
95
+ if (this.view.state.field(codeLensHoverField, false)) {
96
+ this.view.dispatch({ effects: setHoveredLens.of(null) });
97
+ }
98
+ }
99
+
100
+ destroy(): void {
101
+ this.clearTimers();
102
+ }
103
+
104
+ private clearTimers(): void {
105
+ window.clearTimeout(this.showTimer);
106
+ window.clearTimeout(this.hideTimer);
107
+ this.showTimer = undefined;
108
+ this.hideTimer = undefined;
109
+ }
110
+ }
111
+
112
+ const lensHoverPlugin = ViewPlugin.define(
113
+ (view) => new LensHoverController(view),
114
+ );
115
+
116
+ /**
117
+ * Keeps the editor's own hover tooltips (LSP / documentation hints) from
118
+ * showing for the token the icon sits after.
119
+ *
120
+ * CodeMirror's `hoverTooltip` tracks the last `mousemove` seen on `view.dom`
121
+ * and, once the pointer has rested for its hover delay, opens a tooltip for
122
+ * that position. The icon swallows `mousemove` (see the widget), so a pointer
123
+ * resting on the icon looks to CodeMirror like a pointer resting on the last
124
+ * character it crossed on the way in, and any hover already open for that
125
+ * token never gets closed. A `mouseleave` on `view.dom` is the signal it uses
126
+ * to cancel a pending hover and close an open one, so synthesize that.
127
+ */
128
+ function dismissEditorHoverTooltips(
129
+ view: EditorView,
130
+ relatedTarget: HTMLElement,
131
+ ): void {
132
+ view.dom.dispatchEvent(new MouseEvent("mouseleave", { relatedTarget }));
133
+ }
38
134
 
39
135
  class CodeLensWidget extends WidgetType {
40
136
  private readonly spec: CodeLensSpec;
@@ -45,15 +141,9 @@ class CodeLensWidget extends WidgetType {
45
141
  }
46
142
 
47
143
  override eq(other: CodeLensWidget): boolean {
48
- return (
49
- // `pos` is captured by the DOM hover/click handlers, so a reused widget
50
- // whose anchor moved must not be treated as equal
51
- this.spec.pos === other.spec.pos &&
52
- this.spec.kind === other.spec.kind &&
53
- this.spec.name === other.spec.name &&
54
- this.spec.cache?.boundName === other.spec.cache?.boundName &&
55
- this.spec.cache?.cacheName === other.spec.cache?.cacheName
56
- );
144
+ // `pos` is captured by the DOM hover/click handlers, so a reused widget
145
+ // whose anchor moved must not be treated as equal
146
+ return specEquals(this.spec, other.spec);
57
147
  }
58
148
 
59
149
  override toDOM(view: EditorView): HTMLElement {
@@ -67,23 +157,13 @@ class CodeLensWidget extends WidgetType {
67
157
  element.setAttribute("aria-label", LENS_TOOLTIPS[spec.kind]);
68
158
  // Static, trusted markup (see icons.ts)
69
159
  element.innerHTML = LENS_ICONS[spec.kind];
70
- const hidePopover = () => {
71
- window.clearTimeout(HOVER_TIMERS.get(element));
72
- HOVER_TIMERS.delete(element);
73
- if (view.state.field(codeLensHoverField, false)) {
74
- view.dispatch({ effects: setHoveredLens.of(null) });
75
- }
76
- };
77
- element.onmouseenter = () => {
78
- const timer = window.setTimeout(() => {
79
- view.dispatch({ effects: setHoveredLens.of(spec) });
80
- }, CODE_LENS_HOVER_DELAY_MS);
81
- HOVER_TIMERS.set(element, timer);
82
- };
83
- element.onmouseleave = hidePopover;
160
+ const hover = () => view.plugin(lensHoverPlugin);
161
+ const hidePopover = () => hover()?.hide();
162
+ element.onmouseenter = () => hover()?.enterLens(spec, element);
163
+ element.onmouseleave = () => hover()?.leave();
84
164
  element.onmousemove = (event) => {
85
- // Keep the editor's built-in hover documentation tooltip from also
86
- // triggering over the icon
165
+ // Keep the editor's built-in hover tooltip from re-arming while the
166
+ // pointer is over the icon (see `dismissEditorHoverTooltips`)
87
167
  event.stopPropagation();
88
168
  };
89
169
  element.onmousedown = (event) => {
@@ -108,48 +188,58 @@ class CodeLensWidget extends WidgetType {
108
188
  return element;
109
189
  }
110
190
 
111
- override destroy(dom: HTMLElement): void {
112
- window.clearTimeout(HOVER_TIMERS.get(dom));
113
- HOVER_TIMERS.delete(dom);
114
- }
115
-
116
191
  override ignoreEvent(): boolean {
117
192
  // The widget handles its own events
118
193
  return true;
119
194
  }
120
195
  }
121
196
 
122
- function createLensTooltip(spec: CodeLensSpec): Tooltip {
123
- return {
197
+ interface HoveredLens {
198
+ spec: CodeLensSpec;
199
+ tooltip: Tooltip;
200
+ }
201
+
202
+ function createHoveredLens(spec: CodeLensSpec): HoveredLens {
203
+ const tooltip: Tooltip = {
124
204
  pos: spec.pos,
125
205
  above: true,
126
- create: () => {
206
+ create: (view) => {
127
207
  const dom = document.createElement("div");
128
208
  // Same chrome as the SQL completion/hover popovers
129
209
  dom.classList.add("mo-cm-tooltip", "docs-documentation");
210
+ // The popover is scrollable, so keep it open while the pointer is
211
+ // inside it
212
+ dom.onmouseenter = () => view.plugin(lensHoverPlugin)?.enterPopover();
213
+ dom.onmouseleave = () => view.plugin(lensHoverPlugin)?.leave();
130
214
  const unmount = mountLensPopover(dom, spec);
131
215
  return { dom, resize: false, destroy: unmount };
132
216
  },
133
217
  };
218
+ return { spec, tooltip };
134
219
  }
135
220
 
136
- const codeLensHoverField = StateField.define<Tooltip | null>({
221
+ const codeLensHoverField = StateField.define<HoveredLens | null>({
137
222
  create() {
138
223
  return null;
139
224
  },
140
- update(tooltip, tr) {
225
+ update(hovered, tr) {
141
226
  for (const effect of tr.effects) {
142
227
  if (effect.is(setHoveredLens)) {
143
- return effect.value ? createLensTooltip(effect.value) : null;
228
+ return effect.value ? createHoveredLens(effect.value) : null;
144
229
  }
145
- if (effect.is(setCodeLenses)) {
146
- // Lenses were rebuilt; the hovered widget may be gone
147
- return null;
230
+ if (effect.is(setCodeLenses) && hovered) {
231
+ // Lenses were rebuilt (e.g. after a store update); keep the popover
232
+ // only if the hovered lens is still there, unchanged
233
+ const stillPresent = effect.value.some((spec) =>
234
+ specEquals(spec, hovered.spec),
235
+ );
236
+ return stillPresent ? hovered : null;
148
237
  }
149
238
  }
150
- return tr.docChanged ? null : tooltip;
239
+ return tr.docChanged ? null : hovered;
151
240
  },
152
- provide: (field) => showTooltip.from(field),
241
+ provide: (field) =>
242
+ showTooltip.from(field, (hovered) => hovered?.tooltip ?? null),
153
243
  });
154
244
 
155
245
  const codeLensField = StateField.define<DecorationSet>({
@@ -263,13 +353,19 @@ class CodeLensPlugin {
263
353
  }
264
354
  }
265
355
 
356
+ // Padding around the 12px icon so the hover/click target isn't tiny
357
+ const LENS_HIT_PADDING = "3px";
358
+
266
359
  const codeLensTheme = EditorView.baseTheme({
267
360
  ".mo-code-lens": {
268
361
  display: "inline-flex",
269
362
  verticalAlign: "baseline",
270
363
  // Optically center the icon against the text
271
364
  transform: "translateY(1.5px)",
272
- marginLeft: "0.3em",
365
+ // Enlarge the hit area without affecting layout: the padding is pulled
366
+ // back in with negative vertical margins so the line height is unchanged
367
+ padding: LENS_HIT_PADDING,
368
+ margin: `-${LENS_HIT_PADDING} 0 -${LENS_HIT_PADDING} calc(0.3em - ${LENS_HIT_PADDING})`,
273
369
  cursor: "pointer",
274
370
  opacity: "0.5",
275
371
  },
@@ -281,15 +377,16 @@ const codeLensTheme = EditorView.baseTheme({
281
377
  /**
282
378
  * Inline icons linking datasource/bucket variables and `mo.cache` /
283
379
  * `mo.persistent_cache` calls to their panels.
284
- * Gated behind the `editor_code_lens` feature flag.
380
+ * Configurable via the `display.code_lens` user config (on by default).
285
381
  */
286
- export function codeLensBundle(cellId: CellId): Extension {
287
- if (!getFeatureFlag("editor_code_lens")) {
382
+ export function codeLensBundle(cellId: CellId, enabled = true): Extension {
383
+ if (!enabled) {
288
384
  return [];
289
385
  }
290
386
  return [
291
387
  codeLensField,
292
388
  codeLensHoverField,
389
+ lensHoverPlugin,
293
390
  ViewPlugin.define(
294
391
  (view) => new CodeLensPlugin(view, cellId, getFeatureFlag("cache_panel")),
295
392
  ),
@@ -140,11 +140,16 @@ export const searchHighlighter = ViewPlugin.fromClass(
140
140
  );
141
141
 
142
142
  export const highlightTheme = EditorView.baseTheme({
143
- "&light .cm-searchMatch": { backgroundColor: "#99ff7780" },
144
- "&dark .cm-searchMatch": { backgroundColor: "#22bb0070" },
143
+ "&light .cm-searchMatch": {
144
+ backgroundColor: "var(--cm-search-match-background-light)",
145
+ },
146
+ "&dark .cm-searchMatch": {
147
+ backgroundColor: "var(--cm-search-match-background-dark)",
148
+ },
145
149
 
146
150
  "&light .cm-searchMatch-selected": { backgroundColor: "transparent" },
147
151
  "&dark .cm-searchMatch.cm-searchMatch-selected": {
148
- backgroundColor: "#6199ff88 !important",
152
+ backgroundColor:
153
+ "var(--cm-search-match-selected-background-dark) !important",
149
154
  },
150
155
  });
@@ -0,0 +1,44 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { render } from "@testing-library/react";
4
+ import { describe, expect, it } from "vitest";
5
+ import type {
6
+ DataTable,
7
+ DataTableColumn,
8
+ DataType,
9
+ } from "@/core/kernel/messages";
10
+ import { renderColumnInfo, renderTableInfo } from "../renderers";
11
+
12
+ const geometryColumn = {
13
+ name: "geom",
14
+ type: "geometry" as DataType,
15
+ external_type: "geometry",
16
+ sample_values: [],
17
+ } as DataTableColumn;
18
+
19
+ describe("SQL renderers", () => {
20
+ it("renders table information with an unrecognized column type", () => {
21
+ const table: DataTable = {
22
+ name: "shapes",
23
+ type: "table",
24
+ source: "local",
25
+ source_type: "local",
26
+ num_rows: null,
27
+ num_columns: 1,
28
+ variable_name: null,
29
+ columns: [geometryColumn],
30
+ primary_keys: [],
31
+ indexes: [],
32
+ };
33
+
34
+ const result = render(renderTableInfo(table));
35
+
36
+ expect(result.container.querySelector("svg")).not.toBeNull();
37
+ });
38
+
39
+ it("renders column information with an unrecognized column type", () => {
40
+ const result = render(renderColumnInfo(geometryColumn));
41
+
42
+ expect(result.container.querySelector("svg")).not.toBeNull();
43
+ });
44
+ });
@@ -13,7 +13,7 @@ import {
13
13
  TableIcon,
14
14
  ViewIcon,
15
15
  } from "@/components/databases/namespace-icons";
16
- import { DATA_TYPE_ICON } from "@/components/datasets/icons";
16
+ import { DATA_TYPE_ICON, resolveDataType } from "@/components/datasets/icons";
17
17
  import { Badge } from "@/components/ui/badge";
18
18
  import {
19
19
  type ConnectionName,
@@ -149,7 +149,7 @@ export const renderTableInfo = (table: DataTable): React.ReactNode => {
149
149
  );
150
150
 
151
151
  const columnItems = table.columns.map((column) => {
152
- const TypeIcon = DATA_TYPE_ICON[column.type];
152
+ const TypeIcon = DATA_TYPE_ICON[resolveDataType(column.type)];
153
153
  return (
154
154
  <div
155
155
  key={column.name}
@@ -288,7 +288,7 @@ export const renderTableInfo = (table: DataTable): React.ReactNode => {
288
288
  };
289
289
 
290
290
  export const renderColumnInfo = (column: DataTableColumn): React.ReactNode => {
291
- const TypeIcon = DATA_TYPE_ICON[column.type];
291
+ const TypeIcon = DATA_TYPE_ICON[resolveDataType(column.type)];
292
292
 
293
293
  const typeBadge = (
294
294
  <Badge
@@ -1,136 +1,72 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { type Tag, tags as t } from "@lezer/highlight";
4
- import { describe, expect, it } from "vitest";
3
+ import type { Extension } from "@codemirror/state";
4
+ import { EditorView } from "@codemirror/view";
5
+ import { afterEach, describe, expect, it } from "vitest";
6
+ import { darkTheme } from "../dark";
5
7
  import { lightTheme } from "../light";
6
8
 
7
- // Helper function to get theme configuration from the source
8
- const getThemeConfig = () => ({
9
- variant: "light",
10
- settings: {
11
- background: "#ffffff",
12
- foreground: "#000000",
13
- caret: "#000000",
14
- selection: "#d7d4f0",
15
- lineHighlight: "#cceeff44",
16
- gutterBackground: "var(--color-background)",
17
- gutterForeground: "var(--gray-10)",
18
- },
19
- styles: [
20
- { tag: t.comment, color: "#708090" },
21
- { tag: t.variableName, color: "#000000" },
22
- { tag: [t.string, t.special(t.brace)], color: "#a11" },
23
- { tag: t.number, color: "#164" },
24
- { tag: t.bool, color: "#219" },
25
- { tag: t.null, color: "#219" },
26
- { tag: t.keyword, color: "#708", fontWeight: 500 },
27
- { tag: t.className, color: "#00f" },
28
- { tag: t.definition(t.typeName), color: "#00f" },
29
- { tag: t.typeName, color: "#085" },
30
- { tag: t.angleBracket, color: "#000000" },
31
- { tag: t.tagName, color: "#170" },
32
- { tag: t.attributeName, color: "#00c" },
33
- { tag: t.operator, color: "#a2f", fontWeight: 500 },
34
- { tag: [t.function(t.variableName)], color: "#00c" },
35
- { tag: [t.propertyName], color: "#05a" },
36
- ],
37
- });
38
-
39
- describe("lightTheme", () => {
40
- it("should export a theme", () => {
41
- expect(lightTheme).toBeDefined();
42
- expect(typeof lightTheme).toBe("object");
43
- });
44
-
45
- describe("theme configuration", () => {
46
- const config = getThemeConfig();
47
-
48
- it("should have correct basic settings", () => {
49
- expect(config.variant).toBe("light");
50
- expect(config.settings).toEqual({
51
- background: "#ffffff",
52
- foreground: "#000000",
53
- caret: "#000000",
54
- selection: "#d7d4f0",
55
- lineHighlight: "#cceeff44",
56
- gutterBackground: "var(--color-background)",
57
- gutterForeground: "var(--gray-10)",
58
- });
59
- });
9
+ const mounted: Array<{ host: HTMLDivElement; view: EditorView }> = [];
60
10
 
61
- describe("syntax highlighting", () => {
62
- const findStyle = (tag: Tag | readonly Tag[]) =>
63
- config.styles.find((s) =>
64
- Array.isArray(s.tag) ? s.tag.includes(tag as Tag) : s.tag === tag,
65
- );
11
+ function mountTheme(extension: Extension) {
12
+ const host = document.createElement("div");
13
+ document.body.append(host);
14
+ const root = host.attachShadow({ mode: "open" });
15
+ const parent = document.createElement("div");
16
+ root.append(parent);
17
+ const view = new EditorView({ extensions: extension, parent, root });
18
+ mounted.push({ host, view });
66
19
 
67
- it("should style comments", () => {
68
- expect(findStyle(t.comment)).toEqual({
69
- tag: t.comment,
70
- color: "#708090",
71
- });
72
- });
20
+ const style = root.querySelector("style");
21
+ if (!style) {
22
+ throw new Error("CodeMirror did not mount its theme styles");
23
+ }
24
+ return { css: style.textContent ?? "", view };
25
+ }
73
26
 
74
- it("should style strings", () => {
75
- const style = findStyle(t.string);
76
- expect(style).toBeDefined();
77
- expect(style?.color).toBe("#a11");
78
- expect(Array.isArray(style?.tag)).toBe(true);
79
- expect(style?.tag).toContain(t.string);
80
- expect(style?.tag).toContain(t.special(t.brace));
81
- });
82
-
83
- it("should style numbers and boolean values", () => {
84
- expect(findStyle(t.number)).toEqual({
85
- tag: t.number,
86
- color: "#164",
87
- });
88
- expect(findStyle(t.bool)).toEqual({
89
- tag: t.bool,
90
- color: "#219",
91
- });
92
- });
93
-
94
- it("should style keywords with emphasis", () => {
95
- expect(findStyle(t.keyword)).toEqual({
96
- tag: t.keyword,
97
- color: "#708",
98
- fontWeight: 500,
99
- });
100
- });
27
+ afterEach(() => {
28
+ for (const { host, view } of mounted.splice(0)) {
29
+ view.destroy();
30
+ host.remove();
31
+ }
32
+ });
101
33
 
102
- it("should style operators with emphasis", () => {
103
- expect(findStyle(t.operator)).toEqual({
104
- tag: t.operator,
105
- color: "#a2f",
106
- fontWeight: 500,
107
- });
108
- });
34
+ const themeCases = [
35
+ {
36
+ name: "light",
37
+ extension: lightTheme,
38
+ dark: false,
39
+ selectionAlias: "var(--cm-selection-background-light)",
40
+ reactiveColor: "var(--cm-reactive-reference-color-light)",
41
+ },
42
+ {
43
+ name: "dark",
44
+ extension: darkTheme,
45
+ dark: true,
46
+ selectionAlias: "var(--cm-selection-background-dark)",
47
+ reactiveColor: "var(--cm-reactive-reference-color-dark)",
48
+ },
49
+ ] as const;
109
50
 
110
- it("should style class and type names", () => {
111
- expect(findStyle(t.className)).toEqual({
112
- tag: t.className,
113
- color: "#00f",
114
- });
115
- expect(findStyle(t.typeName)).toEqual({
116
- tag: t.typeName,
117
- color: "#085",
118
- });
119
- });
51
+ describe.each(themeCases)("$name theme", (theme) => {
52
+ it("uses the production theme tokens", () => {
53
+ const { css, view } = mountTheme(theme.extension);
120
54
 
121
- it("should style function names", () => {
122
- const style = findStyle(t.function(t.variableName));
123
- expect(style).toBeDefined();
124
- expect(style?.color).toBe("#00c");
125
- expect(Array.isArray(style?.tag)).toBe(true);
126
- });
55
+ expect(view.state.facet(EditorView.darkTheme)).toBe(theme.dark);
56
+ expect(css).toContain(
57
+ `--cm-selection-background: ${theme.selectionAlias};`,
58
+ );
59
+ expect(css).toContain("background-color: var(--cm-selection-background);");
60
+ expect(css).toContain(`color: ${theme.reactiveColor};`);
61
+ expect(css).toContain(
62
+ "border-bottom: 2px solid var(--cm-reactive-reference-border-color);",
63
+ );
127
64
 
128
- it("should style property names", () => {
129
- const style = findStyle(t.propertyName);
130
- expect(style).toBeDefined();
131
- expect(style?.color).toBe("#05a");
132
- expect(Array.isArray(style?.tag)).toBe(true);
133
- });
134
- });
65
+ const hoverRule = css
66
+ .split("\n")
67
+ .find((rule) => rule.includes(".mo-cm-reactive-reference-hover"));
68
+ expect(hoverRule).toBeDefined();
69
+ expect(hoverRule).toContain("cursor: pointer;");
70
+ expect(hoverRule).not.toContain("border-bottom");
135
71
  });
136
72
  });
@@ -11,7 +11,7 @@ export const darkTheme = [
11
11
  background: "var(--cm-background)",
12
12
  foreground: "#abb2bf",
13
13
  caret: "#528bff",
14
- selection: "#3E4451",
14
+ selection: "var(--cm-selection-background)",
15
15
  lineHighlight: "#2c313c",
16
16
  gutterBackground: "var(--color-background)",
17
17
  gutterForeground: "var(--gray-10)",
@@ -36,15 +36,16 @@ export const darkTheme = [
36
36
  ],
37
37
  }),
38
38
  EditorView.theme({
39
+ "&": {
40
+ "--cm-selection-background": "var(--cm-selection-background-dark)",
41
+ },
39
42
  ".mo-cm-reactive-reference": {
40
43
  fontWeight: "400",
41
- color: "#2a7aa5",
42
- borderBottom: "2px solid #bad3de",
44
+ color: "var(--cm-reactive-reference-color-dark)",
45
+ borderBottom: "2px solid var(--cm-reactive-reference-border-color)",
43
46
  },
44
47
  ".mo-cm-reactive-reference-hover": {
45
48
  cursor: "pointer",
46
- borderBottomWidth: "3px",
47
- borderBottomColor: "#4a90a5",
48
49
  },
49
50
  }),
50
51
  ];
@@ -11,7 +11,7 @@ export const lightTheme = [
11
11
  background: "#ffffff",
12
12
  foreground: "#000000",
13
13
  caret: "#000000",
14
- selection: "#d7d4f0",
14
+ selection: "var(--cm-selection-background)",
15
15
  lineHighlight: "#cceeff44",
16
16
  gutterBackground: "var(--color-background)",
17
17
  gutterForeground: "var(--gray-10)",
@@ -45,14 +45,16 @@ export const lightTheme = [
45
45
  ],
46
46
  }),
47
47
  EditorView.theme({
48
+ "&": {
49
+ "--cm-selection-background": "var(--cm-selection-background-light)",
50
+ },
48
51
  ".mo-cm-reactive-reference": {
49
52
  fontWeight: "400",
50
- color: "#005f87",
51
- borderBottom: "2px solid #bad3de",
53
+ color: "var(--cm-reactive-reference-color-light)",
54
+ borderBottom: "2px solid var(--cm-reactive-reference-border-color)",
52
55
  },
53
56
  ".mo-cm-reactive-reference-hover": {
54
57
  cursor: "pointer",
55
- borderBottomWidth: "3px",
56
58
  },
57
59
  }),
58
60
  ];
@@ -66,6 +66,7 @@ test("default UserConfig - empty", () => {
66
66
  "display": {
67
67
  "cell_output": "below",
68
68
  "code_editor_font_size": 14,
69
+ "code_lens": true,
69
70
  "dataframes": "rich",
70
71
  "default_table_max_columns": 50,
71
72
  "default_table_page_size": 10,
@@ -139,6 +140,7 @@ test("default UserConfig - one level", () => {
139
140
  "display": {
140
141
  "cell_output": "below",
141
142
  "code_editor_font_size": 14,
143
+ "code_lens": true,
142
144
  "dataframes": "rich",
143
145
  "default_table_max_columns": 50,
144
146
  "default_table_page_size": 10,
@@ -154,6 +154,7 @@ export const UserConfigSchema = z
154
154
  }),
155
155
  locale: z.string().nullable().optional(),
156
156
  reference_highlighting: z.boolean().prefault(true),
157
+ code_lens: z.boolean().prefault(true),
157
158
  })
158
159
  .prefault({}),
159
160
  package_management: z
@@ -13,7 +13,6 @@ export interface ExperimentalFeatures {
13
13
  external_agents: boolean;
14
14
  debugger: boolean; // Live frame-watching debugger (gutter breakpoints + pdb)
15
15
  line_timing: boolean; // Green active-line highlight + per-line elapsed timer
16
- editor_code_lens: boolean; // Inline icons in cell editors linking datasources/buckets/caches to their panels
17
16
  // Add new feature flags here
18
17
  }
19
18
 
@@ -25,7 +24,6 @@ const defaultValues: ExperimentalFeatures = {
25
24
  external_agents: import.meta.env.DEV,
26
25
  debugger: false,
27
26
  line_timing: false,
28
- editor_code_lens: import.meta.env.DEV,
29
27
  };
30
28
 
31
29
  export function getFeatureFlag<T extends keyof ExperimentalFeatures>(