@marimo-team/islands 0.23.2-dev7 → 0.23.2-dev70

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 (577) hide show
  1. package/dist/{ConnectedDataExplorerComponent-P92i6wYx.js → ConnectedDataExplorerComponent-BS9U2zaC.js} +68 -66
  2. package/dist/ErrorBoundary-Da4UeYxT.js +167 -0
  3. package/dist/{ImageComparisonComponent-HF4AY8_n.js → ImageComparisonComponent-DaocPIse.js} +1 -1
  4. package/dist/{Plot-CK0oVgQL.js → Plot-PIeIvFnD.js} +1 -1
  5. package/dist/{isArrayLikeObject-LXbTYiBa.js → _baseFor-BGiY-cm1.js} +43 -215
  6. package/dist/_baseUniq-CxZRxRRo.js +380 -0
  7. package/dist/{any-language-editor-BCvLfvzI.js → any-language-editor-BVR0l12r.js} +23 -22
  8. package/dist/apl-BKoVld9y.js +4 -0
  9. package/dist/{arc-DLJpPF9M.js → arc-CHF8PiiF.js} +2 -2
  10. package/dist/architecture-7HQA4BMR-D0JB_3hE.js +6 -0
  11. package/dist/{architectureDiagram-VXUJARFQ-B3YQo9At.js → architectureDiagram-VXUJARFQ-BXQEUDtK.js} +19 -19
  12. package/dist/{arrays-beUWo8RF.js → arrays-CldYf7p7.js} +1 -1
  13. package/dist/asciiarmor-DQrKIjoo.js +4 -0
  14. package/dist/asn1-BZvnj0dq.js +4 -0
  15. package/dist/{blockDiagram-VD42YOAC-CpQ3TKEN.js → blockDiagram-VD42YOAC-DhJe-Y9i.js} +53 -53
  16. package/dist/brainfuck-D558nlUv.js +4 -0
  17. package/dist/{button-D1C3g5GI.js → button-CA5pI2YF.js} +2 -2
  18. package/dist/{c4Diagram-YG6GDRKO-CZSU4uqU.js → c4Diagram-YG6GDRKO-9dSfzOFR.js} +6 -6
  19. package/dist/{capabilities-BwpUgo4S.js → capabilities-6laDasij.js} +2 -2
  20. package/dist/{channel-X3JKk8gE.js → channel-MqYIiKgS.js} +1 -1
  21. package/dist/{chat-ui-Bi0ioKDx.js → chat-ui-CTt4WX0V.js} +2803 -2800
  22. package/dist/{check-BgrdTLuv.js → check-CFM2mVDr.js} +1 -1
  23. package/dist/{chunk-4BX2VUAB-C2skOn1Z.js → chunk-4BX2VUAB-BwfrWBqN.js} +1 -1
  24. package/dist/{chunk-4F5CHEZ2-D5mClyDv.js → chunk-4F5CHEZ2-C6tO9vjs.js} +1 -1
  25. package/dist/{chunk-55IACEB6-DRsSqxbU.js → chunk-55IACEB6-D8THf2mi.js} +1 -1
  26. package/dist/{chunk-5FQGJX7Z-VIref9gx.js → chunk-5FQGJX7Z-CO1e63h_.js} +5 -5
  27. package/dist/{chunk-ABZYJK2D-CZYCCtLy.js → chunk-ABZYJK2D-BrBb_0yY.js} +3 -3
  28. package/dist/{chunk-ATLVNIR6-DaOzLLgN.js → chunk-ATLVNIR6-D-0XqNah.js} +2 -2
  29. package/dist/{chunk-B2363JML-Br0eA2T3.js → chunk-B2363JML-Ds8wZXyP.js} +1 -1
  30. package/dist/{chunk-B4BG7PRW-4BjV11Br.js → chunk-B4BG7PRW-8iRKvugR.js} +7 -7
  31. package/dist/{chunk-CVBHYZKI-BXHgce-x.js → chunk-CVBHYZKI-B6xhgaBd.js} +1 -1
  32. package/dist/{chunk-DI55MBZ5-DITY3EyP.js → chunk-DI55MBZ5-C0_2D4m4.js} +6 -6
  33. package/dist/{chunk-EXTU4WIE-jUPSAk3i.js → chunk-EXTU4WIE-Jiw9ca1u.js} +2 -2
  34. package/dist/{chunk-FMBD7UC4-BjIaI-XO.js → chunk-FMBD7UC4-CHdus51S.js} +1 -1
  35. package/dist/{chunk-FRFDVMJY-DnEvEFRR.js → chunk-FRFDVMJY-BgQv1HBE.js} +1 -1
  36. package/dist/{chunk-HN2XXSSU-DAhNp1ig.js → chunk-HN2XXSSU-2Vfbq-kU.js} +1 -1
  37. package/dist/{chunk-JA3XYJ7Z-BcPEfxk_.js → chunk-JA3XYJ7Z-6wbaigKe.js} +3 -3
  38. package/dist/{chunk-JZLCHNYA-2bnLL3xL.js → chunk-JZLCHNYA-_rfptlUP.js} +6 -6
  39. package/dist/{chunk-MI3HLSF2-AKwFNP3m.js → chunk-MI3HLSF2-Do0-KRc0.js} +1 -1
  40. package/dist/{chunk-N4CR4FBY-CpZSuGSU.js → chunk-N4CR4FBY-DIZG9dVD.js} +7 -7
  41. package/dist/{chunk-PL6DKKU2-DnId6G-x.js → chunk-PL6DKKU2-DHfTUHy8.js} +1 -1
  42. package/dist/{chunk-QN33PNHL-B9p5ojHB.js → chunk-QN33PNHL-Cc64y40m.js} +2 -2
  43. package/dist/{chunk-QXUST7PY-Ch6F5Obl.js → chunk-QXUST7PY-BDG0-0Or.js} +10 -10
  44. package/dist/{chunk-QZHKN3VN-BK9tlbfw.js → chunk-QZHKN3VN-B_Mdb8GC.js} +1 -1
  45. package/dist/{chunk-S3R3BYOJ-B0UOFJwq.js → chunk-S3R3BYOJ-DphMP0FA.js} +8 -8
  46. package/dist/{chunk-SJTYNZTY-BsBZnJUj.js → chunk-SJTYNZTY-Diciw4sx.js} +1 -1
  47. package/dist/{chunk-TCCFYFTB-Clbl-fTg.js → chunk-TCCFYFTB-d3HOqL2I.js} +1552 -345
  48. package/dist/{chunk-TQ3KTPDO-CFkSQ30e.js → chunk-TQ3KTPDO-CQfP9npd.js} +1 -1
  49. package/dist/{chunk-TZMSLE5B-D45397J2.js → chunk-TZMSLE5B-C9LUoYkc.js} +3 -3
  50. package/dist/{chunk-UMXZTB3W-D-A834Bq.js → chunk-UMXZTB3W-MSKeGL7W.js} +1 -1
  51. package/dist/classDiagram-2ON5EDUG-CBHMR6ZU.js +30 -0
  52. package/dist/classDiagram-v2-WZHVMYZB-BsUtUGM_.js +30 -0
  53. package/dist/{clike-B90WKs4D.js → clike-sBZrGeF8.js} +1 -1
  54. package/dist/clojure-Cq8mTSrE.js +4 -0
  55. package/dist/{clone-DZFQCtFJ.js → clone-BuIIsfA8.js} +1 -1
  56. package/dist/cmake-D8HCovWK.js +4 -0
  57. package/dist/cobol-UolN-9iU.js +4 -0
  58. package/dist/{code-block-37QAKDTI-FQEoMOU1.js → code-block-37QAKDTI-0JNwiPGv.js} +2 -2
  59. package/dist/coffeescript-VdNuWrt5.js +4 -0
  60. package/dist/commonlisp-ALX7fpDc.js +4 -0
  61. package/dist/{constants-CvyfaCvs.js → constants-D0gkYoE2.js} +4 -4
  62. package/dist/{copy-Bp6CK_Fg.js → copy-TGGAUEWp.js} +2 -2
  63. package/dist/{cose-bilkent-S5V4N54A-DvCk1aXi.js → cose-bilkent-S5V4N54A-DXHZkJKX.js} +2 -2
  64. package/dist/crystal-PbyO9Q_s.js +4 -0
  65. package/dist/css-DFklJkr_.js +4 -0
  66. package/dist/cypher-BifNeYlv.js +4 -0
  67. package/dist/d-BA-JP4PJ.js +4 -0
  68. package/dist/{dagre-6UL2VRFP-OMItEBnY.js → dagre-6UL2VRFP-tH87fkPA.js} +102 -103
  69. package/dist/{dagre-QVd-lCXU.js → dagre-VYEPqXIV.js} +105 -39
  70. package/dist/{data-grid-overlay-editor-C_sKPpLu.js → data-grid-overlay-editor-CWUN78-s.js} +3 -3
  71. package/dist/{diagram-PSM6KHXK-CkKbohWI.js → diagram-PSM6KHXK-2VjPSCDn.js} +22 -22
  72. package/dist/{diagram-QEK2KX5R-DjUMpVcx.js → diagram-QEK2KX5R-CiLmNyta.js} +17 -17
  73. package/dist/{diagram-S2PKOQOG-b-c0d-wZ.js → diagram-S2PKOQOG-Zha_1CLx.js} +17 -17
  74. package/dist/diff-CtkDpav4.js +4 -0
  75. package/dist/dist-B--tLnAP.js +5 -0
  76. package/dist/{dist-tGk0aZ--.js → dist-B52GXZbd.js} +2 -2
  77. package/dist/{dist-Bfp1XXWt.js → dist-B8BjrFUE.js} +5 -5
  78. package/dist/dist-BEOU2g1b.js +8 -0
  79. package/dist/dist-BHnX0ia_.js +8 -0
  80. package/dist/{dist-DJKubHDd.js → dist-BK-3fF4P.js} +1 -1
  81. package/dist/{dist-Ci0CXEFt.js → dist-BTyJtnNg.js} +1 -1
  82. package/dist/{dist-CFKdzOIu.js → dist-BetEKbPG.js} +2 -2
  83. package/dist/{dist-DpkJHKB8.js → dist-BrBucRXs.js} +2 -2
  84. package/dist/{dist-CTwGwcQ8.js → dist-Brkazupz.js} +2 -2
  85. package/dist/dist-BuBwsFva.js +5 -0
  86. package/dist/dist-BzmEQ9u7.js +5 -0
  87. package/dist/{dist-ej6AQKaS.js → dist-C-J0pt5p.js} +1 -1
  88. package/dist/dist-C1Ap5CYU.js +5 -0
  89. package/dist/{dist-LhQNUe5A.js → dist-C474qFoq.js} +3 -3
  90. package/dist/{dist-DlSUOIm9.js → dist-C9fmTOin.js} +1 -1
  91. package/dist/{dist-CxZvoNao.js → dist-CCADb07R.js} +44 -31
  92. package/dist/{dist-BjDuO5JW.js → dist-CGLzXdrt.js} +1 -1
  93. package/dist/dist-CMjD5MQb.js +6 -0
  94. package/dist/{dist-BvhGByxL.js → dist-CNtV21T_.js} +4 -4
  95. package/dist/dist-ChC1BhqM.js +6 -0
  96. package/dist/dist-Cih01ssx.js +5 -0
  97. package/dist/{dist-CNF0QBLR.js → dist-CinA9Enb.js} +1 -1
  98. package/dist/dist-CqfONiY9.js +5 -0
  99. package/dist/{dist-DFK94vuS.js → dist-CtCY55Jf.js} +2 -2
  100. package/dist/{dist-VqF3W_ue.js → dist-CxdUraQr.js} +2 -2
  101. package/dist/{dist-DUFd1bhm.js → dist-CyFFzJTb.js} +1 -1
  102. package/dist/{dist-C4bq5Ioy.js → dist-D029TiHd.js} +2 -2
  103. package/dist/dist-D0iD0Fi9.js +5 -0
  104. package/dist/{dist-m9tsXsFf.js → dist-D9r7Cmw7.js} +2 -2
  105. package/dist/{dist-DD_cYHOl.js → dist-DBLeRrPp.js} +2 -2
  106. package/dist/{dist-DJ9F1eHs.js → dist-DGAfI2rB.js} +2 -2
  107. package/dist/{dist-BrxqmS9Q.js → dist-DZjQ_MBo.js} +4 -4
  108. package/dist/{dist-DLafRu9s.js → dist-DadjmS-4.js} +2 -2
  109. package/dist/{dist-Doy0mQDg.js → dist-DkC6YEo0.js} +2 -2
  110. package/dist/{dist-CIB8w0Fl.js → dist-DquyVv5H.js} +2 -2
  111. package/dist/dist-DtNLXm8d.js +5 -0
  112. package/dist/{dist-CTtLBPLZ.js → dist-ESg7xyoD.js} +4 -4
  113. package/dist/dist-FN0ZA_8F.js +8 -0
  114. package/dist/{dist-CcMfr7jD.js → dist-HVuryI1a.js} +1 -1
  115. package/dist/{dist-DGNtjMZu.js → dist-JEhxD_cn.js} +1 -1
  116. package/dist/{dist-B43sbpd0.js → dist-UcOPnRMa.js} +3 -3
  117. package/dist/dist-YP-G7W0f.js +8 -0
  118. package/dist/{dist-DbnBiLNH.js → dist-Yrfc6L0I.js} +3 -3
  119. package/dist/{dist--6TSlp8H.js → dist-Zn0KNbo9.js} +1 -1
  120. package/dist/{dist-DAfcmt-d.js → dist-nuW5EDYT.js} +2 -2
  121. package/dist/{dockerfile-DfXhjEUG.js → dockerfile-COvlVLcE.js} +1 -1
  122. package/dist/dtd-DW3_UFEG.js +4 -0
  123. package/dist/dylan-pDhodO2N.js +4 -0
  124. package/dist/ecl-BJT8-YD7.js +4 -0
  125. package/dist/eiffel-Dmns-9vS.js +4 -0
  126. package/dist/elm-Da4sO4Bz.js +4 -0
  127. package/dist/{erDiagram-Q2GNP2WA-CDhLaOZ1.js → erDiagram-Q2GNP2WA-biHZS05w.js} +15 -15
  128. package/dist/erlang-C-zBsDi7.js +4 -0
  129. package/dist/{error-banner-B_ioHva3.js → error-banner-DnBPzEWg.js} +3 -3
  130. package/dist/{esm-CD1iby2n.js → esm-CYEyrE3Y.js} +105 -105
  131. package/dist/esm-Dd1z1auZ.js +1171 -0
  132. package/dist/extends-CzJgxo2J.js +1645 -0
  133. package/dist/factor-4xPWlWB5.js +4 -0
  134. package/dist/{factor--4HHM8Rw.js → factor-C2GT7jfQ.js} +1 -1
  135. package/dist/flatten-CzBvFdvC.js +8 -0
  136. package/dist/{flowDiagram-NV44I4VS-BDi4O4CL.js → flowDiagram-NV44I4VS-CWWlUpBR.js} +17 -17
  137. package/dist/formats-Dh5M1ZRs.js +79 -0
  138. package/dist/forth-l-c75zSd.js +4 -0
  139. package/dist/fortran-DIujSODW.js +4 -0
  140. package/dist/{ganttDiagram-JELNMOA3-BpZE6kVp.js → ganttDiagram-JELNMOA3-D7B2c4Z9.js} +10 -10
  141. package/dist/gas-CXnG5g_b.js +4 -0
  142. package/dist/gherkin-VPeqd4-X.js +4 -0
  143. package/dist/{gitGraph-G5XIXVHT-B_c6xFJv.js → gitGraph-G5XIXVHT-BdepdFa_.js} +3 -3
  144. package/dist/{gitGraphDiagram-V2S2FVAM-iQnXzbPM.js → gitGraphDiagram-V2S2FVAM-CtLvNR1S.js} +17 -17
  145. package/dist/{glide-data-editor-BFqEJGJW.js → glide-data-editor-DXti2axL.js} +591 -583
  146. package/dist/graphlib-CVPKjKCS.js +359 -0
  147. package/dist/groovy-CphhZQgg.js +4 -0
  148. package/dist/{hasIn-DnfJcYpY.js → hasIn-COs6vImh.js} +3 -3
  149. package/dist/haskell-CCvlS5Iq.js +4 -0
  150. package/dist/haxe-C_bi66fP.js +5 -0
  151. package/dist/{process-output-H_7QTreh.js → html-to-image-BdsDysfl.js} +2521 -2639
  152. package/dist/idl-1DcP4Dm8.js +4 -0
  153. package/dist/{info-VBDWY6EO-BTyzxmhr.js → info-VBDWY6EO--JNA2rNu.js} +3 -3
  154. package/dist/infoDiagram-HS3SLOUP-BbZyOxsP.js +30 -0
  155. package/dist/{input-CSVEkmaZ.js → input-Drx1pguW.js} +70 -70
  156. package/dist/{isEmpty-B7FX9wKt.js → isEmpty-Dd8mx_WL.js} +9 -9
  157. package/dist/{isSymbol-DCbjQG_U.js → isSymbol-BvIfMnn6.js} +1 -1
  158. package/dist/javascript-DUIGhBvO.js +4 -0
  159. package/dist/{journeyDiagram-XKPGCS4Q-ClPC94aN.js → journeyDiagram-XKPGCS4Q-BU2mjjzl.js} +7 -7
  160. package/dist/julia-Cs2G4PQi.js +4 -0
  161. package/dist/{kanban-definition-3W4ZIXB7-DHEAKdZt.js → kanban-definition-3W4ZIXB7-BlmczUuw.js} +12 -12
  162. package/dist/{katex-CkLtKXwv.js → katex-qPqrBHZ8.js} +1 -1
  163. package/dist/label-BCWi-Oqu.js +31 -0
  164. package/dist/{line-PAEmCpyD.js → line-BWRi3U3S.js} +3 -3
  165. package/dist/{linear-v57w-fIs.js → linear-DnHwODZa.js} +4 -4
  166. package/dist/livescript-DMtVFaAN.js +4 -0
  167. package/dist/{loader-ZFbGsMN1.js → loader-BvW0-YWZ.js} +2 -2
  168. package/dist/lua-BAoLtdJg.js +4 -0
  169. package/dist/main.js +16437 -39681
  170. package/dist/mathematica-C_NoFtbo.js +4 -0
  171. package/dist/mbox-DcFJFYrH.js +4 -0
  172. package/dist/{memoize-CSTI9eOX.js → memoize-C9ltv0Cw.js} +1 -1
  173. package/dist/merge-CHn7Yx0N.js +222 -0
  174. package/dist/mermaid-4DMBBIKO-CG1ECj5W.js +6 -0
  175. package/dist/{mermaid-BbhZNQeB.js → mermaid-BagLPXm9.js} +50 -50
  176. package/dist/{mermaid-parser.core-ntCgyx0x.js → mermaid-parser.core-CleJseNW.js} +8 -8
  177. package/dist/{mhchem-BuY5LDSq.js → mhchem-BwoRNwg_.js} +1 -1
  178. package/dist/min-BNz2lZfk.js +38 -0
  179. package/dist/{mindmap-definition-VGOIOE7T-CxEUZZvY.js → mindmap-definition-VGOIOE7T-CcSYqYP9.js} +14 -14
  180. package/dist/mirc-71dccf_u.js +4 -0
  181. package/dist/mllike-CWcOFVDq.js +6 -0
  182. package/dist/modelica-Ape2VXxx.js +4 -0
  183. package/dist/mscgen-Cc6TwbSN.js +6 -0
  184. package/dist/mumps-h-ZbdkJ9.js +4 -0
  185. package/dist/now-Sgq5m3D-.js +31 -0
  186. package/dist/{nsis-B6EN9LWI.js → nsis-B5K1qoyo.js} +1 -1
  187. package/dist/nsis-C0p3m7JW.js +4 -0
  188. package/dist/ntriples-c9lEeT5w.js +4 -0
  189. package/dist/{number-overlay-editor-B02-t7Ar.js → number-overlay-editor-_GnlYFHC.js} +1 -1
  190. package/dist/octave-DzEgB_74.js +4 -0
  191. package/dist/{once-C_TIu-kR.js → once-rJImu7SE.js} +1 -1
  192. package/dist/{ordinal-D7fa8Sey.js → ordinal-2jIulmcR.js} +1 -1
  193. package/dist/oz-CAxvHkyQ.js +4 -0
  194. package/dist/{packet-DYOGHKS2-BhvnpoGi.js → packet-DYOGHKS2-CBxXGWNr.js} +3 -3
  195. package/dist/pascal-BJzu1sgP.js +4 -0
  196. package/dist/perl--IrOzZ2Z.js +4 -0
  197. package/dist/pick-CRAXxDYn.js +43 -0
  198. package/dist/{pie-VRWISCQL-dILuA3iG.js → pie-VRWISCQL-Bmdnqjip.js} +3 -3
  199. package/dist/{pieDiagram-ADFJNKIX-U3LrUqAS.js → pieDiagram-ADFJNKIX-DNyLF5H2.js} +22 -22
  200. package/dist/pig-CiBKKNhC.js +4 -0
  201. package/dist/powershell-KY0j6Qop.js +4 -0
  202. package/dist/{precisionRound-CGLoV26P.js → precisionRound-CnHPY_5v.js} +1 -1
  203. package/dist/process-output-COL2Pf5I.js +109 -0
  204. package/dist/properties-BW8q3ziV.js +4 -0
  205. package/dist/protobuf-BGaeuTGV.js +4 -0
  206. package/dist/pug-DjOKK-4J.js +4 -0
  207. package/dist/{pug-xrm7jQ2R.js → pug-tjbzJCFk.js} +1 -1
  208. package/dist/puppet-DWm2o6zX.js +4 -0
  209. package/dist/{purify.es-hTCfRGdl.js → purify.es-DT70lfR0.js} +85 -81
  210. package/dist/python-Bp2gezZy.js +4 -0
  211. package/dist/q-DljPshos.js +4 -0
  212. package/dist/{quadrantDiagram-AYHSOK5B-BVWuq-3R.js → quadrantDiagram-AYHSOK5B-rXwjifrj.js} +5 -5
  213. package/dist/r-BajPMnEu.js +4 -0
  214. package/dist/{radar-ZZBFDIW7-DwFrOJDj.js → radar-ZZBFDIW7-BmCWDffL.js} +3 -3
  215. package/dist/{react-vega-DBwal82H.js → react-vega-C2Rtgjb4.js} +19 -19
  216. package/dist/react-vega-jy3CfYys.js +9 -0
  217. package/dist/{requirementDiagram-UZGBJVZJ-D0zpQnKC.js → requirementDiagram-UZGBJVZJ-DBdrMVbs.js} +14 -14
  218. package/dist/reveal-component-Cd5Y35Ny.js +4549 -0
  219. package/dist/rpm-BKx-ZZ62.js +5 -0
  220. package/dist/ruby-DJq_HNKc.js +4 -0
  221. package/dist/{sankeyDiagram-TZEHDZUN-CExy1joT.js → sankeyDiagram-TZEHDZUN-CxmzalGv.js} +5 -5
  222. package/dist/sas-WANvpcOU.js +4 -0
  223. package/dist/scheme-CliBbhGF.js +4 -0
  224. package/dist/{sequenceDiagram-WL72ISMW-D1BJxLjH.js → sequenceDiagram-WL72ISMW-CVCDsJ9h.js} +8 -8
  225. package/dist/shell-BwhrNUvM.js +4 -0
  226. package/dist/sieve-BIVePvMp.js +4 -0
  227. package/dist/slide-BEerfanN.js +23928 -0
  228. package/dist/smalltalk-D6G48JmY.js +4 -0
  229. package/dist/sparql-jjc3BmEP.js +4 -0
  230. package/dist/{spec-3EPbPQZH.js → spec-BKWq0wn2.js} +8 -152
  231. package/dist/{src-DbP20yFZ.js → src-BY0BGg6V.js} +1 -1
  232. package/dist/{stateDiagram-FKZM4ZOC-B1S8jGMn.js → stateDiagram-FKZM4ZOC-D_2djEhW.js} +19 -19
  233. package/dist/stateDiagram-v2-4FDKWEC3-Cv9Av10H.js +29 -0
  234. package/dist/{step-qd10PbTJ.js → step-DGAGWg3y.js} +1 -1
  235. package/dist/stex-ChDHQs3R.js +4 -0
  236. package/dist/{label-BebYlsDV.js → strings-B_FOH6eV.js} +57 -81
  237. package/dist/style.css +1 -1
  238. package/dist/stylus-WPBPQ4PE.js +4 -0
  239. package/dist/swift-O1Qy6iCm.js +4 -0
  240. package/dist/{slides-component-DLxprlqo.js → swiper-component-KkEVUDd3.js} +5 -5
  241. package/dist/tcl-BAFdhvsi.js +4 -0
  242. package/dist/textile-DFuzhNLG.js +4 -0
  243. package/dist/{time-Bdnxi22U.js → time-CMdrp3hw.js} +4 -4
  244. package/dist/{timeline-definition-IT6M3QCI-BDT9JAmn.js → timeline-definition-IT6M3QCI-E4NzxCs3.js} +4 -4
  245. package/dist/{toDate-B1AzlBoW.js → toDate-yqOcZ_tY.js} +4 -4
  246. package/dist/toml-DRSTeely.js +4 -0
  247. package/dist/{tooltip-DwNnFsxZ.js → tooltip-B0mtKTXm.js} +4 -4
  248. package/dist/{treemap-GDKQZRPO-bx2ngsgN.js → treemap-GDKQZRPO-CoKHPxa7.js} +3 -3
  249. package/dist/troff-B_ZjwBW0.js +4 -0
  250. package/dist/ttcn-CAyiB3ic.js +4 -0
  251. package/dist/ttcn-cfg-BS5_BGBJ.js +4 -0
  252. package/dist/turtle-CUBEDy3E.js +4 -0
  253. package/dist/types-DBtDeUKD.js +38 -0
  254. package/dist/{useAsyncData-BL98MPIy.js → useAsyncData-CKYzhCis.js} +2 -2
  255. package/dist/useDateFormatter-B3mCQMP3.js +150 -0
  256. package/dist/useDeepCompareMemoize-je76AJS_.js +11 -0
  257. package/dist/{useIframeCapabilities-CsTUYYj7.js → useIframeCapabilities-DbdLoEDm.js} +1 -1
  258. package/dist/{useLifecycle-DrGGIsgp.js → useLifecycle-smVfjLNI.js} +4 -4
  259. package/dist/{useTheme-CzwDokKe.js → useTheme-CX9pPLUH.js} +3 -3
  260. package/dist/vb-DY9S6-U2.js +4 -0
  261. package/dist/vbscript-gaHC39Jq.js +4 -0
  262. package/dist/{vega-component-KBJXEDZz.js → vega-component-CjMUUeEZ.js} +18 -17
  263. package/dist/{vega-loader.browser-DqEcFOPD.js → vega-loader.browser-3_z8GoFC.js} +3 -3
  264. package/dist/velocity-TfCOtJZ_.js +4 -0
  265. package/dist/verilog-c2JOX8mv.js +4 -0
  266. package/dist/vhdl-dHBirRiO.js +4 -0
  267. package/dist/webidl-Bauj-i07.js +4 -0
  268. package/dist/xquery-CtaEAOt8.js +4 -0
  269. package/dist/{xychartDiagram-PRI3JC2R-CuAZiqHS.js → xychartDiagram-PRI3JC2R-CuxTvjw5.js} +13 -13
  270. package/dist/yacas-BZ85agQP.js +4 -0
  271. package/dist/z80-hCgR-L4U.js +4 -0
  272. package/dist/{zod-W5ZEjzaE.js → zod-BxdsqRPd.js} +3 -3
  273. package/package.json +4 -2
  274. package/src/__mocks__/requests.ts +1 -0
  275. package/src/components/data-table/TableBottomBar.tsx +5 -1
  276. package/src/components/data-table/__tests__/chart-spec-model.test.ts +14 -14
  277. package/src/components/data-table/__tests__/columns.test.tsx +104 -0
  278. package/src/components/data-table/__tests__/filters.test.ts +304 -0
  279. package/src/components/data-table/__tests__/pagination.test.tsx +46 -132
  280. package/src/components/data-table/__tests__/sentinel-cell.test.tsx +171 -0
  281. package/src/components/data-table/__tests__/types.test.ts +34 -1
  282. package/src/components/data-table/__tests__/utils.test.ts +227 -0
  283. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  284. package/src/components/data-table/column-header.tsx +11 -2
  285. package/src/components/data-table/column-summary/chart-spec-model.tsx +6 -3
  286. package/src/components/data-table/column-summary/column-summary.tsx +1 -1
  287. package/src/components/data-table/columns.tsx +48 -5
  288. package/src/components/data-table/export-actions.tsx +62 -23
  289. package/src/components/data-table/filters.ts +87 -33
  290. package/src/components/data-table/pagination.tsx +189 -76
  291. package/src/components/data-table/schemas.ts +8 -1
  292. package/src/components/data-table/sentinel-cell.tsx +118 -0
  293. package/src/components/data-table/types.ts +32 -11
  294. package/src/components/data-table/utils.ts +119 -1
  295. package/src/components/datasources/__tests__/missing-package-prompt.test.tsx +103 -0
  296. package/src/components/datasources/missing-package-prompt.tsx +49 -0
  297. package/src/components/editor/actions/useNotebookActions.tsx +12 -0
  298. package/src/components/editor/cell/code/cell-editor.tsx +1 -0
  299. package/src/components/editor/file-tree/__tests__/requesting-tree.test.ts +33 -0
  300. package/src/components/editor/file-tree/file-explorer.tsx +8 -33
  301. package/src/components/editor/file-tree/requesting-tree.tsx +41 -0
  302. package/src/components/editor/file-tree/state.tsx +1 -0
  303. package/src/components/editor/renderers/slides-layout/slides-layout.tsx +9 -17
  304. package/src/components/home/components.tsx +7 -0
  305. package/src/components/slides/reveal-component.tsx +109 -0
  306. package/src/components/slides/reveal-slides.css +42 -0
  307. package/src/components/slides/slides.css +0 -65
  308. package/src/components/slides/{slides-component.tsx → swiper-component.tsx} +1 -0
  309. package/src/components/slides/swiper-slides.css +64 -0
  310. package/src/components/static-html/static-banner.tsx +23 -14
  311. package/src/components/ui/toast.tsx +16 -7
  312. package/src/core/cells/__tests__/apply-transaction.test.ts +483 -0
  313. package/src/core/cells/__tests__/cells.test.ts +110 -0
  314. package/src/core/cells/__tests__/logs.test.ts +101 -0
  315. package/src/core/cells/cells.ts +18 -0
  316. package/src/core/cells/document-changes.ts +34 -1
  317. package/src/core/cells/logs.ts +9 -1
  318. package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +4 -14
  319. package/src/core/codemirror/cells/extensions.ts +0 -4
  320. package/src/core/codemirror/keymaps/keymaps.ts +69 -2
  321. package/src/core/constants.ts +1 -0
  322. package/src/core/islands/bridge.ts +1 -0
  323. package/src/core/mode.ts +10 -1
  324. package/src/core/network/requests-lazy.ts +1 -0
  325. package/src/core/network/requests-network.ts +8 -0
  326. package/src/core/network/requests-static.ts +1 -0
  327. package/src/core/network/requests-toasting.tsx +1 -0
  328. package/src/core/network/types.ts +3 -0
  329. package/src/core/wasm/__tests__/bridge.test.ts +113 -0
  330. package/src/core/wasm/bridge.ts +13 -2
  331. package/src/core/wasm/worker/types.ts +3 -0
  332. package/src/core/wasm/worker/worker.ts +1 -0
  333. package/src/plugins/core/__test__/trusted-url.test.ts +45 -1
  334. package/src/plugins/core/trusted-url.ts +27 -2
  335. package/src/plugins/impl/DataEditorPlugin.tsx +7 -3
  336. package/src/plugins/impl/DataTablePlugin.tsx +7 -20
  337. package/src/plugins/impl/FileBrowserPlugin.tsx +81 -81
  338. package/src/plugins/impl/TabsPlugin.tsx +18 -12
  339. package/src/plugins/impl/data-editor/__tests__/data-utils.test.ts +147 -149
  340. package/src/plugins/impl/data-editor/data-utils.ts +12 -11
  341. package/src/plugins/impl/data-editor/glide-data-editor.tsx +4 -4
  342. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +4 -4
  343. package/src/plugins/impl/data-frames/schema.ts +41 -9
  344. package/src/plugins/impl/data-frames/utils/operators.ts +2 -0
  345. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +16 -0
  346. package/src/plugins/layout/carousel/CarouselPlugin.tsx +3 -1
  347. package/dist/_basePickBy-Sow3pJjS.js +0 -41
  348. package/dist/_baseUniq-C87CckHL.js +0 -518
  349. package/dist/apl-C1bki_dE.js +0 -4
  350. package/dist/architecture-7HQA4BMR-BHdkAMvZ.js +0 -6
  351. package/dist/asciiarmor-BdlkCCRr.js +0 -4
  352. package/dist/asn1-CvE30hox.js +0 -4
  353. package/dist/brainfuck-BalwWy1a.js +0 -4
  354. package/dist/classDiagram-2ON5EDUG-C8-zE3Zv.js +0 -30
  355. package/dist/classDiagram-v2-WZHVMYZB-DrmbGANl.js +0 -30
  356. package/dist/clojure-CUC2I1hM.js +0 -4
  357. package/dist/cmake-8PcMxXnB.js +0 -4
  358. package/dist/cobol-DkkkDz5v.js +0 -4
  359. package/dist/coffeescript-CCupxOZf.js +0 -4
  360. package/dist/commonlisp-DhUfGX6b.js +0 -4
  361. package/dist/crystal-DSaw6rFQ.js +0 -4
  362. package/dist/css-D4QDewkG.js +0 -4
  363. package/dist/cypher-CrYVqw_F.js +0 -4
  364. package/dist/d-Cr3H3pPx.js +0 -4
  365. package/dist/diff-ODiZJGls.js +0 -4
  366. package/dist/dist-7K5doRvB.js +0 -6
  367. package/dist/dist-B6I_A2-E.js +0 -8
  368. package/dist/dist-BEQsmaZY.js +0 -5
  369. package/dist/dist-BasY2RHp.js +0 -8
  370. package/dist/dist-Bosc00dY.js +0 -5
  371. package/dist/dist-CQMZOn-_.js +0 -8
  372. package/dist/dist-CViQhWZ8.js +0 -5
  373. package/dist/dist-Cz6rLfwY.js +0 -5
  374. package/dist/dist-D8eq8st3.js +0 -6
  375. package/dist/dist-DM1UDXdl.js +0 -5
  376. package/dist/dist-DNrtWPgS.js +0 -5
  377. package/dist/dist-V7q2qnpA.js +0 -5
  378. package/dist/dist-a5_hPgu2.js +0 -8
  379. package/dist/dist-uVyZcV1-.js +0 -5
  380. package/dist/dtd-C-t2Rk7F.js +0 -4
  381. package/dist/dylan-B4ctBLGp.js +0 -4
  382. package/dist/ecl-DqWfymni.js +0 -4
  383. package/dist/eiffel-DjBKKAr7.js +0 -4
  384. package/dist/elm--fxeC0FV.js +0 -4
  385. package/dist/erlang-CaKXCX6H.js +0 -4
  386. package/dist/esm-CDHI9cuO.js +0 -2805
  387. package/dist/factor-DlLO5EFS.js +0 -4
  388. package/dist/forth-rOO6LVj_.js +0 -4
  389. package/dist/fortran-CUg15VGR.js +0 -4
  390. package/dist/gas-BMRJspiW.js +0 -4
  391. package/dist/gherkin-DRxzijZU.js +0 -4
  392. package/dist/graphlib-BV1_gi0C.js +0 -226
  393. package/dist/groovy-BmrQ8pUP.js +0 -4
  394. package/dist/haskell-BuaYfKOz.js +0 -4
  395. package/dist/haxe-DcH9eA0a.js +0 -5
  396. package/dist/idl-DGlcm4Ls.js +0 -4
  397. package/dist/infoDiagram-HS3SLOUP-OYrX6uO3.js +0 -30
  398. package/dist/javascript-CeTk7rzr.js +0 -4
  399. package/dist/julia-BoP_q1gm.js +0 -4
  400. package/dist/livescript-B7IMN-ba.js +0 -4
  401. package/dist/lua-q1InavKb.js +0 -4
  402. package/dist/mathematica-DvR8-_EI.js +0 -4
  403. package/dist/mbox-7h5MNBS_.js +0 -4
  404. package/dist/merge-CVhG7q_o.js +0 -51
  405. package/dist/mermaid-4DMBBIKO-BjtqcdX4.js +0 -6
  406. package/dist/min-Ds3gG0Ff.js +0 -96
  407. package/dist/mirc-D-XM8A5c.js +0 -4
  408. package/dist/mllike-BQGkkbmf.js +0 -6
  409. package/dist/modelica-D_yRj_WU.js +0 -4
  410. package/dist/mscgen-B-rltAjp.js +0 -6
  411. package/dist/mumps-2kh8TU2b.js +0 -4
  412. package/dist/now-nrrrOr01.js +0 -7
  413. package/dist/nsis-CtusEqwb.js +0 -4
  414. package/dist/ntriples-BdAXw6zV.js +0 -4
  415. package/dist/octave-CsNFmVp5.js +0 -4
  416. package/dist/oz-odIXCrKd.js +0 -4
  417. package/dist/pascal-B9Mfk3Fo.js +0 -4
  418. package/dist/perl-C48inLcz.js +0 -4
  419. package/dist/pig-uwRtAssU.js +0 -4
  420. package/dist/powershell-CXqlca-i.js +0 -4
  421. package/dist/properties-D6Zu1rpK.js +0 -4
  422. package/dist/protobuf-BlNNWZaR.js +0 -4
  423. package/dist/pug-DytcK7bv.js +0 -4
  424. package/dist/puppet-lJ8Ok3iY.js +0 -4
  425. package/dist/python-cMaF7kUp.js +0 -4
  426. package/dist/q-Dgt2HYQh.js +0 -4
  427. package/dist/r-Bm4S4awf.js +0 -4
  428. package/dist/range-fJeId9Ri.js +0 -30
  429. package/dist/react-vega-BkjdpVsR.js +0 -9
  430. package/dist/rpm-_8LbzMVc.js +0 -5
  431. package/dist/ruby-Cr8IJ5VZ.js +0 -4
  432. package/dist/sas-CFcSfo2_.js +0 -4
  433. package/dist/scheme-N4XRoKgc.js +0 -4
  434. package/dist/shell-B4L7f_ds.js +0 -4
  435. package/dist/sieve-UI6J3Gm0.js +0 -4
  436. package/dist/smalltalk-BuaPZAZU.js +0 -4
  437. package/dist/sparql-1rKrq463.js +0 -4
  438. package/dist/stateDiagram-v2-4FDKWEC3-BH5ozUbc.js +0 -29
  439. package/dist/stex-CQDv3aS8.js +0 -4
  440. package/dist/stylus-DvSovJEP.js +0 -4
  441. package/dist/swift-D-_E7Yyb.js +0 -4
  442. package/dist/tcl-Di5sAVHN.js +0 -4
  443. package/dist/textile-Benwt66z.js +0 -4
  444. package/dist/toNumber-55tjPCWr.js +0 -28
  445. package/dist/toml-CeOvPOkY.js +0 -4
  446. package/dist/troff-DJN9hfgu.js +0 -4
  447. package/dist/ttcn-DQW2Psjf.js +0 -4
  448. package/dist/ttcn-cfg-zFG_MNpg.js +0 -4
  449. package/dist/turtle-DHRyNlSc.js +0 -4
  450. package/dist/types-pwjdK009.js +0 -202
  451. package/dist/useDeepCompareMemoize-CsyOnnjc.js +0 -85
  452. package/dist/vb-CXWH9DD-.js +0 -4
  453. package/dist/vbscript-qr8qVck5.js +0 -4
  454. package/dist/velocity-C_9pUJRx.js +0 -4
  455. package/dist/verilog-DxBstgBa.js +0 -4
  456. package/dist/vhdl-odUxAbE6.js +0 -4
  457. package/dist/webidl-Dfn5Rku4.js +0 -4
  458. package/dist/xquery-CrJs6SXr.js +0 -4
  459. package/dist/yacas-B-uDDLZe.js +0 -4
  460. package/dist/z80-51gxgAXE.js +0 -4
  461. /package/dist/{apl-Oc3bL26_.js → apl-Dt8GMXYg.js} +0 -0
  462. /package/dist/{array-ByIS7m3B.js → array-B-MVxRIF.js} +0 -0
  463. /package/dist/{asciiarmor-DTbPh2VI.js → asciiarmor-CitDQ85h.js} +0 -0
  464. /package/dist/{asn1-CGhwu1Ri.js → asn1-abrf9SMK.js} +0 -0
  465. /package/dist/{asterisk-BApaB_8m.js → asterisk-BUZwqih-.js} +0 -0
  466. /package/dist/{brainfuck-CA0L8lRq.js → brainfuck-BL-Boof0.js} +0 -0
  467. /package/dist/{chunk-DR5Q36YT-C40cYcy5.js → chunk-DR5Q36YT-CP69aZS_.js} +0 -0
  468. /package/dist/{click-outside-container-D3t6KDni.js → click-outside-container-BZgN7xS_.js} +0 -0
  469. /package/dist/{clike-CEtUBPHD.js → clike-RWg7anhx.js} +0 -0
  470. /package/dist/{clojure-BszjvdGo.js → clojure-DaojKHow.js} +0 -0
  471. /package/dist/{clsx-CwTY0BxM.js → clsx-CyyyQ8Ue.js} +0 -0
  472. /package/dist/{cmake-B2Gvps8b.js → cmake-DN-_v0XE.js} +0 -0
  473. /package/dist/{cobol-DuMch8nn.js → cobol-C3VpMyux.js} +0 -0
  474. /package/dist/{coffeescript-L9aKXVsJ.js → coffeescript-DIkz3Tbt.js} +0 -0
  475. /package/dist/{colors-IJ-2cn2o.js → colors-Cn2p_FA3.js} +0 -0
  476. /package/dist/{common-keywords-CsU75Ked.js → common-keywords-hbLeU7VU.js} +0 -0
  477. /package/dist/{commonlisp-CrtdssxB.js → commonlisp-CB1boOiP.js} +0 -0
  478. /package/dist/{crystal-vvNY0LpY.js → crystal-DI2oCml6.js} +0 -0
  479. /package/dist/{css-B1GdzqT1.js → css-BdEVwQDV.js} +0 -0
  480. /package/dist/{cypher-BtZvV7bW.js → cypher-BNHToqxU.js} +0 -0
  481. /package/dist/{cytoscape.esm-CRfNlsPy.js → cytoscape.esm-WbbDoCfu.js} +0 -0
  482. /package/dist/{d-B0UN3V-Z.js → d-D7we7I1b.js} +0 -0
  483. /package/dist/{defaultLocale-qS7DaAmi.js → defaultLocale-BpsHxBd7.js} +0 -0
  484. /package/dist/{defaultLocale-Bxoo2-30.js → defaultLocale-DoeErsX2.js} +0 -0
  485. /package/dist/{diff-DOpgjj1W.js → diff-Cia6fzjN.js} +0 -0
  486. /package/dist/{dist-BjWd_Ei9.js → dist-C89sHDXk.js} +0 -0
  487. /package/dist/{dtd-Ctnjxrle.js → dtd-H4Hubdwp.js} +0 -0
  488. /package/dist/{duckdb-keywords-DjrZdCO2.js → duckdb-keywords-CZ_ZTscu.js} +0 -0
  489. /package/dist/{dylan-DFXkoaZy.js → dylan-fVO6rnq3.js} +0 -0
  490. /package/dist/{ebnf-XJCIl_em.js → ebnf-WEXPLEWb.js} +0 -0
  491. /package/dist/{ecl-C1NExZip.js → ecl-B94VPjNR.js} +0 -0
  492. /package/dist/{eiffel-uXVGgleg.js → eiffel-C_R6TusS.js} +0 -0
  493. /package/dist/{elm-CBOFnnib.js → elm-DzCHbO2g.js} +0 -0
  494. /package/dist/{emotion-is-prop-valid.esm-CJVjyntJ.js → emotion-is-prop-valid.esm-DtW2o230.js} +0 -0
  495. /package/dist/{erlang-DMnrT8XK.js → erlang-BGNkx6JU.js} +0 -0
  496. /package/dist/{esm-D4gzqVRq.js → esm-Bb_hbWan.js} +0 -0
  497. /package/dist/{fcl-fh4Mj0bc.js → fcl-B_Gv5Jfx.js} +0 -0
  498. /package/dist/{forth-DDpxS4nw.js → forth-Bybw0cJ7.js} +0 -0
  499. /package/dist/{fortran-B6uYqQMz.js → fortran-C6PoCLkI.js} +0 -0
  500. /package/dist/{gas-BKnWzuFz.js → gas-BBlhenj4.js} +0 -0
  501. /package/dist/{gherkin-pBt0wT4X.js → gherkin-NXtNG85X.js} +0 -0
  502. /package/dist/{groovy-DKsn4ppB.js → groovy-BoFYK9xM.js} +0 -0
  503. /package/dist/{haskell-BJVBJQcy.js → haskell-BtBdvQ1n.js} +0 -0
  504. /package/dist/{haxe-rLN5UZU5.js → haxe-D--o6dr0.js} +0 -0
  505. /package/dist/{http-CbJFDV7c.js → http-Dc2fv19V.js} +0 -0
  506. /package/dist/{idl-B4mwMAo-.js → idl-AqTq5l7e.js} +0 -0
  507. /package/dist/{init-Cge3yl4r.js → init-D-g0ONX1.js} +0 -0
  508. /package/dist/{invariant-e8eBgdux.js → invariant-UcGKQEhF.js} +0 -0
  509. /package/dist/{javascript-Hf2NLNC0.js → javascript-DvwNVye9.js} +0 -0
  510. /package/dist/{jsx-runtime-9hcJiI23.js → jsx-runtime-COBk7ree.js} +0 -0
  511. /package/dist/{julia-GGpx21YN.js → julia-DoKiagZC.js} +0 -0
  512. /package/dist/{katex-CQ_cP8Uu.js → katex-B7pMJpE0.js} +0 -0
  513. /package/dist/{livescript-CSvXMspZ.js → livescript-DxBZMiWB.js} +0 -0
  514. /package/dist/{lua-CVMR5LMW.js → lua-DmS_0NTu.js} +0 -0
  515. /package/dist/{main-XimWhSi_.js → main-CThhXnXU.js} +0 -0
  516. /package/dist/{math-CEWMqgbD.js → math-BYK36kWZ.js} +0 -0
  517. /package/dist/{mathematica-JENNt-p4.js → mathematica-ChlDFeIC.js} +0 -0
  518. /package/dist/{mbox-mzifoc8E.js → mbox-CguZuODr.js} +0 -0
  519. /package/dist/{micromark-factory-space-BHslBP9f.js → micromark-factory-space-CwHmg6iz.js} +0 -0
  520. /package/dist/{mirc-BXoiItvN.js → mirc-CFtY8dqz.js} +0 -0
  521. /package/dist/{mllike-H-KR9OuH.js → mllike-C0EJrEOk.js} +0 -0
  522. /package/dist/{modelica-B6Hm3mMl.js → modelica-C1kO1nfS.js} +0 -0
  523. /package/dist/{mscgen-D8TF_Hei.js → mscgen-DEYdr7AY.js} +0 -0
  524. /package/dist/{mumps-CD-kNPt4.js → mumps-B3NVJs2V.js} +0 -0
  525. /package/dist/{nginx-9EZQIKsh.js → nginx-ComVAAGN.js} +0 -0
  526. /package/dist/{node-sql-parser-DIe6Cq_-.js → node-sql-parser-DNGGJ-Rw.js} +0 -0
  527. /package/dist/{ntriples-DgnpxU40.js → ntriples-DHol9X9H.js} +0 -0
  528. /package/dist/{octave-CkobqyVm.js → octave-CYGz0bfo.js} +0 -0
  529. /package/dist/{oz-ChDLd9tS.js → oz-kPxb2ni5.js} +0 -0
  530. /package/dist/{pascal-CvlkwK7E.js → pascal-bZ0yrJKy.js} +0 -0
  531. /package/dist/{path-B-82hpi8.js → path-Du6n3sOU.js} +0 -0
  532. /package/dist/{perl-BNEFTNbM.js → perl-z4hvqyqz.js} +0 -0
  533. /package/dist/{pig-Cd1DMS7P.js → pig-DZO8QDF9.js} +0 -0
  534. /package/dist/{powershell-CPxA0zpc.js → powershell-BSuaDQEC.js} +0 -0
  535. /package/dist/{properties-BaFBm-Xa.js → properties-BXhGLlIx.js} +0 -0
  536. /package/dist/{protobuf-BQV_-X0H.js → protobuf-DM6iybWV.js} +0 -0
  537. /package/dist/{puppet-LXLST0mx.js → puppet-Bn05sQT8.js} +0 -0
  538. /package/dist/{python-DLjLzX4k.js → python-Cvnhm0g7.js} +0 -0
  539. /package/dist/{q-DswTX1Y9.js → q-B9V8hzex.js} +0 -0
  540. /package/dist/{r-CO7NpMwE.js → r-Cf0gFqmq.js} +0 -0
  541. /package/dist/{range-BYuZFTbA.js → range-BOiA8qqU.js} +0 -0
  542. /package/dist/{react-dom-D5FDLRUB.js → react-dom-BWRJ_g_k.js} +0 -0
  543. /package/dist/{rpm-BlmEDT6r.js → rpm-D-LMkTV1.js} +0 -0
  544. /package/dist/{ruby-BTPKgeZZ.js → ruby-DeuPikpK.js} +0 -0
  545. /package/dist/{sas-DTDTiNO8.js → sas-C9tjgAo9.js} +0 -0
  546. /package/dist/{scheme-UzAAg4GJ.js → scheme-D1_bUF0G.js} +0 -0
  547. /package/dist/{shell-DQ0hQCsB.js → shell-CJBmnks3.js} +0 -0
  548. /package/dist/{sieve-BVyYIx9u.js → sieve-1fSV75CF.js} +0 -0
  549. /package/dist/{simple-mode-Dryu-fC9.js → simple-mode-B90Wdavj.js} +0 -0
  550. /package/dist/{smalltalk-DAdMAHTu.js → smalltalk-sZNPD0HO.js} +0 -0
  551. /package/dist/{solr-Bn6k51kO.js → solr-DTkyqJ-Z.js} +0 -0
  552. /package/dist/{sparql-Bi7quYgw.js → sparql-oHc1nm77.js} +0 -0
  553. /package/dist/{spreadsheet-UpVklYg7.js → spreadsheet-CER0raqY.js} +0 -0
  554. /package/dist/{sql-qyORs189.js → sql-ByOoEONQ.js} +0 -0
  555. /package/dist/{stex-D887Ylhf.js → stex-DrxP7bb3.js} +0 -0
  556. /package/dist/{stylus-jhpzcQ6Y.js → stylus-KzkX6zRB.js} +0 -0
  557. /package/dist/{swift-BrO8qThZ.js → swift-DqVxZvKo.js} +0 -0
  558. /package/dist/{tcl-s5QI5gv3.js → tcl-BtWSwXfA.js} +0 -0
  559. /package/dist/{textile-ClhvJrxM.js → textile-CWDbn9Ql.js} +0 -0
  560. /package/dist/{tiddlywiki-CmAAqw9M.js → tiddlywiki-Cr9xyOY1.js} +0 -0
  561. /package/dist/{tiki-DzCRe_s0.js → tiki-D5JONyfZ.js} +0 -0
  562. /package/dist/{timer-BPKOAfmx.js → timer-D7JVdX9U.js} +0 -0
  563. /package/dist/{toml-TFa3EJQE.js → toml-BfehlgmL.js} +0 -0
  564. /package/dist/{treemap-CmLtUuWe.js → treemap-qFGzn7xk.js} +0 -0
  565. /package/dist/{troff-SqLg0heF.js → troff-BZBk6AAu.js} +0 -0
  566. /package/dist/{ttcn-Cfrap7HJ.js → ttcn-DVwvXg0_.js} +0 -0
  567. /package/dist/{ttcn-cfg-Dopc-iwE.js → ttcn-cfg-gjbVLf1L.js} +0 -0
  568. /package/dist/{turtle-Dt52DvVH.js → turtle-CgxKXorV.js} +0 -0
  569. /package/dist/{vb-D1pAvfDe.js → vb-B9kSwTdM.js} +0 -0
  570. /package/dist/{vbscript-DZ7RBxn5.js → vbscript-DrUKSCdb.js} +0 -0
  571. /package/dist/{velocity-Csau7eZy.js → velocity-AlMYTnMy.js} +0 -0
  572. /package/dist/{verilog-gXlZACs5.js → verilog-DLUaM05j.js} +0 -0
  573. /package/dist/{vhdl-NaUWbI1B.js → vhdl-DUJOtSmO.js} +0 -0
  574. /package/dist/{webidl-BJmPjW01.js → webidl-CQp4aHk_.js} +0 -0
  575. /package/dist/{xquery-CJIPsC0g.js → xquery-IxkjlwOD.js} +0 -0
  576. /package/dist/{yacas-8f2Vjiiz.js → yacas-Bnctn5w8.js} +0 -0
  577. /package/dist/{z80-s5Xk2hCP.js → z80-DrFwhx53.js} +0 -0
