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

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 (232) hide show
  1. package/dist/{ConnectedDataExplorerComponent-2lBNiUv6.js → ConnectedDataExplorerComponent-OzrfMM5L.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/{blockDiagram-VD42YOAC-DGDaxR8I.js → blockDiagram-VD42YOAC-Dy7hlFla.js} +7 -7
  11. package/dist/{button-Dj4BTre0.js → button-C5K9fIPF.js} +2 -2
  12. package/dist/{c4Diagram-YG6GDRKO-C2hc6ne8.js → c4Diagram-YG6GDRKO-BXlAmZ8Z.js} +4 -4
  13. package/dist/{capabilities-C9rrYCzf.js → capabilities-BceAxrAW.js} +2 -2
  14. package/dist/{channel-BBoIVUrJ.js → channel-D_PHgcig.js} +1 -1
  15. package/dist/{chat-ui-D3XBept8.js → chat-ui-BDI3FMI8.js} +29 -29
  16. package/dist/{check-BcUIXnUT.js → check-DTbrK0zt.js} +1 -1
  17. package/dist/{chunk-4F5CHEZ2-BZq7Kom7.js → chunk-4F5CHEZ2-D9nGEHV8.js} +1 -1
  18. package/dist/{chunk-5FQGJX7Z-BOg95xG5.js → chunk-5FQGJX7Z-BNjes6Yx.js} +5 -5
  19. package/dist/{chunk-ABZYJK2D-D0cLy8Bb.js → chunk-ABZYJK2D-Dz0-H2B5.js} +1 -1
  20. package/dist/{chunk-ATLVNIR6-BXsEjlHF.js → chunk-ATLVNIR6-o0Z5MZLd.js} +1 -1
  21. package/dist/{chunk-B2363JML-D9-XOau1.js → chunk-B2363JML-KEJpLGGP.js} +1 -1
  22. package/dist/{chunk-B4BG7PRW-Q1usn6T3.js → chunk-B4BG7PRW-BL98U9B4.js} +4 -4
  23. package/dist/{chunk-DI55MBZ5-D1qLYNrb.js → chunk-DI55MBZ5-Dwkn0LWm.js} +4 -4
  24. package/dist/{chunk-EXTU4WIE-BKNXdLmD.js → chunk-EXTU4WIE-9sNjmQrB.js} +1 -1
  25. package/dist/{chunk-FRFDVMJY-BSBUAX7r.js → chunk-FRFDVMJY-DzQqMWrl.js} +1 -1
  26. package/dist/{chunk-JA3XYJ7Z-D6c6cOBG.js → chunk-JA3XYJ7Z-C32Y7Epf.js} +2 -2
  27. package/dist/{chunk-JZLCHNYA-BvsPHJmL.js → chunk-JZLCHNYA-C6ftyVMN.js} +4 -4
  28. package/dist/{chunk-N4CR4FBY-8ycT-O9a.js → chunk-N4CR4FBY-DUhGZhZs.js} +5 -5
  29. package/dist/{chunk-PL6DKKU2-B0MTXvyc.js → chunk-PL6DKKU2-D7km-08O.js} +1 -1
  30. package/dist/{chunk-QN33PNHL-Bb-eUBW3.js → chunk-QN33PNHL-0K6SDYn3.js} +1 -1
  31. package/dist/{chunk-QXUST7PY-DV8yRwBd.js → chunk-QXUST7PY-DMhsRpYK.js} +5 -5
  32. package/dist/{chunk-S3R3BYOJ-mQeCz5CE.js → chunk-S3R3BYOJ-oAe3dEbO.js} +3 -3
  33. package/dist/{chunk-SJTYNZTY-CEG4F0pB.js → chunk-SJTYNZTY-BkJrPRFC.js} +1 -1
  34. package/dist/{chunk-TCCFYFTB-d3HOqL2I.js → chunk-TCCFYFTB-D58KeXnC.js} +6 -6
  35. package/dist/{chunk-TQ3KTPDO-DiCtqVSi.js → chunk-TQ3KTPDO-D_yA_wAb.js} +1 -1
  36. package/dist/{chunk-TZMSLE5B-BqW10dHe.js → chunk-TZMSLE5B-yBKS_DQU.js} +1 -1
  37. package/dist/{chunk-UMXZTB3W-97iS1iEl.js → chunk-UMXZTB3W-D7uwvNjd.js} +1 -1
  38. package/dist/{classDiagram-2ON5EDUG--Yh__LHb.js → classDiagram-2ON5EDUG-QjoAcuFE.js} +10 -10
  39. package/dist/{classDiagram-v2-WZHVMYZB-BC7X7Xtc.js → classDiagram-v2-WZHVMYZB-bUCv4gu2.js} +10 -10
  40. package/dist/{clone-BuIIsfA8.js → clone-Q4Fqwn6q.js} +1 -1
  41. package/dist/{code-block-37QAKDTI-BsGy1AOJ.js → code-block-37QAKDTI-m92Yc8pv.js} +2 -2
  42. package/dist/{code-visibility-BKxrBMod.js → code-visibility-VZebNmSs.js} +7073 -7439
  43. package/dist/{constants-D0gkYoE2.js → constants-T20xxyNf.js} +2 -2
  44. package/dist/{copy-DLf4aN7I.js → copy-BuQpJEzp.js} +2 -2
  45. package/dist/{dagre-6UL2VRFP-DRBWoQUw.js → dagre-6UL2VRFP-J0JKgwOt.js} +11 -11
  46. package/dist/{dagre-VYEPqXIV.js → dagre-By_QsQgc.js} +11 -11
  47. package/dist/{data-grid-overlay-editor-efe5ZagF.js → data-grid-overlay-editor-mfEJ5475.js} +2 -2
  48. package/dist/{diagram-PSM6KHXK-H66ATWP2.js → diagram-PSM6KHXK-DYgJuNk9.js} +18 -18
  49. package/dist/{diagram-QEK2KX5R-DItl5Wns.js → diagram-QEK2KX5R-CKdBR2sb.js} +14 -14
  50. package/dist/{diagram-S2PKOQOG-CtuW_ZuL.js → diagram-S2PKOQOG-Dpi7mo5W.js} +14 -14
  51. package/dist/dist-0Fif7jnk.js +5 -0
  52. package/dist/{dist-Dh3wkoyH.js → dist-4j4c7bjm.js} +2 -2
  53. package/dist/{dist-CDFZi-QD.js → dist-B3P2fFpz.js} +1 -1
  54. package/dist/{dist-BNyrZfqT.js → dist-B3pZ0Ab6.js} +2 -2
  55. package/dist/dist-B5h_9sHB.js +6 -0
  56. package/dist/dist-B9M6R5ye.js +5 -0
  57. package/dist/dist-BCt3tnck.js +8 -0
  58. package/dist/{dist-BrBucRXs.js → dist-BTfv03uy.js} +2 -2
  59. package/dist/dist-BUIJwMwn.js +8 -0
  60. package/dist/{dist-CYEylvZA.js → dist-BbbIBDiQ.js} +1 -1
  61. package/dist/{dist-KnujRhFL.js → dist-BcuoonNH.js} +4 -4
  62. package/dist/{dist-DJ6zJQZ4.js → dist-Bde4a2kU.js} +2 -2
  63. package/dist/{dist-t_qL7eB8.js → dist-Bfwsv11D.js} +2 -2
  64. package/dist/{dist-CNtV21T_.js → dist-BhM8gdSO.js} +4 -4
  65. package/dist/{dist-nuW5EDYT.js → dist-BotSqB48.js} +2 -2
  66. package/dist/dist-BpquMd3k.js +5 -0
  67. package/dist/dist-BzJsqYfz.js +5 -0
  68. package/dist/{dist-D029TiHd.js → dist-Bz_sYWbr.js} +2 -2
  69. package/dist/{dist-D3ZI9nhS.js → dist-C1BYNeCR.js} +4 -4
  70. package/dist/{dist-Bc5pmZIw.js → dist-C5VC_yzu.js} +1 -1
  71. package/dist/dist-CA5ELXAf.js +6 -0
  72. package/dist/dist-CLBRs6Uv.js +5 -0
  73. package/dist/{dist-Dhk6FMb0.js → dist-CLJWPTX2.js} +3 -3
  74. package/dist/{dist-C34oIrQ9.js → dist-CLUtPrdy.js} +1 -1
  75. package/dist/dist-CStVCMbq.js +5 -0
  76. package/dist/{dist-B8RaFTRF.js → dist-CUCNs1ja.js} +2 -2
  77. package/dist/dist-CZRIEY3Y.js +8 -0
  78. package/dist/{dist-UcOPnRMa.js → dist-CcXxepx6.js} +3 -3
  79. package/dist/dist-CuUHbFD0.js +5 -0
  80. package/dist/{dist-B8BjrFUE.js → dist-Cy1WxgBD.js} +5 -5
  81. package/dist/{dist-WdPUFc56.js → dist-D4CewLk6.js} +1 -1
  82. package/dist/{dist-DMZNjfX4.js → dist-DRfcqpxJ.js} +2 -2
  83. package/dist/dist-DV7Iabxb.js +8 -0
  84. package/dist/{dist-usPCDYx8.js → dist-D_bzzWBm.js} +1 -1
  85. package/dist/{dist-BvCfQQQE.js → dist-DgnE8F-r.js} +1 -1
  86. package/dist/{dist-JEhxD_cn.js → dist-DhHh0jLg.js} +1 -1
  87. package/dist/{dist-DGAfI2rB.js → dist-DqAWR3CS.js} +2 -2
  88. package/dist/{dist--sWVZwjW.js → dist-Du8WkPuU.js} +1 -1
  89. package/dist/dist-DuEeHMvL.js +5 -0
  90. package/dist/{dist-BTyJtnNg.js → dist-DxvORzUR.js} +1 -1
  91. package/dist/{dist-B507mf_I.js → dist-RqXTaiir.js} +2 -2
  92. package/dist/{dist-Yrfc6L0I.js → dist-fQ0ViXGs.js} +3 -3
  93. package/dist/{dist-B4LJpMEg.js → dist-h2c8sZvT.js} +1 -1
  94. package/dist/{dist-C2ej4eOH.js → dist-luvabDEB.js} +2 -2
  95. package/dist/{dist-B52GXZbd.js → dist-p2qyWijU.js} +2 -2
  96. package/dist/{erDiagram-Q2GNP2WA--19X2kU5.js → erDiagram-Q2GNP2WA-BU-m41EQ.js} +10 -10
  97. package/dist/{error-banner-CVkfBUT3.js → error-banner-5bz0L9hS.js} +3 -3
  98. package/dist/{esm-CWp0KQeK.js → esm-BfhQmZjp.js} +4 -4
  99. package/dist/{esm-DjNnlmpf.js → esm-Duie8iU-.js} +23 -23
  100. package/dist/{extends-vAi97cpa.js → extends-BgdxCfYu.js} +6 -6
  101. package/dist/{flatten-CzBvFdvC.js → flatten-Bbw7g6-K.js} +1 -1
  102. package/dist/{flowDiagram-NV44I4VS-DQmWlo7f.js → flowDiagram-NV44I4VS-CRoXKjGq.js} +10 -10
  103. package/dist/{formats-Dsy9kkZu.js → formats-DQ5qjo_Q.js} +4 -4
  104. package/dist/{ganttDiagram-JELNMOA3-BOGXJ8Lk.js → ganttDiagram-JELNMOA3-7mq5f9cO.js} +7 -7
  105. package/dist/{gitGraph-G5XIXVHT-DGlbae5m.js → gitGraph-G5XIXVHT-DiniR35k.js} +3 -3
  106. package/dist/{gitGraphDiagram-V2S2FVAM-DjzxfF0P.js → gitGraphDiagram-V2S2FVAM-Dfuokq6w.js} +13 -13
  107. package/dist/{glide-data-editor-DucgdjRo.js → glide-data-editor-DqRY9naW.js} +557 -557
  108. package/dist/{graphlib-CVPKjKCS.js → graphlib-Ns7y5crs.js} +5 -5
  109. package/dist/{hasIn-COs6vImh.js → hasIn-Deg7jl_j.js} +3 -3
  110. package/dist/{html-to-image-CpggM7u1.js → html-to-image-CiSinpSR.js} +109 -109
  111. package/dist/{info-VBDWY6EO-D2lvLLw5.js → info-VBDWY6EO-DVZvGhkQ.js} +3 -3
  112. package/dist/{infoDiagram-HS3SLOUP-ChNufFsP.js → infoDiagram-HS3SLOUP-CEnzWruK.js} +13 -13
  113. package/dist/{input-D4kjoQUB.js → input-CZD2z6X2.js} +70 -67
  114. package/dist/{isEmpty-Dd8mx_WL.js → isEmpty-CJJMn-QP.js} +1 -1
  115. package/dist/{isSymbol-BvIfMnn6.js → isSymbol-CoUCgMCM.js} +1 -1
  116. package/dist/{journeyDiagram-XKPGCS4Q-BO_O4Ij1.js → journeyDiagram-XKPGCS4Q-8XYSU1GI.js} +3 -3
  117. package/dist/{kanban-definition-3W4ZIXB7-CPpiiiWk.js → kanban-definition-3W4ZIXB7--9pT9z1R.js} +7 -7
  118. package/dist/{label-BLqV33b1.js → label-LWtdw5i8.js} +3 -3
  119. package/dist/{linear-2NnK4cxi.js → linear-B5-AFRiR.js} +2 -2
  120. package/dist/{loader-Dr8Qem8p.js → loader-BWLPpjKK.js} +2 -2
  121. package/dist/main.js +1141 -987
  122. package/dist/{memoize-C9ltv0Cw.js → memoize-BOtf2yFf.js} +1 -1
  123. package/dist/{merge-CHn7Yx0N.js → merge-Be1CqGnU.js} +1 -1
  124. package/dist/mermaid-4DMBBIKO-DIdL224_.js +6 -0
  125. package/dist/{mermaid-DO-Daq7u.js → mermaid-IU93XzmY.js} +44 -44
  126. package/dist/{mermaid-parser.core-DreccfmS.js → mermaid-parser.core-C3XRsazI.js} +8 -8
  127. package/dist/{min-BNz2lZfk.js → min-Dtgc8txR.js} +4 -4
  128. package/dist/{mindmap-definition-VGOIOE7T-CC1_Vl0f.js → mindmap-definition-VGOIOE7T-B-4mnfFG.js} +9 -9
  129. package/dist/{now-Sgq5m3D-.js → now-Ch98bJO_.js} +2 -2
  130. package/dist/{number-overlay-editor-CpKi64Fy.js → number-overlay-editor-D-a0qCT8.js} +1 -1
  131. package/dist/{once-rJImu7SE.js → once-DPuqGUeo.js} +1 -1
  132. package/dist/{packet-DYOGHKS2-CmWtF3uO.js → packet-DYOGHKS2-34raHOiB.js} +3 -3
  133. package/dist/{pick-CRAXxDYn.js → pick-D1Qo8s2C.js} +4 -4
  134. package/dist/{pie-VRWISCQL-B6u8vus8.js → pie-VRWISCQL-BaLlzZa3.js} +3 -3
  135. package/dist/{pieDiagram-ADFJNKIX-Di34MOFQ.js → pieDiagram-ADFJNKIX-Cr3cNpZY.js} +15 -15
  136. package/dist/{precisionRound-CnHPY_5v.js → precisionRound-Tqb4mg-H.js} +1 -1
  137. package/dist/{process-output-X8TR20AK.js → process-output-5qJjMRKh.js} +4 -4
  138. package/dist/{quadrantDiagram-AYHSOK5B-B9kVk1ny.js → quadrantDiagram-AYHSOK5B-BuNL8Q93.js} +4 -4
  139. package/dist/{radar-ZZBFDIW7-XAmXSa8s.js → radar-ZZBFDIW7-Ci7bfoZa.js} +3 -3
  140. package/dist/{react-vega-Dh6-UKKe.js → react-vega-B0sAlDTL.js} +9 -9
  141. package/dist/react-vega-B6ncY2Tp.js +9 -0
  142. package/dist/{requirementDiagram-UZGBJVZJ-BxGfGYEx.js → requirementDiagram-UZGBJVZJ-BG2lLUN1.js} +9 -9
  143. package/dist/{reveal-component-BMyi2UMr.js → reveal-component-DZtPMEoM.js} +28 -28
  144. package/dist/{sankeyDiagram-TZEHDZUN-D09PBJ-n.js → sankeyDiagram-TZEHDZUN-DMal8sps.js} +3 -3
  145. package/dist/{sequenceDiagram-WL72ISMW-t_Dpemj0.js → sequenceDiagram-WL72ISMW-DT6Tk-Eo.js} +4 -4
  146. package/dist/{spec-hVaaZsY5.js → spec-a6DaqW__.js} +4 -4
  147. package/dist/{stateDiagram-FKZM4ZOC-B18gTP_j.js → stateDiagram-FKZM4ZOC-CB_lodq3.js} +12 -12
  148. package/dist/{stateDiagram-v2-4FDKWEC3-B6e_t14A.js → stateDiagram-v2-4FDKWEC3-E0RGjKsm.js} +10 -10
  149. package/dist/stex-KfRnSHzF.js +4 -0
  150. package/dist/{strings-BiIhGaI8.js → strings-Bu3vlb6W.js} +7 -7
  151. package/dist/style.css +1 -1
  152. package/dist/{swiper-component-DlD2GU2g.js → swiper-component-B2t5sN1q.js} +3 -3
  153. package/dist/{time-C1SGcFMH.js → time-CsmIF9YZ.js} +3 -3
  154. package/dist/{timeline-definition-IT6M3QCI-DJnh1ks5.js → timeline-definition-IT6M3QCI-NfSKRvH0.js} +2 -2
  155. package/dist/{toDate-CIpC_34u.js → toDate-ZVVIBmdk.js} +5 -5
  156. package/dist/{tooltip-DRaMBu06.js → tooltip-C5FYOpQc.js} +4 -4
  157. package/dist/{treemap-GDKQZRPO-Du95DV6u.js → treemap-GDKQZRPO-Cl6OQh8D.js} +3 -3
  158. package/dist/{types-Dzuoc3LN.js → types-CVvp1fKr.js} +2 -9
  159. package/dist/{useAsyncData-C56Khv_R.js → useAsyncData-C008zUPi.js} +2 -2
  160. package/dist/{useDateFormatter-B_9k85Ex.js → useDateFormatter-BA4FCquG.js} +2 -2
  161. package/dist/{useDeepCompareMemoize-Dt98v2ua.js → useDeepCompareMemoize-BrA3_n61.js} +1 -1
  162. package/dist/{useIframeCapabilities-BkYHTrss.js → useIframeCapabilities-C4JTXTIh.js} +1 -1
  163. package/dist/{useLifecycle-BF6-z62y.js → useLifecycle-BNaoJ5a4.js} +4 -4
  164. package/dist/{useTheme-DykuNHR2.js → useTheme-7O0YWlE5.js} +3 -3
  165. package/dist/{vega-component-cSdqoAxe.js → vega-component-DJNmOdUj.js} +18 -18
  166. package/dist/{vega-loader.browser-3_z8GoFC.js → vega-loader.browser-CZ-J8Py3.js} +3 -3
  167. package/dist/{xychartDiagram-PRI3JC2R-Dk2d_bX0.js → xychartDiagram-PRI3JC2R-BvwftqMA.js} +9 -9
  168. package/dist/{zod-BWkcDORu.js → zod-CoBiJ5v4.js} +3 -3
  169. package/package.json +1 -1
  170. package/src/components/data-table/__tests__/column-header.test.tsx +110 -277
  171. package/src/components/data-table/__tests__/date-filter-inputs.test.tsx +33 -0
  172. package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +75 -38
  173. package/src/components/data-table/__tests__/filter-pills.test.tsx +287 -0
  174. package/src/components/data-table/__tests__/filter-test-utils.ts +47 -0
  175. package/src/components/data-table/__tests__/filters.test.ts +5 -5
  176. package/src/components/data-table/add-filter-button.tsx +85 -0
  177. package/src/components/data-table/column-header.tsx +92 -691
  178. package/src/components/data-table/context-menu.tsx +26 -12
  179. package/src/components/data-table/data-table.tsx +89 -57
  180. package/src/components/data-table/date-filter-inputs.tsx +13 -10
  181. package/src/components/data-table/filter-by-values-picker.tsx +13 -19
  182. package/src/components/data-table/filter-editor-context.tsx +34 -0
  183. package/src/components/data-table/filter-pill-editor.tsx +152 -175
  184. package/src/components/data-table/filter-pills.tsx +190 -153
  185. package/src/components/data-table/filters/builders.ts +102 -0
  186. package/src/components/data-table/filters/defaults.ts +31 -0
  187. package/src/components/data-table/filters/format.ts +131 -0
  188. package/src/components/data-table/filters/guards.ts +51 -0
  189. package/src/components/data-table/filters/index.ts +7 -0
  190. package/src/components/data-table/filters/operators.ts +76 -0
  191. package/src/components/data-table/filters/serialize.ts +186 -0
  192. package/src/components/data-table/filters/types.ts +33 -0
  193. package/src/components/data-table/header-items.tsx +6 -83
  194. package/src/components/data-table/value-chips.tsx +52 -0
  195. package/src/components/ui/number-field.tsx +13 -1
  196. package/src/utils/dates.ts +39 -0
  197. package/dist/ErrorBoundary-D3wrPNma.js +0 -167
  198. package/dist/architecture-7HQA4BMR-CS9jOrqM.js +0 -6
  199. package/dist/dist-21ButRCu.js +0 -8
  200. package/dist/dist-B--tLnAP.js +0 -5
  201. package/dist/dist-BoHGySTM.js +0 -5
  202. package/dist/dist-ByAz19Qc.js +0 -5
  203. package/dist/dist-C1Ap5CYU.js +0 -5
  204. package/dist/dist-C93EysN4.js +0 -5
  205. package/dist/dist-CY-lVor6.js +0 -8
  206. package/dist/dist-CYDuv4bR.js +0 -8
  207. package/dist/dist-Cfo5EE2t.js +0 -6
  208. package/dist/dist-CjivSDvN.js +0 -5
  209. package/dist/dist-Cqwx-MH7.js +0 -5
  210. package/dist/dist-DbpcoFAV.js +0 -6
  211. package/dist/dist-FUNenbiQ.js +0 -5
  212. package/dist/dist-zhSud5X3.js +0 -8
  213. package/dist/mermaid-4DMBBIKO-B7VQMwJx.js +0 -6
  214. package/dist/react-vega-Cavbrg4l.js +0 -9
  215. package/dist/stex-ChDHQs3R.js +0 -4
  216. package/src/components/data-table/__tests__/column-header.test.ts +0 -65
  217. package/src/components/data-table/filters.ts +0 -386
  218. /package/dist/{_baseFor-BGiY-cm1.js → _baseFor-4jw-lnCC.js} +0 -0
  219. /package/dist/{clsx-CyyyQ8Ue.js → clsx-CIWA5tNO.js} +0 -0
  220. /package/dist/{defaultLocale-DoeErsX2.js → defaultLocale-BoHTsDG6.js} +0 -0
  221. /package/dist/{defaultLocale-BpsHxBd7.js → defaultLocale-u-3osm0P.js} +0 -0
  222. /package/dist/{dist-CCADb07R.js → dist-DNdhYsgW.js} +0 -0
  223. /package/dist/{emotion-is-prop-valid.esm-DtW2o230.js → emotion-is-prop-valid.esm-DzSb5hsH.js} +0 -0
  224. /package/dist/{invariant-UcGKQEhF.js → invariant-wRzNXIsJ.js} +0 -0
  225. /package/dist/{jsx-runtime-COBk7ree.js → jsx-runtime-DebpN0FN.js} +0 -0
  226. /package/dist/{main-CThhXnXU.js → main-Tj_-QTyF.js} +0 -0
  227. /package/dist/{micromark-factory-space-CwHmg6iz.js → micromark-factory-space-DF2w36zS.js} +0 -0
  228. /package/dist/{ordinal-B43ZeR68.js → ordinal-ArJavP1Q.js} +0 -0
  229. /package/dist/{purify.es-DT70lfR0.js → purify.es-H92eMd9-.js} +0 -0
  230. /package/dist/{range-BOiA8qqU.js → range-C-rmrM1O.js} +0 -0
  231. /package/dist/{react-dom-BWRJ_g_k.js → react-dom-BTJzcVJ9.js} +0 -0
  232. /package/dist/{stex-DrxP7bb3.js → stex-BIsgBmK4.js} +0 -0
@@ -6,6 +6,7 @@ import { CheckIcon, MinusIcon, Trash2Icon, XIcon } from "lucide-react";
6
6
  import { useEffect, useId, useRef, useState } from "react";
7
7
  import type { CalculateTopKRows } from "@/plugins/impl/DataTablePlugin";
8
8
  import type { OperatorType } from "@/plugins/impl/data-frames/utils/operators";
9
+ import { Button } from "../ui/button";
9
10
  import { Combobox, ComboboxItem } from "../ui/combobox";
10
11
  import { Input } from "../ui/input";
11
12
  import { NumberField } from "../ui/number-field";
@@ -16,95 +17,98 @@ import {
16
17
  SelectTrigger,
17
18
  SelectValue,
18
19
  } from "../ui/select";
19
- import { Button } from "../ui/button";
20
+ import { Tooltip } from "../ui/tooltip";
20
21
  import { DateLikeInput, DateLikeRangeInput } from "./date-filter-inputs";
21
22
  import { FilterByValuesPicker } from "./filter-by-values-picker";
22
- import { RegexInput } from "./regex-input";
23
23
  import {
24
24
  type ColumnFilterValue,
25
- DATETIME_OPS,
25
+ columnEditableType,
26
+ DEFAULT_OPERATOR_FOR_TYPE,
27
+ defaultFilterValueFor,
28
+ EDITABLE_FILTER_TYPES,
26
29
  Filter,
27
- isDatetimeComparisonOp,
28
- isNumberComparisonOp,
30
+ type FilterType,
31
+ isComparisonOp,
32
+ isDateLikeType,
29
33
  isTextScalarOp,
30
- MEMBERSHIP_OPS,
31
- NUMBER_OPS,
32
- TEXT_OPS,
34
+ OPERATORS_BY_TYPE,
35
+ OPERATORS_WITHOUT_VALUE,
36
+ type Snapshot,
33
37
  } from "./filters";
34
38
  import { OPERATOR_LABELS } from "./operator-labels";
35
- import { Tooltip } from "../ui/tooltip";
36
-
37
- type EditableFilterType =
38
- | "number"
39
- | "text"
40
- | "boolean"
41
- | "select"
42
- | "date"
43
- | "datetime"
44
- | "time";
45
-
46
- type DateLikeEditableFilterType = Extract<
47
- EditableFilterType,
48
- "date" | "datetime" | "time"
49
- >;
50
-
51
- const DATE_LIKE_TYPES: ReadonlySet<EditableFilterType> = new Set([
52
- "date",
53
- "datetime",
54
- "time",
55
- ]);
56
-
57
- const isDateLikeType = (
58
- type: EditableFilterType,
59
- ): type is DateLikeEditableFilterType => DATE_LIKE_TYPES.has(type);
60
-
61
- const BOOLEAN_OPS = ["is_true", "is_false", "is_null", "is_not_null"] as const;
62
- const SELECT_OPS = MEMBERSHIP_OPS;
63
-
64
- const OPERATORS_BY_TYPE: Record<
65
- EditableFilterType,
66
- ReadonlyArray<OperatorType>
67
- > = {
68
- number: NUMBER_OPS,
69
- text: TEXT_OPS,
70
- boolean: BOOLEAN_OPS,
71
- select: SELECT_OPS,
72
- date: DATETIME_OPS,
73
- datetime: DATETIME_OPS,
74
- time: DATETIME_OPS,
75
- };
76
-
77
- const DEFAULT_OPERATOR: Record<EditableFilterType, OperatorType> = {
78
- number: "between",
79
- text: "contains",
80
- boolean: "is_true",
81
- select: "in",
82
- date: "between",
83
- datetime: "between",
84
- time: "between",
85
- };
86
-
87
- const OPERATORS_WITHOUT_VALUE = new Set<OperatorType>([
88
- "is_true",
89
- "is_false",
90
- "is_null",
91
- "is_not_null",
92
- "is_empty",
93
- ]);
39
+ import { RegexInput } from "./regex-input";
94
40
 
95
41
  type DraftValue =
96
42
  | { kind: "between"; min?: number; max?: number }
97
43
  | { kind: "single-number"; value?: number }
98
44
  | { kind: "single-text"; text?: string }
99
- | { kind: "multi-text"; values?: string[] }
100
- | { kind: "options"; options?: unknown[] }
45
+ | { kind: "multi-values"; values?: unknown[] }
101
46
  | { kind: "date-between"; min?: Date; max?: Date }
102
47
  | { kind: "date-single"; value?: Date }
103
48
  | { kind: "none" };
104
49
 
105
- interface Snapshot {
106
- columnId: string;
107
- value: ColumnFilterValue;
50
+ interface NumberTextDraft {
51
+ min?: string;
52
+ max?: string;
53
+ value?: string;
54
+ }
55
+
56
+ const EMPTY_NUMBER_TEXT_DRAFT: NumberTextDraft = {};
57
+
58
+ function parseDraftNumber(text: string | undefined): number | undefined {
59
+ if (text === undefined || text.trim() === "") {
60
+ return undefined;
61
+ }
62
+ const n = Number.parseFloat(text);
63
+ return Number.isFinite(n) ? n : undefined;
64
+ }
65
+
66
+ function mergeNumberTextDraft(
67
+ draft: DraftValue,
68
+ textDraft: NumberTextDraft,
69
+ ): DraftValue {
70
+ if (draft.kind === "between") {
71
+ return {
72
+ kind: "between",
73
+ min: parseDraftNumber(textDraft.min) ?? draft.min,
74
+ max: parseDraftNumber(textDraft.max) ?? draft.max,
75
+ };
76
+ }
77
+ if (draft.kind === "single-number") {
78
+ return {
79
+ kind: "single-number",
80
+ value: parseDraftNumber(textDraft.value) ?? draft.value,
81
+ };
82
+ }
83
+ return draft;
84
+ }
85
+
86
+ export function buildEmptyFilterValue(
87
+ column: Column<unknown, unknown>,
88
+ ): ColumnFilterValue {
89
+ const type = columnEditableType(column);
90
+ return defaultFilterValueFor(type, DEFAULT_OPERATOR_FOR_TYPE[type]);
91
+ }
92
+
93
+ export function buildEditorSnapshot(
94
+ column: Column<unknown, unknown>,
95
+ opts?: { operator?: OperatorType },
96
+ ): Snapshot {
97
+ const type = columnEditableType(column);
98
+ const operator = opts?.operator ?? DEFAULT_OPERATOR_FOR_TYPE[type];
99
+ return {
100
+ columnId: column.id,
101
+ value: defaultFilterValueFor(type, operator),
102
+ };
103
+ }
104
+
105
+ export function editableColumns<TData>(
106
+ table: Table<TData>,
107
+ ): Array<Column<TData, unknown>> {
108
+ return table.getAllColumns().filter((c) => {
109
+ const ft = c.columnDef.meta?.filterType;
110
+ return ft !== undefined && EDITABLE_FILTER_TYPES.has(ft);
111
+ });
108
112
  }
109
113
 
110
114
  interface FilterPillEditorProps<TData> {
@@ -112,6 +116,7 @@ interface FilterPillEditorProps<TData> {
112
116
  table: Table<TData>;
113
117
  calculateTopKRows?: CalculateTopKRows;
114
118
  onClose: () => void;
119
+ editIndex?: number; // skip for creating new pill; when passed edits the pill at idx instead
115
120
  }
116
121
 
117
122
  export const FilterPillEditor = <TData,>({
@@ -119,33 +124,26 @@ export const FilterPillEditor = <TData,>({
119
124
  table,
120
125
  calculateTopKRows,
121
126
  onClose,
127
+ editIndex,
122
128
  }: FilterPillEditorProps<TData>) => {
123
129
  const columnId = useId();
124
130
  const operatorId = useId();
125
131
  const valueId = useId();
126
132
 
127
- const snapshotType = getEditableType(snapshot.value);
133
+ const snapshotType: FilterType = snapshot.value.type;
128
134
  const snapshotOperator = snapshot.value.operator as OperatorType;
129
135
  const snapshotDraft = toDraftValue(snapshot.value);
130
136
 
131
137
  const [draftColumnId, setDraftColumnId] = useState<string>(snapshot.columnId);
132
- const [draftType, setDraftType] = useState<EditableFilterType>(snapshotType);
138
+ const [draftType, setDraftType] = useState<FilterType>(snapshotType);
133
139
  const [draftOperator, setDraftOperator] =
134
140
  useState<OperatorType>(snapshotOperator);
135
141
  const [draftValue, setDraftValue] = useState<DraftValue>(snapshotDraft);
142
+ const [numberTextDraft, setNumberTextDraft] = useState<NumberTextDraft>(
143
+ EMPTY_NUMBER_TEXT_DRAFT,
144
+ );
136
145
 
137
- const editableColumns = table.getAllColumns().filter((c) => {
138
- const ft = c.columnDef.meta?.filterType;
139
- return (
140
- ft === "number" ||
141
- ft === "text" ||
142
- ft === "boolean" ||
143
- ft === "select" ||
144
- ft === "date" ||
145
- ft === "datetime" ||
146
- ft === "time"
147
- );
148
- });
146
+ const columnOptions = editableColumns(table);
149
147
 
150
148
  const rehydrateIfMatchesSnapshot = (args: {
151
149
  id: string;
@@ -161,15 +159,18 @@ export const FilterPillEditor = <TData,>({
161
159
  return;
162
160
  }
163
161
  const nextColumn = table.getColumn(nextColumnId);
164
- const nextColumnType = (nextColumn?.columnDef.meta?.filterType ??
165
- "text") as EditableFilterType;
162
+ if (!nextColumn) {
163
+ return;
164
+ }
165
+ const nextColumnType = columnEditableType(nextColumn);
166
166
 
167
167
  let nextOperator = draftOperator;
168
168
  if (nextColumnType !== draftType) {
169
- nextOperator = DEFAULT_OPERATOR[nextColumnType];
169
+ nextOperator = DEFAULT_OPERATOR_FOR_TYPE[nextColumnType];
170
170
  setDraftType(nextColumnType);
171
171
  setDraftOperator(nextOperator);
172
172
  setDraftValue(emptyDraftFor(nextColumnType, nextOperator));
173
+ setNumberTextDraft(EMPTY_NUMBER_TEXT_DRAFT);
173
174
  }
174
175
  setDraftColumnId(nextColumnId);
175
176
  rehydrateIfMatchesSnapshot({
@@ -184,6 +185,7 @@ export const FilterPillEditor = <TData,>({
184
185
  if (nextEmpty.kind !== draftValue.kind) {
185
186
  setDraftValue(nextEmpty);
186
187
  }
188
+ setNumberTextDraft(EMPTY_NUMBER_TEXT_DRAFT);
187
189
  rehydrateIfMatchesSnapshot({
188
190
  id: draftColumnId,
189
191
  operator: nextOp,
@@ -193,7 +195,7 @@ export const FilterPillEditor = <TData,>({
193
195
  const pendingValue = buildFilterValue({
194
196
  type: draftType,
195
197
  operator: draftOperator,
196
- draft: draftValue,
198
+ draft: mergeNumberTextDraft(draftValue, numberTextDraft),
197
199
  });
198
200
  const applyDisabled = pendingValue === undefined;
199
201
  const applyTooltip = applyDisabled
@@ -206,17 +208,23 @@ export const FilterPillEditor = <TData,>({
206
208
  }
207
209
  const value = pendingValue;
208
210
  table.setColumnFilters((filters) => {
209
- const dropIds = new Set([snapshot.columnId, draftColumnId]);
210
- const filtered = filters.filter((f) => !dropIds.has(f.id));
211
- return [...filtered, { id: draftColumnId, value }];
211
+ // assume new filter pill is being created
212
+ if (editIndex === undefined) {
213
+ return [{ id: draftColumnId, value }, ...filters];
214
+ }
215
+ const next = [...filters];
216
+ next[editIndex] = { id: draftColumnId, value };
217
+ return next;
212
218
  });
213
219
  onClose();
214
220
  };
215
221
 
216
222
  const handleClear = () => {
217
- table.setColumnFilters((filters) =>
218
- filters.filter((f) => f.id !== snapshot.columnId),
219
- );
223
+ if (editIndex !== undefined) {
224
+ table.setColumnFilters((filters) =>
225
+ filters.filter((_, i) => i !== editIndex),
226
+ );
227
+ }
220
228
  onClose();
221
229
  };
222
230
 
@@ -261,7 +269,7 @@ export const FilterPillEditor = <TData,>({
261
269
  placeholder="Select column…"
262
270
  displayValue={(id) => id}
263
271
  >
264
- {editableColumns.map((c) => (
272
+ {columnOptions.map((c) => (
265
273
  <ComboboxItem key={c.id} value={c.id}>
266
274
  {c.id}
267
275
  </ComboboxItem>
@@ -304,6 +312,9 @@ export const FilterPillEditor = <TData,>({
304
312
  operator={draftOperator}
305
313
  value={draftValue}
306
314
  onChange={setDraftValue}
315
+ onNumberTextChange={(field, text) =>
316
+ setNumberTextDraft((prev) => ({ ...prev, [field]: text }))
317
+ }
307
318
  column={table.getColumn(draftColumnId) ?? null}
308
319
  calculateTopKRows={calculateTopKRows}
309
320
  />
@@ -355,10 +366,11 @@ export const FilterPillEditor = <TData,>({
355
366
 
356
367
  interface ValueSlotProps<TData, TValue> {
357
368
  id?: string;
358
- type: EditableFilterType;
369
+ type: FilterType;
359
370
  operator: OperatorType;
360
371
  value: DraftValue;
361
372
  onChange: (next: DraftValue) => void;
373
+ onNumberTextChange: (field: "min" | "max" | "value", text: string) => void;
362
374
  column: Column<TData, TValue> | null;
363
375
  calculateTopKRows?: CalculateTopKRows;
364
376
  }
@@ -369,6 +381,7 @@ const ValueSlot = <TData, TValue>({
369
381
  operator,
370
382
  value,
371
383
  onChange,
384
+ onNumberTextChange,
372
385
  column,
373
386
  calculateTopKRows,
374
387
  }: ValueSlotProps<TData, TValue>) => {
@@ -380,6 +393,7 @@ const ValueSlot = <TData, TValue>({
380
393
  id={id}
381
394
  value={v.min}
382
395
  onChange={(n) => onChange({ kind: "between", min: n, max: v.max })}
396
+ onInputText={(t) => onNumberTextChange("min", t)}
383
397
  aria-label="min"
384
398
  placeholder="min"
385
399
  className="border-input flex-1 min-w-0"
@@ -388,6 +402,7 @@ const ValueSlot = <TData, TValue>({
388
402
  <NumberField
389
403
  value={v.max}
390
404
  onChange={(n) => onChange({ kind: "between", min: v.min, max: n })}
405
+ onInputText={(t) => onNumberTextChange("max", t)}
391
406
  aria-label="max"
392
407
  placeholder="max"
393
408
  className="border-input flex-1 min-w-0"
@@ -395,7 +410,7 @@ const ValueSlot = <TData, TValue>({
395
410
  </div>
396
411
  );
397
412
  }
398
- if (type === "number" && isNumberComparisonOp(operator)) {
413
+ if (type === "number" && isComparisonOp(operator)) {
399
414
  const v =
400
415
  value.kind === "single-number"
401
416
  ? value
@@ -405,6 +420,7 @@ const ValueSlot = <TData, TValue>({
405
420
  id={id}
406
421
  value={v.value}
407
422
  onChange={(n) => onChange({ kind: "single-number", value: n })}
423
+ onInputText={(t) => onNumberTextChange("value", t)}
408
424
  aria-label="value"
409
425
  placeholder="value"
410
426
  className="border-input w-24 min-w-0"
@@ -412,22 +428,20 @@ const ValueSlot = <TData, TValue>({
412
428
  );
413
429
  }
414
430
  if (
415
- type === "text" &&
431
+ (type === "text" || type === "number") &&
416
432
  (operator === "in" || operator === "not_in") &&
417
433
  column
418
434
  ) {
419
435
  const v =
420
- value.kind === "multi-text" ? value : { kind: "multi-text" as const };
436
+ value.kind === "multi-values" ? value : { kind: "multi-values" as const };
421
437
  return (
422
- <div className="w-48">
438
+ <div className="min-w-[14rem] w-fit max-w-[24rem]">
423
439
  <FilterByValuesPicker
424
440
  column={column}
425
441
  calculateTopKRows={calculateTopKRows}
426
442
  chosenValues={v.values ?? []}
427
- onChange={(next) =>
428
- onChange({ kind: "multi-text", values: next.map(String) })
429
- }
430
- creatable={true}
443
+ onChange={(next) => onChange({ kind: "multi-values", values: next })}
444
+ creatable={type === "text"}
431
445
  />
432
446
  </div>
433
447
  );
@@ -474,7 +488,7 @@ const ValueSlot = <TData, TValue>({
474
488
  />
475
489
  );
476
490
  }
477
- if (isDateLikeType(type) && isDatetimeComparisonOp(operator)) {
491
+ if (isDateLikeType(type) && isComparisonOp(operator)) {
478
492
  const v =
479
493
  value.kind === "date-single" ? value : { kind: "date-single" as const };
480
494
  return (
@@ -488,42 +502,17 @@ const ValueSlot = <TData, TValue>({
488
502
  />
489
503
  );
490
504
  }
491
- if (type === "select" && column) {
492
- const v = value.kind === "options" ? value : { kind: "options" as const };
493
- return (
494
- <div className="flex w-48">
495
- <FilterByValuesPicker
496
- column={column}
497
- calculateTopKRows={calculateTopKRows}
498
- chosenValues={v.options ?? []}
499
- onChange={(values) => onChange({ kind: "options", options: values })}
500
- />
501
- </div>
502
- );
503
- }
504
505
  return null;
505
506
  };
506
507
 
507
- function getEditableType(value: ColumnFilterValue): EditableFilterType {
508
- switch (value.type) {
509
- case "number":
510
- case "text":
511
- case "boolean":
512
- case "select":
513
- case "date":
514
- case "datetime":
515
- case "time":
516
- return value.type;
517
- default:
518
- return "text";
519
- }
520
- }
521
-
522
508
  function toDraftValue(value: ColumnFilterValue): DraftValue {
523
509
  if (value.type === "number") {
524
510
  switch (value.operator) {
525
511
  case "between":
526
512
  return { kind: "between", min: value.min, max: value.max };
513
+ case "in":
514
+ case "not_in":
515
+ return { kind: "multi-values", values: [...value.values] };
527
516
  case "is_null":
528
517
  case "is_not_null":
529
518
  return { kind: "none" };
@@ -535,7 +524,7 @@ function toDraftValue(value: ColumnFilterValue): DraftValue {
535
524
  switch (value.operator) {
536
525
  case "in":
537
526
  case "not_in":
538
- return { kind: "multi-text", values: [...value.values] };
527
+ return { kind: "multi-values", values: [...value.values] };
539
528
  case "is_null":
540
529
  case "is_not_null":
541
530
  case "is_empty":
@@ -544,9 +533,6 @@ function toDraftValue(value: ColumnFilterValue): DraftValue {
544
533
  return { kind: "single-text", text: value.text };
545
534
  }
546
535
  }
547
- if (value.type === "select") {
548
- return { kind: "options", options: [...value.options] };
549
- }
550
536
  if (
551
537
  value.type === "date" ||
552
538
  value.type === "datetime" ||
@@ -565,25 +551,20 @@ function toDraftValue(value: ColumnFilterValue): DraftValue {
565
551
  return { kind: "none" };
566
552
  }
567
553
 
568
- function emptyDraftFor(
569
- type: EditableFilterType,
570
- operator: OperatorType,
571
- ): DraftValue {
554
+ function emptyDraftFor(type: FilterType, operator: OperatorType): DraftValue {
572
555
  if (OPERATORS_WITHOUT_VALUE.has(operator)) {
573
556
  return { kind: "none" };
574
557
  }
558
+ if (operator === "in" || operator === "not_in") {
559
+ return { kind: "multi-values", values: [] };
560
+ }
575
561
  if (type === "number") {
576
562
  return operator === "between"
577
563
  ? { kind: "between" }
578
564
  : { kind: "single-number" };
579
565
  }
580
566
  if (type === "text") {
581
- return operator === "in" || operator === "not_in"
582
- ? { kind: "multi-text", values: [] }
583
- : { kind: "single-text" };
584
- }
585
- if (type === "select") {
586
- return { kind: "options", options: [] };
567
+ return { kind: "single-text" };
587
568
  }
588
569
  if (isDateLikeType(type)) {
589
570
  return operator === "between"
@@ -594,13 +575,13 @@ function emptyDraftFor(
594
575
  }
595
576
 
596
577
  function getMissingValueMessage(
597
- type: EditableFilterType,
578
+ _type: FilterType,
598
579
  operator: OperatorType,
599
580
  ): string {
600
581
  if (operator === "between") {
601
582
  return "Min and max are required";
602
583
  }
603
- if (type === "text" && (operator === "in" || operator === "not_in")) {
584
+ if (operator === "in" || operator === "not_in") {
604
585
  return "Pick at least one value";
605
586
  }
606
587
  return "Value is required";
@@ -611,7 +592,7 @@ function buildFilterValue({
611
592
  operator,
612
593
  draft,
613
594
  }: {
614
- type: EditableFilterType;
595
+ type: FilterType;
615
596
  operator: OperatorType;
616
597
  draft: DraftValue;
617
598
  }): ColumnFilterValue | undefined {
@@ -633,7 +614,17 @@ function buildFilterValue({
633
614
  max: draft.max,
634
615
  });
635
616
  }
636
- if (!isNumberComparisonOp(operator)) {
617
+ if (operator === "in" || operator === "not_in") {
618
+ if (
619
+ draft.kind !== "multi-values" ||
620
+ !draft.values ||
621
+ draft.values.length === 0
622
+ ) {
623
+ return undefined;
624
+ }
625
+ return Filter.number({ operator, values: draft.values });
626
+ }
627
+ if (!isComparisonOp(operator)) {
637
628
  return undefined;
638
629
  }
639
630
  if (draft.kind !== "single-number" || draft.value === undefined) {
@@ -651,7 +642,7 @@ function buildFilterValue({
651
642
  }
652
643
  if (operator === "in" || operator === "not_in") {
653
644
  if (
654
- draft.kind !== "multi-text" ||
645
+ draft.kind !== "multi-values" ||
655
646
  !draft.values ||
656
647
  draft.values.length === 0
657
648
  ) {
@@ -668,29 +659,15 @@ function buildFilterValue({
668
659
  return Filter.text({ operator, text: draft.text });
669
660
  }
670
661
  if (type === "boolean") {
671
- if (operator === "is_true") {
672
- return Filter.boolean({ value: true, operator: "is_true" });
673
- }
674
- if (operator === "is_false") {
675
- return Filter.boolean({ value: false, operator: "is_false" });
676
- }
677
- if (operator === "is_null" || operator === "is_not_null") {
678
- return Filter.boolean({ operator });
679
- }
680
- return undefined;
681
- }
682
- if (type === "select") {
683
662
  if (
684
- draft.kind !== "options" ||
685
- !draft.options ||
686
- draft.options.length === 0
663
+ operator === "is_true" ||
664
+ operator === "is_false" ||
665
+ operator === "is_null" ||
666
+ operator === "is_not_null"
687
667
  ) {
688
- return undefined;
668
+ return Filter.boolean({ operator });
689
669
  }
690
- return Filter.select({
691
- options: draft.options,
692
- operator: operator === "not_in" ? "not_in" : "in",
693
- });
670
+ return undefined;
694
671
  }
695
672
  if (isDateLikeType(type)) {
696
673
  const factory =
@@ -712,7 +689,7 @@ function buildFilterValue({
712
689
  }
713
690
  return factory({ operator: "between", min: draft.min, max: draft.max });
714
691
  }
715
- if (!isDatetimeComparisonOp(operator)) {
692
+ if (!isComparisonOp(operator)) {
716
693
  return undefined;
717
694
  }
718
695
  if (draft.kind !== "date-single" || draft.value === undefined) {