@servicetitan/anvil2 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/{floating-ui.react-C_s3_nEb.js → AiMark-Cwc9KoyE.js} +767 -5
  3. package/dist/AiMark-Cwc9KoyE.js.map +1 -0
  4. package/dist/AiMark.css +260 -0
  5. package/dist/AiMark.d.ts +2 -0
  6. package/dist/AiMark.js +2 -0
  7. package/dist/AiMark.js.map +1 -0
  8. package/dist/{Alert-C_o2f78C.js → Alert-5qhkSUN3.js} +27 -13
  9. package/dist/Alert-5qhkSUN3.js.map +1 -0
  10. package/dist/Alert.css +23 -15
  11. package/dist/Alert.js +1 -1
  12. package/dist/{Announcement-CyrTvgP4.js → Announcement-fQmFNysn.js} +2 -2
  13. package/dist/{Announcement-CyrTvgP4.js.map → Announcement-fQmFNysn.js.map} +1 -1
  14. package/dist/Announcement.js +1 -1
  15. package/dist/{Avatar-CCnbKkCm.js → Avatar-BckUfs1N.js} +48 -46
  16. package/dist/{Avatar-CCnbKkCm.js.map → Avatar-BckUfs1N.js.map} +1 -1
  17. package/dist/Avatar-ChybzixS.js +35 -0
  18. package/dist/Avatar-ChybzixS.js.map +1 -0
  19. package/dist/Avatar.js +2 -2
  20. package/dist/Breadcrumbs-BXo2FO2n.js +107 -0
  21. package/dist/Breadcrumbs-BXo2FO2n.js.map +1 -0
  22. package/dist/Breadcrumbs.js +1 -1
  23. package/dist/Button-a_D7tUgM.js +4517 -0
  24. package/dist/Button-a_D7tUgM.js.map +1 -0
  25. package/dist/Button.js +1 -1
  26. package/dist/{ButtonToggle-DaYJWso_.js → ButtonToggle-CmY77gUp.js} +2 -2
  27. package/dist/{ButtonToggle-DaYJWso_.js.map → ButtonToggle-CmY77gUp.js.map} +1 -1
  28. package/dist/ButtonToggle.js +1 -1
  29. package/dist/{Calendar-SGlTt-bs.js → Calendar-Bd_WELZC.js} +130 -119
  30. package/dist/Calendar-Bd_WELZC.js.map +1 -0
  31. package/dist/{Calendar-C1U2npPP.js → Calendar-d2owsYe9.js} +2 -2
  32. package/dist/{Calendar-C1U2npPP.js.map → Calendar-d2owsYe9.js.map} +1 -1
  33. package/dist/Calendar.css +51 -51
  34. package/dist/Calendar.js +2 -2
  35. package/dist/Card-wz71dEVA.js.map +1 -1
  36. package/dist/{Checkbox-CtKUNeyu.js → Checkbox-BlFc6ZWy.js} +25 -14
  37. package/dist/Checkbox-BlFc6ZWy.js.map +1 -0
  38. package/dist/Checkbox-DbaZrUE2.js +52 -0
  39. package/dist/Checkbox-DbaZrUE2.js.map +1 -0
  40. package/dist/Checkbox.js +1 -1
  41. package/dist/{Chip-DjTAR0va.js → Chip-BnofwIUN.js} +43 -13
  42. package/dist/Chip-BnofwIUN.js.map +1 -0
  43. package/dist/Chip.css +44 -28
  44. package/dist/Chip.js +1 -1
  45. package/dist/{Combobox-By8-34bw.js → Combobox-BOxAzG9v.js} +186 -183
  46. package/dist/{Combobox-By8-34bw.js.map → Combobox-BOxAzG9v.js.map} +1 -1
  47. package/dist/Combobox.js +1 -1
  48. package/dist/{DataTable-BYOS6icI.js → DataTable-DK9xRjnq.js} +762 -651
  49. package/dist/DataTable-DK9xRjnq.js.map +1 -0
  50. package/dist/DataTable.css +84 -74
  51. package/dist/{DateFieldRange-C8Uzrboc.js → DateFieldRange-5Jrz6dLl.js} +20 -6
  52. package/dist/DateFieldRange-5Jrz6dLl.js.map +1 -0
  53. package/dist/DateFieldRange.js +1 -1
  54. package/dist/{DateFieldSingle-DrhLIjlK.js → DateFieldSingle-DWFr6Ew4.js} +8 -8
  55. package/dist/{DateFieldSingle-DrhLIjlK.js.map → DateFieldSingle-DWFr6Ew4.js.map} +1 -1
  56. package/dist/DateFieldSingle.js +1 -1
  57. package/dist/{DateFieldYearless-DbivK4Hm.js → DateFieldYearless-UU22A5-E.js} +22 -6
  58. package/dist/DateFieldYearless-UU22A5-E.js.map +1 -0
  59. package/dist/DateFieldYearless.js +1 -1
  60. package/dist/{DateFieldYearlessRange-BEqJe4Uf.js → DateFieldYearlessRange-BoPLxm6t.js} +3 -3
  61. package/dist/DateFieldYearlessRange-BoPLxm6t.js.map +1 -0
  62. package/dist/DateFieldYearlessRange.js +1 -1
  63. package/dist/{DaysOfTheWeek-BR32AA32.js → DaysOfTheWeek-4cfTmjzm.js} +4 -4
  64. package/dist/{DaysOfTheWeek-BR32AA32.js.map → DaysOfTheWeek-4cfTmjzm.js.map} +1 -1
  65. package/dist/DaysOfTheWeek.js +1 -1
  66. package/dist/{Details-Dxq_v3Qg.js → Details-CZOIpNP_.js} +8 -8
  67. package/dist/Details-CZOIpNP_.js.map +1 -0
  68. package/dist/Details.js +1 -1
  69. package/dist/{Dialog-CGhwkwvq.js → Dialog-Dn836WQM.js} +73 -73
  70. package/dist/Dialog-Dn836WQM.js.map +1 -0
  71. package/dist/Dialog.js +1 -1
  72. package/dist/{DialogCancelButton-DQDMzGeT.js → DialogCancelButton-B-jfihJr.js} +2 -2
  73. package/dist/{DialogCancelButton-DQDMzGeT.js.map → DialogCancelButton-B-jfihJr.js.map} +1 -1
  74. package/dist/{Drawer-DA4iAgt-.js → Drawer-CdDWt_Ba.js} +86 -86
  75. package/dist/Drawer-CdDWt_Ba.js.map +1 -0
  76. package/dist/Drawer.js +1 -1
  77. package/dist/DrillDown.js +1 -1
  78. package/dist/{EditCard-CLN0GBN_.js → EditCard-CZibhEfS.js} +3 -3
  79. package/dist/{EditCard-CLN0GBN_.js.map → EditCard-CZibhEfS.js.map} +1 -1
  80. package/dist/EditCard.js +1 -1
  81. package/dist/FieldLabel-Dr41PRxH.js +180 -0
  82. package/dist/FieldLabel-Dr41PRxH.js.map +1 -0
  83. package/dist/FieldLabel.css +33 -73
  84. package/dist/FieldLabel.js +1 -1
  85. package/dist/Grid-DeYIx5k4.js +149 -0
  86. package/dist/Grid-DeYIx5k4.js.map +1 -0
  87. package/dist/Grid.js +1 -1
  88. package/dist/{InputMask-HjaNCb73.js → InputMask-CcXqzqdx.js} +3 -3
  89. package/dist/{InputMask-HjaNCb73.js.map → InputMask-CcXqzqdx.js.map} +1 -1
  90. package/dist/InputMask.js +1 -1
  91. package/dist/{Layout-VfhlilMG.js → Layout-CISAxILX.js} +34 -33
  92. package/dist/Layout-CISAxILX.js.map +1 -0
  93. package/dist/Layout.js +1 -1
  94. package/dist/List--KhCpjZn.js +103 -0
  95. package/dist/List--KhCpjZn.js.map +1 -0
  96. package/dist/List.js +1 -1
  97. package/dist/{ListView-mujFK6mQ.js → ListView-D9cZUVer.js} +6 -6
  98. package/dist/ListView-D9cZUVer.js.map +1 -0
  99. package/dist/ListView.js +1 -1
  100. package/dist/{Listbox-BtAgBDRS.js → Listbox-CgDwzRfz.js} +6 -5
  101. package/dist/Listbox-CgDwzRfz.js.map +1 -0
  102. package/dist/Listbox.js +1 -1
  103. package/dist/{Menu-BXsmCP20.js → Menu-CPbuIsqC.js} +367 -367
  104. package/dist/Menu-CPbuIsqC.js.map +1 -0
  105. package/dist/Menu.js +1 -1
  106. package/dist/MultiSelectField.js +1 -1
  107. package/dist/{MultiSelectFieldSync-DGpGgu8q.js → MultiSelectFieldSync-Ei7DXzvs.js} +31 -18
  108. package/dist/MultiSelectFieldSync-Ei7DXzvs.js.map +1 -0
  109. package/dist/MultiSelectMenu.js +1 -1
  110. package/dist/{MultiSelectMenuSync-DiLddJDw.js → MultiSelectMenuSync-B_mXpTEe.js} +29 -9
  111. package/dist/MultiSelectMenuSync-B_mXpTEe.js.map +1 -0
  112. package/dist/{NumberField-svhZp1kB.js → NumberField-C5t47Obp.js} +16 -5
  113. package/dist/NumberField-C5t47Obp.js.map +1 -0
  114. package/dist/NumberField.js +1 -1
  115. package/dist/Overflow.css +27 -26
  116. package/dist/Overflow.js +11 -11
  117. package/dist/{Page-Be029Dij.js → Page-2hbQxUj6.js} +223 -207
  118. package/dist/Page-2hbQxUj6.js.map +1 -0
  119. package/dist/Page.css +78 -76
  120. package/dist/Page.js +1 -1
  121. package/dist/{Pagination-BAwqfl_2.js → Pagination-CjGmJ_rU.js} +20 -18
  122. package/dist/Pagination-CjGmJ_rU.js.map +1 -0
  123. package/dist/Pagination.js +1 -1
  124. package/dist/{Popover-D0qSKZ1J.js → Popover-CpU9VAcb.js} +356 -358
  125. package/dist/Popover-CpU9VAcb.js.map +1 -0
  126. package/dist/Popover.js +1 -1
  127. package/dist/{ProgressBar-JpRDW5vG.js → ProgressBar-FMuK8viJ.js} +2 -2
  128. package/dist/{ProgressBar-JpRDW5vG.js.map → ProgressBar-FMuK8viJ.js.map} +1 -1
  129. package/dist/ProgressBar.js +1 -1
  130. package/dist/{Radio-BQg7exDG.js → Radio-CZZd8phn.js} +25 -14
  131. package/dist/Radio-CZZd8phn.js.map +1 -0
  132. package/dist/Radio-DmtVWAmN.js +60 -0
  133. package/dist/Radio-DmtVWAmN.js.map +1 -0
  134. package/dist/Radio.js +1 -1
  135. package/dist/{SegmentedControl-7fDLhgvh.js → SegmentedControl-B9NWUF7s.js} +81 -77
  136. package/dist/{SegmentedControl-7fDLhgvh.js.map → SegmentedControl-B9NWUF7s.js.map} +1 -1
  137. package/dist/SegmentedControl.js +1 -1
  138. package/dist/SelectCard-8OmIDl1m.js +352 -0
  139. package/dist/SelectCard-8OmIDl1m.js.map +1 -0
  140. package/dist/SelectCard.js +1 -1
  141. package/dist/SelectField.js +1 -1
  142. package/dist/{SelectFieldLabel-Dr8HeW3N.js → SelectFieldLabel-C8PrXxDU.js} +5 -4
  143. package/dist/SelectFieldLabel-C8PrXxDU.js.map +1 -0
  144. package/dist/{SelectFieldSync-CJ2Ie_v1.js → SelectFieldSync-DGK8F2G9.js} +13 -13
  145. package/dist/SelectFieldSync-DGK8F2G9.js.map +1 -0
  146. package/dist/SelectMenu.js +1 -1
  147. package/dist/{SelectMenuSync-CJA_coqD.js → SelectMenuSync-CuZp9mnt.js} +29 -9
  148. package/dist/SelectMenuSync-CuZp9mnt.js.map +1 -0
  149. package/dist/{SelectOptions-Bf4xsFek.js → SelectOptions-CmElsiTd.js} +2 -2
  150. package/dist/{SelectOptions-Bf4xsFek.js.map → SelectOptions-CmElsiTd.js.map} +1 -1
  151. package/dist/{SelectTrigger-ObsnAKNp.js → SelectTrigger-KF8w6Ynk.js} +8 -6
  152. package/dist/SelectTrigger-KF8w6Ynk.js.map +1 -0
  153. package/dist/SelectTrigger.js +1 -1
  154. package/dist/{SelectTriggerBase-DKfOL2RJ.js → SelectTriggerBase-Bxmv6oXk.js} +4 -4
  155. package/dist/{SelectTriggerBase-DKfOL2RJ.js.map → SelectTriggerBase-Bxmv6oXk.js.map} +1 -1
  156. package/dist/{SideNav-KksbSQn7.js → SideNav-CrxYExjh.js} +137 -135
  157. package/dist/{SideNav-KksbSQn7.js.map → SideNav-CrxYExjh.js.map} +1 -1
  158. package/dist/SideNav.css +72 -55
  159. package/dist/SideNav.js +1 -1
  160. package/dist/Skeleton.css +18 -12
  161. package/dist/Skeleton.js +24 -11
  162. package/dist/Skeleton.js.map +1 -1
  163. package/dist/{Stepper-Dt8_ImvJ.js → Stepper-_27Lmm2K.js} +158 -158
  164. package/dist/{Stepper-Dt8_ImvJ.js.map → Stepper-_27Lmm2K.js.map} +1 -1
  165. package/dist/Stepper.js +1 -1
  166. package/dist/{Switch-DpPHr3G3.js → Switch-DPGz7wC_.js} +14 -2
  167. package/dist/Switch-DPGz7wC_.js.map +1 -0
  168. package/dist/Switch.js +1 -1
  169. package/dist/{Tab-DO7LaUbw.js → Tab-BZpTCG0i.js} +227 -223
  170. package/dist/Tab-BZpTCG0i.js.map +1 -0
  171. package/dist/Tab.js +1 -1
  172. package/dist/Table.js +1 -1
  173. package/dist/{Text-BJo4oMI2.js → Text-MVxRo6yx.js} +30 -12
  174. package/dist/Text-MVxRo6yx.js.map +1 -0
  175. package/dist/Text.css +37 -20
  176. package/dist/Text.js +1 -1
  177. package/dist/{TextField-DeHpgPag.js → TextField-BpSxZa0z.js} +21 -5
  178. package/dist/TextField-BpSxZa0z.js.map +1 -0
  179. package/dist/{TextField-BW8sJAls.js → TextField-D93iv_pk.js} +2 -2
  180. package/dist/{TextField-BW8sJAls.js.map → TextField-D93iv_pk.js.map} +1 -1
  181. package/dist/TextField.js +1 -1
  182. package/dist/{Textarea-DyqdMTvQ.js → Textarea-1u2fSMTh.js} +21 -5
  183. package/dist/Textarea-1u2fSMTh.js.map +1 -0
  184. package/dist/Textarea.js +1 -1
  185. package/dist/{TimeField-Dc0Y1JD-.js → TimeField-B4gLlBQJ.js} +6 -5
  186. package/dist/{TimeField-Dc0Y1JD-.js.map → TimeField-B4gLlBQJ.js.map} +1 -1
  187. package/dist/TimeField.js +1 -1
  188. package/dist/Toast.js +2 -2
  189. package/dist/{Toaster-b0-Ub3yt.js → Toaster-CSJfSOHx.js} +5 -5
  190. package/dist/Toaster-CSJfSOHx.js.map +1 -0
  191. package/dist/{Toaster-DikGo_hR.js → Toaster-DbWYnF_t.js} +2 -2
  192. package/dist/{Toaster-DikGo_hR.js.map → Toaster-DbWYnF_t.js.map} +1 -1
  193. package/dist/{Toolbar-DAuz4Gs2.js → Toolbar-CWRk523l.js} +150 -149
  194. package/dist/{Toolbar-DAuz4Gs2.js.map → Toolbar-CWRk523l.js.map} +1 -1
  195. package/dist/Toolbar.js +1 -1
  196. package/dist/{Tooltip-Bupqao9B.js → Tooltip-C1PBRnJv.js} +225 -228
  197. package/dist/Tooltip-C1PBRnJv.js.map +1 -0
  198. package/dist/Tooltip.js +1 -1
  199. package/dist/{YearlessDateInputWithPicker-DFi08TLG.js → YearlessDateInputWithPicker-BSl5z2zo.js} +2 -3
  200. package/dist/{YearlessDateInputWithPicker-DFi08TLG.js.map → YearlessDateInputWithPicker-BSl5z2zo.js.map} +1 -1
  201. package/dist/assets/icons/st/ai_mark_gradient.svg +1 -1
  202. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
  203. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldInput.d.ts +3 -2
  204. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
  205. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldTrigger.d.ts +3 -2
  206. package/dist/beta/components/MultiSelectField/internal/types.d.ts +4 -3
  207. package/dist/beta/components/MultiSelectField/types.d.ts +28 -7
  208. package/dist/beta/components/MultiSelectMenu/types.d.ts +15 -0
  209. package/dist/beta/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
  210. package/dist/beta/components/SelectField/internal/SelectFieldLabel.d.ts +4 -4
  211. package/dist/beta/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
  212. package/dist/beta/components/SelectField/types.d.ts +5 -5
  213. package/dist/beta/components/SelectMenu/internal/useMenuInteraction.d.ts +3 -1
  214. package/dist/beta/components/SelectMenu/types.d.ts +15 -0
  215. package/dist/beta/components/Table/DataTable/DataTable.d.ts +2 -15
  216. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectAsyncCell.d.ts +35 -0
  217. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectCell.d.ts +4 -3
  218. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableSelectAsyncCell.d.ts +7 -0
  219. package/dist/beta/components/Table/DataTable/internal/editable-cells/useEditableMenuCell.d.ts +34 -0
  220. package/dist/beta/components/Table/DataTable/internal/usePageDataCache.d.ts +29 -0
  221. package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +2 -4
  222. package/dist/beta/components/Table/DataTable/types.d.ts +48 -1
  223. package/dist/beta/components/Table/createColumnHelper.d.ts +23 -68
  224. package/dist/beta/components/Table/types.d.ts +218 -42
  225. package/dist/beta/components/Toolbar/Toolbar.d.ts +175 -44
  226. package/dist/beta/components/Toolbar/ToolbarSelect.d.ts +5 -3
  227. package/dist/beta.js +9 -9
  228. package/dist/components/AiMark/AiMark.d.ts +87 -0
  229. package/dist/components/AiMark/index.d.ts +1 -0
  230. package/dist/components/AiMark/internal/AiMarkIconAnimated.d.ts +30 -0
  231. package/dist/components/AiMark/internal/AiMarkInteractive.d.ts +10 -0
  232. package/dist/components/AiMark/stories/aiMarkStoryArgTypes.d.ts +16 -0
  233. package/dist/components/Alert/Alert.d.ts +12 -0
  234. package/dist/components/Avatar/Avatar.d.ts +14 -0
  235. package/dist/components/Button/Button.d.ts +14 -6
  236. package/dist/components/Button/internal/buttonAiMarkUtils.d.ts +18 -0
  237. package/dist/components/Button/internal/index.d.ts +1 -0
  238. package/dist/components/Calendar/Calendar.d.ts +84 -26
  239. package/dist/components/Card/Card.d.ts +6 -1
  240. package/dist/components/Checkbox/Checkbox.d.ts +2 -0
  241. package/dist/components/Checkbox/CheckboxGroup.d.ts +27 -6
  242. package/dist/components/Chip/Chip.d.ts +10 -1
  243. package/dist/components/Chip/internal/Chip.d.ts +4 -0
  244. package/dist/components/Combobox/Combobox.d.ts +172 -1
  245. package/dist/components/DateFieldRange/internal/MaskedDateRangeInput.d.ts +1 -1
  246. package/dist/components/DateFieldRange/internal/useDateFieldRangeConversion.d.ts +1 -1
  247. package/dist/components/DateFieldSingle/internal/MaskedDateInput.d.ts +1 -1
  248. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -1
  249. package/dist/components/DateFieldYearless/internal/YearlessDateInput.d.ts +1 -1
  250. package/dist/components/DateFieldYearless/internal/YearlessDateInputWithPicker.d.ts +1 -1
  251. package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +7 -0
  252. package/dist/components/Dialog/Dialog.d.ts +96 -28
  253. package/dist/components/DrillDown/DrillDown.d.ts +7 -1
  254. package/dist/components/FieldLabel/FieldLabel.d.ts +2 -1
  255. package/dist/components/FieldLabel/internal/FieldLabelButton.d.ts +3 -2
  256. package/dist/components/Layout/Layout.d.ts +52 -44
  257. package/dist/components/ListView/ListView.d.ts +5 -5
  258. package/dist/components/Listbox/Listbox.d.ts +5 -23
  259. package/dist/components/Menu/Menu.d.ts +1 -4
  260. package/dist/components/NumberField/NumberField.d.ts +29 -2
  261. package/dist/components/Radio/Radio.d.ts +2 -0
  262. package/dist/components/Radio/RadioGroup.d.ts +27 -6
  263. package/dist/components/SelectCard/SelectCard.d.ts +1 -1
  264. package/dist/components/SelectCard/SelectCardGroup.d.ts +18 -1
  265. package/dist/components/SelectCard/internal/SelectCardContext.d.ts +11 -0
  266. package/dist/components/SelectCard/internal/SelectCardProvider.d.ts +11 -1
  267. package/dist/components/Skeleton/SkeletonCircle.d.ts +8 -0
  268. package/dist/components/Skeleton/SkeletonPill.d.ts +8 -0
  269. package/dist/components/Skeleton/SkeletonRectangle.d.ts +8 -0
  270. package/dist/components/Skeleton/SkeletonText.d.ts +6 -1
  271. package/dist/components/Skeleton/index.d.ts +3 -0
  272. package/dist/components/Switch/Switch.d.ts +11 -1
  273. package/dist/components/Text/types.d.ts +9 -0
  274. package/dist/components/TextField/internal/TextField.d.ts +11 -0
  275. package/dist/components/Textarea/Textarea.d.ts +9 -2
  276. package/dist/components/Toast/internal/Toast.d.ts +5 -0
  277. package/dist/components/Toast/toast.d.ts +1 -1
  278. package/dist/components/Toolbar/Toolbar.d.ts +8 -4
  279. package/dist/components/Toolbar/ToolbarSelect.d.ts +5 -3
  280. package/dist/components/index.d.ts +1 -0
  281. package/dist/{floating-ui.react-dom-imrk9N49.js → floating-ui.react-dom-CHrYz13o.js} +17 -2
  282. package/dist/floating-ui.react-dom-CHrYz13o.js.map +1 -0
  283. package/dist/hooks/index.d.ts +1 -0
  284. package/dist/hooks/usePrefersReducedMotion/index.d.ts +1 -0
  285. package/dist/hooks/usePrefersReducedMotion/usePrefersReducedMotion.d.ts +15 -0
  286. package/dist/index.js +135 -133
  287. package/dist/index.js.map +1 -1
  288. package/dist/internal/components/InlineMarkdown/InlineMarkdown.d.ts +23 -0
  289. package/dist/internal/components/InlineMarkdown/index.d.ts +1 -0
  290. package/dist/internal/components/Label/Label.d.ts +1 -1
  291. package/dist/internal/components/Popover/Popover.d.ts +3 -1
  292. package/dist/internal/components/index.d.ts +2 -1
  293. package/dist/internal/functions/index.d.ts +2 -0
  294. package/dist/internal/functions/inlineMarkdown.d.ts +20 -0
  295. package/dist/internal/functions/stripInlineMarkdown.d.ts +8 -0
  296. package/dist/internal/types/props.d.ts +2 -1
  297. package/dist/internal/types/selectFieldInternalTypes.d.ts +2 -2
  298. package/dist/internal/utils/index.d.ts +1 -0
  299. package/dist/internal/utils/inlineMarkdownRegex.d.ts +5 -0
  300. package/dist/{proxy-BbFHSE6L.js → proxy-DEehATlA.js} +8 -2
  301. package/dist/{proxy-BbFHSE6L.js.map → proxy-DEehATlA.js.map} +1 -1
  302. package/dist/stripInlineMarkdown-DyqLAQnf.js +25 -0
  303. package/dist/stripInlineMarkdown-DyqLAQnf.js.map +1 -0
  304. package/dist/{syncFilterUtils-vt8ldsES.js → syncFilterUtils-CsbCnI1-.js} +194 -194
  305. package/dist/{syncFilterUtils-vt8ldsES.js.map → syncFilterUtils-CsbCnI1-.js.map} +1 -1
  306. package/dist/types/ai-marks.d.ts +72 -0
  307. package/dist/types/index.d.ts +1 -0
  308. package/dist/{use-reduced-motion-DSpxmqyT.js → use-reduced-motion-CqjZZ5QB.js} +2 -2
  309. package/dist/{use-reduced-motion-DSpxmqyT.js.map → use-reduced-motion-CqjZZ5QB.js.map} +1 -1
  310. package/dist/{useDrilldown-wwXRpNgb.js → useDrilldown-C7eMBl68.js} +43 -41
  311. package/dist/{useDrilldown-wwXRpNgb.js.map → useDrilldown-C7eMBl68.js.map} +1 -1
  312. package/dist/{useInitialFocus-CdoVwSbr.js → useInitialFocus-DbaB-x5T.js} +2 -3
  313. package/dist/{useInitialFocus-CdoVwSbr.js.map → useInitialFocus-DbaB-x5T.js.map} +1 -1
  314. package/dist/{useMenuInteraction-zR_78KQC.js → useMenuInteraction-BwZ2ORo9.js} +8 -3
  315. package/dist/useMenuInteraction-BwZ2ORo9.js.map +1 -0
  316. package/dist/{index.esm-BZV0wNKZ.js → usePopoverTransitionStates-B1opfxxn.js} +88 -2
  317. package/dist/usePopoverTransitionStates-B1opfxxn.js.map +1 -0
  318. package/dist/usePrefersReducedMotion-DR9B_D6w.js +37 -0
  319. package/dist/usePrefersReducedMotion-DR9B_D6w.js.map +1 -0
  320. package/dist/usePrefersReducedMotion.d.ts +2 -0
  321. package/dist/usePrefersReducedMotion.js +2 -0
  322. package/dist/usePrefersReducedMotion.js.map +1 -0
  323. package/dist/{useToggleSelection-BdXW3Zg3.js → useToggleSelection-BM8asdFj.js} +2 -2
  324. package/dist/{useToggleSelection-BdXW3Zg3.js.map → useToggleSelection-BM8asdFj.js.map} +1 -1
  325. package/package.json +4 -2
  326. package/dist/Alert-C_o2f78C.js.map +0 -1
  327. package/dist/Avatar--CnTAnfD.js +0 -35
  328. package/dist/Avatar--CnTAnfD.js.map +0 -1
  329. package/dist/Breadcrumbs-3Y7jnj-F.js +0 -105
  330. package/dist/Breadcrumbs-3Y7jnj-F.js.map +0 -1
  331. package/dist/Button-CVsGhVJz.js +0 -113
  332. package/dist/Button-CVsGhVJz.js.map +0 -1
  333. package/dist/Calendar-SGlTt-bs.js.map +0 -1
  334. package/dist/Checkbox-CjEKa5Iv.js +0 -50
  335. package/dist/Checkbox-CjEKa5Iv.js.map +0 -1
  336. package/dist/Checkbox-CtKUNeyu.js.map +0 -1
  337. package/dist/Chip-DjTAR0va.js.map +0 -1
  338. package/dist/DataTable-BYOS6icI.js.map +0 -1
  339. package/dist/DateFieldRange-C8Uzrboc.js.map +0 -1
  340. package/dist/DateFieldYearless-DbivK4Hm.js.map +0 -1
  341. package/dist/DateFieldYearlessRange-BEqJe4Uf.js.map +0 -1
  342. package/dist/Details-Dxq_v3Qg.js.map +0 -1
  343. package/dist/Dialog-CGhwkwvq.js.map +0 -1
  344. package/dist/Drawer-DA4iAgt-.js.map +0 -1
  345. package/dist/FieldLabel-DbMosKtd.js +0 -125
  346. package/dist/FieldLabel-DbMosKtd.js.map +0 -1
  347. package/dist/Grid-ONcUpb__.js +0 -147
  348. package/dist/Grid-ONcUpb__.js.map +0 -1
  349. package/dist/Layout-VfhlilMG.js.map +0 -1
  350. package/dist/List-CJZjElAQ.js +0 -101
  351. package/dist/List-CJZjElAQ.js.map +0 -1
  352. package/dist/ListView-mujFK6mQ.js.map +0 -1
  353. package/dist/Listbox-BtAgBDRS.js.map +0 -1
  354. package/dist/Menu-BXsmCP20.js.map +0 -1
  355. package/dist/MultiSelectFieldSync-DGpGgu8q.js.map +0 -1
  356. package/dist/MultiSelectMenuSync-DiLddJDw.js.map +0 -1
  357. package/dist/NumberField-svhZp1kB.js.map +0 -1
  358. package/dist/Page-Be029Dij.js.map +0 -1
  359. package/dist/Pagination-BAwqfl_2.js.map +0 -1
  360. package/dist/Popover-D0qSKZ1J.js.map +0 -1
  361. package/dist/Popover-DxZF6lbJ.js +0 -535
  362. package/dist/Popover-DxZF6lbJ.js.map +0 -1
  363. package/dist/Popover2.css +0 -68
  364. package/dist/Radio-BOq9UkpC.js +0 -60
  365. package/dist/Radio-BOq9UkpC.js.map +0 -1
  366. package/dist/Radio-BQg7exDG.js.map +0 -1
  367. package/dist/SelectCard-cu4MBuh8.js +0 -320
  368. package/dist/SelectCard-cu4MBuh8.js.map +0 -1
  369. package/dist/SelectFieldLabel-Dr8HeW3N.js.map +0 -1
  370. package/dist/SelectFieldSync-CJ2Ie_v1.js.map +0 -1
  371. package/dist/SelectMenuSync-CJA_coqD.js.map +0 -1
  372. package/dist/SelectTrigger-ObsnAKNp.js.map +0 -1
  373. package/dist/Switch-DpPHr3G3.js.map +0 -1
  374. package/dist/Tab-DO7LaUbw.js.map +0 -1
  375. package/dist/Text-BJo4oMI2.js.map +0 -1
  376. package/dist/TextField-DeHpgPag.js.map +0 -1
  377. package/dist/Textarea-DyqdMTvQ.js.map +0 -1
  378. package/dist/Toaster-b0-Ub3yt.js.map +0 -1
  379. package/dist/Tooltip-Bupqao9B.js.map +0 -1
  380. package/dist/floating-ui.react-C_s3_nEb.js.map +0 -1
  381. package/dist/floating-ui.react-dom-imrk9N49.js.map +0 -1
  382. package/dist/index.esm-BZV0wNKZ.js.map +0 -1
  383. package/dist/safePopover-BDso-xSH.js +0 -17
  384. package/dist/safePopover-BDso-xSH.js.map +0 -1
  385. package/dist/useMenuInteraction-zR_78KQC.js.map +0 -1
  386. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js +0 -68
  387. package/dist/useOpenCloseTransitionStates-CiTYrLGi.js.map +0 -1
  388. package/dist/usePopoverTransitionStates-CDIoNUuf.js +0 -24
  389. package/dist/usePopoverTransitionStates-CDIoNUuf.js.map +0 -1
