@marimo-team/islands 0.23.7-dev5 → 0.23.7-dev50

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 (537) hide show
  1. package/dist/{ConnectedDataExplorerComponent-PmilQqXR.js → ConnectedDataExplorerComponent-2lBNiUv6.js} +14 -14
  2. package/dist/{ErrorBoundary-Da4UeYxT.js → ErrorBoundary-D3wrPNma.js} +1 -1
  3. package/dist/{any-language-editor-BVR0l12r.js → any-language-editor-VWs_7v27.js} +15 -15
  4. package/dist/apl-Bdc61P1y.js +4 -0
  5. package/dist/{arc-CHF8PiiF.js → arc-DfkSnvZm.js} +2 -2
  6. package/dist/{architecture-7HQA4BMR-D0JB_3hE.js → architecture-7HQA4BMR-CS9jOrqM.js} +1 -1
  7. package/dist/{architectureDiagram-VXUJARFQ-BXQEUDtK.js → architectureDiagram-VXUJARFQ-CXVJxFhH.js} +16 -16
  8. package/dist/asciiarmor-DVRHDGzT.js +4 -0
  9. package/dist/asn1-BmuKfkfu.js +4 -0
  10. package/dist/assets/__vite-browser-external-CAdMKBac.js +1 -0
  11. package/dist/assets/worker-CpBbwbQo.js +73 -0
  12. package/dist/{blockDiagram-VD42YOAC-DhJe-Y9i.js → blockDiagram-VD42YOAC-DGDaxR8I.js} +11 -11
  13. package/dist/brainfuck-DPrRpyTV.js +4 -0
  14. package/dist/{button-CA5pI2YF.js → button-Dj4BTre0.js} +5 -0
  15. package/dist/{c4Diagram-YG6GDRKO-9dSfzOFR.js → c4Diagram-YG6GDRKO-C2hc6ne8.js} +5 -5
  16. package/dist/{capabilities-6laDasij.js → capabilities-C9rrYCzf.js} +1 -1
  17. package/dist/{channel-MqYIiKgS.js → channel-BBoIVUrJ.js} +1 -1
  18. package/dist/{chat-ui-B-gbqk_F.js → chat-ui-D8ZxPNTR.js} +626 -234
  19. package/dist/{check-CFM2mVDr.js → check-BcUIXnUT.js} +1 -1
  20. package/dist/{chunk-4BX2VUAB-BwfrWBqN.js → chunk-4BX2VUAB-CzXltWHN.js} +1 -1
  21. package/dist/{chunk-55IACEB6-D8THf2mi.js → chunk-55IACEB6-B-1mjMMC.js} +1 -1
  22. package/dist/{chunk-5FQGJX7Z-CO1e63h_.js → chunk-5FQGJX7Z-BOg95xG5.js} +2 -2
  23. package/dist/{chunk-ABZYJK2D-BrBb_0yY.js → chunk-ABZYJK2D-D0cLy8Bb.js} +2 -2
  24. package/dist/{chunk-ATLVNIR6-D-0XqNah.js → chunk-ATLVNIR6-BXsEjlHF.js} +2 -2
  25. package/dist/{chunk-B4BG7PRW-8iRKvugR.js → chunk-B4BG7PRW-Q1usn6T3.js} +7 -7
  26. package/dist/{chunk-CVBHYZKI-B6xhgaBd.js → chunk-CVBHYZKI-B_c5YBcW.js} +1 -1
  27. package/dist/{chunk-DI55MBZ5-C0_2D4m4.js → chunk-DI55MBZ5-D1qLYNrb.js} +6 -6
  28. package/dist/{chunk-EXTU4WIE-Jiw9ca1u.js → chunk-EXTU4WIE-BKNXdLmD.js} +2 -2
  29. package/dist/{chunk-FMBD7UC4-CHdus51S.js → chunk-FMBD7UC4-Ie8M9q0W.js} +1 -1
  30. package/dist/{chunk-HN2XXSSU-2Vfbq-kU.js → chunk-HN2XXSSU-E3n-Ys7Z.js} +1 -1
  31. package/dist/{chunk-JA3XYJ7Z-6wbaigKe.js → chunk-JA3XYJ7Z-D6c6cOBG.js} +3 -3
  32. package/dist/{chunk-JZLCHNYA-_rfptlUP.js → chunk-JZLCHNYA-BvsPHJmL.js} +6 -6
  33. package/dist/{chunk-MI3HLSF2-Do0-KRc0.js → chunk-MI3HLSF2-CUYEasXO.js} +1 -1
  34. package/dist/{chunk-N4CR4FBY-DIZG9dVD.js → chunk-N4CR4FBY-8ycT-O9a.js} +7 -7
  35. package/dist/{chunk-QN33PNHL-Cc64y40m.js → chunk-QN33PNHL-Bb-eUBW3.js} +2 -2
  36. package/dist/{chunk-QXUST7PY-BDG0-0Or.js → chunk-QXUST7PY-DV8yRwBd.js} +10 -10
  37. package/dist/{chunk-QZHKN3VN-B_Mdb8GC.js → chunk-QZHKN3VN-DRjXVwuJ.js} +1 -1
  38. package/dist/{chunk-S3R3BYOJ-DphMP0FA.js → chunk-S3R3BYOJ-mQeCz5CE.js} +4 -4
  39. package/dist/{chunk-TZMSLE5B-C9LUoYkc.js → chunk-TZMSLE5B-BqW10dHe.js} +3 -3
  40. package/dist/classDiagram-2ON5EDUG--Yh__LHb.js +30 -0
  41. package/dist/classDiagram-v2-WZHVMYZB-BC7X7Xtc.js +30 -0
  42. package/dist/{clike-sBZrGeF8.js → clike-DTxNUn7l.js} +1 -1
  43. package/dist/clojure-DEttQW5T.js +4 -0
  44. package/dist/cmake-jNlx_DaM.js +4 -0
  45. package/dist/cobol-BvvIm5MJ.js +4 -0
  46. package/dist/{code-block-37QAKDTI-0JNwiPGv.js → code-block-37QAKDTI-BsGy1AOJ.js} +1 -1
  47. package/dist/{code-visibility-D8E8Ctez.js → code-visibility-DjsEQuRb.js} +1403 -1080
  48. package/dist/coffeescript-DTpBMyFU.js +4 -0
  49. package/dist/commonlisp-BmmUG8jb.js +4 -0
  50. package/dist/{copy-TGGAUEWp.js → copy-DLf4aN7I.js} +2 -2
  51. package/dist/{cose-bilkent-S5V4N54A-DXHZkJKX.js → cose-bilkent-S5V4N54A-kjoZoid4.js} +2 -2
  52. package/dist/crystal-BxyqmEWC.js +4 -0
  53. package/dist/css-BGoCtuG3.js +4 -0
  54. package/dist/cypher-BmCbdl3u.js +4 -0
  55. package/dist/d-CFrlbjZt.js +4 -0
  56. package/dist/{dagre-6UL2VRFP-tH87fkPA.js → dagre-6UL2VRFP-DRBWoQUw.js} +10 -10
  57. package/dist/{data-grid-overlay-editor-CWUN78-s.js → data-grid-overlay-editor-efe5ZagF.js} +2 -2
  58. package/dist/{diagram-PSM6KHXK-2VjPSCDn.js → diagram-PSM6KHXK-H66ATWP2.js} +18 -18
  59. package/dist/{diagram-QEK2KX5R-CiLmNyta.js → diagram-QEK2KX5R-DItl5Wns.js} +14 -14
  60. package/dist/{diagram-S2PKOQOG-Zha_1CLx.js → diagram-S2PKOQOG-CtuW_ZuL.js} +14 -14
  61. package/dist/diff-D6XwL6P8.js +4 -0
  62. package/dist/{dist-Brkazupz.js → dist--sWVZwjW.js} +1 -1
  63. package/dist/{dist-FN0ZA_8F.js → dist-21ButRCu.js} +1 -1
  64. package/dist/{dist-BetEKbPG.js → dist-B8RaFTRF.js} +1 -1
  65. package/dist/dist-BoHGySTM.js +5 -0
  66. package/dist/dist-ByAz19Qc.js +5 -0
  67. package/dist/dist-C93EysN4.js +5 -0
  68. package/dist/{dist-BHnX0ia_.js → dist-CY-lVor6.js} +1 -1
  69. package/dist/{dist-YP-G7W0f.js → dist-CYDuv4bR.js} +1 -1
  70. package/dist/{dist-CMjD5MQb.js → dist-Cfo5EE2t.js} +1 -1
  71. package/dist/dist-CjivSDvN.js +5 -0
  72. package/dist/dist-Cqwx-MH7.js +5 -0
  73. package/dist/{dist-ESg7xyoD.js → dist-D3ZI9nhS.js} +2 -2
  74. package/dist/{dist-DkC6YEo0.js → dist-DMZNjfX4.js} +1 -1
  75. package/dist/{dist-ChC1BhqM.js → dist-DbpcoFAV.js} +1 -1
  76. package/dist/dist-FUNenbiQ.js +5 -0
  77. package/dist/{dist-BEOU2g1b.js → dist-zhSud5X3.js} +1 -1
  78. package/dist/{dockerfile-COvlVLcE.js → dockerfile-twL37N91.js} +1 -1
  79. package/dist/dtd-Bw0lRN0-.js +4 -0
  80. package/dist/dylan-B55eBHTt.js +4 -0
  81. package/dist/ecl-C8G4p0wn.js +4 -0
  82. package/dist/eiffel-BmH46VJl.js +4 -0
  83. package/dist/elm-DhzeFqkl.js +4 -0
  84. package/dist/{erDiagram-Q2GNP2WA-biHZS05w.js → erDiagram-Q2GNP2WA--19X2kU5.js} +14 -14
  85. package/dist/erlang-CY-wdlsU.js +4 -0
  86. package/dist/{error-banner-DnBPzEWg.js → error-banner-CVkfBUT3.js} +2 -2
  87. package/dist/{esm-Dd1z1auZ.js → esm-CWp0KQeK.js} +1 -1
  88. package/dist/{esm-CYEyrE3Y.js → esm-DjNnlmpf.js} +96 -96
  89. package/dist/{extends-CzJgxo2J.js → extends-vAi97cpa.js} +4 -4
  90. package/dist/{factor-C2GT7jfQ.js → factor-CajWS6mS.js} +1 -1
  91. package/dist/factor-DWkgl0xw.js +4 -0
  92. package/dist/{flowDiagram-NV44I4VS-CWWlUpBR.js → flowDiagram-NV44I4VS-DQmWlo7f.js} +16 -16
  93. package/dist/{formats-CgaK7Gmx.js → formats-CpgZM9BM.js} +3 -3
  94. package/dist/forth-Cij_ie2t.js +4 -0
  95. package/dist/fortran-Br3X9cfm.js +4 -0
  96. package/dist/{ganttDiagram-JELNMOA3-D7B2c4Z9.js → ganttDiagram-JELNMOA3-BOGXJ8Lk.js} +7 -7
  97. package/dist/gas-DYsGcMN2.js +4 -0
  98. package/dist/gherkin-eVgXQ0fQ.js +4 -0
  99. package/dist/{gitGraph-G5XIXVHT-BdepdFa_.js → gitGraph-G5XIXVHT-DGlbae5m.js} +1 -1
  100. package/dist/{gitGraphDiagram-V2S2FVAM-CtLvNR1S.js → gitGraphDiagram-V2S2FVAM-DjzxfF0P.js} +14 -14
  101. package/dist/{glide-data-editor-CvlvtPWJ.js → glide-data-editor-DucgdjRo.js} +13 -13
  102. package/dist/groovy-_NFHIXG7.js +4 -0
  103. package/dist/haskell-D6xNG_bH.js +4 -0
  104. package/dist/haxe-sU_rzAwn.js +5 -0
  105. package/dist/{html-to-image-hMMPiNe_.js → html-to-image-DaPPaVDP.js} +2395 -2301
  106. package/dist/idl-Ds_VbrUx.js +4 -0
  107. package/dist/{info-VBDWY6EO--JNA2rNu.js → info-VBDWY6EO-D2lvLLw5.js} +1 -1
  108. package/dist/{infoDiagram-HS3SLOUP-BbZyOxsP.js → infoDiagram-HS3SLOUP-ChNufFsP.js} +12 -12
  109. package/dist/{input-BAOe64zx.js → input-D4kjoQUB.js} +8 -6
  110. package/dist/javascript-CztfIl0i.js +4 -0
  111. package/dist/{journeyDiagram-XKPGCS4Q-BU2mjjzl.js → journeyDiagram-XKPGCS4Q-BO_O4Ij1.js} +6 -6
  112. package/dist/julia-DDv40QMV.js +4 -0
  113. package/dist/{kanban-definition-3W4ZIXB7-BlmczUuw.js → kanban-definition-3W4ZIXB7-CPpiiiWk.js} +11 -11
  114. package/dist/{katex-qPqrBHZ8.js → katex-9-9QRhxz.js} +1 -1
  115. package/dist/{label-BCWi-Oqu.js → label-BLqV33b1.js} +2 -2
  116. package/dist/{line-BWRi3U3S.js → line-C5s_12ee.js} +3 -3
  117. package/dist/{linear-DnHwODZa.js → linear-2NnK4cxi.js} +2 -2
  118. package/dist/livescript-BEOngLLc.js +4 -0
  119. package/dist/{loader-BvW0-YWZ.js → loader-Dr8Qem8p.js} +1 -1
  120. package/dist/lua-9-7BhQ4Y.js +4 -0
  121. package/dist/main.js +1299 -1260
  122. package/dist/mathematica-DDa0Pfxm.js +4 -0
  123. package/dist/mbox-iO03mmoE.js +4 -0
  124. package/dist/{mermaid-4DMBBIKO-CG1ECj5W.js → mermaid-4DMBBIKO-B7VQMwJx.js} +1 -1
  125. package/dist/{mermaid-CEbzCxCc.js → mermaid-DO-Daq7u.js} +46 -46
  126. package/dist/{mermaid-parser.core-CleJseNW.js → mermaid-parser.core-DreccfmS.js} +7 -7
  127. package/dist/{mhchem-BwoRNwg_.js → mhchem-yiCCuiEF.js} +1 -1
  128. package/dist/{mindmap-definition-VGOIOE7T-CcSYqYP9.js → mindmap-definition-VGOIOE7T-CC1_Vl0f.js} +13 -13
  129. package/dist/mirc-C9z5LT4X.js +4 -0
  130. package/dist/mllike-jGJbdm_C.js +6 -0
  131. package/dist/modelica-DzF7oIEL.js +4 -0
  132. package/dist/mscgen-DB-u125o.js +6 -0
  133. package/dist/mumps-CRTFHhzh.js +4 -0
  134. package/dist/nsis-C4NPTuox.js +4 -0
  135. package/dist/{nsis-B5K1qoyo.js → nsis-ClF3r5Tr.js} +1 -1
  136. package/dist/ntriples-BCOoGph1.js +4 -0
  137. package/dist/{number-overlay-editor-_GnlYFHC.js → number-overlay-editor-CpKi64Fy.js} +1 -1
  138. package/dist/octave-DTwNlazz.js +4 -0
  139. package/dist/{ordinal-2jIulmcR.js → ordinal-B43ZeR68.js} +1 -1
  140. package/dist/oz-DD38AzSz.js +4 -0
  141. package/dist/{packet-DYOGHKS2-CBxXGWNr.js → packet-DYOGHKS2-CmWtF3uO.js} +1 -1
  142. package/dist/pascal-BohSp9jV.js +4 -0
  143. package/dist/perl-f5OutoPM.js +4 -0
  144. package/dist/{pie-VRWISCQL-Bmdnqjip.js → pie-VRWISCQL-B6u8vus8.js} +1 -1
  145. package/dist/{pieDiagram-ADFJNKIX-DNyLF5H2.js → pieDiagram-ADFJNKIX-Di34MOFQ.js} +19 -19
  146. package/dist/pig-Dv7wSmHb.js +4 -0
  147. package/dist/powershell-rYgjKB39.js +4 -0
  148. package/dist/{process-output-Bza_GK7Q.js → process-output-n0RJTxcC.js} +30 -25
  149. package/dist/properties-BFUNLRDN.js +4 -0
  150. package/dist/protobuf-B9QJQPPv.js +4 -0
  151. package/dist/{pug-tjbzJCFk.js → pug-B_rby2yb.js} +1 -1
  152. package/dist/pug-DzvWpaMC.js +4 -0
  153. package/dist/puppet-B_K-n_xK.js +4 -0
  154. package/dist/python-CAiFcaA2.js +4 -0
  155. package/dist/q-cLeFIBLK.js +4 -0
  156. package/dist/{quadrantDiagram-AYHSOK5B-rXwjifrj.js → quadrantDiagram-AYHSOK5B-B9kVk1ny.js} +3 -3
  157. package/dist/r-04Y-Wco3.js +4 -0
  158. package/dist/{radar-ZZBFDIW7-BmCWDffL.js → radar-ZZBFDIW7-XAmXSa8s.js} +1 -1
  159. package/dist/{react-vega-B-rkEqtS.js → react-vega-Cavbrg4l.js} +1 -1
  160. package/dist/{react-vega-k9ODWPlI.js → react-vega-Dh6-UKKe.js} +13 -13
  161. package/dist/{requirementDiagram-UZGBJVZJ-DBdrMVbs.js → requirementDiagram-UZGBJVZJ-BxGfGYEx.js} +13 -13
  162. package/dist/{reveal-component-Ycn2n8kH.js → reveal-component-pQBz0vEK.js} +10 -10
  163. package/dist/rpm-FUdrIia9.js +5 -0
  164. package/dist/ruby-DMjFXuEW.js +4 -0
  165. package/dist/{sankeyDiagram-TZEHDZUN-CxmzalGv.js → sankeyDiagram-TZEHDZUN-D09PBJ-n.js} +4 -4
  166. package/dist/sas-DzHZxjXK.js +4 -0
  167. package/dist/scheme-DxHd_Rb9.js +4 -0
  168. package/dist/semaphore-CNDGTzkX.js +46 -0
  169. package/dist/{sequenceDiagram-WL72ISMW-CVCDsJ9h.js → sequenceDiagram-WL72ISMW-t_Dpemj0.js} +7 -7
  170. package/dist/shell-C8Kwypgf.js +4 -0
  171. package/dist/sieve-DdyqOKXZ.js +4 -0
  172. package/dist/smalltalk-pB7X1D9y.js +4 -0
  173. package/dist/sparql-NhBO6oOa.js +4 -0
  174. package/dist/{spec-DSIuqd3f.js → spec-hVaaZsY5.js} +4 -4
  175. package/dist/{src-BY0BGg6V.js → src-Bf2iLOlr.js} +1 -1
  176. package/dist/{stateDiagram-FKZM4ZOC-D_2djEhW.js → stateDiagram-FKZM4ZOC-B18gTP_j.js} +16 -16
  177. package/dist/stateDiagram-v2-4FDKWEC3-B6e_t14A.js +29 -0
  178. package/dist/{step-DGAGWg3y.js → step-CWipAYTY.js} +1 -1
  179. package/dist/{strings-B_FOH6eV.js → strings-BiIhGaI8.js} +4 -4
  180. package/dist/style.css +1 -1
  181. package/dist/stylus-SfWSnzPv.js +4 -0
  182. package/dist/swift-jRPdq2zR.js +4 -0
  183. package/dist/{swiper-component-KkEVUDd3.js → swiper-component-DlD2GU2g.js} +2 -2
  184. package/dist/tcl-_hpTHGX3.js +4 -0
  185. package/dist/textile-C9h8slqH.js +4 -0
  186. package/dist/{time-CMdrp3hw.js → time-C1SGcFMH.js} +2 -2
  187. package/dist/{timeline-definition-IT6M3QCI-E4NzxCs3.js → timeline-definition-IT6M3QCI-DJnh1ks5.js} +3 -3
  188. package/dist/{toDate-CHtl9vts.js → toDate-CJWlVNGD.js} +3 -3
  189. package/dist/toml-DWvtinD4.js +4 -0
  190. package/dist/{tooltip-B0mtKTXm.js → tooltip-DRaMBu06.js} +3 -3
  191. package/dist/{treemap-GDKQZRPO-CoKHPxa7.js → treemap-GDKQZRPO-Du95DV6u.js} +1 -1
  192. package/dist/troff-Dwo_A0y7.js +4 -0
  193. package/dist/ttcn-V--CPFKq.js +4 -0
  194. package/dist/ttcn-cfg-CPSMchTG.js +4 -0
  195. package/dist/turtle-B4rPGBWu.js +4 -0
  196. package/dist/{types-DBtDeUKD.js → types-Dzuoc3LN.js} +1 -1
  197. package/dist/{useAsyncData-B6hCGywC.js → useAsyncData-C56Khv_R.js} +1 -1
  198. package/dist/{useDateFormatter-B3mCQMP3.js → useDateFormatter-B_9k85Ex.js} +2 -2
  199. package/dist/{useDeepCompareMemoize-CmwDuYUH.js → useDeepCompareMemoize-Dt98v2ua.js} +1 -1
  200. package/dist/{useIframeCapabilities-DbdLoEDm.js → useIframeCapabilities-BkYHTrss.js} +1 -1
  201. package/dist/{useLifecycle-CjMjllqy.js → useLifecycle-BF6-z62y.js} +3 -3
  202. package/dist/{useTheme-CByZUW0p.js → useTheme-DykuNHR2.js} +2 -2
  203. package/dist/vb-DaMBBd4j.js +4 -0
  204. package/dist/vbscript-BMJQqcE2.js +4 -0
  205. package/dist/{vega-component-CC8TqWWV.js → vega-component-BtvQ-Kc4.js} +26 -24
  206. package/dist/velocity-CGq2QRq2.js +4 -0
  207. package/dist/verilog-CUNo8F5u.js +4 -0
  208. package/dist/vhdl-CCzA0msW.js +4 -0
  209. package/dist/webidl-CqIMDIBL.js +4 -0
  210. package/dist/xquery-XC5Kbr-1.js +4 -0
  211. package/dist/{xychartDiagram-PRI3JC2R-CuxTvjw5.js → xychartDiagram-PRI3JC2R-Dk2d_bX0.js} +10 -10
  212. package/dist/yacas-CGOv7Dzy.js +4 -0
  213. package/dist/z80-CXhVmi-f.js +4 -0
  214. package/dist/{zod-BxdsqRPd.js → zod-BWkcDORu.js} +1 -1
  215. package/package.json +3 -3
  216. package/src/components/chat/chat-components.tsx +47 -0
  217. package/src/components/chat/chat-display.tsx +41 -7
  218. package/src/components/chat/chat-panel.tsx +37 -10
  219. package/src/components/chat/chat-utils.ts +42 -20
  220. package/src/components/chat/reasoning-accordion.tsx +14 -3
  221. package/src/components/chat/tool-call/shared.ts +13 -0
  222. package/src/components/chat/tool-call/tool-approval-card.tsx +62 -0
  223. package/src/components/chat/tool-call/tool-args.tsx +26 -0
  224. package/src/components/chat/tool-call/tool-call-view.tsx +99 -0
  225. package/src/components/chat/tool-call/tool-error-card.tsx +81 -0
  226. package/src/components/chat/tool-call/tool-history-row.tsx +153 -0
  227. package/src/components/chat/tool-call/tool-result.tsx +101 -0
  228. package/src/components/data-table/TableTopBar.tsx +5 -1
  229. package/src/components/data-table/__tests__/column-header.test.ts +3 -1
  230. package/src/components/data-table/__tests__/column-header.test.tsx +203 -0
  231. package/src/components/data-table/__tests__/filter-by-values-picker.test.tsx +112 -0
  232. package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +175 -0
  233. package/src/components/data-table/__tests__/filters.test.ts +112 -36
  234. package/src/components/data-table/charts/components/form-fields.tsx +1 -0
  235. package/src/components/data-table/column-header.tsx +210 -157
  236. package/src/components/data-table/data-table.tsx +5 -0
  237. package/src/components/data-table/download-policy/atoms.ts +10 -0
  238. package/src/components/data-table/export-actions.tsx +31 -4
  239. package/src/components/data-table/filter-by-values-picker.tsx +70 -9
  240. package/src/components/data-table/filter-pill-editor.tsx +289 -144
  241. package/src/components/data-table/filter-pills.tsx +49 -8
  242. package/src/components/data-table/filters.ts +131 -36
  243. package/src/components/data-table/header-items.tsx +8 -1
  244. package/src/components/data-table/operator-labels.ts +25 -0
  245. package/src/components/data-table/regex-input.tsx +61 -0
  246. package/src/components/editor/actions/pair-with-agent-modal.tsx +140 -49
  247. package/src/components/editor/actions/useNotebookActions.tsx +3 -1
  248. package/src/components/editor/app-container.tsx +7 -1
  249. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +10 -2
  250. package/src/components/editor/chrome/wrapper/app-chrome.tsx +1 -0
  251. package/src/components/editor/chrome/wrapper/footer.tsx +4 -1
  252. package/src/components/editor/chrome/wrapper/panels.tsx +4 -1
  253. package/src/components/editor/chrome/wrapper/sidebar.tsx +4 -1
  254. package/src/components/editor/controls/Controls.tsx +11 -3
  255. package/src/components/editor/file-tree/requesting-tree.tsx +27 -25
  256. package/src/components/editor/file-tree/upload.tsx +23 -24
  257. package/src/components/editor/header/__tests__/status.test.tsx +108 -0
  258. package/src/components/editor/header/status.tsx +44 -10
  259. package/src/components/editor/navigation/__tests__/clipboard.test.ts +106 -0
  260. package/src/components/editor/navigation/__tests__/navigation.test.ts +70 -0
  261. package/src/components/editor/navigation/clipboard.ts +99 -25
  262. package/src/components/editor/navigation/navigation.ts +15 -1
  263. package/src/components/editor/notebook-cell.tsx +3 -0
  264. package/src/components/home/components.tsx +6 -0
  265. package/src/components/pages/run-page.tsx +4 -1
  266. package/src/components/ui/combobox.tsx +24 -5
  267. package/src/components/ui/number-field.tsx +2 -0
  268. package/src/core/ai/tools/__tests__/registry.test.ts +10 -12
  269. package/src/core/ai/tools/registry.ts +9 -5
  270. package/src/core/cells/__tests__/cells.test.ts +187 -0
  271. package/src/core/cells/__tests__/pending-cut-service.test.tsx +123 -0
  272. package/src/core/cells/cells.ts +102 -17
  273. package/src/core/cells/document-changes.ts +6 -1
  274. package/src/core/cells/pending-cut-service.ts +55 -0
  275. package/src/core/cells/utils.ts +11 -0
  276. package/src/core/codemirror/cells/extensions.ts +10 -0
  277. package/src/core/codemirror/markdown/__tests__/commands.test.ts +3 -3
  278. package/src/core/codemirror/markdown/commands.ts +1 -2
  279. package/src/core/edit-app.tsx +2 -1
  280. package/src/core/hotkeys/hotkeys.ts +5 -0
  281. package/src/core/islands/worker/worker.tsx +3 -2
  282. package/src/core/network/requests-network.ts +21 -3
  283. package/src/core/network/types.ts +12 -1
  284. package/src/core/run-app.tsx +2 -1
  285. package/src/core/wasm/__tests__/utils.test.ts +34 -0
  286. package/src/core/wasm/bridge.ts +14 -1
  287. package/src/core/wasm/utils.ts +14 -0
  288. package/src/core/wasm/worker/bootstrap.ts +3 -2
  289. package/src/core/wasm/worker/worker.ts +3 -2
  290. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +155 -0
  291. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +137 -0
  292. package/src/core/websocket/transports/basic.ts +2 -0
  293. package/src/core/websocket/transports/transport.ts +1 -0
  294. package/src/core/websocket/useMarimoKernelConnection.tsx +130 -55
  295. package/src/core/websocket/useWebSocket.tsx +5 -2
  296. package/src/css/app/Cell.css +10 -0
  297. package/src/plugins/core/__test__/sanitize.test.ts +30 -0
  298. package/src/plugins/impl/DataTablePlugin.tsx +12 -0
  299. package/src/plugins/impl/DropdownPlugin.tsx +12 -1
  300. package/src/plugins/impl/MultiselectPlugin.tsx +4 -0
  301. package/src/plugins/impl/SearchableSelect.tsx +11 -1
  302. package/src/plugins/impl/TabsPlugin.tsx +35 -7
  303. package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +56 -0
  304. package/src/plugins/impl/__tests__/TabsPlugin.test.tsx +154 -0
  305. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +6 -0
  306. package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +48 -36
  307. package/src/plugins/impl/data-frames/schema.ts +4 -1
  308. package/src/plugins/impl/vega/resolve-data.ts +8 -1
  309. package/src/utils/__tests__/id-tree.test.ts +71 -0
  310. package/src/utils/__tests__/semaphore.test.ts +218 -0
  311. package/src/utils/fileToBase64.ts +8 -7
  312. package/src/utils/id-tree.tsx +89 -0
  313. package/src/utils/semaphore.ts +88 -0
  314. package/dist/apl-BKoVld9y.js +0 -4
  315. package/dist/asciiarmor-DQrKIjoo.js +0 -4
  316. package/dist/asn1-BZvnj0dq.js +0 -4
  317. package/dist/assets/__vite-browser-external-rrUYDKRl.js +0 -1
  318. package/dist/assets/worker-Bfy15ViQ.js +0 -73
  319. package/dist/brainfuck-D558nlUv.js +0 -4
  320. package/dist/classDiagram-2ON5EDUG-CBHMR6ZU.js +0 -30
  321. package/dist/classDiagram-v2-WZHVMYZB-BsUtUGM_.js +0 -30
  322. package/dist/clojure-Cq8mTSrE.js +0 -4
  323. package/dist/cmake-D8HCovWK.js +0 -4
  324. package/dist/cobol-UolN-9iU.js +0 -4
  325. package/dist/coffeescript-VdNuWrt5.js +0 -4
  326. package/dist/commonlisp-ALX7fpDc.js +0 -4
  327. package/dist/crystal-PbyO9Q_s.js +0 -4
  328. package/dist/css-DFklJkr_.js +0 -4
  329. package/dist/cypher-BifNeYlv.js +0 -4
  330. package/dist/d-BA-JP4PJ.js +0 -4
  331. package/dist/diff-CtkDpav4.js +0 -4
  332. package/dist/dist-BuBwsFva.js +0 -5
  333. package/dist/dist-BzmEQ9u7.js +0 -5
  334. package/dist/dist-Cih01ssx.js +0 -5
  335. package/dist/dist-CqfONiY9.js +0 -5
  336. package/dist/dist-D0iD0Fi9.js +0 -5
  337. package/dist/dist-DtNLXm8d.js +0 -5
  338. package/dist/dtd-DW3_UFEG.js +0 -4
  339. package/dist/dylan-pDhodO2N.js +0 -4
  340. package/dist/ecl-BJT8-YD7.js +0 -4
  341. package/dist/eiffel-Dmns-9vS.js +0 -4
  342. package/dist/elm-Da4sO4Bz.js +0 -4
  343. package/dist/erlang-C-zBsDi7.js +0 -4
  344. package/dist/factor-4xPWlWB5.js +0 -4
  345. package/dist/forth-l-c75zSd.js +0 -4
  346. package/dist/fortran-DIujSODW.js +0 -4
  347. package/dist/gas-CXnG5g_b.js +0 -4
  348. package/dist/gherkin-VPeqd4-X.js +0 -4
  349. package/dist/groovy-CphhZQgg.js +0 -4
  350. package/dist/haskell-CCvlS5Iq.js +0 -4
  351. package/dist/haxe-C_bi66fP.js +0 -5
  352. package/dist/idl-1DcP4Dm8.js +0 -4
  353. package/dist/javascript-DUIGhBvO.js +0 -4
  354. package/dist/julia-Cs2G4PQi.js +0 -4
  355. package/dist/livescript-DMtVFaAN.js +0 -4
  356. package/dist/lua-BAoLtdJg.js +0 -4
  357. package/dist/mathematica-C_NoFtbo.js +0 -4
  358. package/dist/mbox-DcFJFYrH.js +0 -4
  359. package/dist/mirc-71dccf_u.js +0 -4
  360. package/dist/mllike-CWcOFVDq.js +0 -6
  361. package/dist/modelica-Ape2VXxx.js +0 -4
  362. package/dist/mscgen-Cc6TwbSN.js +0 -6
  363. package/dist/mumps-h-ZbdkJ9.js +0 -4
  364. package/dist/nsis-C0p3m7JW.js +0 -4
  365. package/dist/ntriples-c9lEeT5w.js +0 -4
  366. package/dist/octave-DzEgB_74.js +0 -4
  367. package/dist/oz-CAxvHkyQ.js +0 -4
  368. package/dist/pascal-BJzu1sgP.js +0 -4
  369. package/dist/perl--IrOzZ2Z.js +0 -4
  370. package/dist/pig-CiBKKNhC.js +0 -4
  371. package/dist/powershell-KY0j6Qop.js +0 -4
  372. package/dist/properties-BW8q3ziV.js +0 -4
  373. package/dist/protobuf-BGaeuTGV.js +0 -4
  374. package/dist/pug-DjOKK-4J.js +0 -4
  375. package/dist/puppet-DWm2o6zX.js +0 -4
  376. package/dist/python-Bp2gezZy.js +0 -4
  377. package/dist/q-DljPshos.js +0 -4
  378. package/dist/r-BajPMnEu.js +0 -4
  379. package/dist/rpm-BKx-ZZ62.js +0 -5
  380. package/dist/ruby-DJq_HNKc.js +0 -4
  381. package/dist/sas-WANvpcOU.js +0 -4
  382. package/dist/scheme-CliBbhGF.js +0 -4
  383. package/dist/shell-BwhrNUvM.js +0 -4
  384. package/dist/sieve-BIVePvMp.js +0 -4
  385. package/dist/smalltalk-D6G48JmY.js +0 -4
  386. package/dist/sparql-jjc3BmEP.js +0 -4
  387. package/dist/stateDiagram-v2-4FDKWEC3-Cv9Av10H.js +0 -29
  388. package/dist/stylus-WPBPQ4PE.js +0 -4
  389. package/dist/swift-O1Qy6iCm.js +0 -4
  390. package/dist/tcl-BAFdhvsi.js +0 -4
  391. package/dist/textile-DFuzhNLG.js +0 -4
  392. package/dist/toml-DRSTeely.js +0 -4
  393. package/dist/troff-B_ZjwBW0.js +0 -4
  394. package/dist/ttcn-CAyiB3ic.js +0 -4
  395. package/dist/ttcn-cfg-BS5_BGBJ.js +0 -4
  396. package/dist/turtle-CUBEDy3E.js +0 -4
  397. package/dist/vb-DY9S6-U2.js +0 -4
  398. package/dist/vbscript-gaHC39Jq.js +0 -4
  399. package/dist/velocity-TfCOtJZ_.js +0 -4
  400. package/dist/verilog-c2JOX8mv.js +0 -4
  401. package/dist/vhdl-dHBirRiO.js +0 -4
  402. package/dist/webidl-Bauj-i07.js +0 -4
  403. package/dist/xquery-CtaEAOt8.js +0 -4
  404. package/dist/yacas-BZ85agQP.js +0 -4
  405. package/dist/z80-hCgR-L4U.js +0 -4
  406. package/src/components/chat/tool-call-accordion.tsx +0 -247
  407. /package/dist/{ImageComparisonComponent-DaocPIse.js → ImageComparisonComponent-CNHIsPDj.js} +0 -0
  408. /package/dist/{Plot-PIeIvFnD.js → Plot-4wn-lMVn.js} +0 -0
  409. /package/dist/{apl-Dt8GMXYg.js → apl-BCgCq9iM.js} +0 -0
  410. /package/dist/{array-B-MVxRIF.js → array-tvvEqPy7.js} +0 -0
  411. /package/dist/{asciiarmor-CitDQ85h.js → asciiarmor-BtqU-KJQ.js} +0 -0
  412. /package/dist/{asn1-abrf9SMK.js → asn1-Dmb-dTMx.js} +0 -0
  413. /package/dist/{asterisk-BUZwqih-.js → asterisk-DaVJJDnV.js} +0 -0
  414. /package/dist/{brainfuck-BL-Boof0.js → brainfuck-C1HoZKlE.js} +0 -0
  415. /package/dist/{chunk-4F5CHEZ2-C6tO9vjs.js → chunk-4F5CHEZ2-BZq7Kom7.js} +0 -0
  416. /package/dist/{chunk-B2363JML-Ds8wZXyP.js → chunk-B2363JML-D9-XOau1.js} +0 -0
  417. /package/dist/{chunk-DR5Q36YT-CP69aZS_.js → chunk-DR5Q36YT-BflwErH1.js} +0 -0
  418. /package/dist/{chunk-FRFDVMJY-BgQv1HBE.js → chunk-FRFDVMJY-BSBUAX7r.js} +0 -0
  419. /package/dist/{chunk-PL6DKKU2-DHfTUHy8.js → chunk-PL6DKKU2-B0MTXvyc.js} +0 -0
  420. /package/dist/{chunk-SJTYNZTY-Diciw4sx.js → chunk-SJTYNZTY-CEG4F0pB.js} +0 -0
  421. /package/dist/{chunk-TQ3KTPDO-CQfP9npd.js → chunk-TQ3KTPDO-DiCtqVSi.js} +0 -0
  422. /package/dist/{chunk-UMXZTB3W-MSKeGL7W.js → chunk-UMXZTB3W-97iS1iEl.js} +0 -0
  423. /package/dist/{click-outside-container-BZgN7xS_.js → click-outside-container-BDd67_1U.js} +0 -0
  424. /package/dist/{clike-RWg7anhx.js → clike-CdT0yHjt.js} +0 -0
  425. /package/dist/{clojure-DaojKHow.js → clojure-CdyrCpUv.js} +0 -0
  426. /package/dist/{cmake-DN-_v0XE.js → cmake-BFlPxym7.js} +0 -0
  427. /package/dist/{cobol-C3VpMyux.js → cobol-CcJXewp8.js} +0 -0
  428. /package/dist/{coffeescript-DIkz3Tbt.js → coffeescript-DnKuIKRo.js} +0 -0
  429. /package/dist/{colors-Cn2p_FA3.js → colors-CQAOa8cK.js} +0 -0
  430. /package/dist/{common-keywords-hbLeU7VU.js → common-keywords-FBrXPTcz.js} +0 -0
  431. /package/dist/{commonlisp-CB1boOiP.js → commonlisp-B-kok83Z.js} +0 -0
  432. /package/dist/{crystal-DI2oCml6.js → crystal-FYRYjI1I.js} +0 -0
  433. /package/dist/{css-BdEVwQDV.js → css-B45lc2V3.js} +0 -0
  434. /package/dist/{cypher-BNHToqxU.js → cypher-DZMLyVY_.js} +0 -0
  435. /package/dist/{cytoscape.esm-WbbDoCfu.js → cytoscape.esm-ayF70frT.js} +0 -0
  436. /package/dist/{d-D7we7I1b.js → d-x-VVT4o9.js} +0 -0
  437. /package/dist/{diff-Cia6fzjN.js → diff-Dxe2mpXk.js} +0 -0
  438. /package/dist/{dist-BK-3fF4P.js → dist-B4LJpMEg.js} +0 -0
  439. /package/dist/{dist-CxdUraQr.js → dist-B507mf_I.js} +0 -0
  440. /package/dist/{dist-C89sHDXk.js → dist-BGdYVvOu.js} +0 -0
  441. /package/dist/{dist-DquyVv5H.js → dist-BNyrZfqT.js} +0 -0
  442. /package/dist/{dist-Zn0KNbo9.js → dist-Bc5pmZIw.js} +0 -0
  443. /package/dist/{dist-C-J0pt5p.js → dist-BvCfQQQE.js} +0 -0
  444. /package/dist/{dist-D9r7Cmw7.js → dist-C2ej4eOH.js} +0 -0
  445. /package/dist/{dist-HVuryI1a.js → dist-C34oIrQ9.js} +0 -0
  446. /package/dist/{dist-CGLzXdrt.js → dist-CDFZi-QD.js} +0 -0
  447. /package/dist/{dist-C9fmTOin.js → dist-CYEylvZA.js} +0 -0
  448. /package/dist/{dist-DadjmS-4.js → dist-DJ6zJQZ4.js} +0 -0
  449. /package/dist/{dist-CtCY55Jf.js → dist-Dh3wkoyH.js} +0 -0
  450. /package/dist/{dist-C474qFoq.js → dist-Dhk6FMb0.js} +0 -0
  451. /package/dist/{dist-DZjQ_MBo.js → dist-KnujRhFL.js} +0 -0
  452. /package/dist/{dist-CinA9Enb.js → dist-WdPUFc56.js} +0 -0
  453. /package/dist/{dist-DBLeRrPp.js → dist-t_qL7eB8.js} +0 -0
  454. /package/dist/{dist-CyFFzJTb.js → dist-usPCDYx8.js} +0 -0
  455. /package/dist/{dtd-H4Hubdwp.js → dtd-C9VM_Wfu.js} +0 -0
  456. /package/dist/{duckdb-keywords-CZ_ZTscu.js → duckdb-keywords-CvJhR_Yd.js} +0 -0
  457. /package/dist/{dylan-fVO6rnq3.js → dylan-DTSnEIFO.js} +0 -0
  458. /package/dist/{ebnf-WEXPLEWb.js → ebnf-2D4Ctp3y.js} +0 -0
  459. /package/dist/{ecl-B94VPjNR.js → ecl-N04ptnRK.js} +0 -0
  460. /package/dist/{eiffel-C_R6TusS.js → eiffel-Dd8rpqr_.js} +0 -0
  461. /package/dist/{elm-DzCHbO2g.js → elm-GT2E866W.js} +0 -0
  462. /package/dist/{erlang-BGNkx6JU.js → erlang-Cf0Bp5pY.js} +0 -0
  463. /package/dist/{esm-Bb_hbWan.js → esm-BaaaPNGl.js} +0 -0
  464. /package/dist/{fcl-B_Gv5Jfx.js → fcl-Ccj8Z5Xd.js} +0 -0
  465. /package/dist/{forth-Bybw0cJ7.js → forth-wd_XzGTg.js} +0 -0
  466. /package/dist/{fortran-C6PoCLkI.js → fortran-DcwUTZFe.js} +0 -0
  467. /package/dist/{gas-BBlhenj4.js → gas-DeALIER3.js} +0 -0
  468. /package/dist/{gherkin-NXtNG85X.js → gherkin-CKTqaJNX.js} +0 -0
  469. /package/dist/{groovy-BoFYK9xM.js → groovy-Bwdp_d8D.js} +0 -0
  470. /package/dist/{haskell-BtBdvQ1n.js → haskell-DCdCcPLK.js} +0 -0
  471. /package/dist/{haxe-D--o6dr0.js → haxe-DAyktQWJ.js} +0 -0
  472. /package/dist/{http-Dc2fv19V.js → http-_DVAYWoR.js} +0 -0
  473. /package/dist/{idl-AqTq5l7e.js → idl-CBuZiRYu.js} +0 -0
  474. /package/dist/{init-D-g0ONX1.js → init-uv0kkh4g.js} +0 -0
  475. /package/dist/{javascript-DvwNVye9.js → javascript-DzigE11c.js} +0 -0
  476. /package/dist/{julia-DoKiagZC.js → julia-PwfB-0Cm.js} +0 -0
  477. /package/dist/{katex-B7pMJpE0.js → katex-C_XRmjAP.js} +0 -0
  478. /package/dist/{livescript-DxBZMiWB.js → livescript-BJLz1EbT.js} +0 -0
  479. /package/dist/{lua-DmS_0NTu.js → lua-ZC-XC2jf.js} +0 -0
  480. /package/dist/{math-BYK36kWZ.js → math-DFcdCCU8.js} +0 -0
  481. /package/dist/{mathematica-ChlDFeIC.js → mathematica-DCYMx6qB.js} +0 -0
  482. /package/dist/{mbox-CguZuODr.js → mbox-OxMK_9XI.js} +0 -0
  483. /package/dist/{mirc-CFtY8dqz.js → mirc-nJVyhA0H.js} +0 -0
  484. /package/dist/{mllike-C0EJrEOk.js → mllike-DRO89bsU.js} +0 -0
  485. /package/dist/{modelica-C1kO1nfS.js → modelica-Don3E6ZD.js} +0 -0
  486. /package/dist/{mscgen-DEYdr7AY.js → mscgen-DJfqD3bN.js} +0 -0
  487. /package/dist/{mumps-B3NVJs2V.js → mumps-SjGTvDYL.js} +0 -0
  488. /package/dist/{nginx-ComVAAGN.js → nginx-DasThI7R.js} +0 -0
  489. /package/dist/{node-sql-parser-DNGGJ-Rw.js → node-sql-parser-B8nBD36q.js} +0 -0
  490. /package/dist/{ntriples-DHol9X9H.js → ntriples-CNBKRl3I.js} +0 -0
  491. /package/dist/{octave-CYGz0bfo.js → octave-DdeVHNlx.js} +0 -0
  492. /package/dist/{oz-kPxb2ni5.js → oz-CcKSoNvN.js} +0 -0
  493. /package/dist/{pascal-bZ0yrJKy.js → pascal-6leftwNj.js} +0 -0
  494. /package/dist/{path-Du6n3sOU.js → path-BGaWgPKg.js} +0 -0
  495. /package/dist/{perl-z4hvqyqz.js → perl-BhJIwWzN.js} +0 -0
  496. /package/dist/{pig-DZO8QDF9.js → pig-r-xDHqRf.js} +0 -0
  497. /package/dist/{powershell-BSuaDQEC.js → powershell-D-BELeNi.js} +0 -0
  498. /package/dist/{properties-BXhGLlIx.js → properties-CnuDhbll.js} +0 -0
  499. /package/dist/{protobuf-DM6iybWV.js → protobuf-CO8RBhvX.js} +0 -0
  500. /package/dist/{puppet-Bn05sQT8.js → puppet-NmXHjLy8.js} +0 -0
  501. /package/dist/{python-Cvnhm0g7.js → python-DAQXi720.js} +0 -0
  502. /package/dist/{q-B9V8hzex.js → q-DlikXfV0.js} +0 -0
  503. /package/dist/{r-Cf0gFqmq.js → r-CuohilwT.js} +0 -0
  504. /package/dist/{rpm-D-LMkTV1.js → rpm-0Pjwp0Pb.js} +0 -0
  505. /package/dist/{ruby-DeuPikpK.js → ruby-Dq8NJTDG.js} +0 -0
  506. /package/dist/{sas-C9tjgAo9.js → sas-CuwonyVP.js} +0 -0
  507. /package/dist/{scheme-D1_bUF0G.js → scheme-CYU-RRIf.js} +0 -0
  508. /package/dist/{shell-CJBmnks3.js → shell-COPmX2qE.js} +0 -0
  509. /package/dist/{sieve-1fSV75CF.js → sieve-B_3zyLne.js} +0 -0
  510. /package/dist/{simple-mode-B90Wdavj.js → simple-mode-DSBniks8.js} +0 -0
  511. /package/dist/{smalltalk-sZNPD0HO.js → smalltalk-DRft7iPv.js} +0 -0
  512. /package/dist/{solr-DTkyqJ-Z.js → solr-RZ9uTl59.js} +0 -0
  513. /package/dist/{sparql-oHc1nm77.js → sparql-CN6qj55H.js} +0 -0
  514. /package/dist/{spreadsheet-CER0raqY.js → spreadsheet-BNNUNXA2.js} +0 -0
  515. /package/dist/{sql-ByOoEONQ.js → sql-B4x8IkwU.js} +0 -0
  516. /package/dist/{stylus-KzkX6zRB.js → stylus-Bn_ZjOQ3.js} +0 -0
  517. /package/dist/{swift-DqVxZvKo.js → swift-BLUJhMbz.js} +0 -0
  518. /package/dist/{tcl-BtWSwXfA.js → tcl-C86fxecl.js} +0 -0
  519. /package/dist/{textile-CWDbn9Ql.js → textile-DmHh2rsK.js} +0 -0
  520. /package/dist/{tiddlywiki-Cr9xyOY1.js → tiddlywiki-DI0mF2WJ.js} +0 -0
  521. /package/dist/{tiki-D5JONyfZ.js → tiki-2HU6XLLn.js} +0 -0
  522. /package/dist/{timer-D7JVdX9U.js → timer-YZl28NYN.js} +0 -0
  523. /package/dist/{toml-BfehlgmL.js → toml-GWANRNAD.js} +0 -0
  524. /package/dist/{treemap-qFGzn7xk.js → treemap-D-ka1hvx.js} +0 -0
  525. /package/dist/{troff-BZBk6AAu.js → troff-BHTsomIy.js} +0 -0
  526. /package/dist/{ttcn-DVwvXg0_.js → ttcn-DQuhn5Mn.js} +0 -0
  527. /package/dist/{ttcn-cfg-gjbVLf1L.js → ttcn-cfg-HjFYtdB-.js} +0 -0
  528. /package/dist/{turtle-CgxKXorV.js → turtle-nCay33Nv.js} +0 -0
  529. /package/dist/{vb-B9kSwTdM.js → vb-BG-XlqqJ.js} +0 -0
  530. /package/dist/{vbscript-DrUKSCdb.js → vbscript-B6vyW0-D.js} +0 -0
  531. /package/dist/{velocity-AlMYTnMy.js → velocity-CWegueqO.js} +0 -0
  532. /package/dist/{verilog-DLUaM05j.js → verilog-CzSQm4cG.js} +0 -0
  533. /package/dist/{vhdl-DUJOtSmO.js → vhdl-DqnNVL7r.js} +0 -0
  534. /package/dist/{webidl-CQp4aHk_.js → webidl-DXEUpDWH.js} +0 -0
  535. /package/dist/{xquery-IxkjlwOD.js → xquery-Ba_NB5bD.js} +0 -0
  536. /package/dist/{yacas-Bnctn5w8.js → yacas-HKQU6hyk.js} +0 -0
  537. /package/dist/{z80-DrFwhx53.js → z80-CXkHXLdj.js} +0 -0
