@marimo-team/islands 0.23.9-dev3 → 0.23.9-dev32

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 (289) hide show
  1. package/dist/{ConnectedDataExplorerComponent-2lBNiUv6.js → ConnectedDataExplorerComponent-MJy-Ll40.js} +20 -20
  2. package/dist/ErrorBoundary-rULOrC_p.js +175 -0
  3. package/dist/{ImageComparisonComponent-CNHIsPDj.js → ImageComparisonComponent-CHrI72em.js} +1 -1
  4. package/dist/{Plot-4wn-lMVn.js → Plot-CAYS29h9.js} +1 -1
  5. package/dist/{_baseUniq-CxZRxRRo.js → _baseUniq-B_2Hw7zG.js} +3 -3
  6. package/dist/{any-language-editor-VWs_7v27.js → any-language-editor-DfdpyDv_.js} +23 -23
  7. package/dist/architecture-7HQA4BMR-Kyc44TmC.js +6 -0
  8. package/dist/{architectureDiagram-VXUJARFQ-CXVJxFhH.js → architectureDiagram-VXUJARFQ-CT2SuxNw.js} +15 -15
  9. package/dist/{arrays-CldYf7p7.js → arrays-sEtDRoG4.js} +1 -1
  10. package/dist/assets/__vite-browser-external-BBEFRPue.js +1 -0
  11. package/dist/assets/{worker-CpBbwbQo.js → worker-BoAkAmaG.js} +2 -2
  12. package/dist/{blockDiagram-VD42YOAC-DGDaxR8I.js → blockDiagram-VD42YOAC-Dy7hlFla.js} +7 -7
  13. package/dist/{button-Dj4BTre0.js → button-C5K9fIPF.js} +2 -2
  14. package/dist/{c4Diagram-YG6GDRKO-C2hc6ne8.js → c4Diagram-YG6GDRKO-BXlAmZ8Z.js} +4 -4
  15. package/dist/{capabilities-C9rrYCzf.js → capabilities-BceAxrAW.js} +2 -2
  16. package/dist/{channel-BBoIVUrJ.js → channel-D_PHgcig.js} +1 -1
  17. package/dist/{chat-ui-D3XBept8.js → chat-ui-CpX2YcGy.js} +3084 -3057
  18. package/dist/{check-BcUIXnUT.js → check-DTbrK0zt.js} +1 -1
  19. package/dist/{chunk-4F5CHEZ2-BZq7Kom7.js → chunk-4F5CHEZ2-D9nGEHV8.js} +1 -1
  20. package/dist/{chunk-5FQGJX7Z-BOg95xG5.js → chunk-5FQGJX7Z-BNjes6Yx.js} +5 -5
  21. package/dist/{chunk-ABZYJK2D-D0cLy8Bb.js → chunk-ABZYJK2D-Dz0-H2B5.js} +1 -1
  22. package/dist/{chunk-ATLVNIR6-BXsEjlHF.js → chunk-ATLVNIR6-o0Z5MZLd.js} +1 -1
  23. package/dist/{chunk-B2363JML-D9-XOau1.js → chunk-B2363JML-KEJpLGGP.js} +1 -1
  24. package/dist/{chunk-B4BG7PRW-Q1usn6T3.js → chunk-B4BG7PRW-BL98U9B4.js} +4 -4
  25. package/dist/{chunk-DI55MBZ5-D1qLYNrb.js → chunk-DI55MBZ5-Dwkn0LWm.js} +4 -4
  26. package/dist/{chunk-EXTU4WIE-BKNXdLmD.js → chunk-EXTU4WIE-9sNjmQrB.js} +1 -1
  27. package/dist/{chunk-FRFDVMJY-BSBUAX7r.js → chunk-FRFDVMJY-DzQqMWrl.js} +1 -1
  28. package/dist/{chunk-JA3XYJ7Z-D6c6cOBG.js → chunk-JA3XYJ7Z-C32Y7Epf.js} +2 -2
  29. package/dist/{chunk-JZLCHNYA-BvsPHJmL.js → chunk-JZLCHNYA-C6ftyVMN.js} +4 -4
  30. package/dist/{chunk-N4CR4FBY-8ycT-O9a.js → chunk-N4CR4FBY-DUhGZhZs.js} +5 -5
  31. package/dist/{chunk-PL6DKKU2-B0MTXvyc.js → chunk-PL6DKKU2-D7km-08O.js} +1 -1
  32. package/dist/{chunk-QN33PNHL-Bb-eUBW3.js → chunk-QN33PNHL-0K6SDYn3.js} +1 -1
  33. package/dist/{chunk-QXUST7PY-DV8yRwBd.js → chunk-QXUST7PY-DMhsRpYK.js} +5 -5
  34. package/dist/{chunk-S3R3BYOJ-mQeCz5CE.js → chunk-S3R3BYOJ-oAe3dEbO.js} +3 -3
  35. package/dist/{chunk-SJTYNZTY-CEG4F0pB.js → chunk-SJTYNZTY-BkJrPRFC.js} +1 -1
  36. package/dist/{chunk-TCCFYFTB-d3HOqL2I.js → chunk-TCCFYFTB-D58KeXnC.js} +6 -6
  37. package/dist/{chunk-TQ3KTPDO-DiCtqVSi.js → chunk-TQ3KTPDO-D_yA_wAb.js} +1 -1
  38. package/dist/{chunk-TZMSLE5B-BqW10dHe.js → chunk-TZMSLE5B-yBKS_DQU.js} +1 -1
  39. package/dist/{chunk-UMXZTB3W-97iS1iEl.js → chunk-UMXZTB3W-D7uwvNjd.js} +1 -1
  40. package/dist/{classDiagram-2ON5EDUG--Yh__LHb.js → classDiagram-2ON5EDUG-QjoAcuFE.js} +10 -10
  41. package/dist/{classDiagram-v2-WZHVMYZB-BC7X7Xtc.js → classDiagram-v2-WZHVMYZB-bUCv4gu2.js} +10 -10
  42. package/dist/{clone-BuIIsfA8.js → clone-Q4Fqwn6q.js} +1 -1
  43. package/dist/{code-block-37QAKDTI-BsGy1AOJ.js → code-block-37QAKDTI-m92Yc8pv.js} +2 -2
  44. package/dist/{code-visibility-BKxrBMod.js → code-visibility-Bq6MzjHR.js} +8434 -8599
  45. package/dist/{constants-D0gkYoE2.js → constants-T20xxyNf.js} +2 -2
  46. package/dist/{copy-DLf4aN7I.js → copy-BuQpJEzp.js} +2 -2
  47. package/dist/{dagre-6UL2VRFP-DRBWoQUw.js → dagre-6UL2VRFP-J0JKgwOt.js} +11 -11
  48. package/dist/{dagre-VYEPqXIV.js → dagre-By_QsQgc.js} +11 -11
  49. package/dist/{data-grid-overlay-editor-efe5ZagF.js → data-grid-overlay-editor-mfEJ5475.js} +2 -2
  50. package/dist/{diagram-PSM6KHXK-H66ATWP2.js → diagram-PSM6KHXK-DYgJuNk9.js} +18 -18
  51. package/dist/{diagram-QEK2KX5R-DItl5Wns.js → diagram-QEK2KX5R-CKdBR2sb.js} +14 -14
  52. package/dist/{diagram-S2PKOQOG-CtuW_ZuL.js → diagram-S2PKOQOG-Dpi7mo5W.js} +14 -14
  53. package/dist/dist-0Fif7jnk.js +5 -0
  54. package/dist/{dist-Dh3wkoyH.js → dist-4j4c7bjm.js} +2 -2
  55. package/dist/{dist-CDFZi-QD.js → dist-B3P2fFpz.js} +1 -1
  56. package/dist/{dist-BNyrZfqT.js → dist-B3pZ0Ab6.js} +2 -2
  57. package/dist/dist-B5h_9sHB.js +6 -0
  58. package/dist/dist-B9M6R5ye.js +5 -0
  59. package/dist/dist-BCt3tnck.js +8 -0
  60. package/dist/{dist-BrBucRXs.js → dist-BTfv03uy.js} +2 -2
  61. package/dist/dist-BUIJwMwn.js +8 -0
  62. package/dist/{dist-CYEylvZA.js → dist-BbbIBDiQ.js} +1 -1
  63. package/dist/{dist-KnujRhFL.js → dist-BcuoonNH.js} +4 -4
  64. package/dist/{dist-DJ6zJQZ4.js → dist-Bde4a2kU.js} +2 -2
  65. package/dist/{dist-t_qL7eB8.js → dist-Bfwsv11D.js} +2 -2
  66. package/dist/{dist-CNtV21T_.js → dist-BhM8gdSO.js} +4 -4
  67. package/dist/{dist-nuW5EDYT.js → dist-BotSqB48.js} +2 -2
  68. package/dist/dist-BpquMd3k.js +5 -0
  69. package/dist/dist-BzJsqYfz.js +5 -0
  70. package/dist/{dist-D029TiHd.js → dist-Bz_sYWbr.js} +2 -2
  71. package/dist/{dist-D3ZI9nhS.js → dist-C1BYNeCR.js} +4 -4
  72. package/dist/{dist-Bc5pmZIw.js → dist-C5VC_yzu.js} +1 -1
  73. package/dist/dist-CA5ELXAf.js +6 -0
  74. package/dist/dist-CLBRs6Uv.js +5 -0
  75. package/dist/{dist-Dhk6FMb0.js → dist-CLJWPTX2.js} +3 -3
  76. package/dist/{dist-C34oIrQ9.js → dist-CLUtPrdy.js} +1 -1
  77. package/dist/dist-CStVCMbq.js +5 -0
  78. package/dist/{dist-B8RaFTRF.js → dist-CUCNs1ja.js} +2 -2
  79. package/dist/dist-CZRIEY3Y.js +8 -0
  80. package/dist/{dist-UcOPnRMa.js → dist-CcXxepx6.js} +3 -3
  81. package/dist/dist-CuUHbFD0.js +5 -0
  82. package/dist/{dist-B8BjrFUE.js → dist-Cy1WxgBD.js} +5 -5
  83. package/dist/{dist-WdPUFc56.js → dist-D4CewLk6.js} +1 -1
  84. package/dist/{dist-DMZNjfX4.js → dist-DRfcqpxJ.js} +2 -2
  85. package/dist/dist-DV7Iabxb.js +8 -0
  86. package/dist/{dist-usPCDYx8.js → dist-D_bzzWBm.js} +1 -1
  87. package/dist/{dist-BvCfQQQE.js → dist-DgnE8F-r.js} +1 -1
  88. package/dist/{dist-JEhxD_cn.js → dist-DhHh0jLg.js} +1 -1
  89. package/dist/{dist-DGAfI2rB.js → dist-DqAWR3CS.js} +2 -2
  90. package/dist/{dist--sWVZwjW.js → dist-Du8WkPuU.js} +1 -1
  91. package/dist/dist-DuEeHMvL.js +5 -0
  92. package/dist/{dist-BTyJtnNg.js → dist-DxvORzUR.js} +1 -1
  93. package/dist/{dist-B507mf_I.js → dist-RqXTaiir.js} +2 -2
  94. package/dist/{dist-Yrfc6L0I.js → dist-fQ0ViXGs.js} +3 -3
  95. package/dist/{dist-B4LJpMEg.js → dist-h2c8sZvT.js} +1 -1
  96. package/dist/{dist-C2ej4eOH.js → dist-luvabDEB.js} +2 -2
  97. package/dist/{dist-B52GXZbd.js → dist-p2qyWijU.js} +2 -2
  98. package/dist/{erDiagram-Q2GNP2WA--19X2kU5.js → erDiagram-Q2GNP2WA-BU-m41EQ.js} +10 -10
  99. package/dist/{error-banner-CVkfBUT3.js → error-banner-5bz0L9hS.js} +3 -3
  100. package/dist/{esm-CWp0KQeK.js → esm-BfhQmZjp.js} +4 -4
  101. package/dist/{esm-DjNnlmpf.js → esm-Duie8iU-.js} +23 -23
  102. package/dist/{extends-vAi97cpa.js → extends-BgdxCfYu.js} +6 -6
  103. package/dist/{flatten-CzBvFdvC.js → flatten-Bbw7g6-K.js} +1 -1
  104. package/dist/{flowDiagram-NV44I4VS-DQmWlo7f.js → flowDiagram-NV44I4VS-CRoXKjGq.js} +10 -10
  105. package/dist/{formats-Dsy9kkZu.js → formats-BIKFEOlR.js} +4 -4
  106. package/dist/{ganttDiagram-JELNMOA3-BOGXJ8Lk.js → ganttDiagram-JELNMOA3-7mq5f9cO.js} +7 -7
  107. package/dist/{gitGraph-G5XIXVHT-DGlbae5m.js → gitGraph-G5XIXVHT-DiniR35k.js} +3 -3
  108. package/dist/{gitGraphDiagram-V2S2FVAM-DjzxfF0P.js → gitGraphDiagram-V2S2FVAM-Dfuokq6w.js} +13 -13
  109. package/dist/{glide-data-editor-DucgdjRo.js → glide-data-editor-DjQd6fKp.js} +557 -557
  110. package/dist/{graphlib-CVPKjKCS.js → graphlib-Ns7y5crs.js} +5 -5
  111. package/dist/{hasIn-COs6vImh.js → hasIn-Deg7jl_j.js} +3 -3
  112. package/dist/{html-to-image-CpggM7u1.js → html-to-image-QL7QveRm.js} +115 -110
  113. package/dist/{info-VBDWY6EO-D2lvLLw5.js → info-VBDWY6EO-DVZvGhkQ.js} +3 -3
  114. package/dist/{infoDiagram-HS3SLOUP-ChNufFsP.js → infoDiagram-HS3SLOUP-CEnzWruK.js} +13 -13
  115. package/dist/{input-D4kjoQUB.js → input-Dh0iMVFM.js} +70 -67
  116. package/dist/{isEmpty-Dd8mx_WL.js → isEmpty-CJJMn-QP.js} +1 -1
  117. package/dist/{isSymbol-BvIfMnn6.js → isSymbol-CoUCgMCM.js} +1 -1
  118. package/dist/{journeyDiagram-XKPGCS4Q-BO_O4Ij1.js → journeyDiagram-XKPGCS4Q-8XYSU1GI.js} +3 -3
  119. package/dist/{kanban-definition-3W4ZIXB7-CPpiiiWk.js → kanban-definition-3W4ZIXB7--9pT9z1R.js} +7 -7
  120. package/dist/{label-BLqV33b1.js → label-LWtdw5i8.js} +3 -3
  121. package/dist/{linear-2NnK4cxi.js → linear-B5-AFRiR.js} +2 -2
  122. package/dist/{loader-Dr8Qem8p.js → loader-BWLPpjKK.js} +2 -2
  123. package/dist/main.js +1689 -1570
  124. package/dist/{memoize-C9ltv0Cw.js → memoize-BOtf2yFf.js} +1 -1
  125. package/dist/{merge-CHn7Yx0N.js → merge-Be1CqGnU.js} +1 -1
  126. package/dist/mermaid-4DMBBIKO-DIdL224_.js +6 -0
  127. package/dist/{mermaid-DO-Daq7u.js → mermaid-CAibas-0.js} +44 -44
  128. package/dist/{mermaid-parser.core-DreccfmS.js → mermaid-parser.core-C3XRsazI.js} +8 -8
  129. package/dist/{min-BNz2lZfk.js → min-Dtgc8txR.js} +4 -4
  130. package/dist/{mindmap-definition-VGOIOE7T-CC1_Vl0f.js → mindmap-definition-VGOIOE7T-B-4mnfFG.js} +9 -9
  131. package/dist/{now-Sgq5m3D-.js → now-Ch98bJO_.js} +2 -2
  132. package/dist/{number-overlay-editor-CpKi64Fy.js → number-overlay-editor-D-a0qCT8.js} +1 -1
  133. package/dist/{once-rJImu7SE.js → once-DPuqGUeo.js} +1 -1
  134. package/dist/{packet-DYOGHKS2-CmWtF3uO.js → packet-DYOGHKS2-34raHOiB.js} +3 -3
  135. package/dist/{pick-CRAXxDYn.js → pick-D1Qo8s2C.js} +4 -4
  136. package/dist/{pie-VRWISCQL-B6u8vus8.js → pie-VRWISCQL-BaLlzZa3.js} +3 -3
  137. package/dist/{pieDiagram-ADFJNKIX-Di34MOFQ.js → pieDiagram-ADFJNKIX-Cr3cNpZY.js} +15 -15
  138. package/dist/{precisionRound-CnHPY_5v.js → precisionRound-Tqb4mg-H.js} +1 -1
  139. package/dist/{process-output-X8TR20AK.js → process-output-C657UH7t.js} +36 -28
  140. package/dist/{quadrantDiagram-AYHSOK5B-B9kVk1ny.js → quadrantDiagram-AYHSOK5B-BuNL8Q93.js} +4 -4
  141. package/dist/{radar-ZZBFDIW7-XAmXSa8s.js → radar-ZZBFDIW7-Ci7bfoZa.js} +3 -3
  142. package/dist/{react-vega-Dh6-UKKe.js → react-vega-B0sAlDTL.js} +9 -9
  143. package/dist/react-vega-B6ncY2Tp.js +9 -0
  144. package/dist/{requirementDiagram-UZGBJVZJ-BxGfGYEx.js → requirementDiagram-UZGBJVZJ-BG2lLUN1.js} +9 -9
  145. package/dist/{reveal-component-BMyi2UMr.js → reveal-component-BQijUbYE.js} +33 -33
  146. package/dist/{sankeyDiagram-TZEHDZUN-D09PBJ-n.js → sankeyDiagram-TZEHDZUN-DMal8sps.js} +3 -3
  147. package/dist/{sequenceDiagram-WL72ISMW-t_Dpemj0.js → sequenceDiagram-WL72ISMW-DT6Tk-Eo.js} +4 -4
  148. package/dist/{spec-hVaaZsY5.js → spec-BKuFJIDz.js} +4 -4
  149. package/dist/{stateDiagram-FKZM4ZOC-B18gTP_j.js → stateDiagram-FKZM4ZOC-CB_lodq3.js} +12 -12
  150. package/dist/{stateDiagram-v2-4FDKWEC3-B6e_t14A.js → stateDiagram-v2-4FDKWEC3-E0RGjKsm.js} +10 -10
  151. package/dist/stex-KfRnSHzF.js +4 -0
  152. package/dist/{strings-BiIhGaI8.js → strings-Bu3vlb6W.js} +7 -7
  153. package/dist/style.css +1 -1
  154. package/dist/{swiper-component-DlD2GU2g.js → swiper-component-B2t5sN1q.js} +3 -3
  155. package/dist/{time-C1SGcFMH.js → time-CsmIF9YZ.js} +3 -3
  156. package/dist/{timeline-definition-IT6M3QCI-DJnh1ks5.js → timeline-definition-IT6M3QCI-NfSKRvH0.js} +2 -2
  157. package/dist/{toDate-CIpC_34u.js → toDate-BeKbrOvs.js} +5 -5
  158. package/dist/{tooltip-DRaMBu06.js → tooltip-C5FYOpQc.js} +4 -4
  159. package/dist/{treemap-GDKQZRPO-Du95DV6u.js → treemap-GDKQZRPO-Cl6OQh8D.js} +3 -3
  160. package/dist/{types-Dzuoc3LN.js → types-CVvp1fKr.js} +2 -9
  161. package/dist/{useAsyncData-C56Khv_R.js → useAsyncData-yp6n17kh.js} +2 -2
  162. package/dist/{useDateFormatter-B_9k85Ex.js → useDateFormatter-BA4FCquG.js} +2 -2
  163. package/dist/{useDeepCompareMemoize-Dt98v2ua.js → useDeepCompareMemoize-DJvAHUIC.js} +1 -1
  164. package/dist/{useIframeCapabilities-BkYHTrss.js → useIframeCapabilities-C4JTXTIh.js} +1 -1
  165. package/dist/{useLifecycle-BF6-z62y.js → useLifecycle-CsYXf0Ln.js} +4 -4
  166. package/dist/{useTheme-DykuNHR2.js → useTheme-CK_R9Mn8.js} +24 -21
  167. package/dist/{vega-component-cSdqoAxe.js → vega-component-ikfBfkZO.js} +18 -18
  168. package/dist/{vega-loader.browser-3_z8GoFC.js → vega-loader.browser-CZ-J8Py3.js} +3 -3
  169. package/dist/{xychartDiagram-PRI3JC2R-Dk2d_bX0.js → xychartDiagram-PRI3JC2R-BvwftqMA.js} +9 -9
  170. package/dist/{zod-BWkcDORu.js → zod-CoBiJ5v4.js} +3 -3
  171. package/package.json +1 -1
  172. package/src/components/ai/__tests__/ai-utils.test.ts +43 -38
  173. package/src/components/ai/ai-model-dropdown.tsx +2 -2
  174. package/src/components/app-config/ai-config.tsx +73 -1
  175. package/src/components/app-config/user-config-form.tsx +37 -1
  176. package/src/components/chat/__tests__/chat-utils.test.ts +269 -0
  177. package/src/components/chat/chat-panel.tsx +36 -3
  178. package/src/components/chat/chat-utils.ts +14 -58
  179. package/src/components/data-table/TableBottomBar.tsx +27 -6
  180. package/src/components/data-table/TableTopBar.tsx +7 -1
  181. package/src/components/data-table/__tests__/TableBottomBar.test.tsx +73 -0
  182. package/src/components/data-table/__tests__/column-explorer.test.tsx +128 -0
  183. package/src/components/data-table/__tests__/column-header.test.tsx +110 -277
  184. package/src/components/data-table/__tests__/data-table.test.tsx +52 -1
  185. package/src/components/data-table/__tests__/date-filter-inputs.test.tsx +33 -0
  186. package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +75 -38
  187. package/src/components/data-table/__tests__/filter-pills.test.tsx +287 -0
  188. package/src/components/data-table/__tests__/filter-test-utils.ts +47 -0
  189. package/src/components/data-table/__tests__/filters.test.ts +5 -5
  190. package/src/components/data-table/__tests__/header-items.test.tsx +47 -1
  191. package/src/components/data-table/__tests__/useColumnVisibility.test.ts +42 -0
  192. package/src/components/data-table/add-filter-button.tsx +85 -0
  193. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +98 -26
  194. package/src/components/data-table/column-header.tsx +94 -691
  195. package/src/components/data-table/columns.tsx +3 -4
  196. package/src/components/data-table/context-menu.tsx +26 -12
  197. package/src/components/data-table/data-table.tsx +125 -56
  198. package/src/components/data-table/date-filter-inputs.tsx +13 -10
  199. package/src/components/data-table/export-actions.tsx +17 -6
  200. package/src/components/data-table/filter-by-values-picker.tsx +13 -19
  201. package/src/components/data-table/filter-editor-context.tsx +34 -0
  202. package/src/components/data-table/filter-pill-editor.tsx +152 -175
  203. package/src/components/data-table/filter-pills.tsx +190 -153
  204. package/src/components/data-table/filters/builders.ts +102 -0
  205. package/src/components/data-table/filters/defaults.ts +31 -0
  206. package/src/components/data-table/filters/format.ts +131 -0
  207. package/src/components/data-table/filters/guards.ts +51 -0
  208. package/src/components/data-table/filters/index.ts +7 -0
  209. package/src/components/data-table/filters/operators.ts +76 -0
  210. package/src/components/data-table/filters/serialize.ts +186 -0
  211. package/src/components/data-table/filters/types.ts +33 -0
  212. package/src/components/data-table/header-items.tsx +25 -85
  213. package/src/components/data-table/hooks/use-column-visibility.ts +56 -0
  214. package/src/components/data-table/pagination.tsx +16 -3
  215. package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +16 -6
  216. package/src/components/data-table/value-chips.tsx +52 -0
  217. package/src/components/databases/display.tsx +2 -0
  218. package/src/components/datasources/__tests__/utils.test.ts +82 -0
  219. package/src/components/datasources/utils.ts +16 -15
  220. package/src/components/editor/actions/pair-with-agent-modal.tsx +1 -0
  221. package/src/components/editor/errors/mangled-local-chip.tsx +50 -0
  222. package/src/components/editor/output/MarimoErrorOutput.tsx +110 -27
  223. package/src/components/editor/output/MarimoTracebackOutput.tsx +51 -34
  224. package/src/components/editor/renderers/slides-layout/slides-layout.tsx +1 -1
  225. package/src/components/slides/reveal-component.tsx +3 -3
  226. package/src/components/slides/slide-form.tsx +11 -3
  227. package/src/components/ui/number-field.tsx +13 -1
  228. package/src/core/ai/__tests__/model-registry.test.ts +72 -60
  229. package/src/core/ai/model-registry.ts +33 -28
  230. package/src/core/cells/__tests__/actions.test.ts +48 -0
  231. package/src/core/cells/actions.ts +5 -6
  232. package/src/core/codemirror/__tests__/setup.test.ts +29 -0
  233. package/src/core/codemirror/cells/traceback-decorations.ts +1 -1
  234. package/src/core/codemirror/cm.ts +3 -2
  235. package/src/core/codemirror/format.ts +1 -0
  236. package/src/core/codemirror/keymaps/vim.ts +63 -0
  237. package/src/core/codemirror/language/languages/sql/sql.ts +1 -0
  238. package/src/core/codemirror/language/languages/sql/utils.ts +2 -0
  239. package/src/core/config/__tests__/config-schema.test.ts +2 -0
  240. package/src/core/config/config-schema.ts +2 -0
  241. package/src/css/app/Cell.css +0 -1
  242. package/src/plugins/impl/DataTablePlugin.tsx +94 -33
  243. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +1 -0
  244. package/src/plugins/impl/chat/ChatPlugin.tsx +7 -1
  245. package/src/plugins/impl/chat/__tests__/chat-ui.test.ts +278 -0
  246. package/src/plugins/impl/chat/chat-ui.tsx +106 -59
  247. package/src/plugins/impl/chat/types.ts +5 -0
  248. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +8 -6
  249. package/src/stories/dataframe.stories.tsx +1 -0
  250. package/src/utils/__tests__/local-variables.test.ts +132 -0
  251. package/src/utils/dates.ts +39 -0
  252. package/src/utils/local-variables.ts +67 -0
  253. package/dist/ErrorBoundary-D3wrPNma.js +0 -167
  254. package/dist/architecture-7HQA4BMR-CS9jOrqM.js +0 -6
  255. package/dist/assets/__vite-browser-external-CAdMKBac.js +0 -1
  256. package/dist/dist-21ButRCu.js +0 -8
  257. package/dist/dist-B--tLnAP.js +0 -5
  258. package/dist/dist-BoHGySTM.js +0 -5
  259. package/dist/dist-ByAz19Qc.js +0 -5
  260. package/dist/dist-C1Ap5CYU.js +0 -5
  261. package/dist/dist-C93EysN4.js +0 -5
  262. package/dist/dist-CY-lVor6.js +0 -8
  263. package/dist/dist-CYDuv4bR.js +0 -8
  264. package/dist/dist-Cfo5EE2t.js +0 -6
  265. package/dist/dist-CjivSDvN.js +0 -5
  266. package/dist/dist-Cqwx-MH7.js +0 -5
  267. package/dist/dist-DbpcoFAV.js +0 -6
  268. package/dist/dist-FUNenbiQ.js +0 -5
  269. package/dist/dist-zhSud5X3.js +0 -8
  270. package/dist/mermaid-4DMBBIKO-B7VQMwJx.js +0 -6
  271. package/dist/react-vega-Cavbrg4l.js +0 -9
  272. package/dist/stex-ChDHQs3R.js +0 -4
  273. package/src/components/data-table/__tests__/column-header.test.ts +0 -65
  274. package/src/components/data-table/filters.ts +0 -386
  275. /package/dist/{_baseFor-BGiY-cm1.js → _baseFor-4jw-lnCC.js} +0 -0
  276. /package/dist/{clsx-CyyyQ8Ue.js → clsx-CIWA5tNO.js} +0 -0
  277. /package/dist/{defaultLocale-DoeErsX2.js → defaultLocale-BoHTsDG6.js} +0 -0
  278. /package/dist/{defaultLocale-BpsHxBd7.js → defaultLocale-u-3osm0P.js} +0 -0
  279. /package/dist/{dist-CCADb07R.js → dist-DNdhYsgW.js} +0 -0
  280. /package/dist/{emotion-is-prop-valid.esm-DtW2o230.js → emotion-is-prop-valid.esm-DzSb5hsH.js} +0 -0
  281. /package/dist/{invariant-UcGKQEhF.js → invariant-wRzNXIsJ.js} +0 -0
  282. /package/dist/{jsx-runtime-COBk7ree.js → jsx-runtime-DebpN0FN.js} +0 -0
  283. /package/dist/{main-CThhXnXU.js → main-Tj_-QTyF.js} +0 -0
  284. /package/dist/{micromark-factory-space-CwHmg6iz.js → micromark-factory-space-DF2w36zS.js} +0 -0
  285. /package/dist/{ordinal-B43ZeR68.js → ordinal-ArJavP1Q.js} +0 -0
  286. /package/dist/{purify.es-DT70lfR0.js → purify.es-H92eMd9-.js} +0 -0
  287. /package/dist/{range-BOiA8qqU.js → range-C-rmrM1O.js} +0 -0
  288. /package/dist/{react-dom-BWRJ_g_k.js → react-dom-BTJzcVJ9.js} +0 -0
  289. /package/dist/{stex-DrxP7bb3.js → stex-BIsgBmK4.js} +0 -0