@@ -1,30 +1,27 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { C as Chip } from './Chip-DjTAR0va.js';
2
+ import { C as Chip } from './Chip-BnofwIUN.js';
3
3
  import { F as Flex } from './Flex-WyyZm1bf.js';
4
4
  import * as React from 'react';
5
5
  import { useRef, useState, useLayoutEffect, createContext, useContext, useCallback, forwardRef, useMemo, useImperativeHandle, useEffect, useId, Fragment as Fragment$1, useReducer } from 'react';
6
6
  import { c as cx } from './index-De1g9FRV.js';
7
7
  import { D as DateTime } from './luxon-wpz4A-OQ.js';
8
- import { w as warnOnce } from './warnOnce-Y9PRHcU4.js';
9
- import { C as Checkbox } from './Checkbox-CjEKa5Iv.js';
10
- import { B as Button } from './Button-CVsGhVJz.js';
8
+ import { C as Checkbox } from './Checkbox-DbaZrUE2.js';
9
+ import { B as Button } from './Button-a_D7tUgM.js';
11
10
  import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
12
11
  import { S as SvgEdit } from './edit-DQOiktcu.js';
13
12
  import { I as Icon } from './Icon-DuIlne4x.js';
14
13
  import { S as SrOnly } from './SrOnly-eUpYGpAT.js';
