@marimo-team/islands 0.16.5 → 0.17.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 (549) hide show
  1. package/dist/{ConnectedDataExplorerComponent-D96i9G-X.js → ConnectedDataExplorerComponent-DJEUH6Bb.js} +78 -100
  2. package/dist/{_baseIsEqual-oN7pRNcM.js → _baseIsEqual-CN4oFUZ4.js} +20 -20
  3. package/dist/{_basePickBy-CYvzhRjy.js → _basePickBy-CzSvE_-f.js} +3 -3
  4. package/dist/{_baseProperty-DGUdIBuu.js → _baseProperty-DbbUiyUD.js} +5 -5
  5. package/dist/{_baseUniq-B5gfSl8S.js → _baseUniq-DwoC-LVO.js} +4 -4
  6. package/dist/any-language-editor-CEXn1vFs.js +156 -0
  7. package/dist/apl-DuVfHsPc.js +4 -0
  8. package/dist/architecture-O4VJ6CD3-lp-opOaL.js +21 -0
  9. package/dist/{architectureDiagram-W76B3OCA-DkEhipkW.js → architectureDiagram-W76B3OCA-CoBORy6u.js} +34 -34
  10. package/dist/asciiarmor-qIVWsi4F.js +4 -0
  11. package/dist/asn1-BjPqARr7.js +4 -0
  12. package/dist/assets/__vite-browser-external-lX-sn9m2.js +1 -0
  13. package/dist/assets/worker-vPn7gxWj.js +54 -0
  14. package/dist/{blockDiagram-QIGZ2CNN-DZOqLMYa.js → blockDiagram-QIGZ2CNN-0yzoLIar.js} +75 -86
  15. package/dist/brainfuck-DPGTVfkE.js +4 -0
  16. package/dist/{button-CEcjneWG.js → button-DcnBVpVa.js} +11 -14
  17. package/dist/{c4Diagram-FPNF74CW-DVaR7c9q.js → c4Diagram-FPNF74CW-CKsIA_DD.js} +27 -51
  18. package/dist/{channel-Uh0KpgGW.js → channel-3LVvQZcD.js} +1 -1
  19. package/dist/{check-BK9zDfQk.js → check-D7ifz5op.js} +1 -1
  20. package/dist/{chunk-3AY6CYHV-Dk2R2-S1.js → chunk-3AY6CYHV-B2C-aVc3.js} +35 -35
  21. package/dist/{chunk-4BX2VUAB-CqO6zUIz.js → chunk-4BX2VUAB-DEd4VI9L.js} +1 -1
  22. package/dist/{chunk-4KMFLZZN-CloTfTwP.js → chunk-4KMFLZZN-DnvP3O4K.js} +216 -325
  23. package/dist/{chunk-55IACEB6-I0rmqTua.js → chunk-55IACEB6-BcCzwOOl.js} +1 -1
  24. package/dist/{chunk-6OXUPJBA-BuROSTmo.js → chunk-6OXUPJBA-eNAAfJ3Q.js} +7 -7
  25. package/dist/{chunk-7GE3RBXV-B1-tsIPP.js → chunk-7GE3RBXV-CSAeQvLz.js} +1 -1
  26. package/dist/{chunk-ABZYJK2D-CLlso8tj.js → chunk-ABZYJK2D-CZcb_1iM.js} +16 -20
  27. package/dist/{chunk-BN7GFLIU-Db2-FjLn.js → chunk-BN7GFLIU-pBc5O5Rh.js} +1 -1
  28. package/dist/{chunk-CVBHYZKI-BONeiloK.js → chunk-CVBHYZKI-CivHZg9P.js} +3 -3
  29. package/dist/{chunk-CXMOBAN2-U9GJSP1d.js → chunk-CXMOBAN2-Dd0E6qb0.js} +46 -54
  30. package/dist/chunk-EXTU4WIE-GQ2ZWfJo.js +10 -0
  31. package/dist/{chunk-FMBD7UC4-DyV3BR_I.js → chunk-FMBD7UC4-C6YcisV6.js} +1 -1
  32. package/dist/{chunk-JA3XYJ7Z-C9A1076P.js → chunk-JA3XYJ7Z-DYeQaT57.js} +21 -25
  33. package/dist/{chunk-JEIROHC2-BGnFkSVq.js → chunk-JEIROHC2-B-EZMP4V.js} +1 -1
  34. package/dist/{chunk-K7UQS3LO-033LOsjK.js → chunk-K7UQS3LO-DENzlS-M.js} +7 -7
  35. package/dist/{chunk-KMC2YHZD-DT4Sq4Ld.js → chunk-KMC2YHZD-SckhHdEh.js} +1 -1
  36. package/dist/{chunk-QN33PNHL-gs44MZla.js → chunk-QN33PNHL-Cjq5b604.js} +2 -2
  37. package/dist/{chunk-QYVHNE3D-B8BO1AnT.js → chunk-QYVHNE3D-CNUuivie.js} +3 -4
  38. package/dist/{chunk-QZHKN3VN-CeN_GkU6.js → chunk-QZHKN3VN-DugEU_bA.js} +1 -1
  39. package/dist/chunk-S3R3BYOJ-itCT6Vif.js +380 -0
  40. package/dist/{chunk-T44TD3VJ-BwzD6YE0.js → chunk-T44TD3VJ-BLdfTX8J.js} +1 -1
  41. package/dist/{chunk-TVAH2DTR-Bi6jpQJQ.js → chunk-TVAH2DTR-BOnwF9d8.js} +7 -8
  42. package/dist/{chunk-TZMSLE5B-D8klz2H_.js → chunk-TZMSLE5B-DGs66AlL.js} +4 -5
  43. package/dist/{chunk-WFRQ32O7-CzSwSlN0.js → chunk-WFRQ32O7-CPsipkmJ.js} +1 -1
  44. package/dist/{chunk-WFWHJNB7-DN_cavM6.js → chunk-WFWHJNB7-Cmed18Pk.js} +1 -1
  45. package/dist/{chunk-XRWGC2XP-Bb5eGNM2.js → chunk-XRWGC2XP-DH5GDaY8.js} +1 -1
  46. package/dist/{chunk-ZPAFE4SF-S5UYNb0V.js → chunk-ZPAFE4SF-DPDwaqZm.js} +22 -22
  47. package/dist/classDiagram-KNZD7YFC-azuS_99k.js +39 -0
  48. package/dist/classDiagram-v2-RKCZMP56-CQpyQQOR.js +39 -0
  49. package/dist/{click-outside-container-DE4e7p1p.js → click-outside-container-CL_FkgGY.js} +7 -12
  50. package/dist/{clike-CxAz4p9E.js → clike-DYfRWWXk.js} +1 -1
  51. package/dist/{clike-Cg_DBrJ0.js → clike-bzZTreP4.js} +1 -1
  52. package/dist/clojure-ATksAecl.js +4 -0
  53. package/dist/{clone-Dk4FkKH0.js → clone-Msbhmn2a.js} +1 -1
  54. package/dist/cmake-CWylaz2C.js +4 -0
  55. package/dist/cobol-BiLLCZIQ.js +4 -0
  56. package/dist/coffeescript-Ca4jipi8.js +4 -0
  57. package/dist/commonlisp-BwFjyEC7.js +4 -0
  58. package/dist/{constants-Cjd_3kwd.js → constants-BCOEQoEQ.js} +3 -3
  59. package/dist/{copy-C5RFg7ok.js → copy-BkZ8PkBM.js} +6 -2
  60. package/dist/{cose-bilkent-S5V4N54A-B3iOTGu5.js → cose-bilkent-S5V4N54A-BZnbwyVD.js} +20 -20
  61. package/dist/crystal-BhUsQHbh.js +4 -0
  62. package/dist/css-Cf4wlIyV.js +5 -0
  63. package/dist/cypher-Dj8Hzgxa.js +4 -0
  64. package/dist/{cytoscape.esm-DTDV0Nbj.js → cytoscape.esm-BTpRoPd2.js} +586 -661
  65. package/dist/d-DZI7tbTy.js +4 -0
  66. package/dist/{dagre-5GWH7T2D-KM4Z11yT.js → dagre-5GWH7T2D-BGaiSZZO.js} +32 -37
  67. package/dist/{dagre-B0u1urxE.js → dagre-pyfDIOWJ.js} +57 -76
  68. package/dist/data-grid-overlay-editor-867aBz0Y.js +133 -0
  69. package/dist/{diagram-N5W7TBWH-CtO7az4G.js → diagram-N5W7TBWH-CzLE0jZB.js} +35 -51
  70. package/dist/diagram-QEK2KX5R-AGS60xEZ.js +245 -0
  71. package/dist/{diagram-S2PKOQOG-CiXElLNQ.js → diagram-S2PKOQOG-BxRoG6yW.js} +28 -28
  72. package/dist/diff-WQISUHG5.js +4 -0
  73. package/dist/{dist-CdE2C2In.js → dist-2Ne-33Xy.js} +15 -20
  74. package/dist/{dist-DKFaZRVk.js → dist-B0YD1aXi.js} +2 -2
  75. package/dist/{dist-DBhzmFyH.js → dist-B1Dv8Sdk.js} +3 -3
  76. package/dist/{dist-CGIZPq3J.js → dist-BFkr6kAQ.js} +2 -2
  77. package/dist/{dist-DL_ci7Yc.js → dist-BL2DSY0P.js} +1 -1
  78. package/dist/dist-BawZu0ix.js +10 -0
  79. package/dist/{dist-Bar1QnNM.js → dist-BhVFggab.js} +3 -3
  80. package/dist/{textile-Cy55fYGC.js → dist-BiOF7987.js} +4 -2
  81. package/dist/{dist-BQmQQqFH.js → dist-BpzZrRd6.js} +1 -1
  82. package/dist/{dist-CxD5E6Sh.js → dist-C7zhQ7K0.js} +24 -22
  83. package/dist/{dist-BqgkUnEN.js → dist-CBhnQKQ4.js} +3 -3
  84. package/dist/{dist-Dzk1C8l5.js → dist-CId4IPXu.js} +10 -13
  85. package/dist/{dist-CUnh_3Ii.js → dist-CYhQCVru.js} +2 -2
  86. package/dist/{dist-BBlFk9ki.js → dist-CZq5-ZyD.js} +1 -1
  87. package/dist/{dist-elblfNXO.js → dist-Cacac5HV.js} +2 -2
  88. package/dist/{dist-CChOkSUg.js → dist-CfQHSIQC.js} +3 -3
  89. package/dist/{dist-JCAky9ND.js → dist-CkvGMBAS.js} +17 -22
  90. package/dist/dist-Cs3McXEj.js +6 -0
  91. package/dist/{dist-o7fhJC7U.js → dist-CvyfRaIr.js} +3 -3
  92. package/dist/{dist-CZfRM7pE.js → dist-D-3fICwh.js} +2 -2
  93. package/dist/dist-D3aaithT.js +6 -0
  94. package/dist/{dist-CutXTm8t.js → dist-DBhEu3-F.js} +1 -1
  95. package/dist/dist-DELcMSpJ.js +6 -0
  96. package/dist/{dist-C7ASiFxI.js → dist-DMxl6Qbu.js} +273 -263
  97. package/dist/{dist-CLvpViod.js → dist-DS6nuHYK.js} +2 -3
  98. package/dist/dist-Dgts3WXd.js +6 -0
  99. package/dist/{dist--I6Htnlv.js → dist-DlHkZUnY.js} +5 -5
  100. package/dist/dist-Doiq_KIP.js +15 -0
  101. package/dist/dist-DtpUiDG_.js +6 -0
  102. package/dist/{dist-DzOpMdwb.js → dist-NUdHX0XE.js} +4 -4
  103. package/dist/{dist-C3WYsf4K.js → dist-PGgOcwbF.js} +4 -10
  104. package/dist/{dist-DNnYAdRE.js → dist-RdxOJbBw.js} +2 -2
  105. package/dist/{dist-BEvIw5Nh.js → dist-RwqAqkpG.js} +1 -1
  106. package/dist/dist-ZjnJq_jD.js +10 -0
  107. package/dist/{dist-CbRkrKrP.js → dist-biZ846D9.js} +5 -5
  108. package/dist/{dist-DW9er3Zq.js → dist-d5NxvX2s.js} +44 -23
  109. package/dist/{dist-C3QUag__.js → dist-ivwkJchV.js} +3 -3
  110. package/dist/dist-mof3iuBu.js +12 -0
  111. package/dist/{dist-Cib4sGDA.js → dist-reo2kYlN.js} +2 -2
  112. package/dist/{dist-BZBitvuL.js → dist-wHVprCkn.js} +1 -1
  113. package/dist/{dist-C5zMs_n5.js → dist-y8uoXYaE.js} +3 -3
  114. package/dist/{dist-DPF5TTUg.js → dist-z_iuDES7.js} +126 -115
  115. package/dist/{dockerfile-Dum_1b-5.js → dockerfile-sZMPcXVY.js} +1 -1
  116. package/dist/dtd-B2M8dhfC.js +4 -0
  117. package/dist/dylan-CU3Vt8SC.js +4 -0
  118. package/dist/ecl-B8ESAVq4.js +4 -0
  119. package/dist/eiffel-DDfMIKeA.js +4 -0
  120. package/dist/elm-Bj6rj8jf.js +4 -0
  121. package/dist/{erDiagram-AWTI2OKA-ZTIl9iQO.js → erDiagram-AWTI2OKA-CTxzb-U8.js} +20 -20
  122. package/dist/erlang-BxyshZUq.js +4 -0
  123. package/dist/{error-banner-OQIGTqFR.js → error-banner-npbEfanI.js} +13 -13
  124. package/dist/{esm-DxFkg7a6.js → esm-BdiY4QsX.js} +1528 -1492
  125. package/dist/{esm-d0g2RsOH.js → esm-CAWW9sum.js} +6 -8
  126. package/dist/{esm-1_Mp6VD2.js → esm-YY5zh7KV.js} +324 -395
  127. package/dist/{esm-BO9n_s6u.js → esm-svAVli9f.js} +5 -5
  128. package/dist/{factor-CdgiDGiu.js → factor-CRFTmP_a.js} +1 -1
  129. package/dist/factor-CYk6XT8r.js +5 -0
  130. package/dist/{flowDiagram-PVAE7QVJ-DsbofOzu.js → flowDiagram-PVAE7QVJ-Dck2hiJe.js} +22 -22
  131. package/dist/{formats-ChrNdVdJ.js → formats-BnqXUb1V.js} +13 -17
  132. package/dist/forth-fcoJkd-f.js +4 -0
  133. package/dist/fortran-IxZHu4wc.js +4 -0
  134. package/dist/{fullscreen-D1yTiBlu.js → fullscreen-blsKUrtN.js} +741 -744
  135. package/dist/{ganttDiagram-OWAHRB6G-FnCH1Yj3.js → ganttDiagram-OWAHRB6G-AWzfzpup.js} +9 -9
  136. package/dist/gas-B8rmKcim.js +4 -0
  137. package/dist/gherkin-BTm-jIdJ.js +4 -0
  138. package/dist/gitGraph-ZV4HHKMB-DFg_OLQb.js +21 -0
  139. package/dist/{gitGraphDiagram-NY62KEGX-B0wvMNqU.js → gitGraphDiagram-NY62KEGX-GyNboWSV.js} +31 -34
  140. package/dist/{glide-data-editor-D_kEsT07.js → glide-data-editor-DHuN8kQ8.js} +1650 -1720
  141. package/dist/{graphlib-BGmr7CYF.js → graphlib-hb3zmtVD.js} +5 -5
  142. package/dist/groovy-01kRHFMD.js +4 -0
  143. package/dist/haskell-B3PhE05w.js +4 -0
  144. package/dist/haxe-DEoAm8oA.js +5 -0
  145. package/dist/{hotkeys-yFrUwyJK.js → hotkeys-Ct2T3e9O.js} +4 -7
  146. package/dist/idl-DsDJU9cV.js +4 -0
  147. package/dist/info-63CPKGFF-D3DZmDBa.js +21 -0
  148. package/dist/infoDiagram-STP46IZ2-ec08vi_U.js +44 -0
  149. package/dist/{isArrayLikeObject-DiDsNamC.js → isArrayLikeObject-BlvK28do.js} +3 -5
  150. package/dist/{isEmpty-BBG-u1GM.js → isEmpty--odfYjh1.js} +2 -2
  151. package/dist/{isSymbol-BxF-_8BA.js → isSymbol-Cb1f2HgO.js} +1 -1
  152. package/dist/{javascript-Dfq1qI35.js → javascript-BfCTmOnk.js} +2 -2
  153. package/dist/javascript-gwczVhuU.js +5 -0
  154. package/dist/jinja2-AkZRdFk3.js +4 -0
  155. package/dist/{journeyDiagram-BIP6EPQ6-B3PotfAW.js → journeyDiagram-BIP6EPQ6-TmXYCUbT.js} +23 -24
  156. package/dist/julia-_s6qe3bf.js +4 -0
  157. package/dist/{kanban-definition-6OIFK2YF-BTrQZ3LN.js → kanban-definition-6OIFK2YF-B6ozleHo.js} +15 -15
  158. package/dist/{katex-dN__NFdn.js → katex-mPzRsXEy.js} +1 -1
  159. package/dist/{katex-BE4xflfm.js → katex-mkWmhPUh.js} +149 -173
  160. package/dist/{label-BinTsX-u.js → label-VVRKZmrP.js} +21 -24
  161. package/dist/{linear-DyTdUIqX.js → linear-iebAbJVD.js} +1 -1
  162. package/dist/livescript-CwPHQdv5.js +4 -0
  163. package/dist/{loader-Dijti3y4.js → loader-CM0VALo9.js} +19 -26
  164. package/dist/lua-s7nRxkCP.js +4 -0
  165. package/dist/main.js +8161 -8431
  166. package/dist/{marked.esm-3RjvXPoO.js → marked.esm-DJM8la36.js} +5 -5
  167. package/dist/mathematica-Ci36yd1q.js +4 -0
  168. package/dist/mbox-DbOYMNCO.js +4 -0
  169. package/dist/{memoize-Dq87l1O_.js → memoize-DYoRBSLn.js} +1 -1
  170. package/dist/{merge-BPDCIm8P.js → merge-BjuR6j_w.js} +1 -1
  171. package/dist/{mermaid-MWiyXDcI.js → mermaid-YPPMBmhk.js} +58 -76
  172. package/dist/{mermaid-parser.core-CSFx6MQ7.js → mermaid-parser.core-BLkyTSZj.js} +8 -8
  173. package/dist/{mhchem-DZ68WS0G.js → mhchem-Dw7wvXtr.js} +1 -1
  174. package/dist/{min-BzhKOmZo.js → min-B_i2ahn4.js} +7 -7
  175. package/dist/{mindmap-definition-Q6HEUPPD-9hhnrO1k.js → mindmap-definition-Q6HEUPPD-F6-JnXwq.js} +17 -17
  176. package/dist/mirc-VmNe8AwF.js +4 -0
  177. package/dist/mllike-BdD7SJEa.js +6 -0
  178. package/dist/modelica-BA4VqzC3.js +4 -0
  179. package/dist/mscgen-DF-5WHJm.js +6 -0
  180. package/dist/mumps-c_Uia_QN.js +4 -0
  181. package/dist/{node-sql-parser-13oju30e.js → node-sql-parser-BqKV-TpL.js} +14343 -14351
  182. package/dist/{now-DVBcRCoE.js → now-CwRqw0nS.js} +1 -1
  183. package/dist/nsis-BAANGODV.js +5 -0
  184. package/dist/{nsis-BW6_XagK.js → nsis-BWJEeUyS.js} +1 -1
  185. package/dist/ntriples-Bslqh2Ki.js +4 -0
  186. package/dist/{number-overlay-editor-D1YdiOrm.js → number-overlay-editor-CeyruAX4.js} +17 -23
  187. package/dist/octave-DYn5ltia.js +4 -0
  188. package/dist/oz-B_N-StZq.js +4 -0
  189. package/dist/packet-HUATNLJX-CkqjFdAv.js +21 -0
  190. package/dist/pascal-DU4CtAUu.js +4 -0
  191. package/dist/perl-Bae6k32u.js +4 -0
  192. package/dist/pie-WTHONI2E-D0rWwX5P.js +21 -0
  193. package/dist/{pieDiagram-ADFJNKIX-CSBC0ZgF.js → pieDiagram-ADFJNKIX-C5dSQVCn.js} +28 -28
  194. package/dist/pig-DSIxUEgX.js +4 -0
  195. package/dist/powershell-31lcPgIF.js +4 -0
  196. package/dist/powershell-BZx53Ujw.js +236 -0
  197. package/dist/properties-lmYbntDG.js +4 -0
  198. package/dist/protobuf-BTYoCEpV.js +4 -0
  199. package/dist/pug-DMFM7zzO.js +5 -0
  200. package/dist/{pug-Bmups_z0.js → pug-PJh82u1M.js} +1 -1
  201. package/dist/puppet-B0ub07d-.js +4 -0
  202. package/dist/python-C4jT87Nt.js +5 -0
  203. package/dist/{q-BzWcnVri.js → q-CMoUHJ5Q.js} +3 -2
  204. package/dist/q-YbPYlqRI.js +4 -0
  205. package/dist/{quadrantDiagram-LMRXKWRM-h7nHf8xG.js → quadrantDiagram-LMRXKWRM-DlahxNiy.js} +7 -7
  206. package/dist/r-OfNu6HAI.js +4 -0
  207. package/dist/radar-NJJJXTRR-Bxqv4O5a.js +21 -0
  208. package/dist/{range-CgK0-PEw.js → range-DxfkexCE.js} +3 -3
  209. package/dist/{react-plotly-BZakcxdv.js → react-plotly-D_IAfR8f.js} +4364 -4705
  210. package/dist/{requirementDiagram-4UW4RH46-BGEurQYq.js → requirementDiagram-4UW4RH46-DTkinyvU.js} +17 -17
  211. package/dist/rpm-D_3b5peD.js +5 -0
  212. package/dist/ruby-CehsJy_T.js +4 -0
  213. package/dist/{sankeyDiagram-GR3RE2ED-CxeJ_jfl.js → sankeyDiagram-GR3RE2ED-CsLnEnnq.js} +3 -3
  214. package/dist/sas-DwQHzPoF.js +4 -0
  215. package/dist/scheme-B6ArxiQu.js +4 -0
  216. package/dist/{sequenceDiagram-C3RYC4MD-CbFxwyr_.js → sequenceDiagram-C3RYC4MD-BdEOR6SC.js} +20 -30
  217. package/dist/shell-AHmQgDfc.js +4 -0
  218. package/dist/sieve-CgodKOcx.js +4 -0
  219. package/dist/{simple-mode-Cgyya8F-.js → simple-mode-BP3Jd4vf.js} +1 -1
  220. package/dist/{slides-component-BEyG25AH.js → slides-component-2bbal1YJ.js} +24 -46
  221. package/dist/smalltalk-BeFzDkbo.js +4 -0
  222. package/dist/sparql-BWxq-Lnx.js +4 -0
  223. package/dist/{src-BNNJRxz3.js → src-DZkaBUmt.js} +6 -6
  224. package/dist/{stateDiagram-KXAO66HF-A61bMf29.js → stateDiagram-KXAO66HF-DQLH2jhP.js} +39 -41
  225. package/dist/stateDiagram-v2-UMBNRL4Z-D9v8fKjF.js +38 -0
  226. package/dist/stex-Dvaq0qsm.js +5 -0
  227. package/dist/style.css +1 -1
  228. package/dist/stylus-Ge0ofWlZ.js +4 -0
  229. package/dist/swift-CjQfbVxV.js +4 -0
  230. package/dist/tcl-CAGDF11K.js +4 -0
  231. package/dist/textile-CrXreJtf.js +4 -0
  232. package/dist/{time-D3tzCqJ6.js → time-CFkXkVrt.js} +1 -1
  233. package/dist/{timeline-definition-XQNQX7LJ-BwdsB7CR.js → timeline-definition-XQNQX7LJ-bToVq14i.js} +4 -5
  234. package/dist/{timer-D3Zlu9ow.js → timer-CzOhIJuk.js} +2 -2
  235. package/dist/{toNumber-efKT08hh.js → toNumber-EFF1Z9T1.js} +2 -2
  236. package/dist/{toString-BvCd3yJc.js → toString-C2mCkasT.js} +2 -2
  237. package/dist/toml-AdLXKwEi.js +4 -0
  238. package/dist/{toml-CIUkU1CP.js → toml-eSl4PUAH.js} +6 -2
  239. package/dist/treemap-75Q7IDZK-Da9Jv6a_.js +21 -0
  240. package/dist/troff-C-LaM2ex.js +4 -0
  241. package/dist/ttcn-DTclUi6T.js +4 -0
  242. package/dist/ttcn-cfg-BtBPbmLX.js +4 -0
  243. package/dist/turtle-BODDDg5O.js +4 -0
  244. package/dist/{types-1X1uZB4y.js → types-CRXV0KD5.js} +84 -95
  245. package/dist/{useAsyncData-C4IqQK0g.js → useAsyncData-uMVTsDI9.js} +1 -1
  246. package/dist/{useDateFormatter-BCsBqetx.js → useDateFormatter-Dcz7jstn.js} +6 -6
  247. package/dist/{useTheme-C2pgJzDH.js → useTheme-NbEx-ZNV.js} +13 -10
  248. package/dist/vb-Cb1HQHii.js +4 -0
  249. package/dist/vbscript-CpXOP4wZ.js +4 -0
  250. package/dist/{vega-component-Cv4J8CHz.js → vega-component-hegVmfuS.js} +21 -21
  251. package/dist/{vega-loader.browser.module-Bi3ttvdj.js → vega-loader.browser.module-DcW8jnKp.js} +1 -2
  252. package/dist/velocity-Dz0rBQIk.js +4 -0
  253. package/dist/verilog-6Di9aLKw.js +4 -0
  254. package/dist/vhdl-BRNesXYc.js +4 -0
  255. package/dist/webidl-BpRNYIYn.js +4 -0
  256. package/dist/xquery-DXWcJ7b6.js +4 -0
  257. package/dist/{xychartDiagram-6GGTOJPD-BJRRi5HC.js → xychartDiagram-6GGTOJPD-C7Bhm_yt.js} +12 -13
  258. package/dist/yacas-DbSARPz4.js +4 -0
  259. package/dist/z80-DzslPj_l.js +4 -0
  260. package/dist/{zod-UPQf9SGn.js → zod-ChY6miG5.js} +71 -81
  261. package/package.json +12 -12
  262. package/src/__mocks__/requests.ts +2 -0
  263. package/src/components/app-config/user-config-form.tsx +29 -25
  264. package/src/components/chat/chat-utils.ts +11 -4
  265. package/src/components/data-table/__tests__/header-items.test.tsx +117 -0
  266. package/src/components/data-table/column-header.tsx +4 -2
  267. package/src/components/data-table/columns.tsx +2 -1
  268. package/src/components/data-table/data-table.tsx +7 -2
  269. package/src/components/data-table/header-items.tsx +63 -10
  270. package/src/components/dependency-graph/custom-node.tsx +11 -11
  271. package/src/components/dependency-graph/elements.ts +9 -4
  272. package/src/components/dependency-graph/panels.tsx +6 -4
  273. package/src/components/editor/Output.tsx +6 -1
  274. package/src/components/editor/ai/ai-completion-editor.tsx +135 -5
  275. package/src/components/editor/ai/completion-handlers.tsx +106 -22
  276. package/src/components/editor/cell/code/cell-editor.tsx +5 -0
  277. package/src/components/editor/chrome/panels/cache-panel.tsx +216 -0
  278. package/src/components/editor/chrome/panels/empty-state.tsx +3 -1
  279. package/src/components/editor/chrome/types.ts +66 -22
  280. package/src/components/editor/chrome/wrapper/app-chrome.tsx +2 -0
  281. package/src/components/editor/errors/auto-fix.tsx +138 -32
  282. package/src/components/editor/errors/fix-mode.ts +15 -0
  283. package/src/components/editor/navigation/__tests__/clipboard.test.ts +0 -5
  284. package/src/components/editor/navigation/clipboard.ts +2 -1
  285. package/src/components/editor/notebook-cell.tsx +20 -7
  286. package/src/components/editor/output/ConsoleOutput.tsx +27 -33
  287. package/src/components/editor/output/JsonOutput.tsx +9 -0
  288. package/src/components/editor/output/MarimoTracebackOutput.tsx +10 -7
  289. package/src/components/editor/output/__tests__/json-output.test.ts +43 -0
  290. package/src/components/editor/package-alert.tsx +3 -0
  291. package/src/components/forms/__tests__/form-utils.test.ts +4 -2
  292. package/src/components/icons/copy-icon.tsx +11 -5
  293. package/src/components/shortcuts/renderShortcut.tsx +3 -1
  294. package/src/components/ui/button.tsx +2 -0
  295. package/src/components/ui/confirmation-button.tsx +85 -0
  296. package/src/components/ui/switch.tsx +2 -0
  297. package/src/core/ai/context/providers/__tests__/datasource.test.ts +9 -1
  298. package/src/core/ai/context/providers/datasource.ts +25 -1
  299. package/src/core/ai/state.ts +6 -3
  300. package/src/core/ai/tools/__tests__/registry.test.ts +33 -8
  301. package/src/core/ai/tools/base.ts +81 -1
  302. package/src/core/ai/tools/registry.ts +36 -10
  303. package/src/core/ai/tools/sample-tool.ts +44 -8
  304. package/src/core/cache/requests.ts +5 -0
  305. package/src/core/cells/cells.ts +1 -1
  306. package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +2 -0
  307. package/src/core/codemirror/__tests__/replace-editor-content.test.ts +336 -0
  308. package/src/core/codemirror/find-replace/navigate.ts +2 -2
  309. package/src/core/codemirror/format.ts +2 -9
  310. package/src/core/codemirror/language/__tests__/sql.test.ts +24 -6
  311. package/src/core/codemirror/language/languages/python.ts +1 -3
  312. package/src/core/codemirror/language/languages/sql/sql.ts +23 -13
  313. package/src/core/codemirror/language/panel/panel.tsx +1 -6
  314. package/src/core/codemirror/language/utils.ts +3 -8
  315. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +21 -14
  316. package/src/core/codemirror/lsp/federated-lsp.ts +20 -9
  317. package/src/core/codemirror/lsp/notebook-lsp.ts +35 -29
  318. package/src/core/codemirror/lsp/types.ts +0 -13
  319. package/src/core/codemirror/replace-editor-content.ts +87 -0
  320. package/src/core/config/__tests__/config-schema.test.ts +3 -0
  321. package/src/core/config/config-schema.ts +8 -0
  322. package/src/core/config/feature-flag.tsx +2 -4
  323. package/src/core/errors/__tests__/errors.test.ts +1 -0
  324. package/src/core/errors/errors.ts +20 -6
  325. package/src/core/islands/bridge.ts +2 -0
  326. package/src/core/islands/main.ts +4 -0
  327. package/src/core/kernel/messages.ts +1 -0
  328. package/src/core/network/requests-network.ts +14 -0
  329. package/src/core/network/requests-static.ts +2 -0
  330. package/src/core/network/requests-toasting.ts +2 -0
  331. package/src/core/network/types.ts +5 -0
  332. package/src/core/saving/save-component.tsx +43 -36
  333. package/src/core/wasm/bridge.ts +2 -0
  334. package/src/core/websocket/useMarimoWebSocket.tsx +8 -0
  335. package/src/css/app/codemirror-completions.css +1 -1
  336. package/src/custom.d.ts +2 -0
  337. package/src/plugins/core/registerReactComponent.tsx +5 -1
  338. package/src/plugins/impl/DataTablePlugin.tsx +19 -19
  339. package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +32 -0
  340. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  341. package/src/plugins/impl/chat/chat-ui.tsx +17 -2
  342. package/src/plugins/impl/chat/types.ts +1 -1
  343. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +7 -2
  344. package/src/plugins/impl/plotly/__tests__/parse-from-template.test.ts +17 -0
  345. package/src/plugins/impl/plotly/parse-from-template.ts +2 -1
  346. package/src/utils/__tests__/formatting.test.ts +107 -0
  347. package/src/utils/__tests__/json-parser.test.ts +13 -0
  348. package/src/utils/copy.ts +6 -0
  349. package/src/utils/formatting.ts +51 -0
  350. package/src/utils/json/json-parser.ts +28 -3
  351. package/dist/any-language-editor-CVFQlioK.js +0 -156
  352. package/dist/apl-ChlaBfxB.js +0 -4
  353. package/dist/architecture-O4VJ6CD3-BVeaxUcM.js +0 -21
  354. package/dist/asciiarmor-CcJmm3l_.js +0 -4
  355. package/dist/asn1-ThRYxoBE.js +0 -4
  356. package/dist/assets/__vite-browser-external-Dv_SHu1h.js +0 -1
  357. package/dist/assets/worker-DVOR9oZG.js +0 -54
  358. package/dist/brainfuck-CEM0JgDn.js +0 -4
  359. package/dist/chunk-EXTU4WIE-DECT9AAK.js +0 -14
  360. package/dist/chunk-S3R3BYOJ-DMQ1yeyq.js +0 -386
  361. package/dist/classDiagram-KNZD7YFC-BG53O6Jt.js +0 -39
  362. package/dist/classDiagram-v2-RKCZMP56-BmKILsGU.js +0 -39
  363. package/dist/clojure-B7RHyE9t.js +0 -4
  364. package/dist/cmake-TeTMP4I5.js +0 -4
  365. package/dist/cobol-DI-mxUER.js +0 -4
  366. package/dist/coffeescript-DHUFLqWp.js +0 -4
  367. package/dist/commonlisp-SLiUrh1m.js +0 -4
  368. package/dist/crystal-B4fY1ZfJ.js +0 -4
  369. package/dist/css-Bdoq3TzK.js +0 -5
  370. package/dist/cypher-CBU182fp.js +0 -4
  371. package/dist/d-D8myDZeH.js +0 -4
  372. package/dist/data-grid-overlay-editor-qNmJk2x0.js +0 -135
  373. package/dist/diagram-QEK2KX5R-fu8Noi3H.js +0 -245
  374. package/dist/diff-DJF_UB7H.js +0 -4
  375. package/dist/dist-52-_pKoy.js +0 -6
  376. package/dist/dist-6DOMStFn.js +0 -6
  377. package/dist/dist-B334aW7p.js +0 -10
  378. package/dist/dist-BOI9lUz-.js +0 -12
  379. package/dist/dist-C06uhBzF.js +0 -6
  380. package/dist/dist-CGkpguCB.js +0 -6
  381. package/dist/dist-CrApzUED.js +0 -6
  382. package/dist/dist-Dp2GLdCl.js +0 -14
  383. package/dist/dist-WHFsbMDr.js +0 -6
  384. package/dist/dist-hyKcTPG9.js +0 -10
  385. package/dist/dtd-DY8q65lC.js +0 -4
  386. package/dist/dylan-CBLcjWCi.js +0 -4
  387. package/dist/ecl-BSXPNfOw.js +0 -4
  388. package/dist/eiffel-BJf0PQX-.js +0 -4
  389. package/dist/elm-DWQwPCZS.js +0 -4
  390. package/dist/erlang-BWBaGZ5e.js +0 -4
  391. package/dist/factor-DT1-MBPl.js +0 -5
  392. package/dist/forth-D9GDt3FB.js +0 -4
  393. package/dist/fortran-DHkRhDWw.js +0 -4
  394. package/dist/gas-7lQEOM0H.js +0 -4
  395. package/dist/gherkin-BLLyroYi.js +0 -4
  396. package/dist/gitGraph-ZV4HHKMB-z2v_cInC.js +0 -21
  397. package/dist/groovy-C-wabwj0.js +0 -4
  398. package/dist/haskell-DaxVQ_d1.js +0 -4
  399. package/dist/haxe-C2yLoC7h.js +0 -5
  400. package/dist/idl-DQBP8i7k.js +0 -4
  401. package/dist/info-63CPKGFF-GS4w6pCB.js +0 -21
  402. package/dist/infoDiagram-STP46IZ2-DE9YYPFg.js +0 -44
  403. package/dist/javascript-DRwFV9r5.js +0 -5
  404. package/dist/jinja2-CNoIpVmN.js +0 -4
  405. package/dist/julia-DXDf-GhP.js +0 -4
  406. package/dist/livescript-S2uhJQx7.js +0 -4
  407. package/dist/lua-Bvgs0y2G.js +0 -4
  408. package/dist/mathematica-D2zqfwIg.js +0 -4
  409. package/dist/mbox-SBcPaDuZ.js +0 -4
  410. package/dist/mirc-hkQc7sVF.js +0 -4
  411. package/dist/mllike-DRWPBlr9.js +0 -6
  412. package/dist/modelica-CO2ROGlP.js +0 -4
  413. package/dist/mscgen-BpX61bO6.js +0 -6
  414. package/dist/mumps-BCnFeIn6.js +0 -4
  415. package/dist/nsis-BaTOxlD1.js +0 -5
  416. package/dist/ntriples-zEo5BWjr.js +0 -4
  417. package/dist/octave-BE0RnCM9.js +0 -4
  418. package/dist/oz-C4_2Ttul.js +0 -4
  419. package/dist/packet-HUATNLJX-CjHqJIqk.js +0 -21
  420. package/dist/pascal-Q3jJucpw.js +0 -4
  421. package/dist/perl-DkXZIWHF.js +0 -4
  422. package/dist/pie-WTHONI2E-D67gLWtR.js +0 -21
  423. package/dist/pig-DCgEHdsu.js +0 -4
  424. package/dist/powershell-3rK_nRRJ.js +0 -236
  425. package/dist/powershell-Eo2-7MoM.js +0 -4
  426. package/dist/properties-C0IOX8WR.js +0 -4
  427. package/dist/protobuf--lGQUSRO.js +0 -4
  428. package/dist/pug-Cf8AQHMJ.js +0 -5
  429. package/dist/puppet-D7Z3dTJn.js +0 -4
  430. package/dist/python-FHIx_i8Y.js +0 -5
  431. package/dist/q-B7UA1feM.js +0 -4
  432. package/dist/r-Cc9R2A7N.js +0 -4
  433. package/dist/radar-NJJJXTRR-C-AZP_Te.js +0 -21
  434. package/dist/rpm-vhJNlrQ6.js +0 -5
  435. package/dist/ruby-CVluPY0M.js +0 -4
  436. package/dist/sas-A8DL8oy3.js +0 -4
  437. package/dist/scheme-6xHHcSXC.js +0 -4
  438. package/dist/shell-DHN-e5rf.js +0 -4
  439. package/dist/sieve-BuQwLY02.js +0 -4
  440. package/dist/smalltalk-BA4HPg2H.js +0 -4
  441. package/dist/sparql-Bf4yCuy3.js +0 -4
  442. package/dist/stateDiagram-v2-UMBNRL4Z-C_0FUzzk.js +0 -38
  443. package/dist/stex-D-I1cYeE.js +0 -5
  444. package/dist/stylus-BMeped2l.js +0 -4
  445. package/dist/swift-lwEdlZoC.js +0 -4
  446. package/dist/tcl-B03ipeqv.js +0 -4
  447. package/dist/toml-BLgrVtfu.js +0 -4
  448. package/dist/treemap-75Q7IDZK-DTvwfpWt.js +0 -21
  449. package/dist/troff-g6EjN2O2.js +0 -4
  450. package/dist/ttcn-Dzvba8jK.js +0 -4
  451. package/dist/ttcn-cfg-CadG0p1K.js +0 -4
  452. package/dist/turtle-DkXAMWo9.js +0 -4
  453. package/dist/vb-C5dCiel8.js +0 -4
  454. package/dist/vbscript-I4bDEQln.js +0 -4
  455. package/dist/velocity-mt0fDwFH.js +0 -4
  456. package/dist/verilog-Dxq3KJkc.js +0 -4
  457. package/dist/vhdl-Km0QUlV-.js +0 -4
  458. package/dist/webidl-B3lJ2MRL.js +0 -4
  459. package/dist/xquery-CcIxNPEe.js +0 -4
  460. package/dist/yacas-oMa-f-tN.js +0 -4
  461. package/dist/z80-D03Nvn6l.js +0 -4
  462. /package/dist/{apl-DZqo8Elt.js → apl-CEHentF4.js} +0 -0
  463. /package/dist/{asciiarmor-DTzHAIeX.js → asciiarmor-DURYiCS0.js} +0 -0
  464. /package/dist/{asn1-DrAXKsZH.js → asn1-ETAiEoXY.js} +0 -0
  465. /package/dist/{asterisk-oF4U3h48.js → asterisk-DTpbbXPb.js} +0 -0
  466. /package/dist/{brainfuck-BYgLey30.js → brainfuck-BWQep-SA.js} +0 -0
  467. /package/dist/{clojure-Bs2M3OUY.js → clojure-BzFapDkA.js} +0 -0
  468. /package/dist/{cmake-DpI8vxJN.js → cmake-DvlbIC8x.js} +0 -0
  469. /package/dist/{cobol-BQyrWo72.js → cobol-BrEI4cPR.js} +0 -0
  470. /package/dist/{coffeescript-9ke9UHmw.js → coffeescript-B6cvu8mO.js} +0 -0
  471. /package/dist/{common-keywords-BzgeAvH1.js → common-keywords-WqQm7W8t.js} +0 -0
  472. /package/dist/{commonlisp-DghUdrUH.js → commonlisp-BIT8PQqi.js} +0 -0
  473. /package/dist/{crystal-DEf_SInh.js → crystal-B_UcPArT.js} +0 -0
  474. /package/dist/{css-BzTU9lNO.js → css-dHbnt_zl.js} +0 -0
  475. /package/dist/{cypher-a2v0c11S.js → cypher-Dh3FOpL7.js} +0 -0
  476. /package/dist/{d-SAswny-M.js → d-CQD1IHee.js} +0 -0
  477. /package/dist/{diff-OJ-xLXcG.js → diff-CpF_IDx0.js} +0 -0
  478. /package/dist/{dtd-BsUf-rer.js → dtd-DYoNpy6c.js} +0 -0
  479. /package/dist/{duckdb-keywords-B0NOra5o.js → duckdb-keywords-CdIsl9L0.js} +0 -0
  480. /package/dist/{dylan-C0ZYngjn.js → dylan-Bc_2G1E-.js} +0 -0
  481. /package/dist/{ebnf-DF1xx0b_.js → ebnf-jGVT_YpN.js} +0 -0
  482. /package/dist/{ecl-Bsuvoouq.js → ecl-UIU-P-Ar.js} +0 -0
  483. /package/dist/{eiffel-DgfSpLi-.js → eiffel-C90Oyuix.js} +0 -0
  484. /package/dist/{elm-GNxDj-5E.js → elm-B9fWSySj.js} +0 -0
  485. /package/dist/{erlang-Ds3uY1kL.js → erlang-Ccff0UAn.js} +0 -0
  486. /package/dist/{fcl-CqBgSioc.js → fcl-CGR8NxAg.js} +0 -0
  487. /package/dist/{forth-JCaLysGk.js → forth-U1ROGcBY.js} +0 -0
  488. /package/dist/{fortran-Dc2AoKAl.js → fortran-3nOkjDmc.js} +0 -0
  489. /package/dist/{gas-Q4Uz82YW.js → gas-B_4H5FzV.js} +0 -0
  490. /package/dist/{gherkin-Dpxe49sQ.js → gherkin-B0eru5Uz.js} +0 -0
  491. /package/dist/{groovy-D8mTRCu6.js → groovy-dqjtZUVf.js} +0 -0
  492. /package/dist/{haskell-2_8cC4wY.js → haskell-DFzCCQzo.js} +0 -0
  493. /package/dist/{haxe-Bl9zkZlz.js → haxe-Da8Pj5RT.js} +0 -0
  494. /package/dist/{http-DKCqY6yS.js → http-1HACL_9s.js} +0 -0
  495. /package/dist/{idl-Dn-HNfGW.js → idl-D3NXs5iM.js} +0 -0
  496. /package/dist/{jinja2-JjFiAGKk.js → jinja2-gBHAxUdF.js} +0 -0
  497. /package/dist/{julia-R5wne8eu.js → julia-bG-6nJ-_.js} +0 -0
  498. /package/dist/{livescript-DSwokrYj.js → livescript-BlsRC8UJ.js} +0 -0
  499. /package/dist/{lua-CgXfrp2-.js → lua-BbDC0_5w.js} +0 -0
  500. /package/dist/{mathematica-BVli92MR.js → mathematica-YZTe3-PF.js} +0 -0
  501. /package/dist/{mbox-CMFlocdS.js → mbox-CY5idp08.js} +0 -0
  502. /package/dist/{mirc-BkW04Zpc.js → mirc-CbQuFZKk.js} +0 -0
  503. /package/dist/{mllike-DEjvHvNV.js → mllike-DsbHMX-5.js} +0 -0
  504. /package/dist/{modelica-CxDn-oje.js → modelica-CQuvsOQk.js} +0 -0
  505. /package/dist/{mscgen-D78wmE-w.js → mscgen-LIpBP9VR.js} +0 -0
  506. /package/dist/{mumps-Bi0IvPOV.js → mumps-Ct5NXoaG.js} +0 -0
  507. /package/dist/{nginx-DErPZFhX.js → nginx-Dvc62C8z.js} +0 -0
  508. /package/dist/{ntriples-Btyp6wRL.js → ntriples-jVkxWUuv.js} +0 -0
  509. /package/dist/{octave-CZA6-2F8.js → octave-jGOImUB0.js} +0 -0
  510. /package/dist/{oz-Bm6LSNfE.js → oz-Y0FKDMS2.js} +0 -0
  511. /package/dist/{pascal-B4J6a9BH.js → pascal-BaLtPWWB.js} +0 -0
  512. /package/dist/{perl-CzVqxS08.js → perl-CjfE0JLo.js} +0 -0
  513. /package/dist/{pig-Clh03cnn.js → pig-DE4epV99.js} +0 -0
  514. /package/dist/{properties-D7ch1Wyb.js → properties-CLyCG5C-.js} +0 -0
  515. /package/dist/{protobuf-DrkdrMPK.js → protobuf-BjBBs_V4.js} +0 -0
  516. /package/dist/{puppet-BtZG8zdO.js → puppet-ZImLuomA.js} +0 -0
  517. /package/dist/{python-B6FKOVIv.js → python-C9YN71pR.js} +0 -0
  518. /package/dist/{r-Dnvo5-96.js → r-DILmKWWW.js} +0 -0
  519. /package/dist/{rpm-B1DrgfnX.js → rpm-fpIsm1Kr.js} +0 -0
  520. /package/dist/{ruby-CelfUg17.js → ruby-BuiQI41h.js} +0 -0
  521. /package/dist/{sas-DfSQFMWG.js → sas-C76sJ1zF.js} +0 -0
  522. /package/dist/{scheme-BplhaWuO.js → scheme-DHjM-txv.js} +0 -0
  523. /package/dist/{shell-DqU5OS2c.js → shell--7NmGJ9p.js} +0 -0
  524. /package/dist/{sieve-BE4_IyGa.js → sieve-DaPvBv1M.js} +0 -0
  525. /package/dist/{smalltalk-B_WPL8Nx.js → smalltalk-KPvwrjCs.js} +0 -0
  526. /package/dist/{solr-DlJFg7H5.js → solr-PvZUtEDb.js} +0 -0
  527. /package/dist/{sparql-7XIlcOgW.js → sparql-CXSUIQer.js} +0 -0
  528. /package/dist/{spreadsheet-BdZSVwVp.js → spreadsheet-DPJdGPkx.js} +0 -0
  529. /package/dist/{sql-CCrq7lfJ.js → sql-Dp4ZLSIa.js} +0 -0
  530. /package/dist/{stex-BiFc8QAu.js → stex-CeXW4zzk.js} +0 -0
  531. /package/dist/{stylus-DlSH9xpH.js → stylus-BXcmrg9w.js} +0 -0
  532. /package/dist/{swift-e3tMTZgJ.js → swift-DD8I7hKP.js} +0 -0
  533. /package/dist/{tcl-DfZMC20G.js → tcl-B9Lp4GtA.js} +0 -0
  534. /package/dist/{textile-DaSeca5U.js → textile-qdiY0teq.js} +0 -0
  535. /package/dist/{tiddlywiki-dfoiz8pS.js → tiddlywiki-t32lkubq.js} +0 -0
  536. /package/dist/{tiki-yJbQzhma.js → tiki-B0qKrSMl.js} +0 -0
  537. /package/dist/{troff-FN_FrCXR.js → troff-105XJOEu.js} +0 -0
  538. /package/dist/{ttcn-7_i4HlyB.js → ttcn-1_BxDcM8.js} +0 -0
  539. /package/dist/{ttcn-cfg-B46AlBUV.js → ttcn-cfg-Cn_XgXiw.js} +0 -0
  540. /package/dist/{turtle-QQfeFveR.js → turtle-BI6LyfEu.js} +0 -0
  541. /package/dist/{vb-DToPVnLa.js → vb-BecoBfmr.js} +0 -0
  542. /package/dist/{vbscript-CtsNaTz4.js → vbscript-De-zpA4i.js} +0 -0
  543. /package/dist/{velocity-CAoNe6ns.js → velocity-DhlYJTrD.js} +0 -0
  544. /package/dist/{verilog-DrDOMiJq.js → verilog-BDZgxDOW.js} +0 -0
  545. /package/dist/{vhdl-DnO0OEPh.js → vhdl-CV0OKTbp.js} +0 -0
  546. /package/dist/{webidl-Or6d1ZfA.js → webidl-BOM1Fs0O.js} +0 -0
  547. /package/dist/{xquery-CEp_Mcpr.js → xquery-CltP_CGh.js} +0 -0
  548. /package/dist/{yacas-DgnYrSlp.js → yacas-Dch4E2Dg.js} +0 -0
  549. /package/dist/{z80-DlG_kyeB.js → z80-B5Yly27o.js} +0 -0