@@ -1,9 +1,9 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
- import { g as cn, l as useEventListener, t as Button } from "./button-Dj4BTre0.js";
2
+ import { g as cn, l as useEventListener, t as Button } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { t as require_jsx_runtime } from "./jsx-runtime-COBk7ree.js";
6
- import { t as useIframeCapabilities } from "./useIframeCapabilities-BkYHTrss.js";
5
+ import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
6
+ import { t as useIframeCapabilities } from "./useIframeCapabilities-C4JTXTIh.js";
7
7
  var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1);
8
8
  function isObject$2(t2) {
9
9
  return typeof t2 == "object" && !!t2 && "constructor" in t2 && t2.constructor === Object;
@@ -1,6 +1,6 @@
1
- import { a as tickStep, s as bisector } from "./precisionRound-CnHPY_5v.js";
2
- import { a as copy, i as continuous } from "./linear-2NnK4cxi.js";
3
- import { A as durationSecond, C as timeMinute, D as durationHour, E as durationDay, M as durationYear, N as millisecond, O as durationMinute, S as utcHour, T as second, _ as utcSunday, c as timeMonth, j as durationWeek, k as durationMonth, l as utcMonth, o as timeYear, p as timeSunday, s as utcYear, t as timeFormat, v as timeDay, w as utcMinute, x as timeHour, y as unixDay } from "./defaultLocale-DoeErsX2.js";
1
+ import { a as tickStep, s as bisector } from "./precisionRound-Tqb4mg-H.js";
2
+ import { a as copy, i as continuous } from "./linear-B5-AFRiR.js";
3
+ import { A as durationSecond, C as timeMinute, D as durationHour, E as durationDay, M as durationYear, N as millisecond, O as durationMinute, S as utcHour, T as second, _ as utcSunday, c as timeMonth, j as durationWeek, k as durationMonth, l as utcMonth, o as timeYear, p as timeSunday, s as utcYear, t as timeFormat, v as timeDay, w as utcMinute, x as timeHour, y as unixDay } from "./defaultLocale-BoHTsDG6.js";
4
4
  import { n as initRange } from "./init-uv0kkh4g.js";
5
5
  function max(e, g) {
6
6
  let _;
@@ -1,7 +1,7 @@
1
- import "./purify.es-DT70lfR0.js";
1
+ import "./purify.es-H92eMd9-.js";
2
2
  import { t as arc_default } from "./arc-DfkSnvZm.js";
3
3
  import { i as log, n as __export, r as __name, t as select_default } from "./src-Bf2iLOlr.js";
4
- import { G as setupGraphViewbox, Q as is_dark_default, X as darken_default, Z as lighten_default, a as clear, b as getConfig2, o as commonDb_exports } from "./chunk-ABZYJK2D-D0cLy8Bb.js";
4
+ import { G as setupGraphViewbox, Q as is_dark_default, X as darken_default, Z as lighten_default, a as clear, b as getConfig2, o as commonDb_exports } from "./chunk-ABZYJK2D-Dz0-H2B5.js";
5
5
  var parser = (function() {
6
6
  var t = /* @__PURE__ */ __name(function(t2, S2, C2, w) {
7
7
  for (C2 || (C2 = {}), w = t2.length; w--; C2[t2[w]] = S2) ;
@@ -2,12 +2,12 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import { t as __commonJSMin } from "./chunk-BNovOVIE.js";
5
- import { _ as Logger } from "./button-Dj4BTre0.js";
5
+ import { _ as Logger } from "./button-C5K9fIPF.js";
6
6
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
7
- import { u as createLucideIcon } from "./dist-D3ZI9nhS.js";
8
- import { r as KnownQueryParams } from "./constants-D0gkYoE2.js";
9
- import { f as waitFor, p as isIslands, u as store, y as atom } from "./useTheme-DykuNHR2.js";
10
- import { t as invariant } from "./invariant-UcGKQEhF.js";
7
+ import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
8
+ import { r as KnownQueryParams } from "./constants-T20xxyNf.js";
9
+ import { b as atom, d as store, m as isIslands, p as waitFor } from "./useTheme-CK_R9Mn8.js";
10
+ import { t as invariant } from "./invariant-wRzNXIsJ.js";
11
11
  var CircleQuestionMark = createLucideIcon("circle-question-mark", [
12
12
  ["circle", {
13
13
  cx: "12",
@@ -1,10 +1,10 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
- import { f as createSlottable, g as cn, m as useComposedRefs } from "./button-Dj4BTre0.js";
2
+ import { f as createSlottable, g as cn, m as useComposedRefs } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { a as createPopperScope, i as Root2, n as Arrow, r as Content, s as Root, t as Anchor } from "./dist-D3ZI9nhS.js";
6
- import { t as require_jsx_runtime } from "./jsx-runtime-COBk7ree.js";
7
- import { $ as StyleNamespace, X as withFullScreenAsRoot, Z as withSmartCollisionBoundary, _t as Primitive, dt as Presence, ft as useControllableState, gt as createContextScope, it as Portal, mt as composeEventHandlers, st as DismissableLayer, ut as useId } from "./zod-BWkcDORu.js";
5
+ import { a as createPopperScope, i as Root2, n as Arrow, r as Content, s as Root, t as Anchor } from "./dist-C1BYNeCR.js";
6
+ import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
7
+ import { $ as StyleNamespace, X as withFullScreenAsRoot, Z as withSmartCollisionBoundary, _t as Primitive, dt as Presence, ft as useControllableState, gt as createContextScope, it as Portal, mt as composeEventHandlers, st as DismissableLayer, ut as useId } from "./zod-CoBiJ5v4.js";
8
8
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1), import_jsx_runtime = /* @__PURE__ */ __toESM(require_jsx_runtime(), 1), [createTooltipContext, createTooltipScope] = createContextScope("Tooltip", [createPopperScope]), usePopperScope = createPopperScope(), PROVIDER_NAME = "TooltipProvider", DEFAULT_DELAY_DURATION = 700, TOOLTIP_OPEN = "tooltip.open", [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME), TooltipProvider$1 = (n) => {
9
9
  let { __scopeTooltip: j, delayDuration: M = DEFAULT_DELAY_DURATION, skipDelayDuration: N = 300, disableHoverableContent: P = false, children: F } = n, I = import_react.useRef(true), L = import_react.useRef(false), R = import_react.useRef(0);
10
10
  return import_react.useEffect(() => {
@@ -1,6 +1,6 @@
1
- import "./chunk-TCCFYFTB-d3HOqL2I.js";
2
- import "./main-CThhXnXU.js";
3
- import { n as createTreemapServices, t as TreemapModule } from "./chunk-B2363JML-D9-XOau1.js";
1
+ import "./chunk-TCCFYFTB-D58KeXnC.js";
2
+ import "./main-Tj_-QTyF.js";
3
+ import { n as createTreemapServices, t as TreemapModule } from "./chunk-B2363JML-KEJpLGGP.js";
4
4
  export {
5
5
  createTreemapServices
6
6
  };
@@ -1,16 +1,10 @@
1
- import { u as createLucideIcon } from "./dist-D3ZI9nhS.js";
1
+ import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
2
2
  var Pencil = createLucideIcon("pencil", [["path", {
3
3
  d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",
4
4
  key: "1a8usu"
5
5
  }], ["path", {
6
6
  d: "m15 5 4 4",
7
7
  key: "1mk7zo"
8
- }]]), Plus = createLucideIcon("plus", [["path", {
9
- d: "M5 12h14",
10
- key: "1ays0h"
11
- }], ["path", {
12
- d: "M12 5v14",
13
- key: "s699le"
14
8
  }]]), Trash = createLucideIcon("trash", [
15
9
  ["path", {
16
10
  d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",
@@ -31,8 +25,7 @@ const BulkEdit = {
31
25
  Rename: "rename"
32
26
  };
33
27
  export {
34
- Pencil as i,
35
28
  Trash as n,
36
- Plus as r,
29
+ Pencil as r,
37
30
  BulkEdit as t
38
31
  };
@@ -1,8 +1,8 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
3
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
4
- import { w as useEvent_default } from "./useTheme-DykuNHR2.js";
5
- import { t as invariant } from "./invariant-UcGKQEhF.js";
4
+ import { T as useEvent_default } from "./useTheme-CK_R9Mn8.js";
5
+ import { t as invariant } from "./invariant-wRzNXIsJ.js";
6
6
  var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1), Result = {
7
7
  error(e, s) {
8
8
  return {
@@ -1,7 +1,7 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
- import { u as createLucideIcon } from "./dist-D3ZI9nhS.js";
4
- import { T as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 } from "./strings-BiIhGaI8.js";
3
+ import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
4
+ import { T as $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 } from "./strings-Bu3vlb6W.js";
5
5
  var ChartPie = createLucideIcon("chart-pie", [["path", {
6
6
  d: "M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",
7
7
  key: "pzmjnu"
@@ -1,6 +1,6 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
- import { C as dequal } from "./useTheme-DykuNHR2.js";
3
+ import { w as dequal } from "./useTheme-CK_R9Mn8.js";
4
4
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
5
5
  function useDeepCompareMemoize(e) {
6
6
  let i = import_react.useRef(e);
@@ -1,7 +1,7 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
2
  import { t as require_react } from "./react-DA-nE2FX.js";
3
3
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
4
- import { t as getIframeCapabilities } from "./capabilities-C9rrYCzf.js";
4
+ import { t as getIframeCapabilities } from "./capabilities-BceAxrAW.js";
5
5
  var import_compiler_runtime = require_compiler_runtime();
6
6
  require_react();
7
7
  function useIframeCapabilities() {
@@ -1,10 +1,10 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
- import { _ as Logger, g as cn, r as cva } from "./button-Dj4BTre0.js";
2
+ import { _ as Logger, g as cn, r as cva } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { u as createLucideIcon } from "./dist-D3ZI9nhS.js";
6
- import { t as require_jsx_runtime } from "./jsx-runtime-COBk7ree.js";
7
- import { _ as useSetAtom, y as atom } from "./useTheme-DykuNHR2.js";
5
+ import { u as createLucideIcon } from "./dist-C1BYNeCR.js";
6
+ import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
7
+ import { b as atom, v as useSetAtom } from "./useTheme-CK_R9Mn8.js";
8
8
  var Calendar = createLucideIcon("calendar", [
9
9
  ["path", {
10
10
  d: "M8 2v4",
@@ -1,9 +1,9 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
- import { _ as Logger, a as OverridingHotkeyProvider, s as resolvePlatform } from "./button-Dj4BTre0.js";
2
+ import { _ as Logger, a as OverridingHotkeyProvider, s as resolvePlatform } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { A as looseObject, B as union, I as record, N as number, P as object, R as string, T as boolean, b as _enum, w as array } from "./zod-BWkcDORu.js";
6
- import { t as merge_default } from "./merge-CHn7Yx0N.js";
5
+ import { A as looseObject, B as union, I as record, N as number, P as object, R as string, T as boolean, b as _enum, w as array } from "./zod-CoBiJ5v4.js";
6
+ import { t as merge_default } from "./merge-Be1CqGnU.js";
7
7
  var import_react = /* @__PURE__ */ __toESM(require_react()), useInsertionEffect = typeof window < "u" ? import_react.useInsertionEffect || import_react.useLayoutEffect : () => {
8
8
  };
9
9
  function useEvent(e) {
@@ -556,6 +556,7 @@ const UserConfigSchema = looseObject({
556
556
  completion: object({
557
557
  activate_on_typing: boolean().prefault(true),
558
558
  signature_hint_on_typing: boolean().prefault(false),
559
+ auto_close_pairs: boolean().prefault(true),
559
560
  copilot: union([boolean(), _enum([
560
561
  "github",
561
562
  "codeium",
@@ -606,6 +607,7 @@ const UserConfigSchema = looseObject({
606
607
  package_management: looseObject({ manager: _enum(PackageManagerNames).prefault("pip") }).prefault({}),
607
608
  ai: looseObject({
608
609
  rules: string().prefault(""),
610
+ max_tokens: number().int().positive().nullable().optional(),
609
611
  mode: _enum(COPILOT_MODES).prefault("manual"),
610
612
  inline_tooltip: boolean().prefault(false),
611
613
  open_ai: AiConfigSchema.optional(),
@@ -777,28 +779,29 @@ function useTheme() {
777
779
  return e[1] === j ? M = e[2] : (M = { theme: j }, e[1] = j, e[2] = M), M;
778
780
  }
779
781
  export {
780
- dequal as C,
781
- getBuildingBlocks as S,
782
- useSetAtom as _,
782
+ getBuildingBlocks as C,
783
+ buildStore as S,
784
+ useEvent_default as T,
785
+ useAtomValue as _,
783
786
  getResolvedMarimoConfig as a,
784
- createStore as b,
785
- AppConfigSchema as c,
786
- useJotaiEffect as d,
787
- waitFor as f,
788
- useAtomValue as g,
789
- useAtom as h,
787
+ atom as b,
788
+ useResolvedMarimoConfig as c,
789
+ store as d,
790
+ useJotaiEffect as f,
791
+ useAtom as g,
792
+ Provider as h,
790
793
  autoInstantiateAtom as i,
791
- createDeepEqualAtom as l,
792
- Provider as m,
794
+ AppConfigSchema as l,
795
+ isIslands as m,
793
796
  useTheme as n,
794
797
  localeAtom as o,
795
- isIslands as p,
798
+ waitFor as p,
796
799
  aiEnabledAtom as r,
797
- useResolvedMarimoConfig as s,
800
+ resolvedMarimoConfigAtom as s,
798
801
  resolvedThemeAtom as t,
799
- store as u,
800
- useStore as v,
801
- useEvent_default as w,
802
- buildStore as x,
803
- atom as y
802
+ createDeepEqualAtom as u,
803
+ useSetAtom as v,
804
+ dequal as w,
805
+ createStore as x,
806
+ useStore as y
804
807
  };
@@ -1,24 +1,24 @@
1
1
  import { s as __toESM } from "./chunk-BNovOVIE.js";
2
- import { _ as Logger, c as Objects, g as cn, h as Events } from "./button-Dj4BTre0.js";
2
+ import { _ as Logger, c as Objects, g as cn, h as Events } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { c as asRemoteURL, v as CircleQuestionMark } from "./toDate-CIpC_34u.js";
6
- import "./react-dom-BWRJ_g_k.js";
7
- import { t as require_jsx_runtime } from "./jsx-runtime-COBk7ree.js";
8
- import "./zod-BWkcDORu.js";
9
- import { n as ErrorBanner } from "./error-banner-CVkfBUT3.js";
10
- import { t as Tooltip } from "./tooltip-DRaMBu06.js";
11
- import { i as debounce_default } from "./constants-D0gkYoE2.js";
12
- import { n as useTheme, w as useEvent_default } from "./useTheme-DykuNHR2.js";
13
- import { s as uniq } from "./arrays-CldYf7p7.js";
14
- import { a as isValid, i as AlertTitle, n as Alert, t as arrow } from "./formats-Dsy9kkZu.js";
15
- import { n as formats } from "./vega-loader.browser-3_z8GoFC.js";
16
- import { a as getContainerWidth, n as vegaLoadData, s as tooltipHandler } from "./loader-Dr8Qem8p.js";
17
- import { t as useAsyncData } from "./useAsyncData-C56Khv_R.js";
18
- import { t as j } from "./react-vega-Dh6-UKKe.js";
19
- import "./defaultLocale-BpsHxBd7.js";
20
- import "./defaultLocale-DoeErsX2.js";
21
- import { t as useDeepCompareMemoize } from "./useDeepCompareMemoize-Dt98v2ua.js";
5
+ import { c as asRemoteURL, v as CircleQuestionMark } from "./toDate-BeKbrOvs.js";
6
+ import "./react-dom-BTJzcVJ9.js";
7
+ import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
8
+ import "./zod-CoBiJ5v4.js";
9
+ import { n as ErrorBanner } from "./error-banner-5bz0L9hS.js";
10
+ import { t as Tooltip } from "./tooltip-C5FYOpQc.js";
11
+ import { i as debounce_default } from "./constants-T20xxyNf.js";
12
+ import { T as useEvent_default, n as useTheme } from "./useTheme-CK_R9Mn8.js";
13
+ import { s as uniq } from "./arrays-sEtDRoG4.js";
14
+ import { a as isValid, i as AlertTitle, n as Alert, t as arrow } from "./formats-BIKFEOlR.js";
15
+ import { n as formats } from "./vega-loader.browser-CZ-J8Py3.js";
16
+ import { a as getContainerWidth, n as vegaLoadData, s as tooltipHandler } from "./loader-BWLPpjKK.js";
17
+ import { t as j } from "./react-vega-B0sAlDTL.js";
18
+ import "./defaultLocale-u-3osm0P.js";
19
+ import "./defaultLocale-BoHTsDG6.js";
20
+ import { t as useAsyncData } from "./useAsyncData-yp6n17kh.js";
21
+ import { t as useDeepCompareMemoize } from "./useDeepCompareMemoize-DJvAHUIC.js";
22
22
  import { t as Semaphore } from "./semaphore-CNDGTzkX.js";
23
23
  var import_compiler_runtime = require_compiler_runtime(), import_react = /* @__PURE__ */ __toESM(require_react(), 1);
24
24
  function fixRelativeUrl(e) {
@@ -1,6 +1,6 @@
1
- import { a as tickStep, n as precisionPrefix_default, r as precisionFixed_default, s as bisector, t as precisionRound_default } from "./precisionRound-CnHPY_5v.js";
2
- import { i as formatSpecifier, n as formatPrefix, r as locale_default, t as format$1 } from "./defaultLocale-BpsHxBd7.js";
3
- import { C as timeMinute, N as millisecond, S as utcHour, T as second, _ as utcSunday, a as formatLocale, b as utcDay, c as timeMonth, i as utcParse, l as utcMonth, n as timeParse, o as timeYear, p as timeSunday, r as utcFormat, s as utcYear, t as timeFormat, v as timeDay, w as utcMinute, x as timeHour } from "./defaultLocale-DoeErsX2.js";
1
+ import { a as tickStep, n as precisionPrefix_default, r as precisionFixed_default, s as bisector, t as precisionRound_default } from "./precisionRound-Tqb4mg-H.js";
2
+ import { i as formatSpecifier, n as formatPrefix, r as locale_default, t as format$1 } from "./defaultLocale-u-3osm0P.js";
3
+ import { C as timeMinute, N as millisecond, S as utcHour, T as second, _ as utcSunday, a as formatLocale, b as utcDay, c as timeMonth, i as utcParse, l as utcMonth, n as timeParse, o as timeYear, p as timeSunday, r as utcFormat, s as utcYear, t as timeFormat, v as timeDay, w as utcMinute, x as timeHour } from "./defaultLocale-BoHTsDG6.js";
4
4
  function accessor(o, P, F) {
5
5
  return o.fields = P || [], o.fname = F, o;
6
6
  }
@@ -1,17 +1,17 @@
1
1
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
2
- import "./purify.es-DT70lfR0.js";
3
- import { t as linear } from "./linear-2NnK4cxi.js";
4
- import { n as ordinal } from "./ordinal-B43ZeR68.js";
5
- import { t as range } from "./range-BOiA8qqU.js";
6
- import "./defaultLocale-BpsHxBd7.js";
2
+ import "./purify.es-H92eMd9-.js";
3
+ import { t as linear } from "./linear-B5-AFRiR.js";
4
+ import { n as ordinal } from "./ordinal-ArJavP1Q.js";
5
+ import { t as range } from "./range-C-rmrM1O.js";
6
+ import "./defaultLocale-u-3osm0P.js";
7
7
  import { t as line_default } from "./line-C5s_12ee.js";
8
- import { i as cleanAndMerge } from "./chunk-S3R3BYOJ-mQeCz5CE.js";
8
+ import { i as cleanAndMerge } from "./chunk-S3R3BYOJ-oAe3dEbO.js";
9
9
  import { n as initRange } from "./init-uv0kkh4g.js";
10
10
  import { i as log, r as __name } from "./src-Bf2iLOlr.js";
11
- import { B as setAccTitle, C as getDiagramTitle, I as sanitizeText, T as getThemeVariables3, U as setDiagramTitle, _ as getAccDescription, a as clear, c as configureSvgSize, d as defaultConfig_default, v as getAccTitle, y as getConfig, z as setAccDescription } from "./chunk-ABZYJK2D-D0cLy8Bb.js";
12
- import { t as selectSvgElement } from "./chunk-EXTU4WIE-BKNXdLmD.js";
11
+ import { B as setAccTitle, C as getDiagramTitle, I as sanitizeText, T as getThemeVariables3, U as setDiagramTitle, _ as getAccDescription, a as clear, c as configureSvgSize, d as defaultConfig_default, v as getAccTitle, y as getConfig, z as setAccDescription } from "./chunk-ABZYJK2D-Dz0-H2B5.js";
12
+ import { t as selectSvgElement } from "./chunk-EXTU4WIE-9sNjmQrB.js";
13
13
  import "./dist-BGdYVvOu.js";
14
- import { t as computeDimensionOfText } from "./chunk-JA3XYJ7Z-D6c6cOBG.js";
14
+ import { t as computeDimensionOfText } from "./chunk-JA3XYJ7Z-C32Y7Epf.js";
15
15
  function band() {
16
16
  var e = ordinal().unknown(void 0), w = e.domain, T = e.range, D = 0, O = 1, k, A, j = false, M = 0, N = 0, P = 0.5;
17
17
  delete e.unknown;
@@ -1,9 +1,9 @@
1
1
  import { r as __export, s as __toESM } from "./chunk-BNovOVIE.js";
2
- import { d as createSlot, l as useEventListener, m as useComposedRefs } from "./button-Dj4BTre0.js";
2
+ import { d as createSlot, l as useEventListener, m as useComposedRefs } from "./button-C5K9fIPF.js";
3
3
  import { t as require_react } from "./react-DA-nE2FX.js";
4
4
  import { t as require_compiler_runtime } from "./compiler-runtime-CEbnTgxf.js";
5
- import { t as require_react_dom } from "./react-dom-BWRJ_g_k.js";
6
- import { t as require_jsx_runtime } from "./jsx-runtime-COBk7ree.js";
5
+ import { t as require_react_dom } from "./react-dom-BTJzcVJ9.js";
6
+ import { t as require_jsx_runtime } from "./jsx-runtime-DebpN0FN.js";
7
7
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1), import_react_dom$1 = /* @__PURE__ */ __toESM(require_react_dom(), 1), import_jsx_runtime = /* @__PURE__ */ __toESM(require_jsx_runtime(), 1), Primitive = [
8
8
  "a",
9
9
  "button",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/islands",
3
- "version": "0.23.9-dev3",
3
+ "version": "0.23.9-dev32",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -4,46 +4,51 @@ import type { AiModel } from "@marimo-team/llm-info";
4
4
  import { beforeEach, describe, expect, it, vi } from "vitest";
5
5
  import type { UserConfig } from "@/core/config/config-schema";
6
6
 
7
- // Mock the models.json import
8
7
  vi.mock("@marimo-team/llm-info/models.json", () => {
9
- const models: AiModel[] = [
10
- {
11
- name: "GPT-4",
12
- model: "gpt-4",
13
- description: "OpenAI GPT-4 model",
14
- providers: ["openai"],
15
- roles: ["chat", "edit"],
16
- thinking: false,
17
- },
18
- {
19
- name: "Claude 3",
20
- model: "claude-3-sonnet",
21
- description: "Anthropic Claude 3 Sonnet",
22
- providers: ["anthropic"],
23
- roles: ["chat", "edit"],
24
- thinking: false,
25
- },
26
- {
27
- name: "Gemini Pro",
28
- model: "gemini-pro",
29
- description: "Google Gemini Pro model",
30
- providers: ["google"],
31
- roles: ["chat", "edit"],
32
- thinking: false,
33
- },
34
- {
35
- name: "Ollama Model",
36
- model: "llama2",
37
- description: "Ollama Llama 2 model",
38
- providers: ["ollama"],
39
- roles: ["chat", "edit"],
40
- thinking: false,
41
- },
42
- ];
43
-
44
- return {
45
- models: models,
8
+ const make = (
9
+ overrides: Partial<AiModel> & Pick<AiModel, "name" | "model">,
10
+ ): AiModel => ({
11
+ description: "",
12
+ roles: ["chat", "edit"],
13
+ capabilities: [],
14
+ input_types: [],
15
+ output_types: [],
16
+ release_date: "1970-01-01",
17
+ ...overrides,
18
+ });
19
+
20
+ const models: Record<string, AiModel[]> = {
21
+ openai: [
22
+ make({
23
+ name: "GPT-4",
24
+ model: "gpt-4",
25
+ description: "OpenAI GPT-4 model",
26
+ }),
27
+ ],
28
+ anthropic: [
29
+ make({
30
+ name: "Claude 3",
31
+ model: "claude-3-sonnet",
32
+ description: "Anthropic Claude 3 Sonnet",
33
+ }),
34
+ ],
35
+ google: [
36
+ make({
37
+ name: "Gemini Pro",
38
+ model: "gemini-pro",
39
+ description: "Google Gemini Pro model",
40
+ }),
41
+ ],
42
+ ollama: [
43
+ make({
44
+ name: "Ollama Model",
45
+ model: "llama2",
46
+ description: "Ollama Llama 2 model",
47
+ }),
48
+ ],
46
49
  };
50
+
51
+ return { models };
47
52
  });
48
53
 
49
54
  // Must import after mock
@@ -305,7 +305,7 @@ const AiModelDropdownItem = ({
305
305
  <div className="flex flex-row w-full items-center">
306
306
  <span>{model.name}</span>
307
307
  <div className="ml-auto">
308
- {model.thinking && (
308
+ {model.capabilities.includes("thinking") && (
309
309
  <Tooltip content="Reasoning model">
310
310
  <BrainIcon
311
311
  className={`h-5 w-5 rounded-md p-1 ${getTagColour("thinking")}`}
@@ -362,7 +362,7 @@ export const AiModelInfoDisplay = ({
362
362
  </div>
363
363
  )}
364
364
 
365
- {model.thinking && (
365
+ {model.capabilities.includes("thinking") && (
366
366
  <div className="flex items-center gap-2">
367
367
  <div className="w-2 h-2 bg-purple-500 rounded-full animate-pulse" />
368
368
  <span className="text-xs text-muted-foreground">
@@ -509,7 +509,7 @@ const ModelInfoCard = ({ model }: { model: AiModel }) => {
509
509
  <Tooltip content="Custom model">
510
510
  {model.custom && <BotIcon className="h-4 w-4" />}
511
511
  </Tooltip>
512
- {model.thinking && (
512
+ {model.capabilities.includes("thinking") && (
513
513
  <div
514
514
  className={cn(
515
515
  "flex items-center gap-1 rounded px-1 py-0.5 w-fit",
@@ -1253,6 +1253,13 @@ export const AiAssistConfig: React.FC<AiConfigProps> = ({
1253
1253
  config,
1254
1254
  onSubmit,
1255
1255
  }) => {
1256
+ // Tracked locally rather than derived from the field value so that clearing
1257
+ // the input (a transient empty value, which commits `null`) does not disable
1258
+ // the input mid-edit and force the user to re-tick the Override checkbox.
1259
+ const [maxTokensEnabled, setMaxTokensEnabled] = useState(
1260
+ config.ai?.max_tokens != null,
1261
+ );
1262
+
1256
1263
  return (
1257
1264
  <SettingGroup>
1258
1265
  <SettingSubtitle>AI Assistant</SettingSubtitle>
@@ -1279,6 +1286,71 @@ export const AiAssistConfig: React.FC<AiConfigProps> = ({
1279
1286
  )}
1280
1287
  />
1281
1288
 
1289
+ <FormField
1290
+ control={form.control}
1291
+ name="ai.max_tokens"
1292
+ render={({ field }) => {
1293
+ return (
1294
+ <div className="flex flex-col gap-y-1">
1295
+ <div className="flex items-center gap-x-2">
1296
+ <FormItem className={formItemClasses}>
1297
+ <FormLabel className="font-normal">
1298
+ Max output tokens
1299
+ </FormLabel>
1300
+ <FormControl>
1301
+ <Input
1302
+ data-testid="ai-max-tokens-input"
1303
+ type="number"
1304
+ min={1}
1305
+ disabled={!maxTokensEnabled}
1306
+ className="w-28 h-6"
1307
+ value={field.value ?? (maxTokensEnabled ? "" : 32768)}
1308
+ onChange={(e) => {
1309
+ const n = Number.parseInt(e.target.value, 10);
1310
+ field.onChange(Number.isFinite(n) && n > 0 ? n : null);
1311
+ }}
1312
+ />
1313
+ </FormControl>
1314
+ </FormItem>
1315
+ <FormItem className={formItemClasses}>
1316
+ <Checkbox
1317
+ data-testid="ai-max-tokens-checkbox"
1318
+ checked={maxTokensEnabled}
1319
+ onCheckedChange={(checked) => {
1320
+ const isChecked = checked === true;
1321
+ setMaxTokensEnabled(isChecked);
1322
+ // null signals delete to the server; cast because
1323
+ // UserConfig (OpenAPI-derived) types max_tokens as
1324
+ // `number | undefined`, but zod accepts `null`.
1325
+ const next = (
1326
+ isChecked ? (field.value ?? 32768) : null
1327
+ ) as number | undefined;
1328
+ // shouldDirty: true forces RHF to keep this in
1329
+ // dirtyFields even when `next` happens to equal the
1330
+ // form's defaultValue (e.g. untick → tick when disk
1331
+ // started with 32768). Otherwise getDirtyValues
1332
+ // would skip it and the save body would be empty.
1333
+ form.setValue("ai.max_tokens", next, {
1334
+ shouldDirty: true,
1335
+ shouldTouch: true,
1336
+ });
1337
+ onSubmit(form.getValues());
1338
+ }}
1339
+ />
1340
+ <FormLabel className="font-normal">Override</FormLabel>
1341
+ </FormItem>
1342
+ </div>
1343
+
1344
+ <FormDescription>
1345
+ Each provider sets its own max output tokens (Anthropic uses a
1346
+ recommended default). Adjust to control costs or enable more
1347
+ output.
1348
+ </FormDescription>
1349
+ </div>
1350
+ );
1351
+ }}
1352
+ />
1353
+
1282
1354
  <FormErrorsBanner />
1283
1355
  <ModelSelector
1284
1356
  label="Chat Model"
@@ -503,6 +503,42 @@ export const UserConfigForm: React.FC = () => {
503
503
  </div>
504
504
  )}
505
505
  />
506
+ <FormField
507
+ control={form.control}
508
+ name="completion.auto_close_pairs"
509
+ render={({ field }) => (
510
+ <div className="flex flex-col space-y-1">
511
+ <FormItem className={formItemClasses}>
512
+ <FormLabel className="font-normal">
513
+ Auto-close pairs
514
+ </FormLabel>
515
+ <FormControl>
516
+ <Checkbox
517
+ data-testid="auto-close-pairs-checkbox"
518
+ checked={field.value ?? true}
519
+ disabled={field.disabled}
520
+ onCheckedChange={(checked) => {
521
+ field.onChange(Boolean(checked));
522
+ }}
523
+ />
524
+ </FormControl>
525
+ <FormMessage />
526
+ <IsOverridden
527
+ userConfig={config}
528
+ name="completion.auto_close_pairs"
529
+ />
530
+ </FormItem>
531
+ <FormDescription>
532
+ Automatically insert closing brackets{" "}
533
+ <code className="text-xs">{"()"}</code>,{" "}
534
+ <code className="text-xs">{"[]"}</code>,{" "}
535
+ <code className="text-xs">{"{}"}</code>, and quotes{" "}
536
+ <code className="text-xs">{`""`}</code>,{" "}
537
+ <code className="text-xs">{`''`}</code> when opening one.
538
+ </FormDescription>
539
+ </div>
540
+ )}
541
+ />
506
542
  </SettingGroup>
507
543
  <SettingGroup title="Language Servers">
508
544
  <FormDescription>
@@ -1319,7 +1355,7 @@ export const UserConfigForm: React.FC = () => {
1319
1355
  <Form {...form}>
1320
1356
  <form
1321
1357
  ref={formElement}
1322
- onChange={form.handleSubmit(onSubmit)}
1358
+ onChange={form.handleSubmit((values) => onSubmit(values))}
1323
1359
  className="flex text-pretty overflow-hidden"
1324
1360
  >
1325
1361
  <Tabs