15
14
  import { u as useNumberField } from './useNumberField-eMyk7MB8.js';
16
15
  import { u as useMergeRefs, m as mergeRefs } from './useMergeRefs-Dfmtq9cI.js';
17
- import { M as Menu } from './Menu-BXsmCP20.js';
18
- import { P as Popover } from './Popover-D0qSKZ1J.js';
19
- import { S as SearchField } from './SearchField-im7AHGYo.js';
20
- import { L as ListView } from './ListView-mujFK6mQ.js';
16
+ import { a as SelectMenuSync, S as SelectMenu } from './SelectMenuSync-CuZp9mnt.js';
17
+ import { a as MultiSelectMenuSync, M as MultiSelectMenu } from './MultiSelectMenuSync-B_mXpTEe.js';
21
18
  import { S as SvgError } from './error-DR_wWdYY.js';
22
19
  import { S as SvgWarning } from './warning-c4Wj1rI4.js';
23
- import { T as Tooltip } from './Tooltip-Bupqao9B.js';
20
+ import { T as Tooltip } from './Tooltip-C1PBRnJv.js';
24
21
  import { flushSync } from 'react-dom';
25
22
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DMDdfIah.js';
26
23
  import './anvil-fonts.css';import './DataTable.css';/* empty css */
27
- import { P as Pagination } from './Pagination-BAwqfl_2.js';
24
+ import { P as Pagination } from './Pagination-CjGmJ_rU.js';
28
25
  import { T as ThemeProviderContext } from './ThemeProviderContext-l52GohYT.js';
29
26
  import { S as Spinner } from './Spinner-BqmcE2pb.js';
30
27
  import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
@@ -406,53 +403,15 @@ function getColumnTypeDefaults(type) {
406
403
  return COLUMN_TYPE_DEFAULTS[type];
407
404
  }
408
405
 
409
- function logDeprecationWarnings(id, column) {
410
- const columnId = typeof id === "object" && "group" in id ? id.group : String(id);
411
- if ("editMode" in column && column.editMode && !("editConfig" in column && column.editConfig)) {
412
- warnOnce(
413
- `[Anvil2 DataTable] Column "${columnId}" uses deprecated \`editMode\` prop. Migrate to \`editConfig: { mode: "${column.editMode}", onChange: ... }\``
414
- );
415
- }
416
- if ("onChange" in column && column.onChange && !("editConfig" in column && column.editConfig)) {
417
- warnOnce(
418
- `[Anvil2 DataTable] Column "${columnId}" uses deprecated top-level \`onChange\`. Move \`onChange\` inside \`editConfig\`.`
419
- );
420
- }
421
- if ("options" in column && column.options && !("editConfig" in column && column.editConfig)) {
422
- warnOnce(
423
- `[Anvil2 DataTable] Column "${columnId}" uses deprecated top-level \`options\`. Move \`options\` inside \`editConfig\`.`
424
- );
425
- }
426
- }
427
- function transformEditConfig(column) {
428
- if (!("editConfig" in column) || !column.editConfig) {
429
- return {};
430
- }
431
- const { editConfig } = column;
432
- const result = {
433
- editMode: editConfig.mode,
434
- onChange: editConfig.onChange
435
- };
436
- if (editConfig.mode === "select" || editConfig.mode === "multiselect") {
437
- if ("options" in editConfig) {
438
- result.options = editConfig.options;
439
- }
440
- }
441
- result.editConfig = editConfig;
442
- return result;
443
- }
444
406
  function createColumnHelper$1() {
445
407
  return function createColumn(id, column) {
446
- logDeprecationWarnings(id, column);
447
- const editProps = transformEditConfig(column);
448
408
  if (typeof id === "object" && "group" in id) {
449
409
  return {
450
410
  id: id.group,
451
- ...column,
452
- ...editProps
411
+ ...column
453
412
  };
454
413
  }
455
- return { id, ...column, ...editProps };
414
+ return { id, ...column };
456
415
  };
457
416
  }
458
417
 
@@ -3597,6 +3556,49 @@ function groupBy(rows, columnId) {
3597
3556
  }, groupMap);
3598
3557
  }
3599
3558
 
