@umodeapporg/ui 0.0.0-canary.ca10e69

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 (845) hide show
  1. package/README.md +78 -0
  2. package/dist/assets/images/common-pngs/sparkles.png.js +5 -0
  3. package/dist/assets/images/common-pngs/sparkles.png.js.map +1 -0
  4. package/dist/assets/umode-ui.css +467 -0
  5. package/dist/components/DateTime/DatePicker.d.ts +21 -0
  6. package/dist/components/DateTime/DatePicker.js +124 -0
  7. package/dist/components/DateTime/DatePicker.js.map +1 -0
  8. package/dist/components/DateTime/DateRangePicker.d.ts +21 -0
  9. package/dist/components/DateTime/DateRangePicker.js +208 -0
  10. package/dist/components/DateTime/DateRangePicker.js.map +1 -0
  11. package/dist/components/Form/ControlledButton.d.ts +25 -0
  12. package/dist/components/Form/ControlledButton.js +73 -0
  13. package/dist/components/Form/ControlledButton.js.map +1 -0
  14. package/dist/components/Form/ControlledCheckbox.d.ts +16 -0
  15. package/dist/components/Form/ControlledCheckbox.js +115 -0
  16. package/dist/components/Form/ControlledCheckbox.js.map +1 -0
  17. package/dist/components/Form/ControlledDialog.d.ts +51 -0
  18. package/dist/components/Form/ControlledDialog.js +191 -0
  19. package/dist/components/Form/ControlledDialog.js.map +1 -0
  20. package/dist/components/Form/ControlledDialogPrimitives.d.ts +53 -0
  21. package/dist/components/Form/ControlledDialogPrimitives.js +245 -0
  22. package/dist/components/Form/ControlledDialogPrimitives.js.map +1 -0
  23. package/dist/components/Form/ControlledDrawer.d.ts +37 -0
  24. package/dist/components/Form/ControlledDrawer.js +241 -0
  25. package/dist/components/Form/ControlledDrawer.js.map +1 -0
  26. package/dist/components/Form/ControlledForm/InputField.d.ts +11 -0
  27. package/dist/components/Form/ControlledForm/InputField.js +75 -0
  28. package/dist/components/Form/ControlledForm/InputField.js.map +1 -0
  29. package/dist/components/Form/ControlledForm/index.d.ts +27 -0
  30. package/dist/components/Form/ControlledForm/index.js +113 -0
  31. package/dist/components/Form/ControlledForm/index.js.map +1 -0
  32. package/dist/components/Form/ControlledImage/Img.d.ts +11 -0
  33. package/dist/components/Form/ControlledImage/Img.js +29 -0
  34. package/dist/components/Form/ControlledImage/Img.js.map +1 -0
  35. package/dist/components/Form/ControlledImage/index.d.ts +33 -0
  36. package/dist/components/Form/ControlledImage/index.js +110 -0
  37. package/dist/components/Form/ControlledImage/index.js.map +1 -0
  38. package/dist/components/Form/ControlledImage/useImage.d.ts +9 -0
  39. package/dist/components/Form/ControlledImage/useImage.js +110 -0
  40. package/dist/components/Form/ControlledImage/useImage.js.map +1 -0
  41. package/dist/components/Form/ControlledInput.d.ts +23 -0
  42. package/dist/components/Form/ControlledInput.js +52 -0
  43. package/dist/components/Form/ControlledInput.js.map +1 -0
  44. package/dist/components/Form/ControlledRadio.d.ts +15 -0
  45. package/dist/components/Form/ControlledRadio.js +91 -0
  46. package/dist/components/Form/ControlledRadio.js.map +1 -0
  47. package/dist/components/Form/ControlledSelect.d.ts +53 -0
  48. package/dist/components/Form/ControlledSelect.js +797 -0
  49. package/dist/components/Form/ControlledSelect.js.map +1 -0
  50. package/dist/components/Form/ControlledSwitch.d.ts +21 -0
  51. package/dist/components/Form/ControlledSwitch.js +107 -0
  52. package/dist/components/Form/ControlledSwitch.js.map +1 -0
  53. package/dist/components/Form/ControlledTabs.d.ts +75 -0
  54. package/dist/components/Form/ControlledTabs.js +515 -0
  55. package/dist/components/Form/ControlledTabs.js.map +1 -0
  56. package/dist/components/Form/ControlledTabsPrimitives.d.ts +43 -0
  57. package/dist/components/Form/ControlledTabsPrimitives.js +48 -0
  58. package/dist/components/Form/ControlledTabsPrimitives.js.map +1 -0
  59. package/dist/components/Form/ControlledTextarea.d.ts +22 -0
  60. package/dist/components/Form/ControlledTextarea.js +46 -0
  61. package/dist/components/Form/ControlledTextarea.js.map +1 -0
  62. package/dist/components/Form/ControlledTimeline.d.ts +26 -0
  63. package/dist/components/Form/ControlledTimeline.js +60 -0
  64. package/dist/components/Form/ControlledTimeline.js.map +1 -0
  65. package/dist/components/Form/ControlledViewToggle.d.ts +74 -0
  66. package/dist/components/Form/ControlledViewToggle.js +157 -0
  67. package/dist/components/Form/ControlledViewToggle.js.map +1 -0
  68. package/dist/components/Form/ControlledVoiceTextarea.d.ts +13 -0
  69. package/dist/components/Form/ControlledVoiceTextarea.js +99 -0
  70. package/dist/components/Form/ControlledVoiceTextarea.js.map +1 -0
  71. package/dist/components/Form/CurrencyInput.d.ts +8 -0
  72. package/dist/components/Form/CurrencyInput.js +17 -0
  73. package/dist/components/Form/CurrencyInput.js.map +1 -0
  74. package/dist/components/Form/FieldLabel.d.ts +16 -0
  75. package/dist/components/Form/FieldLabel.js +7 -0
  76. package/dist/components/Form/FieldLabel.js.map +1 -0
  77. package/dist/components/Form/RichTextEditor.d.ts +86 -0
  78. package/dist/components/Form/RichTextEditor.js +581 -0
  79. package/dist/components/Form/RichTextEditor.js.map +1 -0
  80. package/dist/components/Form/attachments/AttachmentPreviewList.d.ts +22 -0
  81. package/dist/components/Form/attachments/AttachmentPreviewList.js +95 -0
  82. package/dist/components/Form/attachments/AttachmentPreviewList.js.map +1 -0
  83. package/dist/components/Form/attachments/FileDropzone.d.ts +12 -0
  84. package/dist/components/Form/attachments/FileDropzone.js +84 -0
  85. package/dist/components/Form/attachments/FileDropzone.js.map +1 -0
  86. package/dist/components/Navigation/ControlledBreadcrumb.d.ts +13 -0
  87. package/dist/components/Navigation/ControlledBreadcrumb.js +24 -0
  88. package/dist/components/Navigation/ControlledBreadcrumb.js.map +1 -0
  89. package/dist/components/Navigation/ErrorPage.d.ts +2 -0
  90. package/dist/components/Navigation/ErrorPage.js +27 -0
  91. package/dist/components/Navigation/ErrorPage.js.map +1 -0
  92. package/dist/components/Navigation/LinkButton.d.ts +26 -0
  93. package/dist/components/Navigation/LinkButton.js +82 -0
  94. package/dist/components/Navigation/LinkButton.js.map +1 -0
  95. package/dist/components/Navigation/PageTitle.d.ts +95 -0
  96. package/dist/components/Navigation/PageTitle.js +241 -0
  97. package/dist/components/Navigation/PageTitle.js.map +1 -0
  98. package/dist/components/Navigation/PageTitleCollapseContext.d.ts +13 -0
  99. package/dist/components/Navigation/PageTitleCollapseContext.js +9 -0
  100. package/dist/components/Navigation/PageTitleCollapseContext.js.map +1 -0
  101. package/dist/components/Navigation/PageTitleNavigationContext.d.ts +21 -0
  102. package/dist/components/Navigation/PageTitleNavigationContext.js +17 -0
  103. package/dist/components/Navigation/PageTitleNavigationContext.js.map +1 -0
  104. package/dist/components/Navigation/ReactRouterNavigationAdapter.d.ts +7 -0
  105. package/dist/components/Navigation/ReactRouterNavigationAdapter.js +27 -0
  106. package/dist/components/Navigation/ReactRouterNavigationAdapter.js.map +1 -0
  107. package/dist/components/Navigation/UiNavigationContext.d.ts +38 -0
  108. package/dist/components/Navigation/UiNavigationContext.js +44 -0
  109. package/dist/components/Navigation/UiNavigationContext.js.map +1 -0
  110. package/dist/components/Search/UnifiedSearchBar.d.ts +31 -0
  111. package/dist/components/Search/UnifiedSearchBar.js +167 -0
  112. package/dist/components/Search/UnifiedSearchBar.js.map +1 -0
  113. package/dist/components/Search/filters/ActiveFiltersBar.d.ts +15 -0
  114. package/dist/components/Search/filters/ActiveFiltersBar.js +48 -0
  115. package/dist/components/Search/filters/ActiveFiltersBar.js.map +1 -0
  116. package/dist/components/Search/filters/FilterChipsRow.d.ts +17 -0
  117. package/dist/components/Search/filters/FilterChipsRow.js +113 -0
  118. package/dist/components/Search/filters/FilterChipsRow.js.map +1 -0
  119. package/dist/components/Search/filters/FilterFieldControl.d.ts +19 -0
  120. package/dist/components/Search/filters/FilterFieldControl.js +390 -0
  121. package/dist/components/Search/filters/FilterFieldControl.js.map +1 -0
  122. package/dist/components/Search/filters/FiltersButton.d.ts +24 -0
  123. package/dist/components/Search/filters/FiltersButton.js +52 -0
  124. package/dist/components/Search/filters/FiltersButton.js.map +1 -0
  125. package/dist/components/Search/filters/FiltersForm.d.ts +18 -0
  126. package/dist/components/Search/filters/FiltersForm.js +112 -0
  127. package/dist/components/Search/filters/FiltersForm.js.map +1 -0
  128. package/dist/components/Search/filters/FiltersPanel.d.ts +32 -0
  129. package/dist/components/Search/filters/FiltersPanel.js +266 -0
  130. package/dist/components/Search/filters/FiltersPanel.js.map +1 -0
  131. package/dist/components/Search/filters/FiltersSummaryTooltip.d.ts +20 -0
  132. package/dist/components/Search/filters/FiltersSummaryTooltip.js +26 -0
  133. package/dist/components/Search/filters/FiltersSummaryTooltip.js.map +1 -0
  134. package/dist/components/Search/filters/filterTypes.d.ts +162 -0
  135. package/dist/components/Search/filters/filterTypes.js +2 -0
  136. package/dist/components/Search/filters/filterTypes.js.map +1 -0
  137. package/dist/components/Search/filters/filterValues.d.ts +22 -0
  138. package/dist/components/Search/filters/filterValues.js +91 -0
  139. package/dist/components/Search/filters/filterValues.js.map +1 -0
  140. package/dist/components/Search/filters/filtersLayout.d.ts +4 -0
  141. package/dist/components/Search/filters/filtersLayout.js +18 -0
  142. package/dist/components/Search/filters/filtersLayout.js.map +1 -0
  143. package/dist/components/Search/filters/index.d.ts +11 -0
  144. package/dist/components/Search/filters/index.js +32 -0
  145. package/dist/components/Search/filters/index.js.map +1 -0
  146. package/dist/components/Search/filters/useFilters.d.ts +33 -0
  147. package/dist/components/Search/filters/useFilters.js +162 -0
  148. package/dist/components/Search/filters/useFilters.js.map +1 -0
  149. package/dist/components/Search/index.d.ts +2 -0
  150. package/dist/components/Search/index.js +34 -0
  151. package/dist/components/Search/index.js.map +1 -0
  152. package/dist/components/Shell/AppHeader.d.ts +25 -0
  153. package/dist/components/Shell/AppHeader.js +69 -0
  154. package/dist/components/Shell/AppHeader.js.map +1 -0
  155. package/dist/components/Shell/AppShell.d.ts +22 -0
  156. package/dist/components/Shell/AppShell.js +146 -0
  157. package/dist/components/Shell/AppShell.js.map +1 -0
  158. package/dist/components/Shell/AppSidebar.d.ts +20 -0
  159. package/dist/components/Shell/AppSidebar.js +93 -0
  160. package/dist/components/Shell/AppSidebar.js.map +1 -0
  161. package/dist/components/Shell/LanguageToggle.d.ts +8 -0
  162. package/dist/components/Shell/LanguageToggle.js +59 -0
  163. package/dist/components/Shell/LanguageToggle.js.map +1 -0
  164. package/dist/components/Shell/PumpkinGlyph.d.ts +13 -0
  165. package/dist/components/Shell/PumpkinGlyph.js +29 -0
  166. package/dist/components/Shell/PumpkinGlyph.js.map +1 -0
  167. package/dist/components/Shell/SidebarMenu.d.ts +29 -0
  168. package/dist/components/Shell/SidebarMenu.js +254 -0
  169. package/dist/components/Shell/SidebarMenu.js.map +1 -0
  170. package/dist/components/Shell/ThemeToggle.d.ts +18 -0
  171. package/dist/components/Shell/ThemeToggle.js +68 -0
  172. package/dist/components/Shell/ThemeToggle.js.map +1 -0
  173. package/dist/components/Shell/headerControlStyles.d.ts +10 -0
  174. package/dist/components/Shell/headerControlStyles.js +11 -0
  175. package/dist/components/Shell/headerControlStyles.js.map +1 -0
  176. package/dist/components/Shell/sidebarFavorites.d.ts +21 -0
  177. package/dist/components/Shell/sidebarFavorites.js +69 -0
  178. package/dist/components/Shell/sidebarFavorites.js.map +1 -0
  179. package/dist/components/Shell/useSidebarState.d.ts +14 -0
  180. package/dist/components/Shell/useSidebarState.js +106 -0
  181. package/dist/components/Shell/useSidebarState.js.map +1 -0
  182. package/dist/components/UI/AccordionIcon.d.ts +10 -0
  183. package/dist/components/UI/AccordionIcon.js +22 -0
  184. package/dist/components/UI/AccordionIcon.js.map +1 -0
  185. package/dist/components/UI/AlertInfo/dismissedAlertsStore.d.ts +2 -0
  186. package/dist/components/UI/AlertInfo/dismissedAlertsStore.js +22 -0
  187. package/dist/components/UI/AlertInfo/dismissedAlertsStore.js.map +1 -0
  188. package/dist/components/UI/AlertInfo/index.d.ts +30 -0
  189. package/dist/components/UI/AlertInfo/index.js +78 -0
  190. package/dist/components/UI/AlertInfo/index.js.map +1 -0
  191. package/dist/components/UI/BaseDataCard.d.ts +27 -0
  192. package/dist/components/UI/BaseDataCard.js +170 -0
  193. package/dist/components/UI/BaseDataCard.js.map +1 -0
  194. package/dist/components/UI/BulkActionBar.d.ts +35 -0
  195. package/dist/components/UI/BulkActionBar.js +127 -0
  196. package/dist/components/UI/BulkActionBar.js.map +1 -0
  197. package/dist/components/UI/Chips/OutlinedChip.d.ts +42 -0
  198. package/dist/components/UI/Chips/OutlinedChip.js +190 -0
  199. package/dist/components/UI/Chips/OutlinedChip.js.map +1 -0
  200. package/dist/components/UI/Chips/StatusChip.d.ts +8 -0
  201. package/dist/components/UI/Chips/StatusChip.js +33 -0
  202. package/dist/components/UI/Chips/StatusChip.js.map +1 -0
  203. package/dist/components/UI/Chips/chipTones.d.ts +6 -0
  204. package/dist/components/UI/Chips/chipTones.js +53 -0
  205. package/dist/components/UI/Chips/chipTones.js.map +1 -0
  206. package/dist/components/UI/ColorSwatch.d.ts +30 -0
  207. package/dist/components/UI/ColorSwatch.js +53 -0
  208. package/dist/components/UI/ColorSwatch.js.map +1 -0
  209. package/dist/components/UI/Colors.d.ts +10 -0
  210. package/dist/components/UI/Colors.js +41 -0
  211. package/dist/components/UI/Colors.js.map +1 -0
  212. package/dist/components/UI/ControlledAccordion.d.ts +38 -0
  213. package/dist/components/UI/ControlledAccordion.js +95 -0
  214. package/dist/components/UI/ControlledAccordion.js.map +1 -0
  215. package/dist/components/UI/ControlledCollapse.d.ts +18 -0
  216. package/dist/components/UI/ControlledCollapse.js +40 -0
  217. package/dist/components/UI/ControlledCollapse.js.map +1 -0
  218. package/dist/components/UI/ControlledMenu.d.ts +79 -0
  219. package/dist/components/UI/ControlledMenu.js +234 -0
  220. package/dist/components/UI/ControlledMenu.js.map +1 -0
  221. package/dist/components/UI/ControlledPopover.d.ts +59 -0
  222. package/dist/components/UI/ControlledPopover.js +189 -0
  223. package/dist/components/UI/ControlledPopover.js.map +1 -0
  224. package/dist/components/UI/ControlledProgress.d.ts +13 -0
  225. package/dist/components/UI/ControlledProgress.js +46 -0
  226. package/dist/components/UI/ControlledProgress.js.map +1 -0
  227. package/dist/components/UI/ControlledSlider.d.ts +15 -0
  228. package/dist/components/UI/ControlledSlider.js +34 -0
  229. package/dist/components/UI/ControlledSlider.js.map +1 -0
  230. package/dist/components/UI/ControlledTooltip.d.ts +21 -0
  231. package/dist/components/UI/ControlledTooltip.js +146 -0
  232. package/dist/components/UI/ControlledTooltip.js.map +1 -0
  233. package/dist/components/UI/CustomBadge.d.ts +15 -0
  234. package/dist/components/UI/CustomBadge.js +34 -0
  235. package/dist/components/UI/CustomBadge.js.map +1 -0
  236. package/dist/components/UI/CustomCard.d.ts +13 -0
  237. package/dist/components/UI/CustomCard.js +36 -0
  238. package/dist/components/UI/CustomCard.js.map +1 -0
  239. package/dist/components/UI/CustomChart.d.ts +21 -0
  240. package/dist/components/UI/CustomChart.js +108 -0
  241. package/dist/components/UI/CustomChart.js.map +1 -0
  242. package/dist/components/UI/DataTable/DataTable.d.ts +108 -0
  243. package/dist/components/UI/DataTable/DataTable.js +606 -0
  244. package/dist/components/UI/DataTable/DataTable.js.map +1 -0
  245. package/dist/components/UI/DataTable/DataTableAutoCard.d.ts +20 -0
  246. package/dist/components/UI/DataTable/DataTableAutoCard.js +39 -0
  247. package/dist/components/UI/DataTable/DataTableAutoCard.js.map +1 -0
  248. package/dist/components/UI/DataTable/DataTableBody.d.ts +33 -0
  249. package/dist/components/UI/DataTable/DataTableBody.js +260 -0
  250. package/dist/components/UI/DataTable/DataTableBody.js.map +1 -0
  251. package/dist/components/UI/DataTable/DataTableBodyCell.d.ts +21 -0
  252. package/dist/components/UI/DataTable/DataTableBodyCell.js +88 -0
  253. package/dist/components/UI/DataTable/DataTableBodyCell.js.map +1 -0
  254. package/dist/components/UI/DataTable/DataTableBulkEditButton.d.ts +11 -0
  255. package/dist/components/UI/DataTable/DataTableBulkEditButton.js +24 -0
  256. package/dist/components/UI/DataTable/DataTableBulkEditButton.js.map +1 -0
  257. package/dist/components/UI/DataTable/DataTableBulkEditDialog.d.ts +25 -0
  258. package/dist/components/UI/DataTable/DataTableBulkEditDialog.js +282 -0
  259. package/dist/components/UI/DataTable/DataTableBulkEditDialog.js.map +1 -0
  260. package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.d.ts +13 -0
  261. package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.js +95 -0
  262. package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.js.map +1 -0
  263. package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.d.ts +20 -0
  264. package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.js +94 -0
  265. package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.js.map +1 -0
  266. package/dist/components/UI/DataTable/DataTableColumnToggle.d.ts +34 -0
  267. package/dist/components/UI/DataTable/DataTableColumnToggle.js +170 -0
  268. package/dist/components/UI/DataTable/DataTableColumnToggle.js.map +1 -0
  269. package/dist/components/UI/DataTable/DataTableDetailModal.d.ts +17 -0
  270. package/dist/components/UI/DataTable/DataTableDetailModal.js +109 -0
  271. package/dist/components/UI/DataTable/DataTableDetailModal.js.map +1 -0
  272. package/dist/components/UI/DataTable/DataTableDetailPanel.d.ts +21 -0
  273. package/dist/components/UI/DataTable/DataTableDetailPanel.js +51 -0
  274. package/dist/components/UI/DataTable/DataTableDetailPanel.js.map +1 -0
  275. package/dist/components/UI/DataTable/DataTableDetailTable.d.ts +35 -0
  276. package/dist/components/UI/DataTable/DataTableDetailTable.js +129 -0
  277. package/dist/components/UI/DataTable/DataTableDetailTable.js.map +1 -0
  278. package/dist/components/UI/DataTable/DataTableEditModeButton.d.ts +12 -0
  279. package/dist/components/UI/DataTable/DataTableEditModeButton.js +29 -0
  280. package/dist/components/UI/DataTable/DataTableEditModeButton.js.map +1 -0
  281. package/dist/components/UI/DataTable/DataTableFilters.d.ts +20 -0
  282. package/dist/components/UI/DataTable/DataTableFilters.js +65 -0
  283. package/dist/components/UI/DataTable/DataTableFilters.js.map +1 -0
  284. package/dist/components/UI/DataTable/DataTableHead.d.ts +27 -0
  285. package/dist/components/UI/DataTable/DataTableHead.js +198 -0
  286. package/dist/components/UI/DataTable/DataTableHead.js.map +1 -0
  287. package/dist/components/UI/DataTable/DataTablePagination.d.ts +15 -0
  288. package/dist/components/UI/DataTable/DataTablePagination.js +149 -0
  289. package/dist/components/UI/DataTable/DataTablePagination.js.map +1 -0
  290. package/dist/components/UI/DataTable/DataTableSaveButton.d.ts +13 -0
  291. package/dist/components/UI/DataTable/DataTableSaveButton.js +21 -0
  292. package/dist/components/UI/DataTable/DataTableSaveButton.js.map +1 -0
  293. package/dist/components/UI/DataTable/DataTableSegmentedTabs.d.ts +8 -0
  294. package/dist/components/UI/DataTable/DataTableSegmentedTabs.js +35 -0
  295. package/dist/components/UI/DataTable/DataTableSegmentedTabs.js.map +1 -0
  296. package/dist/components/UI/DataTable/DataTableStates.d.ts +17 -0
  297. package/dist/components/UI/DataTable/DataTableStates.js +59 -0
  298. package/dist/components/UI/DataTable/DataTableStates.js.map +1 -0
  299. package/dist/components/UI/DataTable/DataTableToolbar.d.ts +28 -0
  300. package/dist/components/UI/DataTable/DataTableToolbar.js +110 -0
  301. package/dist/components/UI/DataTable/DataTableToolbar.js.map +1 -0
  302. package/dist/components/UI/DataTable/applyDataTableFilters.d.ts +16 -0
  303. package/dist/components/UI/DataTable/applyDataTableFilters.js +54 -0
  304. package/dist/components/UI/DataTable/applyDataTableFilters.js.map +1 -0
  305. package/dist/components/UI/DataTable/bulkEditValues.d.ts +8 -0
  306. package/dist/components/UI/DataTable/bulkEditValues.js +13 -0
  307. package/dist/components/UI/DataTable/bulkEditValues.js.map +1 -0
  308. package/dist/components/UI/DataTable/cells/DataTableActionsCell.d.ts +7 -0
  309. package/dist/components/UI/DataTable/cells/DataTableActionsCell.js +55 -0
  310. package/dist/components/UI/DataTable/cells/DataTableActionsCell.js.map +1 -0
  311. package/dist/components/UI/DataTable/cells/DataTableCell.d.ts +15 -0
  312. package/dist/components/UI/DataTable/cells/DataTableCell.js +63 -0
  313. package/dist/components/UI/DataTable/cells/DataTableCell.js.map +1 -0
  314. package/dist/components/UI/DataTable/cells/DataTableCodeCell.d.ts +6 -0
  315. package/dist/components/UI/DataTable/cells/DataTableCodeCell.js +7 -0
  316. package/dist/components/UI/DataTable/cells/DataTableCodeCell.js.map +1 -0
  317. package/dist/components/UI/DataTable/cells/DataTableColorCell.d.ts +7 -0
  318. package/dist/components/UI/DataTable/cells/DataTableColorCell.js +10 -0
  319. package/dist/components/UI/DataTable/cells/DataTableColorCell.js.map +1 -0
  320. package/dist/components/UI/DataTable/cells/DataTableCountCell.d.ts +5 -0
  321. package/dist/components/UI/DataTable/cells/DataTableCountCell.js +7 -0
  322. package/dist/components/UI/DataTable/cells/DataTableCountCell.js.map +1 -0
  323. package/dist/components/UI/DataTable/cells/DataTableDateCell.d.ts +5 -0
  324. package/dist/components/UI/DataTable/cells/DataTableDateCell.js +12 -0
  325. package/dist/components/UI/DataTable/cells/DataTableDateCell.js.map +1 -0
  326. package/dist/components/UI/DataTable/cells/DataTableEditableCell.d.ts +23 -0
  327. package/dist/components/UI/DataTable/cells/DataTableEditableCell.js +242 -0
  328. package/dist/components/UI/DataTable/cells/DataTableEditableCell.js.map +1 -0
  329. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.d.ts +10 -0
  330. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js +7 -0
  331. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js.map +1 -0
  332. package/dist/components/UI/DataTable/cells/DataTableOriginCell.d.ts +6 -0
  333. package/dist/components/UI/DataTable/cells/DataTableOriginCell.js +25 -0
  334. package/dist/components/UI/DataTable/cells/DataTableOriginCell.js.map +1 -0
  335. package/dist/components/UI/DataTable/cells/DataTableStatusCell.d.ts +6 -0
  336. package/dist/components/UI/DataTable/cells/DataTableStatusCell.js +24 -0
  337. package/dist/components/UI/DataTable/cells/DataTableStatusCell.js.map +1 -0
  338. package/dist/components/UI/DataTable/cells/DataTableTagCell.d.ts +6 -0
  339. package/dist/components/UI/DataTable/cells/DataTableTagCell.js +25 -0
  340. package/dist/components/UI/DataTable/cells/DataTableTagCell.js.map +1 -0
  341. package/dist/components/UI/DataTable/cells/DataTableTextCell.d.ts +6 -0
  342. package/dist/components/UI/DataTable/cells/DataTableTextCell.js +7 -0
  343. package/dist/components/UI/DataTable/cells/DataTableTextCell.js.map +1 -0
  344. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.d.ts +6 -0
  345. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js +10 -0
  346. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js.map +1 -0
  347. package/dist/components/UI/DataTable/dataTableClasses.d.ts +12 -0
  348. package/dist/components/UI/DataTable/dataTableClasses.js +29 -0
  349. package/dist/components/UI/DataTable/dataTableClasses.js.map +1 -0
  350. package/dist/components/UI/DataTable/dataTableColumnWidths.d.ts +15 -0
  351. package/dist/components/UI/DataTable/dataTableColumnWidths.js +153 -0
  352. package/dist/components/UI/DataTable/dataTableColumnWidths.js.map +1 -0
  353. package/dist/components/UI/DataTable/dataTableColumnsStore.d.ts +12 -0
  354. package/dist/components/UI/DataTable/dataTableColumnsStore.js +68 -0
  355. package/dist/components/UI/DataTable/dataTableColumnsStore.js.map +1 -0
  356. package/dist/components/UI/DataTable/dataTableMotion.d.ts +6 -0
  357. package/dist/components/UI/DataTable/dataTableMotion.js +15 -0
  358. package/dist/components/UI/DataTable/dataTableMotion.js.map +1 -0
  359. package/dist/components/UI/DataTable/grid/GridFillHandle.d.ts +8 -0
  360. package/dist/components/UI/DataTable/grid/GridFillHandle.js +70 -0
  361. package/dist/components/UI/DataTable/grid/GridFillHandle.js.map +1 -0
  362. package/dist/components/UI/DataTable/grid/GridProvider.d.ts +36 -0
  363. package/dist/components/UI/DataTable/grid/GridProvider.js +128 -0
  364. package/dist/components/UI/DataTable/grid/GridProvider.js.map +1 -0
  365. package/dist/components/UI/DataTable/grid/fill/fillStrategies.d.ts +19 -0
  366. package/dist/components/UI/DataTable/grid/fill/fillStrategies.js +73 -0
  367. package/dist/components/UI/DataTable/grid/fill/fillStrategies.js.map +1 -0
  368. package/dist/components/UI/DataTable/grid/gridStore.d.ts +82 -0
  369. package/dist/components/UI/DataTable/grid/gridStore.js +259 -0
  370. package/dist/components/UI/DataTable/grid/gridStore.js.map +1 -0
  371. package/dist/components/UI/DataTable/grid/gridTypes.d.ts +59 -0
  372. package/dist/components/UI/DataTable/grid/gridTypes.js +27 -0
  373. package/dist/components/UI/DataTable/grid/gridTypes.js.map +1 -0
  374. package/dist/components/UI/DataTable/grid/useGridFillApply.d.ts +18 -0
  375. package/dist/components/UI/DataTable/grid/useGridFillApply.js +74 -0
  376. package/dist/components/UI/DataTable/grid/useGridFillApply.js.map +1 -0
  377. package/dist/components/UI/DataTable/grid/useGridInstance.d.ts +27 -0
  378. package/dist/components/UI/DataTable/grid/useGridInstance.js +41 -0
  379. package/dist/components/UI/DataTable/grid/useGridInstance.js.map +1 -0
  380. package/dist/components/UI/DataTable/grid/useGridKeyboard.d.ts +25 -0
  381. package/dist/components/UI/DataTable/grid/useGridKeyboard.js +135 -0
  382. package/dist/components/UI/DataTable/grid/useGridKeyboard.js.map +1 -0
  383. package/dist/components/UI/DataTable/index.d.ts +19 -0
  384. package/dist/components/UI/DataTable/index.js +34 -0
  385. package/dist/components/UI/DataTable/index.js.map +1 -0
  386. package/dist/components/UI/DataTable/types.d.ts +535 -0
  387. package/dist/components/UI/DataTable/types.js +13 -0
  388. package/dist/components/UI/DataTable/types.js.map +1 -0
  389. package/dist/components/UI/DataTable/useCellEditingState.d.ts +20 -0
  390. package/dist/components/UI/DataTable/useCellEditingState.js +33 -0
  391. package/dist/components/UI/DataTable/useCellEditingState.js.map +1 -0
  392. package/dist/components/UI/DataTable/useColumnOrder.d.ts +25 -0
  393. package/dist/components/UI/DataTable/useColumnOrder.js +94 -0
  394. package/dist/components/UI/DataTable/useColumnOrder.js.map +1 -0
  395. package/dist/components/UI/DataTable/useColumnSizing.d.ts +9 -0
  396. package/dist/components/UI/DataTable/useColumnSizing.js +21 -0
  397. package/dist/components/UI/DataTable/useColumnSizing.js.map +1 -0
  398. package/dist/components/UI/DataTable/useColumnVisibility.d.ts +19 -0
  399. package/dist/components/UI/DataTable/useColumnVisibility.js +47 -0
  400. package/dist/components/UI/DataTable/useColumnVisibility.js.map +1 -0
  401. package/dist/components/UI/DataTable/useDataTableCommitQueue.d.ts +69 -0
  402. package/dist/components/UI/DataTable/useDataTableCommitQueue.js +220 -0
  403. package/dist/components/UI/DataTable/useDataTableCommitQueue.js.map +1 -0
  404. package/dist/components/UI/DataTable/useDataTableEditBuffer.d.ts +36 -0
  405. package/dist/components/UI/DataTable/useDataTableEditBuffer.js +29 -0
  406. package/dist/components/UI/DataTable/useDataTableEditBuffer.js.map +1 -0
  407. package/dist/components/UI/DataTable/useDataTableInstance.d.ts +65 -0
  408. package/dist/components/UI/DataTable/useDataTableInstance.js +336 -0
  409. package/dist/components/UI/DataTable/useDataTableInstance.js.map +1 -0
  410. package/dist/components/UI/DataTable/useDataTableSource.d.ts +85 -0
  411. package/dist/components/UI/DataTable/useDataTableSource.js +199 -0
  412. package/dist/components/UI/DataTable/useDataTableSource.js.map +1 -0
  413. package/dist/components/UI/DataTable/useDataTableUndoHistory.d.ts +30 -0
  414. package/dist/components/UI/DataTable/useDataTableUndoHistory.js +130 -0
  415. package/dist/components/UI/DataTable/useDataTableUndoHistory.js.map +1 -0
  416. package/dist/components/UI/DataTable/useFlipRows.d.ts +22 -0
  417. package/dist/components/UI/DataTable/useFlipRows.js +90 -0
  418. package/dist/components/UI/DataTable/useFlipRows.js.map +1 -0
  419. package/dist/components/UI/ErrorBoundary.d.ts +20 -0
  420. package/dist/components/UI/ErrorBoundary.js +36 -0
  421. package/dist/components/UI/ErrorBoundary.js.map +1 -0
  422. package/dist/components/UI/Flow/FlowAnnotationDraftPreview.d.ts +6 -0
  423. package/dist/components/UI/Flow/FlowAnnotationDraftPreview.js +65 -0
  424. package/dist/components/UI/Flow/FlowAnnotationDraftPreview.js.map +1 -0
  425. package/dist/components/UI/Flow/FlowAnnotationNode.d.ts +34 -0
  426. package/dist/components/UI/Flow/FlowAnnotationNode.js +231 -0
  427. package/dist/components/UI/Flow/FlowAnnotationNode.js.map +1 -0
  428. package/dist/components/UI/Flow/FlowAnnotationToolbar.d.ts +32 -0
  429. package/dist/components/UI/Flow/FlowAnnotationToolbar.js +298 -0
  430. package/dist/components/UI/Flow/FlowAnnotationToolbar.js.map +1 -0
  431. package/dist/components/UI/Flow/FlowBlockNode.d.ts +35 -0
  432. package/dist/components/UI/Flow/FlowBlockNode.js +91 -0
  433. package/dist/components/UI/Flow/FlowBlockNode.js.map +1 -0
  434. package/dist/components/UI/Flow/FlowCanvas.d.ts +23 -0
  435. package/dist/components/UI/Flow/FlowCanvas.js +559 -0
  436. package/dist/components/UI/Flow/FlowCanvas.js.map +1 -0
  437. package/dist/components/UI/Flow/FlowConnectionEdge.d.ts +18 -0
  438. package/dist/components/UI/Flow/FlowConnectionEdge.js +116 -0
  439. package/dist/components/UI/Flow/FlowConnectionEdge.js.map +1 -0
  440. package/dist/components/UI/Flow/FlowEditorProvider.d.ts +17 -0
  441. package/dist/components/UI/Flow/FlowEditorProvider.js +27 -0
  442. package/dist/components/UI/Flow/FlowEditorProvider.js.map +1 -0
  443. package/dist/components/UI/Flow/FlowInspector.d.ts +11 -0
  444. package/dist/components/UI/Flow/FlowInspector.js +131 -0
  445. package/dist/components/UI/Flow/FlowInspector.js.map +1 -0
  446. package/dist/components/UI/Flow/FlowIssueList.d.ts +8 -0
  447. package/dist/components/UI/Flow/FlowIssueList.js +55 -0
  448. package/dist/components/UI/Flow/FlowIssueList.js.map +1 -0
  449. package/dist/components/UI/Flow/FlowLaneMap.d.ts +30 -0
  450. package/dist/components/UI/Flow/FlowLaneMap.js +206 -0
  451. package/dist/components/UI/Flow/FlowLaneMap.js.map +1 -0
  452. package/dist/components/UI/Flow/FlowNodeShell.d.ts +20 -0
  453. package/dist/components/UI/Flow/FlowNodeShell.js +81 -0
  454. package/dist/components/UI/Flow/FlowNodeShell.js.map +1 -0
  455. package/dist/components/UI/Flow/FlowResizablePanel.d.ts +20 -0
  456. package/dist/components/UI/Flow/FlowResizablePanel.js +118 -0
  457. package/dist/components/UI/Flow/FlowResizablePanel.js.map +1 -0
  458. package/dist/components/UI/Flow/FlowSelectionBar.d.ts +10 -0
  459. package/dist/components/UI/Flow/FlowSelectionBar.js +56 -0
  460. package/dist/components/UI/Flow/FlowSelectionBar.js.map +1 -0
  461. package/dist/components/UI/Flow/FlowZoomControls.d.ts +12 -0
  462. package/dist/components/UI/Flow/FlowZoomControls.js +54 -0
  463. package/dist/components/UI/Flow/FlowZoomControls.js.map +1 -0
  464. package/dist/components/UI/Flow/flowAnnotations.d.ts +38 -0
  465. package/dist/components/UI/Flow/flowAnnotations.js +123 -0
  466. package/dist/components/UI/Flow/flowAnnotations.js.map +1 -0
  467. package/dist/components/UI/Flow/flowBlockRegistry.d.ts +12 -0
  468. package/dist/components/UI/Flow/flowBlockRegistry.js +20 -0
  469. package/dist/components/UI/Flow/flowBlockRegistry.js.map +1 -0
  470. package/dist/components/UI/Flow/flowEditorStore.d.ts +73 -0
  471. package/dist/components/UI/Flow/flowEditorStore.js +402 -0
  472. package/dist/components/UI/Flow/flowEditorStore.js.map +1 -0
  473. package/dist/components/UI/Flow/flowGraph.d.ts +32 -0
  474. package/dist/components/UI/Flow/flowGraph.js +157 -0
  475. package/dist/components/UI/Flow/flowGraph.js.map +1 -0
  476. package/dist/components/UI/Flow/flowTypes.d.ts +104 -0
  477. package/dist/components/UI/Flow/flowTypes.js +2 -0
  478. package/dist/components/UI/Flow/flowTypes.js.map +1 -0
  479. package/dist/components/UI/Flow/flowViewport.d.ts +25 -0
  480. package/dist/components/UI/Flow/flowViewport.js +31 -0
  481. package/dist/components/UI/Flow/flowViewport.js.map +1 -0
  482. package/dist/components/UI/Flow/index.d.ts +13 -0
  483. package/dist/components/UI/Flow/index.js +44 -0
  484. package/dist/components/UI/Flow/index.js.map +1 -0
  485. package/dist/components/UI/Flow/useFlowAnnotationDrawing.d.ts +25 -0
  486. package/dist/components/UI/Flow/useFlowAnnotationDrawing.js +117 -0
  487. package/dist/components/UI/Flow/useFlowAnnotationDrawing.js.map +1 -0
  488. package/dist/components/UI/Flow/useFlowLabels.d.ts +10 -0
  489. package/dist/components/UI/Flow/useFlowLabels.js +51 -0
  490. package/dist/components/UI/Flow/useFlowLabels.js.map +1 -0
  491. package/dist/components/UI/GeneratedByAI.d.ts +2 -0
  492. package/dist/components/UI/GeneratedByAI.js +12 -0
  493. package/dist/components/UI/GeneratedByAI.js.map +1 -0
  494. package/dist/components/UI/HorizontalScrollArea.d.ts +22 -0
  495. package/dist/components/UI/HorizontalScrollArea.js +74 -0
  496. package/dist/components/UI/HorizontalScrollArea.js.map +1 -0
  497. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.d.ts +21 -0
  498. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js +235 -0
  499. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js.map +1 -0
  500. package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.d.ts +8 -0
  501. package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.js +67 -0
  502. package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.js.map +1 -0
  503. package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.d.ts +8 -0
  504. package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.js +39 -0
  505. package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.js.map +1 -0
  506. package/dist/components/UI/ImageAiAdjust/imageAiReview.d.ts +22 -0
  507. package/dist/components/UI/ImageAiAdjust/imageAiReview.js +37 -0
  508. package/dist/components/UI/ImageAiAdjust/imageAiReview.js.map +1 -0
  509. package/dist/components/UI/ImageAiAdjust/imageAiVerification.d.ts +19 -0
  510. package/dist/components/UI/ImageAiAdjust/imageAiVerification.js +25 -0
  511. package/dist/components/UI/ImageAiAdjust/imageAiVerification.js.map +1 -0
  512. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.d.ts +52 -0
  513. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js +109 -0
  514. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js.map +1 -0
  515. package/dist/components/UI/ImageAnnotator/AnnotationEditor.d.ts +13 -0
  516. package/dist/components/UI/ImageAnnotator/AnnotationEditor.js +362 -0
  517. package/dist/components/UI/ImageAnnotator/AnnotationEditor.js.map +1 -0
  518. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.d.ts +15 -0
  519. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js +61 -0
  520. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js.map +1 -0
  521. package/dist/components/UI/ImageAnnotator/annotationStyle.d.ts +28 -0
  522. package/dist/components/UI/ImageAnnotator/annotationStyle.js +56 -0
  523. package/dist/components/UI/ImageAnnotator/annotationStyle.js.map +1 -0
  524. package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.d.ts +16 -0
  525. package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.js +156 -0
  526. package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.js.map +1 -0
  527. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.d.ts +17 -0
  528. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js +329 -0
  529. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js.map +1 -0
  530. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.d.ts +10 -0
  531. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js +127 -0
  532. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js.map +1 -0
  533. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.d.ts +26 -0
  534. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js +241 -0
  535. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js.map +1 -0
  536. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.d.ts +15 -0
  537. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js +77 -0
  538. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js.map +1 -0
  539. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.d.ts +11 -0
  540. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js +70 -0
  541. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js.map +1 -0
  542. package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.d.ts +12 -0
  543. package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.js +89 -0
  544. package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.js.map +1 -0
  545. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.d.ts +8 -0
  546. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js +58 -0
  547. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js.map +1 -0
  548. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.d.ts +13 -0
  549. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js +183 -0
  550. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js.map +1 -0
  551. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.d.ts +17 -0
  552. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js +79 -0
  553. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js.map +1 -0
  554. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.d.ts +15 -0
  555. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js +46 -0
  556. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js.map +1 -0
  557. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.d.ts +10 -0
  558. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js +91 -0
  559. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js.map +1 -0
  560. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.d.ts +21 -0
  561. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js +45 -0
  562. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js.map +1 -0
  563. package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.d.ts +12 -0
  564. package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.js +64 -0
  565. package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.js.map +1 -0
  566. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.d.ts +15 -0
  567. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js +165 -0
  568. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js.map +1 -0
  569. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.d.ts +15 -0
  570. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js +23 -0
  571. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js.map +1 -0
  572. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.d.ts +8 -0
  573. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js +10 -0
  574. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js.map +1 -0
  575. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.d.ts +9 -0
  576. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js +56 -0
  577. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js.map +1 -0
  578. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.d.ts +29 -0
  579. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js +160 -0
  580. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js.map +1 -0
  581. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.d.ts +14 -0
  582. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js +80 -0
  583. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js.map +1 -0
  584. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.d.ts +5 -0
  585. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js +23 -0
  586. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js.map +1 -0
  587. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.d.ts +2 -0
  588. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js +27 -0
  589. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js.map +1 -0
  590. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.d.ts +98 -0
  591. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js +13 -0
  592. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js.map +1 -0
  593. package/dist/components/UI/ImageMaskPainter/index.d.ts +24 -0
  594. package/dist/components/UI/ImageMaskPainter/index.js +284 -0
  595. package/dist/components/UI/ImageMaskPainter/index.js.map +1 -0
  596. package/dist/components/UI/ImageMaskPainter/maskStrokes.d.ts +19 -0
  597. package/dist/components/UI/ImageMaskPainter/maskStrokes.js +71 -0
  598. package/dist/components/UI/ImageMaskPainter/maskStrokes.js.map +1 -0
  599. package/dist/components/UI/ImagePlaceholder.d.ts +24 -0
  600. package/dist/components/UI/ImagePlaceholder.js +29 -0
  601. package/dist/components/UI/ImagePlaceholder.js.map +1 -0
  602. package/dist/components/UI/ImageZoomOverlay.d.ts +7 -0
  603. package/dist/components/UI/ImageZoomOverlay.js +53 -0
  604. package/dist/components/UI/ImageZoomOverlay.js.map +1 -0
  605. package/dist/components/UI/InformationCard.d.ts +26 -0
  606. package/dist/components/UI/InformationCard.js +89 -0
  607. package/dist/components/UI/InformationCard.js.map +1 -0
  608. package/dist/components/UI/Kanban/KanbanBoard.d.ts +26 -0
  609. package/dist/components/UI/Kanban/KanbanBoard.js +91 -0
  610. package/dist/components/UI/Kanban/KanbanBoard.js.map +1 -0
  611. package/dist/components/UI/Kanban/KanbanCard.d.ts +22 -0
  612. package/dist/components/UI/Kanban/KanbanCard.js +47 -0
  613. package/dist/components/UI/Kanban/KanbanCard.js.map +1 -0
  614. package/dist/components/UI/Kanban/KanbanLane.d.ts +37 -0
  615. package/dist/components/UI/Kanban/KanbanLane.js +77 -0
  616. package/dist/components/UI/Kanban/KanbanLane.js.map +1 -0
  617. package/dist/components/UI/Kanban/index.d.ts +4 -0
  618. package/dist/components/UI/Kanban/index.js +11 -0
  619. package/dist/components/UI/Kanban/index.js.map +1 -0
  620. package/dist/components/UI/Kanban/kanbanBoardContext.d.ts +13 -0
  621. package/dist/components/UI/Kanban/kanbanBoardContext.js +13 -0
  622. package/dist/components/UI/Kanban/kanbanBoardContext.js.map +1 -0
  623. package/dist/components/UI/LazyMarkdown.d.ts +5 -0
  624. package/dist/components/UI/LazyMarkdown.js +8 -0
  625. package/dist/components/UI/LazyMarkdown.js.map +1 -0
  626. package/dist/components/UI/LoadingPage.d.ts +2 -0
  627. package/dist/components/UI/LoadingPage.js +13 -0
  628. package/dist/components/UI/LoadingPage.js.map +1 -0
  629. package/dist/components/UI/LoadingSpinner.d.ts +14 -0
  630. package/dist/components/UI/LoadingSpinner.js +32 -0
  631. package/dist/components/UI/LoadingSpinner.js.map +1 -0
  632. package/dist/components/UI/MaterialSymbol/consts.d.ts +2 -0
  633. package/dist/components/UI/MaterialSymbol/consts.js +3472 -0
  634. package/dist/components/UI/MaterialSymbol/consts.js.map +1 -0
  635. package/dist/components/UI/MaterialSymbol/index.d.ts +18 -0
  636. package/dist/components/UI/MaterialSymbol/index.js +51 -0
  637. package/dist/components/UI/MaterialSymbol/index.js.map +1 -0
  638. package/dist/components/UI/MaterialSymbol/types.d.ts +37 -0
  639. package/dist/components/UI/MaterialSymbol/types.js +2 -0
  640. package/dist/components/UI/MaterialSymbol/types.js.map +1 -0
  641. package/dist/components/UI/NoDataFound/index.d.ts +31 -0
  642. package/dist/components/UI/NoDataFound/index.js +215 -0
  643. package/dist/components/UI/NoDataFound/index.js.map +1 -0
  644. package/dist/components/UI/NoDataFound/noDataFoundPresets.d.ts +31 -0
  645. package/dist/components/UI/NoDataFound/noDataFoundPresets.js +99 -0
  646. package/dist/components/UI/NoDataFound/noDataFoundPresets.js.map +1 -0
  647. package/dist/components/UI/ReferenceCard.d.ts +16 -0
  648. package/dist/components/UI/ReferenceCard.js +59 -0
  649. package/dist/components/UI/ReferenceCard.js.map +1 -0
  650. package/dist/components/UI/RichTextContent.d.ts +14 -0
  651. package/dist/components/UI/RichTextContent.js +30 -0
  652. package/dist/components/UI/RichTextContent.js.map +1 -0
  653. package/dist/components/UI/SkeletonLoading.d.ts +9 -0
  654. package/dist/components/UI/SkeletonLoading.js +20 -0
  655. package/dist/components/UI/SkeletonLoading.js.map +1 -0
  656. package/dist/components/UI/ThreeDots.d.ts +11 -0
  657. package/dist/components/UI/ThreeDots.js +22 -0
  658. package/dist/components/UI/ThreeDots.js.map +1 -0
  659. package/dist/components/UI/Toast.d.ts +16 -0
  660. package/dist/components/UI/Toast.js +81 -0
  661. package/dist/components/UI/Toast.js.map +1 -0
  662. package/dist/components/UI/ToastHost.d.ts +2 -0
  663. package/dist/components/UI/ToastHost.js +25 -0
  664. package/dist/components/UI/ToastHost.js.map +1 -0
  665. package/dist/components/UI/TypingEffect.d.ts +10 -0
  666. package/dist/components/UI/TypingEffect.js +31 -0
  667. package/dist/components/UI/TypingEffect.js.map +1 -0
  668. package/dist/components/UI/UmodeLogo.d.ts +10 -0
  669. package/dist/components/UI/UmodeLogo.js +128 -0
  670. package/dist/components/UI/UmodeLogo.js.map +1 -0
  671. package/dist/components/UI/UserMenu.d.ts +50 -0
  672. package/dist/components/UI/UserMenu.js +212 -0
  673. package/dist/components/UI/UserMenu.js.map +1 -0
  674. package/dist/components/UI/UsersAvatar.d.ts +7 -0
  675. package/dist/components/UI/UsersAvatar.js +29 -0
  676. package/dist/components/UI/UsersAvatar.js.map +1 -0
  677. package/dist/components/UI/access/UiAccessContext.d.ts +21 -0
  678. package/dist/components/UI/access/UiAccessContext.js +14 -0
  679. package/dist/components/UI/access/UiAccessContext.js.map +1 -0
  680. package/dist/components/UI/cells/ArrayCell.d.ts +5 -0
  681. package/dist/components/UI/cells/ArrayCell.js +25 -0
  682. package/dist/components/UI/cells/ArrayCell.js.map +1 -0
  683. package/dist/components/UI/cells/BooleanCell.d.ts +5 -0
  684. package/dist/components/UI/cells/BooleanCell.js +22 -0
  685. package/dist/components/UI/cells/BooleanCell.js.map +1 -0
  686. package/dist/components/UI/cells/DetailsTableCell.d.ts +7 -0
  687. package/dist/components/UI/cells/DetailsTableCell.js +30 -0
  688. package/dist/components/UI/cells/DetailsTableCell.js.map +1 -0
  689. package/dist/components/UI/cells/ProductImageCell.d.ts +5 -0
  690. package/dist/components/UI/cells/ProductImageCell.js +21 -0
  691. package/dist/components/UI/cells/ProductImageCell.js.map +1 -0
  692. package/dist/components/UI/cells/UrlLinkCell.d.ts +6 -0
  693. package/dist/components/UI/cells/UrlLinkCell.js +19 -0
  694. package/dist/components/UI/cells/UrlLinkCell.js.map +1 -0
  695. package/dist/components/Upload/SimpleUploaderComponent.d.ts +9 -0
  696. package/dist/components/Upload/SimpleUploaderComponent.js +72 -0
  697. package/dist/components/Upload/SimpleUploaderComponent.js.map +1 -0
  698. package/dist/components/Upload/UploaderComponent.d.ts +29 -0
  699. package/dist/components/Upload/UploaderComponent.js +241 -0
  700. package/dist/components/Upload/UploaderComponent.js.map +1 -0
  701. package/dist/components/Upload/XlsExportButton.d.ts +13 -0
  702. package/dist/components/Upload/XlsExportButton.js +47 -0
  703. package/dist/components/Upload/XlsExportButton.js.map +1 -0
  704. package/dist/helpers/composeRefs.d.ts +7 -0
  705. package/dist/helpers/composeRefs.js +14 -0
  706. package/dist/helpers/composeRefs.js.map +1 -0
  707. package/dist/helpers/dateHelpers.d.ts +47 -0
  708. package/dist/helpers/dateHelpers.js +69 -0
  709. package/dist/helpers/dateHelpers.js.map +1 -0
  710. package/dist/helpers/fileAttachments.d.ts +3 -0
  711. package/dist/helpers/fileAttachments.js +17 -0
  712. package/dist/helpers/fileAttachments.js.map +1 -0
  713. package/dist/helpers/formatHelpers.d.ts +36 -0
  714. package/dist/helpers/formatHelpers.js +65 -0
  715. package/dist/helpers/formatHelpers.js.map +1 -0
  716. package/dist/helpers/iconFont.d.ts +9 -0
  717. package/dist/helpers/iconFont.js +37 -0
  718. package/dist/helpers/iconFont.js.map +1 -0
  719. package/dist/helpers/imageCompression.d.ts +5 -0
  720. package/dist/helpers/imageCompression.js +49 -0
  721. package/dist/helpers/imageCompression.js.map +1 -0
  722. package/dist/helpers/imageFile.d.ts +32 -0
  723. package/dist/helpers/imageFile.js +108 -0
  724. package/dist/helpers/imageFile.js.map +1 -0
  725. package/dist/helpers/layeredSurfaces.d.ts +28 -0
  726. package/dist/helpers/layeredSurfaces.js +19 -0
  727. package/dist/helpers/layeredSurfaces.js.map +1 -0
  728. package/dist/helpers/mathHelpers.d.ts +14 -0
  729. package/dist/helpers/mathHelpers.js +13 -0
  730. package/dist/helpers/mathHelpers.js.map +1 -0
  731. package/dist/helpers/mergeClasses.d.ts +10 -0
  732. package/dist/helpers/mergeClasses.js +34 -0
  733. package/dist/helpers/mergeClasses.js.map +1 -0
  734. package/dist/helpers/moduleLoadErrorHelpers.d.ts +1 -0
  735. package/dist/helpers/moduleLoadErrorHelpers.js +25 -0
  736. package/dist/helpers/moduleLoadErrorHelpers.js.map +1 -0
  737. package/dist/helpers/objectHelpers.d.ts +13 -0
  738. package/dist/helpers/objectHelpers.js +59 -0
  739. package/dist/helpers/objectHelpers.js.map +1 -0
  740. package/dist/helpers/portalHost.d.ts +10 -0
  741. package/dist/helpers/portalHost.js +7 -0
  742. package/dist/helpers/portalHost.js.map +1 -0
  743. package/dist/helpers/richText.d.ts +46 -0
  744. package/dist/helpers/richText.js +197 -0
  745. package/dist/helpers/richText.js.map +1 -0
  746. package/dist/helpers/stringHelpers.d.ts +45 -0
  747. package/dist/helpers/stringHelpers.js +57 -0
  748. package/dist/helpers/stringHelpers.js.map +1 -0
  749. package/dist/helpers/themeSkins.d.ts +12 -0
  750. package/dist/helpers/themeSkins.js +13 -0
  751. package/dist/helpers/themeSkins.js.map +1 -0
  752. package/dist/helpers/themeTokens.d.ts +28 -0
  753. package/dist/helpers/themeTokens.js +35 -0
  754. package/dist/helpers/themeTokens.js.map +1 -0
  755. package/dist/helpers/uiErrorPresenter.d.ts +21 -0
  756. package/dist/helpers/uiErrorPresenter.js +10 -0
  757. package/dist/helpers/uiErrorPresenter.js.map +1 -0
  758. package/dist/helpers/uiLogger.d.ts +8 -0
  759. package/dist/helpers/uiLogger.js +16 -0
  760. package/dist/helpers/uiLogger.js.map +1 -0
  761. package/dist/helpers/uiPreferences.d.ts +13 -0
  762. package/dist/helpers/uiPreferences.js +35 -0
  763. package/dist/helpers/uiPreferences.js.map +1 -0
  764. package/dist/helpers/urlParamSync.d.ts +19 -0
  765. package/dist/helpers/urlParamSync.js +54 -0
  766. package/dist/helpers/urlParamSync.js.map +1 -0
  767. package/dist/helpers/utilityHelpers.d.ts +81 -0
  768. package/dist/helpers/utilityHelpers.js +133 -0
  769. package/dist/helpers/utilityHelpers.js.map +1 -0
  770. package/dist/helpers/validationHelpers.d.ts +36 -0
  771. package/dist/helpers/validationHelpers.js +44 -0
  772. package/dist/helpers/validationHelpers.js.map +1 -0
  773. package/dist/hooks/useAnchoredFloating.d.ts +22 -0
  774. package/dist/hooks/useAnchoredFloating.js +59 -0
  775. package/dist/hooks/useAnchoredFloating.js.map +1 -0
  776. package/dist/hooks/useBreakpoint.d.ts +16 -0
  777. package/dist/hooks/useBreakpoint.js +47 -0
  778. package/dist/hooks/useBreakpoint.js.map +1 -0
  779. package/dist/hooks/useDebounce.d.ts +8 -0
  780. package/dist/hooks/useDebounce.js +36 -0
  781. package/dist/hooks/useDebounce.js.map +1 -0
  782. package/dist/hooks/useFileAttachments.d.ts +43 -0
  783. package/dist/hooks/useFileAttachments.js +158 -0
  784. package/dist/hooks/useFileAttachments.js.map +1 -0
  785. package/dist/hooks/useHoverCapable.d.ts +6 -0
  786. package/dist/hooks/useHoverCapable.js +28 -0
  787. package/dist/hooks/useHoverCapable.js.map +1 -0
  788. package/dist/hooks/useInlineEditor.d.ts +5 -0
  789. package/dist/hooks/useInlineEditor.js +42 -0
  790. package/dist/hooks/useInlineEditor.js.map +1 -0
  791. package/dist/hooks/useMobile.d.ts +7 -0
  792. package/dist/hooks/useMobile.js +8 -0
  793. package/dist/hooks/useMobile.js.map +1 -0
  794. package/dist/hooks/useNotification.d.ts +38 -0
  795. package/dist/hooks/useNotification.js +39 -0
  796. package/dist/hooks/useNotification.js.map +1 -0
  797. package/dist/hooks/useResolvedTheme.d.ts +7 -0
  798. package/dist/hooks/useResolvedTheme.js +15 -0
  799. package/dist/hooks/useResolvedTheme.js.map +1 -0
  800. package/dist/hooks/useThemeSkin.d.ts +7 -0
  801. package/dist/hooks/useThemeSkin.js +19 -0
  802. package/dist/hooks/useThemeSkin.js.map +1 -0
  803. package/dist/hooks/useVoiceTranscription.d.ts +29 -0
  804. package/dist/hooks/useVoiceTranscription.js +208 -0
  805. package/dist/hooks/useVoiceTranscription.js.map +1 -0
  806. package/dist/index.d.ts +63 -0
  807. package/dist/index.js +157 -0
  808. package/dist/index.js.map +1 -0
  809. package/dist/interfaces/IFileAttachment.d.ts +18 -0
  810. package/dist/interfaces/IFileAttachment.js +2 -0
  811. package/dist/interfaces/IFileAttachment.js.map +1 -0
  812. package/dist/interfaces/IFilterOption.d.ts +12 -0
  813. package/dist/interfaces/IFilterOption.js +2 -0
  814. package/dist/interfaces/IFilterOption.js.map +1 -0
  815. package/dist/locales/en/ui.json.d.ts +682 -0
  816. package/dist/locales/en/ui.json.js +120 -0
  817. package/dist/locales/en/ui.json.js.map +1 -0
  818. package/dist/locales/index.d.ts +1362 -0
  819. package/dist/locales/index.js +7 -0
  820. package/dist/locales/index.js.map +1 -0
  821. package/dist/locales/pt/ui.json.d.ts +682 -0
  822. package/dist/locales/pt/ui.json.js +120 -0
  823. package/dist/locales/pt/ui.json.js.map +1 -0
  824. package/dist/motion/index.d.ts +2 -0
  825. package/dist/motion/index.js +17 -0
  826. package/dist/motion/index.js.map +1 -0
  827. package/dist/motion/motionPresets.d.ts +44 -0
  828. package/dist/motion/motionPresets.js +67 -0
  829. package/dist/motion/motionPresets.js.map +1 -0
  830. package/dist/motion/motionTokens.d.ts +40 -0
  831. package/dist/motion/motionTokens.js +29 -0
  832. package/dist/motion/motionTokens.js.map +1 -0
  833. package/package.json +245 -0
  834. package/src/assets/fonts/LICENSE-Inter.txt +92 -0
  835. package/src/assets/fonts/LICENSE-MaterialSymbols.txt +202 -0
  836. package/src/assets/fonts/LICENSE-Virgil.txt +45 -0
  837. package/src/assets/fonts/inter-latin-ext.woff2 +0 -0
  838. package/src/assets/fonts/inter-latin.woff2 +0 -0
  839. package/src/assets/fonts/material-symbols-outlined.woff2 +0 -0
  840. package/src/assets/fonts/virgil.woff2 +0 -0
  841. package/src/assets/styles/base.css +585 -0
  842. package/src/assets/styles/index.css +1 -0
  843. package/src/assets/styles/theme.css +453 -0
  844. package/tailwind-plugins/glass.js +162 -0
  845. package/tailwind.preset.js +392 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableCommitQueue.js","sources":["../../../../src/components/UI/DataTable/useDataTableCommitQueue.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { uiLogger } from '@/helpers/uiLogger';\n\nimport { buildGridCellKey } from './grid/gridTypes';\nimport type { IDataTableFillChange, IDataTableRow } from './types';\n\nconst DEFAULT_DEBOUNCE_MS = 800;\nconst DEFAULT_CONCURRENCY = 4;\n\nexport type TDataTableCommitStatus = 'pending' | 'saving' | 'saved' | 'error';\n\nexport interface IDataTableCommitItem<T extends IDataTableRow> {\n row: T;\n /** Accumulated values for that row, keyed by column id. */\n changes: Record<string, unknown>;\n}\n\n/**\n * Per-row outcome of a batch save. Returning it lets an endpoint with partial\n * success mark only the rows that actually failed, instead of the whole batch.\n */\nexport interface IDataTableCommitRowResult {\n rowId: string;\n ok: boolean;\n message?: string;\n}\n\ninterface IPendingChange {\n rowId: string;\n columnId: string;\n value: unknown;\n sequence: number;\n}\n\ninterface IUseDataTableCommitQueueParams<T extends IDataTableRow> {\n rows: Array<T>;\n /** One call per row, run with limited concurrency. The common case. */\n saveRow?: (item: IDataTableCommitItem<T>) => Promise<void>;\n /**\n * One call for everything, for hosts that own a bulk endpoint. Wins over\n * `saveRow`. Return per-row results to report partial success; returning\n * nothing means every row saved.\n */\n saveBatch?: (items: Array<IDataTableCommitItem<T>>) => Promise<void | Array<IDataTableCommitRowResult>>;\n /**\n * Writes an edited value onto the row for the optimistic overlay. The default\n * assigns the column id as a top-level key, which only holds when the column id\n * IS the row field: a column reading `row.productReferenceId` (or a dotted path)\n * must provide this, or the save succeeds and the screen never changes.\n */\n applyChange?: (row: T, columnId: string, value: unknown) => T;\n debounceMs?: number;\n concurrency?: number;\n /** `false` keeps every change pending until `flush()` (an explicit save button). */\n autoFlush?: boolean;\n}\n\nexport interface IUseDataTableCommitQueueResult<T extends IDataTableRow> {\n /** `rows` with every applied edit merged in, so the cells show what was typed. */\n mergedRows: Array<T>;\n onCellChange: (row: T, columnId: string, value: unknown) => void;\n /** Whole fill range in one update: one render, one flush, one request per row. */\n onFillCells: (changes: Array<IDataTableFillChange<T>>) => void;\n flush: () => Promise<void>;\n retryFailed: () => Promise<void>;\n statuses: ReadonlyMap<string, TDataTableCommitStatus>;\n isDirty: boolean;\n isSaving: boolean;\n pendingCount: number;\n errorCount: number;\n}\n\nconst runWithConcurrency = async <TItem>(\n items: Array<TItem>,\n limit: number,\n worker: (item: TItem) => Promise<void>,\n): Promise<void> => {\n let nextIndex = 0;\n\n const runners = Array.from({ length: Math.max(1, Math.min(limit, items.length)) }, async () => {\n while (nextIndex < items.length) {\n const item = items[nextIndex];\n nextIndex += 1;\n if (item !== undefined) await worker(item);\n }\n });\n\n await Promise.all(runners);\n};\n\n/**\n * The single persistence path for inline editing. It replaces the fire-and-forget\n * buffer with a queue that:\n *\n * - deduplicates by (row, column), so typing three times in a cell sends one value;\n * - stamps every change with a sequence number, so a slow response can never mark\n * a newer value as saved (and never overwrites it);\n * - runs one request per row with a concurrency cap, instead of `Promise.all` over\n * everything (a 40-row fill would otherwise open 40 sockets at once);\n * - keeps the optimistic overlay until the cell is actually saved, so a refetch\n * arriving mid-flight no longer wipes what the user typed;\n * - flushes on unmount and warns on tab close, so leaving the page does not\n * silently discard pending edits;\n * - exposes a per-cell status the table paints (saving / saved / error).\n */\nexport function useDataTableCommitQueue<T extends IDataTableRow>({\n rows,\n saveRow,\n saveBatch,\n applyChange,\n debounceMs = DEFAULT_DEBOUNCE_MS,\n concurrency = DEFAULT_CONCURRENCY,\n autoFlush = true,\n}: IUseDataTableCommitQueueParams<T>): IUseDataTableCommitQueueResult<T> {\n const overlayRef = useRef(new Map<string, Record<string, unknown>>());\n const pendingRef = useRef(new Map<string, IPendingChange>());\n const inFlightRef = useRef(new Map<string, number>());\n const statusesRef = useRef(new Map<string, TDataTableCommitStatus>());\n const sequenceRef = useRef(0);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isSavingRef = useRef(false);\n\n const rowsRef = useRef(rows);\n rowsRef.current = rows;\n const saveRowRef = useRef(saveRow);\n saveRowRef.current = saveRow;\n const saveBatchRef = useRef(saveBatch);\n saveBatchRef.current = saveBatch;\n const applyChangeRef = useRef(applyChange);\n applyChangeRef.current = applyChange;\n\n const [version, setVersion] = useState(0);\n const publish = useCallback(() => setVersion((current) => current + 1), []);\n\n const flushRef = useRef<() => Promise<void>>(async () => undefined);\n\n const flush = useCallback(async () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n if (pendingRef.current.size === 0) return;\n\n const outgoing = Array.from(pendingRef.current.values());\n pendingRef.current.clear();\n\n const rowById = new Map(rowsRef.current.map((row) => [row.id, row]));\n const itemsByRowId = new Map<string, IDataTableCommitItem<T>>();\n\n outgoing.forEach((change) => {\n const cellKey = buildGridCellKey(change.rowId, change.columnId);\n inFlightRef.current.set(cellKey, change.sequence);\n statusesRef.current.set(cellKey, 'saving');\n\n const row = rowById.get(change.rowId);\n if (!row) return;\n\n const item = itemsByRowId.get(change.rowId) ?? { row, changes: {} };\n item.changes[change.columnId] = change.value;\n itemsByRowId.set(change.rowId, item);\n });\n\n isSavingRef.current = true;\n publish();\n\n const settleRow = (rowChanges: Array<IPendingChange>, succeeded: boolean) => {\n rowChanges.forEach((change) => {\n const cellKey = buildGridCellKey(change.rowId, change.columnId);\n // A newer edit replaced this value while the request was in flight: its own\n // flush owns the cell now, so this response says nothing about it.\n if (inFlightRef.current.get(cellKey) !== change.sequence) return;\n\n inFlightRef.current.delete(cellKey);\n statusesRef.current.set(cellKey, succeeded ? 'saved' : 'error');\n if (!succeeded) pendingRef.current.set(cellKey, change);\n });\n };\n\n const changesByRowId = new Map<string, Array<IPendingChange>>();\n outgoing.forEach((change) => {\n const list = changesByRowId.get(change.rowId) ?? [];\n list.push(change);\n changesByRowId.set(change.rowId, list);\n });\n\n const items = Array.from(itemsByRowId.values());\n\n try {\n if (saveBatchRef.current) {\n try {\n const rowResults = await saveBatchRef.current(items);\n const failedRowIds = new Set(\n (Array.isArray(rowResults) ? rowResults : []).filter((result) => !result.ok).map((result) => result.rowId),\n );\n\n changesByRowId.forEach((rowChanges, rowId) => settleRow(rowChanges, !failedRowIds.has(rowId)));\n } catch (error) {\n uiLogger.error('DataTable batch save failed', error);\n changesByRowId.forEach((rowChanges) => settleRow(rowChanges, false));\n }\n } else if (saveRowRef.current) {\n await runWithConcurrency(items, concurrency, async (item) => {\n const rowChanges = changesByRowId.get(item.row.id) ?? [];\n try {\n await saveRowRef.current?.(item);\n settleRow(rowChanges, true);\n } catch (error) {\n uiLogger.error('DataTable row save failed', error);\n settleRow(rowChanges, false);\n }\n });\n }\n } finally {\n isSavingRef.current = false;\n publish();\n }\n }, [concurrency, publish]);\n\n flushRef.current = flush;\n\n const scheduleFlush = useCallback(() => {\n if (!autoFlush) return;\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n void flushRef.current();\n }, debounceMs);\n }, [autoFlush, debounceMs]);\n\n const applyChanges = useCallback(\n (changes: Array<{ rowId: string; columnId: string; value: unknown }>) => {\n changes.forEach(({ rowId, columnId, value }) => {\n sequenceRef.current += 1;\n\n const rowOverlay = { ...(overlayRef.current.get(rowId) ?? {}), [columnId]: value };\n overlayRef.current.set(rowId, rowOverlay);\n\n const cellKey = buildGridCellKey(rowId, columnId);\n pendingRef.current.set(cellKey, { rowId, columnId, value, sequence: sequenceRef.current });\n statusesRef.current.set(cellKey, 'pending');\n });\n\n publish();\n scheduleFlush();\n },\n [publish, scheduleFlush],\n );\n\n const onCellChange = useCallback(\n (row: T, columnId: string, value: unknown) => applyChanges([{ rowId: row.id, columnId, value }]),\n [applyChanges],\n );\n\n const onFillCells = useCallback(\n (changes: Array<IDataTableFillChange<T>>) =>\n applyChanges(\n (changes ?? []).map((change) => ({ rowId: change.row.id, columnId: change.columnId, value: change.value })),\n ),\n [applyChanges],\n );\n\n const retryFailed = useCallback(async () => {\n const failedKeys = Array.from(statusesRef.current.entries())\n .filter(([, status]) => status === 'error')\n .map(([cellKey]) => cellKey);\n if (failedKeys.length === 0) return;\n\n failedKeys.forEach((cellKey) => statusesRef.current.set(cellKey, 'pending'));\n await flush();\n }, [flush]);\n\n // A fresh page of rows already reflects whatever was persisted, so its overlay\n // entries are noise. Cells still pending, in flight or failed keep theirs: those\n // values only exist here.\n const previousRowsRef = useRef(rows);\n useEffect(() => {\n if (previousRowsRef.current === rows) return;\n previousRowsRef.current = rows;\n\n let changed = false;\n overlayRef.current.forEach((rowOverlay, rowId) => {\n Object.keys(rowOverlay).forEach((columnId) => {\n const cellKey = buildGridCellKey(rowId, columnId);\n if (statusesRef.current.get(cellKey) !== 'saved') return;\n\n delete rowOverlay[columnId];\n statusesRef.current.delete(cellKey);\n changed = true;\n });\n\n if (Object.keys(rowOverlay).length === 0) overlayRef.current.delete(rowId);\n });\n\n if (changed) publish();\n }, [rows, publish]);\n\n useEffect(\n () => () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n // Fire and forget on unmount: the request still reaches the backend, which is\n // the difference between \"left the page\" and \"lost the edit\".\n void flushRef.current();\n },\n [],\n );\n\n const hasUnsavedWork = pendingRef.current.size > 0 || inFlightRef.current.size > 0;\n\n useEffect(() => {\n if (!hasUnsavedWork) return undefined;\n\n const handleBeforeUnload = (event: BeforeUnloadEvent) => {\n void flushRef.current();\n event.preventDefault();\n event.returnValue = '';\n };\n\n window.addEventListener('beforeunload', handleBeforeUnload);\n return () => window.removeEventListener('beforeunload', handleBeforeUnload);\n }, [hasUnsavedWork]);\n\n const mergedRows = useMemo<Array<T>>(() => {\n const safeRows = rows ?? [];\n if (overlayRef.current.size === 0) return safeRows;\n\n const applyToRow =\n applyChangeRef.current ??\n ((row: T, columnId: string, value: unknown) => ({\n ...row,\n [columnId]: value,\n }));\n\n return safeRows.map((row) => {\n const rowOverlay = overlayRef.current.get(row.id);\n if (!rowOverlay || Object.keys(rowOverlay).length === 0) return row;\n\n return Object.entries(rowOverlay).reduce(\n (current, [columnId, value]) => applyToRow(current, columnId, value),\n row,\n );\n });\n // `version` is the queue's own change signal: the overlay lives in a ref so\n // editing a cell does not rebuild it on every unrelated render.\n }, [rows, version]);\n\n const statuses = useMemo(() => new Map(statusesRef.current), [version]);\n\n const pendingCount = pendingRef.current.size + inFlightRef.current.size;\n const errorCount = Array.from(statusesRef.current.values()).filter((status) => status === 'error').length;\n\n return {\n mergedRows,\n onCellChange,\n onFillCells,\n flush,\n retryFailed,\n statuses,\n isDirty: pendingCount > 0,\n isSaving: isSavingRef.current,\n pendingCount,\n errorCount,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { IDataTableRow } from './types';
2
+ export interface IDataTableEditBufferItem<T> {
3
+ id: string;
4
+ data: Partial<T>;
5
+ }
6
+ interface IUseDataTableEditBufferParams<T extends IDataTableRow> {
7
+ rows: Array<T>;
8
+ onBatchUpdate: (items: Array<IDataTableEditBufferItem<T>>) => Promise<void>;
9
+ autoFlushMs?: number;
10
+ }
11
+ interface IUseDataTableEditBufferResult<T extends IDataTableRow> {
12
+ /** `rows` with pending edits applied, so editable `getValue` reflects typing. */
13
+ mergedRows: Array<T>;
14
+ /** Wire to `editing.onCellChange`: records the edit and enqueues the batch save. */
15
+ onCellChange: (row: T, columnId: string, value: unknown) => void;
16
+ /** Wire to `spreadsheet.fill.onFillCells`: a whole fill range in one update. */
17
+ onFillCells: (changes: Array<{
18
+ row: T;
19
+ columnId: string;
20
+ value: unknown;
21
+ }>) => void;
22
+ /** Manual save: flushes the pending queue to the host handler. */
23
+ flush: () => Promise<void>;
24
+ isDirty: boolean;
25
+ queueSize: number;
26
+ loading: boolean;
27
+ statuses: ReadonlyMap<string, string>;
28
+ }
29
+ /**
30
+ * Backwards-compatible façade over `useDataTableCommitQueue`, kept because five
31
+ * report tables already speak this shape (`onBatchUpdate` receiving `{ id, data }`).
32
+ * Everything underneath is the queue, so those tables inherit the dedupe, the
33
+ * stale-response guard, the flush on unmount and the per-cell status for free.
34
+ */
35
+ export declare function useDataTableEditBuffer<T extends IDataTableRow>({ rows, onBatchUpdate, autoFlushMs, }: IUseDataTableEditBufferParams<T>): IUseDataTableEditBufferResult<T>;
36
+ export {};
@@ -0,0 +1,29 @@
1
+ import { useRef, useCallback } from "react";
2
+ import { useDataTableCommitQueue } from "./useDataTableCommitQueue.js";
3
+ const DEFAULT_AUTO_FLUSH_MS = 5e3;
4
+ function useDataTableEditBuffer({
5
+ rows,
6
+ onBatchUpdate,
7
+ autoFlushMs = DEFAULT_AUTO_FLUSH_MS
8
+ }) {
9
+ const onBatchUpdateRef = useRef(onBatchUpdate);
10
+ onBatchUpdateRef.current = onBatchUpdate;
11
+ const saveBatch = useCallback(async (items) => {
12
+ await onBatchUpdateRef.current(items.map((item) => ({ id: item.row.id, data: item.changes })));
13
+ }, []);
14
+ const queue = useDataTableCommitQueue({ rows, saveBatch, debounceMs: autoFlushMs });
15
+ return {
16
+ mergedRows: queue.mergedRows,
17
+ onCellChange: queue.onCellChange,
18
+ onFillCells: queue.onFillCells,
19
+ flush: queue.flush,
20
+ isDirty: queue.isDirty,
21
+ queueSize: queue.pendingCount,
22
+ loading: queue.isSaving,
23
+ statuses: queue.statuses
24
+ };
25
+ }
26
+ export {
27
+ useDataTableEditBuffer
28
+ };
29
+ //# sourceMappingURL=useDataTableEditBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableEditBuffer.js","sources":["../../../../src/components/UI/DataTable/useDataTableEditBuffer.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nimport type { IDataTableRow } from './types';\nimport { type IDataTableCommitItem, useDataTableCommitQueue } from './useDataTableCommitQueue';\n\nconst DEFAULT_AUTO_FLUSH_MS = 5000;\n\nexport interface IDataTableEditBufferItem<T> {\n id: string;\n data: Partial<T>;\n}\n\ninterface IUseDataTableEditBufferParams<T extends IDataTableRow> {\n rows: Array<T>;\n onBatchUpdate: (items: Array<IDataTableEditBufferItem<T>>) => Promise<void>;\n autoFlushMs?: number;\n}\n\ninterface IUseDataTableEditBufferResult<T extends IDataTableRow> {\n /** `rows` with pending edits applied, so editable `getValue` reflects typing. */\n mergedRows: Array<T>;\n /** Wire to `editing.onCellChange`: records the edit and enqueues the batch save. */\n onCellChange: (row: T, columnId: string, value: unknown) => void;\n /** Wire to `spreadsheet.fill.onFillCells`: a whole fill range in one update. */\n onFillCells: (changes: Array<{ row: T; columnId: string; value: unknown }>) => void;\n /** Manual save: flushes the pending queue to the host handler. */\n flush: () => Promise<void>;\n isDirty: boolean;\n queueSize: number;\n loading: boolean;\n statuses: ReadonlyMap<string, string>;\n}\n\n/**\n * Backwards-compatible façade over `useDataTableCommitQueue`, kept because five\n * report tables already speak this shape (`onBatchUpdate` receiving `{ id, data }`).\n * Everything underneath is the queue, so those tables inherit the dedupe, the\n * stale-response guard, the flush on unmount and the per-cell status for free.\n */\nexport function useDataTableEditBuffer<T extends IDataTableRow>({\n rows,\n onBatchUpdate,\n autoFlushMs = DEFAULT_AUTO_FLUSH_MS,\n}: IUseDataTableEditBufferParams<T>): IUseDataTableEditBufferResult<T> {\n const onBatchUpdateRef = useRef(onBatchUpdate);\n onBatchUpdateRef.current = onBatchUpdate;\n\n const saveBatch = useCallback(async (items: Array<IDataTableCommitItem<T>>) => {\n await onBatchUpdateRef.current(items.map((item) => ({ id: item.row.id, data: item.changes as Partial<T> })));\n }, []);\n\n const queue = useDataTableCommitQueue<T>({ rows, saveBatch, debounceMs: autoFlushMs });\n\n return {\n mergedRows: queue.mergedRows,\n onCellChange: queue.onCellChange,\n onFillCells: queue.onFillCells,\n flush: queue.flush,\n isDirty: queue.isDirty,\n queueSize: queue.pendingCount,\n loading: queue.isSaving,\n statuses: queue.statuses,\n };\n}\n"],"names":[],"mappings":";;AAKA,MAAM,wBAAwB;AAkCvB,SAAS,uBAAgD;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAAuE;AACrE,QAAM,mBAAmB,OAAO,aAAa;AAC7C,mBAAiB,UAAU;AAE3B,QAAM,YAAY,YAAY,OAAO,UAA0C;AAC7E,UAAM,iBAAiB,QAAQ,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,IAAI,IAAI,MAAM,KAAK,QAAA,EAAwB,CAAC;AAAA,EAC7G,GAAG,CAAA,CAAE;AAEL,QAAM,QAAQ,wBAA2B,EAAE,MAAM,WAAW,YAAY,aAAa;AAErF,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,cAAc,MAAM;AAAA,IACpB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,IACf,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,EAAA;AAEpB;"}
@@ -0,0 +1,65 @@
1
+ import { ColumnSizingState, Updater, VisibilityState } from '@tanstack/react-table';
2
+ import { IDataTableColumnConfig, IDataTableConfig, IDataTableRow, IDataTableSortState } from './types';
3
+ export interface IDataTableClientPaginationState {
4
+ page: number;
5
+ pageSize: number;
6
+ }
7
+ export interface IDataTablePagination {
8
+ pageSize: number;
9
+ numberOfPages: number;
10
+ currentPage: number;
11
+ setCurrentPage: (page: number) => void;
12
+ onPageSizeChange?: (pageSize: number) => void;
13
+ /** Total de registros. Presente, a barra mostra o intervalo em vez do número da página. */
14
+ totalItems?: number;
15
+ }
16
+ interface IUseDataTableInstanceParams<T extends IDataTableRow, C extends IDataTableRow = IDataTableRow> {
17
+ config: IDataTableConfig<T, C>;
18
+ rows: Array<T>;
19
+ loading: boolean;
20
+ sort?: IDataTableSortState | null;
21
+ onSortChange?: (sort: IDataTableSortState | null) => void;
22
+ onSearch?: (value: string) => void;
23
+ initialSearch?: string;
24
+ onSearchTermChange?: (value: string) => void;
25
+ pagination?: IDataTablePagination;
26
+ /** Client mode: seeds the internal page/pageSize (1-based page), e.g. from the URL. */
27
+ initialClientPagination?: IDataTableClientPaginationState;
28
+ /** Client mode: reports every page/pageSize change so the host can persist it (URL, storage). */
29
+ onClientPaginationChange?: (pagination: IDataTableClientPaginationState) => void;
30
+ columnVisibility: VisibilityState;
31
+ onColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;
32
+ columnOrder: Array<string>;
33
+ onColumnOrderChange: (updater: Updater<Array<string>>) => void;
34
+ columnSizing: ColumnSizingState;
35
+ onColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;
36
+ onFilteredCountChange?: (count: number) => void;
37
+ }
38
+ export declare const useDataTableInstance: <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>({ config, rows, loading, sort, onSortChange, onSearch, initialSearch, onSearchTermChange, pagination, initialClientPagination, onClientPaginationChange, columnVisibility, onColumnVisibilityChange, columnOrder, onColumnOrderChange, columnSizing, onColumnSizingChange, onFilteredCountChange, }: IUseDataTableInstanceParams<T, C>) => {
39
+ table: import('@tanstack/table-core').Table<T>;
40
+ isClientMode: boolean;
41
+ columnContentWidths: Map<string, number>;
42
+ registerRow: (id: string) => (element: HTMLElement | null) => void;
43
+ beginRowsExit: (ids: Array<string>) => void;
44
+ visibleRows: import('@tanstack/table-core').Row<T>[];
45
+ orderedRowIds: string;
46
+ filteredCount: number;
47
+ activeTab: string;
48
+ tabs: import('./types').IDataTableTab<T>[] | undefined;
49
+ handleTabChange: (value: string) => void;
50
+ handleSearchInput: (value: string) => void;
51
+ handleHeaderSortClick: (columnConfig: IDataTableColumnConfig<T>) => void;
52
+ resolveSortDirection: (columnConfig: IDataTableColumnConfig<T>) => false | "asc" | "desc";
53
+ clientPaginationProps: IDataTablePagination | undefined;
54
+ isUpdating: boolean;
55
+ showUpdatingBar: boolean;
56
+ contentOpacityStyle: {
57
+ opacity: number;
58
+ transition: string;
59
+ } | undefined;
60
+ dataTableOpacityTransitionClass: string;
61
+ showSkeleton: boolean;
62
+ hasRows: boolean;
63
+ clientSearchDebounceMs: number;
64
+ };
65
+ export {};
@@ -0,0 +1,336 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useState, useMemo, useRef, useEffect, useCallback } from "react";
3
+ import { normalizeText } from "../../../helpers/stringHelpers.js";
4
+ import { createColumnHelper, useReactTable, getExpandedRowModel, getPaginationRowModel, getSortedRowModel, getFilteredRowModel, getCoreRowModel } from "@tanstack/react-table";
5
+ import DataTableActionsCell from "./cells/DataTableActionsCell.js";
6
+ import DataTableCell from "./cells/DataTableCell.js";
7
+ import { computeColumnContentWidths, resolveColumnMinWidthPx } from "./dataTableColumnWidths.js";
8
+ import { prefersReducedMotion, DATA_TABLE_UPDATING_BAR_DELAY_MS, DATA_TABLE_CROSSFADE_DIP_OPACITY, DATA_TABLE_OPACITY_TRANSITION_MS, DATA_TABLE_UPDATING_OPACITY, dataTableOpacityTransitionClass } from "./dataTableMotion.js";
9
+ import { isDataTablePanelExpansion, isDataTableDetailTableExpansion, isDataTableTableExpansion, isDataTableSubRowsExpansion } from "./types.js";
10
+ import { useFlipRows } from "./useFlipRows.js";
11
+ const CLIENT_SEARCH_DEBOUNCE_MS = 150;
12
+ const useDataTableInstance = ({
13
+ config,
14
+ rows,
15
+ loading,
16
+ sort,
17
+ onSortChange,
18
+ onSearch,
19
+ initialSearch = "",
20
+ onSearchTermChange,
21
+ pagination,
22
+ initialClientPagination,
23
+ onClientPaginationChange,
24
+ columnVisibility,
25
+ onColumnVisibilityChange,
26
+ columnOrder,
27
+ onColumnOrderChange,
28
+ columnSizing,
29
+ onColumnSizingChange,
30
+ onFilteredCountChange
31
+ }) => {
32
+ const isClientMode = config.dataMode === "client";
33
+ const tabs = config.tabs;
34
+ const [activeTab, setActiveTab] = useState(() => tabs?.[0]?.value ?? "");
35
+ const tabFilteredRows = useMemo(() => {
36
+ if (!isClientMode || !tabs?.length) return rows;
37
+ const predicate = tabs.find((tab) => tab.value === activeTab)?.clientPredicate;
38
+ if (!predicate) return rows;
39
+ return rows.filter(predicate);
40
+ }, [isClientMode, tabs, activeTab, rows]);
41
+ const columnHelper = useMemo(() => createColumnHelper(), []);
42
+ const columnContentWidths = useMemo(
43
+ () => computeColumnContentWidths(config.columns, tabFilteredRows),
44
+ [config.columns, tabFilteredRows]
45
+ );
46
+ const columnContentWidthsRef = useRef(columnContentWidths);
47
+ columnContentWidthsRef.current = columnContentWidths;
48
+ const columns = useMemo(() => {
49
+ const contentWidths = columnContentWidthsRef.current;
50
+ const columnDefs = config.columns.map((columnConfig, columnIndex) => {
51
+ const accessorFn = (row) => {
52
+ if (columnConfig.sortAccessor) return columnConfig.sortAccessor(row);
53
+ const value = columnConfig.accessor?.(row);
54
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
55
+ return value;
56
+ }
57
+ return "";
58
+ };
59
+ const isFirstColumn = columnIndex === 0;
60
+ const columnWidth = contentWidths.get(columnConfig.id) ?? resolveColumnMinWidthPx(columnConfig, {
61
+ isFirstColumn,
62
+ hasColumnToggle: isFirstColumn
63
+ });
64
+ return columnHelper.accessor(accessorFn, {
65
+ id: columnConfig.id,
66
+ header: columnConfig.header,
67
+ enableSorting: !!columnConfig.sortable,
68
+ size: columnWidth,
69
+ minSize: columnWidth,
70
+ enableResizing: columnConfig.type !== "actions" && columnConfig.resizable !== false,
71
+ cell: ({ row }) => columnConfig.type === "actions" && columnConfig.actions ? /* @__PURE__ */ jsx(DataTableActionsCell, { row: row.original, actions: columnConfig.actions }) : /* @__PURE__ */ jsx(
72
+ DataTableCell,
73
+ {
74
+ column: columnConfig,
75
+ row: row.original,
76
+ gridRowId: row.id,
77
+ onCellChange: config.editing?.onCellChange,
78
+ keyboardNav: config.editing?.keyboardNav,
79
+ clickToEdit: config.editing?.clickToEdit
80
+ }
81
+ )
82
+ });
83
+ });
84
+ return columnDefs;
85
+ }, [config.columns, config.editing, columnHelper]);
86
+ const [clientSorting, setClientSorting] = useState([]);
87
+ const [globalFilter, setGlobalFilter] = useState(initialSearch);
88
+ const [clientPagination, setClientPagination] = useState(() => ({
89
+ pageIndex: Math.max(0, (initialClientPagination?.page ?? 1) - 1),
90
+ pageSize: initialClientPagination?.pageSize ?? 20
91
+ }));
92
+ const onClientPaginationChangeRef = useRef(onClientPaginationChange);
93
+ onClientPaginationChangeRef.current = onClientPaginationChange;
94
+ useEffect(() => {
95
+ onClientPaginationChangeRef.current?.({
96
+ page: clientPagination.pageIndex + 1,
97
+ pageSize: clientPagination.pageSize
98
+ });
99
+ }, [clientPagination.pageIndex, clientPagination.pageSize]);
100
+ const [expanded, setExpanded] = useState({});
101
+ const expansion = config.expansion;
102
+ const hasExpansion = !!expansion;
103
+ const defaultExpanded = expansion?.defaultExpanded;
104
+ const userToggledRowIdsRef = useRef(/* @__PURE__ */ new Set());
105
+ const handleExpandedChange = useCallback((updater) => {
106
+ setExpanded((previous) => {
107
+ const next = typeof updater === "function" ? updater(previous) : updater;
108
+ if (previous !== true && next !== true) {
109
+ for (const rowId of /* @__PURE__ */ new Set([...Object.keys(previous), ...Object.keys(next)])) {
110
+ if (Boolean(previous[rowId]) !== Boolean(next[rowId])) userToggledRowIdsRef.current.add(rowId);
111
+ }
112
+ }
113
+ return next;
114
+ });
115
+ }, []);
116
+ useEffect(() => {
117
+ if (!hasExpansion || defaultExpanded === void 0) return;
118
+ setExpanded((previous) => {
119
+ if (previous === true) return previous;
120
+ let next = null;
121
+ for (const row of tabFilteredRows) {
122
+ const rowId = row.id;
123
+ if (!rowId || userToggledRowIdsRef.current.has(rowId)) continue;
124
+ const shouldExpand = typeof defaultExpanded === "function" ? defaultExpanded(row) : defaultExpanded;
125
+ if (Boolean(previous[rowId]) === shouldExpand) continue;
126
+ next = next ?? { ...previous };
127
+ if (shouldExpand) next[rowId] = true;
128
+ else delete next[rowId];
129
+ }
130
+ return next ?? previous;
131
+ });
132
+ }, [hasExpansion, defaultExpanded, tabFilteredRows]);
133
+ const isPanelExpansion = !!expansion && isDataTablePanelExpansion(expansion);
134
+ const isDetailTableExpansion = !!expansion && isDataTableDetailTableExpansion(expansion);
135
+ const isTableExpansion = !!expansion && isDataTableTableExpansion(expansion);
136
+ const subRowsExpansion = expansion && isDataTableSubRowsExpansion(expansion) ? expansion : null;
137
+ const getSearchableText = config.getSearchableText;
138
+ const globalFilterFn = useMemo(
139
+ () => (row, _columnId, filterValue) => {
140
+ const searchWords = normalizeText(String(filterValue ?? "")).split(/\s+/).filter(Boolean);
141
+ if (searchWords.length === 0) return true;
142
+ const haystack = normalizeText(getSearchableText ? getSearchableText(row.original) : "");
143
+ return searchWords.every((searchWord) => haystack.includes(searchWord));
144
+ },
145
+ [getSearchableText]
146
+ );
147
+ const serverSortingState = useMemo(() => {
148
+ if (!sort) return [];
149
+ const columnForField = config.columns.find((column) => column.sortField === sort.sortBy);
150
+ if (!columnForField) return [];
151
+ return [{ id: columnForField.id, desc: sort.sortDir === "desc" }];
152
+ }, [sort, config.columns]);
153
+ const table = useReactTable({
154
+ data: tabFilteredRows,
155
+ columns,
156
+ // The row id IS the entity id (prefixed by the parent for nested rows), not the
157
+ // default positional index: the spreadsheet layer and the commit queue address
158
+ // cells by it, so it has to survive sorting, filtering and pagination.
159
+ getRowId: (row, index, parent) => {
160
+ const ownId = row.id ?? String(index);
161
+ return parent ? `${parent.id}.${ownId}` : ownId;
162
+ },
163
+ state: isClientMode ? {
164
+ sorting: clientSorting,
165
+ globalFilter,
166
+ pagination: clientPagination,
167
+ columnVisibility,
168
+ columnOrder,
169
+ columnSizing,
170
+ expanded
171
+ } : { sorting: serverSortingState, columnVisibility, columnOrder, columnSizing, expanded },
172
+ manualSorting: !isClientMode,
173
+ manualFiltering: !isClientMode,
174
+ manualPagination: !isClientMode,
175
+ // A host that persists the page (URL) expects an in-place row update to keep it;
176
+ // TanStack would otherwise jump back to page 1 whenever `rows` changes reference.
177
+ autoResetPageIndex: onClientPaginationChange ? false : void 0,
178
+ enableColumnResizing: true,
179
+ // `onChange`: columns follow the cursor live during the drag (fluid, ag-grid
180
+ // style) rather than snapping only on release.
181
+ columnResizeMode: "onChange",
182
+ onColumnVisibilityChange,
183
+ onColumnOrderChange,
184
+ onColumnSizingChange,
185
+ onSortingChange: isClientMode ? setClientSorting : void 0,
186
+ onGlobalFilterChange: isClientMode ? setGlobalFilter : void 0,
187
+ onPaginationChange: isClientMode ? setClientPagination : void 0,
188
+ onExpandedChange: hasExpansion ? handleExpandedChange : void 0,
189
+ globalFilterFn: isClientMode ? globalFilterFn : void 0,
190
+ // Panel and detailTable modes have no nested rows in the row model. Omit
191
+ // getSubRows so TanStack never looks for children. SubRows mode keeps the
192
+ // existing lazy-children path.
193
+ getSubRows: subRowsExpansion?.getSubRows,
194
+ getRowCanExpand: expansion ? (row) => {
195
+ if (expansion.canExpand) return expansion.canExpand(row.original);
196
+ if (isPanelExpansion || isDetailTableExpansion || isTableExpansion) return true;
197
+ return row.subRows.length > 0;
198
+ } : void 0,
199
+ // Client mode keeps children glued to their parent (not counted toward the
200
+ // page size). The pagination row model re-inserts them. Server mode has NO
201
+ // pagination row model, so `false` would leave `getExpandedRowModel` without
202
+ // anything to flatten the children and they would never render; `true` makes
203
+ // the expanded model flatten them itself (server already paginates parents).
204
+ // Panel and detailTable modes have no child rows, so the flag is irrelevant.
205
+ paginateExpandedRows: !isClientMode,
206
+ getCoreRowModel: getCoreRowModel(),
207
+ getFilteredRowModel: isClientMode ? getFilteredRowModel() : void 0,
208
+ getSortedRowModel: isClientMode ? getSortedRowModel() : void 0,
209
+ getPaginationRowModel: isClientMode ? getPaginationRowModel() : void 0,
210
+ getExpandedRowModel: hasExpansion ? getExpandedRowModel() : void 0
211
+ });
212
+ const visibleRows = table.getRowModel().rows;
213
+ const orderedRowIds = useMemo(() => visibleRows.map((row) => row.id).join("|"), [visibleRows]);
214
+ const flipDurationMs = subRowsExpansion ? 420 : void 0;
215
+ const { registerRow, beginExit: beginRowsExit } = useFlipRows(
216
+ useMemo(() => orderedRowIds.split("|"), [orderedRowIds]),
217
+ flipDurationMs
218
+ );
219
+ const filteredCount = isClientMode ? table.getFilteredRowModel().rows.length : rows.length;
220
+ useEffect(() => {
221
+ onFilteredCountChange?.(filteredCount);
222
+ }, [filteredCount, onFilteredCountChange]);
223
+ const handleHeaderSortClick = (columnConfig) => {
224
+ if (!columnConfig.sortable) return;
225
+ if (isClientMode) {
226
+ table.getColumn(columnConfig.id)?.toggleSorting(void 0, false);
227
+ return;
228
+ }
229
+ if (!columnConfig.sortField || !onSortChange) return;
230
+ const isActive = sort?.sortBy === columnConfig.sortField;
231
+ let nextDir = "asc";
232
+ if (isActive && sort?.sortDir === "asc") nextDir = "desc";
233
+ else if (isActive && sort?.sortDir === "desc") {
234
+ onSortChange(null);
235
+ return;
236
+ }
237
+ onSortChange({ sortBy: columnConfig.sortField, sortDir: nextDir });
238
+ };
239
+ const resolveSortDirection = (columnConfig) => {
240
+ if (isClientMode) {
241
+ const direction = table.getColumn(columnConfig.id)?.getIsSorted();
242
+ return direction ?? false;
243
+ }
244
+ if (sort?.sortBy !== columnConfig.sortField) return false;
245
+ return sort?.sortDir ?? "asc";
246
+ };
247
+ const handleSearchInput = (value) => {
248
+ onSearchTermChange?.(value);
249
+ if (isClientMode) {
250
+ setGlobalFilter(value);
251
+ table.setPageIndex(0);
252
+ return;
253
+ }
254
+ onSearch?.(value);
255
+ };
256
+ const handleTabChange = (value) => {
257
+ setActiveTab(value);
258
+ if (isClientMode) table.setPageIndex(0);
259
+ };
260
+ const showSkeleton = loading && rows.length === 0;
261
+ const isUpdating = !isClientMode && loading && rows.length > 0;
262
+ const [showUpdatingBar, setShowUpdatingBar] = useState(false);
263
+ const [contentOpacity, setContentOpacity] = useState(1);
264
+ const wasUpdatingRef = useRef(false);
265
+ useEffect(() => {
266
+ if (!isUpdating) {
267
+ setShowUpdatingBar(false);
268
+ return;
269
+ }
270
+ if (prefersReducedMotion()) return;
271
+ const timer = window.setTimeout(() => setShowUpdatingBar(true), DATA_TABLE_UPDATING_BAR_DELAY_MS);
272
+ return () => window.clearTimeout(timer);
273
+ }, [isUpdating]);
274
+ useEffect(() => {
275
+ const reducedMotion = prefersReducedMotion();
276
+ if (wasUpdatingRef.current && !isUpdating && !isClientMode) {
277
+ if (reducedMotion) {
278
+ setContentOpacity(1);
279
+ } else {
280
+ setContentOpacity(DATA_TABLE_CROSSFADE_DIP_OPACITY);
281
+ const frame = window.requestAnimationFrame(() => setContentOpacity(1));
282
+ wasUpdatingRef.current = isUpdating;
283
+ return () => window.cancelAnimationFrame(frame);
284
+ }
285
+ }
286
+ wasUpdatingRef.current = isUpdating;
287
+ }, [isUpdating, isClientMode]);
288
+ const contentOpacityStyle = useMemo(() => {
289
+ if (prefersReducedMotion()) return void 0;
290
+ const opacity = isUpdating ? DATA_TABLE_UPDATING_OPACITY : contentOpacity;
291
+ return {
292
+ opacity,
293
+ transition: `opacity ${DATA_TABLE_OPACITY_TRANSITION_MS}ms ease-enter`
294
+ };
295
+ }, [isUpdating, contentOpacity]);
296
+ const clientPaginationProps = isClientMode ? {
297
+ pageSize: clientPagination.pageSize,
298
+ numberOfPages: table.getPageCount(),
299
+ currentPage: clientPagination.pageIndex + 1,
300
+ totalItems: table.getFilteredRowModel().rows.length,
301
+ setCurrentPage: (page) => table.setPageIndex(page - 1),
302
+ onPageSizeChange: (size) => {
303
+ table.setPageSize(size);
304
+ table.setPageIndex(0);
305
+ }
306
+ } : pagination;
307
+ const hasRows = visibleRows.length > 0;
308
+ return {
309
+ table,
310
+ isClientMode,
311
+ columnContentWidths,
312
+ registerRow,
313
+ beginRowsExit,
314
+ visibleRows,
315
+ orderedRowIds,
316
+ filteredCount,
317
+ activeTab,
318
+ tabs,
319
+ handleTabChange,
320
+ handleSearchInput,
321
+ handleHeaderSortClick,
322
+ resolveSortDirection,
323
+ clientPaginationProps,
324
+ isUpdating,
325
+ showUpdatingBar,
326
+ contentOpacityStyle,
327
+ dataTableOpacityTransitionClass,
328
+ showSkeleton,
329
+ hasRows,
330
+ clientSearchDebounceMs: CLIENT_SEARCH_DEBOUNCE_MS
331
+ };
332
+ };
333
+ export {
334
+ useDataTableInstance
335
+ };
336
+ //# sourceMappingURL=useDataTableInstance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableInstance.js","sources":["../../../../src/components/UI/DataTable/useDataTableInstance.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { normalizeText } from '@/helpers/stringHelpers';\nimport {\n type ColumnSizingState,\n createColumnHelper,\n type ExpandedState,\n type FilterFn,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type SortingState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from '@tanstack/react-table';\n\nimport DataTableActionsCell from './cells/DataTableActionsCell';\nimport DataTableCell from './cells/DataTableCell';\nimport { computeColumnContentWidths, resolveColumnMinWidthPx } from './dataTableColumnWidths';\nimport {\n DATA_TABLE_CROSSFADE_DIP_OPACITY,\n DATA_TABLE_OPACITY_TRANSITION_MS,\n DATA_TABLE_UPDATING_BAR_DELAY_MS,\n DATA_TABLE_UPDATING_OPACITY,\n dataTableOpacityTransitionClass,\n prefersReducedMotion,\n} from './dataTableMotion';\nimport {\n type IDataTableColumnConfig,\n type IDataTableConfig,\n type IDataTableRow,\n type IDataTableSortState,\n isDataTableDetailTableExpansion,\n isDataTablePanelExpansion,\n isDataTableSubRowsExpansion,\n isDataTableTableExpansion,\n type TDataTableSortDirection,\n} from './types';\nimport { useFlipRows } from './useFlipRows';\n\nconst CLIENT_SEARCH_DEBOUNCE_MS = 150;\n\nexport interface IDataTableClientPaginationState {\n page: number;\n pageSize: number;\n}\n\nexport interface IDataTablePagination {\n pageSize: number;\n numberOfPages: number;\n currentPage: number;\n setCurrentPage: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n /** Total de registros. Presente, a barra mostra o intervalo em vez do número da página. */\n totalItems?: number;\n}\n\ninterface IUseDataTableInstanceParams<T extends IDataTableRow, C extends IDataTableRow = IDataTableRow> {\n config: IDataTableConfig<T, C>;\n rows: Array<T>;\n loading: boolean;\n sort?: IDataTableSortState | null;\n onSortChange?: (sort: IDataTableSortState | null) => void;\n onSearch?: (value: string) => void;\n initialSearch?: string;\n onSearchTermChange?: (value: string) => void;\n pagination?: IDataTablePagination;\n /** Client mode: seeds the internal page/pageSize (1-based page), e.g. from the URL. */\n initialClientPagination?: IDataTableClientPaginationState;\n /** Client mode: reports every page/pageSize change so the host can persist it (URL, storage). */\n onClientPaginationChange?: (pagination: IDataTableClientPaginationState) => void;\n columnVisibility: VisibilityState;\n onColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;\n columnOrder: Array<string>;\n onColumnOrderChange: (updater: Updater<Array<string>>) => void;\n columnSizing: ColumnSizingState;\n onColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;\n onFilteredCountChange?: (count: number) => void;\n}\n\nexport const useDataTableInstance = <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>({\n config,\n rows,\n loading,\n sort,\n onSortChange,\n onSearch,\n initialSearch = '',\n onSearchTermChange,\n pagination,\n initialClientPagination,\n onClientPaginationChange,\n columnVisibility,\n onColumnVisibilityChange,\n columnOrder,\n onColumnOrderChange,\n columnSizing,\n onColumnSizingChange,\n onFilteredCountChange,\n}: IUseDataTableInstanceParams<T, C>) => {\n const isClientMode = config.dataMode === 'client';\n\n const tabs = config.tabs;\n const [activeTab, setActiveTab] = useState(() => tabs?.[0]?.value ?? '');\n\n // Active tab predicate filters rows BEFORE search/sort/pagination (client mode).\n const tabFilteredRows = useMemo(() => {\n if (!isClientMode || !tabs?.length) return rows;\n const predicate = tabs.find((tab) => tab.value === activeTab)?.clientPredicate;\n if (!predicate) return rows;\n\n return rows.filter(predicate);\n }, [isClientMode, tabs, activeTab, rows]);\n\n const columnHelper = useMemo(() => createColumnHelper<T>(), []);\n\n // Actions and badge columns are sized from the current rows (visible action\n // count / widest chip) so the actions column scales with its buttons and badge\n // labels are never clipped. Other columns fall back to the config-only seed.\n // Both are derived in one memo so the hook signature stays unchanged.\n // Row-derived widths (actions/badge columns) kept in their own memo and read by the\n // column defs through a ref, so editing a cell (which changes the rows) does NOT\n // rebuild the column defs. Rebuilding them hands TanStack a new columns array every\n // keystroke and tears down / remounts every cell, dropping input focus.\n const columnContentWidths = useMemo(\n () => computeColumnContentWidths(config.columns, tabFilteredRows),\n [config.columns, tabFilteredRows],\n );\n const columnContentWidthsRef = useRef(columnContentWidths);\n columnContentWidthsRef.current = columnContentWidths;\n\n const columns = useMemo(() => {\n const contentWidths = columnContentWidthsRef.current;\n\n const columnDefs = config.columns.map((columnConfig, columnIndex) => {\n const accessorFn = (row: T): string | number | boolean => {\n if (columnConfig.sortAccessor) return columnConfig.sortAccessor(row);\n\n const value = columnConfig.accessor?.(row);\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n\n return '';\n };\n\n const isFirstColumn = columnIndex === 0;\n const columnWidth =\n contentWidths.get(columnConfig.id) ??\n resolveColumnMinWidthPx(columnConfig, {\n isFirstColumn,\n hasColumnToggle: isFirstColumn,\n });\n\n return columnHelper.accessor(accessorFn, {\n id: columnConfig.id,\n header: columnConfig.header,\n enableSorting: !!columnConfig.sortable,\n size: columnWidth,\n minSize: columnWidth,\n enableResizing: columnConfig.type !== 'actions' && columnConfig.resizable !== false,\n cell: ({ row }) =>\n columnConfig.type === 'actions' && columnConfig.actions ? (\n <DataTableActionsCell row={row.original} actions={columnConfig.actions} />\n ) : (\n <DataTableCell\n column={columnConfig}\n row={row.original}\n gridRowId={row.id}\n onCellChange={config.editing?.onCellChange}\n keyboardNav={config.editing?.keyboardNav}\n clickToEdit={config.editing?.clickToEdit}\n />\n ),\n });\n });\n\n return columnDefs;\n }, [config.columns, config.editing, columnHelper]);\n\n // ----- Client-mode internal state -----\n const [clientSorting, setClientSorting] = useState<SortingState>([]);\n const [globalFilter, setGlobalFilter] = useState(initialSearch);\n const [clientPagination, setClientPagination] = useState<PaginationState>(() => ({\n pageIndex: Math.max(0, (initialClientPagination?.page ?? 1) - 1),\n pageSize: initialClientPagination?.pageSize ?? 20,\n }));\n\n const onClientPaginationChangeRef = useRef(onClientPaginationChange);\n onClientPaginationChangeRef.current = onClientPaginationChange;\n\n useEffect(() => {\n onClientPaginationChangeRef.current?.({\n page: clientPagination.pageIndex + 1,\n pageSize: clientPagination.pageSize,\n });\n }, [clientPagination.pageIndex, clientPagination.pageSize]);\n const [expanded, setExpanded] = useState<ExpandedState>({});\n\n const expansion = config.expansion;\n const hasExpansion = !!expansion;\n const defaultExpanded = expansion?.defaultExpanded;\n\n // Rows the user opened or closed by hand keep that choice; `defaultExpanded` only drives the\n // rest, so a default that resolves later (a count that arrives async) never undoes a click.\n const userToggledRowIdsRef = useRef<Set<string>>(new Set());\n\n const handleExpandedChange = useCallback((updater: Updater<ExpandedState>) => {\n setExpanded((previous) => {\n const next = typeof updater === 'function' ? updater(previous) : updater;\n\n if (previous !== true && next !== true) {\n for (const rowId of new Set([...Object.keys(previous), ...Object.keys(next)])) {\n if (Boolean(previous[rowId]) !== Boolean(next[rowId])) userToggledRowIdsRef.current.add(rowId);\n }\n }\n\n return next;\n });\n }, []);\n\n useEffect(() => {\n if (!hasExpansion || defaultExpanded === undefined) return;\n\n setExpanded((previous) => {\n if (previous === true) return previous;\n\n let next: Record<string, boolean> | null = null;\n\n for (const row of tabFilteredRows) {\n const rowId = row.id;\n if (!rowId || userToggledRowIdsRef.current.has(rowId)) continue;\n\n const shouldExpand = typeof defaultExpanded === 'function' ? defaultExpanded(row) : defaultExpanded;\n if (Boolean(previous[rowId]) === shouldExpand) continue;\n\n next = next ?? { ...previous };\n if (shouldExpand) next[rowId] = true;\n else delete next[rowId];\n }\n\n return next ?? previous;\n });\n }, [hasExpansion, defaultExpanded, tabFilteredRows]);\n\n const isPanelExpansion = !!expansion && isDataTablePanelExpansion(expansion);\n const isDetailTableExpansion = !!expansion && isDataTableDetailTableExpansion(expansion);\n const isTableExpansion = !!expansion && isDataTableTableExpansion(expansion);\n const subRowsExpansion = expansion && isDataTableSubRowsExpansion(expansion) ? expansion : null;\n\n const getSearchableText = config.getSearchableText;\n\n const globalFilterFn: FilterFn<T> = useMemo(\n () => (row, _columnId, filterValue) => {\n const searchWords = normalizeText(String(filterValue ?? ''))\n .split(/\\s+/)\n .filter(Boolean);\n if (searchWords.length === 0) return true;\n\n const haystack = normalizeText(getSearchableText ? getSearchableText(row.original) : '');\n\n return searchWords.every((searchWord) => haystack.includes(searchWord));\n },\n [getSearchableText],\n );\n\n // ----- Server-mode external sort mapping -----\n const serverSortingState: SortingState = useMemo(() => {\n if (!sort) return [];\n const columnForField = config.columns.find((column) => column.sortField === sort.sortBy);\n if (!columnForField) return [];\n\n return [{ id: columnForField.id, desc: sort.sortDir === 'desc' }];\n }, [sort, config.columns]);\n\n const table = useReactTable({\n data: tabFilteredRows,\n columns,\n // The row id IS the entity id (prefixed by the parent for nested rows), not the\n // default positional index: the spreadsheet layer and the commit queue address\n // cells by it, so it has to survive sorting, filtering and pagination.\n getRowId: (row, index, parent) => {\n const ownId = row.id ?? String(index);\n return parent ? `${parent.id}.${ownId}` : ownId;\n },\n state: isClientMode\n ? {\n sorting: clientSorting,\n globalFilter,\n pagination: clientPagination,\n columnVisibility,\n columnOrder,\n columnSizing,\n expanded,\n }\n : { sorting: serverSortingState, columnVisibility, columnOrder, columnSizing, expanded },\n manualSorting: !isClientMode,\n manualFiltering: !isClientMode,\n manualPagination: !isClientMode,\n // A host that persists the page (URL) expects an in-place row update to keep it;\n // TanStack would otherwise jump back to page 1 whenever `rows` changes reference.\n autoResetPageIndex: onClientPaginationChange ? false : undefined,\n enableColumnResizing: true,\n // `onChange`: columns follow the cursor live during the drag (fluid, ag-grid\n // style) rather than snapping only on release.\n columnResizeMode: 'onChange',\n onColumnVisibilityChange,\n onColumnOrderChange,\n onColumnSizingChange,\n onSortingChange: isClientMode ? setClientSorting : undefined,\n onGlobalFilterChange: isClientMode ? setGlobalFilter : undefined,\n onPaginationChange: isClientMode ? setClientPagination : undefined,\n onExpandedChange: hasExpansion ? handleExpandedChange : undefined,\n globalFilterFn: isClientMode ? globalFilterFn : undefined,\n // Panel and detailTable modes have no nested rows in the row model. Omit\n // getSubRows so TanStack never looks for children. SubRows mode keeps the\n // existing lazy-children path.\n getSubRows: subRowsExpansion?.getSubRows,\n getRowCanExpand: expansion\n ? (row) => {\n if (expansion.canExpand) return expansion.canExpand(row.original);\n // Panel/detailTable/table: every row is expandable unless canExpand says otherwise.\n if (isPanelExpansion || isDetailTableExpansion || isTableExpansion) return true;\n return row.subRows.length > 0;\n }\n : undefined,\n // Client mode keeps children glued to their parent (not counted toward the\n // page size). The pagination row model re-inserts them. Server mode has NO\n // pagination row model, so `false` would leave `getExpandedRowModel` without\n // anything to flatten the children and they would never render; `true` makes\n // the expanded model flatten them itself (server already paginates parents).\n // Panel and detailTable modes have no child rows, so the flag is irrelevant.\n paginateExpandedRows: !isClientMode,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: isClientMode ? getFilteredRowModel() : undefined,\n getSortedRowModel: isClientMode ? getSortedRowModel() : undefined,\n getPaginationRowModel: isClientMode ? getPaginationRowModel() : undefined,\n getExpandedRowModel: hasExpansion ? getExpandedRowModel() : undefined,\n });\n\n const visibleRows = table.getRowModel().rows;\n const orderedRowIds = useMemo(() => visibleRows.map((row) => row.id).join('|'), [visibleRows]);\n // SubRows expansion uses a slower slide so the subgroup open/close reads clearly.\n // Panel and detailTable expansion only toggle a content row. Keep the default\n // FLIP timing for those.\n const flipDurationMs = subRowsExpansion ? 420 : undefined;\n const { registerRow, beginExit: beginRowsExit } = useFlipRows(\n useMemo(() => orderedRowIds.split('|'), [orderedRowIds]),\n flipDurationMs,\n );\n\n const filteredCount = isClientMode ? table.getFilteredRowModel().rows.length : rows.length;\n\n useEffect(() => {\n onFilteredCountChange?.(filteredCount);\n }, [filteredCount, onFilteredCountChange]);\n\n // In server mode, header click round-trips through the host. In client mode\n // TanStack drives the sorting state directly (cycle: asc -> desc -> none).\n const handleHeaderSortClick = (columnConfig: IDataTableColumnConfig<T>) => {\n if (!columnConfig.sortable) return;\n\n if (isClientMode) {\n table.getColumn(columnConfig.id)?.toggleSorting(undefined, false);\n return;\n }\n\n if (!columnConfig.sortField || !onSortChange) return;\n\n const isActive = sort?.sortBy === columnConfig.sortField;\n let nextDir: TDataTableSortDirection = 'asc';\n\n if (isActive && sort?.sortDir === 'asc') nextDir = 'desc';\n else if (isActive && sort?.sortDir === 'desc') {\n onSortChange(null);\n return;\n }\n\n onSortChange({ sortBy: columnConfig.sortField, sortDir: nextDir });\n };\n\n const resolveSortDirection = (columnConfig: IDataTableColumnConfig<T>): false | 'asc' | 'desc' => {\n if (isClientMode) {\n const direction = table.getColumn(columnConfig.id)?.getIsSorted();\n return direction ?? false;\n }\n\n if (sort?.sortBy !== columnConfig.sortField) return false;\n return sort?.sortDir ?? 'asc';\n };\n\n const handleSearchInput = (value: string) => {\n onSearchTermChange?.(value);\n\n if (isClientMode) {\n setGlobalFilter(value);\n table.setPageIndex(0);\n return;\n }\n\n onSearch?.(value);\n };\n\n const handleTabChange = (value: string) => {\n setActiveTab(value);\n if (isClientMode) table.setPageIndex(0);\n };\n\n // Skeleton is shown ONLY on the very first load (no rows yet). Filter/sort/\n // pagination never swap the loaded table for skeletons. That is the \"blink\".\n const showSkeleton = loading && rows.length === 0;\n // Server mode keeps rows visible during a refetch with a subtle updating state.\n const isUpdating = !isClientMode && loading && rows.length > 0;\n\n const [showUpdatingBar, setShowUpdatingBar] = useState(false);\n const [contentOpacity, setContentOpacity] = useState(1);\n const wasUpdatingRef = useRef(false);\n\n useEffect(() => {\n if (!isUpdating) {\n setShowUpdatingBar(false);\n return;\n }\n\n if (prefersReducedMotion()) return;\n\n const timer = window.setTimeout(() => setShowUpdatingBar(true), DATA_TABLE_UPDATING_BAR_DELAY_MS);\n return () => window.clearTimeout(timer);\n }, [isUpdating]);\n\n useEffect(() => {\n const reducedMotion = prefersReducedMotion();\n\n if (wasUpdatingRef.current && !isUpdating && !isClientMode) {\n if (reducedMotion) {\n setContentOpacity(1);\n } else {\n setContentOpacity(DATA_TABLE_CROSSFADE_DIP_OPACITY);\n const frame = window.requestAnimationFrame(() => setContentOpacity(1));\n wasUpdatingRef.current = isUpdating;\n return () => window.cancelAnimationFrame(frame);\n }\n }\n\n wasUpdatingRef.current = isUpdating;\n }, [isUpdating, isClientMode]);\n\n const contentOpacityStyle = useMemo(() => {\n if (prefersReducedMotion()) return undefined;\n\n const opacity = isUpdating ? DATA_TABLE_UPDATING_OPACITY : contentOpacity;\n\n return {\n opacity,\n transition: `opacity ${DATA_TABLE_OPACITY_TRANSITION_MS}ms ease-enter`,\n };\n }, [isUpdating, contentOpacity]);\n\n const clientPaginationProps: IDataTablePagination | undefined = isClientMode\n ? {\n pageSize: clientPagination.pageSize,\n numberOfPages: table.getPageCount(),\n currentPage: clientPagination.pageIndex + 1,\n totalItems: table.getFilteredRowModel().rows.length,\n setCurrentPage: (page: number) => table.setPageIndex(page - 1),\n onPageSizeChange: (size: number) => {\n table.setPageSize(size);\n table.setPageIndex(0);\n },\n }\n : pagination;\n\n const hasRows = visibleRows.length > 0;\n\n return {\n table,\n isClientMode,\n columnContentWidths,\n registerRow,\n beginRowsExit,\n visibleRows,\n orderedRowIds,\n filteredCount,\n activeTab,\n tabs,\n handleTabChange,\n handleSearchInput,\n handleHeaderSortClick,\n resolveSortDirection,\n clientPaginationProps,\n isUpdating,\n showUpdatingBar,\n contentOpacityStyle,\n dataTableOpacityTransitionClass,\n showSkeleton,\n hasRows,\n clientSearchDebounceMs: CLIENT_SEARCH_DEBOUNCE_MS,\n };\n};\n"],"names":[],"mappings":"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"}