@@ -0,0 +1,171 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { render } from "@testing-library/react";
4
+ import { describe, expect, it } from "vitest";
5
+ import { SentinelCell, WhitespaceMarkers } from "../sentinel-cell";
6
+ import type { CellValueSentinel } from "../types";
7
+
8
+ function renderSentinel(sentinel: CellValueSentinel) {
9
+ const { container } = render(<SentinelCell sentinel={sentinel} />);
10
+ return container.querySelector("span")!;
11
+ }
12
+
13
+ function renderMarkers(value: string) {
14
+ return render(<WhitespaceMarkers value={value} />);
15
+ }
16
+
17
+ describe("SentinelCell", () => {
18
+ it("renders null as None", () => {
19
+ const span = renderSentinel({ type: "null", value: null });
20
+ expect(span.textContent).toBe("None");
21
+ expect(span.getAttribute("aria-label")).toBe("None");
22
+ expect(span.className).toContain("italic");
23
+ expect(span.className).toContain("bg-muted");
24
+ });
25
+
26
+ it("renders empty string as <empty>", () => {
27
+ const span = renderSentinel({ type: "empty-string", value: "" });
28
+ expect(span.textContent).toBe("<empty>");
29
+ expect(span.getAttribute("aria-label")).toBe("empty string");
30
+ });
31
+
32
+ it("renders single space", () => {
33
+ const span = renderSentinel({ type: "whitespace", value: " " });
34
+ expect(span.textContent).toBe("\u2423");
35
+ expect(span.getAttribute("aria-label")).toBe("1 space");
36
+ });
37
+
38
+ it("renders multiple spaces", () => {
39
+ const span = renderSentinel({ type: "whitespace", value: " " });
40
+ expect(span.textContent).toBe("\u2423\u2423\u2423");
41
+ expect(span.getAttribute("aria-label")).toBe("3 spaces");
42
+ });
43
+
44
+ it("renders tab", () => {
45
+ const span = renderSentinel({ type: "whitespace", value: "\t" });
46
+ expect(span.textContent).toBe("\\t");
47
+ expect(span.getAttribute("aria-label")).toBe("1 tab");
48
+ });
49
+
50
+ it("renders newline", () => {
51
+ const span = renderSentinel({ type: "whitespace", value: "\n" });
52
+ expect(span.textContent).toBe("\\n");
53
+ expect(span.getAttribute("aria-label")).toBe("1 newline");
54
+ });
55
+
56
+ it("renders mixed whitespace", () => {
57
+ const span = renderSentinel({ type: "whitespace", value: "\t \n" });
58
+ expect(span.textContent).toBe("\\t\u2423\\n");
59
+ expect(span.getAttribute("aria-label")).toBe("1 tab, 1 space, 1 newline");
60
+ });
61
+
62
+ it("renders NaN", () => {
63
+ const span = renderSentinel({ type: "nan", value: Number.NaN });
64
+ expect(span.textContent).toBe("NaN");
65
+ });
66
+
67
+ it("renders inf", () => {
68
+ const span = renderSentinel({ type: "positive-infinity", value: Infinity });
69
+ expect(span.textContent).toBe("inf");
70
+ expect(span.getAttribute("title")).toBe("Infinity");
71
+ });
72
+
73
+ it("renders -inf", () => {
74
+ const span = renderSentinel({
75
+ type: "negative-infinity",
76
+ value: -Infinity,
77
+ });
78
+ expect(span.textContent).toBe("-inf");
79
+ expect(span.getAttribute("title")).toBe("-Infinity");
80
+ });
81
+
82
+ it("renders NaT", () => {
83
+ const span = renderSentinel({ type: "nat", value: "NaT" });
84
+ expect(span.textContent).toBe("NaT");
85
+ expect(span.getAttribute("title")).toBe("NaT (Not a Time)");
86
+ });
87
+ });
88
+
89
+ describe("WhitespaceMarkers", () => {
90
+ it("renders nothing for empty string", () => {
91
+ const { container } = renderMarkers("");
92
+ expect(container.firstChild).toBeNull();
93
+ });
94
+
95
+ it("renders a single space as open box", () => {
96
+ const { container } = renderMarkers(" ");
97
+ const outer = container.querySelector("span")!;
98
+ expect(outer.textContent).toBe("\u2423");
99
+ expect(outer.getAttribute("aria-label")).toBe("1 space");
100
+ });
101
+
102
+ it("renders multiple spaces as multiple open boxes", () => {
103
+ const { container } = renderMarkers(" ");
104
+ const outer = container.querySelector("span")!;
105
+ expect(outer.textContent).toBe("\u2423\u2423\u2423");
106
+ expect(outer.getAttribute("aria-label")).toBe("3 spaces");
107
+ });
108
+
109
+ it("renders tab, newline, CR with escape labels", () => {
110
+ const { container } = renderMarkers("\t\n\r");
111
+ const outer = container.querySelector("span")!;
112
+ expect(outer.textContent).toBe("\\t\\n\\r");
113
+ });
114
+
115
+ it("renders each char in its own span for CSS spacing", () => {
116
+ const { container } = renderMarkers(" ");
117
+ const outer = container.querySelector("span")!;
118
+ // Outer wrapper + three inner spans (one per char)
119
+ expect(outer.querySelectorAll("span")).toHaveLength(3);
120
+ });
121
+
122
+ it("renders unknown whitespace (NBSP) as \\uXXXX escape", () => {
123
+ const { container } = renderMarkers("\u00a0");
124
+ const outer = container.querySelector("span")!;
125
+ expect(outer.textContent).toBe("\\u00a0");
126
+ });
127
+
128
+ it("renders BOM as \\ufeff", () => {
129
+ const { container } = renderMarkers("\ufeff");
130
+ const outer = container.querySelector("span")!;
131
+ expect(outer.textContent).toBe("\\ufeff");
132
+ });
133
+
134
+ it("renders en space and em space as escapes", () => {
135
+ const { container } = renderMarkers("\u2002\u2003");
136
+ const outer = container.querySelector("span")!;
137
+ expect(outer.textContent).toBe("\\u2002\\u2003");
138
+ });
139
+
140
+ it("mixes known glyphs and unknown escapes correctly", () => {
141
+ const { container } = renderMarkers(" \t\u00a0");
142
+ const outer = container.querySelector("span")!;
143
+ expect(outer.textContent).toBe("\u2423\\t\\u00a0");
144
+ });
145
+
146
+ it("describes mixed whitespace in aria-label", () => {
147
+ const { container } = renderMarkers(" \t\n");
148
+ const outer = container.querySelector("span")!;
149
+ expect(outer.getAttribute("aria-label")).toBe("1 space, 1 tab, 1 newline");
150
+ });
151
+
152
+ it("describes unknown whitespace as 'unicode whitespace'", () => {
153
+ const { container } = renderMarkers("\u00a0");
154
+ const outer = container.querySelector("span")!;
155
+ expect(outer.getAttribute("aria-label")).toBe("1 unicode whitespace");
156
+ });
157
+
158
+ it("pluralizes unknown whitespace in aria-label", () => {
159
+ const { container } = renderMarkers("\u00a0\u00a0\u2002");
160
+ const outer = container.querySelector("span")!;
161
+ expect(outer.getAttribute("aria-label")).toBe("3 unicode whitespaces");
162
+ });
163
+
164
+ it("mixes known and unknown whitespace labels", () => {
165
+ const { container } = renderMarkers(" \u00a0\t");
166
+ const outer = container.querySelector("span")!;
167
+ expect(outer.getAttribute("aria-label")).toBe(
168
+ "1 space, 1 unicode whitespace, 1 tab",
169
+ );
170
+ });
171
+ });
@@ -1,6 +1,39 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { describe, expect, it } from "vitest";
3
- import { extractTimezone } from "../types";
3
+ import {
4
+ extractTimezone,
5
+ type FieldTypesWithExternalType,
6
+ toFieldTypes,
7
+ } from "../types";
8
+
9
+ describe("toFieldTypes", () => {
10
+ // Regression: https://github.com/marimo-team/marimo/issues/9269.
11
+ // When `FieldTypes` was a plain `Record<string, DataType>`, column
12
+ // names that look like non-negative integers (e.g. "2000", "2010")
13
+ // were hoisted to the front in numeric order by ECMAScript's
14
+ // `OrdinaryOwnPropertyKeys` algorithm. `Map` preserves insertion
15
+ // order for all keys.
16
+ it("preserves insertion order for digit-string column names", () => {
17
+ const input: FieldTypesWithExternalType = [
18
+ ["here", ["string", ""]],
19
+ ["is", ["string", ""]],
20
+ ["a", ["string", ""]],
21
+ ["2010", ["number", ""]],
22
+ ["column", ["string", ""]],
23
+ ["2000", ["number", ""]],
24
+ ["set", ["string", ""]],
25
+ ];
26
+ expect([...toFieldTypes(input).keys()]).toEqual([
27
+ "here",
28
+ "is",
29
+ "a",
30
+ "2010",
31
+ "column",
32
+ "2000",
33
+ "set",
34
+ ]);
35
+ });
36
+ });
4
37
 