3559
+ function getPaginationRowModel(opts) {
3560
+ return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {
3561
+ if (!rowModel.rows.length) {
3562
+ return rowModel;
3563
+ }
3564
+ const {
3565
+ pageSize,
3566
+ pageIndex
3567
+ } = pagination;
3568
+ let {
3569
+ rows,
3570
+ flatRows,
3571
+ rowsById
3572
+ } = rowModel;
3573
+ const pageStart = pageSize * pageIndex;
3574
+ const pageEnd = pageStart + pageSize;
3575
+ rows = rows.slice(pageStart, pageEnd);
3576
+ let paginatedRowModel;
3577
+ if (!table.options.paginateExpandedRows) {
3578
+ paginatedRowModel = expandRows({
3579
+ rows,
3580
+ flatRows,
3581
+ rowsById
3582
+ });
3583
+ } else {
3584
+ paginatedRowModel = {
3585
+ rows,
3586
+ flatRows,
3587
+ rowsById
3588
+ };
3589
+ }
3590
+ paginatedRowModel.flatRows = [];
3591
+ const handleRow = row => {
3592
+ paginatedRowModel.flatRows.push(row);
3593
+ if (row.subRows.length) {
3594
+ row.subRows.forEach(handleRow);
3595
+ }
3596
+ };
3597
+ paginatedRowModel.rows.forEach(handleRow);
3598
+ return paginatedRowModel;
3599
+ }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));
3600
+ }
3601
+
3600
3602
  function getSortedRowModel() {
3601
3603
  return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {
3602
3604
  if (!rowModel.rows.length || !(sorting != null && sorting.length)) {
@@ -3919,22 +3921,21 @@ const getCommonPinningClasses = (column) => {
3919
3921
  };
3920
3922
 
3921
3923
  const styles$a = {
3922
- "data-table-body-cell-input": "_data-table-body-cell-input_hmeb7_2",
3923
- "data-table-body-cell-editable": "_data-table-body-cell-editable_hmeb7_36",
3924
- "data-table-body-cell-edit-icon": "_data-table-body-cell-edit-icon_hmeb7_36"
3924
+ "data-table-body-cell-input": "_data-table-body-cell-input_wnkkd_2",
3925
+ "data-table-body-cell-editable": "_data-table-body-cell-editable_wnkkd_36",
3926
+ "data-table-body-cell-edit-icon-container": "_data-table-body-cell-edit-icon-container_wnkkd_36"
3925
3927
  };
3926
3928
 
3927
3929
  const DataTableEditableCellEditIcon = () => {
3928
- return /* @__PURE__ */ jsx(
3930
+ return /* @__PURE__ */ jsx("span", { className: styles$a["data-table-body-cell-edit-icon-container"], children: /* @__PURE__ */ jsx(
3929
3931
  Icon,
3930
3932
  {
3931
3933
  svg: SvgEdit,
3932
3934
  size: "small",
3933
3935
  color: "subtle",
3934
- className: styles$a["data-table-body-cell-edit-icon"],
3935
3936
  "aria-label": "Edit cell value"
3936
3937
  }
3937
- );
3938
+ ) });
3938
3939
  };
3939
3940
 
3940
3941
  const TableBodyCell = forwardRef(({ type, children, className, isExpandCell, isSelectCell, ...rest }, ref) => {
@@ -3958,19 +3959,19 @@ const TableBodyCell = forwardRef(({ type, children, className, isExpandCell, isS
3958
3959
  TableBodyCell.displayName = "TableBodyCell";
3959
3960
 
3960
3961
  const styles$9 = {
3961
- "data-table-body-cell": "_data-table-body-cell_kmr30_2",
3962
- "data-table-body-cell-input": "_data-table-body-cell-input_kmr30_3",
3963
- "table-body-cell": "_table-body-cell_kmr30_18",
3964
- "table-header-cell": "_table-header-cell_kmr30_19",
3965
- "table-footer-cell": "_table-footer-cell_kmr30_20",
3966
- "data-table-body-cell-editing": "_data-table-body-cell-editing_kmr30_32",
3967
- "data-table-header-cell": "_data-table-header-cell_kmr30_33",
3968
- "data-table-footer-cell": "_data-table-footer-cell_kmr30_36",
3969
- "data-table-body-cell-hovered": "_data-table-body-cell-hovered_kmr30_81",
3970
- "data-table-body-cell-error": "_data-table-body-cell-error_kmr30_84",
3971
- "data-table-body-cell-warning": "_data-table-body-cell-warning_kmr30_99",
3972
- "cell-error-icon": "_cell-error-icon_kmr30_106",
3973
- "cell-warning-icon": "_cell-warning-icon_kmr30_107"
3962
+ "data-table-body-cell": "_data-table-body-cell_l8lyo_2",
3963
+ "data-table-body-cell-input": "_data-table-body-cell-input_l8lyo_3",
3964
+ "table-body-cell": "_table-body-cell_l8lyo_18",
3965
+ "table-header-cell": "_table-header-cell_l8lyo_19",
3966
+ "table-footer-cell": "_table-footer-cell_l8lyo_20",
3967
+ "data-table-body-cell-editing": "_data-table-body-cell-editing_l8lyo_32",
3968
+ "data-table-header-cell": "_data-table-header-cell_l8lyo_33",
3969
+ "data-table-footer-cell": "_data-table-footer-cell_l8lyo_36",
3970
+ "data-table-body-cell-hovered": "_data-table-body-cell-hovered_l8lyo_82",
3971
+ "data-table-body-cell-error": "_data-table-body-cell-error_l8lyo_85",
3972
+ "data-table-body-cell-warning": "_data-table-body-cell-warning_l8lyo_102",
3973
+ "cell-error-icon": "_cell-error-icon_l8lyo_111",
3974
+ "cell-warning-icon": "_cell-warning-icon_l8lyo_112"
3974
3975
  };
3975
3976
 
3976
3977
  function formatCellPositionString(cellPosition) {
@@ -3993,7 +3994,9 @@ function getCellValue(cell, _columnId) {
3993
3994
  return value;
3994
3995
  }
3995
3996
  function getCellOnChange(cell, _columnId) {
3996
- return cell.column.columnDef.meta?.onChange;
3997
+ const meta = cell.column.columnDef.meta;
3998
+ const onChange = meta?.editConfig?.onChange;
3999
+ return onChange;
3997
4000
  }
3998
4001
  function logWarningForInvalidCellValueType({
3999
4002
  columnId,
@@ -4538,113 +4541,60 @@ const DataTableEditableNumberCell = Object.assign(
4538
4541
  { displayName: "DataTableEditableNumberCell" }
4539
4542
  );
4540
4543
 
4541
- function DataTableEditableSelectCellInner(props, ref) {
4542
- const { cell, cellProps, cellPosition, children } = props;
4543
- const { onKeyDown: onCellKeyDown } = cellProps;
4544
- const [isEditing, setIsEditing] = useState(false);
4545
- const columnId = getColumnId(cell);
4546
- const cellValue = getCellValue(cell);
4547
- const [initialValue, isValidValueType] = useMemo(() => {
4548
- let value;
4549
- let isValid = true;
4550
- if (cellValue === void 0 || cellValue === null) {
4551
- value = "";
4552
- isValid = true;
4553
- return [value, isValid];
4554
- }
4555
- switch (typeof cellValue) {
4556
- case "string":
4557
- case "number":
4558
- value = String(cellValue);
4559
- break;
4560
- case "boolean":
4561
- value = String(cellValue);
4562
- break;
4563
- default:
4564
- value = "";
4565
- isValid = false;
4566
- break;
4567
- }
4568
- if (!isValid) {
4569
- logWarningForInvalidCellValueType({
4570
- columnId: String(columnId),
4571
- editMode: "select",
4572
- expectedType: "string | number | boolean",
4573
- receivedType: Array.isArray(cellValue) ? "array" : typeof cellValue
4574
- });
4575
- }
4576
- return [value, isValid];
4577
- }, [cellValue, columnId]);
4578
- const options = cell.column.columnDef.meta?.options ?? [];
4544
+ function useEditableMenuCell({
4545
+ cellPosition,
4546
+ onCellKeyDown,
4547
+ ref
4548
+ }) {
4579
4549
  const [tabIndex, setTabIndex] = useState(-1);
4580
4550
  const { moveFocusToCell } = useDTFocusDispatchContext();
4581
4551
  const cellRef = useRef(null);
4582
- const rowId = cell.row.id;
4583
- const menuElement = useRef(null);
4552
+ const triggerClickRef = useRef(null);
4584
4553
  useImperativeHandle(ref, () => ({
4585
- invoke: beginEditing,
4554
+ invoke: () => {
4555
+ triggerClickRef.current?.();
4556
+ },
4586
4557
  focus: () => {
4587
4558
  cellRef.current?.focus();
4588
4559
  setTabIndex(0);
4589
4560
  }
4590
4561
  }));
4591
- const beginEditing = useCallback(() => {
4592
- setIsEditing(true);
4593
- }, [setIsEditing]);
4594
- const stopEditing = useCallback(() => {
4595
- setIsEditing(false);
4596
- }, [setIsEditing]);
4597
- const onChange = getCellOnChange(cell);
4598
- const commitValue = useCallback(
4599
- (value) => {
4600
- if (value !== initialValue) {
4601
- onChange?.(value, rowId);
4602
- }
4603
- stopEditing();
4604
- },
4605
- [rowId, onChange, initialValue, stopEditing]
4606
- );
4607
- const cellClasses = cx(
4608
- styles$a["data-table-body-cell-editable"],
4609
- cellProps.className,
4610
- { [styles$9["data-table-body-cell-editing"]]: isEditing }
4611
- );
4612
4562
  const handleCellKeyDown = useCallback(
4613
- (event, handleMenuKeydown) => {
4614
- if (isEditing) {
4615
- if (event.key === "Escape" || event.key === "F2") {
4616
- stopEditing();
4617
- return;
4618
- }
4619
- handleMenuKeydown?.(event);
4563
+ (event, menuKeyDown, isOpen) => {
4564
+ if (isOpen) {
4565
+ menuKeyDown?.(event);
4620
4566
  return;
4621
4567
  }
4622
4568
  onCellKeyDown?.(event);
4623
4569
  },
4624
- [onCellKeyDown, isEditing, stopEditing]
4570
+ [onCellKeyDown]
4625
4571
  );
4626
- const handleOutsidePress = useCallback(() => {
4627
- stopEditing();
4628
- setTabIndex(-1);
4629
- }, [stopEditing]);
4630
- const handleCellMouseDown = useCallback(() => {
4631
- if (isEditing) {
4632
- stopEditing();
4633
- return;
4572
+ const handleMenuKeyDown = useCallback((e) => {
4573
+ if (e.key === "F2") {
4574
+ e.preventDefault();
4575
+ triggerClickRef.current?.();
4634
4576
  }
4635
- moveFocusToCell(cellPosition);
4636
- beginEditing();
4637
- }, [beginEditing, cellPosition, moveFocusToCell, isEditing, stopEditing]);
4638
- const handleCellBlur = useCallback(
4639
- (e) => {
4640
- if (menuElement.current?.contains(e.relatedTarget)) {
4641
- return;
4642
- }
4643
- setTabIndex(-1);
4644
- stopEditing();
4577
+ }, []);
4578
+ const handleImplicitClose = useCallback(() => {
4579
+ setTabIndex(-1);
4580
+ }, []);
4581
+ const handleCellMouseDown = useCallback(
4582
+ (triggerOnClick) => () => {
4583
+ moveFocusToCell(cellPosition);
4584
+ triggerOnClick();
4645
4585
  },
4646
- [setTabIndex, menuElement, stopEditing]
4586
+ [cellPosition, moveFocusToCell]
4647
4587
  );
4588
+ const handleCellBlur = useCallback((e) => {
4589
+ const popoverId = e.currentTarget.getAttribute(
4590
+ "aria-controls"
4591
+ );
4592
+ const popoverEl = popoverId ? document.getElementById(popoverId) : null;
4593
+ if (popoverEl?.contains(e.relatedTarget)) {
4594
+ return;
4595
+ }
4596
+ setTabIndex(-1);
4597
+ }, []);
4648
4598
  const handleCellFocus = useCallback(
4649
4599
  (event) => {
4650
4600
  if (event.target !== cellRef.current) {
@@ -4653,47 +4603,86 @@ function DataTableEditableSelectCellInner(props, ref) {
4653
4603
  event.preventDefault();
4654
4604
  setTabIndex(0);
4655
4605
  },
4656
- [setTabIndex]
4657
- );
4658
- const handleMenuItemClick = useCallback(
4659
- (value) => {
4660
- commitValue(value);
4661
- },
4662
- [commitValue]
4663
- );
4664
- const handleMenuItemKeyDown = useCallback(
4665
- (event) => {
4666
- if (event.key === "Escape" || event.key === "F2") {
4667
- cellRef.current?.focus();
4668
- stopEditing();
4669
- }
4670
- },
4671
- [stopEditing]
4606
+ []
4672
4607
  );
4673
4608
  const cellFocusContextValue = useMemo(
4674
- () => ({ isCellFocused: tabIndex === 0 && !isEditing }),
4675
- [tabIndex, isEditing]
4609
+ () => ({ isCellFocused: tabIndex === 0 }),
4610
+ [tabIndex]
4676
4611
  );
4677
- if (!isValidValueType) {
4612
+ return {
4613
+ tabIndex,
4614
+ cellRef,
4615
+ triggerClickRef,
4616
+ handleCellKeyDown,
4617
+ handleMenuKeyDown,
4618
+ handleImplicitClose,
4619
+ handleCellMouseDown,
4620
+ handleCellBlur,
4621
+ handleCellFocus,
4622
+ cellFocusContextValue
4623
+ };
4624
+ }
4625
+
4626
+ function DataTableEditableSelectCellInner(props, ref) {
4627
+ const { cell, cellProps, cellPosition, children } = props;
4628
+ const { onKeyDown: onCellKeyDown, className, ...restCellProps } = cellProps;
4629
+ getColumnId(cell);
4630
+ const cellValue = getCellValue(cell);
4631
+ const meta = cell.column.columnDef.meta;
4632
+ const editConfig = meta?.editConfig;
4633
+ const selectEditConfig = editConfig?.mode === "select" ? editConfig : void 0;
4634
+ const options = useMemo(
4635
+ () => selectEditConfig?.options ?? [],
4636
+ [selectEditConfig]
4637
+ );
4638
+ const onChange = selectEditConfig?.onChange;
4639
+ const {
4640
+ mode: _mode,
4641
+ options: _options,
4642
+ onChange: _onChange,
4643
+ ...selectMenuPassthroughProps
4644
+ } = selectEditConfig ?? {};
4645
+ const isValidValueType = useMemo(() => {
4646
+ if (Array.isArray(cellValue)) return false;
4647
+ return true;
4648
+ }, [cellValue]);
4649
+ const rowId = cell.row.id;
4650
+ const {
4651
+ tabIndex,
4652
+ cellRef,
4653
+ triggerClickRef,
4654
+ handleCellKeyDown,
4655
+ handleMenuKeyDown,
4656
+ handleImplicitClose,
4657
+ handleCellMouseDown,
4658
+ handleCellBlur,
4659
+ handleCellFocus,
4660
+ cellFocusContextValue
4661
+ } = useEditableMenuCell({ cellPosition, onCellKeyDown, ref });
4662
+ const selectedOption = useMemo(() => {
4663
+ if (cellValue === void 0 || cellValue === null) return null;
4664
+ return options.find((o) => String(o.id) === String(cellValue)) ?? null;
4665
+ }, [options, cellValue]);
4666
+ const hasEditableConfig = !!selectEditConfig;
4667
+ if (!isValidValueType || !hasEditableConfig) {
4678
4668
  const { cellProps: _cellProps, ...immutableCellProps } = props;
4679
4669
  return /* @__PURE__ */ jsx(DataTableBodyImmutableCell, { ...immutableCellProps });
4680
4670
  }
4681
4671
  return /* @__PURE__ */ jsx(
4682
- Menu,
4672
+ SelectMenuSync,
4683
4673
  {
4684
- open: isEditing,
4685
- onOutsidePress: handleOutsidePress,
4686
4674
  trigger: ({
4687
4675
  ref: triggerRef,
4688
- onKeyDown: menuOnTriggerKeydown,
4689
- ["aria-controls"]: triggerAriaControls,
4690
- ["aria-expanded"]: triggerAriaExpanded,
4691
- ["aria-haspopup"]: triggerAriaHaspopup,
4692
- ["data-open"]: triggerDataOpen,
4693
- ["data-state"]: triggerDataState
4676
+ onClick,
4677
+ onKeyDown: menuKeyDown,
4678
+ "aria-controls": ariaControls,
4679
+ "aria-expanded": ariaExpanded,
4680
+ "aria-haspopup": ariaHaspopup,
4681
+ "data-state": dataState
4694
4682
  }) => {
4695
- menuElement.current = document.querySelector(`#${triggerAriaControls}`) || null;
4696
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
4683
+ triggerClickRef.current = onClick;
4684
+ const isOpen = ariaExpanded;
4685
+ return /* @__PURE__ */ jsxs(
4697
4686
  TableBodyCell,
4698
4687
  {
4699
4688
  ref: mergeRefs([
@@ -4702,39 +4691,38 @@ function DataTableEditableSelectCellInner(props, ref) {
4702
4691
  ]),
4703
4692
  tabIndex,
4704
4693
  type: "data-table",
4705
- ...cellProps,
4706
- className: cellClasses,
4707
- onMouseDown: handleCellMouseDown,
4694
+ ...restCellProps,
4695
+ className: cx(styles$a["data-table-body-cell-editable"], className),
4696
+ onMouseDown: handleCellMouseDown(onClick),
4708
4697
  onBlur: handleCellBlur,
4709
4698
  onFocus: handleCellFocus,
4710
4699
  "data-cell-pos": formatCellPositionString(cellPosition),
4711
- "aria-controls": triggerAriaControls,
4712
- "aria-expanded": triggerAriaExpanded,
4713
- "aria-haspopup": triggerAriaHaspopup,
4714
- "data-open": triggerDataOpen,
4715
- "data-state": triggerDataState,
4716
- onKeyDown: (e) => handleCellKeyDown(e, menuOnTriggerKeydown),
4700
+ "aria-controls": ariaControls,
4701
+ "aria-expanded": ariaExpanded,
4702
+ "aria-haspopup": ariaHaspopup,
4703
+ "data-state": dataState,
4704
+ onKeyDown: (e) => handleCellKeyDown(e, menuKeyDown, isOpen),
4717
4705
  children: [
4718
4706
  /* @__PURE__ */ jsxs(CellFocusContext.Provider, { value: cellFocusContextValue, children: [
4719
4707
  children,
4720
- !isEditing && /* @__PURE__ */ jsx(DataTableEditableCellEditIcon, {})
4708
+ !isOpen && /* @__PURE__ */ jsx(DataTableEditableCellEditIcon, {})
4721
4709
  ] }),
4722
- /* @__PURE__ */ jsx(SrOnly, { children: isEditing ? "Press Enter or Space to select a cell value. Press Escape or F2 to cancel." : "Press Enter or F2 to edit cell value." })
4710
+ /* @__PURE__ */ jsx(SrOnly, { children: isOpen ? "Press Enter or Space to select a cell value. Press Escape or F2 to cancel." : "Press Enter or F2 to edit cell value." })
4723
4711
  ]
4724
4712
  }
4725
- ) });
4726
- },
4727
- children: isEditing && options.map((item) => {
4728
- return /* @__PURE__ */ jsx(
4729
- Menu.Item,
4730
- {
4731
- label: item.label,
4732
- onClick: () => handleMenuItemClick(item.value),
4733
- onKeyDown: handleMenuItemKeyDown
4734
- },
4735
- item.value
4736
4713
  );
4737
- })
4714
+ },
4715
+ label: String(
4716
+ cell.column.columnDef.meta?.columnDef?.headerLabel ?? "Select"
4717
+ ),
4718
+ options,
4719
+ value: selectedOption,
4720
+ onSelectedOptionChange: (option) => {
4721
+ onChange?.(option, rowId);
4722
+ },
4723
+ onMenuKeyDown: handleMenuKeyDown,
4724
+ onImplicitClose: handleImplicitClose,
4725
+ ...selectMenuPassthroughProps
4738
4726
  }
4739
4727
  );
4740
4728
  }
@@ -4743,287 +4731,425 @@ const DataTableEditableSelectCell = Object.assign(
4743
4731
  { displayName: "DataTableEditableSelectCell" }
4744
4732
  );
4745
4733
 
4746
- function DataTableEditableMultiselectCellInner(props, ref) {
4734
+ function DataTableEditableSelectAsyncCellInner(props, ref) {
4747
4735
  const { cell, cellProps, cellPosition, children } = props;
4748
- const { onKeyDown: onCellKeyDown } = cellProps;
4749
- const [isEditing, setIsEditing] = useState(false);
4750
- const columnId = getColumnId(cell);
4736
+ const { onKeyDown: onCellKeyDown, className, ...restCellProps } = cellProps;
4737
+ getColumnId(cell);
4751
4738
  const cellValue = getCellValue(cell);
4752
- const [initialValue, isValidValueType] = useMemo(() => {
4753
- let value;
4754
- let isValid = true;
4755
- if (cellValue === null || cellValue === void 0) {
4756
- value = [];
4757
- return [value, isValid];
4758
- } else if (Array.isArray(cellValue)) {
4759
- value = cellValue.map((v) => String(v));
4760
- isValid = true;
4761
- return [value, isValid];
4762
- } else {
4763
- value = [];
4764
- isValid = false;
4765
- logWarningForInvalidCellValueType({
4766
- columnId: String(columnId),
4767
- editMode: "multiselect",
4768
- expectedType: "array of primitive values",
4769
- receivedType: typeof cellValue
4770
- });
4771
- return [value, isValid];
4772
- }
4773
- }, [cellValue, columnId]);
4774
- const options = useMemo(
4775
- () => cell.column.columnDef.meta?.options ?? [],
4776
- [cell.column.columnDef.meta?.options]
4777
- );
4778
- const [tabIndex, setTabIndex] = useState(-1);
4779
- const { moveFocusToCell } = useDTFocusDispatchContext();
4780
- const cellRef = useRef(null);
4739
+ const editConfig = cell.column.columnDef.meta?.editConfig;
4740
+ const asyncEditConfig = editConfig?.mode === "select-async" ? editConfig : void 0;
4741
+ const isValidValueType = useMemo(() => {
4742
+ if (Array.isArray(cellValue)) return false;
4743
+ return true;
4744
+ }, [cellValue]);
4781
4745
  const rowId = cell.row.id;
4782
- const [draftValue, setDraftValue] = useState(initialValue);
4783
- const searchFieldRef = useRef(null);
4784
- const [searchValue, setSearchValue] = useState("");
4785
- const listViewRef = useRef(null);
4786
- const popoverElement = useRef(null);
4787
- const { className, ...restCellProps } = cellProps;
4788
- useImperativeHandle(ref, () => ({
4789
- invoke: beginEditing,
4790
- focus: () => {
4791
- cellRef.current?.focus();
4792
- setTabIndex(0);
4793
- }
4794
- }));
4795
- const beginEditing = useCallback(() => {
4796
- setIsEditing(true);
4797
- }, [setIsEditing]);
4798
- const stopEditing = useCallback(() => {
4799
- setIsEditing(false);
4800
- }, [setIsEditing]);
4801
- const onChange = getCellOnChange(cell);
4802
- const commitValue = useCallback(() => {
4803
- setSearchValue("");
4804
- const arraysEqual = draftValue.length === initialValue.length && draftValue.every((val, idx) => val === initialValue[idx]);
4805
- if (!arraysEqual) {
4806
- onChange?.(draftValue, rowId);
4807
- }
4808
- stopEditing();
4809
- }, [rowId, onChange, initialValue, stopEditing, draftValue]);
4810
- const cellClasses = cx(styles$a["data-table-body-cell-editable"], className, {
4811
- [styles$9["data-table-body-cell-editing"]]: isEditing
4812
- });
4813
- const resetValue = useCallback(() => {
4814
- setDraftValue(initialValue);
4815
- setSearchValue("");
4816
- stopEditing();
4817
- }, [initialValue, stopEditing]);
4818
- const handleCellKeyDown = useCallback(
4819
- (event, handlePopoverKeydown) => {
4820
- if (isEditing) {
4821
- if (event.key === "Escape" || event.key === "F2") {
4822
- stopEditing();
4823
- return;
4824
- }
4825
- handlePopoverKeydown?.(event);
4826
- return;
4746
+ const row = cell.row.original;
4747
+ const context = useMemo(() => ({ row, rowId }), [row, rowId]);
4748
+ const {
4749
+ mode: _mode,
4750
+ lazy,
4751
+ lazyOptions,
4752
+ loadOptions: cellLoader,
4753
+ onChange,
4754
+ cache: cacheProp,
4755
+ ...passthroughProps
4756
+ } = asyncEditConfig ?? {};
4757
+ const loadOptions = useCallback(
4758
+ (searchValue, ...rest) => {
4759
+ if (!cellLoader) return [];
4760
+ if (lazy === "page") {
4761
+ const [pageNumber, pageSize] = rest;
4762
+ return cellLoader(
4763
+ searchValue,
4764
+ pageNumber,
4765
+ pageSize,
4766
+ context
4767
+ );
4827
4768
  }
4828
- onCellKeyDown?.(event);
4769
+ if (lazy === "offset") {
4770
+ const [offset, limit] = rest;
4771
+ return cellLoader(
4772
+ searchValue,
4773
+ offset,
4774
+ limit,
4775
+ context
4776
+ );
4777
+ }
4778
+ if (lazy === "group") {
4779
+ const [previousGroupKey] = rest;
4780
+ return cellLoader(
4781
+ searchValue,
4782
+ previousGroupKey,
4783
+ context
4784
+ );
4785
+ }
4786
+ return cellLoader(
4787
+ searchValue,
4788
+ context
4789
+ );
4829
4790
  },
4830
- [onCellKeyDown, isEditing, stopEditing]
4791
+ [cellLoader, context, lazy]
4831
4792
  );
4832
- const handleCellMouseDown = useCallback(() => {
4833
- if (isEditing) {
4834
- return;
4793
+ const cache = cacheProp ?? { enabled: false };
4794
+ const {
4795
+ tabIndex,
4796
+ cellRef,
4797
+ triggerClickRef,
4798
+ handleCellKeyDown,
4799
+ handleMenuKeyDown,
4800
+ handleImplicitClose,
4801
+ handleCellMouseDown,
4802
+ handleCellBlur,
4803
+ handleCellFocus,
4804
+ cellFocusContextValue
4805
+ } = useEditableMenuCell({ cellPosition, onCellKeyDown, ref });
4806
+ const selectedOption = useMemo(() => {
4807
+ if (cellValue === void 0 || cellValue === null) return null;
4808
+ if (typeof cellValue === "object") return null;
4809
+ return { id: cellValue, label: String(cellValue) };
4810
+ }, [cellValue]);
4811
+ if (!isValidValueType || !asyncEditConfig) {
4812
+ const { cellProps: _cellProps, ...immutableCellProps } = props;
4813
+ return /* @__PURE__ */ jsx(DataTableBodyImmutableCell, { ...immutableCellProps });
4814
+ }
4815
+ return /* @__PURE__ */ jsx(
4816
+ SelectMenu,
4817
+ {
4818
+ lazy,
4819
+ loadOptions,
4820
+ lazyOptions,
4821
+ cache,
4822
+ ...passthroughProps,
4823
+ trigger: ({
4824
+ ref: triggerRef,
4825
+ onClick,
4826
+ onKeyDown: menuKeyDown,
4827
+ "aria-controls": ariaControls,
4828
+ "aria-expanded": ariaExpanded,
4829
+ "aria-haspopup": ariaHaspopup,
4830
+ "data-state": dataState
4831
+ }) => {
4832
+ triggerClickRef.current = onClick;
4833
+ const isOpen = ariaExpanded;
4834
+ return /* @__PURE__ */ jsxs(
4835
+ TableBodyCell,
4836
+ {
4837
+ ref: mergeRefs([
4838
+ triggerRef,
4839
+ cellRef
4840
+ ]),
4841
+ tabIndex,
4842
+ type: "data-table",
4843
+ ...restCellProps,
4844
+ className: cx(styles$a["data-table-body-cell-editable"], className),
4845
+ onMouseDown: handleCellMouseDown(onClick),
4846
+ onBlur: handleCellBlur,
4847
+ onFocus: handleCellFocus,
4848
+ "data-cell-pos": formatCellPositionString(cellPosition),
4849
+ "aria-controls": ariaControls,
4850
+ "aria-expanded": ariaExpanded,
4851
+ "aria-haspopup": ariaHaspopup,
4852
+ "data-state": dataState,
4853
+ onKeyDown: (e) => handleCellKeyDown(e, menuKeyDown, isOpen),
4854
+ children: [
4855
+ /* @__PURE__ */ jsxs(CellFocusContext.Provider, { value: cellFocusContextValue, children: [
4856
+ children,
4857
+ !isOpen && /* @__PURE__ */ jsx(DataTableEditableCellEditIcon, {})
4858
+ ] }),
4859
+ /* @__PURE__ */ jsx(SrOnly, { children: isOpen ? "Press Enter or Space to select a cell value. Press Escape or F2 to cancel." : "Press Enter or F2 to edit cell value." })
4860
+ ]
4861
+ }
4862
+ );
4863
+ },
4864
+ label: String(
4865
+ cell.column.columnDef.meta?.columnDef?.headerLabel ?? "Select"
4866
+ ),
4867
+ value: selectedOption,
4868
+ onSelectedOptionChange: (option) => {
4869
+ onChange?.(option, rowId);
4870
+ },
4871
+ onMenuKeyDown: handleMenuKeyDown,
4872
+ onImplicitClose: handleImplicitClose
4835
4873
  }
4836
- moveFocusToCell(cellPosition);
4837
- beginEditing();
4838
- }, [beginEditing, cellPosition, moveFocusToCell, isEditing]);
4839
- const handleCellBlur = useCallback(
4840
- (e) => {
4841
- if (popoverElement.current?.contains(e.relatedTarget)) {
4842
- return;
4843
- }
4844
- setTabIndex(-1);
4845
- stopEditing();
4846
- },
4847
- [stopEditing]
4848
4874
  );
4849
- const handleCellFocus = useCallback(
4850
- (event) => {
4851
- if (event.target !== cellRef.current) {
4852
- return;
4853
- }
4854
- event.preventDefault();
4855
- setTabIndex(0);
4856
- },
4857
- [setTabIndex]
4875
+ }
4876
+ const DataTableEditableSelectAsyncCell = Object.assign(
4877
+ forwardRef(DataTableEditableSelectAsyncCellInner),
4878
+ { displayName: "DataTableEditableSelectAsyncCell" }
4879
+ );
4880
+
4881
+ function DataTableEditableMultiselectCellInner(props, ref) {
4882
+ const { cell, cellProps, cellPosition, children } = props;
4883
+ const { onKeyDown: onCellKeyDown, className, ...restCellProps } = cellProps;
4884
+ const columnId = getColumnId(cell);
4885
+ const cellValue = getCellValue(cell);
4886
+ const isValidValueType = useMemo(() => {
4887
+ if (cellValue === null || cellValue === void 0) return true;
4888
+ if (Array.isArray(cellValue)) return true;
4889
+ logWarningForInvalidCellValueType({
4890
+ columnId: String(columnId),
4891
+ editMode: "multiselect",
4892
+ expectedType: "array of primitive values",
4893
+ receivedType: typeof cellValue
4894
+ });
4895
+ return false;
4896
+ }, [cellValue, columnId]);
4897
+ const meta = cell.column.columnDef.meta;
4898
+ const editConfig = meta?.editConfig;
4899
+ const multiselectEditConfig = editConfig?.mode === "multiselect" ? editConfig : void 0;
4900
+ const options = useMemo(
4901
+ () => multiselectEditConfig?.options ?? [],
4902
+ [multiselectEditConfig]
4858
4903
  );
4859
- const handleListViewKeyDown = useCallback(
4860
- (e) => {
4861
- if (e.key === "Tab" && !e.shiftKey || e.key === "F2") {
4862
- e.preventDefault();
4863
- e.stopPropagation();
4864
- cellRef.current?.focus();
4865
- commitValue();
4866
- }
4867
- if (e.key === "Escape") {
4868
- cellRef.current?.focus();
4869
- e.preventDefault();
4870
- e.stopPropagation();
4871
- resetValue();
4872
- }
4873
- if (e.key === "ArrowDown" || e.key === "ArrowUp") {
4874
- e.preventDefault();
4875
- }
4876
- },
4877
- [commitValue, resetValue]
4904
+ const onChange = multiselectEditConfig?.onChange;
4905
+ const {
4906
+ mode: _mode,
4907
+ options: _options,
4908
+ onChange: _onChange,
4909
+ ...multiSelectMenuPassthroughProps
4910
+ } = multiselectEditConfig ?? {};
4911
+ const rowId = cell.row.id;
4912
+ const {
4913
+ tabIndex,
4914
+ cellRef,
4915
+ triggerClickRef,
4916
+ handleCellKeyDown,
4917
+ handleMenuKeyDown,
4918
+ handleImplicitClose,
4919
+ handleCellMouseDown,
4920
+ handleCellBlur,
4921
+ handleCellFocus,
4922
+ cellFocusContextValue
4923
+ } = useEditableMenuCell({ cellPosition, onCellKeyDown, ref });
4924
+ const selectedOptions = useMemo(() => {
4925
+ if (!Array.isArray(cellValue)) return [];
4926
+ const valueStrings = cellValue.map((v) => String(v));
4927
+ return options.filter((o) => valueStrings.includes(String(o.id)));
4928
+ }, [options, cellValue]);
4929
+ const hasEditableConfig = !!multiselectEditConfig;
4930
+ if (!isValidValueType || !hasEditableConfig) {
4931
+ const { cellProps: _cellProps, ...immutableCellProps } = props;
4932
+ return /* @__PURE__ */ jsx(DataTableBodyImmutableCell, { ...immutableCellProps });
4933
+ }
4934
+ return /* @__PURE__ */ jsx(
4935
+ MultiSelectMenuSync,
4936
+ {
4937
+ trigger: ({
4938
+ ref: triggerRef,
4939
+ onClick,
4940
+ onKeyDown: menuKeyDown,
4941
+ "aria-controls": ariaControls,
4942
+ "aria-expanded": ariaExpanded,
4943
+ "aria-haspopup": ariaHaspopup,
4944
+ "data-state": dataState
4945
+ }) => {
4946
+ triggerClickRef.current = onClick;
4947
+ const isOpen = ariaExpanded;
4948
+ return /* @__PURE__ */ jsxs(
4949
+ TableBodyCell,
4950
+ {
4951
+ ref: mergeRefs([
4952
+ triggerRef,
4953
+ cellRef
4954
+ ]),
4955
+ tabIndex,
4956
+ type: "data-table",
4957
+ ...restCellProps,
4958
+ className: cx(styles$a["data-table-body-cell-editable"], className),
4959
+ onMouseDown: handleCellMouseDown(onClick),
4960
+ onBlur: handleCellBlur,
4961
+ onFocus: handleCellFocus,
4962
+ "data-cell-pos": formatCellPositionString(cellPosition),
4963
+ "aria-controls": ariaControls,
4964
+ "aria-expanded": ariaExpanded,
4965
+ "aria-haspopup": ariaHaspopup,
4966
+ "data-state": dataState,
4967
+ onKeyDown: (e) => handleCellKeyDown(e, menuKeyDown, isOpen),
4968
+ children: [
4969
+ /* @__PURE__ */ jsxs(CellFocusContext.Provider, { value: cellFocusContextValue, children: [
4970
+ children,
4971
+ !isOpen && /* @__PURE__ */ jsx(DataTableEditableCellEditIcon, {})
4972
+ ] }),
4973
+ /* @__PURE__ */ jsx(SrOnly, { children: isOpen ? "Press Enter or Space to select cell values. Press Escape or F2 to close." : "Press Enter or F2 to edit cell value." })
4974
+ ]
4975
+ }
4976
+ );
4977
+ },
4978
+ label: String(
4979
+ cell.column.columnDef.meta?.columnDef?.headerLabel ?? "Select"
4980
+ ),
4981
+ options,
4982
+ value: selectedOptions,
4983
+ onSelectedOptionsChange: (selected) => {
4984
+ onChange?.(selected, rowId);
4985
+ },
4986
+ onMenuKeyDown: handleMenuKeyDown,
4987
+ onImplicitClose: handleImplicitClose,
4988
+ ...multiSelectMenuPassthroughProps
4989
+ }
4878
4990
  );
4879
- const handleSearchFieldKeyDown = useCallback(
4880
- (e) => {
4881
- if (e.key === "F2") {
4882
- cellRef.current?.focus();
4883
- commitValue();
4884
- }
4885
- if (e.key === "Escape") {
4886
- e.preventDefault();
4887
- e.stopPropagation();
4888
- cellRef.current?.focus();
4889
- resetValue();
4991
+ }
4992
+ const DataTableEditableMultiselectCell = Object.assign(
4993
+ forwardRef(DataTableEditableMultiselectCellInner),
4994
+ { displayName: "DataTableEditableMultiselectCell" }
4995
+ );
4996
+
4997
+ function DataTableEditableMultiselectAsyncCellInner(props, ref) {
4998
+ const { cell, cellProps, cellPosition, children } = props;
4999
+ const { onKeyDown: onCellKeyDown, className, ...restCellProps } = cellProps;
5000
+ getColumnId(cell);
5001
+ const cellValue = getCellValue(cell);
5002
+ const editConfig = cell.column.columnDef.meta?.editConfig;
5003
+ const asyncEditConfig = editConfig?.mode === "multiselect-async" ? editConfig : void 0;
5004
+ const isValidValueType = useMemo(() => {
5005
+ if (cellValue === null || cellValue === void 0) return true;
5006
+ if (Array.isArray(cellValue)) return true;
5007
+ return false;
5008
+ }, [cellValue]);
5009
+ const rowId = cell.row.id;
5010
+ const row = cell.row.original;
5011
+ const context = useMemo(() => ({ row, rowId }), [row, rowId]);
5012
+ const {
5013
+ mode: _mode,
5014
+ lazy,
5015
+ lazyOptions,
5016
+ loadOptions: cellLoader,
5017
+ onChange,
5018
+ cache: cacheProp,
5019
+ ...passthroughProps
5020
+ } = asyncEditConfig ?? {};
5021
+ const loadOptions = useCallback(
5022
+ (searchValue, ...rest) => {
5023
+ if (!cellLoader) return [];
5024
+ if (lazy === "page") {
5025
+ const [pageNumber, pageSize] = rest;
5026
+ return cellLoader(
5027
+ searchValue,
5028
+ pageNumber,
5029
+ pageSize,
5030
+ context
5031
+ );
4890
5032
  }
4891
- if (e.key === "ArrowDown") {
4892
- e.preventDefault();
4893
- e.stopPropagation();
4894
- listViewRef.current?.focus();
5033
+ if (lazy === "offset") {
5034
+ const [offset, limit] = rest;
5035
+ return cellLoader(
5036
+ searchValue,
5037
+ offset,
5038
+ limit,
5039
+ context
5040
+ );
4895
5041
  }
4896
- },
4897
- [commitValue, resetValue]
4898
- );
4899
- const handleListViewSelectionChange = useCallback(
4900
- (items) => {
4901
- if (isEditing) {
4902
- const selectedItems2 = items;
4903
- setDraftValue(selectedItems2.map((item) => String(item.value)));
5042
+ if (lazy === "group") {
5043
+ const [previousGroupKey] = rest;
5044
+ return cellLoader(
5045
+ searchValue,
5046
+ previousGroupKey,
5047
+ context
5048
+ );
4904
5049
  }
5050
+ return cellLoader(
5051
+ searchValue,
5052
+ context
5053
+ );
4905
5054
  },
4906
- [isEditing]
4907
- );
4908
- const filteredItems = useMemo(() => {
4909
- if (searchValue === "") return options;
4910
- return options.filter(
4911
- (item) => item.label.toLowerCase().includes(searchValue.toLowerCase())
4912
- );
4913
- }, [options, searchValue]);
4914
- const selectedItems = useMemo(() => {
4915
- return options.filter(
4916
- (item) => typeof item.value === "string" && draftValue.includes(item.value)
4917
- );
4918
- }, [options, draftValue]);
4919
- const handleOnClickOutside = useCallback(() => {
4920
- cellRef.current?.focus();
4921
- if (isEditing) {
4922
- commitValue();
4923
- }
4924
- }, [commitValue, isEditing]);
4925
- const handleOpenAnimationComplete = useCallback(() => {
4926
- if (isEditing) {
4927
- searchFieldRef.current?.focus();
4928
- }
4929
- }, [isEditing]);
4930
- const handleSearchFieldChange = useCallback(
4931
- (e) => {
4932
- setSearchValue(e.target.value);
4933
- },
4934
- []
4935
- );
4936
- const cellFocusContextValue = useMemo(
4937
- () => ({ isCellFocused: tabIndex === 0 && !isEditing }),
4938
- [tabIndex, isEditing]
5055
+ [cellLoader, context, lazy]
4939
5056
  );
4940
- if (!isValidValueType) {
5057
+ const cache = cacheProp ?? { enabled: false };
5058
+ const {
5059
+ tabIndex,
5060
+ cellRef,
5061
+ triggerClickRef,
5062
+ handleCellKeyDown,
5063
+ handleMenuKeyDown,
5064
+ handleImplicitClose,
5065
+ handleCellMouseDown,
5066
+ handleCellBlur,
5067
+ handleCellFocus,
5068
+ cellFocusContextValue
5069
+ } = useEditableMenuCell({ cellPosition, onCellKeyDown, ref });
5070
+ const selectedOptions = useMemo(() => {
5071
+ if (!Array.isArray(cellValue)) return [];
5072
+ return cellValue;
5073
+ }, [cellValue]);
5074
+ if (!isValidValueType || !asyncEditConfig) {
4941
5075
  const { cellProps: _cellProps, ...immutableCellProps } = props;
4942
5076
  return /* @__PURE__ */ jsx(DataTableBodyImmutableCell, { ...immutableCellProps });
4943
5077
  }
4944
- return /* @__PURE__ */ jsxs(
4945
- Popover,
5078
+ return /* @__PURE__ */ jsx(
5079
+ MultiSelectMenu,
4946
5080
  {
4947
- open: isEditing,
4948
- onOpenAnimationComplete: handleOpenAnimationComplete,
4949
- onClickOutside: handleOnClickOutside,
4950
- placement: "bottom-start",
4951
- disableCaret: true,
4952
- children: [
4953
- /* @__PURE__ */ jsx(Popover.Trigger, { children: ({
4954
- ref: popoverRef,
4955
- onKeyDown: triggerOnKeyDown,
4956
- ["aria-expanded"]: triggerAriaExpanded,
4957
- ["aria-haspopup"]: triggerAriaHaspopup,
4958
- ["aria-details"]: triggerAriaDetails
4959
- }) => {
4960
- popoverElement.current = (triggerAriaDetails ? document.querySelector(`#${triggerAriaDetails}`) : null) || null;
4961
- return /* @__PURE__ */ jsxs(
4962
- TableBodyCell,
4963
- {
4964
- ref: mergeRefs([
4965
- popoverRef,
4966
- cellRef
4967
- ]),
4968
- tabIndex,
4969
- type: "data-table",
4970
- ...restCellProps,
4971
- className: cellClasses,
4972
- onMouseDown: handleCellMouseDown,
4973
- onBlur: handleCellBlur,
4974
- onFocus: handleCellFocus,
4975
- "data-cell-pos": formatCellPositionString(cellPosition),
4976
- "aria-expanded": triggerAriaExpanded,
4977
- "aria-haspopup": triggerAriaHaspopup,
4978
- onKeyDown: (e) => handleCellKeyDown(e, triggerOnKeyDown),
4979
- children: [
4980
- /* @__PURE__ */ jsxs(CellFocusContext.Provider, { value: cellFocusContextValue, children: [
4981
- children,
4982
- !isEditing && /* @__PURE__ */ jsx(DataTableEditableCellEditIcon, {})
4983
- ] }),
4984
- /* @__PURE__ */ jsx(SrOnly, { children: isEditing ? "Press Enter or Space to select cell values. Press F2 to save. Press Escape to cancel." : "Press Enter or F2 to edit cell value." })
4985
- ]
4986
- }
4987
- );
4988
- } }),
4989
- /* @__PURE__ */ jsx(Popover.Content, { children: /* @__PURE__ */ jsxs(Flex, { gap: "4", direction: "column", children: [
4990
- /* @__PURE__ */ jsx(
4991
- SearchField,
4992
- {
4993
- ref: searchFieldRef,
4994
- onChange: handleSearchFieldChange,
4995
- onKeyDown: handleSearchFieldKeyDown,
4996
- value: searchValue
4997
- }
4998
- ),
4999
- /* @__PURE__ */ jsx(
5000
- ListView,
5001
- {
5002
- selected: selectedItems,
5003
- onKeyDown: handleListViewKeyDown,
5004
- items: filteredItems,
5005
- onSelectionChange: handleListViewSelectionChange,
5006
- ref: listViewRef,
5007
- children: ({ items }) => items.map((item) => /* @__PURE__ */ jsx(ListView.Option, { item, children: item.label }, item.label))
5008
- }
5009
- )
5010
- ] }) })
5011
- ]
5081
+ lazy,
5082
+ loadOptions,
5083
+ lazyOptions,
5084
+ cache,
5085
+ ...passthroughProps,
5086
+ trigger: ({
5087
+ ref: triggerRef,
5088
+ onClick,
5089
+ onKeyDown: menuKeyDown,
5090
+ "aria-controls": ariaControls,
5091
+ "aria-expanded": ariaExpanded,
5092
+ "aria-haspopup": ariaHaspopup,
5093
+ "data-state": dataState
5094
+ }) => {
5095
+ triggerClickRef.current = onClick;
5096
+ const isOpen = ariaExpanded;
5097
+ return /* @__PURE__ */ jsxs(
5098
+ TableBodyCell,
5099
+ {
5100
+ ref: mergeRefs([
5101
+ triggerRef,
5102
+ cellRef
5103
+ ]),
5104
+ tabIndex,
5105
+ type: "data-table",
5106
+ ...restCellProps,
5107
+ className: cx(styles$a["data-table-body-cell-editable"], className),
5108
+ onMouseDown: handleCellMouseDown(onClick),
5109
+ onBlur: handleCellBlur,
5110
+ onFocus: handleCellFocus,
5111
+ "data-cell-pos": formatCellPositionString(cellPosition),
5112
+ "aria-controls": ariaControls,
5113
+ "aria-expanded": ariaExpanded,
5114
+ "aria-haspopup": ariaHaspopup,
5115
+ "data-state": dataState,
5116
+ onKeyDown: (e) => handleCellKeyDown(e, menuKeyDown, isOpen),
5117
+ children: [
5118
+ /* @__PURE__ */ jsxs(CellFocusContext.Provider, { value: cellFocusContextValue, children: [
5119
+ children,
5120
+ !isOpen && /* @__PURE__ */ jsx(DataTableEditableCellEditIcon, {})
5121
+ ] }),
5122
+ /* @__PURE__ */ jsx(SrOnly, { children: isOpen ? "Press Enter or Space to select cell values. Press Escape or F2 to close." : "Press Enter or F2 to edit cell value." })
5123
+ ]
5124
+ }
5125
+ );
5126
+ },
5127
+ label: String(
5128
+ cell.column.columnDef.meta?.columnDef?.headerLabel ?? "Select"
5129
+ ),
5130
+ value: selectedOptions,
5131
+ onSelectedOptionsChange: (selected) => {
5132
+ onChange?.(selected, rowId);
5133
+ },
5134
+ onMenuKeyDown: handleMenuKeyDown,
5135
+ onImplicitClose: handleImplicitClose
5012
5136
  }
5013
5137
  );
5014
5138
  }
5015
- const DataTableEditableMultiselectCell = Object.assign(
5016
- forwardRef(DataTableEditableMultiselectCellInner),
5017
- { displayName: "DataTableEditableMultiselectCell" }
5139
+ const DataTableEditableMultiselectAsyncCell = Object.assign(
5140
+ forwardRef(DataTableEditableMultiselectAsyncCellInner),
5141
+ { displayName: "DataTableEditableMultiselectAsyncCell" }
5018
5142
  );
5019
5143
 
5020
5144
  function DataTableEditableBooleanCellInner(props, ref) {
5021
5145
  const { cell, cellProps, cellPosition, children } = props;
5022
- const { onKeyDown: onCellKeyDown } = cellProps;
5023
- const [isEditing, setIsEditing] = useState(false);
5146
+ const { onKeyDown: onCellKeyDown, className, ...restCellProps } = cellProps;
5024
5147
  const columnId = getColumnId(cell);
5025
5148
  const cellValue = getCellValue(cell);
5026
- const [initialValue, isValidValueType] = useMemo(() => {
5149
+ const meta = cell.column.columnDef.meta;
5150
+ const editConfig = meta?.editConfig;
5151
+ const booleanEditConfig = editConfig?.mode === "boolean" ? editConfig : void 0;
5152
+ const [, isValidValueType] = useMemo(() => {
5027
5153
  let value;
5028
5154
  let isValid = true;
5029
5155
  if (cellValue === void 0 || cellValue === null) {
@@ -5048,8 +5174,7 @@ function DataTableEditableBooleanCellInner(props, ref) {
5048
5174
  return [value, isValid];
5049
5175
  }, [cellValue, columnId]);
5050
5176
  const options = useMemo(() => {
5051
- const editConfig = cell.column.columnDef.meta?.editConfig;
5052
- const config = editConfig?.mode === "boolean" ? editConfig : {
5177
+ const config = booleanEditConfig?.mode === "boolean" ? booleanEditConfig : {
5053
5178
  trueLabel: void 0,
5054
5179
  falseLabel: void 0,
5055
5180
  allowNull: false,
@@ -5059,140 +5184,57 @@ function DataTableEditableBooleanCellInner(props, ref) {
5059
5184
  const typeOptions = typeof typeConfig === "object" && typeConfig.type === "boolean" ? typeConfig.options : void 0;
5060
5185
  const items = [
5061
5186
  {
5062
- value: true,
5187
+ id: "true",
5063
5188
  label: config.trueLabel ?? typeOptions?.trueLabel ?? "True"
5064
5189
  },
5065
5190
  {
5066
- value: false,
5191
+ id: "false",
5067
5192
  label: config.falseLabel ?? typeOptions?.falseLabel ?? "False"
5068
5193
  }
5069
5194
  ];
5070
5195
  if (config.allowNull) {
5071
- items.push({ value: null, label: config.nullLabel ?? "Unset" });
5196
+ items.push({ id: "null", label: config.nullLabel ?? "Unset" });
5072
5197
  }
5073
5198
  return items;
5074
- }, [
5075
- cell.column.columnDef.meta?.editConfig,
5076
- cell.column.columnDef.meta?.columnDef?.type
5077
- ]);
5078
- const [tabIndex, setTabIndex] = useState(-1);
5079
- const { moveFocusToCell } = useDTFocusDispatchContext();
5080
- const cellRef = useRef(null);
5199
+ }, [booleanEditConfig, cell.column.columnDef.meta?.columnDef?.type]);
5081
5200
  const rowId = cell.row.id;
5082
- const menuElement = useRef(null);
5083
- useImperativeHandle(ref, () => ({
5084
- invoke: beginEditing,
5085
- focus: () => {
5086
- cellRef.current?.focus();
5087
- setTabIndex(0);
5088
- }
5089
- }));
5090
- const beginEditing = useCallback(() => {
5091
- setIsEditing(true);
5092
- }, [setIsEditing]);
5093
- const stopEditing = useCallback(() => {
5094
- setIsEditing(false);
5095
- }, [setIsEditing]);
5096
- const onChange = getCellOnChange(cell);
5097
- const commitValue = useCallback(
5098
- (value) => {
5099
- if (value !== initialValue) {
5100
- onChange?.(value, rowId);
5101
- }
5102
- stopEditing();
5103
- },
5104
- [rowId, onChange, initialValue, stopEditing]
5105
- );
5106
- const cellClasses = cx(
5107
- styles$a["data-table-body-cell-editable"],
5108
- cellProps.className,
5109
- { [styles$9["data-table-body-cell-editing"]]: isEditing }
5110
- );
5111
- const handleCellKeyDown = useCallback(
5112
- (event, handleMenuKeydown) => {
5113
- if (isEditing) {
5114
- if (event.key === "Escape" || event.key === "F2") {
5115
- stopEditing();
5116
- return;
5117
- }
5118
- handleMenuKeydown?.(event);
5119
- return;
5120
- }
5121
- onCellKeyDown?.(event);
5122
- },
5123
- [onCellKeyDown, isEditing, stopEditing]
5124
- );
5125
- const handleOutsidePress = useCallback(() => {
5126
- stopEditing();
5127
- setTabIndex(-1);
5128
- }, [stopEditing]);
5129
- const handleCellMouseDown = useCallback(() => {
5130
- if (isEditing) {
5131
- stopEditing();
5132
- return;
5133
- }
5134
- moveFocusToCell(cellPosition);
5135
- beginEditing();
5136
- }, [beginEditing, cellPosition, moveFocusToCell, isEditing, stopEditing]);
5137
- const handleCellBlur = useCallback(
5138
- (e) => {
5139
- if (menuElement.current?.contains(e.relatedTarget)) {
5140
- return;
5141
- }
5142
- setTabIndex(-1);
5143
- stopEditing();
5144
- },
5145
- [setTabIndex, menuElement, stopEditing]
5146
- );
5147
- const handleCellFocus = useCallback(
5148
- (event) => {
5149
- if (event.target !== cellRef.current) {
5150
- return;
5151
- }
5152
- event.preventDefault();
5153
- setTabIndex(0);
5154
- },
5155
- [setTabIndex]
5156
- );
5157
- const handleMenuItemClick = useCallback(
5158
- (value) => {
5159
- commitValue(value);
5160
- },
5161
- [commitValue]
5162
- );
5163
- const handleMenuItemKeyDown = useCallback(
5164
- (event) => {
5165
- if (event.key === "Escape" || event.key === "F2") {
5166
- cellRef.current?.focus();
5167
- stopEditing();
5168
- }
5169
- },
5170
- [stopEditing]
5171
- );
5172
- const cellFocusContextValue = useMemo(
5173
- () => ({ isCellFocused: tabIndex === 0 && !isEditing }),
5174
- [tabIndex, isEditing]
5175
- );
5176
- if (!isValidValueType) {
5201
+ const onChange = booleanEditConfig?.onChange;
5202
+ const hasEditableConfig = !!booleanEditConfig;
5203
+ const {
5204
+ tabIndex,
5205
+ cellRef,
5206
+ triggerClickRef,
5207
+ handleCellKeyDown,
5208
+ handleMenuKeyDown,
5209
+ handleImplicitClose,
5210
+ handleCellMouseDown,
5211
+ handleCellBlur,
5212
+ handleCellFocus,
5213
+ cellFocusContextValue
5214
+ } = useEditableMenuCell({ cellPosition, onCellKeyDown, ref });
5215
+ const selectedOption = useMemo(() => {
5216
+ if (cellValue === void 0) return null;
5217
+ return options.find((o) => o.id === String(cellValue)) ?? null;
5218
+ }, [options, cellValue]);
5219
+ if (!isValidValueType || !hasEditableConfig) {
5177
5220
  const { cellProps: _cellProps, ...immutableCellProps } = props;
5178
5221
  return /* @__PURE__ */ jsx(DataTableBodyImmutableCell, { ...immutableCellProps });
5179
5222
  }
5180
5223
  return /* @__PURE__ */ jsx(
5181
- Menu,
5224
+ SelectMenuSync,
5182
5225
  {
5183
- open: isEditing,
5184
- onOutsidePress: handleOutsidePress,
5185
5226
  trigger: ({
5186
5227
  ref: triggerRef,
5187
- onKeyDown: menuOnTriggerKeydown,
5188
- ["aria-controls"]: triggerAriaControls,
5189
- ["aria-expanded"]: triggerAriaExpanded,
5190
- ["aria-haspopup"]: triggerAriaHaspopup,
5191
- ["data-open"]: triggerDataOpen,
5192
- ["data-state"]: triggerDataState
5228
+ onClick,
5229
+ onKeyDown: menuKeyDown,
5230
+ "aria-controls": ariaControls,
5231
+ "aria-expanded": ariaExpanded,
5232
+ "aria-haspopup": ariaHaspopup,
5233
+ "data-state": dataState
5193
5234
  }) => {
5194
- menuElement.current = document.querySelector(`#${triggerAriaControls}`) || null;
5195
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
5235
+ triggerClickRef.current = onClick;
5236
+ const isOpen = ariaExpanded;
5237
+ return /* @__PURE__ */ jsxs(
5196
5238
  TableBodyCell,
5197
5239
  {
5198
5240
  ref: mergeRefs([
@@ -5201,39 +5243,42 @@ function DataTableEditableBooleanCellInner(props, ref) {
5201
5243
  ]),
5202
5244
  tabIndex,
5203
5245
  type: "data-table",
5204
- ...cellProps,
5205
- className: cellClasses,
5206
- onMouseDown: handleCellMouseDown,
5246
+ ...restCellProps,
5247
+ className: cx(styles$a["data-table-body-cell-editable"], className),
5248
+ onMouseDown: handleCellMouseDown(onClick),
5207
5249
  onBlur: handleCellBlur,
5208
5250
  onFocus: handleCellFocus,
5209
5251
  "data-cell-pos": formatCellPositionString(cellPosition),
5210
- "aria-controls": triggerAriaControls,
5211
- "aria-expanded": triggerAriaExpanded,
5212
- "aria-haspopup": triggerAriaHaspopup,
5213
- "data-open": triggerDataOpen,
5214
- "data-state": triggerDataState,
5215
- onKeyDown: (e) => handleCellKeyDown(e, menuOnTriggerKeydown),
5252
+ "aria-controls": ariaControls,
5253
+ "aria-expanded": ariaExpanded,
5254
+ "aria-haspopup": ariaHaspopup,
5255
+ "data-state": dataState,
5256
+ onKeyDown: (e) => handleCellKeyDown(e, menuKeyDown, isOpen),
5216
5257
  children: [
5217
5258
  /* @__PURE__ */ jsxs(CellFocusContext.Provider, { value: cellFocusContextValue, children: [
5218
5259
  children,
5219
- !isEditing && /* @__PURE__ */ jsx(DataTableEditableCellEditIcon, {})
5260
+ !isOpen && /* @__PURE__ */ jsx(DataTableEditableCellEditIcon, {})
5220
5261
  ] }),
5221
- /* @__PURE__ */ jsx(SrOnly, { children: isEditing ? "Press Enter or Space to select a cell value. Press Escape or F2 to cancel." : "Press Enter or F2 to edit cell value." })
5262
+ /* @__PURE__ */ jsx(SrOnly, { children: isOpen ? "Press Enter or Space to select a cell value. Press Escape or F2 to cancel." : "Press Enter or F2 to edit cell value." })
5222
5263
  ]
5223
5264
  }
5224
- ) });
5225
- },
5226
- children: isEditing && options.map((item) => {
5227
- return /* @__PURE__ */ jsx(
5228
- Menu.Item,
5229
- {
5230
- label: item.label,
5231
- onClick: () => handleMenuItemClick(item.value),
5232
- onKeyDown: handleMenuItemKeyDown
5233
- },
5234
- String(item.value)
5235
5265
  );
5236
- })
5266
+ },
5267
+ label: String(
5268
+ cell.column.columnDef.meta?.columnDef?.headerLabel ?? "Select"
5269
+ ),
5270
+ options,
5271
+ value: selectedOption,
5272
+ onSelectedOptionChange: (option) => {
5273
+ if (!option) return;
5274
+ const id = String(option.id);
5275
+ const value = id === "true" ? true : id === "false" ? false : null;
5276
+ onChange?.(value, rowId);
5277
+ },
5278
+ disableSearch: true,
5279
+ onMenuKeyDown: handleMenuKeyDown,
5280
+ onImplicitClose: handleImplicitClose,
5281
+ popoverWidth: "reference"
5237
5282
  }
5238
5283
  );
5239
5284
  }
@@ -5318,9 +5363,15 @@ function DataTableBodyMutableCell(props) {
5318
5363
  if (editMode === "select") {
5319
5364
  return DataTableEditableSelectCell;
5320
5365
  }
5366
+ if (editMode === "select-async") {
5367
+ return DataTableEditableSelectAsyncCell;
5368
+ }
5321
5369
  if (editMode === "multiselect") {
5322
5370
  return DataTableEditableMultiselectCell;
5323
5371
  }
5372
+ if (editMode === "multiselect-async") {
5373
+ return DataTableEditableMultiselectAsyncCell;
5374
+ }
5324
5375
  if (editMode === "boolean") {
5325
5376
  return DataTableEditableBooleanCell;
5326
5377
  }
@@ -5866,10 +5917,8 @@ function getTanStackColumnDef({
5866
5917
  enableResizing: columnDef.resizable,
5867
5918
  enableSorting: !!columnDef.sortable,
5868
5919
  meta: {
5869
- editMode: columnDef.editMode,
5920
+ editMode: columnDef.editConfig?.mode,
5870
5921
  editConfig: columnDef.editConfig,
5871
- onChange: columnDef.onChange,
5872
- options: columnDef.options,
5873
5922
  columnDef
5874
5923
  // Store original for type narrowing
5875
5924
  },
@@ -6005,7 +6054,7 @@ function DataTableHeaderCellInner(props, forwardedRef) {
6005
6054
  const isDisabled = header.column.columnDef.meta?.disableHeaderAction;
6006
6055
  if (isSelectCell && !isDisabled) {
6007
6056
  event.preventDefault();
6008
- header.table.toggleAllRowsSelected();
6057
+ header.table.toggleAllPageRowsSelected();
6009
6058
  return;
6010
6059
  }
6011
6060
  if (isExpandCell && !isDisabled) {
@@ -6245,8 +6294,8 @@ function DataTableHeader({ table }) {
6245
6294
  }
6246
6295
 
6247
6296
  const styles$2 = {
6248
- "table-container": "_table-container_1r348_2",
6249
- "table-scroll-container": "_table-scroll-container_1r348_56"
6297
+ "table-container": "_table-container_z7onx_2",
6298
+ "table-scroll-container": "_table-scroll-container_z7onx_57"
6250
6299
  };
6251
6300
 
6252
6301
  const TableContainer = forwardRef(
@@ -6338,6 +6387,67 @@ const useAsyncData = (dataOrPromise) => {
6338
6387
  return { data: resolvedData, error, isLoading };
6339
6388
  };
6340
6389
 
6390
+ const DEFAULT_CACHE_MAX_SIZE = 15;
6391
+ function usePageDataCache(config) {
6392
+ const { loadPageData, cache: cacheConfig } = config;
6393
+ const cacheEnabled = cacheConfig?.enabled !== false;
6394
+ const cacheMaxSize = cacheConfig?.maxSize ?? DEFAULT_CACHE_MAX_SIZE;
6395
+ const pageCacheRef = useRef(/* @__PURE__ */ new Map());
6396
+ const loadPageDataRef = useRef(loadPageData);
6397
+ loadPageDataRef.current = loadPageData;
6398
+ const generationRef = useRef(0);
6399
+ const prevRefreshKeyRef = useRef(config.refreshKey);
6400
+ const prevRefreshCounterRef = useRef(config.refreshCounter);
6401
+ const prevRowsPerPageRef = useRef(config.rowsPerPage);
6402
+ const prevSortingRef = useRef(config.sorting);
6403
+ if (prevRefreshKeyRef.current !== config.refreshKey || prevRefreshCounterRef.current !== config.refreshCounter || prevRowsPerPageRef.current !== config.rowsPerPage || prevSortingRef.current?.id !== config.sorting?.id || prevSortingRef.current?.desc !== config.sorting?.desc) {
6404
+ pageCacheRef.current = /* @__PURE__ */ new Map();
6405
+ generationRef.current += 1;
6406
+ prevRefreshKeyRef.current = config.refreshKey;
6407
+ prevRefreshCounterRef.current = config.refreshCounter;
6408
+ prevRowsPerPageRef.current = config.rowsPerPage;
6409
+ prevSortingRef.current = config.sorting;
6410
+ }
6411
+ const getOrLoad = useCallback(
6412
+ (pageIndex, pageSize, sorting) => {
6413
+ if (cacheEnabled) {
6414
+ const cached = pageCacheRef.current.get(pageIndex);
6415
+ if (cached) return cached;
6416
+ }
6417
+ const loader = loadPageDataRef.current;
6418
+ if (!loader) return [];
6419
+ const result = loader({ pageIndex, pageSize, sorting });
6420
+ if (!cacheEnabled) return result;
6421
+ const requestGeneration = generationRef.current;
6422
+ if (result instanceof Promise) {
6423
+ return result.then((data) => {
6424
+ if (generationRef.current !== requestGeneration) return data;
6425
+ const cache2 = pageCacheRef.current;
6426
+ if (cache2.size >= cacheMaxSize) {
6427
+ const oldest = cache2.keys().next().value;
6428
+ if (oldest != null) cache2.delete(oldest);
6429
+ }
6430
+ cache2.set(pageIndex, data);
6431
+ return data;
6432
+ });
6433
+ }
6434
+ const cache = pageCacheRef.current;
6435
+ if (cache.size >= cacheMaxSize) {
6436
+ const oldest = cache.keys().next().value;
6437
+ if (oldest != null) cache.delete(oldest);
6438
+ }
6439
+ cache.set(pageIndex, result);
6440
+ return result;
6441
+ },
6442
+ [cacheEnabled, cacheMaxSize]
6443
+ );
6444
+ const clearCache = useCallback(() => {
6445
+ pageCacheRef.current = /* @__PURE__ */ new Map();
6446
+ generationRef.current += 1;
6447
+ }, []);
6448
+ return { getOrLoad, clearCache };
6449
+ }
6450
+
6341
6451
  function DTHoverProvider({ children }) {
6342
6452
  const [state, dispatch] = useReducer(reducer$1, initialState$1);
6343
6453
  return /* @__PURE__ */ jsx(DTHoverStateContext.Provider, { value: state, children: /* @__PURE__ */ jsx(DTHoverDispatchContext.Provider, { value: dispatch, children }) });
@@ -6611,6 +6721,7 @@ function DTFocusProvider({
6611
6721
  return /* @__PURE__ */ jsx(DTFocusStateContext.Provider, { value: state, children: /* @__PURE__ */ jsx(DTFocusDispatchContext.Provider, { value: dispatch, children }) });
6612
6722
  }
6613
6723
 
6724
+ const EMPTY_DATA = [];
6614
6725
  function DataTableInner(props, ref) {
6615
6726
  const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
6616
6727
  const {
@@ -6667,15 +6778,26 @@ function DataTableInner(props, ref) {
6667
6778
  }
6668
6779
  });
6669
6780
  const [refreshCounter, setRefreshCounter] = useState(0);
6781
+ const pageLoader = paginationObject?.loadPageData;
6782
+ const isAsyncPaginated = !!pageLoader && typeof pageLoader === "function";
6783
+ const { getOrLoad, clearCache } = usePageDataCache({
6784
+ loadPageData: pageLoader,
6785
+ cache: paginationObject?.cache,
6786
+ refreshKey,
6787
+ refreshCounter,
6788
+ rowsPerPage,
6789
+ sorting: sorting?.[0]
6790
+ });
6670
6791
  useImperativeHandle(
6671
6792
  ref,
6672
6793
  () => ({
6673
6794
  refresh: () => {
6674
6795
  setRefreshCounter((c) => c + 1);
6675
6796
  setCurrentPageIndex(0);
6676
- }
6797
+ },
6798
+ clearCache
6677
6799
  }),
6678
- [setCurrentPageIndex]
6800
+ [setCurrentPageIndex, clearCache]
6679
6801
  );
6680
6802
  const isFirstRender = useRef(true);
6681
6803
  useEffect(() => {
@@ -6687,23 +6809,20 @@ function DataTableInner(props, ref) {
6687
6809
  setCurrentPageIndex(0);
6688
6810
  }
6689
6811
  }, [refreshKey]);
6690
- const pageLoader = paginationObject?.loadPageData;
6691
- const isAsyncPaginated = !!pageLoader && typeof pageLoader === "function";
6692
6812
  const dataSource = useMemo(() => {
6693
6813
  if (!isAsyncPaginated) {
6694
6814
  return dataProp;
6695
6815
  }
6696
- return pageLoader({
6697
- pageIndex: currentPageIndex ?? 0,
6698
- pageSize: rowsPerPage
6699
- });
6816
+ return getOrLoad(currentPageIndex ?? 0, rowsPerPage, sorting?.[0]);
6700
6817
  }, [
6701
6818
  isAsyncPaginated,
6702
6819
  currentPageIndex,
6703
6820
  rowsPerPage,
6704
6821
  dataProp,
6705
6822
  refreshKey,
6706
- refreshCounter
6823
+ refreshCounter,
6824
+ getOrLoad,
6825
+ sorting
6707
6826
  ]);
6708
6827
  const {
6709
6828
  data: resolvedData,
@@ -6730,29 +6849,7 @@ function DataTableInner(props, ref) {
6730
6849
  }
6731
6850
  }
6732
6851
  });
6733
- const tableData = useMemo(() => {
6734
- if (isLoading) return [];
6735
- if (!isPaginated || isAsyncPaginated) return resolvedData;
6736
- const maxPageIndex = Math.max(
6737
- 0,
6738
- Math.ceil(totalItemCount / rowsPerPage) - 1
6739
- );
6740
- const clampedPageIndex = Math.max(
6741
- 0,
6742
- Math.min(currentPageIndex ?? 0, maxPageIndex)
6743
- );
6744
- const startIndex = clampedPageIndex * rowsPerPage;
6745
- const endIndex = startIndex + rowsPerPage;
6746
- return resolvedData?.slice(startIndex, endIndex) ?? [];
6747
- }, [
6748
- isLoading,
6749
- isPaginated,
6750
- isAsyncPaginated,
6751
- resolvedData,
6752
- totalItemCount,
6753
- rowsPerPage,
6754
- currentPageIndex
6755
- ]);
6852
+ const tableData = isLoading ? EMPTY_DATA : resolvedData;
6756
6853
  const hasRowStatus = useMemo(() => {
6757
6854
  return tableData?.some((row) => {
6758
6855
  const meta = row.meta;
@@ -6879,10 +6976,10 @@ function DataTableInner(props, ref) {
6879
6976
  Checkbox,
6880
6977
  {
6881
6978
  tabIndex: -1,
6882
- "aria-label": table2.getIsAllRowsSelected() ? "Deselect all rows" : "Select all rows",
6883
- checked: table2.getIsAllRowsSelected(),
6884
- indeterminate: table2.getIsSomeRowsSelected(),
6885
- onChange: table2.getToggleAllRowsSelectedHandler(),
6979
+ "aria-label": table2.getIsAllPageRowsSelected() ? "Deselect all rows" : "Select all rows",
6980
+ checked: table2.getIsAllPageRowsSelected(),
6981
+ indeterminate: table2.getIsSomePageRowsSelected(),
6982
+ onChange: table2.getToggleAllPageRowsSelectedHandler(),
6886
6983
  "data-cell-action": "select"
6887
6984
  }
6888
6985
  ) });
@@ -6922,6 +7019,7 @@ function DataTableInner(props, ref) {
6922
7019
  columns,
6923
7020
  getCoreRowModel: getCoreRowModel(),
6924
7021
  getSortedRowModel: getSortedRowModel(),
7022
+ getPaginationRowModel: getPaginationRowModel(),
6925
7023
  getExpandedRowModel: getExpandedRowModel(),
6926
7024
  getGroupedRowModel: getGroupedRowModel(),
6927
7025
  getRowId: (row) => row.id.toString(),
@@ -6934,8 +7032,18 @@ function DataTableInner(props, ref) {
6934
7032
  columnPinning,
6935
7033
  rowSelection,
6936
7034
  expanded,
6937
- sorting
7035
+ sorting,
7036
+ ...isPaginated && {
7037
+ pagination: {
7038
+ pageIndex: currentPageIndex ?? 0,
7039
+ pageSize: rowsPerPage
7040
+ }
7041
+ }
6938
7042
  },
7043
+ manualPagination: !isPaginated || isAsyncPaginated,
7044
+ // Server provides sorted data via loadPageData; disable client-side sort.
7045
+ manualSorting: isAsyncPaginated,
7046
+ autoResetPageIndex: false,
6939
7047
  columnResizeMode: "onChange",
6940
7048
  enableRowSelection: typeof isSelectable === "function" ? (row) => isSelectable(row.original) : isSelectable,
6941
7049
  onRowSelectionChange: (newRowSelection) => {
@@ -6951,11 +7059,14 @@ function DataTableInner(props, ref) {
6951
7059
  return;
6952
7060
  }
6953
7061
  setSorting(newSorting);
7062
+ if (isPaginated) {
7063
+ setCurrentPageIndex(0);
7064
+ }
6954
7065
  }
6955
7066
  });
6956
7067
  const headers = table.getFlatHeaders();
6957
7068
  const headerRowCount = table.getHeaderGroups().length;
6958
- const bodyRowCount = table.getExpandedRowModel().rows.length;
7069
+ const bodyRowCount = table.getRowModel().rows.length;
6959
7070
  const columnSizing = table.getState().columnSizing;
6960
7071
  const getMaxFooterRows = useCallback((column) => {
6961
7072
  let currentMax = 0;
@@ -7139,4 +7250,4 @@ function DataTableInner(props, ref) {
7139
7250
  const DataTable = forwardRef(DataTableInner);
7140
7251
 
7141
7252
  export { COLUMN_TYPE_DEFAULTS as C, DataTable as D, chipsFormatter as a, booleanFormatter as b, createColumnHelper$1 as c, currencyFormatter as d, dateFormatter as e, dateTimeFormatter as f, getColumnTypeDefaults as g, dateFormatPresets as h, timeFormatter as i, numberFormatter as n, percentFormatter as p, resolveColumnTypeConfig as r, timeFormatPresets as t, yearlessDateFormatter as y };
7142
- //# sourceMappingURL=DataTable-BYOS6icI.js.map
7253
+ //# sourceMappingURL=DataTable-DK9xRjnq.js.map