@@ -1615,7 +1615,7 @@ export const columnIdsAtom = atom((get) =>
1615
1615
  get(notebookAtom).cellIds.getColumnIds(),
1616
1616
  );
1617
1617
 
1618
- const cellDataAtom = atomFamily((cellId: CellId) =>
1618
+ export const cellDataAtom = atomFamily((cellId: CellId) =>
1619
1619
  atom((get) => get(notebookAtom).cellData[cellId]),
1620
1620
  );
1621
1621
  const cellRuntimeAtom = atomFamily((cellId: CellId) =>
@@ -45,6 +45,7 @@ exports[`snapshot all duplicate keymaps > default keymaps 2`] = `
45
45
  },
46
46
  {
47
47
  "key": "Backspace",
48
+ "preventDefault": true,
48
49
  "run": "deleteCharBackward",
49
50
  "shift": "deleteCharBackward",
50
51
  },
@@ -153,6 +154,7 @@ exports[`snapshot all duplicate keymaps > vim keymaps 2`] = `
153
154
  },
154
155
  {
155
156
  "key": "Backspace",
157
+ "preventDefault": true,
156
158
  "run": "deleteCharBackward",
157
159
  "shift": "deleteCharBackward",
158
160
  },
@@ -0,0 +1,336 @@
1
+ /* Copyright 2024 Marimo. All rights reserved. */
2
+
3
+ import { EditorState } from "@codemirror/state";
4
+ import { EditorView } from "@codemirror/view";
5
+ import { describe, expect, it, vi } from "vitest";
6
+ import { replaceEditorContent } from "../replace-editor-content";
7
+
8
+ describe("replaceEditorContent", () => {
9
+ it("should replace content when editor doesn't have focus", () => {
10
+ const view = new EditorView({
11
+ state: EditorState.create({
12
+ doc: "original content",
13
+ }),
14
+ });
15
+
16
+ // Editor doesn't have focus by default
17
+ expect(view.hasFocus).toBe(false);
18
+
19
+ replaceEditorContent(view, "new content");
20
+
21
+ expect(view.state.doc.toString()).toBe("new content");
22
+ // Cursor position is not preserved when not focused
23
+ expect(view.state.selection.main.head).toBe(0);
24
+
25
+ view.destroy();
26
+ });
27
+
28
+ it("should preserve cursor position when editor has focus (same line)", () => {
29
+ const view = new EditorView({
30
+ state: EditorState.create({
31
+ doc: "Hello World",
32
+ selection: { anchor: 6 }, // Position after "Hello "
33
+ }),
34
+ });
35
+
36
+ // Mock hasFocus to return true
37
+ Object.defineProperty(view, "hasFocus", {
38
+ get: () => true,
39
+ configurable: true,
40
+ });
41
+
42
+ expect(view.hasFocus).toBe(true);
43
+
44
+ // Replace with similar length content on same line
45
+ replaceEditorContent(view, "Goodbye Everyone");
46
+
47
+ expect(view.state.doc.toString()).toBe("Goodbye Everyone");
48
+
49
+ // Cursor should stay at the same column (6) since it's still within the line
50
+ const newCursorPos = view.state.selection.main.head;
51
+ expect(newCursorPos).toBe(6);
52
+
53
+ view.destroy();
54
+ });
55
+
56
+ it("should preserve cursor at beginning when focused", () => {
57
+ const view = new EditorView({
58
+ state: EditorState.create({
59
+ doc: "Hello World",
60
+ selection: { anchor: 0 }, // At beginning
61
+ }),
62
+ });
63
+
64
+ Object.defineProperty(view, "hasFocus", {
65
+ get: () => true,
66
+ configurable: true,
67
+ });
68
+
69
+ replaceEditorContent(view, "Goodbye Everyone");
70
+
71
+ expect(view.state.doc.toString()).toBe("Goodbye Everyone");
72
+ // Cursor should stay at beginning
73
+ expect(view.state.selection.main.head).toBe(0);
74
+
75
+ view.destroy();
76
+ });
77
+
78
+ it("should clamp cursor when line shrinks", () => {
79
+ const view = new EditorView({
80
+ state: EditorState.create({
81
+ doc: "Hello World",
82
+ selection: { anchor: 11 }, // At end (column 11)
83
+ }),
84
+ });
85
+
86
+ Object.defineProperty(view, "hasFocus", {
87
+ get: () => true,
88
+ configurable: true,
89
+ });
90
+
91
+ // Replace with shorter content
92
+ replaceEditorContent(view, "Goodbye");
93
+
94
+ expect(view.state.doc.toString()).toBe("Goodbye");
95
+ // Cursor should be clamped to end of line since column 11 > line length (7)
96
+ expect(view.state.selection.main.head).toBe(7);
97
+
98
+ view.destroy();
99
+ });
100
+
101
+ it("should handle empty document", () => {
102
+ const view = new EditorView({
103
+ state: EditorState.create({
104
+ doc: "",
105
+ }),
106
+ });
107
+
108
+ Object.defineProperty(view, "hasFocus", {
109
+ get: () => true,
110
+ configurable: true,
111
+ });
112
+
113
+ replaceEditorContent(view, "new content");
114
+
115
+ expect(view.state.doc.toString()).toBe("new content");
116
+ expect(view.state.selection.main.head).toBe(0);
117
+
118
+ view.destroy();
119
+ });
120
+
121
+ it("should do nothing when content is the same", () => {
122
+ const view = new EditorView({
123
+ state: EditorState.create({
124
+ doc: "same content",
125
+ selection: { anchor: 5 },
126
+ }),
127
+ });
128
+
129
+ const dispatchSpy = vi.spyOn(view, "dispatch");
130
+
131
+ replaceEditorContent(view, "same content");
132
+
133
+ // No dispatch should have been called
134
+ expect(dispatchSpy).not.toHaveBeenCalled();
135
+ expect(view.state.doc.toString()).toBe("same content");
136
+ expect(view.state.selection.main.head).toBe(5);
137
+
138
+ view.destroy();
139
+ });
140
+
141
+ it("should handle cursor in middle of focused document", () => {
142
+ const view = new EditorView({
143
+ state: EditorState.create({
144
+ doc: "The quick brown fox jumps",
145
+ selection: { anchor: 10 }, // After "The quick " (column 10)
146
+ }),
147
+ });
148
+
149
+ Object.defineProperty(view, "hasFocus", {
150
+ get: () => true,
151
+ configurable: true,
152
+ });
153
+
154
+ // Replace with longer content
155
+ replaceEditorContent(view, "The extremely quick brown fox jumps over");
156
+
157
+ expect(view.state.doc.toString()).toBe(
158
+ "The extremely quick brown fox jumps over",
159
+ );
160
+
161
+ // Cursor should stay at same column (10) on same line
162
+ const newCursorPos = view.state.selection.main.head;
163
+ expect(newCursorPos).toBe(10);
164
+
165
+ view.destroy();
166
+ });
167
+
168
+ it("should respect preserveCursor=false when focused", () => {
169
+ const view = new EditorView({
170
+ state: EditorState.create({
171
+ doc: "Hello World",
172
+ selection: { anchor: 6 },
173
+ }),
174
+ });
175
+
176
+ Object.defineProperty(view, "hasFocus", {
177
+ get: () => true,
178
+ configurable: true,
179
+ });
180
+
181
+ replaceEditorContent(view, "Goodbye Everyone", { preserveCursor: false });
182
+
183
+ expect(view.state.doc.toString()).toBe("Goodbye Everyone");
184
+ // When preserveCursor is false, cursor is not explicitly set
185
+ // so it defaults to 0
186
+ expect(view.state.selection.main.head).toBe(0);
187
+
188
+ view.destroy();
189
+ });
190
+
191
+ it("should handle newlines and multiline content", () => {
192
+ const view = new EditorView({
193
+ state: EditorState.create({
194
+ doc: "Line 1\nLine 2\nLine 3",
195
+ // Cursor at position 10: "Line 1\nLi|ne 2\nLine 3"
196
+ // Line 2, column 2 (after "Li")
197
+ selection: { anchor: 10 },
198
+ }),
199
+ });
200
+
201
+ Object.defineProperty(view, "hasFocus", {
202
+ get: () => true,
203
+ configurable: true,
204
+ });
205
+
206
+ replaceEditorContent(view, "Line 1\nLine 2 updated\nLine 3\nLine 4");
207
+
208
+ expect(view.state.doc.toString()).toBe(
209
+ "Line 1\nLine 2 updated\nLine 3\nLine 4",
210
+ );
211
+
212
+ // Cursor should stay on line 2 at column 2 (after "Li")
213
+ // "Line 1\nLi|ne 2 updated\nLine 3\nLine 4"
214
+ const newCursorPos = view.state.selection.main.head;
215
+ expect(newCursorPos).toBe(10); // Same position, line 2 column 2
216
+
217
+ view.destroy();
218
+ });
219
+
220
+ it("should move cursor up when line is deleted", () => {
221
+ const view = new EditorView({
222
+ state: EditorState.create({
223
+ doc: "Line 1\nLine 2\nLine 3",
224
+ selection: { anchor: 14 }, // Line 3, start of line
225
+ }),
226
+ });
227
+
228
+ Object.defineProperty(view, "hasFocus", {
229
+ get: () => true,
230
+ configurable: true,
231
+ });
232
+
233
+ // Replace with only 2 lines (line 3 is deleted)
234
+ replaceEditorContent(view, "Line 1\nLine 2");
235
+
236
+ expect(view.state.doc.toString()).toBe("Line 1\nLine 2");
237
+
238
+ // Cursor should move to end of last available line
239
+ const newCursorPos = view.state.selection.main.head;
240
+ expect(newCursorPos).toBe(13); // End of "Line 1\nLine 2"
241
+
242
+ view.destroy();
243
+ });
244
+
245
+ it("should stay at end of line when new line is added", () => {
246
+ const view = new EditorView({
247
+ state: EditorState.create({
248
+ doc: "Hello World",
249
+ selection: { anchor: 11 }, // At end (column 11)
250
+ }),
251
+ });
252
+
253
+ Object.defineProperty(view, "hasFocus", {
254
+ get: () => true,
255
+ configurable: true,
256
+ });
257
+
258
+ replaceEditorContent(view, "Hello World\nSome new line");
259
+
260
+ expect(view.state.doc.toString()).toBe("Hello World\nSome new line");
261
+ const newCursorPos = view.state.selection.main.head;
262
+ expect(newCursorPos).toBe(11);
263
+
264
+ view.destroy();
265
+ });
266
+
267
+ it("should preserve cursor on same line with column clamping", () => {
268
+ const view = new EditorView({
269
+ state: EditorState.create({
270
+ doc: "def function_with_long_name():",
271
+ selection: { anchor: 25 }, // Near end of line
272
+ }),
273
+ });
274
+
275
+ Object.defineProperty(view, "hasFocus", {
276
+ get: () => true,
277
+ configurable: true,
278
+ });
279
+
280
+ // Replace with shorter line
281
+ replaceEditorContent(view, "def fn():");
282
+
283
+ expect(view.state.doc.toString()).toBe("def fn():");
284
+
285
+ // Cursor should be clamped to end of shorter line
286
+ const newCursorPos = view.state.selection.main.head;
287
+ expect(newCursorPos).toBe(9); // End of "def fn():"
288
+
289
+ view.destroy();
290
+ });
291
+
292
+ it("should handle selection range (collapses to head position)", () => {
293
+ const view = new EditorView({
294
+ state: EditorState.create({
295
+ doc: "Hello World",
296
+ selection: { anchor: 0, head: 5 }, // "Hello" selected
297
+ }),
298
+ });
299
+
300
+ Object.defineProperty(view, "hasFocus", {
301
+ get: () => true,
302
+ configurable: true,
303
+ });
304
+
305
+ replaceEditorContent(view, "Goodbye Everyone");
306
+
307
+ expect(view.state.doc.toString()).toBe("Goodbye Everyone");
308
+ // Selection head (5) is preserved as cursor position
309
+ expect(view.state.selection.main.head).toBe(5);
310
+ expect(view.state.selection.main.anchor).toBe(5);
311
+
312
+ view.destroy();
313
+ });
314
+
315
+ it("should handle replacing with empty string", () => {
316
+ const view = new EditorView({
317
+ state: EditorState.create({
318
+ doc: "Some content to clear",
319
+ selection: { anchor: 10 },
320
+ }),
321
+ });
322
+
323
+ Object.defineProperty(view, "hasFocus", {
324
+ get: () => true,
325
+ configurable: true,
326
+ });
327
+
328
+ replaceEditorContent(view, "");
329
+
330
+ expect(view.state.doc.toString()).toBe("");
331
+ // Cursor should be at position 0 (only valid position in empty doc)
332
+ expect(view.state.selection.main.head).toBe(0);
333
+
334
+ view.destroy();
335
+ });
336
+ });
@@ -4,6 +4,7 @@ import { SearchQuery } from "@codemirror/search";
4
4
  import { EditorSelection } from "@codemirror/state";
5
5
  import { EditorView } from "@codemirror/view";
6
6
  import { getAllEditorViews } from "@/core/cells/cells";
7
+ import { replaceEditorContent } from "@/core/codemirror/replace-editor-content";
7
8
  import { store } from "@/core/state/jotai";
8
9
  import { asQueryCreator, type QueryType } from "./query";
9
10
  import { findReplaceAtom } from "./state";
@@ -127,8 +128,7 @@ export const replaceAll = searchCommand(({ query }) => {
127
128
 
128
129
  const prevDoc = view.state.doc.toString();
129
130
  undoHandlers.push(() => {
130
- view.dispatch({
131
- changes: [{ from: 0, to: view.state.doc.length, insert: prevDoc }],
131
+ replaceEditorContent(view, prevDoc, {
132
132
  userEvent: "input.replace.all",
133
133
  });
134
134
  });
@@ -17,6 +17,7 @@ import {
17
17
  getEditorCodeAsPython,
18
18
  updateEditorCodeFromPython,
19
19
  } from "./language/utils";
20
+ import { replaceEditorContent } from "./replace-editor-content";
20
21
 
21
22
  export const formattingChangeEffect = StateEffect.define<boolean>();
22
23
 
@@ -106,15 +107,7 @@ export async function formatSQL(editor: EditorView) {
106
107
  });
107
108
 
108
109
  // Update editor with formatted SQL
109
- const doc = editor.state.doc;
110
-
111
- // Noop if the code is the same
112
- if (doc.toString() === formattedSQL) {
113
- return;
114
- }
115
-
116
- editor.dispatch({
117
- changes: { from: 0, to: doc.length, insert: formattedSQL },
110
+ replaceEditorContent(editor, formattedSQL, {
118
111
  effects: [formattingChangeEffect.of(true)],
119
112
  });
120
113
  }
@@ -8,6 +8,12 @@ import { PostgreSQL } from "@codemirror/lang-sql";
8
8
  import { EditorState, type Extension } from "@codemirror/state";
9
9
  import { DuckDBDialect } from "@marimo-team/codemirror-sql/dialects";
10
10
  import { afterEach, beforeEach, describe, expect, it } from "vitest";
11
+ import type { CellId } from "@/core/cells/ids";
12
+ import type {
13
+ CompletionConfig,
14
+ DiagnosticsConfig,
15
+ LSPConfig,
16
+ } from "@/core/config/config-schema";
11
17
  import type { DataSourceConnection } from "@/core/datasets/data-source-connections";
12
18
  import {
13
19
  dataSourceConnectionsAtom,
@@ -16,7 +22,9 @@ import {
16
22
  import { type ConnectionName, DUCKDB_ENGINE } from "@/core/datasets/engines";
17
23
  import { datasetsAtom } from "@/core/datasets/state";
18
24
  import type { DatasetsState } from "@/core/datasets/types";
25
+ import type { HotkeyProvider } from "@/core/hotkeys/hotkeys";
19
26
  import { store } from "@/core/state/jotai";
27
+ import type { PlaceholderType } from "../../config/types";
20
28
  import { TestSQLCompletionStore } from "../languages/sql/completion-store";
21
29
  import {
22
30
  SQLLanguageAdapter,
@@ -28,6 +36,16 @@ const adapter = new SQLLanguageAdapter();
28
36
 
29
37
  const TEST_ENGINE = "test_engine" as ConnectionName;
30
38
 
39
+ const TEST_EXTENSION_ARGS = [
40
+ {} as CellId,
41
+ {} as CompletionConfig,
42
+ {} as HotkeyProvider,
43
+ {} as PlaceholderType,
44
+ {} as LSPConfig & {
45
+ diagnostics: DiagnosticsConfig;
46
+ },
47
+ ] as const;
48
+
31
49
  describe("SQLLanguageAdapter", () => {
32
50
  describe("defaultMetadata", () => {
33
51
  it("should be set", () => {
@@ -1716,7 +1734,7 @@ describe("tablesCompletionSource", () => {
1716
1734
  const ctx = createCompletionContext(state, 14);
1717
1735
 
1718
1736
  const adapter = new SQLLanguageAdapter();
1719
- const extensions = adapter.getExtension();
1737
+ const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
1720
1738
  const completion = getCompletion(extensions);
1721
1739
 
1722
1740
  expect(completion).toBeDefined();
@@ -1779,7 +1797,7 @@ describe("tablesCompletionSource", () => {
1779
1797
  const ctx = createCompletionContext(state, 15, "u", 14);
1780
1798
 
1781
1799
  const adapter = new SQLLanguageAdapter();
1782
- const extensions = adapter.getExtension();
1800
+ const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
1783
1801
  const completion = getCompletion(extensions);
1784
1802
 
1785
1803
  expect(completion).toBeDefined();
@@ -1810,7 +1828,7 @@ describe("tablesCompletionSource", () => {
1810
1828
  const ctx = createCompletionContext(state, 15, "d", 14);
1811
1829
 
1812
1830
  const adapter = new SQLLanguageAdapter();
1813
- const extensions = adapter.getExtension();
1831
+ const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
1814
1832
  const completion = getCompletion(extensions);
1815
1833
 
1816
1834
  expect(completion).toBeDefined();
@@ -1843,7 +1861,7 @@ describe("tablesCompletionSource", () => {
1843
1861
  const ctx = createCompletionContext(state, 3, "SEL", 0);
1844
1862
 
1845
1863
  const adapter = new SQLLanguageAdapter();
1846
- const extensions = adapter.getExtension();
1864
+ const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
1847
1865
  const completion = getCompletion(extensions);
1848
1866
 
1849
1867
  expect(completion).toBeDefined();
@@ -1874,7 +1892,7 @@ describe("tablesCompletionSource", () => {
1874
1892
  const ctx = createCompletionContext(state, 14, ".n", 12);
1875
1893
 
1876
1894
  const adapter = new SQLLanguageAdapter();
1877
- const extensions = adapter.getExtension();
1895
+ const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
1878
1896
  const completion = getCompletion(extensions);
1879
1897
 
1880
1898
  expect(completion).toBeDefined();
@@ -1906,7 +1924,7 @@ describe("tablesCompletionSource", () => {
1906
1924
  describe("variableCompletionSource", () => {
1907
1925
  it("should be included in extension overrides", () => {
1908
1926
  const adapter = new SQLLanguageAdapter();
1909
- const extensions = adapter.getExtension();
1927
+ const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
1910
1928
  const completion = getCompletion(extensions);
1911
1929
 
1912
1930
  expect(completion).toBeDefined();
@@ -128,7 +128,6 @@ const pylspClient = once((lspConfig: LSPConfig) => {
128
128
  return new NotebookLanguageServerClient(
129
129
  new LanguageServerClient({
130
130
  ...lspClientOpts,
131
- autoClose: false,
132
131
  }),
133
132
  settings,
134
133
  );
@@ -146,7 +145,6 @@ const tyLspClient = once((_: LSPConfig) => {
146
145
  return new NotebookLanguageServerClient(
147
146
  new LanguageServerClient({
148
147
  ...lspClientOpts,
149
- autoClose: false,
150
148
  getWorkspaceConfiguration: (_) => [{ disableLanguageServices: true }],
151
149
  }),
152
150
  {},
@@ -165,7 +163,6 @@ const pyrightClient = once((_: LSPConfig) => {
165
163
  return new NotebookLanguageServerClient(
166
164
  new LanguageServerClient({
167
165
  ...lspClientOpts,
168
- autoClose: false,
169
166
  }),
170
167
  {},
171
168
  );
@@ -242,6 +239,7 @@ export class PythonLanguageAdapter implements LanguageAdapter<{}> {
242
239
  client: client as unknown as LanguageServerClient,
243
240
  languageId: "python",
244
241
  allowHTMLContent: true,
242
+ useSnippetOnCompletion: false,
245
243
  hoverConfig: hoverOptions,
246
244
  completionConfig: autocompleteOptions,
247
245
  // Default to false
@@ -18,8 +18,14 @@ import {
18
18
  } from "@marimo-team/codemirror-sql";
19
19
  import { DuckDBDialect } from "@marimo-team/codemirror-sql/dialects";
20
20
  import dedent from "string-dedent";
21
+ import type { CellId } from "@/core/cells/ids";
21
22
  import { cellIdState } from "@/core/codemirror/cells/state";
22
- import { getFeatureFlag } from "@/core/config/feature-flag";
23
+ import type { PlaceholderType } from "@/core/codemirror/config/types";
24
+ import type {
25
+ CompletionConfig,
26
+ DiagnosticsConfig,
27
+ LSPConfig,
28
+ } from "@/core/config/config-schema";
23
29
  import {
24
30
  dataSourceConnectionsAtom,
25
31
  setLatestEngineSelected,
@@ -30,6 +36,7 @@ import {
30
36
  INTERNAL_SQL_ENGINES,
31
37
  } from "@/core/datasets/engines";
32
38
  import { ValidateSQL } from "@/core/datasets/request-registry";
39
+ import type { HotkeyProvider } from "@/core/hotkeys/hotkeys";
33
40
  import type { ValidateSQLResult } from "@/core/kernel/messages";
34
41
  import { store } from "@/core/state/jotai";
35
42
  import { resolvedThemeAtom } from "@/theme/useTheme";
@@ -77,17 +84,10 @@ export class SQLLanguageAdapter
77
84
  implements LanguageAdapter<SQLLanguageAdapterMetadata>
78
85
  {
79
86
  readonly type = "sql";
80
- sqlLinterEnabled: boolean;
81
87
  sqlModeEnabled: boolean;
82
88
 
83
89
  constructor() {
84
- try {
85
- this.sqlLinterEnabled = getFeatureFlag("sql_linter");
86
- this.sqlModeEnabled = getFeatureFlag("sql_mode");
87
- } catch {
88
- this.sqlLinterEnabled = false;
89
- this.sqlModeEnabled = false;
90
- }
90
+ this.sqlModeEnabled = true;
91
91
  }
92
92
 
93
93
  get defaultMetadata(): SQLLanguageAdapterMetadata {
@@ -215,7 +215,13 @@ export class SQLLanguageAdapter
215
215
  return commentLines;
216
216
  }
217
217
 
218
- getExtension(): Extension[] {
218
+ getExtension(
219
+ _cellId: CellId,
220
+ _completionConfig: CompletionConfig,
221
+ _hotkeys: HotkeyProvider,
222
+ _placeholderType: PlaceholderType,
223
+ lspConfig: LSPConfig & { diagnostics: DiagnosticsConfig },
224
+ ): Extension[] {
219
225
  const extensions = [
220
226
  // This can be updated with a dispatch effect
221
227
  sqlConfigCompartment.of(sql({ dialect: DEFAULT_DIALECT })),
@@ -245,7 +251,9 @@ export class SQLLanguageAdapter
245
251
  }),
246
252
  ];
247
253
 
248
- if (this.sqlLinterEnabled) {
254
+ const sqlLinterEnabled = lspConfig?.diagnostics?.sql_linter ?? false;
255
+
256
+ if (sqlLinterEnabled) {
249
257
  const theme = store.get(resolvedThemeAtom);
250
258
  const parser = new CustomSqlParser({
251
259
  getParserOptions: (state: EditorState) => {
@@ -666,8 +674,10 @@ function sqlValidationExtension(): Extension {
666
674
  let lastValidationRequest: string | null = null;
667
675
 
668
676
  return EditorView.updateListener.of((update) => {
669
- // Only run validation if the document has changed and editor is focused
670
- if (!update.docChanged || !update.view.hasFocus) {
677
+ // Only run validation if the document has changed
678
+ // The extension only runs on keypress, so we don't need to check for focus
679
+ // This lets AI completions / external calls trigger validation
680
+ if (!update.docChanged) {
671
681
  return;
672
682
  }
673
683
 
@@ -5,7 +5,6 @@ import { Button } from "@/components/ui/button";
5
5
  import { Checkbox } from "@/components/ui/checkbox";
6
6
  import { Tooltip, TooltipProvider } from "@/components/ui/tooltip";
7
7
  import { normalizeName } from "@/core/cells/names";
8
- import { getFeatureFlag } from "@/core/config/feature-flag";
9
8
  import { type ConnectionName, DUCKDB_ENGINE } from "@/core/datasets/engines";
10
9
  import { useAutoGrowInputProps } from "@/hooks/useAutoGrowInputProps";
11
10
  import { formatSQL } from "../../format";
@@ -71,8 +70,6 @@ export const LanguagePanelComponent: React.FC<{
71
70
  updateSQLDialectFromConnection(view, engine);
72
71
  };
73
72
 
74
- const sqlModeEnabled = getFeatureFlag("sql_mode");
75
-
76
73
  actions = (
77
74
  <div className="flex flex-1 gap-2 items-center">
78
75
  <label className="flex gap-2 items-center">
@@ -98,9 +95,7 @@ export const LanguagePanelComponent: React.FC<{
98
95
  onChange={switchEngine}
99
96
  />
100
97
  <div className="flex items-center gap-2 ml-auto">
101
- {sqlModeEnabled && metadata.engine === DUCKDB_ENGINE && (
102
- <SQLModeSelect />
103
- )}
98
+ {metadata.engine === DUCKDB_ENGINE && <SQLModeSelect />}
104
99
  <Tooltip content="Format SQL">
105
100
  <Button
106
101
  variant="text"
@@ -2,6 +2,7 @@
2
2
 
3
3
  import type { EditorState } from "@codemirror/state";
4
4
  import type { EditorView } from "@codemirror/view";
5
+ import { replaceEditorContent } from "../replace-editor-content";
5
6
  import { languageAdapterState } from "./extension";
6
7
  import { languageMetadataField } from "./metadata";
7
8
 
@@ -36,14 +37,8 @@ export function updateEditorCodeFromPython(
36
37
  ): string {
37
38
  const languageAdapter = editor.state.field(languageAdapterState);
38
39
  const [code] = languageAdapter.transformIn(pythonCode);
39
- const doc = editor.state.doc;
40
- // Noop if the code is the same
41
- if (doc.toString() === code) {
42
- return code;
43
- }
44
- editor.dispatch({
45
- changes: { from: 0, to: doc.length, insert: code },
46
- });
40
+ // Use replaceEditorContent which preserves cursor position when focused
41
+ replaceEditorContent(editor, code);
47
42
  return code;
48
43
  }
49
44