5
38
  describe("extractTimezone", () => {
6
39
  it("should return undefined when dtype is undefined", () => {
@@ -3,9 +3,11 @@
3
3
  import type { Table } from "@tanstack/react-table";
4
4
  import { describe, expect, it } from "vitest";
5
5
  import {
6
+ detectSentinel,
6
7
  getClipboardContent,
7
8
  getPageIndexForRow,
8
9
  getRawValue,
10
+ splitLeadingTrailingWhitespace,
9
11
  stringifyUnknownValue,
10
12
  } from "../utils";
11
13
 
@@ -186,6 +188,133 @@ describe("getClipboardContent", () => {
186
188
  });
187
189
  });
188
190
 
191
+ describe("detectSentinel", () => {
192
+ it("should detect null and undefined", () => {
193
+ expect(detectSentinel(null, undefined)).toEqual({
194
+ type: "null",
195
+ value: null,
196
+ });
197
+ expect(detectSentinel(undefined, undefined)).toEqual({
198
+ type: "null",
199
+ value: undefined,
200
+ });
201
+ });
202
+
203
+ it("should detect empty string", () => {
204
+ expect(detectSentinel("", "string")).toEqual({
205
+ type: "empty-string",
206
+ value: "",
207
+ });
208
+ });
209
+
210
+ it("should detect whitespace-only strings", () => {
211
+ expect(detectSentinel(" ", "string")).toEqual({
212
+ type: "whitespace",
213
+ value: " ",
214
+ });
215
+ expect(detectSentinel(" ", "string")).toEqual({
216
+ type: "whitespace",
217
+ value: " ",
218
+ });
219
+ expect(detectSentinel("\t", "string")).toEqual({
220
+ type: "whitespace",
221
+ value: "\t",
222
+ });
223
+ expect(detectSentinel("\n", "string")).toEqual({
224
+ type: "whitespace",
225
+ value: "\n",
226
+ });
227
+ expect(detectSentinel("\t \n", "string")).toEqual({
228
+ type: "whitespace",
229
+ value: "\t \n",
230
+ });
231
+ });
232
+
233
+ it("should detect NaN", () => {
234
+ expect(detectSentinel(Number.NaN, "number")).toEqual({
235
+ type: "nan",
236
+ value: Number.NaN,
237
+ });
238
+ });
239
+
240
+ it("should detect Infinity", () => {
241
+ expect(detectSentinel(Number.POSITIVE_INFINITY, "number")).toEqual({
242
+ type: "positive-infinity",
243
+ value: Number.POSITIVE_INFINITY,
244
+ });
245
+ expect(detectSentinel(Number.NEGATIVE_INFINITY, "number")).toEqual({
246
+ type: "negative-infinity",
247
+ value: Number.NEGATIVE_INFINITY,
248
+ });
249
+ });
250
+
251
+ it("should return null for normal values", () => {
252
+ expect(detectSentinel("hello", "string")).toBeNull();
253
+ expect(detectSentinel(42, "number")).toBeNull();
254
+ expect(detectSentinel(0, "number")).toBeNull();
255
+ expect(detectSentinel(-1.5, "number")).toBeNull();
256
+ expect(detectSentinel(true, "boolean")).toBeNull();
257
+ expect(detectSentinel(false, "boolean")).toBeNull();
258
+ expect(detectSentinel({}, "unknown")).toBeNull();
259
+ expect(detectSentinel([], "unknown")).toBeNull();
260
+ });
261
+
262
+ it("should not match literal null-like strings", () => {
263
+ expect(detectSentinel("null", "string")).toBeNull();
264
+ expect(detectSentinel("NULL", "string")).toBeNull();
265
+ expect(detectSentinel("None", "string")).toBeNull();
266
+ });
267
+
268
+ it("should not match string NaN/Infinity in non-numeric columns", () => {
269
+ expect(detectSentinel("NaN", "string")).toBeNull();
270
+ expect(detectSentinel("Infinity", "string")).toBeNull();
271
+ expect(detectSentinel("-Infinity", "string")).toBeNull();
272
+ });
273
+
274
+ it("should match string NaN/Infinity in numeric columns", () => {
275
+ expect(detectSentinel("NaN", "number")).toEqual({
276
+ type: "nan",
277
+ value: "NaN",
278
+ });
279
+ expect(detectSentinel("Infinity", "number")).toEqual({
280
+ type: "positive-infinity",
281
+ value: "Infinity",
282
+ });
283
+ expect(detectSentinel("-Infinity", "number")).toEqual({
284
+ type: "negative-infinity",
285
+ value: "-Infinity",
286
+ });
287
+ expect(detectSentinel("inf", "number")).toEqual({
288
+ type: "positive-infinity",
289
+ value: "inf",
290
+ });
291
+ expect(detectSentinel("-inf", "number")).toEqual({
292
+ type: "negative-infinity",
293
+ value: "-inf",
294
+ });
295
+ });
296
+
297
+ it("should still not match normal strings in numeric columns", () => {
298
+ expect(detectSentinel("hello", "number")).toBeNull();
299
+ expect(detectSentinel("42", "number")).toBeNull();
300
+ });
301
+
302
+ it("should not match NaT in non-temporal columns", () => {
303
+ expect(detectSentinel("NaT", "string")).toBeNull();
304
+ });
305
+
306
+ it("should match NaT in temporal columns", () => {
307
+ expect(detectSentinel("NaT", "datetime")).toEqual({
308
+ type: "nat",
309
+ value: "NaT",
310
+ });
311
+ expect(detectSentinel("NaT", "date")).toEqual({
312
+ type: "nat",
313
+ value: "NaT",
314
+ });
315
+ });
316
+ });
317
+
189
318
  function createMockTableWithMeta<TData>(rawData?: TData[]): Table<TData> {
190
319
  return {
191
320
  options: {
@@ -214,3 +343,101 @@ describe("getRawValue", () => {
214
343
  expect(getRawValue(table, 5, "a")).toBeUndefined();
215
344
  });
216
345
  });
346
+
347
+ describe("splitLeadingTrailingWhitespace", () => {
348
+ it("returns all empty for empty string", () => {
349
+ expect(splitLeadingTrailingWhitespace("")).toEqual({
350
+ leading: "",
351
+ middle: "",
352
+ trailing: "",
353
+ });
354
+ });
355
+
356
+ it("returns value as middle when no edge whitespace", () => {
357
+ expect(splitLeadingTrailingWhitespace("abc")).toEqual({
358
+ leading: "",
359
+ middle: "abc",
360
+ trailing: "",
361
+ });
362
+ });
363
+
364
+ it("preserves inner whitespace in middle", () => {
365
+ expect(splitLeadingTrailingWhitespace("abc d ef")).toEqual({
366
+ leading: "",
367
+ middle: "abc d ef",
368
+ trailing: "",
369
+ });
370
+ });
371
+
372
+ it("splits leading whitespace only", () => {
373
+ expect(splitLeadingTrailingWhitespace(" abc")).toEqual({
374
+ leading: " ",
375
+ middle: "abc",
376
+ trailing: "",
377
+ });
378
+ });
379
+
380
+ it("splits trailing whitespace only", () => {
381
+ expect(splitLeadingTrailingWhitespace("abc ")).toEqual({
382
+ leading: "",
383
+ middle: "abc",
384
+ trailing: " ",
385
+ });
386
+ });
387
+
388
+ it("splits both leading and trailing whitespace", () => {
389
+ expect(splitLeadingTrailingWhitespace(" abc ")).toEqual({
390
+ leading: " ",
391
+ middle: "abc",
392
+ trailing: " ",
393
+ });
394
+ });
395
+
396
+ it("handles mixed whitespace types at edges", () => {
397
+ expect(splitLeadingTrailingWhitespace("\t\n abc \r\t")).toEqual({
398
+ leading: "\t\n ",
399
+ middle: "abc",
400
+ trailing: " \r\t",
401
+ });
402
+ });
403
+
404
+ it("preserves inner whitespace when edges have whitespace", () => {
405
+ expect(splitLeadingTrailingWhitespace(" a b c ")).toEqual({
406
+ leading: " ",
407
+ middle: "a b c",
408
+ trailing: " ",
409
+ });
410
+ });
411
+
412
+ it("handles Unicode whitespace (NBSP) at edges", () => {
413
+ expect(splitLeadingTrailingWhitespace("\u00a0abc\u00a0")).toEqual({
414
+ leading: "\u00a0",
415
+ middle: "abc",
416
+ trailing: "\u00a0",
417
+ });
418
+ });
419
+
420
+ it("puts whitespace-only string in leading (caller should handle sentinel first)", () => {
421
+ expect(splitLeadingTrailingWhitespace(" ")).toEqual({
422
+ leading: " ",
423
+ middle: "",
424
+ trailing: "",
425
+ });
426
+ });
427
+
428
+ it("handles single whitespace char", () => {
429
+ expect(splitLeadingTrailingWhitespace(" ")).toEqual({
430
+ leading: " ",
431
+ middle: "",
432
+ trailing: "",
433
+ });
434
+ });
435
+
436
+ it("handles single non-whitespace char", () => {
437
+ expect(splitLeadingTrailingWhitespace("a")).toEqual({
438
+ leading: "",
439
+ middle: "a",
440
+ trailing: "",
441
+ });
442
+ });
443
+ });
@@ -74,7 +74,7 @@ export const ColumnExplorerPanel = ({
74
74
  return (
75
75
  <div className="mb-3">
76
76
  <span className="text-xs font-semibold ml-2 flex">
77
- {prettifyRowColumnCount(totalRows, totalColumns, locale)}
77
+ {prettifyRowColumnCount({ numRows: totalRows, totalColumns, locale })}
78
78
  <CopyClipboardIcon
79
79
  tooltip="Copy column names"
80
80
  value={columns?.map(([columnName]) => columnName).join(",\n") || ""}
@@ -53,6 +53,7 @@ import {
53
53
  SelectValue,
54
54
  } from "../ui/select";
55
55
  import { type ColumnFilterForType, Filter } from "./filters";
56
+ import { SentinelCell } from "./sentinel-cell";
56
57
  import {
57
58
  ClearFilterMenuItem,
58
59
  FilterButtons,
@@ -65,7 +66,7 @@ import {
65
66
  renderSortFilterIcon,
66
67
  renderSorts,
67
68
  } from "./header-items";
68
- import { stringifyUnknownValue } from "./utils";
69
+ import { detectSentinel, stringifyUnknownValue } from "./utils";
69
70
 
70
71
  const TOP_K_ROWS = 30;
71
72
 
@@ -647,6 +648,10 @@ const PopoverFilterByValues = <TData, TValue>({
647
648
  {filteredData.map(([value, count], rowIndex) => {
648
649
  const isSelected = chosenValues.has(value);
649
650
  const valueString = stringifyUnknownValue({ value });
651
+ const sentinel = detectSentinel(
652
+ value,
653
+ column.columnDef.meta?.dataType,
654
+ );
650
655
 
651
656
  return (
652
657
  <CommandItem
@@ -661,7 +666,11 @@ const PopoverFilterByValues = <TData, TValue>({
661
666
  className="mr-3 h-3.5 w-3.5"
662
667
  />
663
668
  <span className="flex-1 overflow-hidden max-h-20 line-clamp-3">
664
- {valueString}
669
+ {sentinel ? (
670
+ <SentinelCell sentinel={sentinel} />
671
+ ) : (
672
+ valueString
673
+ )}
665
674
  </span>
666
675
  <span className="ml-3">{count}</span>
667
676
  </CommandItem>
@@ -41,7 +41,7 @@ export class ColumnChartSpecModel<T> {
41
41
 
42
42
  public static readonly EMPTY = new ColumnChartSpecModel(
43
43
  [],
44
- {},
44
+ new Map(),
45
45
  {},
46
46
  {},
47
47
  {},
@@ -97,7 +97,7 @@ export class ColumnChartSpecModel<T> {
97
97
  public getHeaderSummary(column: string) {
98
98
  return {
99
99
  stats: this.columnStats.get(column),
100
- type: this.fieldTypes[column],
100
+ type: this.fieldTypes.get(column),
101
101
  spec: this.opts.includeCharts ? this.getVegaSpec(column) : undefined,
102
102
  };
103
103
  }
@@ -141,7 +141,10 @@ export class ColumnChartSpecModel<T> {
141
141
  }
142
142
 
143
143
  const base = this.createBase(data);
144
- const type = this.fieldTypes[column];
144
+ const type = this.fieldTypes.get(column);
145
+ if (type === undefined) {
146
+ return null;
147
+ }
145
148
 
146
149
  // https://github.com/vega/altair/blob/32990a597af7c09586904f40b3f5e6787f752fa5/doc/user_guide/encodings/index.rst#escaping-special-characters-in-column-names
147
150
  // escape periods in column names
@@ -75,7 +75,7 @@ export const TableColumnSummary = <TData, TValue>({
75
75
  };
76
76
 
77
77
  const renderStats = () => {
78
- if (!stats) {
78
+ if (!stats || type === undefined) {
79
79
  return null;
80
80
  }
81
81
 
@@ -37,7 +37,10 @@ import {
37
37
  extractTimezone,
38
38
  type FieldTypesWithExternalType,
39
39
  INDEX_COLUMN_NAME,
40
+ isNumericType,
40
41
  } from "./types";
42
+ import { SentinelCell, WhitespaceMarkers } from "./sentinel-cell";
43
+ import { detectSentinel, splitLeadingTrailingWhitespace } from "./utils";
41
44
  import { uniformSample } from "./uniformSample";
42
45
  import { MarkdownUrlDetector, UrlDetector } from "./url-detector";
43
46
 
@@ -163,7 +166,7 @@ export function generateColumns<T>({
163
166
  }
164
167
  // Auto right-align numeric columns
165
168
  const dataType = getMeta(key).dataType;
166
- if (dataType === "number" || dataType === "integer") {
169
+ if (isNumericType(dataType)) {
167
170
  return "right";
168
171
  }
169
172
  return undefined;
@@ -269,7 +272,7 @@ export function generateColumns<T>({
269
272
  !isCellSelected;
270
273
 
271
274
  const dataType = column.columnDef.meta?.dataType;
272
- const isNumeric = dataType === "number" || dataType === "integer";
275
+ const isNumeric = isNumericType(dataType);
273
276
  const cellStyles = getCellStyleClass({
274
277
  justify,
275
278
  wrapped,
@@ -343,6 +346,7 @@ const PopoutColumn = ({
343
346
  cellStyles,
344
347
  selectCell,
345
348
  rawStringValue,
349
+ edges,
346
350
  contentClassName,
347
351
  buttonText,
348
352
  wrapped,
@@ -351,11 +355,25 @@ const PopoutColumn = ({
351
355
  cellStyles?: string;
352
356
  selectCell?: () => void;
353
357
  rawStringValue: string;
358
+ // Edge whitespace shown as visible markers in the trigger; copy/title
359
+ // still use `rawStringValue`. Middle is sliced from `rawStringValue`.
360
+ edges?: { leading: string; trailing: string };
354
361
  contentClassName?: string;
355
362
  buttonText?: string;
356
363
  wrapped?: boolean;
357
364
  children: React.ReactNode;
358
365
  }) => {
366
+ const hasEdgeWhitespace =
367
+ edges !== undefined &&
368
+ (edges.leading.length > 0 || edges.trailing.length > 0);
369
+
370
+ const displayText = hasEdgeWhitespace
371
+ ? rawStringValue.slice(
372
+ edges.leading.length,
373
+ rawStringValue.length - edges.trailing.length,
374
+ )
375
+ : rawStringValue;
376
+
359
377
  return (
360
378
  <EmotionCacheProvider container={null}>
361
379
  <Popover>
@@ -374,7 +392,9 @@ const PopoutColumn = ({
374
392
  )}
375
393
  title={rawStringValue}
376
394
  >
377
- {rawStringValue}
395
+ {edges ? <WhitespaceMarkers value={edges.leading} /> : null}
396
+ {displayText}
397
+ {edges ? <WhitespaceMarkers value={edges.trailing} /> : null}
378
398
  </span>
379
399
  </PopoverTrigger>
380
400
  <PopoverContent
@@ -522,6 +542,17 @@ export function renderCellValue<TData, TValue>({
522
542
 
523
543
  const isWrapped = column.getColumnWrapping?.() === "wrap";
524
544
 
545
+ // Sentinel values (null, whitespace, NaN, Infinity, NaT) rendered specially.
546
+ // Empty strings are left as-is
547
+ const sentinel = detectSentinel(value, dataType);
548
+ if (sentinel && sentinel.type !== "empty-string") {
549
+ return (
550
+ <div onClick={selectCell} className={cellStyles}>
551
+ <SentinelCell sentinel={sentinel} />
552
+ </div>
553
+ );
554
+ }
555
+
525
556
  if (dataType === "datetime" && typeof value === "string") {
526
557
  try {
527
558
  if (!isValid(value)) {
@@ -568,7 +599,13 @@ export function renderCellValue<TData, TValue>({
568
599
  ? String(column.applyColumnFormatting(value))
569
600
  : String(renderValue());
570
601
 
571
- const parts = parseContent(stringValue);
602
+ const { leading, middle, trailing } =
603
+ splitLeadingTrailingWhitespace(stringValue);
604
+ const hasEdgeWhitespace = leading.length > 0 || trailing.length > 0;
605
+
606
+ // Parse only the inner content for URL detection so URLDetector doesn't
607
+ // split on the whitespace padding.
608
+ const parts = parseContent(hasEdgeWhitespace ? middle : stringValue);
572
609
  const allMarkup = parts.every((part) => part.type !== "text");
573
610
  if (allMarkup || stringValue.length < MAX_STRING_LENGTH || isWrapped) {
574
611
  return (
@@ -576,7 +613,9 @@ export function renderCellValue<TData, TValue>({
576
613
  onClick={selectCell}
577
614
  className={cn(cellStyles, isWrapped && COLUMN_WRAPPING_STYLES)}
578
615
  >
616
+ <WhitespaceMarkers value={leading} />
579
617
  <UrlDetector parts={parts} />
618
+ <WhitespaceMarkers value={trailing} />
580
619
  </div>
581
620
  );
582
621
  }
@@ -586,11 +625,15 @@ export function renderCellValue<TData, TValue>({
586
625
  cellStyles={cellStyles}
587
626
  selectCell={selectCell}
588
627
  rawStringValue={stringValue}
628
+ edges={{ leading, trailing }}
589
629
  contentClassName="max-h-64 overflow-auto whitespace-pre-wrap break-words text-sm w-96"
590
630
  buttonText="X"
591
631
  wrapped={isWrapped}
592
632
  >
593
- <MarkdownUrlDetector content={stringValue} parts={parts} />
633
+ <MarkdownUrlDetector
634
+ content={stringValue}
635
+ parts={parseContent(stringValue)}
636
+ />
594
637
  </PopoutColumn>
595
638
  );
596
639
  }