@economic/taco 14.1.1 → 14.2.0-tanstack-virtual-update.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 (279) hide show
  1. package/dist/charts/components/Area/AreaChart.cjs +2 -2
  2. package/dist/charts/components/Area/AreaChart.cjs.map +1 -1
  3. package/dist/charts/components/Area/AreaChart.js +2 -2
  4. package/dist/charts/components/Area/AreaChart.js.map +1 -1
  5. package/dist/charts/components/Bar/BarChart.cjs +1 -1
  6. package/dist/charts/components/Bar/BarChart.cjs.map +1 -1
  7. package/dist/charts/components/Bar/BarChart.js +1 -1
  8. package/dist/charts/components/Bar/BarChart.js.map +1 -1
  9. package/dist/charts/components/Line/LineChart.cjs +1 -1
  10. package/dist/charts/components/Line/LineChart.cjs.map +1 -1
  11. package/dist/charts/components/Line/LineChart.js +1 -1
  12. package/dist/charts/components/Line/LineChart.js.map +1 -1
  13. package/dist/components/Datepicker/Datepicker.cjs +4 -14
  14. package/dist/components/Datepicker/Datepicker.cjs.map +1 -1
  15. package/dist/components/Datepicker/Datepicker.js +4 -14
  16. package/dist/components/Datepicker/Datepicker.js.map +1 -1
  17. package/dist/components/HoverCard/HoverCard.cjs +4 -20
  18. package/dist/components/HoverCard/HoverCard.cjs.map +1 -1
  19. package/dist/components/HoverCard/HoverCard.js +5 -21
  20. package/dist/components/HoverCard/HoverCard.js.map +1 -1
  21. package/dist/components/Popover/Popover.cjs +12 -3
  22. package/dist/components/Popover/Popover.cjs.map +1 -1
  23. package/dist/components/Popover/Popover.d.ts +1 -0
  24. package/dist/components/Popover/Popover.js +14 -5
  25. package/dist/components/Popover/Popover.js.map +1 -1
  26. package/dist/components/Popover/util.cjs +2 -2
  27. package/dist/components/Popover/util.cjs.map +1 -1
  28. package/dist/components/Popover/util.d.ts +1 -1
  29. package/dist/components/Popover/util.js +2 -2
  30. package/dist/components/Popover/util.js.map +1 -1
  31. package/dist/components/Provider/Localization.cjs +3 -0
  32. package/dist/components/Provider/Localization.cjs.map +1 -1
  33. package/dist/components/Provider/Localization.d.ts +6 -0
  34. package/dist/components/Provider/Localization.js +3 -0
  35. package/dist/components/Provider/Localization.js.map +1 -1
  36. package/dist/components/Table3/components/Columns/Cell/Cell.cjs +3 -2
  37. package/dist/components/Table3/components/Columns/Cell/Cell.cjs.map +1 -1
  38. package/dist/components/Table3/components/Columns/Cell/Cell.js +3 -2
  39. package/dist/components/Table3/components/Columns/Cell/Cell.js.map +1 -1
  40. package/dist/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.cjs +6 -5
  41. package/dist/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.cjs.map +1 -1
  42. package/dist/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.js +6 -5
  43. package/dist/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.js.map +1 -1
  44. package/dist/components/Table3/components/Columns/Cell/EditingControlCell.cjs +9 -8
  45. package/dist/components/Table3/components/Columns/Cell/EditingControlCell.cjs.map +1 -1
  46. package/dist/components/Table3/components/Columns/Cell/EditingControlCell.js +9 -8
  47. package/dist/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
  48. package/dist/components/Table3/components/Columns/Cell/util.cjs +2 -1
  49. package/dist/components/Table3/components/Columns/Cell/util.cjs.map +1 -1
  50. package/dist/components/Table3/components/Columns/Cell/util.js +2 -1
  51. package/dist/components/Table3/components/Columns/Cell/util.js.map +1 -1
  52. package/dist/components/Table3/components/Editing/Alert.cjs +2 -1
  53. package/dist/components/Table3/components/Editing/Alert.cjs.map +1 -1
  54. package/dist/components/Table3/components/Editing/Alert.js +2 -1
  55. package/dist/components/Table3/components/Editing/Alert.js.map +1 -1
  56. package/dist/components/Table3/components/Row/Editing/SaveStatus.cjs +2 -1
  57. package/dist/components/Table3/components/Row/Editing/SaveStatus.cjs.map +1 -1
  58. package/dist/components/Table3/components/Row/Editing/SaveStatus.js +2 -1
  59. package/dist/components/Table3/components/Row/Editing/SaveStatus.js.map +1 -1
  60. package/dist/components/Table3/components/Row/Row.cjs +2 -1
  61. package/dist/components/Table3/components/Row/Row.cjs.map +1 -1
  62. package/dist/components/Table3/components/Row/Row.js +2 -1
  63. package/dist/components/Table3/components/Row/Row.js.map +1 -1
  64. package/dist/components/Table3/components/Toolbar/Editing/Editing.cjs +2 -1
  65. package/dist/components/Table3/components/Toolbar/Editing/Editing.cjs.map +1 -1
  66. package/dist/components/Table3/components/Toolbar/Editing/Editing.js +2 -1
  67. package/dist/components/Table3/components/Toolbar/Editing/Editing.js.map +1 -1
  68. package/dist/components/Table3/features/useEditingState.cjs +3 -2
  69. package/dist/components/Table3/features/useEditingState.cjs.map +1 -1
  70. package/dist/components/Table3/features/useEditingState.js +3 -2
  71. package/dist/components/Table3/features/useEditingState.js.map +1 -1
  72. package/dist/components/Table3/features/useTableEditing.cjs +4 -3
  73. package/dist/components/Table3/features/useTableEditing.cjs.map +1 -1
  74. package/dist/components/Table3/features/useTableEditing.js +4 -3
  75. package/dist/components/Table3/features/useTableEditing.js.map +1 -1
  76. package/dist/components/Table3/listeners/useTableEditingListener.cjs +2 -1
  77. package/dist/components/Table3/listeners/useTableEditingListener.cjs.map +1 -1
  78. package/dist/components/Table3/listeners/useTableEditingListener.js +2 -1
  79. package/dist/components/Table3/listeners/useTableEditingListener.js.map +1 -1
  80. package/dist/components/Toggletip/Toggletip.cjs +85 -0
  81. package/dist/components/Toggletip/Toggletip.cjs.map +1 -0
  82. package/dist/components/Toggletip/Toggletip.d.ts +13 -0
  83. package/dist/components/Toggletip/Toggletip.js +68 -0
  84. package/dist/components/Toggletip/Toggletip.js.map +1 -0
  85. package/dist/components/Tooltip/Tooltip.cjs +3 -19
  86. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  87. package/dist/components/Tooltip/Tooltip.js +3 -19
  88. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  89. package/dist/components/index.d.ts +1 -0
  90. package/dist/index.cjs +3 -0
  91. package/dist/index.cjs.map +1 -1
  92. package/dist/index.js +4 -1
  93. package/dist/index.js.map +1 -1
  94. package/dist/primitives/ArrowTip/ArrowTip.cjs +43 -0
  95. package/dist/primitives/ArrowTip/ArrowTip.cjs.map +1 -0
  96. package/dist/primitives/ArrowTip/ArrowTip.d.ts +10 -0
  97. package/dist/primitives/ArrowTip/ArrowTip.js +26 -0
  98. package/dist/primitives/ArrowTip/ArrowTip.js.map +1 -0
  99. package/dist/primitives/BareButton/BareButton.cjs +28 -0
  100. package/dist/primitives/BareButton/BareButton.cjs.map +1 -0
  101. package/dist/primitives/BareButton/BareButton.d.ts +7 -0
  102. package/dist/primitives/BareButton/BareButton.js +11 -0
  103. package/dist/primitives/BareButton/BareButton.js.map +1 -0
  104. package/dist/primitives/Table/Core/components/Body/Body.cjs +5 -5
  105. package/dist/primitives/Table/Core/components/Body/Body.cjs.map +1 -1
  106. package/dist/primitives/Table/Core/components/Body/Body.js +6 -6
  107. package/dist/primitives/Table/Core/components/Body/Body.js.map +1 -1
  108. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell.cjs +2 -2
  109. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell.cjs.map +1 -1
  110. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell.js +2 -2
  111. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell.js.map +1 -1
  112. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.cjs +2 -1
  113. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.cjs.map +1 -1
  114. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js +2 -1
  115. package/dist/primitives/Table/Core/components/Columns/Cell/BuiltIns/GroupedCell.js.map +1 -1
  116. package/dist/primitives/Table/Core/components/Columns/Cell/util.cjs +6 -5
  117. package/dist/primitives/Table/Core/components/Columns/Cell/util.cjs.map +1 -1
  118. package/dist/primitives/Table/Core/components/Columns/Cell/util.js +6 -5
  119. package/dist/primitives/Table/Core/components/Columns/Cell/util.js.map +1 -1
  120. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.cjs +3 -2
  121. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.cjs.map +1 -1
  122. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.js +3 -2
  123. package/dist/primitives/Table/Core/components/Columns/Internal/Actions.js.map +1 -1
  124. package/dist/primitives/Table/Core/components/Columns/Internal/Expansion.cjs +3 -2
  125. package/dist/primitives/Table/Core/components/Columns/Internal/Expansion.cjs.map +1 -1
  126. package/dist/primitives/Table/Core/components/Columns/Internal/Expansion.js +3 -2
  127. package/dist/primitives/Table/Core/components/Columns/Internal/Expansion.js.map +1 -1
  128. package/dist/primitives/Table/Core/components/Columns/Internal/Selection.cjs +3 -2
  129. package/dist/primitives/Table/Core/components/Columns/Internal/Selection.cjs.map +1 -1
  130. package/dist/primitives/Table/Core/components/Columns/Internal/Selection.js +3 -2
  131. package/dist/primitives/Table/Core/components/Columns/Internal/Selection.js.map +1 -1
  132. package/dist/primitives/Table/Core/components/Footer/Footer.cjs +3 -2
  133. package/dist/primitives/Table/Core/components/Footer/Footer.cjs.map +1 -1
  134. package/dist/primitives/Table/Core/components/Footer/Footer.js +3 -2
  135. package/dist/primitives/Table/Core/components/Footer/Footer.js.map +1 -1
  136. package/dist/primitives/Table/Core/components/Footer/Summary.cjs +2 -1
  137. package/dist/primitives/Table/Core/components/Footer/Summary.cjs.map +1 -1
  138. package/dist/primitives/Table/Core/components/Footer/Summary.js +2 -1
  139. package/dist/primitives/Table/Core/components/Footer/Summary.js.map +1 -1
  140. package/dist/primitives/Table/Core/components/Header/Header.cjs +9 -8
  141. package/dist/primitives/Table/Core/components/Header/Header.cjs.map +1 -1
  142. package/dist/primitives/Table/Core/components/Header/Header.js +9 -8
  143. package/dist/primitives/Table/Core/components/Header/Header.js.map +1 -1
  144. package/dist/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.cjs +6 -5
  145. package/dist/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.cjs.map +1 -1
  146. package/dist/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js +2 -1
  147. package/dist/primitives/Table/Core/components/Row/BuiltIns/DisplayRow.js.map +1 -1
  148. package/dist/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.cjs +3 -2
  149. package/dist/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.cjs.map +1 -1
  150. package/dist/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js +3 -2
  151. package/dist/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js.map +1 -1
  152. package/dist/primitives/Table/Core/components/Row/Row.cjs +2 -2
  153. package/dist/primitives/Table/Core/components/Row/Row.cjs.map +1 -1
  154. package/dist/primitives/Table/Core/components/Row/Row.js +2 -2
  155. package/dist/primitives/Table/Core/components/Row/Row.js.map +1 -1
  156. package/dist/primitives/Table/Core/components/Toolbar/Toolbar.cjs +2 -1
  157. package/dist/primitives/Table/Core/components/Toolbar/Toolbar.cjs.map +1 -1
  158. package/dist/primitives/Table/Core/components/Toolbar/Toolbar.js +2 -1
  159. package/dist/primitives/Table/Core/components/Toolbar/Toolbar.js.map +1 -1
  160. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.cjs +2 -1
  161. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.cjs.map +1 -1
  162. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.js +2 -1
  163. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/ManageFiltersPopover.js.map +1 -1
  164. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/util.cjs +6 -6
  165. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/util.cjs.map +1 -1
  166. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/util.js +6 -6
  167. package/dist/primitives/Table/Core/components/Toolbar/components/Filters/util.js.map +1 -1
  168. package/dist/primitives/Table/Core/components/Toolbar/components/Print/Print.cjs +2 -1
  169. package/dist/primitives/Table/Core/components/Toolbar/components/Print/Print.cjs.map +1 -1
  170. package/dist/primitives/Table/Core/components/Toolbar/components/Print/Print.js +2 -1
  171. package/dist/primitives/Table/Core/components/Toolbar/components/Print/Print.js.map +1 -1
  172. package/dist/primitives/Table/Core/components/Toolbar/components/Search/Search.cjs +2 -1
  173. package/dist/primitives/Table/Core/components/Toolbar/components/Search/Search.cjs.map +1 -1
  174. package/dist/primitives/Table/Core/components/Toolbar/components/Search/Search.js +2 -1
  175. package/dist/primitives/Table/Core/components/Toolbar/components/Search/Search.js.map +1 -1
  176. package/dist/primitives/Table/Core/components/Toolbar/components/Settings/HideOrOrderPopover.cjs +2 -1
  177. package/dist/primitives/Table/Core/components/Toolbar/components/Settings/HideOrOrderPopover.cjs.map +1 -1
  178. package/dist/primitives/Table/Core/components/Toolbar/components/Settings/HideOrOrderPopover.js +2 -1
  179. package/dist/primitives/Table/Core/components/Toolbar/components/Settings/HideOrOrderPopover.js.map +1 -1
  180. package/dist/primitives/Table/Core/components/Toolbar/components/Settings/Settings.cjs +2 -1
  181. package/dist/primitives/Table/Core/components/Toolbar/components/Settings/Settings.cjs.map +1 -1
  182. package/dist/primitives/Table/Core/components/Toolbar/components/Settings/Settings.js +2 -1
  183. package/dist/primitives/Table/Core/components/Toolbar/components/Settings/Settings.js.map +1 -1
  184. package/dist/primitives/Table/Core/features/useTableGlobalShortcuts.cjs +1 -1
  185. package/dist/primitives/Table/Core/features/useTableGlobalShortcuts.cjs.map +1 -1
  186. package/dist/primitives/Table/Core/features/useTableGlobalShortcuts.js +2 -2
  187. package/dist/primitives/Table/Core/features/useTableGlobalShortcuts.js.map +1 -1
  188. package/dist/primitives/Table/Core/features/useTableRef.cjs +3 -2
  189. package/dist/primitives/Table/Core/features/useTableRef.cjs.map +1 -1
  190. package/dist/primitives/Table/Core/features/useTableRef.js +3 -2
  191. package/dist/primitives/Table/Core/features/useTableRef.js.map +1 -1
  192. package/dist/primitives/Table/Core/features/useTableRenderer.cjs +13 -12
  193. package/dist/primitives/Table/Core/features/useTableRenderer.cjs.map +1 -1
  194. package/dist/primitives/Table/Core/features/useTableRenderer.js +3 -2
  195. package/dist/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
  196. package/dist/primitives/Table/Core/features/useTableStyle.cjs +2 -1
  197. package/dist/primitives/Table/Core/features/useTableStyle.cjs.map +1 -1
  198. package/dist/primitives/Table/Core/features/useTableStyle.d.ts +857 -857
  199. package/dist/primitives/Table/Core/features/useTableStyle.js +2 -1
  200. package/dist/primitives/Table/Core/features/useTableStyle.js.map +1 -1
  201. package/dist/primitives/Table/Core/features/useTableStyleGrid.cjs +2 -1
  202. package/dist/primitives/Table/Core/features/useTableStyleGrid.cjs.map +1 -1
  203. package/dist/primitives/Table/Core/features/useTableStyleGrid.js +2 -1
  204. package/dist/primitives/Table/Core/features/useTableStyleGrid.js.map +1 -1
  205. package/dist/primitives/Table/Core/listeners/useTableRowActiveListener.cjs +2 -1
  206. package/dist/primitives/Table/Core/listeners/useTableRowActiveListener.cjs.map +1 -1
  207. package/dist/primitives/Table/Core/listeners/useTableRowActiveListener.js +2 -1
  208. package/dist/primitives/Table/Core/listeners/useTableRowActiveListener.js.map +1 -1
  209. package/dist/primitives/Table/useTableManager/features/useTableRowSelection.cjs +5 -5
  210. package/dist/primitives/Table/useTableManager/features/useTableRowSelection.cjs.map +1 -1
  211. package/dist/primitives/Table/useTableManager/features/useTableRowSelection.js +2 -2
  212. package/dist/primitives/Table/useTableManager/features/useTableRowSelection.js.map +1 -1
  213. package/dist/primitives/Table/useTableManager/listeners/useTableDataListener.cjs +2 -1
  214. package/dist/primitives/Table/useTableManager/listeners/useTableDataListener.cjs.map +1 -1
  215. package/dist/primitives/Table/useTableManager/listeners/useTableDataListener.js +2 -1
  216. package/dist/primitives/Table/useTableManager/listeners/useTableDataListener.js.map +1 -1
  217. package/dist/primitives/Table/useTableManager/listeners/useTableFontSizeListener.cjs +2 -1
  218. package/dist/primitives/Table/useTableManager/listeners/useTableFontSizeListener.cjs.map +1 -1
  219. package/dist/primitives/Table/useTableManager/listeners/useTableFontSizeListener.js +2 -1
  220. package/dist/primitives/Table/useTableManager/listeners/useTableFontSizeListener.js.map +1 -1
  221. package/dist/primitives/Table/useTableManager/listeners/useTableRowActiveListener.cjs +4 -3
  222. package/dist/primitives/Table/useTableManager/listeners/useTableRowActiveListener.cjs.map +1 -1
  223. package/dist/primitives/Table/useTableManager/listeners/useTableRowActiveListener.js +2 -1
  224. package/dist/primitives/Table/useTableManager/listeners/useTableRowActiveListener.js.map +1 -1
  225. package/dist/primitives/Table/useTableManager/listeners/useTableRowHeightListener.cjs +2 -1
  226. package/dist/primitives/Table/useTableManager/listeners/useTableRowHeightListener.cjs.map +1 -1
  227. package/dist/primitives/Table/useTableManager/listeners/useTableRowHeightListener.js +2 -1
  228. package/dist/primitives/Table/useTableManager/listeners/useTableRowHeightListener.js.map +1 -1
  229. package/dist/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.cjs +4 -4
  230. package/dist/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.cjs.map +1 -1
  231. package/dist/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js +2 -2
  232. package/dist/primitives/Table/useTableManager/listeners/useTableRowSelectionListener.js.map +1 -1
  233. package/dist/primitives/Table/useTableManager/listeners/useTableSearchListener.cjs +2 -1
  234. package/dist/primitives/Table/useTableManager/listeners/useTableSearchListener.cjs.map +1 -1
  235. package/dist/primitives/Table/useTableManager/listeners/useTableSearchListener.js +2 -1
  236. package/dist/primitives/Table/useTableManager/listeners/useTableSearchListener.js.map +1 -1
  237. package/dist/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.cjs +2 -1
  238. package/dist/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.cjs.map +1 -1
  239. package/dist/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js +2 -1
  240. package/dist/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js.map +1 -1
  241. package/dist/primitives/Table/useTableManager/listeners/useTableSettingsListener.cjs +2 -1
  242. package/dist/primitives/Table/useTableManager/listeners/useTableSettingsListener.cjs.map +1 -1
  243. package/dist/primitives/Table/useTableManager/listeners/useTableSettingsListener.js +2 -1
  244. package/dist/primitives/Table/useTableManager/listeners/useTableSettingsListener.js.map +1 -1
  245. package/dist/primitives/Table/useTableManager/listeners/useTableShortcutsListener.cjs +5 -4
  246. package/dist/primitives/Table/useTableManager/listeners/useTableShortcutsListener.cjs.map +1 -1
  247. package/dist/primitives/Table/useTableManager/listeners/useTableShortcutsListener.js +2 -1
  248. package/dist/primitives/Table/useTableManager/listeners/useTableShortcutsListener.js.map +1 -1
  249. package/dist/primitives/Table/useTableManager/useTableManager.cjs +3 -1
  250. package/dist/primitives/Table/useTableManager/useTableManager.cjs.map +1 -1
  251. package/dist/primitives/Table/useTableManager/useTableManager.js +3 -1
  252. package/dist/primitives/Table/useTableManager/useTableManager.js.map +1 -1
  253. package/dist/primitives/Table/useTableManager/util/rows.cjs +8 -1
  254. package/dist/primitives/Table/useTableManager/util/rows.cjs.map +1 -1
  255. package/dist/primitives/Table/useTableManager/util/rows.d.ts +2 -1
  256. package/dist/primitives/Table/useTableManager/util/rows.js +9 -2
  257. package/dist/primitives/Table/useTableManager/util/rows.js.map +1 -1
  258. package/dist/primitives/Table/useTableManager/util/search.cjs +2 -1
  259. package/dist/primitives/Table/useTableManager/util/search.cjs.map +1 -1
  260. package/dist/primitives/Table/useTableManager/util/search.js +2 -1
  261. package/dist/primitives/Table/useTableManager/util/search.js.map +1 -1
  262. package/dist/primitives/Table/useTableManager/util/settings.cjs +2 -1
  263. package/dist/primitives/Table/useTableManager/util/settings.cjs.map +1 -1
  264. package/dist/primitives/Table/useTableManager/util/settings.js +2 -1
  265. package/dist/primitives/Table/useTableManager/util/settings.js.map +1 -1
  266. package/dist/utils/tailwind.cjs +4 -0
  267. package/dist/utils/tailwind.cjs.map +1 -1
  268. package/dist/utils/tailwind.d.ts +4 -0
  269. package/dist/utils/tailwind.js +4 -0
  270. package/dist/utils/tailwind.js.map +1 -1
  271. package/package.json +6 -6
  272. package/dist/components/Popover/Primitives.cjs +0 -44
  273. package/dist/components/Popover/Primitives.cjs.map +0 -1
  274. package/dist/components/Popover/Primitives.d.ts +0 -2
  275. package/dist/components/Popover/Primitives.js +0 -27
  276. package/dist/components/Popover/Primitives.js.map +0 -1
  277. /package/dist/components/Icon/config/{index-template.d.cts → index-template.d.ts} +0 -0
  278. /package/dist/components/Icon/config/{svgr.config.d.cts → svgr.config.d.ts} +0 -0
  279. /package/dist/components/Icon/config/{template.d.cts → template.d.ts} +0 -0