@@ -13,6 +13,7 @@ import { Button } from "../ui/button";
13
13
  import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
14
14
  import { FilterPillEditor } from "./filter-pill-editor";
15
15
  import type { ColumnFilterValue } from "./filters";
16
+ import { OPERATOR_LABELS } from "./operator-labels";
16
17
  import { stringifyUnknownValue } from "./utils";
17
18
 
18
19
  interface Props<TData> {
@@ -209,19 +210,62 @@ function formatValue(
209
210
  }
210
211
 
211
212
  if (value.type === "number") {
212
- return formatMinMax(value.min, value.max);
213
+ switch (value.operator) {
214
+ case "between":
215
+ return {
216
+ operator: OPERATOR_LABELS.between.toLowerCase(),
217
+ value: `${value.min} - ${value.max}`,
218
+ };
219
+ case "==":
220
+ case "!=":
221
+ case ">":
222
+ case ">=":
223
+ case "<":
224
+ case "<=":
225
+ return { operator: value.operator, value: String(value.value) };
226
+ }
227
+ }
228
+ if (value.type === "text") {
229
+ switch (value.operator) {
230
+ case "in":
231
+ case "not_in": {
232
+ const items = value.values.map((v) => `"${v}"`);
233
+ return {
234
+ operator: value.operator === "in" ? "is in" : "not in",
235
+ value: `[${items.join(", ")}]`,
236
+ };
237
+ }
238
+ case "is_empty":
239
+ return { operator: "is empty" };
240
+ case "contains":
241
+ case "equals":
242
+ case "does_not_equal":
243
+ case "regex":
244
+ case "starts_with":
245
+ case "ends_with":
246
+ return {
247
+ operator: OPERATOR_LABELS[value.operator].toLowerCase(),
248
+ value: `"${value.text}"`,
249
+ };
250
+ }
213
251
  }
214
252
  if (value.type === "date") {
215
- return formatMinMax(value.min?.toISOString(), value.max?.toISOString());
253
+ return formatMinMaxLegacy(
254
+ value.min?.toISOString(),
255
+ value.max?.toISOString(),
256
+ );
216
257
  }
217
258
  if (value.type === "time") {
218
- return formatMinMax(
259
+ return formatMinMaxLegacy(
219
260
  value.min ? timeFormatter.format(value.min) : undefined,
220
261
  value.max ? timeFormatter.format(value.max) : undefined,
221
262
  );
222
263
  }
223
264
  if (value.type === "datetime") {
224
- return formatMinMax(value.min?.toISOString(), value.max?.toISOString());
265
+ return formatMinMaxLegacy(
266
+ value.min?.toISOString(),
267
+ value.max?.toISOString(),
268
+ );
225
269
  }
226
270
  if (value.type === "boolean") {
227
271
  return { operator: `is ${value.value ? "True" : "False"}` };
@@ -235,14 +279,11 @@ function formatValue(
235
279
  value: `[${stringifiedOptions.join(", ")}]`,
236
280
  };
237
281
  }
238
- if (value.type === "text") {
239
- return { operator: "contains", value: `"${value.text}"` };
240
- }
241
282
  logNever(value);
242
283
  return undefined;
243
284
  }
244
285
 
245
- function formatMinMax(
286
+ function formatMinMaxLegacy(
246
287
  min: string | number | undefined,
247
288
  max: string | number | undefined,
248
289
  ): FormattedFilter | undefined {
@@ -32,15 +32,66 @@ export type FilterType =
32
32
  | "select"
33
33
  | "boolean";
34
34
 
35
+ export const NULLISH_OPS = ["is_null", "is_not_null"] as const;
36
+ export const MEMBERSHIP_OPS = ["in", "not_in"] as const;
37
+ export const NUMBER_COMPARISON_OPS = [
38
+ "==",
39
+ "!=",
40
+ ">",
41
+ ">=",
42
+ "<",
43
+ "<=",
44
+ ] as const;
45
+ export const TEXT_SCALAR_OPS = [
46
+ "contains",
47
+ "equals",
48
+ "does_not_equal",
49
+ "regex",
50
+ "starts_with",
51
+ "ends_with",
52
+ ] as const;
53
+
54
+ export const NUMBER_OPS = [
55
+ "between",
56
+ ...NUMBER_COMPARISON_OPS,
57
+ ...NULLISH_OPS,
58
+ ] as const;
59
+ export const TEXT_OPS = [
60
+ ...TEXT_SCALAR_OPS,
61
+ ...MEMBERSHIP_OPS,
62
+ "is_empty",
63
+ ...NULLISH_OPS,
64
+ ] as const;
65
+
66
+ export type NullishOp = (typeof NULLISH_OPS)[number];
67
+ export type MembershipOp = (typeof MEMBERSHIP_OPS)[number];
68
+ export type NumberComparisonOp = (typeof NUMBER_COMPARISON_OPS)[number];
69
+ export type TextScalarOp = (typeof TEXT_SCALAR_OPS)[number];
70
+
71
+ interface NullishOpts {
72
+ operator: NullishOp;
73
+ }
74
+
75
+ type NumberFilterOpts =
76
+ | { operator: "between"; min: number; max: number }
77
+ | { operator: NumberComparisonOp; value: number }
78
+ | NullishOpts;
79
+
80
+ type TextFilterOpts =
81
+ | { operator: TextScalarOp; text: string }
82
+ | { operator: MembershipOp; values: string[] }
83
+ | { operator: "is_empty" }
84
+ | NullishOpts;
85
+
35
86
  // Filter is a factory function that creates a filter object
36
87
  export const Filter = {
37
- number(opts: { min?: number; max?: number; operator?: OperatorType }) {
88
+ number(opts: NumberFilterOpts) {
38
89
  return {
39
90
  type: "number",
40
91
  ...opts,
41
92
  } as const;
42
93
  },
43
- text(opts: { text?: string; operator: OperatorType }) {
94
+ text(opts: TextFilterOpts) {
44
95
  return {
45
96
  type: "text",
46
97
  ...opts,
@@ -84,6 +135,15 @@ export type ColumnFilterForType<T extends FilterType> = T extends FilterType
84
135
  ? Extract<ColumnFilterValue, { type: T }>
85
136
  : never;
86
137
 
138
+ function isNullishFilter(
139
+ filter: ColumnFilterValue,
140
+ ): filter is Extract<
141
+ ColumnFilterValue,
142
+ { operator: "is_null" | "is_not_null" }
143
+ > {
144
+ return filter.operator === "is_null" || filter.operator === "is_not_null";
145
+ }
146
+
87
147
  export function filterToFilterCondition(
88
148
  columnIdString: string,
89
149
  filter: ColumnFilterValue | undefined,
@@ -93,12 +153,11 @@ export function filterToFilterCondition(
93
153
  }
94
154
  const columnId = columnIdString as ColumnId;
95
155
 
96
- if (filter.operator === "is_null" || filter.operator === "is_not_null") {
156
+ if (isNullishFilter(filter)) {
97
157
  return [
98
158
  {
99
159
  column_id: columnId,
100
160
  operator: filter.operator,
101
- value: undefined,
102
161
  type: "condition",
103
162
  negate: false,
104
163
  },
@@ -106,38 +165,76 @@ export function filterToFilterCondition(
106
165
  }
107
166
 
108
167
  switch (filter.type) {
109
- case "number": {
110
- const conditions: FilterConditionType[] = [];
111
- if (filter.min !== undefined) {
112
- conditions.push({
113
- column_id: columnId,
114
- operator: ">=",
115
- value: filter.min,
116
- type: "condition",
117
- negate: false,
118
- });
119
- }
120
- if (filter.max !== undefined) {
121
- conditions.push({
122
- column_id: columnId,
123
- operator: "<=",
124
- value: filter.max,
125
- type: "condition",
126
- negate: false,
127
- });
168
+ case "number":
169
+ switch (filter.operator) {
170
+ case "between":
171
+ return [
172
+ {
173
+ column_id: columnId,
174
+ operator: "between",
175
+ value: { min: filter.min, max: filter.max },
176
+ type: "condition",
177
+ negate: false,
178
+ },
179
+ ];
180
+ case "==":
181
+ case "!=":
182
+ case ">":
183
+ case ">=":
184
+ case "<":
185
+ case "<=":
186
+ return [
187
+ {
188
+ column_id: columnId,
189
+ operator: filter.operator,
190
+ value: filter.value,
191
+ type: "condition",
192
+ negate: false,
193
+ },
194
+ ];
195
+ default:
196
+ assertNever(filter);
128
197
  }
129
- return conditions;
130
- }
131
198
  case "text":
132
- return [
133
- {
134
- column_id: columnId,
135
- operator: filter.operator,
136
- value: filter.text,
137
- type: "condition",
138
- negate: false,
139
- },
140
- ];
199
+ switch (filter.operator) {
200
+ case "contains":
201
+ case "equals":
202
+ case "does_not_equal":
203
+ case "regex":
204
+ case "starts_with":
205
+ case "ends_with":
206
+ return [
207
+ {
208
+ column_id: columnId,
209
+ operator: filter.operator,
210
+ value: filter.text,
211
+ type: "condition",
212
+ negate: false,
213
+ },
214
+ ];
215
+ case "in":
216
+ case "not_in":
217
+ return [
218
+ {
219
+ column_id: columnId,
220
+ operator: filter.operator,
221
+ value: filter.values,
222
+ type: "condition",
223
+ negate: false,
224
+ },
225
+ ];
226
+ case "is_empty":
227
+ return [
228
+ {
229
+ column_id: columnId,
230
+ operator: "is_empty",
231
+ type: "condition",
232
+ negate: false,
233
+ },
234
+ ];
235
+ default:
236
+ assertNever(filter);
237
+ }
141
238
  case "datetime": {
142
239
  const conditions: FilterConditionType[] = [];
143
240
  if (filter.min !== undefined) {
@@ -210,7 +307,6 @@ export function filterToFilterCondition(
210
307
  {
211
308
  column_id: columnId,
212
309
  operator: "is_true",
213
- value: undefined,
214
310
  type: "condition",
215
311
  negate: false,
216
312
  },
@@ -221,7 +317,6 @@ export function filterToFilterCondition(
221
317
  {
222
318
  column_id: columnId,
223
319
  operator: "is_false",
224
- value: undefined,
225
320
  type: "condition",
226
321
  negate: false,
227
322
  },
@@ -328,14 +328,21 @@ export const FilterButtons = ({
328
328
  onApply,
329
329
  onClear,
330
330
  clearButtonDisabled,
331
+ applyButtonDisabled,
331
332
  }: {
332
333
  onApply: () => void;
333
334
  onClear: () => void;
334
335
  clearButtonDisabled?: boolean;
336
+ applyButtonDisabled?: boolean;
335
337
  }) => {
336
338
  return (
337
339
  <div className="flex gap-2 px-2 justify-between">
338
- <Button variant="link" size="sm" onClick={onApply}>
340
+ <Button
341
+ variant="link"
342
+ size="sm"
343
+ onClick={onApply}
344
+ disabled={applyButtonDisabled}
345
+ >
339
346
  Apply
340
347
  </Button>
341
348
  <Button
@@ -0,0 +1,25 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import type { OperatorType } from "@/plugins/impl/data-frames/utils/operators";
3
+
4
+ export const OPERATOR_LABELS: Record<OperatorType | "between", string> = {
5
+ "==": "Equals",
6
+ "!=": "Doesn't equal",
7
+ ">": "Greater than",
8
+ ">=": "Greater than or equal",
9
+ "<": "Less than",
10
+ "<=": "Less than or equal",
11
+ between: "Between",
12
+ contains: "Contains",
13
+ equals: "Equals",
14
+ does_not_equal: "Doesn't equal",
15
+ starts_with: "Starts with",
16
+ ends_with: "Ends with",
17
+ regex: "Matches regex",
18
+ in: "Is in",
19
+ not_in: "Not in",
20
+ is_empty: "Is empty",
21
+ is_true: "Is true",
22
+ is_false: "Is false",
23
+ is_null: "Is null",
24
+ is_not_null: "Is not null",
25
+ };
@@ -0,0 +1,61 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import React from "react";
3
+ import { cn } from "@/utils/cn";
4
+ import { Input } from "../ui/input";
5
+
6
+ export interface RegexInputProps {
7
+ id?: string;
8
+ value: string;
9
+ onChange: (next: string) => void;
10
+ onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
11
+ placeholder?: string;
12
+ className?: string;
13
+ autoFocus?: boolean;
14
+ "aria-label"?: string;
15
+ }
16
+
17
+ export const RegexInput = React.forwardRef<HTMLInputElement, RegexInputProps>(
18
+ (
19
+ {
20
+ id,
21
+ value,
22
+ onChange,
23
+ onKeyDown,
24
+ placeholder = "pattern",
25
+ className,
26
+ autoFocus,
27
+ "aria-label": ariaLabel,
28
+ },
29
+ ref,
30
+ ) => (
31
+ <div
32
+ className={cn(
33
+ "flex items-stretch h-6 mb-1 rounded-sm border border-input bg-background shadow-xs-solid focus-within:shadow-md-solid focus-within:ring-1 focus-within:ring-ring focus-within:border-primary",
34
+ className,
35
+ )}
36
+ >
37
+ <Slash />
38
+ <Input
39
+ ref={ref}
40
+ id={id}
41
+ type="text"
42
+ value={value}
43
+ onChange={(e) => onChange(e.target.value)}
44
+ onKeyDown={onKeyDown}
45
+ placeholder={placeholder}
46
+ autoFocus={autoFocus}
47
+ aria-label={ariaLabel}
48
+ rootClassName="flex-1 min-w-0"
49
+ className="border-0 mb-0 h-full shadow-none! hover:shadow-none! focus-visible:shadow-none! focus-visible:ring-0 focus-visible:border-0 rounded-none bg-transparent"
50
+ />
51
+ <Slash />
52
+ </div>
53
+ ),
54
+ );
55
+ RegexInput.displayName = "RegexInput";
56
+
57
+ const Slash = () => (
58
+ <span className="px-1.5 flex items-center text-muted-foreground font-code text-sm select-none">
59
+ /
60
+ </span>
61
+ );
@@ -18,14 +18,16 @@ import { assertNever } from "@/utils/assertNever";
18
18
  import { asRemoteURL, useRuntimeManager } from "@/core/runtime/config";
19
19
  import { API } from "@/core/network/api";
20
20
 
21
- type AgentTab = "claude" | "codex" | "opencode";
21
+ type AgentTab = "claude" | "codex" | "opencode" | "prompt";
22
+
23
+ const TERMINAL_TABS = ["claude", "codex", "opencode"] as const;
22
24
 
23
25
  function getMarimoCommand(): string {
24
26
  return import.meta.env.DEV ? "uv run marimo" : "uvx marimo@latest";
25
27
  }
26
28
 
27
- function getPromptCommand(
28
- agent: AgentTab,
29
+ function getTerminalCommand(
30
+ agent: Exclude<AgentTab, "prompt">,
29
31
  url: string,
30
32
  withToken: boolean,
31
33
  ): string {
@@ -43,6 +45,21 @@ function getPromptCommand(
43
45
  }
44
46
  }
45
47
 
48
+ function getRawPrompt(url: string, token: string | null): string {
49
+ const tokenHint = token
50
+ ? `\n\nUse this auth token when calling \`execute-code.sh\`: \`execute-code.sh --url '${url}' --token '${token}'\`.`
51
+ : "";
52
+ return [
53
+ "Use the /marimo-pair skill to pair-program on a running marimo notebook.",
54
+ "",
55
+ `Connect to the notebook at: ${url}`,
56
+ "",
57
+ `Use \`execute-code.sh --url ${url}\` from the marimo-pair skill to execute code in the notebook.${tokenHint}`,
58
+ "",
59
+ "Once you are connected, send a fun toast (mo.status.toast(...)) to the user inside marimo letting them know you're ready to pair.",
60
+ ].join("\n");
61
+ }
62
+
46
63
  function maskToken(token: string): string {
47
64
  if (token.length <= 4) {
48
65
  return "****";
@@ -52,6 +69,13 @@ function maskToken(token: string): string {
52
69
 
53
70
  const SKILL_INSTALL = "npx skills add marimo-team/marimo-pair";
54
71
 
72
+ const AGENT_LABELS: Record<AgentTab, string> = {
73
+ claude: "Claude",
74
+ codex: "Codex",
75
+ opencode: "OpenCode",
76
+ prompt: "Prompt",
77
+ };
78
+
55
79
  function useAuthToken(): string | null {
56
80
  const [token, setToken] = useState<string | null>(null);
57
81
  useEffect(() => {
@@ -75,10 +99,9 @@ export const PairWithAgentModal: React.FC<{
75
99
  const authToken = useAuthToken();
76
100
  const hasToken = Boolean(authToken);
77
101
  const remoteUrl = runtimeManager.httpURL.toString();
78
- const promptCommand = getPromptCommand(activeTab, remoteUrl, hasToken);
79
102
 
80
103
  return (
81
- <DialogContent className="sm:max-w-lg">
104
+ <DialogContent className="sm:max-w-2xl">
82
105
  <DialogHeader>
83
106
  <DialogTitle>Pair with an agent</DialogTitle>
84
107
  <DialogDescription>
@@ -96,49 +119,75 @@ export const PairWithAgentModal: React.FC<{
96
119
  </DialogHeader>
97
120
 
98
121
  <div className="flex flex-col gap-4 py-2">
99
- <div className="flex flex-col gap-2">
100
- <span className="text-sm font-medium">1. Install the skill</span>
101
- <CommandBlock command={SKILL_INSTALL} />
102
- </div>
103
-
104
- <div className="flex flex-col gap-2">
105
- <span className="text-sm font-medium">2. Run in your terminal</span>
106
- <Tabs
107
- value={activeTab}
108
- onValueChange={(v) => setActiveTab(v as AgentTab)}
109
- >
110
- <TabsList className="w-full">
111
- <TabsTrigger value="claude" className="flex-1">
112
- Claude
113
- </TabsTrigger>
114
- <TabsTrigger value="codex" className="flex-1">
115
- Codex
122
+ <Tabs
123
+ value={activeTab}
124
+ onValueChange={(v) => setActiveTab(v as AgentTab)}
125
+ >
126
+ <TabsList className="w-full">
127
+ {(["claude", "codex", "opencode", "prompt"] as const).map((tab) => (
128
+ <TabsTrigger key={tab} value={tab} className="flex-1">
129
+ {AGENT_LABELS[tab]}
116
130
  </TabsTrigger>
117
- <TabsTrigger value="opencode" className="flex-1">
118
- OpenCode
119
- </TabsTrigger>
120
- </TabsList>
131
+ ))}
132
+ </TabsList>
121
133
 
122
- <TabsContent value="claude" className="mt-3">
123
- <CommandBlock command={promptCommand} />
124
- </TabsContent>
125
- <TabsContent value="codex" className="mt-3">
126
- <CommandBlock command={promptCommand} />
134
+ {TERMINAL_TABS.map((tab) => (
135
+ <TabsContent
136
+ key={tab}
137
+ value={tab}
138
+ className="mt-4 flex flex-col gap-4"
139
+ >
140
+ <Step
141
+ index={1}
142
+ title="Install the skill"
143
+ hint="Run once per machine."
144
+ >
145
+ <CommandBlock command={SKILL_INSTALL} />
146
+ </Step>
147
+ <Step index={2} title="Run in your terminal">
148
+ <CommandBlock
149
+ command={getTerminalCommand(tab, remoteUrl, hasToken)}
150
+ />
151
+ </Step>
152
+ {hasToken && authToken && (
153
+ <Step index={3} title="Paste when prompted for a token">
154
+ <CommandBlock
155
+ command={authToken}
156
+ display={maskToken(authToken)}
157
+ />
158
+ </Step>
159
+ )}
127
160
  </TabsContent>
128
- <TabsContent value="opencode" className="mt-3">
129
- <CommandBlock command={promptCommand} />
130
- </TabsContent>
131
- </Tabs>
132
- </div>
133
-
134
- {hasToken && authToken && (
135
- <div className="flex flex-col gap-2">
136
- <span className="text-sm font-medium">
137
- 3. Paste when prompted for token
138
- </span>
139
- <CommandBlock command={authToken} display={maskToken(authToken)} />
140
- </div>
141
- )}
161
+ ))}
162
+
163
+ <TabsContent value="prompt" className="mt-4 flex flex-col gap-4">
164
+ <Step
165
+ index={1}
166
+ title="Make sure the marimo-pair skill is available to your agent"
167
+ hint="Skip if your agent already has it."
168
+ >
169
+ <CommandBlock command={SKILL_INSTALL} />
170
+ </Step>
171
+ <Step
172
+ index={2}
173
+ title="Copy this prompt into your agent"
174
+ hint={
175
+ hasToken
176
+ ? "Includes your auth token — keep it private."
177
+ : undefined
178
+ }
179
+ >
180
+ <CommandBlock
181
+ command={getRawPrompt(remoteUrl, authToken)}
182
+ display={getRawPrompt(
183
+ remoteUrl,
184
+ authToken ? maskToken(authToken) : null,
185
+ )}
186
+ multiline={true}
187
+ />
188
+ </Step>
189
+ </TabsContent>
190
+ </Tabs>
142
191
  </div>
143
192
 
144
193
  <DialogFooter>
@@ -150,10 +199,28 @@ export const PairWithAgentModal: React.FC<{
150
199
  );
151
200
  };
152
201
 
153
- const CommandBlock: React.FC<{ command: string; display?: string }> = ({
154
- command,
155
- display,
156
- }) => {
202
+ const Step: React.FC<{
203
+ index: number;
204
+ title: string;
205
+ hint?: string;
206
+ children: React.ReactNode;
207
+ }> = ({ index, title, hint, children }) => (
208
+ <div className="flex flex-col gap-2">
209
+ <div className="flex items-baseline gap-2">
210
+ <span className="text-sm font-medium">
211
+ {index}. {title}
212
+ </span>
213
+ {hint && <span className="text-xs text-muted-foreground">{hint}</span>}
214
+ </div>
215
+ {children}
216
+ </div>
217
+ );
218
+
219
+ const CommandBlock: React.FC<{
220
+ command: string;
221
+ display?: string;
222
+ multiline?: boolean;
223
+ }> = ({ command, display, multiline = false }) => {
157
224
  const [copied, setCopied] = useState(false);
158
225
 
159
226
  const copy = Events.stopPropagation(async (e) => {
@@ -163,6 +230,30 @@ const CommandBlock: React.FC<{ command: string; display?: string }> = ({
163
230
  setTimeout(() => setCopied(false), 2000);
164
231
  });
165
232
 
233
+ if (multiline) {
234
+ return (
235
+ <div className="relative rounded-md bg-muted">
236
+ <pre className="max-h-64 overflow-auto whitespace-pre-wrap break-words px-3 py-2 pr-10 font-mono text-xs select-all">
237
+ {display ?? command}
238
+ </pre>
239
+ <Tooltip content="Copied!" open={copied}>
240
+ <Button
241
+ onClick={copy}
242
+ size="xs"
243
+ variant="ghost"
244
+ className="absolute right-1 top-1"
245
+ >
246
+ {copied ? (
247
+ <CheckIcon size={14} strokeWidth={1.5} />
248
+ ) : (
249
+ <CopyIcon size={14} strokeWidth={1.5} />
250
+ )}
251
+ </Button>
252
+ </Tooltip>
253
+ </div>
254
+ );
255
+ }
256
+
166
257
  return (
167
258
  <div className="flex items-center gap-2 rounded-md bg-muted px-3 py-2 font-mono text-xs">
168
259
  <code className="flex-1 select-all break-words">