@@ -1,15 +1,16 @@
1
1
  import React__default from "react";
2
2
  import { DisplayCell } from "../../../../../primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell.js";
3
3
  import { RowContext } from "../../../../../primitives/Table/Core/components/Row/RowContext.js";
4
+ import { getTableMeta } from "../../../../../primitives/Table/useTableManager/util/rows.js";
4
5
  import { EditingControlCell } from "./EditingControlCell.js";
5
6
  import { EditingDisplayCell } from "./EditingDisplayCell.js";
6
7
  function Cell(props) {
7
8
  const { cell } = props;
8
9
  const { isHovered, rowIndex } = React__default.useContext(RowContext);
9
- const tableMeta = cell.getContext().table.options.meta;
10
+ const tableMeta = getTableMeta(cell.getContext().table);
10
11
  const columnMeta = cell.column.columnDef.meta;
11
12
  if (tableMeta.editing.isEditing) {
12
- if (columnMeta.control && columnMeta.enableEditing) {
13
+ if (columnMeta?.control && columnMeta.enableEditing) {
13
14
  const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;
14
15
  const cellError = tableMeta.editing.getCellError(cell);
15
16
  const hasErrorAndIsEditing = cellError ? tableMeta.editing.isEditing : true;
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.js","sources":["../../../../../../src/components/Table3/components/Columns/Cell/Cell.tsx"],"sourcesContent":["import type { TableMeta as ReactTableMeta, ColumnMeta as ReactTableColumnMeta } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { DisplayCell } from '@/primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell';\nimport { RowContext } from '@/primitives/Table/Core/components/Row/RowContext';\nimport type { TableCellRendererProps } from '@/primitives/Table/Core/types';\n\nimport { EditingControlCell } from './EditingControlCell';\nimport { EditingDisplayCell } from './EditingDisplayCell';\n\nexport function Cell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell } = props;\n const { isHovered, rowIndex } = React.useContext(RowContext);\n const tableMeta = cell.getContext().table.options.meta as ReactTableMeta<TType>;\n const columnMeta = cell.column.columnDef.meta as ReactTableColumnMeta<TType, unknown>;\n\n if (tableMeta.editing.isEditing) {\n if (columnMeta.control && columnMeta.enableEditing) {\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const cellError = tableMeta.editing.getCellError(cell);\n const hasErrorAndIsEditing = cellError ? tableMeta.editing.isEditing : true;\n\n // saves may be pending when not currently editing, but we want to show the \"changed\" data\n // otherwise the unsaved value flashes in while the request completes, which looks a bit shit\n const changedValue = tableMeta.editing.getCellValue(cell);\n\n if (changedValue !== undefined && changedValue !== cell.getValue() && hasErrorAndIsEditing) {\n // a little hacky, but it seems to work without side effects\n const getValue = () => changedValue as any;\n const context = cell.getContext();\n cell.getValue = getValue;\n cell.getContext = () => ({ ...context, getValue });\n }\n\n if (isActiveRow || !!cellError || (isHovered && !isActiveRow && !tableMeta.rowActive.isHoverStatePaused)) {\n return <EditingControlCell<TType> {...props} />;\n }\n }\n\n return <EditingDisplayCell<TType> {...props} />;\n }\n\n return <DisplayCell<TType> {...props} />;\n}\n"],"names":["React"],"mappings":";;;;;AAUO,SAAS,KAAsB,OAAsC;AACxE,QAAM,EAAE,SAAS;AACjB,QAAM,EAAE,WAAW,SAAA,IAAaA,eAAM,WAAW,UAAU;AAC3D,QAAM,YAAY,KAAK,WAAA,EAAa,MAAM,QAAQ;AAClD,QAAM,aAAa,KAAK,OAAO,UAAU;AAEzC,MAAI,UAAU,QAAQ,WAAW;AAC7B,QAAI,WAAW,WAAW,WAAW,eAAe;AAChD,YAAM,cAAc,UAAU,UAAU,mBAAmB;AAC3D,YAAM,YAAY,UAAU,QAAQ,aAAa,IAAI;AACrD,YAAM,uBAAuB,YAAY,UAAU,QAAQ,YAAY;AAIvE,YAAM,eAAe,UAAU,QAAQ,aAAa,IAAI;AAExD,UAAI,iBAAiB,UAAa,iBAAiB,KAAK,SAAA,KAAc,sBAAsB;AAExF,cAAM,WAAW,MAAM;AACvB,cAAM,UAAU,KAAK,WAAA;AACrB,aAAK,WAAW;AAChB,aAAK,aAAa,OAAO,EAAE,GAAG,SAAS,SAAA;AAAA,MAC3C;AAEA,UAAI,eAAe,CAAC,CAAC,aAAc,aAAa,CAAC,eAAe,CAAC,UAAU,UAAU,oBAAqB;AACtG,eAAOA,+BAAA,cAAC,oBAAA,EAA2B,GAAG,MAAA,CAAO;AAAA,MACjD;AAAA,IACJ;AAEA,WAAOA,+BAAA,cAAC,oBAAA,EAA2B,GAAG,MAAA,CAAO;AAAA,EACjD;AAEA,SAAOA,+BAAA,cAAC,aAAA,EAAoB,GAAG,MAAA,CAAO;AAC1C;"}
1
+ {"version":3,"file":"Cell.js","sources":["../../../../../../src/components/Table3/components/Columns/Cell/Cell.tsx"],"sourcesContent":["import React from 'react';\n\nimport { DisplayCell } from '@/primitives/Table/Core/components/Columns/Cell/BuiltIns/DisplayCell';\nimport { RowContext } from '@/primitives/Table/Core/components/Row/RowContext';\nimport type { TableCellRendererProps } from '@/primitives/Table/Core/types';\nimport { getTableMeta } from '@/primitives/Table/useTableManager/util/rows';\n\nimport { EditingControlCell } from './EditingControlCell';\nimport { EditingDisplayCell } from './EditingDisplayCell';\n\nexport function Cell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell } = props;\n const { isHovered, rowIndex } = React.useContext(RowContext);\n const tableMeta = getTableMeta(cell.getContext().table);\n const columnMeta = cell.column.columnDef.meta;\n\n if (tableMeta.editing.isEditing) {\n if (columnMeta?.control && columnMeta.enableEditing) {\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const cellError = tableMeta.editing.getCellError(cell);\n const hasErrorAndIsEditing = cellError ? tableMeta.editing.isEditing : true;\n\n // saves may be pending when not currently editing, but we want to show the \"changed\" data\n // otherwise the unsaved value flashes in while the request completes, which looks a bit shit\n const changedValue = tableMeta.editing.getCellValue(cell);\n\n if (changedValue !== undefined && changedValue !== cell.getValue() && hasErrorAndIsEditing) {\n // a little hacky, but it seems to work without side effects\n const getValue = () => changedValue as any;\n const context = cell.getContext();\n cell.getValue = getValue;\n cell.getContext = () => ({ ...context, getValue });\n }\n\n if (isActiveRow || !!cellError || (isHovered && !isActiveRow && !tableMeta.rowActive.isHoverStatePaused)) {\n return <EditingControlCell<TType> {...props} />;\n }\n }\n\n return <EditingDisplayCell<TType> {...props} />;\n }\n\n return <DisplayCell<TType> {...props} />;\n}\n"],"names":["React"],"mappings":";;;;;;AAUO,SAAS,KAAsB,OAAsC;AACxE,QAAM,EAAE,SAAS;AACjB,QAAM,EAAE,WAAW,SAAA,IAAaA,eAAM,WAAW,UAAU;AAC3D,QAAM,YAAY,aAAa,KAAK,WAAA,EAAa,KAAK;AACtD,QAAM,aAAa,KAAK,OAAO,UAAU;AAEzC,MAAI,UAAU,QAAQ,WAAW;AAC7B,QAAI,YAAY,WAAW,WAAW,eAAe;AACjD,YAAM,cAAc,UAAU,UAAU,mBAAmB;AAC3D,YAAM,YAAY,UAAU,QAAQ,aAAa,IAAI;AACrD,YAAM,uBAAuB,YAAY,UAAU,QAAQ,YAAY;AAIvE,YAAM,eAAe,UAAU,QAAQ,aAAa,IAAI;AAExD,UAAI,iBAAiB,UAAa,iBAAiB,KAAK,SAAA,KAAc,sBAAsB;AAExF,cAAM,WAAW,MAAM;AACvB,cAAM,UAAU,KAAK,WAAA;AACrB,aAAK,WAAW;AAChB,aAAK,aAAa,OAAO,EAAE,GAAG,SAAS,SAAA;AAAA,MAC3C;AAEA,UAAI,eAAe,CAAC,CAAC,aAAc,aAAa,CAAC,eAAe,CAAC,UAAU,UAAU,oBAAqB;AACtG,eAAOA,+BAAA,cAAC,oBAAA,EAA2B,GAAG,MAAA,CAAO;AAAA,MACjD;AAAA,IACJ;AAEA,WAAOA,+BAAA,cAAC,oBAAA,EAA2B,GAAG,MAAA,CAAO;AAAA,EACjD;AAEA,SAAOA,+BAAA,cAAC,aAAA,EAAoB,GAAG,MAAA,CAAO;AAC1C;"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const React = require("react");
4
+ const rows = require("../../../../../../primitives/Table/useTableManager/util/rows.cjs");
4
5
  const Localization = require("../../../../../Provider/Localization.cjs");
5
6
  const Tooltip = require("../../../../../Tooltip/Tooltip.cjs");
6
7
  const Icon = require("../../../../../Icon/Icon.cjs");
@@ -9,8 +10,8 @@ function RowMoveIndicator(props) {
9
10
  const { texts } = Localization.useLocalization();
10
11
  const [show, setShow] = React.useState(false);
11
12
  const table = cell.getContext().table;
12
- const tableMeta = table.options.meta;
13
- const columnMeta = cell.column.columnDef.meta ?? {};
13
+ const tableMeta = rows.getTableMeta(table);
14
+ const columnMeta = cell.column.columnDef.meta;
14
15
  const moveReason = tableMeta.editing.getRowMoveReason(cell.row.id);
15
16
  React.useEffect(() => {
16
17
  if (cellRef.current) {
@@ -35,18 +36,18 @@ function RowMoveIndicator(props) {
35
36
  return null;
36
37
  }
37
38
  const { title, description } = getMessageFromReason(texts, moveReason);
38
- let columnHeader = columnMeta.header;
39
+ let columnHeader = columnMeta?.header;
39
40
  if (moveReason === "sorting") {
40
41
  const sortedColumns = table.getState().sorting;
41
42
  const columnId = sortedColumns[0]?.id;
42
43
  if (columnId) {
43
44
  const sortedColumn = table.getColumn(columnId);
44
45
  if (sortedColumn) {
45
- columnHeader = sortedColumn.columnDef.meta.header;
46
+ columnHeader = sortedColumn.columnDef.meta?.header;
46
47
  }
47
48
  }
48
49
  }
49
- return /* @__PURE__ */ React.createElement(Tooltip.Tooltip, { placement: "bottom", title: description.replace("[COLUMN]", columnHeader) }, /* @__PURE__ */ React.createElement("span", { "data-row-move-indicator": true }, /* @__PURE__ */ React.createElement(Icon.Icon, { name: "info", className: "-mt-0.5 mr-1 !h-4 !w-4 rounded-full bg-white !p-0 text-blue-500" }), title));
50
+ return /* @__PURE__ */ React.createElement(Tooltip.Tooltip, { placement: "bottom", title: description.replace("[COLUMN]", columnHeader ?? "") }, /* @__PURE__ */ React.createElement("span", { "data-row-move-indicator": true }, /* @__PURE__ */ React.createElement(Icon.Icon, { name: "info", className: "-mt-0.5 mr-1 !h-4 !w-4 rounded-full bg-white !p-0 text-blue-500" }), title));
50
51
  }
51
52
  function getMessageFromReason(texts, reason) {
52
53
  let title;
@@ -1 +1 @@
1
- {"version":3,"file":"RowMoveIndicator.cjs","sources":["../../../../../../../src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.tsx"],"sourcesContent":["import type {\n Cell as ReactTableCell,\n TableMeta as ReactTableMeta,\n ColumnMeta as ReactTableColumnMeta,\n} from '@tanstack/react-table';\nimport React from 'react';\n\nimport type { LocalizationTexts } from '@/components';\nimport { Icon, Tooltip, useLocalization } from '@/components';\n\ntype TableRowMoveIndicatorProps<TType = unknown> = {\n cell: ReactTableCell<TType, unknown>;\n cellRef: React.RefObject<HTMLTableCellElement | null>;\n isActiveRow: boolean;\n};\n\ntype Reason = 'search' | 'sorting' | 'filter' | undefined;\n\nexport function RowMoveIndicator<TType = unknown>(props: TableRowMoveIndicatorProps<TType>) {\n const { cell, cellRef, isActiveRow } = props;\n const { texts } = useLocalization();\n const [show, setShow] = React.useState(false);\n const table = cell.getContext().table;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columnMeta = (cell.column.columnDef.meta ?? {}) as ReactTableColumnMeta<TType, unknown>;\n const moveReason = tableMeta.editing.getRowMoveReason(cell.row.id) as Reason;\n\n React.useEffect(() => {\n if (cellRef.current) {\n if (isActiveRow && !!moveReason) {\n const firstChild = cellRef.current.parentElement?.querySelector('td[data-taco=\"cell-control\"]');\n\n if (cellRef.current === firstChild) {\n setShow(true);\n cellRef.current.parentElement?.setAttribute('data-row-editing-move', 'true');\n }\n } else {\n setShow(false);\n cellRef.current.parentElement?.removeAttribute('data-row-editing-move');\n }\n }\n\n return () => {\n if (cellRef.current) {\n cellRef.current.parentElement?.removeAttribute('data-row-editing-move');\n }\n };\n }, [cellRef, isActiveRow, moveReason]);\n\n if (!show) {\n return null;\n }\n\n const { title, description } = getMessageFromReason(texts, moveReason);\n\n let columnHeader = columnMeta.header;\n\n if (moveReason === 'sorting') {\n const sortedColumns = table.getState().sorting;\n const columnId = sortedColumns[0]?.id;\n\n if (columnId) {\n const sortedColumn = table.getColumn(columnId);\n if (sortedColumn) {\n columnHeader = (sortedColumn.columnDef.meta as ReactTableColumnMeta<TType, unknown>).header;\n }\n }\n }\n\n return (\n <Tooltip placement=\"bottom\" title={description.replace('[COLUMN]', columnHeader)}>\n <span data-row-move-indicator>\n <Icon name=\"info\" className=\"-mt-0.5 mr-1 !h-4 !w-4 rounded-full bg-white !p-0 text-blue-500\" />\n {title}\n </span>\n </Tooltip>\n );\n}\n\nfunction getMessageFromReason(texts: LocalizationTexts, reason: Reason) {\n let title;\n let description;\n\n switch (reason) {\n case 'filter':\n title = texts.table3.editing.rowIndicator.rowWillBeHidden;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonFilter;\n break;\n\n case 'search':\n title = texts.table3.editing.rowIndicator.rowWillBeHidden;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonSearch;\n break;\n\n case 'sorting':\n title = texts.table3.editing.rowIndicator.rowWillMove;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonSorting;\n break;\n\n default:\n title = '';\n description = '';\n break;\n }\n\n return { title, description };\n}\n"],"names":["useLocalization","Tooltip","Icon"],"mappings":";;;;;;AAkBO,SAAS,iBAAkC,OAA0C;AACxF,QAAM,EAAE,MAAM,SAAS,YAAA,IAAgB;AACvC,QAAM,EAAE,MAAA,IAAUA,6BAAA;AAClB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,QAAQ,KAAK,WAAA,EAAa;AAChC,QAAM,YAAY,MAAM,QAAQ;AAChC,QAAM,aAAc,KAAK,OAAO,UAAU,QAAQ,CAAA;AAClD,QAAM,aAAa,UAAU,QAAQ,iBAAiB,KAAK,IAAI,EAAE;AAEjE,QAAM,UAAU,MAAM;AAClB,QAAI,QAAQ,SAAS;AACjB,UAAI,eAAe,CAAC,CAAC,YAAY;AAC7B,cAAM,aAAa,QAAQ,QAAQ,eAAe,cAAc,8BAA8B;AAE9F,YAAI,QAAQ,YAAY,YAAY;AAChC,kBAAQ,IAAI;AACZ,kBAAQ,QAAQ,eAAe,aAAa,yBAAyB,MAAM;AAAA,QAC/E;AAAA,MACJ,OAAO;AACH,gBAAQ,KAAK;AACb,gBAAQ,QAAQ,eAAe,gBAAgB,uBAAuB;AAAA,MAC1E;AAAA,IACJ;AAEA,WAAO,MAAM;AACT,UAAI,QAAQ,SAAS;AACjB,gBAAQ,QAAQ,eAAe,gBAAgB,uBAAuB;AAAA,MAC1E;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,SAAS,aAAa,UAAU,CAAC;AAErC,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AAEA,QAAM,EAAE,OAAO,YAAA,IAAgB,qBAAqB,OAAO,UAAU;AAErE,MAAI,eAAe,WAAW;AAE9B,MAAI,eAAe,WAAW;AAC1B,UAAM,gBAAgB,MAAM,SAAA,EAAW;AACvC,UAAM,WAAW,cAAc,CAAC,GAAG;AAEnC,QAAI,UAAU;AACV,YAAM,eAAe,MAAM,UAAU,QAAQ;AAC7C,UAAI,cAAc;AACd,uBAAgB,aAAa,UAAU,KAA8C;AAAA,MACzF;AAAA,IACJ;AAAA,EACJ;AAEA,SACI,sBAAA,cAACC,mBAAQ,WAAU,UAAS,OAAO,YAAY,QAAQ,YAAY,YAAY,EAAA,GAC3E,sBAAA,cAAC,UAAK,2BAAuB,KAAA,uCACxBC,KAAAA,MAAA,EAAK,MAAK,QAAO,WAAU,kEAAA,CAAkE,GAC7F,KACL,CACJ;AAER;AAEA,SAAS,qBAAqB,OAA0B,QAAgB;AACpE,MAAI;AACJ,MAAI;AAEJ,UAAQ,QAAA;AAAA,IACJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ;AACI,cAAQ;AACR,oBAAc;AACd;AAAA,EAAA;AAGR,SAAO,EAAE,OAAO,YAAA;AACpB;;"}
1
+ {"version":3,"file":"RowMoveIndicator.cjs","sources":["../../../../../../../src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.tsx"],"sourcesContent":["import type { Cell as ReactTableCell } from '@tanstack/react-table';\nimport React from 'react';\n\nimport type { LocalizationTexts } from '@/components';\nimport { Icon, Tooltip, useLocalization } from '@/components';\nimport { getTableMeta } from '@/primitives/Table/useTableManager/util/rows';\n\ntype TableRowMoveIndicatorProps<TType = unknown> = {\n cell: ReactTableCell<TType, unknown>;\n cellRef: React.RefObject<HTMLTableCellElement | null>;\n isActiveRow: boolean;\n};\n\ntype Reason = 'search' | 'sorting' | 'filter' | undefined;\n\nexport function RowMoveIndicator<TType = unknown>(props: TableRowMoveIndicatorProps<TType>) {\n const { cell, cellRef, isActiveRow } = props;\n const { texts } = useLocalization();\n const [show, setShow] = React.useState(false);\n const table = cell.getContext().table;\n const tableMeta = getTableMeta(table);\n const columnMeta = cell.column.columnDef.meta;\n const moveReason = tableMeta.editing.getRowMoveReason(cell.row.id) as Reason;\n\n React.useEffect(() => {\n if (cellRef.current) {\n if (isActiveRow && !!moveReason) {\n const firstChild = cellRef.current.parentElement?.querySelector('td[data-taco=\"cell-control\"]');\n\n if (cellRef.current === firstChild) {\n setShow(true);\n cellRef.current.parentElement?.setAttribute('data-row-editing-move', 'true');\n }\n } else {\n setShow(false);\n cellRef.current.parentElement?.removeAttribute('data-row-editing-move');\n }\n }\n\n return () => {\n if (cellRef.current) {\n cellRef.current.parentElement?.removeAttribute('data-row-editing-move');\n }\n };\n }, [cellRef, isActiveRow, moveReason]);\n\n if (!show) {\n return null;\n }\n\n const { title, description } = getMessageFromReason(texts, moveReason);\n\n let columnHeader = columnMeta?.header;\n\n if (moveReason === 'sorting') {\n const sortedColumns = table.getState().sorting;\n const columnId = sortedColumns[0]?.id;\n\n if (columnId) {\n const sortedColumn = table.getColumn(columnId);\n if (sortedColumn) {\n columnHeader = sortedColumn.columnDef.meta?.header;\n }\n }\n }\n\n return (\n <Tooltip placement=\"bottom\" title={description.replace('[COLUMN]', columnHeader ?? '')}>\n <span data-row-move-indicator>\n <Icon name=\"info\" className=\"-mt-0.5 mr-1 !h-4 !w-4 rounded-full bg-white !p-0 text-blue-500\" />\n {title}\n </span>\n </Tooltip>\n );\n}\n\nfunction getMessageFromReason(texts: LocalizationTexts, reason: Reason) {\n let title;\n let description;\n\n switch (reason) {\n case 'filter':\n title = texts.table3.editing.rowIndicator.rowWillBeHidden;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonFilter;\n break;\n\n case 'search':\n title = texts.table3.editing.rowIndicator.rowWillBeHidden;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonSearch;\n break;\n\n case 'sorting':\n title = texts.table3.editing.rowIndicator.rowWillMove;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonSorting;\n break;\n\n default:\n title = '';\n description = '';\n break;\n }\n\n return { title, description };\n}\n"],"names":["useLocalization","getTableMeta","Tooltip","Icon"],"mappings":";;;;;;;AAeO,SAAS,iBAAkC,OAA0C;AACxF,QAAM,EAAE,MAAM,SAAS,YAAA,IAAgB;AACvC,QAAM,EAAE,MAAA,IAAUA,6BAAA;AAClB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,QAAQ,KAAK,WAAA,EAAa;AAChC,QAAM,YAAYC,KAAAA,aAAa,KAAK;AACpC,QAAM,aAAa,KAAK,OAAO,UAAU;AACzC,QAAM,aAAa,UAAU,QAAQ,iBAAiB,KAAK,IAAI,EAAE;AAEjE,QAAM,UAAU,MAAM;AAClB,QAAI,QAAQ,SAAS;AACjB,UAAI,eAAe,CAAC,CAAC,YAAY;AAC7B,cAAM,aAAa,QAAQ,QAAQ,eAAe,cAAc,8BAA8B;AAE9F,YAAI,QAAQ,YAAY,YAAY;AAChC,kBAAQ,IAAI;AACZ,kBAAQ,QAAQ,eAAe,aAAa,yBAAyB,MAAM;AAAA,QAC/E;AAAA,MACJ,OAAO;AACH,gBAAQ,KAAK;AACb,gBAAQ,QAAQ,eAAe,gBAAgB,uBAAuB;AAAA,MAC1E;AAAA,IACJ;AAEA,WAAO,MAAM;AACT,UAAI,QAAQ,SAAS;AACjB,gBAAQ,QAAQ,eAAe,gBAAgB,uBAAuB;AAAA,MAC1E;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,SAAS,aAAa,UAAU,CAAC;AAErC,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AAEA,QAAM,EAAE,OAAO,YAAA,IAAgB,qBAAqB,OAAO,UAAU;AAErE,MAAI,eAAe,YAAY;AAE/B,MAAI,eAAe,WAAW;AAC1B,UAAM,gBAAgB,MAAM,SAAA,EAAW;AACvC,UAAM,WAAW,cAAc,CAAC,GAAG;AAEnC,QAAI,UAAU;AACV,YAAM,eAAe,MAAM,UAAU,QAAQ;AAC7C,UAAI,cAAc;AACd,uBAAe,aAAa,UAAU,MAAM;AAAA,MAChD;AAAA,IACJ;AAAA,EACJ;AAEA,SACI,sBAAA,cAACC,QAAAA,WAAQ,WAAU,UAAS,OAAO,YAAY,QAAQ,YAAY,gBAAgB,EAAE,EAAA,uCAChF,QAAA,EAAK,2BAAuB,KAAA,GACzB,sBAAA,cAACC,KAAAA,MAAA,EAAK,MAAK,QAAO,WAAU,kEAAA,CAAkE,GAC7F,KACL,CACJ;AAER;AAEA,SAAS,qBAAqB,OAA0B,QAAgB;AACpE,MAAI;AACJ,MAAI;AAEJ,UAAQ,QAAA;AAAA,IACJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ;AACI,cAAQ;AACR,oBAAc;AACd;AAAA,EAAA;AAGR,SAAO,EAAE,OAAO,YAAA;AACpB;;"}
@@ -1,4 +1,5 @@
1
1
  import React__default from "react";
2
+ import { getTableMeta } from "../../../../../../primitives/Table/useTableManager/util/rows.js";
2
3
  import { useLocalization } from "../../../../../Provider/Localization.js";
3
4
  import { Tooltip } from "../../../../../Tooltip/Tooltip.js";
4
5
  import { Icon } from "../../../../../Icon/Icon.js";
@@ -7,8 +8,8 @@ function RowMoveIndicator(props) {
7
8
  const { texts } = useLocalization();
8
9
  const [show, setShow] = React__default.useState(false);
9
10
  const table = cell.getContext().table;
10
- const tableMeta = table.options.meta;
11
- const columnMeta = cell.column.columnDef.meta ?? {};
11
+ const tableMeta = getTableMeta(table);
12
+ const columnMeta = cell.column.columnDef.meta;
12
13
  const moveReason = tableMeta.editing.getRowMoveReason(cell.row.id);
13
14
  React__default.useEffect(() => {
14
15
  if (cellRef.current) {
@@ -33,18 +34,18 @@ function RowMoveIndicator(props) {
33
34
  return null;
34
35
  }
35
36
  const { title, description } = getMessageFromReason(texts, moveReason);
36
- let columnHeader = columnMeta.header;
37
+ let columnHeader = columnMeta?.header;
37
38
  if (moveReason === "sorting") {
38
39
  const sortedColumns = table.getState().sorting;
39
40
  const columnId = sortedColumns[0]?.id;
40
41
  if (columnId) {
41
42
  const sortedColumn = table.getColumn(columnId);
42
43
  if (sortedColumn) {
43
- columnHeader = sortedColumn.columnDef.meta.header;
44
+ columnHeader = sortedColumn.columnDef.meta?.header;
44
45
  }
45
46
  }
46
47
  }
47
- return /* @__PURE__ */ React__default.createElement(Tooltip, { placement: "bottom", title: description.replace("[COLUMN]", columnHeader) }, /* @__PURE__ */ React__default.createElement("span", { "data-row-move-indicator": true }, /* @__PURE__ */ React__default.createElement(Icon, { name: "info", className: "-mt-0.5 mr-1 !h-4 !w-4 rounded-full bg-white !p-0 text-blue-500" }), title));
48
+ return /* @__PURE__ */ React__default.createElement(Tooltip, { placement: "bottom", title: description.replace("[COLUMN]", columnHeader ?? "") }, /* @__PURE__ */ React__default.createElement("span", { "data-row-move-indicator": true }, /* @__PURE__ */ React__default.createElement(Icon, { name: "info", className: "-mt-0.5 mr-1 !h-4 !w-4 rounded-full bg-white !p-0 text-blue-500" }), title));
48
49
  }
49
50
  function getMessageFromReason(texts, reason) {
50
51
  let title;
@@ -1 +1 @@
1
- {"version":3,"file":"RowMoveIndicator.js","sources":["../../../../../../../src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.tsx"],"sourcesContent":["import type {\n Cell as ReactTableCell,\n TableMeta as ReactTableMeta,\n ColumnMeta as ReactTableColumnMeta,\n} from '@tanstack/react-table';\nimport React from 'react';\n\nimport type { LocalizationTexts } from '@/components';\nimport { Icon, Tooltip, useLocalization } from '@/components';\n\ntype TableRowMoveIndicatorProps<TType = unknown> = {\n cell: ReactTableCell<TType, unknown>;\n cellRef: React.RefObject<HTMLTableCellElement | null>;\n isActiveRow: boolean;\n};\n\ntype Reason = 'search' | 'sorting' | 'filter' | undefined;\n\nexport function RowMoveIndicator<TType = unknown>(props: TableRowMoveIndicatorProps<TType>) {\n const { cell, cellRef, isActiveRow } = props;\n const { texts } = useLocalization();\n const [show, setShow] = React.useState(false);\n const table = cell.getContext().table;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columnMeta = (cell.column.columnDef.meta ?? {}) as ReactTableColumnMeta<TType, unknown>;\n const moveReason = tableMeta.editing.getRowMoveReason(cell.row.id) as Reason;\n\n React.useEffect(() => {\n if (cellRef.current) {\n if (isActiveRow && !!moveReason) {\n const firstChild = cellRef.current.parentElement?.querySelector('td[data-taco=\"cell-control\"]');\n\n if (cellRef.current === firstChild) {\n setShow(true);\n cellRef.current.parentElement?.setAttribute('data-row-editing-move', 'true');\n }\n } else {\n setShow(false);\n cellRef.current.parentElement?.removeAttribute('data-row-editing-move');\n }\n }\n\n return () => {\n if (cellRef.current) {\n cellRef.current.parentElement?.removeAttribute('data-row-editing-move');\n }\n };\n }, [cellRef, isActiveRow, moveReason]);\n\n if (!show) {\n return null;\n }\n\n const { title, description } = getMessageFromReason(texts, moveReason);\n\n let columnHeader = columnMeta.header;\n\n if (moveReason === 'sorting') {\n const sortedColumns = table.getState().sorting;\n const columnId = sortedColumns[0]?.id;\n\n if (columnId) {\n const sortedColumn = table.getColumn(columnId);\n if (sortedColumn) {\n columnHeader = (sortedColumn.columnDef.meta as ReactTableColumnMeta<TType, unknown>).header;\n }\n }\n }\n\n return (\n <Tooltip placement=\"bottom\" title={description.replace('[COLUMN]', columnHeader)}>\n <span data-row-move-indicator>\n <Icon name=\"info\" className=\"-mt-0.5 mr-1 !h-4 !w-4 rounded-full bg-white !p-0 text-blue-500\" />\n {title}\n </span>\n </Tooltip>\n );\n}\n\nfunction getMessageFromReason(texts: LocalizationTexts, reason: Reason) {\n let title;\n let description;\n\n switch (reason) {\n case 'filter':\n title = texts.table3.editing.rowIndicator.rowWillBeHidden;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonFilter;\n break;\n\n case 'search':\n title = texts.table3.editing.rowIndicator.rowWillBeHidden;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonSearch;\n break;\n\n case 'sorting':\n title = texts.table3.editing.rowIndicator.rowWillMove;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonSorting;\n break;\n\n default:\n title = '';\n description = '';\n break;\n }\n\n return { title, description };\n}\n"],"names":["React"],"mappings":";;;;AAkBO,SAAS,iBAAkC,OAA0C;AACxF,QAAM,EAAE,MAAM,SAAS,YAAA,IAAgB;AACvC,QAAM,EAAE,MAAA,IAAU,gBAAA;AAClB,QAAM,CAAC,MAAM,OAAO,IAAIA,eAAM,SAAS,KAAK;AAC5C,QAAM,QAAQ,KAAK,WAAA,EAAa;AAChC,QAAM,YAAY,MAAM,QAAQ;AAChC,QAAM,aAAc,KAAK,OAAO,UAAU,QAAQ,CAAA;AAClD,QAAM,aAAa,UAAU,QAAQ,iBAAiB,KAAK,IAAI,EAAE;AAEjEA,iBAAM,UAAU,MAAM;AAClB,QAAI,QAAQ,SAAS;AACjB,UAAI,eAAe,CAAC,CAAC,YAAY;AAC7B,cAAM,aAAa,QAAQ,QAAQ,eAAe,cAAc,8BAA8B;AAE9F,YAAI,QAAQ,YAAY,YAAY;AAChC,kBAAQ,IAAI;AACZ,kBAAQ,QAAQ,eAAe,aAAa,yBAAyB,MAAM;AAAA,QAC/E;AAAA,MACJ,OAAO;AACH,gBAAQ,KAAK;AACb,gBAAQ,QAAQ,eAAe,gBAAgB,uBAAuB;AAAA,MAC1E;AAAA,IACJ;AAEA,WAAO,MAAM;AACT,UAAI,QAAQ,SAAS;AACjB,gBAAQ,QAAQ,eAAe,gBAAgB,uBAAuB;AAAA,MAC1E;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,SAAS,aAAa,UAAU,CAAC;AAErC,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AAEA,QAAM,EAAE,OAAO,YAAA,IAAgB,qBAAqB,OAAO,UAAU;AAErE,MAAI,eAAe,WAAW;AAE9B,MAAI,eAAe,WAAW;AAC1B,UAAM,gBAAgB,MAAM,SAAA,EAAW;AACvC,UAAM,WAAW,cAAc,CAAC,GAAG;AAEnC,QAAI,UAAU;AACV,YAAM,eAAe,MAAM,UAAU,QAAQ;AAC7C,UAAI,cAAc;AACd,uBAAgB,aAAa,UAAU,KAA8C;AAAA,MACzF;AAAA,IACJ;AAAA,EACJ;AAEA,SACIA,+BAAA,cAAC,WAAQ,WAAU,UAAS,OAAO,YAAY,QAAQ,YAAY,YAAY,EAAA,GAC3EA,+BAAA,cAAC,UAAK,2BAAuB,KAAA,gDACxB,MAAA,EAAK,MAAK,QAAO,WAAU,kEAAA,CAAkE,GAC7F,KACL,CACJ;AAER;AAEA,SAAS,qBAAqB,OAA0B,QAAgB;AACpE,MAAI;AACJ,MAAI;AAEJ,UAAQ,QAAA;AAAA,IACJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ;AACI,cAAQ;AACR,oBAAc;AACd;AAAA,EAAA;AAGR,SAAO,EAAE,OAAO,YAAA;AACpB;"}
1
+ {"version":3,"file":"RowMoveIndicator.js","sources":["../../../../../../../src/components/Table3/components/Columns/Cell/Editing/RowMoveIndicator.tsx"],"sourcesContent":["import type { Cell as ReactTableCell } from '@tanstack/react-table';\nimport React from 'react';\n\nimport type { LocalizationTexts } from '@/components';\nimport { Icon, Tooltip, useLocalization } from '@/components';\nimport { getTableMeta } from '@/primitives/Table/useTableManager/util/rows';\n\ntype TableRowMoveIndicatorProps<TType = unknown> = {\n cell: ReactTableCell<TType, unknown>;\n cellRef: React.RefObject<HTMLTableCellElement | null>;\n isActiveRow: boolean;\n};\n\ntype Reason = 'search' | 'sorting' | 'filter' | undefined;\n\nexport function RowMoveIndicator<TType = unknown>(props: TableRowMoveIndicatorProps<TType>) {\n const { cell, cellRef, isActiveRow } = props;\n const { texts } = useLocalization();\n const [show, setShow] = React.useState(false);\n const table = cell.getContext().table;\n const tableMeta = getTableMeta(table);\n const columnMeta = cell.column.columnDef.meta;\n const moveReason = tableMeta.editing.getRowMoveReason(cell.row.id) as Reason;\n\n React.useEffect(() => {\n if (cellRef.current) {\n if (isActiveRow && !!moveReason) {\n const firstChild = cellRef.current.parentElement?.querySelector('td[data-taco=\"cell-control\"]');\n\n if (cellRef.current === firstChild) {\n setShow(true);\n cellRef.current.parentElement?.setAttribute('data-row-editing-move', 'true');\n }\n } else {\n setShow(false);\n cellRef.current.parentElement?.removeAttribute('data-row-editing-move');\n }\n }\n\n return () => {\n if (cellRef.current) {\n cellRef.current.parentElement?.removeAttribute('data-row-editing-move');\n }\n };\n }, [cellRef, isActiveRow, moveReason]);\n\n if (!show) {\n return null;\n }\n\n const { title, description } = getMessageFromReason(texts, moveReason);\n\n let columnHeader = columnMeta?.header;\n\n if (moveReason === 'sorting') {\n const sortedColumns = table.getState().sorting;\n const columnId = sortedColumns[0]?.id;\n\n if (columnId) {\n const sortedColumn = table.getColumn(columnId);\n if (sortedColumn) {\n columnHeader = sortedColumn.columnDef.meta?.header;\n }\n }\n }\n\n return (\n <Tooltip placement=\"bottom\" title={description.replace('[COLUMN]', columnHeader ?? '')}>\n <span data-row-move-indicator>\n <Icon name=\"info\" className=\"-mt-0.5 mr-1 !h-4 !w-4 rounded-full bg-white !p-0 text-blue-500\" />\n {title}\n </span>\n </Tooltip>\n );\n}\n\nfunction getMessageFromReason(texts: LocalizationTexts, reason: Reason) {\n let title;\n let description;\n\n switch (reason) {\n case 'filter':\n title = texts.table3.editing.rowIndicator.rowWillBeHidden;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonFilter;\n break;\n\n case 'search':\n title = texts.table3.editing.rowIndicator.rowWillBeHidden;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonSearch;\n break;\n\n case 'sorting':\n title = texts.table3.editing.rowIndicator.rowWillMove;\n description = texts.table3.editing.rowIndicator.rowWillMoveReasonSorting;\n break;\n\n default:\n title = '';\n description = '';\n break;\n }\n\n return { title, description };\n}\n"],"names":["React"],"mappings":";;;;;AAeO,SAAS,iBAAkC,OAA0C;AACxF,QAAM,EAAE,MAAM,SAAS,YAAA,IAAgB;AACvC,QAAM,EAAE,MAAA,IAAU,gBAAA;AAClB,QAAM,CAAC,MAAM,OAAO,IAAIA,eAAM,SAAS,KAAK;AAC5C,QAAM,QAAQ,KAAK,WAAA,EAAa;AAChC,QAAM,YAAY,aAAa,KAAK;AACpC,QAAM,aAAa,KAAK,OAAO,UAAU;AACzC,QAAM,aAAa,UAAU,QAAQ,iBAAiB,KAAK,IAAI,EAAE;AAEjEA,iBAAM,UAAU,MAAM;AAClB,QAAI,QAAQ,SAAS;AACjB,UAAI,eAAe,CAAC,CAAC,YAAY;AAC7B,cAAM,aAAa,QAAQ,QAAQ,eAAe,cAAc,8BAA8B;AAE9F,YAAI,QAAQ,YAAY,YAAY;AAChC,kBAAQ,IAAI;AACZ,kBAAQ,QAAQ,eAAe,aAAa,yBAAyB,MAAM;AAAA,QAC/E;AAAA,MACJ,OAAO;AACH,gBAAQ,KAAK;AACb,gBAAQ,QAAQ,eAAe,gBAAgB,uBAAuB;AAAA,MAC1E;AAAA,IACJ;AAEA,WAAO,MAAM;AACT,UAAI,QAAQ,SAAS;AACjB,gBAAQ,QAAQ,eAAe,gBAAgB,uBAAuB;AAAA,MAC1E;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,SAAS,aAAa,UAAU,CAAC;AAErC,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AAEA,QAAM,EAAE,OAAO,YAAA,IAAgB,qBAAqB,OAAO,UAAU;AAErE,MAAI,eAAe,YAAY;AAE/B,MAAI,eAAe,WAAW;AAC1B,UAAM,gBAAgB,MAAM,SAAA,EAAW;AACvC,UAAM,WAAW,cAAc,CAAC,GAAG;AAEnC,QAAI,UAAU;AACV,YAAM,eAAe,MAAM,UAAU,QAAQ;AAC7C,UAAI,cAAc;AACd,uBAAe,aAAa,UAAU,MAAM;AAAA,MAChD;AAAA,IACJ;AAAA,EACJ;AAEA,SACIA,+BAAA,cAAC,WAAQ,WAAU,UAAS,OAAO,YAAY,QAAQ,YAAY,gBAAgB,EAAE,EAAA,gDAChF,QAAA,EAAK,2BAAuB,KAAA,GACzBA,+BAAA,cAAC,MAAA,EAAK,MAAK,QAAO,WAAU,kEAAA,CAAkE,GAC7F,KACL,CACJ;AAER;AAEA,SAAS,qBAAqB,OAA0B,QAAgB;AACpE,MAAI;AACJ,MAAI;AAEJ,UAAQ,QAAA;AAAA,IACJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ,KAAK;AACD,cAAQ,MAAM,OAAO,QAAQ,aAAa;AAC1C,oBAAc,MAAM,OAAO,QAAQ,aAAa;AAChD;AAAA,IAEJ;AACI,cAAQ;AACR,oBAAc;AACd;AAAA,EAAA;AAGR,SAAO,EAAE,OAAO,YAAA;AACpB;"}
@@ -6,6 +6,7 @@ const useLazyEffect = require("../../../../../hooks/useLazyEffect.cjs");
6
6
  const util$1 = require("../../../../../primitives/Table/Core/components/Columns/Cell/util.cjs");
7
7
  const RowContext = require("../../../../../primitives/Table/Core/components/Row/RowContext.cjs");
8
8
  const dataTypes = require("../../../../../primitives/Table/useTableManager/util/dataTypes.cjs");
9
+ const rows = require("../../../../../primitives/Table/useTableManager/util/rows.cjs");
9
10
  const date = require("../../../../../utils/date.cjs");
10
11
  const dom = require("../../../../../utils/dom.cjs");
11
12
  const keyboard = require("../../../../../utils/keyboard.cjs");
@@ -23,10 +24,10 @@ function EditingControlCell(props) {
23
24
  const { rowIndex } = React.useContext(RowContext.RowContext);
24
25
  const { table } = cell.getContext();
25
26
  const locale = Localization.useLocalization();
26
- const tableMeta = table.options.meta;
27
+ const tableMeta = rows.getTableMeta(table);
27
28
  const columnMeta = cell.column.columnDef.meta;
28
29
  const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;
29
- const type = columnMeta.control ?? "input";
30
+ const type = columnMeta?.control ?? "input";
30
31
  const handleFocus = util.useEditingCellAutofocus(props);
31
32
  const value = cell.getValue();
32
33
  const rowChanges = tableMeta.editing.getRowValue(cell.row.id);
@@ -43,11 +44,11 @@ function EditingControlCell(props) {
43
44
  const handleChange = React.useCallback(
44
45
  (nextValue) => {
45
46
  let hasChanged = false;
46
- if (columnMeta.dataType === "date") {
47
+ if (columnMeta?.dataType === "date") {
47
48
  hasChanged = !dateFns.isSameDay(new Date(nextValue), new Date(value));
48
- } else if (columnMeta.dataType === "datetime") {
49
+ } else if (columnMeta?.dataType === "datetime") {
49
50
  hasChanged = !dateFns.isEqual(new Date(nextValue), new Date(value));
50
- } else if (columnMeta.dataType === "time") {
51
+ } else if (columnMeta?.dataType === "time") {
51
52
  const next = new Date(nextValue);
52
53
  const current = new Date(value);
53
54
  hasChanged = !(next.getHours() === current.getHours() && next.getMinutes() === current.getMinutes());
@@ -59,7 +60,7 @@ function EditingControlCell(props) {
59
60
  shouldRunUpdate.current = hasNonTextControl;
60
61
  }
61
62
  },
62
- [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value, columnMeta.dataType]
63
+ [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value, columnMeta?.dataType]
63
64
  );
64
65
  const handleBlur = React.useCallback(
65
66
  (event) => {
@@ -78,13 +79,13 @@ function EditingControlCell(props) {
78
79
  tableMeta.editing.onCellChanged(cell, rowIndex, void 0, true, true);
79
80
  }, [cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]);
80
81
  const controlProps = {
81
- dataType: columnMeta.dataType,
82
+ dataType: columnMeta?.dataType,
82
83
  disabled: tableMeta.editing.getRowStatus(cell.row.id) === "saving",
83
84
  fontSize: tableMeta.fontSize.size,
84
85
  id: cell.column.id,
85
86
  invalid: !!error,
86
87
  isDetailedMode: tableMeta.editing.isDetailedMode,
87
- isTruncated: !!columnMeta.enableTruncate,
88
+ isTruncated: !!columnMeta?.enableTruncate,
88
89
  locale: locale.locale,
89
90
  onBlur: handleBlur,
90
91
  onChange: handleChange,
@@ -1 +1 @@
1
- {"version":3,"file":"EditingControlCell.cjs","sources":["../../../../../../src/components/Table3/components/Columns/Cell/EditingControlCell.tsx"],"sourcesContent":["import type { TableMeta as ReactTableMeta, ColumnMeta as ReactTableColumnMeta } from '@tanstack/react-table';\nimport { isDate, isEqual as isEqualDate, isSameDay } from 'date-fns';\nimport React from 'react';\n\nimport { Checkbox, Datepicker, Field, Input, useLocalization, Switch } from '@/components';\nimport { useLazyEffect } from '@/hooks/useLazyEffect';\nimport { getCellAttributes } from '@/primitives/Table/Core/components/Columns/Cell/util';\nimport { RowContext } from '@/primitives/Table/Core/components/Row/RowContext';\nimport type { TableCellRendererProps } from '@/primitives/Table/Core/types';\nimport type { TableColumnDataType, TableColumnRendererControl, TableFontSize } from '@/primitives/Table/types';\nimport { getDataTypeProperties } from '@/primitives/Table/useTableManager/util/dataTypes';\nimport * as date from '@/utils/date';\nimport { isElementInsideOrTriggeredFromContainer } from '@/utils/dom';\nimport { isPressingMetaKey } from '@/utils/keyboard';\n\nimport { RowMoveIndicator } from './Editing/RowMoveIndicator';\nimport { TextareaWithAutosizing } from './Editing/TextareaWithAutosizing';\nimport { useEditingCellAutofocus } from './util';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const { table } = cell.getContext();\n const locale = useLocalization();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columnMeta = cell.column.columnDef.meta as ReactTableColumnMeta<TType, unknown>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const type = columnMeta.control ?? 'input';\n const handleFocus = useEditingCellAutofocus<TType>(props);\n const value = cell.getValue();\n const rowChanges = tableMeta.editing.getRowValue(cell.row.id);\n const shouldRunUpdate = React.useRef(false);\n\n // some controls, like select2, should trigger cell changed (validation, updates) as the value changes\n const hasNonTextControl = React.useMemo(() => {\n return (\n typeof type === 'function' &&\n !!cellRef.current?.querySelector('[data-taco=\"Select2\"],[data-taco=\"switch\"],[data-taco=\"checkbox\"]')\n );\n }, [cellRef.current]);\n\n useLazyEffect(() => {\n // Use an effect instead of a change handler to prevent onEditingChange from running with a stale js closure during on-the-fly creation.\n if (hasNonTextControl && shouldRunUpdate.current) {\n tableMeta.editing.onCellChanged(cell, rowIndex, value, true, false);\n // prevent risk of infinite loop, in case there'd ever be an updater function with two values that update each other.\n shouldRunUpdate.current = false;\n }\n }, [value]);\n\n const handleChange = React.useCallback(\n (nextValue: unknown) => {\n let hasChanged = false;\n\n if (columnMeta.dataType === 'date') {\n hasChanged = !isSameDay(new Date(nextValue as string | Date), new Date(value as string | Date));\n } else if (columnMeta.dataType === 'datetime') {\n hasChanged = !isEqualDate(new Date(nextValue as string | Date), new Date(value as string | Date));\n } else if (columnMeta.dataType === 'time') {\n const next = new Date(nextValue as string | Date);\n const current = new Date(value as string | Date);\n hasChanged = !(next.getHours() === current.getHours() && next.getMinutes() === current.getMinutes());\n } else {\n hasChanged = nextValue !== value;\n }\n\n if (hasChanged) {\n tableMeta.editing.setCellValue(cell, rowIndex, nextValue);\n shouldRunUpdate.current = hasNonTextControl;\n }\n },\n [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value, columnMeta.dataType]\n );\n\n const handleBlur = React.useCallback(\n (event: React.FocusEvent) => {\n if (event && isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget)) {\n return;\n }\n\n requestAnimationFrame(() => {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl, true);\n });\n },\n [hasNonTextControl, cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]\n );\n\n const error = tableMeta.editing.getCellError<TType>(cell);\n\n const handleExitDetailedMode = React.useCallback(() => {\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, true, true);\n }, [cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]);\n\n const controlProps = {\n dataType: columnMeta.dataType,\n disabled: tableMeta.editing.getRowStatus(cell.row.id) === 'saving',\n fontSize: tableMeta.fontSize.size,\n id: cell.column.id,\n invalid: !!error,\n isDetailedMode: tableMeta.editing.isDetailedMode,\n isTruncated: !!columnMeta.enableTruncate,\n locale: locale.locale,\n onBlur: handleBlur,\n onChange: handleChange,\n onExitDetailedMode: handleExitDetailedMode,\n row: cell.row.original,\n rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),\n tabIndex: isActiveRow ? 0 : -1,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type,\n value,\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\n 'data-taco': 'cell-control',\n onFocus: handleFocus,\n ref: cellRef,\n tabIndex: -1,\n };\n\n return (\n <td {...cellAttributes}>\n <Field invalid={!!error} message={error}>\n <MemoedEditingCell<TType> {...controlProps} />\n </Field>\n {\n // we show row move indicator here within the cell rather than the row because it is\n // an editing only feature, and we don't want to leak editing into the shared row component\n }\n <RowMoveIndicator cell={cell} cellRef={cellRef} isActiveRow={isActiveRow} />\n </td>\n );\n}\n\ntype MemoedEditingCellProps<TType = unknown, TValue = unknown> = {\n dataType?: TableColumnDataType;\n disabled: boolean;\n fontSize: TableFontSize;\n id: string;\n invalid: boolean;\n isDetailedMode: boolean;\n isTruncated: boolean;\n locale: string;\n onBlur: (event: React.FocusEvent) => void;\n onChange: (value: TValue) => void;\n onExitDetailedMode: () => void;\n row: TType;\n rowPendingChanges: Partial<TType> | undefined;\n tabIndex?: number;\n toggleDetailedMode: (detailed: React.SetStateAction<boolean>) => void;\n type: TableColumnRendererControl<TType>;\n value: TValue;\n};\n\nconst MemoedEditingCell = React.memo(function MemoedEditingCell<TType = unknown>(props: MemoedEditingCellProps<TType>) {\n const {\n dataType,\n disabled,\n fontSize,\n id,\n invalid,\n isDetailedMode,\n isTruncated,\n locale,\n onBlur,\n onChange,\n onExitDetailedMode,\n row,\n rowPendingChanges,\n tabIndex = -1,\n toggleDetailedMode,\n type = 'input',\n value,\n } = props;\n const controlRef = React.useRef<HTMLElement>(null);\n const currentValue = row[id as keyof TType];\n const commonProps = {\n disabled,\n onBlur,\n ref: controlRef,\n tabIndex,\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target.readOnly) {\n return;\n }\n\n // prevent active row navigation while in detailed mode\n if (\n isDetailedMode &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.stopPropagation();\n }\n\n // enter or exit detail mode when pressing enter\n if (event.key === 'Enter') {\n // textareas support shift and enter, don't prevent default in that case\n if (event.shiftKey && isDetailedMode) {\n return;\n }\n\n event.preventDefault();\n\n if (isDetailedMode) {\n target.select?.();\n onExitDetailedMode();\n } else {\n target.setSelectionRange?.(target.value?.length, target.value?.length);\n }\n\n toggleDetailedMode(editing => !editing);\n return;\n }\n\n // reset the value, or exit edit mode when pressing escape\n if (event.key === 'Escape') {\n if (isDetailedMode) {\n event.preventDefault();\n toggleDetailedMode(false);\n\n if (value !== currentValue) {\n props.onChange(currentValue);\n }\n\n // have to let onChange run before selecting, otherwise the value changes\n requestAnimationFrame(() => target.select?.());\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (!isPressingMetaKey(event) && (/^[a-z0-9]$/iu.test(event.key) || event.key === 'Backspace')) {\n toggleDetailedMode(true);\n }\n };\n\n const handlePaste = () => {\n if (!isDetailedMode) {\n toggleDetailedMode(true);\n }\n };\n\n if (typeof type === 'function') {\n const controlFnProps = {\n ...commonProps,\n invalid,\n setValue: onChange,\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n const target = (event.target as HTMLElement) || null;\n // it make sense to handle keydown for the custom edititng controls only if target is either input or textarea\n if (target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')) {\n handleInputKeyDown(event as React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>);\n }\n },\n onPaste: handlePaste,\n value,\n };\n\n return type(controlFnProps, { ...row, ...rowPendingChanges });\n }\n\n if (type === 'switch') {\n return (\n <Switch\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.Ref<HTMLInputElement>}\n />\n );\n }\n\n if (type === 'checkbox') {\n return (\n <Checkbox\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.Ref<HTMLInputElement>}\n />\n );\n }\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!isDetailedMode) {\n event.target.select();\n }\n };\n\n if (type === 'datepicker') {\n const valueAsDate = date.parse(value as Date | string | undefined);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail as Date;\n\n if (!valueAsDate || !newDate || (isDate(valueAsDate) && isDate(newDate) && !date.isWeakEqual(valueAsDate, newDate))) {\n props.onChange(newDate);\n }\n };\n\n const handleDatepickerInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const target = event.target as HTMLInputElement;\n\n if (isDetailedMode && event.key === 'Enter') {\n // If the field is empty, save as null before exiting detailed mode\n // This prevents the value from reverting to the previous value\n if (target.value === '') {\n onChange(null);\n } else {\n // When value is not empty, prevent handleInputKeyDown and give full control to Datepicker\n // The datepicker will exit \"detailed mode\" by itself when a valid date change is triggered\n target.select?.();\n return;\n }\n }\n\n handleInputKeyDown(event);\n };\n\n return (\n <Datepicker\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleDatepickerInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLInputElement>}\n value={valueAsDate}\n />\n );\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const dataTypeProps = getDataTypeProperties(dataType);\n onChange(dataTypeProps.parse?.(event.target.value, locale) ?? event.target.value);\n };\n\n if (type === 'textarea') {\n return (\n <TextareaWithAutosizing\n {...commonProps}\n fontSize={fontSize}\n invalid={invalid}\n isTruncated={isTruncated}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLTextAreaElement>}\n value={String(value ?? '')}\n />\n );\n }\n\n return (\n <Input\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLInputElement>}\n type={dataType === 'number' ? 'number' : undefined}\n value={dataType === 'number' ? (value as number) : String(value ?? '')}\n />\n );\n}) as <TType = unknown>(props: MemoedEditingCellProps<TType>) => React.JSX.Element;\n"],"names":["RowContext","useLocalization","useEditingCellAutofocus","useLazyEffect","isSameDay","isEqualDate","isElementInsideOrTriggeredFromContainer","getCellAttributes","Field","RowMoveIndicator","MemoedEditingCell","isPressingMetaKey","Switch","Checkbox","date.parse","handleChange","isDate","date.isWeakEqual","Datepicker","getDataTypeProperties","TextareaWithAutosizing","Input"],"mappings":"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"}
1
+ {"version":3,"file":"EditingControlCell.cjs","sources":["../../../../../../src/components/Table3/components/Columns/Cell/EditingControlCell.tsx"],"sourcesContent":["import { isDate, isEqual as isEqualDate, isSameDay } from 'date-fns';\nimport React from 'react';\n\nimport { Checkbox, Datepicker, Field, Input, useLocalization, Switch } from '@/components';\nimport { useLazyEffect } from '@/hooks/useLazyEffect';\nimport { getCellAttributes } from '@/primitives/Table/Core/components/Columns/Cell/util';\nimport { RowContext } from '@/primitives/Table/Core/components/Row/RowContext';\nimport type { TableCellRendererProps } from '@/primitives/Table/Core/types';\nimport type { TableColumnDataType, TableColumnRendererControl, TableFontSize } from '@/primitives/Table/types';\nimport { getDataTypeProperties } from '@/primitives/Table/useTableManager/util/dataTypes';\nimport { getTableMeta } from '@/primitives/Table/useTableManager/util/rows';\nimport * as date from '@/utils/date';\nimport { isElementInsideOrTriggeredFromContainer } from '@/utils/dom';\nimport { isPressingMetaKey } from '@/utils/keyboard';\n\nimport { RowMoveIndicator } from './Editing/RowMoveIndicator';\nimport { TextareaWithAutosizing } from './Editing/TextareaWithAutosizing';\nimport { useEditingCellAutofocus } from './util';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const { table } = cell.getContext();\n const locale = useLocalization();\n const tableMeta = getTableMeta(table);\n const columnMeta = cell.column.columnDef.meta;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const type = columnMeta?.control ?? 'input';\n const handleFocus = useEditingCellAutofocus<TType>(props);\n const value = cell.getValue();\n const rowChanges = tableMeta.editing.getRowValue(cell.row.id);\n const shouldRunUpdate = React.useRef(false);\n\n // some controls, like select2, should trigger cell changed (validation, updates) as the value changes\n const hasNonTextControl = React.useMemo(() => {\n return (\n typeof type === 'function' &&\n !!cellRef.current?.querySelector('[data-taco=\"Select2\"],[data-taco=\"switch\"],[data-taco=\"checkbox\"]')\n );\n }, [cellRef.current]);\n\n useLazyEffect(() => {\n // Use an effect instead of a change handler to prevent onEditingChange from running with a stale js closure during on-the-fly creation.\n if (hasNonTextControl && shouldRunUpdate.current) {\n tableMeta.editing.onCellChanged(cell, rowIndex, value, true, false);\n // prevent risk of infinite loop, in case there'd ever be an updater function with two values that update each other.\n shouldRunUpdate.current = false;\n }\n }, [value]);\n\n const handleChange = React.useCallback(\n (nextValue: unknown) => {\n let hasChanged = false;\n\n if (columnMeta?.dataType === 'date') {\n hasChanged = !isSameDay(new Date(nextValue as string | Date), new Date(value as string | Date));\n } else if (columnMeta?.dataType === 'datetime') {\n hasChanged = !isEqualDate(new Date(nextValue as string | Date), new Date(value as string | Date));\n } else if (columnMeta?.dataType === 'time') {\n const next = new Date(nextValue as string | Date);\n const current = new Date(value as string | Date);\n hasChanged = !(next.getHours() === current.getHours() && next.getMinutes() === current.getMinutes());\n } else {\n hasChanged = nextValue !== value;\n }\n\n if (hasChanged) {\n tableMeta.editing.setCellValue(cell, rowIndex, nextValue);\n shouldRunUpdate.current = hasNonTextControl;\n }\n },\n [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value, columnMeta?.dataType]\n );\n\n const handleBlur = React.useCallback(\n (event: React.FocusEvent) => {\n if (event && isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget)) {\n return;\n }\n\n requestAnimationFrame(() => {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl, true);\n });\n },\n [hasNonTextControl, cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]\n );\n\n const error = tableMeta.editing.getCellError<TType>(cell);\n\n const handleExitDetailedMode = React.useCallback(() => {\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, true, true);\n }, [cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]);\n\n const controlProps = {\n dataType: columnMeta?.dataType,\n disabled: tableMeta.editing.getRowStatus(cell.row.id) === 'saving',\n fontSize: tableMeta.fontSize.size,\n id: cell.column.id,\n invalid: !!error,\n isDetailedMode: tableMeta.editing.isDetailedMode,\n isTruncated: !!columnMeta?.enableTruncate,\n locale: locale.locale,\n onBlur: handleBlur,\n onChange: handleChange,\n onExitDetailedMode: handleExitDetailedMode,\n row: cell.row.original,\n rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),\n tabIndex: isActiveRow ? 0 : -1,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type,\n value,\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\n 'data-taco': 'cell-control',\n onFocus: handleFocus,\n ref: cellRef,\n tabIndex: -1,\n };\n\n return (\n <td {...cellAttributes}>\n <Field invalid={!!error} message={error}>\n <MemoedEditingCell<TType> {...controlProps} />\n </Field>\n {\n // we show row move indicator here within the cell rather than the row because it is\n // an editing only feature, and we don't want to leak editing into the shared row component\n }\n <RowMoveIndicator cell={cell} cellRef={cellRef} isActiveRow={isActiveRow} />\n </td>\n );\n}\n\ntype MemoedEditingCellProps<TType = unknown, TValue = unknown> = {\n dataType?: TableColumnDataType;\n disabled: boolean;\n fontSize: TableFontSize;\n id: string;\n invalid: boolean;\n isDetailedMode: boolean;\n isTruncated: boolean;\n locale: string;\n onBlur: (event: React.FocusEvent) => void;\n onChange: (value: TValue) => void;\n onExitDetailedMode: () => void;\n row: TType;\n rowPendingChanges: Partial<TType> | undefined;\n tabIndex?: number;\n toggleDetailedMode: (detailed: React.SetStateAction<boolean>) => void;\n type: TableColumnRendererControl<TType>;\n value: TValue;\n};\n\nconst MemoedEditingCell = React.memo(function MemoedEditingCell<TType = unknown>(props: MemoedEditingCellProps<TType>) {\n const {\n dataType,\n disabled,\n fontSize,\n id,\n invalid,\n isDetailedMode,\n isTruncated,\n locale,\n onBlur,\n onChange,\n onExitDetailedMode,\n row,\n rowPendingChanges,\n tabIndex = -1,\n toggleDetailedMode,\n type = 'input',\n value,\n } = props;\n const controlRef = React.useRef<HTMLElement>(null);\n const currentValue = row[id as keyof TType];\n const commonProps = {\n disabled,\n onBlur,\n ref: controlRef,\n tabIndex,\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target.readOnly) {\n return;\n }\n\n // prevent active row navigation while in detailed mode\n if (\n isDetailedMode &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.stopPropagation();\n }\n\n // enter or exit detail mode when pressing enter\n if (event.key === 'Enter') {\n // textareas support shift and enter, don't prevent default in that case\n if (event.shiftKey && isDetailedMode) {\n return;\n }\n\n event.preventDefault();\n\n if (isDetailedMode) {\n target.select?.();\n onExitDetailedMode();\n } else {\n target.setSelectionRange?.(target.value?.length, target.value?.length);\n }\n\n toggleDetailedMode(editing => !editing);\n return;\n }\n\n // reset the value, or exit edit mode when pressing escape\n if (event.key === 'Escape') {\n if (isDetailedMode) {\n event.preventDefault();\n toggleDetailedMode(false);\n\n if (value !== currentValue) {\n props.onChange(currentValue);\n }\n\n // have to let onChange run before selecting, otherwise the value changes\n requestAnimationFrame(() => target.select?.());\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (!isPressingMetaKey(event) && (/^[a-z0-9]$/iu.test(event.key) || event.key === 'Backspace')) {\n toggleDetailedMode(true);\n }\n };\n\n const handlePaste = () => {\n if (!isDetailedMode) {\n toggleDetailedMode(true);\n }\n };\n\n if (typeof type === 'function') {\n const controlFnProps = {\n ...commonProps,\n invalid,\n setValue: onChange,\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n const target = (event.target as HTMLElement) || null;\n // it make sense to handle keydown for the custom edititng controls only if target is either input or textarea\n if (target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')) {\n handleInputKeyDown(event as React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>);\n }\n },\n onPaste: handlePaste,\n value,\n };\n\n return type(controlFnProps, { ...row, ...rowPendingChanges });\n }\n\n if (type === 'switch') {\n return (\n <Switch\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.Ref<HTMLInputElement>}\n />\n );\n }\n\n if (type === 'checkbox') {\n return (\n <Checkbox\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.Ref<HTMLInputElement>}\n />\n );\n }\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!isDetailedMode) {\n event.target.select();\n }\n };\n\n if (type === 'datepicker') {\n const valueAsDate = date.parse(value as Date | string | undefined);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail as Date;\n\n if (!valueAsDate || !newDate || (isDate(valueAsDate) && isDate(newDate) && !date.isWeakEqual(valueAsDate, newDate))) {\n props.onChange(newDate);\n }\n };\n\n const handleDatepickerInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const target = event.target as HTMLInputElement;\n\n if (isDetailedMode && event.key === 'Enter') {\n // If the field is empty, save as null before exiting detailed mode\n // This prevents the value from reverting to the previous value\n if (target.value === '') {\n onChange(null);\n } else {\n // When value is not empty, prevent handleInputKeyDown and give full control to Datepicker\n // The datepicker will exit \"detailed mode\" by itself when a valid date change is triggered\n target.select?.();\n return;\n }\n }\n\n handleInputKeyDown(event);\n };\n\n return (\n <Datepicker\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleDatepickerInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLInputElement>}\n value={valueAsDate}\n />\n );\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const dataTypeProps = getDataTypeProperties(dataType);\n onChange(dataTypeProps.parse?.(event.target.value, locale) ?? event.target.value);\n };\n\n if (type === 'textarea') {\n return (\n <TextareaWithAutosizing\n {...commonProps}\n fontSize={fontSize}\n invalid={invalid}\n isTruncated={isTruncated}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLTextAreaElement>}\n value={String(value ?? '')}\n />\n );\n }\n\n return (\n <Input\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLInputElement>}\n type={dataType === 'number' ? 'number' : undefined}\n value={dataType === 'number' ? (value as number) : String(value ?? '')}\n />\n );\n}) as <TType = unknown>(props: MemoedEditingCellProps<TType>) => React.JSX.Element;\n"],"names":["RowContext","useLocalization","getTableMeta","useEditingCellAutofocus","useLazyEffect","isSameDay","isEqualDate","isElementInsideOrTriggeredFromContainer","getCellAttributes","Field","RowMoveIndicator","MemoedEditingCell","isPressingMetaKey","Switch","Checkbox","date.parse","handleChange","isDate","date.isWeakEqual","Datepicker","getDataTypeProperties","TextareaWithAutosizing","Input"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { useLazyEffect } from "../../../../../hooks/useLazyEffect.js";
4
4
  import { getCellAttributes } from "../../../../../primitives/Table/Core/components/Columns/Cell/util.js";
5
5
  import { RowContext } from "../../../../../primitives/Table/Core/components/Row/RowContext.js";
6
6
  import { getDataTypeProperties } from "../../../../../primitives/Table/useTableManager/util/dataTypes.js";
7
+ import { getTableMeta } from "../../../../../primitives/Table/useTableManager/util/rows.js";
7
8
  import { parse, isWeakEqual } from "../../../../../utils/date.js";
8
9
  import { isElementInsideOrTriggeredFromContainer } from "../../../../../utils/dom.js";
9
10
  import { isPressingMetaKey } from "../../../../../utils/keyboard.js";
@@ -21,10 +22,10 @@ function EditingControlCell(props) {
21
22
  const { rowIndex } = React__default.useContext(RowContext);
22
23
  const { table } = cell.getContext();
23
24
  const locale = useLocalization();
24
- const tableMeta = table.options.meta;
25
+ const tableMeta = getTableMeta(table);
25
26
  const columnMeta = cell.column.columnDef.meta;
26
27
  const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;
27
- const type = columnMeta.control ?? "input";
28
+ const type = columnMeta?.control ?? "input";
28
29
  const handleFocus = useEditingCellAutofocus(props);
29
30
  const value = cell.getValue();
30
31
  const rowChanges = tableMeta.editing.getRowValue(cell.row.id);
@@ -41,11 +42,11 @@ function EditingControlCell(props) {
41
42
  const handleChange = React__default.useCallback(
42
43
  (nextValue) => {
43
44
  let hasChanged = false;
44
- if (columnMeta.dataType === "date") {
45
+ if (columnMeta?.dataType === "date") {
45
46
  hasChanged = !isSameDay(new Date(nextValue), new Date(value));
46
- } else if (columnMeta.dataType === "datetime") {
47
+ } else if (columnMeta?.dataType === "datetime") {
47
48
  hasChanged = !isEqual(new Date(nextValue), new Date(value));
48
- } else if (columnMeta.dataType === "time") {
49
+ } else if (columnMeta?.dataType === "time") {
49
50
  const next = new Date(nextValue);
50
51
  const current = new Date(value);
51
52
  hasChanged = !(next.getHours() === current.getHours() && next.getMinutes() === current.getMinutes());
@@ -57,7 +58,7 @@ function EditingControlCell(props) {
57
58
  shouldRunUpdate.current = hasNonTextControl;
58
59
  }
59
60
  },
60
- [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value, columnMeta.dataType]
61
+ [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value, columnMeta?.dataType]
61
62
  );
62
63
  const handleBlur = React__default.useCallback(
63
64
  (event) => {
@@ -76,13 +77,13 @@ function EditingControlCell(props) {
76
77
  tableMeta.editing.onCellChanged(cell, rowIndex, void 0, true, true);
77
78
  }, [cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]);
78
79
  const controlProps = {
79
- dataType: columnMeta.dataType,
80
+ dataType: columnMeta?.dataType,
80
81
  disabled: tableMeta.editing.getRowStatus(cell.row.id) === "saving",
81
82
  fontSize: tableMeta.fontSize.size,
82
83
  id: cell.column.id,
83
84
  invalid: !!error,
84
85
  isDetailedMode: tableMeta.editing.isDetailedMode,
85
- isTruncated: !!columnMeta.enableTruncate,
86
+ isTruncated: !!columnMeta?.enableTruncate,
86
87
  locale: locale.locale,
87
88
  onBlur: handleBlur,
88
89
  onChange: handleChange,
@@ -1 +1 @@
1
- {"version":3,"file":"EditingControlCell.js","sources":["../../../../../../src/components/Table3/components/Columns/Cell/EditingControlCell.tsx"],"sourcesContent":["import type { TableMeta as ReactTableMeta, ColumnMeta as ReactTableColumnMeta } from '@tanstack/react-table';\nimport { isDate, isEqual as isEqualDate, isSameDay } from 'date-fns';\nimport React from 'react';\n\nimport { Checkbox, Datepicker, Field, Input, useLocalization, Switch } from '@/components';\nimport { useLazyEffect } from '@/hooks/useLazyEffect';\nimport { getCellAttributes } from '@/primitives/Table/Core/components/Columns/Cell/util';\nimport { RowContext } from '@/primitives/Table/Core/components/Row/RowContext';\nimport type { TableCellRendererProps } from '@/primitives/Table/Core/types';\nimport type { TableColumnDataType, TableColumnRendererControl, TableFontSize } from '@/primitives/Table/types';\nimport { getDataTypeProperties } from '@/primitives/Table/useTableManager/util/dataTypes';\nimport * as date from '@/utils/date';\nimport { isElementInsideOrTriggeredFromContainer } from '@/utils/dom';\nimport { isPressingMetaKey } from '@/utils/keyboard';\n\nimport { RowMoveIndicator } from './Editing/RowMoveIndicator';\nimport { TextareaWithAutosizing } from './Editing/TextareaWithAutosizing';\nimport { useEditingCellAutofocus } from './util';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const { table } = cell.getContext();\n const locale = useLocalization();\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const columnMeta = cell.column.columnDef.meta as ReactTableColumnMeta<TType, unknown>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const type = columnMeta.control ?? 'input';\n const handleFocus = useEditingCellAutofocus<TType>(props);\n const value = cell.getValue();\n const rowChanges = tableMeta.editing.getRowValue(cell.row.id);\n const shouldRunUpdate = React.useRef(false);\n\n // some controls, like select2, should trigger cell changed (validation, updates) as the value changes\n const hasNonTextControl = React.useMemo(() => {\n return (\n typeof type === 'function' &&\n !!cellRef.current?.querySelector('[data-taco=\"Select2\"],[data-taco=\"switch\"],[data-taco=\"checkbox\"]')\n );\n }, [cellRef.current]);\n\n useLazyEffect(() => {\n // Use an effect instead of a change handler to prevent onEditingChange from running with a stale js closure during on-the-fly creation.\n if (hasNonTextControl && shouldRunUpdate.current) {\n tableMeta.editing.onCellChanged(cell, rowIndex, value, true, false);\n // prevent risk of infinite loop, in case there'd ever be an updater function with two values that update each other.\n shouldRunUpdate.current = false;\n }\n }, [value]);\n\n const handleChange = React.useCallback(\n (nextValue: unknown) => {\n let hasChanged = false;\n\n if (columnMeta.dataType === 'date') {\n hasChanged = !isSameDay(new Date(nextValue as string | Date), new Date(value as string | Date));\n } else if (columnMeta.dataType === 'datetime') {\n hasChanged = !isEqualDate(new Date(nextValue as string | Date), new Date(value as string | Date));\n } else if (columnMeta.dataType === 'time') {\n const next = new Date(nextValue as string | Date);\n const current = new Date(value as string | Date);\n hasChanged = !(next.getHours() === current.getHours() && next.getMinutes() === current.getMinutes());\n } else {\n hasChanged = nextValue !== value;\n }\n\n if (hasChanged) {\n tableMeta.editing.setCellValue(cell, rowIndex, nextValue);\n shouldRunUpdate.current = hasNonTextControl;\n }\n },\n [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value, columnMeta.dataType]\n );\n\n const handleBlur = React.useCallback(\n (event: React.FocusEvent) => {\n if (event && isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget)) {\n return;\n }\n\n requestAnimationFrame(() => {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl, true);\n });\n },\n [hasNonTextControl, cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]\n );\n\n const error = tableMeta.editing.getCellError<TType>(cell);\n\n const handleExitDetailedMode = React.useCallback(() => {\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, true, true);\n }, [cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]);\n\n const controlProps = {\n dataType: columnMeta.dataType,\n disabled: tableMeta.editing.getRowStatus(cell.row.id) === 'saving',\n fontSize: tableMeta.fontSize.size,\n id: cell.column.id,\n invalid: !!error,\n isDetailedMode: tableMeta.editing.isDetailedMode,\n isTruncated: !!columnMeta.enableTruncate,\n locale: locale.locale,\n onBlur: handleBlur,\n onChange: handleChange,\n onExitDetailedMode: handleExitDetailedMode,\n row: cell.row.original,\n rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),\n tabIndex: isActiveRow ? 0 : -1,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type,\n value,\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\n 'data-taco': 'cell-control',\n onFocus: handleFocus,\n ref: cellRef,\n tabIndex: -1,\n };\n\n return (\n <td {...cellAttributes}>\n <Field invalid={!!error} message={error}>\n <MemoedEditingCell<TType> {...controlProps} />\n </Field>\n {\n // we show row move indicator here within the cell rather than the row because it is\n // an editing only feature, and we don't want to leak editing into the shared row component\n }\n <RowMoveIndicator cell={cell} cellRef={cellRef} isActiveRow={isActiveRow} />\n </td>\n );\n}\n\ntype MemoedEditingCellProps<TType = unknown, TValue = unknown> = {\n dataType?: TableColumnDataType;\n disabled: boolean;\n fontSize: TableFontSize;\n id: string;\n invalid: boolean;\n isDetailedMode: boolean;\n isTruncated: boolean;\n locale: string;\n onBlur: (event: React.FocusEvent) => void;\n onChange: (value: TValue) => void;\n onExitDetailedMode: () => void;\n row: TType;\n rowPendingChanges: Partial<TType> | undefined;\n tabIndex?: number;\n toggleDetailedMode: (detailed: React.SetStateAction<boolean>) => void;\n type: TableColumnRendererControl<TType>;\n value: TValue;\n};\n\nconst MemoedEditingCell = React.memo(function MemoedEditingCell<TType = unknown>(props: MemoedEditingCellProps<TType>) {\n const {\n dataType,\n disabled,\n fontSize,\n id,\n invalid,\n isDetailedMode,\n isTruncated,\n locale,\n onBlur,\n onChange,\n onExitDetailedMode,\n row,\n rowPendingChanges,\n tabIndex = -1,\n toggleDetailedMode,\n type = 'input',\n value,\n } = props;\n const controlRef = React.useRef<HTMLElement>(null);\n const currentValue = row[id as keyof TType];\n const commonProps = {\n disabled,\n onBlur,\n ref: controlRef,\n tabIndex,\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target.readOnly) {\n return;\n }\n\n // prevent active row navigation while in detailed mode\n if (\n isDetailedMode &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.stopPropagation();\n }\n\n // enter or exit detail mode when pressing enter\n if (event.key === 'Enter') {\n // textareas support shift and enter, don't prevent default in that case\n if (event.shiftKey && isDetailedMode) {\n return;\n }\n\n event.preventDefault();\n\n if (isDetailedMode) {\n target.select?.();\n onExitDetailedMode();\n } else {\n target.setSelectionRange?.(target.value?.length, target.value?.length);\n }\n\n toggleDetailedMode(editing => !editing);\n return;\n }\n\n // reset the value, or exit edit mode when pressing escape\n if (event.key === 'Escape') {\n if (isDetailedMode) {\n event.preventDefault();\n toggleDetailedMode(false);\n\n if (value !== currentValue) {\n props.onChange(currentValue);\n }\n\n // have to let onChange run before selecting, otherwise the value changes\n requestAnimationFrame(() => target.select?.());\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (!isPressingMetaKey(event) && (/^[a-z0-9]$/iu.test(event.key) || event.key === 'Backspace')) {\n toggleDetailedMode(true);\n }\n };\n\n const handlePaste = () => {\n if (!isDetailedMode) {\n toggleDetailedMode(true);\n }\n };\n\n if (typeof type === 'function') {\n const controlFnProps = {\n ...commonProps,\n invalid,\n setValue: onChange,\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n const target = (event.target as HTMLElement) || null;\n // it make sense to handle keydown for the custom edititng controls only if target is either input or textarea\n if (target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')) {\n handleInputKeyDown(event as React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>);\n }\n },\n onPaste: handlePaste,\n value,\n };\n\n return type(controlFnProps, { ...row, ...rowPendingChanges });\n }\n\n if (type === 'switch') {\n return (\n <Switch\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.Ref<HTMLInputElement>}\n />\n );\n }\n\n if (type === 'checkbox') {\n return (\n <Checkbox\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.Ref<HTMLInputElement>}\n />\n );\n }\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!isDetailedMode) {\n event.target.select();\n }\n };\n\n if (type === 'datepicker') {\n const valueAsDate = date.parse(value as Date | string | undefined);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail as Date;\n\n if (!valueAsDate || !newDate || (isDate(valueAsDate) && isDate(newDate) && !date.isWeakEqual(valueAsDate, newDate))) {\n props.onChange(newDate);\n }\n };\n\n const handleDatepickerInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const target = event.target as HTMLInputElement;\n\n if (isDetailedMode && event.key === 'Enter') {\n // If the field is empty, save as null before exiting detailed mode\n // This prevents the value from reverting to the previous value\n if (target.value === '') {\n onChange(null);\n } else {\n // When value is not empty, prevent handleInputKeyDown and give full control to Datepicker\n // The datepicker will exit \"detailed mode\" by itself when a valid date change is triggered\n target.select?.();\n return;\n }\n }\n\n handleInputKeyDown(event);\n };\n\n return (\n <Datepicker\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleDatepickerInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLInputElement>}\n value={valueAsDate}\n />\n );\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const dataTypeProps = getDataTypeProperties(dataType);\n onChange(dataTypeProps.parse?.(event.target.value, locale) ?? event.target.value);\n };\n\n if (type === 'textarea') {\n return (\n <TextareaWithAutosizing\n {...commonProps}\n fontSize={fontSize}\n invalid={invalid}\n isTruncated={isTruncated}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLTextAreaElement>}\n value={String(value ?? '')}\n />\n );\n }\n\n return (\n <Input\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLInputElement>}\n type={dataType === 'number' ? 'number' : undefined}\n value={dataType === 'number' ? (value as number) : String(value ?? '')}\n />\n );\n}) as <TType = unknown>(props: MemoedEditingCellProps<TType>) => React.JSX.Element;\n"],"names":["React","isEqualDate","MemoedEditingCell","date.parse","handleChange","date.isWeakEqual"],"mappings":"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"}
1
+ {"version":3,"file":"EditingControlCell.js","sources":["../../../../../../src/components/Table3/components/Columns/Cell/EditingControlCell.tsx"],"sourcesContent":["import { isDate, isEqual as isEqualDate, isSameDay } from 'date-fns';\nimport React from 'react';\n\nimport { Checkbox, Datepicker, Field, Input, useLocalization, Switch } from '@/components';\nimport { useLazyEffect } from '@/hooks/useLazyEffect';\nimport { getCellAttributes } from '@/primitives/Table/Core/components/Columns/Cell/util';\nimport { RowContext } from '@/primitives/Table/Core/components/Row/RowContext';\nimport type { TableCellRendererProps } from '@/primitives/Table/Core/types';\nimport type { TableColumnDataType, TableColumnRendererControl, TableFontSize } from '@/primitives/Table/types';\nimport { getDataTypeProperties } from '@/primitives/Table/useTableManager/util/dataTypes';\nimport { getTableMeta } from '@/primitives/Table/useTableManager/util/rows';\nimport * as date from '@/utils/date';\nimport { isElementInsideOrTriggeredFromContainer } from '@/utils/dom';\nimport { isPressingMetaKey } from '@/utils/keyboard';\n\nimport { RowMoveIndicator } from './Editing/RowMoveIndicator';\nimport { TextareaWithAutosizing } from './Editing/TextareaWithAutosizing';\nimport { useEditingCellAutofocus } from './util';\n\nexport function EditingControlCell<TType = unknown>(props: TableCellRendererProps<TType>) {\n const { cell, cellRef, isHighlighted, index } = props;\n const { rowIndex } = React.useContext(RowContext);\n const { table } = cell.getContext();\n const locale = useLocalization();\n const tableMeta = getTableMeta(table);\n const columnMeta = cell.column.columnDef.meta;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const type = columnMeta?.control ?? 'input';\n const handleFocus = useEditingCellAutofocus<TType>(props);\n const value = cell.getValue();\n const rowChanges = tableMeta.editing.getRowValue(cell.row.id);\n const shouldRunUpdate = React.useRef(false);\n\n // some controls, like select2, should trigger cell changed (validation, updates) as the value changes\n const hasNonTextControl = React.useMemo(() => {\n return (\n typeof type === 'function' &&\n !!cellRef.current?.querySelector('[data-taco=\"Select2\"],[data-taco=\"switch\"],[data-taco=\"checkbox\"]')\n );\n }, [cellRef.current]);\n\n useLazyEffect(() => {\n // Use an effect instead of a change handler to prevent onEditingChange from running with a stale js closure during on-the-fly creation.\n if (hasNonTextControl && shouldRunUpdate.current) {\n tableMeta.editing.onCellChanged(cell, rowIndex, value, true, false);\n // prevent risk of infinite loop, in case there'd ever be an updater function with two values that update each other.\n shouldRunUpdate.current = false;\n }\n }, [value]);\n\n const handleChange = React.useCallback(\n (nextValue: unknown) => {\n let hasChanged = false;\n\n if (columnMeta?.dataType === 'date') {\n hasChanged = !isSameDay(new Date(nextValue as string | Date), new Date(value as string | Date));\n } else if (columnMeta?.dataType === 'datetime') {\n hasChanged = !isEqualDate(new Date(nextValue as string | Date), new Date(value as string | Date));\n } else if (columnMeta?.dataType === 'time') {\n const next = new Date(nextValue as string | Date);\n const current = new Date(value as string | Date);\n hasChanged = !(next.getHours() === current.getHours() && next.getMinutes() === current.getMinutes());\n } else {\n hasChanged = nextValue !== value;\n }\n\n if (hasChanged) {\n tableMeta.editing.setCellValue(cell, rowIndex, nextValue);\n shouldRunUpdate.current = hasNonTextControl;\n }\n },\n [hasNonTextControl, cell.row.id, cell.column.id, cell.row.original, rowIndex, value, columnMeta?.dataType]\n );\n\n const handleBlur = React.useCallback(\n (event: React.FocusEvent) => {\n if (event && isElementInsideOrTriggeredFromContainer(event.relatedTarget, event.currentTarget)) {\n return;\n }\n\n requestAnimationFrame(() => {\n tableMeta.editing.toggleDetailedMode(false);\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, !hasNonTextControl, true);\n });\n },\n [hasNonTextControl, cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]\n );\n\n const error = tableMeta.editing.getCellError<TType>(cell);\n\n const handleExitDetailedMode = React.useCallback(() => {\n tableMeta.editing.onCellChanged(cell, rowIndex, undefined, true, true);\n }, [cell.row.id, JSON.stringify(rowChanges), rowIndex, cell.column.id, cell.row.original]);\n\n const controlProps = {\n dataType: columnMeta?.dataType,\n disabled: tableMeta.editing.getRowStatus(cell.row.id) === 'saving',\n fontSize: tableMeta.fontSize.size,\n id: cell.column.id,\n invalid: !!error,\n isDetailedMode: tableMeta.editing.isDetailedMode,\n isTruncated: !!columnMeta?.enableTruncate,\n locale: locale.locale,\n onBlur: handleBlur,\n onChange: handleChange,\n onExitDetailedMode: handleExitDetailedMode,\n row: cell.row.original,\n rowPendingChanges: tableMeta.editing.getRowValue(cell.row.id),\n tabIndex: isActiveRow ? 0 : -1,\n toggleDetailedMode: tableMeta.editing.toggleDetailedMode,\n type,\n value,\n };\n\n const cellAttributes = {\n ...getCellAttributes(cell, index, isHighlighted),\n 'data-cell-editing-invalid': error ? true : undefined,\n 'data-taco': 'cell-control',\n onFocus: handleFocus,\n ref: cellRef,\n tabIndex: -1,\n };\n\n return (\n <td {...cellAttributes}>\n <Field invalid={!!error} message={error}>\n <MemoedEditingCell<TType> {...controlProps} />\n </Field>\n {\n // we show row move indicator here within the cell rather than the row because it is\n // an editing only feature, and we don't want to leak editing into the shared row component\n }\n <RowMoveIndicator cell={cell} cellRef={cellRef} isActiveRow={isActiveRow} />\n </td>\n );\n}\n\ntype MemoedEditingCellProps<TType = unknown, TValue = unknown> = {\n dataType?: TableColumnDataType;\n disabled: boolean;\n fontSize: TableFontSize;\n id: string;\n invalid: boolean;\n isDetailedMode: boolean;\n isTruncated: boolean;\n locale: string;\n onBlur: (event: React.FocusEvent) => void;\n onChange: (value: TValue) => void;\n onExitDetailedMode: () => void;\n row: TType;\n rowPendingChanges: Partial<TType> | undefined;\n tabIndex?: number;\n toggleDetailedMode: (detailed: React.SetStateAction<boolean>) => void;\n type: TableColumnRendererControl<TType>;\n value: TValue;\n};\n\nconst MemoedEditingCell = React.memo(function MemoedEditingCell<TType = unknown>(props: MemoedEditingCellProps<TType>) {\n const {\n dataType,\n disabled,\n fontSize,\n id,\n invalid,\n isDetailedMode,\n isTruncated,\n locale,\n onBlur,\n onChange,\n onExitDetailedMode,\n row,\n rowPendingChanges,\n tabIndex = -1,\n toggleDetailedMode,\n type = 'input',\n value,\n } = props;\n const controlRef = React.useRef<HTMLElement>(null);\n const currentValue = row[id as keyof TType];\n const commonProps = {\n disabled,\n onBlur,\n ref: controlRef,\n tabIndex,\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n\n if (target.readOnly) {\n return;\n }\n\n // prevent active row navigation while in detailed mode\n if (\n isDetailedMode &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n ) {\n event.stopPropagation();\n }\n\n // enter or exit detail mode when pressing enter\n if (event.key === 'Enter') {\n // textareas support shift and enter, don't prevent default in that case\n if (event.shiftKey && isDetailedMode) {\n return;\n }\n\n event.preventDefault();\n\n if (isDetailedMode) {\n target.select?.();\n onExitDetailedMode();\n } else {\n target.setSelectionRange?.(target.value?.length, target.value?.length);\n }\n\n toggleDetailedMode(editing => !editing);\n return;\n }\n\n // reset the value, or exit edit mode when pressing escape\n if (event.key === 'Escape') {\n if (isDetailedMode) {\n event.preventDefault();\n toggleDetailedMode(false);\n\n if (value !== currentValue) {\n props.onChange(currentValue);\n }\n\n // have to let onChange run before selecting, otherwise the value changes\n requestAnimationFrame(() => target.select?.());\n }\n\n return;\n }\n\n // toggle into detailed mode when actually inputting something\n if (!isPressingMetaKey(event) && (/^[a-z0-9]$/iu.test(event.key) || event.key === 'Backspace')) {\n toggleDetailedMode(true);\n }\n };\n\n const handlePaste = () => {\n if (!isDetailedMode) {\n toggleDetailedMode(true);\n }\n };\n\n if (typeof type === 'function') {\n const controlFnProps = {\n ...commonProps,\n invalid,\n setValue: onChange,\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n const target = (event.target as HTMLElement) || null;\n // it make sense to handle keydown for the custom edititng controls only if target is either input or textarea\n if (target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')) {\n handleInputKeyDown(event as React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>);\n }\n },\n onPaste: handlePaste,\n value,\n };\n\n return type(controlFnProps, { ...row, ...rowPendingChanges });\n }\n\n if (type === 'switch') {\n return (\n <Switch\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.Ref<HTMLInputElement>}\n />\n );\n }\n\n if (type === 'checkbox') {\n return (\n <Checkbox\n {...commonProps}\n checked={Boolean(value)}\n onChange={onChange}\n ref={controlRef as React.Ref<HTMLInputElement>}\n />\n );\n }\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (!isDetailedMode) {\n event.target.select();\n }\n };\n\n if (type === 'datepicker') {\n const valueAsDate = date.parse(value as Date | string | undefined);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDate = (event as any).detail as Date;\n\n if (!valueAsDate || !newDate || (isDate(valueAsDate) && isDate(newDate) && !date.isWeakEqual(valueAsDate, newDate))) {\n props.onChange(newDate);\n }\n };\n\n const handleDatepickerInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const target = event.target as HTMLInputElement;\n\n if (isDetailedMode && event.key === 'Enter') {\n // If the field is empty, save as null before exiting detailed mode\n // This prevents the value from reverting to the previous value\n if (target.value === '') {\n onChange(null);\n } else {\n // When value is not empty, prevent handleInputKeyDown and give full control to Datepicker\n // The datepicker will exit \"detailed mode\" by itself when a valid date change is triggered\n target.select?.();\n return;\n }\n }\n\n handleInputKeyDown(event);\n };\n\n return (\n <Datepicker\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleDatepickerInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLInputElement>}\n value={valueAsDate}\n />\n );\n }\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const dataTypeProps = getDataTypeProperties(dataType);\n onChange(dataTypeProps.parse?.(event.target.value, locale) ?? event.target.value);\n };\n\n if (type === 'textarea') {\n return (\n <TextareaWithAutosizing\n {...commonProps}\n fontSize={fontSize}\n invalid={invalid}\n isTruncated={isTruncated}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLTextAreaElement>}\n value={String(value ?? '')}\n />\n );\n }\n\n return (\n <Input\n {...commonProps}\n invalid={invalid}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleInputKeyDown}\n onPaste={handlePaste}\n ref={controlRef as React.Ref<HTMLInputElement>}\n type={dataType === 'number' ? 'number' : undefined}\n value={dataType === 'number' ? (value as number) : String(value ?? '')}\n />\n );\n}) as <TType = unknown>(props: MemoedEditingCellProps<TType>) => React.JSX.Element;\n"],"names":["React","isEqualDate","MemoedEditingCell","date.parse","handleChange","date.isWeakEqual"],"mappings":"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"}
@@ -3,12 +3,13 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const React = require("react");
4
4
  const util = require("../../../../../primitives/Table/Core/components/Body/util.cjs");
5
5
  const RowContext = require("../../../../../primitives/Table/Core/components/Row/RowContext.cjs");
6
+ const rows = require("../../../../../primitives/Table/useTableManager/util/rows.cjs");
6
7
  const dom = require("../../../../../utils/dom.cjs");
7
8
  function useEditingCellAutofocus(props) {
8
9
  const focusManager = util.useAugmentedFocusManager();
9
10
  const { rowIndex } = React.useContext(RowContext.RowContext);
10
11
  const table = props.cell.getContext().table;
11
- const tableMeta = table.options.meta;
12
+ const tableMeta = rows.getTableMeta(table);
12
13
  const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;
13
14
  const autoFocus = props.index === tableMeta.editing.lastFocusedCellIndex && isActiveRow;
14
15
  React.useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"util.cjs","sources":["../../../../../../src/components/Table3/components/Columns/Cell/util.ts"],"sourcesContent":["import type { TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useAugmentedFocusManager } from '@/primitives/Table/Core/components/Body/util';\nimport { RowContext } from '@/primitives/Table/Core/components/Row/RowContext';\nimport type { TableCellRendererProps } from '@/primitives/Table/Core/types';\nimport { hasFocusableElement } from '@/utils/dom';\n\nexport function useEditingCellAutofocus<TType = unknown>(props: TableCellRendererProps<TType>) {\n const focusManager = useAugmentedFocusManager();\n const { rowIndex } = React.useContext(RowContext);\n const table = props.cell.getContext().table;\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const autoFocus = props.index === tableMeta.editing.lastFocusedCellIndex && isActiveRow;\n\n // focus the cell so that we trigger it's handle focus\n React.useEffect(() => {\n if (props.cellRef.current) {\n const isFocusedElementInCurrentRow = props.cellRef.current.closest('tr')?.contains(document.activeElement);\n const isFocusedElementSearch = document.activeElement?.getAttribute('name') === 'table-search';\n const isFocusedElementMenu = document.activeElement?.getAttribute('role') === 'menu';\n\n if (autoFocus && !isFocusedElementInCurrentRow && !isFocusedElementSearch && !isFocusedElementMenu) {\n props.cellRef.current?.focus();\n }\n }\n }, [tableMeta.rowActive.rowActiveIndex]);\n\n // when the cell receives focus we actually want to focus the control inside it...\n const handleFocus = (event: React.FocusEvent<HTMLTableCellElement>) => {\n const tableElement = props.cellRef.current?.closest('table');\n\n if (tableElement && table.getIsSomeColumnsPinned() && !props.cell.column.getIsPinned()) {\n const columnFreezingOffset = table.getLeftTotalSize();\n const targetRect = event.currentTarget.getBoundingClientRect();\n const tableRect = tableElement.getBoundingClientRect();\n const leftOffsetFromScrollContainer = targetRect.left - tableRect.left;\n // the width of table vertical scrollbar\n const scrollbarWidth = tableElement.offsetWidth - tableElement.clientWidth;\n const isFocusedElementMenu = event.currentTarget.getAttribute('data-cell-id') === '__actions';\n\n if (\n // When pinned column overlaps the focused cell\n (leftOffsetFromScrollContainer < columnFreezingOffset ||\n // When focused cell goes behidn the edge of the table\n leftOffsetFromScrollContainer + targetRect.width > tableRect.width - scrollbarWidth) &&\n !isFocusedElementMenu\n ) {\n tableElement.scrollTo(props.cell.column.getStart() - columnFreezingOffset, tableElement.scrollTop);\n }\n }\n\n if (event.target === event.currentTarget && hasFocusableElement(event.currentTarget)) {\n focusManager.focusNext();\n }\n };\n\n return handleFocus;\n}\n"],"names":["useAugmentedFocusManager","RowContext","hasFocusableElement"],"mappings":";;;;;;AAQO,SAAS,wBAAyC,OAAsC;AAC3F,QAAM,eAAeA,KAAAA,yBAAA;AACrB,QAAM,EAAE,SAAA,IAAa,MAAM,WAAWC,WAAAA,UAAU;AAChD,QAAM,QAAQ,MAAM,KAAK,WAAA,EAAa;AACtC,QAAM,YAAY,MAAM,QAAQ;AAChC,QAAM,cAAc,UAAU,UAAU,mBAAmB;AAC3D,QAAM,YAAY,MAAM,UAAU,UAAU,QAAQ,wBAAwB;AAG5E,QAAM,UAAU,MAAM;AAClB,QAAI,MAAM,QAAQ,SAAS;AACvB,YAAM,+BAA+B,MAAM,QAAQ,QAAQ,QAAQ,IAAI,GAAG,SAAS,SAAS,aAAa;AACzG,YAAM,yBAAyB,SAAS,eAAe,aAAa,MAAM,MAAM;AAChF,YAAM,uBAAuB,SAAS,eAAe,aAAa,MAAM,MAAM;AAE9E,UAAI,aAAa,CAAC,gCAAgC,CAAC,0BAA0B,CAAC,sBAAsB;AAChG,cAAM,QAAQ,SAAS,MAAA;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,UAAU,UAAU,cAAc,CAAC;AAGvC,QAAM,cAAc,CAAC,UAAkD;AACnE,UAAM,eAAe,MAAM,QAAQ,SAAS,QAAQ,OAAO;AAE3D,QAAI,gBAAgB,MAAM,uBAAA,KAA4B,CAAC,MAAM,KAAK,OAAO,eAAe;AACpF,YAAM,uBAAuB,MAAM,iBAAA;AACnC,YAAM,aAAa,MAAM,cAAc,sBAAA;AACvC,YAAM,YAAY,aAAa,sBAAA;AAC/B,YAAM,gCAAgC,WAAW,OAAO,UAAU;AAElE,YAAM,iBAAiB,aAAa,cAAc,aAAa;AAC/D,YAAM,uBAAuB,MAAM,cAAc,aAAa,cAAc,MAAM;AAElF;AAAA;AAAA,SAEK,gCAAgC;AAAA,QAE7B,gCAAgC,WAAW,QAAQ,UAAU,QAAQ,mBACzE,CAAC;AAAA,QACH;AACE,qBAAa,SAAS,MAAM,KAAK,OAAO,aAAa,sBAAsB,aAAa,SAAS;AAAA,MACrG;AAAA,IACJ;AAEA,QAAI,MAAM,WAAW,MAAM,iBAAiBC,wBAAoB,MAAM,aAAa,GAAG;AAClF,mBAAa,UAAA;AAAA,IACjB;AAAA,EACJ;AAEA,SAAO;AACX;;"}
1
+ {"version":3,"file":"util.cjs","sources":["../../../../../../src/components/Table3/components/Columns/Cell/util.ts"],"sourcesContent":["import React from 'react';\n\nimport { useAugmentedFocusManager } from '@/primitives/Table/Core/components/Body/util';\nimport { RowContext } from '@/primitives/Table/Core/components/Row/RowContext';\nimport type { TableCellRendererProps } from '@/primitives/Table/Core/types';\nimport { getTableMeta } from '@/primitives/Table/useTableManager/util/rows';\nimport { hasFocusableElement } from '@/utils/dom';\n\nexport function useEditingCellAutofocus<TType = unknown>(props: TableCellRendererProps<TType>) {\n const focusManager = useAugmentedFocusManager();\n const { rowIndex } = React.useContext(RowContext);\n const table = props.cell.getContext().table;\n const tableMeta = getTableMeta(table);\n const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;\n const autoFocus = props.index === tableMeta.editing.lastFocusedCellIndex && isActiveRow;\n\n // focus the cell so that we trigger it's handle focus\n React.useEffect(() => {\n if (props.cellRef.current) {\n const isFocusedElementInCurrentRow = props.cellRef.current.closest('tr')?.contains(document.activeElement);\n const isFocusedElementSearch = document.activeElement?.getAttribute('name') === 'table-search';\n const isFocusedElementMenu = document.activeElement?.getAttribute('role') === 'menu';\n\n if (autoFocus && !isFocusedElementInCurrentRow && !isFocusedElementSearch && !isFocusedElementMenu) {\n props.cellRef.current?.focus();\n }\n }\n }, [tableMeta.rowActive.rowActiveIndex]);\n\n // when the cell receives focus we actually want to focus the control inside it...\n const handleFocus = (event: React.FocusEvent<HTMLTableCellElement>) => {\n const tableElement = props.cellRef.current?.closest('table');\n\n if (tableElement && table.getIsSomeColumnsPinned() && !props.cell.column.getIsPinned()) {\n const columnFreezingOffset = table.getLeftTotalSize();\n const targetRect = event.currentTarget.getBoundingClientRect();\n const tableRect = tableElement.getBoundingClientRect();\n const leftOffsetFromScrollContainer = targetRect.left - tableRect.left;\n // the width of table vertical scrollbar\n const scrollbarWidth = tableElement.offsetWidth - tableElement.clientWidth;\n const isFocusedElementMenu = event.currentTarget.getAttribute('data-cell-id') === '__actions';\n\n if (\n // When pinned column overlaps the focused cell\n (leftOffsetFromScrollContainer < columnFreezingOffset ||\n // When focused cell goes behidn the edge of the table\n leftOffsetFromScrollContainer + targetRect.width > tableRect.width - scrollbarWidth) &&\n !isFocusedElementMenu\n ) {\n tableElement.scrollTo(props.cell.column.getStart() - columnFreezingOffset, tableElement.scrollTop);\n }\n }\n\n if (event.target === event.currentTarget && hasFocusableElement(event.currentTarget)) {\n focusManager.focusNext();\n }\n };\n\n return handleFocus;\n}\n"],"names":["useAugmentedFocusManager","RowContext","getTableMeta","hasFocusableElement"],"mappings":";;;;;;;AAQO,SAAS,wBAAyC,OAAsC;AAC3F,QAAM,eAAeA,KAAAA,yBAAA;AACrB,QAAM,EAAE,SAAA,IAAa,MAAM,WAAWC,WAAAA,UAAU;AAChD,QAAM,QAAQ,MAAM,KAAK,WAAA,EAAa;AACtC,QAAM,YAAYC,KAAAA,aAAa,KAAK;AACpC,QAAM,cAAc,UAAU,UAAU,mBAAmB;AAC3D,QAAM,YAAY,MAAM,UAAU,UAAU,QAAQ,wBAAwB;AAG5E,QAAM,UAAU,MAAM;AAClB,QAAI,MAAM,QAAQ,SAAS;AACvB,YAAM,+BAA+B,MAAM,QAAQ,QAAQ,QAAQ,IAAI,GAAG,SAAS,SAAS,aAAa;AACzG,YAAM,yBAAyB,SAAS,eAAe,aAAa,MAAM,MAAM;AAChF,YAAM,uBAAuB,SAAS,eAAe,aAAa,MAAM,MAAM;AAE9E,UAAI,aAAa,CAAC,gCAAgC,CAAC,0BAA0B,CAAC,sBAAsB;AAChG,cAAM,QAAQ,SAAS,MAAA;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,UAAU,UAAU,cAAc,CAAC;AAGvC,QAAM,cAAc,CAAC,UAAkD;AACnE,UAAM,eAAe,MAAM,QAAQ,SAAS,QAAQ,OAAO;AAE3D,QAAI,gBAAgB,MAAM,uBAAA,KAA4B,CAAC,MAAM,KAAK,OAAO,eAAe;AACpF,YAAM,uBAAuB,MAAM,iBAAA;AACnC,YAAM,aAAa,MAAM,cAAc,sBAAA;AACvC,YAAM,YAAY,aAAa,sBAAA;AAC/B,YAAM,gCAAgC,WAAW,OAAO,UAAU;AAElE,YAAM,iBAAiB,aAAa,cAAc,aAAa;AAC/D,YAAM,uBAAuB,MAAM,cAAc,aAAa,cAAc,MAAM;AAElF;AAAA;AAAA,SAEK,gCAAgC;AAAA,QAE7B,gCAAgC,WAAW,QAAQ,UAAU,QAAQ,mBACzE,CAAC;AAAA,QACH;AACE,qBAAa,SAAS,MAAM,KAAK,OAAO,aAAa,sBAAsB,aAAa,SAAS;AAAA,MACrG;AAAA,IACJ;AAEA,QAAI,MAAM,WAAW,MAAM,iBAAiBC,wBAAoB,MAAM,aAAa,GAAG;AAClF,mBAAa,UAAA;AAAA,IACjB;AAAA,EACJ;AAEA,SAAO;AACX;;"}
@@ -1,12 +1,13 @@
1
1
  import React__default from "react";
2
2
  import { useAugmentedFocusManager } from "../../../../../primitives/Table/Core/components/Body/util.js";
3
3
  import { RowContext } from "../../../../../primitives/Table/Core/components/Row/RowContext.js";
4
+ import { getTableMeta } from "../../../../../primitives/Table/useTableManager/util/rows.js";
4
5
  import { hasFocusableElement } from "../../../../../utils/dom.js";
5
6
  function useEditingCellAutofocus(props) {
6
7
  const focusManager = useAugmentedFocusManager();
7
8
  const { rowIndex } = React__default.useContext(RowContext);
8
9
  const table = props.cell.getContext().table;
9
- const tableMeta = table.options.meta;
10
+ const tableMeta = getTableMeta(table);
10
11
  const isActiveRow = tableMeta.rowActive.rowActiveIndex === rowIndex;
11
12
  const autoFocus = props.index === tableMeta.editing.lastFocusedCellIndex && isActiveRow;
12
13
  React__default.useEffect(() => {