@umodeapporg/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/dist/assets/images/common-pngs/sparkles.png.js +5 -0
  2. package/dist/assets/images/common-pngs/sparkles.png.js.map +1 -0
  3. package/dist/assets/umode-ui.css +182 -0
  4. package/dist/components/DateTime/DatePicker.d.ts +19 -0
  5. package/dist/components/DateTime/DatePicker.js +121 -0
  6. package/dist/components/DateTime/DatePicker.js.map +1 -0
  7. package/dist/components/DateTime/DateRangePicker.d.ts +19 -0
  8. package/dist/components/DateTime/DateRangePicker.js +205 -0
  9. package/dist/components/DateTime/DateRangePicker.js.map +1 -0
  10. package/dist/components/Form/ControlledButton.d.ts +13 -0
  11. package/dist/components/Form/ControlledButton.js +68 -0
  12. package/dist/components/Form/ControlledButton.js.map +1 -0
  13. package/dist/components/Form/ControlledCheckbox.d.ts +12 -0
  14. package/dist/components/Form/ControlledCheckbox.js +101 -0
  15. package/dist/components/Form/ControlledCheckbox.js.map +1 -0
  16. package/dist/components/Form/ControlledDialog.d.ts +44 -0
  17. package/dist/components/Form/ControlledDialog.js +185 -0
  18. package/dist/components/Form/ControlledDialog.js.map +1 -0
  19. package/dist/components/Form/ControlledDialogPrimitives.d.ts +30 -0
  20. package/dist/components/Form/ControlledDialogPrimitives.js +121 -0
  21. package/dist/components/Form/ControlledDialogPrimitives.js.map +1 -0
  22. package/dist/components/Form/ControlledDrawer.d.ts +37 -0
  23. package/dist/components/Form/ControlledDrawer.js +237 -0
  24. package/dist/components/Form/ControlledDrawer.js.map +1 -0
  25. package/dist/components/Form/ControlledForm/InputField.d.ts +11 -0
  26. package/dist/components/Form/ControlledForm/InputField.js +75 -0
  27. package/dist/components/Form/ControlledForm/InputField.js.map +1 -0
  28. package/dist/components/Form/ControlledForm/index.d.ts +27 -0
  29. package/dist/components/Form/ControlledForm/index.js +113 -0
  30. package/dist/components/Form/ControlledForm/index.js.map +1 -0
  31. package/dist/components/Form/ControlledImage/Img.d.ts +11 -0
  32. package/dist/components/Form/ControlledImage/Img.js +29 -0
  33. package/dist/components/Form/ControlledImage/Img.js.map +1 -0
  34. package/dist/components/Form/ControlledImage/index.d.ts +30 -0
  35. package/dist/components/Form/ControlledImage/index.js +107 -0
  36. package/dist/components/Form/ControlledImage/index.js.map +1 -0
  37. package/dist/components/Form/ControlledImage/useImage.d.ts +9 -0
  38. package/dist/components/Form/ControlledImage/useImage.js +110 -0
  39. package/dist/components/Form/ControlledImage/useImage.js.map +1 -0
  40. package/dist/components/Form/ControlledInput.d.ts +23 -0
  41. package/dist/components/Form/ControlledInput.js +52 -0
  42. package/dist/components/Form/ControlledInput.js.map +1 -0
  43. package/dist/components/Form/ControlledRadio.d.ts +15 -0
  44. package/dist/components/Form/ControlledRadio.js +91 -0
  45. package/dist/components/Form/ControlledRadio.js.map +1 -0
  46. package/dist/components/Form/ControlledSelect.d.ts +44 -0
  47. package/dist/components/Form/ControlledSelect.js +545 -0
  48. package/dist/components/Form/ControlledSelect.js.map +1 -0
  49. package/dist/components/Form/ControlledSwitch.d.ts +14 -0
  50. package/dist/components/Form/ControlledSwitch.js +88 -0
  51. package/dist/components/Form/ControlledSwitch.js.map +1 -0
  52. package/dist/components/Form/ControlledTabs.d.ts +70 -0
  53. package/dist/components/Form/ControlledTabs.js +470 -0
  54. package/dist/components/Form/ControlledTabs.js.map +1 -0
  55. package/dist/components/Form/ControlledTabsPrimitives.d.ts +43 -0
  56. package/dist/components/Form/ControlledTabsPrimitives.js +47 -0
  57. package/dist/components/Form/ControlledTabsPrimitives.js.map +1 -0
  58. package/dist/components/Form/ControlledTextarea.d.ts +22 -0
  59. package/dist/components/Form/ControlledTextarea.js +46 -0
  60. package/dist/components/Form/ControlledTextarea.js.map +1 -0
  61. package/dist/components/Form/ControlledTimeline.d.ts +26 -0
  62. package/dist/components/Form/ControlledTimeline.js +57 -0
  63. package/dist/components/Form/ControlledTimeline.js.map +1 -0
  64. package/dist/components/Form/ControlledViewToggle.d.ts +74 -0
  65. package/dist/components/Form/ControlledViewToggle.js +157 -0
  66. package/dist/components/Form/ControlledViewToggle.js.map +1 -0
  67. package/dist/components/Form/ControlledVoiceTextarea.d.ts +11 -0
  68. package/dist/components/Form/ControlledVoiceTextarea.js +88 -0
  69. package/dist/components/Form/ControlledVoiceTextarea.js.map +1 -0
  70. package/dist/components/Form/CurrencyInput.d.ts +8 -0
  71. package/dist/components/Form/CurrencyInput.js +17 -0
  72. package/dist/components/Form/CurrencyInput.js.map +1 -0
  73. package/dist/components/Form/RichTextEditor.d.ts +80 -0
  74. package/dist/components/Form/RichTextEditor.js +546 -0
  75. package/dist/components/Form/RichTextEditor.js.map +1 -0
  76. package/dist/components/Form/attachments/AttachmentPreviewList.d.ts +8 -0
  77. package/dist/components/Form/attachments/AttachmentPreviewList.js +71 -0
  78. package/dist/components/Form/attachments/AttachmentPreviewList.js.map +1 -0
  79. package/dist/components/Form/attachments/FileDropzone.d.ts +12 -0
  80. package/dist/components/Form/attachments/FileDropzone.js +84 -0
  81. package/dist/components/Form/attachments/FileDropzone.js.map +1 -0
  82. package/dist/components/Navigation/ControlledBreadcrumb.d.ts +13 -0
  83. package/dist/components/Navigation/ControlledBreadcrumb.js +23 -0
  84. package/dist/components/Navigation/ControlledBreadcrumb.js.map +1 -0
  85. package/dist/components/Navigation/ErrorPage.d.ts +2 -0
  86. package/dist/components/Navigation/ErrorPage.js +27 -0
  87. package/dist/components/Navigation/ErrorPage.js.map +1 -0
  88. package/dist/components/Navigation/PageTitle.d.ts +41 -0
  89. package/dist/components/Navigation/PageTitle.js +147 -0
  90. package/dist/components/Navigation/PageTitle.js.map +1 -0
  91. package/dist/components/Navigation/PageTitleNavigationContext.d.ts +21 -0
  92. package/dist/components/Navigation/PageTitleNavigationContext.js +17 -0
  93. package/dist/components/Navigation/PageTitleNavigationContext.js.map +1 -0
  94. package/dist/components/Search/UnifiedSearchBar.d.ts +31 -0
  95. package/dist/components/Search/UnifiedSearchBar.js +167 -0
  96. package/dist/components/Search/UnifiedSearchBar.js.map +1 -0
  97. package/dist/components/Search/filters/ActiveFiltersBar.d.ts +15 -0
  98. package/dist/components/Search/filters/ActiveFiltersBar.js +48 -0
  99. package/dist/components/Search/filters/ActiveFiltersBar.js.map +1 -0
  100. package/dist/components/Search/filters/FilterChipsRow.d.ts +17 -0
  101. package/dist/components/Search/filters/FilterChipsRow.js +113 -0
  102. package/dist/components/Search/filters/FilterChipsRow.js.map +1 -0
  103. package/dist/components/Search/filters/FilterFieldControl.d.ts +19 -0
  104. package/dist/components/Search/filters/FilterFieldControl.js +387 -0
  105. package/dist/components/Search/filters/FilterFieldControl.js.map +1 -0
  106. package/dist/components/Search/filters/FiltersButton.d.ts +24 -0
  107. package/dist/components/Search/filters/FiltersButton.js +52 -0
  108. package/dist/components/Search/filters/FiltersButton.js.map +1 -0
  109. package/dist/components/Search/filters/FiltersForm.d.ts +18 -0
  110. package/dist/components/Search/filters/FiltersForm.js +112 -0
  111. package/dist/components/Search/filters/FiltersForm.js.map +1 -0
  112. package/dist/components/Search/filters/FiltersPanel.d.ts +32 -0
  113. package/dist/components/Search/filters/FiltersPanel.js +264 -0
  114. package/dist/components/Search/filters/FiltersPanel.js.map +1 -0
  115. package/dist/components/Search/filters/FiltersSummaryTooltip.d.ts +20 -0
  116. package/dist/components/Search/filters/FiltersSummaryTooltip.js +26 -0
  117. package/dist/components/Search/filters/FiltersSummaryTooltip.js.map +1 -0
  118. package/dist/components/Search/filters/filterTypes.d.ts +162 -0
  119. package/dist/components/Search/filters/filterTypes.js +2 -0
  120. package/dist/components/Search/filters/filterTypes.js.map +1 -0
  121. package/dist/components/Search/filters/filterValues.d.ts +22 -0
  122. package/dist/components/Search/filters/filterValues.js +91 -0
  123. package/dist/components/Search/filters/filterValues.js.map +1 -0
  124. package/dist/components/Search/filters/filtersLayout.d.ts +4 -0
  125. package/dist/components/Search/filters/filtersLayout.js +18 -0
  126. package/dist/components/Search/filters/filtersLayout.js.map +1 -0
  127. package/dist/components/Search/filters/index.d.ts +11 -0
  128. package/dist/components/Search/filters/index.js +32 -0
  129. package/dist/components/Search/filters/index.js.map +1 -0
  130. package/dist/components/Search/filters/useFilters.d.ts +33 -0
  131. package/dist/components/Search/filters/useFilters.js +162 -0
  132. package/dist/components/Search/filters/useFilters.js.map +1 -0
  133. package/dist/components/Search/index.d.ts +2 -0
  134. package/dist/components/Search/index.js +34 -0
  135. package/dist/components/Search/index.js.map +1 -0
  136. package/dist/components/UI/AccordionIcon.d.ts +10 -0
  137. package/dist/components/UI/AccordionIcon.js +22 -0
  138. package/dist/components/UI/AccordionIcon.js.map +1 -0
  139. package/dist/components/UI/AlertInfo/dismissedAlertsStore.d.ts +2 -0
  140. package/dist/components/UI/AlertInfo/dismissedAlertsStore.js +22 -0
  141. package/dist/components/UI/AlertInfo/dismissedAlertsStore.js.map +1 -0
  142. package/dist/components/UI/AlertInfo/index.d.ts +30 -0
  143. package/dist/components/UI/AlertInfo/index.js +78 -0
  144. package/dist/components/UI/AlertInfo/index.js.map +1 -0
  145. package/dist/components/UI/BaseDataCard.d.ts +25 -0
  146. package/dist/components/UI/BaseDataCard.js +163 -0
  147. package/dist/components/UI/BaseDataCard.js.map +1 -0
  148. package/dist/components/UI/BulkActionBar.d.ts +35 -0
  149. package/dist/components/UI/BulkActionBar.js +125 -0
  150. package/dist/components/UI/BulkActionBar.js.map +1 -0
  151. package/dist/components/UI/Chips/OutlinedChip.d.ts +42 -0
  152. package/dist/components/UI/Chips/OutlinedChip.js +183 -0
  153. package/dist/components/UI/Chips/OutlinedChip.js.map +1 -0
  154. package/dist/components/UI/Chips/StatusChip.d.ts +8 -0
  155. package/dist/components/UI/Chips/StatusChip.js +33 -0
  156. package/dist/components/UI/Chips/StatusChip.js.map +1 -0
  157. package/dist/components/UI/Chips/chipTones.d.ts +6 -0
  158. package/dist/components/UI/Chips/chipTones.js +53 -0
  159. package/dist/components/UI/Chips/chipTones.js.map +1 -0
  160. package/dist/components/UI/ColorSwatch.d.ts +30 -0
  161. package/dist/components/UI/ColorSwatch.js +53 -0
  162. package/dist/components/UI/ColorSwatch.js.map +1 -0
  163. package/dist/components/UI/Colors.d.ts +10 -0
  164. package/dist/components/UI/Colors.js +41 -0
  165. package/dist/components/UI/Colors.js.map +1 -0
  166. package/dist/components/UI/ControlledAccordion.d.ts +38 -0
  167. package/dist/components/UI/ControlledAccordion.js +89 -0
  168. package/dist/components/UI/ControlledAccordion.js.map +1 -0
  169. package/dist/components/UI/ControlledCollapse.d.ts +13 -0
  170. package/dist/components/UI/ControlledCollapse.js +32 -0
  171. package/dist/components/UI/ControlledCollapse.js.map +1 -0
  172. package/dist/components/UI/ControlledMenu.d.ts +73 -0
  173. package/dist/components/UI/ControlledMenu.js +231 -0
  174. package/dist/components/UI/ControlledMenu.js.map +1 -0
  175. package/dist/components/UI/ControlledPopover.d.ts +44 -0
  176. package/dist/components/UI/ControlledPopover.js +144 -0
  177. package/dist/components/UI/ControlledPopover.js.map +1 -0
  178. package/dist/components/UI/ControlledProgress.d.ts +13 -0
  179. package/dist/components/UI/ControlledProgress.js +46 -0
  180. package/dist/components/UI/ControlledProgress.js.map +1 -0
  181. package/dist/components/UI/ControlledSlider.d.ts +13 -0
  182. package/dist/components/UI/ControlledSlider.js +29 -0
  183. package/dist/components/UI/ControlledSlider.js.map +1 -0
  184. package/dist/components/UI/ControlledTooltip.d.ts +21 -0
  185. package/dist/components/UI/ControlledTooltip.js +140 -0
  186. package/dist/components/UI/ControlledTooltip.js.map +1 -0
  187. package/dist/components/UI/CustomBadge.d.ts +15 -0
  188. package/dist/components/UI/CustomBadge.js +34 -0
  189. package/dist/components/UI/CustomBadge.js.map +1 -0
  190. package/dist/components/UI/CustomCard.d.ts +13 -0
  191. package/dist/components/UI/CustomCard.js +36 -0
  192. package/dist/components/UI/CustomCard.js.map +1 -0
  193. package/dist/components/UI/CustomChart.d.ts +21 -0
  194. package/dist/components/UI/CustomChart.js +108 -0
  195. package/dist/components/UI/CustomChart.js.map +1 -0
  196. package/dist/components/UI/DataTable/DataTable.d.ts +100 -0
  197. package/dist/components/UI/DataTable/DataTable.js +546 -0
  198. package/dist/components/UI/DataTable/DataTable.js.map +1 -0
  199. package/dist/components/UI/DataTable/DataTableAutoCard.d.ts +20 -0
  200. package/dist/components/UI/DataTable/DataTableAutoCard.js +39 -0
  201. package/dist/components/UI/DataTable/DataTableAutoCard.js.map +1 -0
  202. package/dist/components/UI/DataTable/DataTableBody.d.ts +29 -0
  203. package/dist/components/UI/DataTable/DataTableBody.js +243 -0
  204. package/dist/components/UI/DataTable/DataTableBody.js.map +1 -0
  205. package/dist/components/UI/DataTable/DataTableBodyCell.d.ts +21 -0
  206. package/dist/components/UI/DataTable/DataTableBodyCell.js +77 -0
  207. package/dist/components/UI/DataTable/DataTableBodyCell.js.map +1 -0
  208. package/dist/components/UI/DataTable/DataTableBulkEditButton.d.ts +11 -0
  209. package/dist/components/UI/DataTable/DataTableBulkEditButton.js +24 -0
  210. package/dist/components/UI/DataTable/DataTableBulkEditButton.js.map +1 -0
  211. package/dist/components/UI/DataTable/DataTableBulkEditDialog.d.ts +25 -0
  212. package/dist/components/UI/DataTable/DataTableBulkEditDialog.js +251 -0
  213. package/dist/components/UI/DataTable/DataTableBulkEditDialog.js.map +1 -0
  214. package/dist/components/UI/DataTable/DataTableColumnToggle.d.ts +34 -0
  215. package/dist/components/UI/DataTable/DataTableColumnToggle.js +168 -0
  216. package/dist/components/UI/DataTable/DataTableColumnToggle.js.map +1 -0
  217. package/dist/components/UI/DataTable/DataTableDetailModal.d.ts +17 -0
  218. package/dist/components/UI/DataTable/DataTableDetailModal.js +109 -0
  219. package/dist/components/UI/DataTable/DataTableDetailModal.js.map +1 -0
  220. package/dist/components/UI/DataTable/DataTableDetailPanel.d.ts +21 -0
  221. package/dist/components/UI/DataTable/DataTableDetailPanel.js +51 -0
  222. package/dist/components/UI/DataTable/DataTableDetailPanel.js.map +1 -0
  223. package/dist/components/UI/DataTable/DataTableDetailTable.d.ts +35 -0
  224. package/dist/components/UI/DataTable/DataTableDetailTable.js +129 -0
  225. package/dist/components/UI/DataTable/DataTableDetailTable.js.map +1 -0
  226. package/dist/components/UI/DataTable/DataTableEditModeButton.d.ts +12 -0
  227. package/dist/components/UI/DataTable/DataTableEditModeButton.js +29 -0
  228. package/dist/components/UI/DataTable/DataTableEditModeButton.js.map +1 -0
  229. package/dist/components/UI/DataTable/DataTableFilters.d.ts +20 -0
  230. package/dist/components/UI/DataTable/DataTableFilters.js +64 -0
  231. package/dist/components/UI/DataTable/DataTableFilters.js.map +1 -0
  232. package/dist/components/UI/DataTable/DataTableHead.d.ts +27 -0
  233. package/dist/components/UI/DataTable/DataTableHead.js +198 -0
  234. package/dist/components/UI/DataTable/DataTableHead.js.map +1 -0
  235. package/dist/components/UI/DataTable/DataTablePagination.d.ts +15 -0
  236. package/dist/components/UI/DataTable/DataTablePagination.js +145 -0
  237. package/dist/components/UI/DataTable/DataTablePagination.js.map +1 -0
  238. package/dist/components/UI/DataTable/DataTableSaveButton.d.ts +13 -0
  239. package/dist/components/UI/DataTable/DataTableSaveButton.js +21 -0
  240. package/dist/components/UI/DataTable/DataTableSaveButton.js.map +1 -0
  241. package/dist/components/UI/DataTable/DataTableSegmentedTabs.d.ts +8 -0
  242. package/dist/components/UI/DataTable/DataTableSegmentedTabs.js +35 -0
  243. package/dist/components/UI/DataTable/DataTableSegmentedTabs.js.map +1 -0
  244. package/dist/components/UI/DataTable/DataTableStates.d.ts +17 -0
  245. package/dist/components/UI/DataTable/DataTableStates.js +59 -0
  246. package/dist/components/UI/DataTable/DataTableStates.js.map +1 -0
  247. package/dist/components/UI/DataTable/DataTableToolbar.d.ts +28 -0
  248. package/dist/components/UI/DataTable/DataTableToolbar.js +109 -0
  249. package/dist/components/UI/DataTable/DataTableToolbar.js.map +1 -0
  250. package/dist/components/UI/DataTable/applyDataTableFilters.d.ts +16 -0
  251. package/dist/components/UI/DataTable/applyDataTableFilters.js +53 -0
  252. package/dist/components/UI/DataTable/applyDataTableFilters.js.map +1 -0
  253. package/dist/components/UI/DataTable/cells/DataTableActionsCell.d.ts +7 -0
  254. package/dist/components/UI/DataTable/cells/DataTableActionsCell.js +55 -0
  255. package/dist/components/UI/DataTable/cells/DataTableActionsCell.js.map +1 -0
  256. package/dist/components/UI/DataTable/cells/DataTableCell.d.ts +15 -0
  257. package/dist/components/UI/DataTable/cells/DataTableCell.js +63 -0
  258. package/dist/components/UI/DataTable/cells/DataTableCell.js.map +1 -0
  259. package/dist/components/UI/DataTable/cells/DataTableCodeCell.d.ts +6 -0
  260. package/dist/components/UI/DataTable/cells/DataTableCodeCell.js +7 -0
  261. package/dist/components/UI/DataTable/cells/DataTableCodeCell.js.map +1 -0
  262. package/dist/components/UI/DataTable/cells/DataTableColorCell.d.ts +7 -0
  263. package/dist/components/UI/DataTable/cells/DataTableColorCell.js +10 -0
  264. package/dist/components/UI/DataTable/cells/DataTableColorCell.js.map +1 -0
  265. package/dist/components/UI/DataTable/cells/DataTableCountCell.d.ts +5 -0
  266. package/dist/components/UI/DataTable/cells/DataTableCountCell.js +7 -0
  267. package/dist/components/UI/DataTable/cells/DataTableCountCell.js.map +1 -0
  268. package/dist/components/UI/DataTable/cells/DataTableDateCell.d.ts +5 -0
  269. package/dist/components/UI/DataTable/cells/DataTableDateCell.js +12 -0
  270. package/dist/components/UI/DataTable/cells/DataTableDateCell.js.map +1 -0
  271. package/dist/components/UI/DataTable/cells/DataTableEditableCell.d.ts +23 -0
  272. package/dist/components/UI/DataTable/cells/DataTableEditableCell.js +242 -0
  273. package/dist/components/UI/DataTable/cells/DataTableEditableCell.js.map +1 -0
  274. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.d.ts +10 -0
  275. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js +7 -0
  276. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js.map +1 -0
  277. package/dist/components/UI/DataTable/cells/DataTableOriginCell.d.ts +6 -0
  278. package/dist/components/UI/DataTable/cells/DataTableOriginCell.js +25 -0
  279. package/dist/components/UI/DataTable/cells/DataTableOriginCell.js.map +1 -0
  280. package/dist/components/UI/DataTable/cells/DataTableStatusCell.d.ts +6 -0
  281. package/dist/components/UI/DataTable/cells/DataTableStatusCell.js +24 -0
  282. package/dist/components/UI/DataTable/cells/DataTableStatusCell.js.map +1 -0
  283. package/dist/components/UI/DataTable/cells/DataTableTagCell.d.ts +6 -0
  284. package/dist/components/UI/DataTable/cells/DataTableTagCell.js +25 -0
  285. package/dist/components/UI/DataTable/cells/DataTableTagCell.js.map +1 -0
  286. package/dist/components/UI/DataTable/cells/DataTableTextCell.d.ts +6 -0
  287. package/dist/components/UI/DataTable/cells/DataTableTextCell.js +7 -0
  288. package/dist/components/UI/DataTable/cells/DataTableTextCell.js.map +1 -0
  289. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.d.ts +6 -0
  290. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js +10 -0
  291. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js.map +1 -0
  292. package/dist/components/UI/DataTable/dataTableClasses.d.ts +12 -0
  293. package/dist/components/UI/DataTable/dataTableClasses.js +29 -0
  294. package/dist/components/UI/DataTable/dataTableClasses.js.map +1 -0
  295. package/dist/components/UI/DataTable/dataTableColumnWidths.d.ts +15 -0
  296. package/dist/components/UI/DataTable/dataTableColumnWidths.js +153 -0
  297. package/dist/components/UI/DataTable/dataTableColumnWidths.js.map +1 -0
  298. package/dist/components/UI/DataTable/dataTableColumnsStore.d.ts +12 -0
  299. package/dist/components/UI/DataTable/dataTableColumnsStore.js +68 -0
  300. package/dist/components/UI/DataTable/dataTableColumnsStore.js.map +1 -0
  301. package/dist/components/UI/DataTable/dataTableMotion.d.ts +6 -0
  302. package/dist/components/UI/DataTable/dataTableMotion.js +15 -0
  303. package/dist/components/UI/DataTable/dataTableMotion.js.map +1 -0
  304. package/dist/components/UI/DataTable/grid/GridFillHandle.d.ts +8 -0
  305. package/dist/components/UI/DataTable/grid/GridFillHandle.js +70 -0
  306. package/dist/components/UI/DataTable/grid/GridFillHandle.js.map +1 -0
  307. package/dist/components/UI/DataTable/grid/GridProvider.d.ts +31 -0
  308. package/dist/components/UI/DataTable/grid/GridProvider.js +85 -0
  309. package/dist/components/UI/DataTable/grid/GridProvider.js.map +1 -0
  310. package/dist/components/UI/DataTable/grid/fill/fillStrategies.d.ts +19 -0
  311. package/dist/components/UI/DataTable/grid/fill/fillStrategies.js +73 -0
  312. package/dist/components/UI/DataTable/grid/fill/fillStrategies.js.map +1 -0
  313. package/dist/components/UI/DataTable/grid/gridStore.d.ts +69 -0
  314. package/dist/components/UI/DataTable/grid/gridStore.js +219 -0
  315. package/dist/components/UI/DataTable/grid/gridStore.js.map +1 -0
  316. package/dist/components/UI/DataTable/grid/gridTypes.d.ts +47 -0
  317. package/dist/components/UI/DataTable/grid/gridTypes.js +27 -0
  318. package/dist/components/UI/DataTable/grid/gridTypes.js.map +1 -0
  319. package/dist/components/UI/DataTable/grid/useGridFillApply.d.ts +18 -0
  320. package/dist/components/UI/DataTable/grid/useGridFillApply.js +74 -0
  321. package/dist/components/UI/DataTable/grid/useGridFillApply.js.map +1 -0
  322. package/dist/components/UI/DataTable/grid/useGridInstance.d.ts +27 -0
  323. package/dist/components/UI/DataTable/grid/useGridInstance.js +41 -0
  324. package/dist/components/UI/DataTable/grid/useGridInstance.js.map +1 -0
  325. package/dist/components/UI/DataTable/grid/useGridKeyboard.d.ts +17 -0
  326. package/dist/components/UI/DataTable/grid/useGridKeyboard.js +114 -0
  327. package/dist/components/UI/DataTable/grid/useGridKeyboard.js.map +1 -0
  328. package/dist/components/UI/DataTable/index.d.ts +19 -0
  329. package/dist/components/UI/DataTable/index.js +34 -0
  330. package/dist/components/UI/DataTable/index.js.map +1 -0
  331. package/dist/components/UI/DataTable/types.d.ts +513 -0
  332. package/dist/components/UI/DataTable/types.js +13 -0
  333. package/dist/components/UI/DataTable/types.js.map +1 -0
  334. package/dist/components/UI/DataTable/useCellEditingState.d.ts +20 -0
  335. package/dist/components/UI/DataTable/useCellEditingState.js +33 -0
  336. package/dist/components/UI/DataTable/useCellEditingState.js.map +1 -0
  337. package/dist/components/UI/DataTable/useColumnOrder.d.ts +25 -0
  338. package/dist/components/UI/DataTable/useColumnOrder.js +94 -0
  339. package/dist/components/UI/DataTable/useColumnOrder.js.map +1 -0
  340. package/dist/components/UI/DataTable/useColumnSizing.d.ts +9 -0
  341. package/dist/components/UI/DataTable/useColumnSizing.js +21 -0
  342. package/dist/components/UI/DataTable/useColumnSizing.js.map +1 -0
  343. package/dist/components/UI/DataTable/useColumnVisibility.d.ts +19 -0
  344. package/dist/components/UI/DataTable/useColumnVisibility.js +47 -0
  345. package/dist/components/UI/DataTable/useColumnVisibility.js.map +1 -0
  346. package/dist/components/UI/DataTable/useDataTableCommitQueue.d.ts +69 -0
  347. package/dist/components/UI/DataTable/useDataTableCommitQueue.js +220 -0
  348. package/dist/components/UI/DataTable/useDataTableCommitQueue.js.map +1 -0
  349. package/dist/components/UI/DataTable/useDataTableEditBuffer.d.ts +36 -0
  350. package/dist/components/UI/DataTable/useDataTableEditBuffer.js +29 -0
  351. package/dist/components/UI/DataTable/useDataTableEditBuffer.js.map +1 -0
  352. package/dist/components/UI/DataTable/useDataTableInstance.d.ts +65 -0
  353. package/dist/components/UI/DataTable/useDataTableInstance.js +306 -0
  354. package/dist/components/UI/DataTable/useDataTableInstance.js.map +1 -0
  355. package/dist/components/UI/DataTable/useDataTableSource.d.ts +85 -0
  356. package/dist/components/UI/DataTable/useDataTableSource.js +199 -0
  357. package/dist/components/UI/DataTable/useDataTableSource.js.map +1 -0
  358. package/dist/components/UI/DataTable/useFlipRows.d.ts +22 -0
  359. package/dist/components/UI/DataTable/useFlipRows.js +90 -0
  360. package/dist/components/UI/DataTable/useFlipRows.js.map +1 -0
  361. package/dist/components/UI/ErrorBoundary.d.ts +20 -0
  362. package/dist/components/UI/ErrorBoundary.js +36 -0
  363. package/dist/components/UI/ErrorBoundary.js.map +1 -0
  364. package/dist/components/UI/GeneratedByAI.d.ts +2 -0
  365. package/dist/components/UI/GeneratedByAI.js +12 -0
  366. package/dist/components/UI/GeneratedByAI.js.map +1 -0
  367. package/dist/components/UI/HorizontalScrollArea.d.ts +22 -0
  368. package/dist/components/UI/HorizontalScrollArea.js +73 -0
  369. package/dist/components/UI/HorizontalScrollArea.js.map +1 -0
  370. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.d.ts +15 -0
  371. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js +144 -0
  372. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js.map +1 -0
  373. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.d.ts +29 -0
  374. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js +84 -0
  375. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js.map +1 -0
  376. package/dist/components/UI/ImageAnnotator/AnnotationEditor.d.ts +12 -0
  377. package/dist/components/UI/ImageAnnotator/AnnotationEditor.js +267 -0
  378. package/dist/components/UI/ImageAnnotator/AnnotationEditor.js.map +1 -0
  379. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.d.ts +13 -0
  380. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js +58 -0
  381. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js.map +1 -0
  382. package/dist/components/UI/ImageAnnotator/annotationStyle.d.ts +28 -0
  383. package/dist/components/UI/ImageAnnotator/annotationStyle.js +56 -0
  384. package/dist/components/UI/ImageAnnotator/annotationStyle.js.map +1 -0
  385. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.d.ts +17 -0
  386. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js +329 -0
  387. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js.map +1 -0
  388. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.d.ts +10 -0
  389. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js +125 -0
  390. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js.map +1 -0
  391. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.d.ts +19 -0
  392. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js +216 -0
  393. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js.map +1 -0
  394. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.d.ts +15 -0
  395. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js +77 -0
  396. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js.map +1 -0
  397. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.d.ts +11 -0
  398. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js +69 -0
  399. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js.map +1 -0
  400. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.d.ts +8 -0
  401. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js +58 -0
  402. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js.map +1 -0
  403. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.d.ts +13 -0
  404. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js +183 -0
  405. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js.map +1 -0
  406. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.d.ts +15 -0
  407. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js +78 -0
  408. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js.map +1 -0
  409. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.d.ts +15 -0
  410. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js +46 -0
  411. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js.map +1 -0
  412. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.d.ts +10 -0
  413. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js +80 -0
  414. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js.map +1 -0
  415. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.d.ts +21 -0
  416. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js +45 -0
  417. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js.map +1 -0
  418. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.d.ts +15 -0
  419. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js +165 -0
  420. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js.map +1 -0
  421. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.d.ts +15 -0
  422. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js +23 -0
  423. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js.map +1 -0
  424. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.d.ts +8 -0
  425. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js +10 -0
  426. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js.map +1 -0
  427. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.d.ts +9 -0
  428. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js +56 -0
  429. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js.map +1 -0
  430. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.d.ts +27 -0
  431. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js +149 -0
  432. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js.map +1 -0
  433. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.d.ts +14 -0
  434. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js +79 -0
  435. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js.map +1 -0
  436. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.d.ts +5 -0
  437. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js +23 -0
  438. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js.map +1 -0
  439. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.d.ts +2 -0
  440. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js +27 -0
  441. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js.map +1 -0
  442. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.d.ts +89 -0
  443. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js +13 -0
  444. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js.map +1 -0
  445. package/dist/components/UI/ImagePlaceholder.d.ts +24 -0
  446. package/dist/components/UI/ImagePlaceholder.js +26 -0
  447. package/dist/components/UI/ImagePlaceholder.js.map +1 -0
  448. package/dist/components/UI/ImageZoomOverlay.d.ts +7 -0
  449. package/dist/components/UI/ImageZoomOverlay.js +49 -0
  450. package/dist/components/UI/ImageZoomOverlay.js.map +1 -0
  451. package/dist/components/UI/InformationCard.d.ts +26 -0
  452. package/dist/components/UI/InformationCard.js +89 -0
  453. package/dist/components/UI/InformationCard.js.map +1 -0
  454. package/dist/components/UI/Kanban/KanbanBoard.d.ts +26 -0
  455. package/dist/components/UI/Kanban/KanbanBoard.js +89 -0
  456. package/dist/components/UI/Kanban/KanbanBoard.js.map +1 -0
  457. package/dist/components/UI/Kanban/KanbanCard.d.ts +22 -0
  458. package/dist/components/UI/Kanban/KanbanCard.js +47 -0
  459. package/dist/components/UI/Kanban/KanbanCard.js.map +1 -0
  460. package/dist/components/UI/Kanban/KanbanLane.d.ts +37 -0
  461. package/dist/components/UI/Kanban/KanbanLane.js +77 -0
  462. package/dist/components/UI/Kanban/KanbanLane.js.map +1 -0
  463. package/dist/components/UI/Kanban/index.d.ts +4 -0
  464. package/dist/components/UI/Kanban/index.js +11 -0
  465. package/dist/components/UI/Kanban/index.js.map +1 -0
  466. package/dist/components/UI/Kanban/kanbanBoardContext.d.ts +13 -0
  467. package/dist/components/UI/Kanban/kanbanBoardContext.js +13 -0
  468. package/dist/components/UI/Kanban/kanbanBoardContext.js.map +1 -0
  469. package/dist/components/UI/LazyMarkdown.d.ts +5 -0
  470. package/dist/components/UI/LazyMarkdown.js +8 -0
  471. package/dist/components/UI/LazyMarkdown.js.map +1 -0
  472. package/dist/components/UI/LoadingPage.d.ts +2 -0
  473. package/dist/components/UI/LoadingPage.js +13 -0
  474. package/dist/components/UI/LoadingPage.js.map +1 -0
  475. package/dist/components/UI/LoadingSpinner.d.ts +14 -0
  476. package/dist/components/UI/LoadingSpinner.js +32 -0
  477. package/dist/components/UI/LoadingSpinner.js.map +1 -0
  478. package/dist/components/UI/MaterialSymbol/consts.d.ts +2 -0
  479. package/dist/components/UI/MaterialSymbol/consts.js +3472 -0
  480. package/dist/components/UI/MaterialSymbol/consts.js.map +1 -0
  481. package/dist/components/UI/MaterialSymbol/index.d.ts +18 -0
  482. package/dist/components/UI/MaterialSymbol/index.js +46 -0
  483. package/dist/components/UI/MaterialSymbol/index.js.map +1 -0
  484. package/dist/components/UI/MaterialSymbol/types.d.ts +37 -0
  485. package/dist/components/UI/MaterialSymbol/types.js +2 -0
  486. package/dist/components/UI/MaterialSymbol/types.js.map +1 -0
  487. package/dist/components/UI/NoDataFound/index.d.ts +31 -0
  488. package/dist/components/UI/NoDataFound/index.js +215 -0
  489. package/dist/components/UI/NoDataFound/index.js.map +1 -0
  490. package/dist/components/UI/NoDataFound/noDataFoundPresets.d.ts +31 -0
  491. package/dist/components/UI/NoDataFound/noDataFoundPresets.js +99 -0
  492. package/dist/components/UI/NoDataFound/noDataFoundPresets.js.map +1 -0
  493. package/dist/components/UI/ReferenceCard.d.ts +16 -0
  494. package/dist/components/UI/ReferenceCard.js +59 -0
  495. package/dist/components/UI/ReferenceCard.js.map +1 -0
  496. package/dist/components/UI/RichTextContent.d.ts +14 -0
  497. package/dist/components/UI/RichTextContent.js +28 -0
  498. package/dist/components/UI/RichTextContent.js.map +1 -0
  499. package/dist/components/UI/SkeletonLoading.d.ts +9 -0
  500. package/dist/components/UI/SkeletonLoading.js +20 -0
  501. package/dist/components/UI/SkeletonLoading.js.map +1 -0
  502. package/dist/components/UI/ThreeDots.d.ts +11 -0
  503. package/dist/components/UI/ThreeDots.js +18 -0
  504. package/dist/components/UI/ThreeDots.js.map +1 -0
  505. package/dist/components/UI/Toast.d.ts +16 -0
  506. package/dist/components/UI/Toast.js +81 -0
  507. package/dist/components/UI/Toast.js.map +1 -0
  508. package/dist/components/UI/ToastHost.d.ts +2 -0
  509. package/dist/components/UI/ToastHost.js +25 -0
  510. package/dist/components/UI/ToastHost.js.map +1 -0
  511. package/dist/components/UI/TypingEffect.d.ts +10 -0
  512. package/dist/components/UI/TypingEffect.js +31 -0
  513. package/dist/components/UI/TypingEffect.js.map +1 -0
  514. package/dist/components/UI/UmodeLogo.d.ts +10 -0
  515. package/dist/components/UI/UmodeLogo.js +128 -0
  516. package/dist/components/UI/UmodeLogo.js.map +1 -0
  517. package/dist/components/UI/UsersAvatar.d.ts +7 -0
  518. package/dist/components/UI/UsersAvatar.js +29 -0
  519. package/dist/components/UI/UsersAvatar.js.map +1 -0
  520. package/dist/components/UI/access/UiAccessContext.d.ts +21 -0
  521. package/dist/components/UI/access/UiAccessContext.js +14 -0
  522. package/dist/components/UI/access/UiAccessContext.js.map +1 -0
  523. package/dist/components/UI/cells/ArrayCell.d.ts +5 -0
  524. package/dist/components/UI/cells/ArrayCell.js +25 -0
  525. package/dist/components/UI/cells/ArrayCell.js.map +1 -0
  526. package/dist/components/UI/cells/BooleanCell.d.ts +5 -0
  527. package/dist/components/UI/cells/BooleanCell.js +22 -0
  528. package/dist/components/UI/cells/BooleanCell.js.map +1 -0
  529. package/dist/components/UI/cells/DetailsTableCell.d.ts +7 -0
  530. package/dist/components/UI/cells/DetailsTableCell.js +30 -0
  531. package/dist/components/UI/cells/DetailsTableCell.js.map +1 -0
  532. package/dist/components/UI/cells/ProductImageCell.d.ts +5 -0
  533. package/dist/components/UI/cells/ProductImageCell.js +21 -0
  534. package/dist/components/UI/cells/ProductImageCell.js.map +1 -0
  535. package/dist/components/UI/cells/UrlLinkCell.d.ts +6 -0
  536. package/dist/components/UI/cells/UrlLinkCell.js +19 -0
  537. package/dist/components/UI/cells/UrlLinkCell.js.map +1 -0
  538. package/dist/components/Upload/SimpleUploaderComponent.d.ts +9 -0
  539. package/dist/components/Upload/SimpleUploaderComponent.js +72 -0
  540. package/dist/components/Upload/SimpleUploaderComponent.js.map +1 -0
  541. package/dist/components/Upload/UploaderComponent.d.ts +29 -0
  542. package/dist/components/Upload/UploaderComponent.js +241 -0
  543. package/dist/components/Upload/UploaderComponent.js.map +1 -0
  544. package/dist/components/Upload/XlsExportButton.d.ts +13 -0
  545. package/dist/components/Upload/XlsExportButton.js +47 -0
  546. package/dist/components/Upload/XlsExportButton.js.map +1 -0
  547. package/dist/helpers/composeRefs.d.ts +7 -0
  548. package/dist/helpers/composeRefs.js +14 -0
  549. package/dist/helpers/composeRefs.js.map +1 -0
  550. package/dist/helpers/dateHelpers.d.ts +47 -0
  551. package/dist/helpers/dateHelpers.js +69 -0
  552. package/dist/helpers/dateHelpers.js.map +1 -0
  553. package/dist/helpers/fileAttachments.d.ts +3 -0
  554. package/dist/helpers/fileAttachments.js +17 -0
  555. package/dist/helpers/fileAttachments.js.map +1 -0
  556. package/dist/helpers/formatHelpers.d.ts +36 -0
  557. package/dist/helpers/formatHelpers.js +65 -0
  558. package/dist/helpers/formatHelpers.js.map +1 -0
  559. package/dist/helpers/imageCompression.d.ts +5 -0
  560. package/dist/helpers/imageCompression.js +49 -0
  561. package/dist/helpers/imageCompression.js.map +1 -0
  562. package/dist/helpers/imageFile.d.ts +16 -0
  563. package/dist/helpers/imageFile.js +59 -0
  564. package/dist/helpers/imageFile.js.map +1 -0
  565. package/dist/helpers/layeredSurfaces.d.ts +10 -0
  566. package/dist/helpers/layeredSurfaces.js +14 -0
  567. package/dist/helpers/layeredSurfaces.js.map +1 -0
  568. package/dist/helpers/mathHelpers.d.ts +14 -0
  569. package/dist/helpers/mathHelpers.js +13 -0
  570. package/dist/helpers/mathHelpers.js.map +1 -0
  571. package/dist/helpers/mergeClasses.d.ts +6 -0
  572. package/dist/helpers/mergeClasses.js +12 -0
  573. package/dist/helpers/mergeClasses.js.map +1 -0
  574. package/dist/helpers/moduleLoadErrorHelpers.d.ts +1 -0
  575. package/dist/helpers/moduleLoadErrorHelpers.js +25 -0
  576. package/dist/helpers/moduleLoadErrorHelpers.js.map +1 -0
  577. package/dist/helpers/objectHelpers.d.ts +13 -0
  578. package/dist/helpers/objectHelpers.js +60 -0
  579. package/dist/helpers/objectHelpers.js.map +1 -0
  580. package/dist/helpers/richText.d.ts +37 -0
  581. package/dist/helpers/richText.js +171 -0
  582. package/dist/helpers/richText.js.map +1 -0
  583. package/dist/helpers/stringHelpers.d.ts +45 -0
  584. package/dist/helpers/stringHelpers.js +57 -0
  585. package/dist/helpers/stringHelpers.js.map +1 -0
  586. package/dist/helpers/themeTokens.d.ts +28 -0
  587. package/dist/helpers/themeTokens.js +33 -0
  588. package/dist/helpers/themeTokens.js.map +1 -0
  589. package/dist/helpers/uiErrorPresenter.d.ts +21 -0
  590. package/dist/helpers/uiErrorPresenter.js +10 -0
  591. package/dist/helpers/uiErrorPresenter.js.map +1 -0
  592. package/dist/helpers/uiLogger.d.ts +8 -0
  593. package/dist/helpers/uiLogger.js +16 -0
  594. package/dist/helpers/uiLogger.js.map +1 -0
  595. package/dist/helpers/uiPreferences.d.ts +13 -0
  596. package/dist/helpers/uiPreferences.js +35 -0
  597. package/dist/helpers/uiPreferences.js.map +1 -0
  598. package/dist/helpers/urlParamSync.d.ts +19 -0
  599. package/dist/helpers/urlParamSync.js +54 -0
  600. package/dist/helpers/urlParamSync.js.map +1 -0
  601. package/dist/helpers/utilityHelpers.d.ts +81 -0
  602. package/dist/helpers/utilityHelpers.js +133 -0
  603. package/dist/helpers/utilityHelpers.js.map +1 -0
  604. package/dist/helpers/validationHelpers.d.ts +36 -0
  605. package/dist/helpers/validationHelpers.js +44 -0
  606. package/dist/helpers/validationHelpers.js.map +1 -0
  607. package/dist/hooks/useAnchoredFloating.d.ts +22 -0
  608. package/dist/hooks/useAnchoredFloating.js +59 -0
  609. package/dist/hooks/useAnchoredFloating.js.map +1 -0
  610. package/dist/hooks/useBreakpoint.d.ts +16 -0
  611. package/dist/hooks/useBreakpoint.js +47 -0
  612. package/dist/hooks/useBreakpoint.js.map +1 -0
  613. package/dist/hooks/useDebounce.d.ts +8 -0
  614. package/dist/hooks/useDebounce.js +36 -0
  615. package/dist/hooks/useDebounce.js.map +1 -0
  616. package/dist/hooks/useFileAttachments.d.ts +43 -0
  617. package/dist/hooks/useFileAttachments.js +158 -0
  618. package/dist/hooks/useFileAttachments.js.map +1 -0
  619. package/dist/hooks/useHoverCapable.d.ts +6 -0
  620. package/dist/hooks/useHoverCapable.js +28 -0
  621. package/dist/hooks/useHoverCapable.js.map +1 -0
  622. package/dist/hooks/useInlineEditor.d.ts +5 -0
  623. package/dist/hooks/useInlineEditor.js +41 -0
  624. package/dist/hooks/useInlineEditor.js.map +1 -0
  625. package/dist/hooks/useMobile.d.ts +7 -0
  626. package/dist/hooks/useMobile.js +8 -0
  627. package/dist/hooks/useMobile.js.map +1 -0
  628. package/dist/hooks/useNotification.d.ts +38 -0
  629. package/dist/hooks/useNotification.js +39 -0
  630. package/dist/hooks/useNotification.js.map +1 -0
  631. package/dist/hooks/useResolvedTheme.d.ts +7 -0
  632. package/dist/hooks/useResolvedTheme.js +15 -0
  633. package/dist/hooks/useResolvedTheme.js.map +1 -0
  634. package/dist/hooks/useVoiceTranscription.d.ts +25 -0
  635. package/dist/hooks/useVoiceTranscription.js +106 -0
  636. package/dist/hooks/useVoiceTranscription.js.map +1 -0
  637. package/dist/index.d.ts +50 -0
  638. package/dist/index.js +125 -0
  639. package/dist/index.js.map +1 -0
  640. package/dist/interfaces/IFileAttachment.d.ts +18 -0
  641. package/dist/interfaces/IFileAttachment.js +2 -0
  642. package/dist/interfaces/IFileAttachment.js.map +1 -0
  643. package/dist/interfaces/IFilterOption.d.ts +10 -0
  644. package/dist/interfaces/IFilterOption.js +2 -0
  645. package/dist/interfaces/IFilterOption.js.map +1 -0
  646. package/dist/locales/en/ui.json.d.ts +470 -0
  647. package/dist/locales/en/ui.json.js +99 -0
  648. package/dist/locales/en/ui.json.js.map +1 -0
  649. package/dist/locales/index.d.ts +938 -0
  650. package/dist/locales/index.js +7 -0
  651. package/dist/locales/index.js.map +1 -0
  652. package/dist/locales/pt/ui.json.d.ts +470 -0
  653. package/dist/locales/pt/ui.json.js +99 -0
  654. package/dist/locales/pt/ui.json.js.map +1 -0
  655. package/dist/motion/index.d.ts +2 -0
  656. package/dist/motion/index.js +17 -0
  657. package/dist/motion/index.js.map +1 -0
  658. package/dist/motion/motionPresets.d.ts +44 -0
  659. package/dist/motion/motionPresets.js +67 -0
  660. package/dist/motion/motionPresets.js.map +1 -0
  661. package/dist/motion/motionTokens.d.ts +40 -0
  662. package/dist/motion/motionTokens.js +29 -0
  663. package/dist/motion/motionTokens.js.map +1 -0
  664. package/package.json +174 -0
  665. package/src/assets/styles/theme.css +381 -0
  666. package/tailwind-plugins/glass.js +167 -0
  667. package/tailwind.preset.js +367 -0
@@ -0,0 +1,25 @@
1
+ import { Updater } from '@tanstack/react-table';
2
+ import { IDataTableColumnConfig, IDataTableConfig, IDataTableRow } from './types';
3
+ export declare const getFixedEndColumns: <T extends IDataTableRow>(columns: Array<IDataTableColumnConfig<T>>) => Array<IDataTableColumnConfig<T>>;
4
+ export declare const getFixedStartColumns: <T extends IDataTableRow>(columns: Array<IDataTableColumnConfig<T>>) => Array<IDataTableColumnConfig<T>>;
5
+ export declare const getReorderableColumns: <T extends IDataTableRow>(columns: Array<IDataTableColumnConfig<T>>) => Array<IDataTableColumnConfig<T>>;
6
+ export declare const resolveColumnOrder: <R extends IDataTableRow>(storageKey: string, columns: Array<IDataTableColumnConfig<R>>) => Array<string>;
7
+ interface IUseColumnOrderResult {
8
+ columnOrder: Array<string>;
9
+ onColumnOrderChange: (updater: Updater<Array<string>>) => void;
10
+ resetColumnOrder: () => void;
11
+ }
12
+ export declare const useColumnOrder: <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(config: IDataTableConfig<T, C>) => IUseColumnOrderResult;
13
+ interface IUseDetailColumnOrderResult {
14
+ detailColumnOrder: Array<string>;
15
+ onDetailColumnOrderChange: (updater: Updater<Array<string>>) => void;
16
+ resetDetailColumnOrder: () => void;
17
+ }
18
+ /**
19
+ * Column order for the nested detail table of a `detailTable` expansion.
20
+ * Same reconcile/persist semantics as the parent order, stored under the
21
+ * detail entry (`${entityKey}:detail`). Pass `null` columns for tables without
22
+ * a detailTable expansion: the hook is inert then.
23
+ */
24
+ export declare const useDetailColumnOrder: <C extends IDataTableRow>(entityKey: string, columns: Array<IDataTableColumnConfig<C>> | null) => IUseDetailColumnOrderResult;
25
+ export {};
@@ -0,0 +1,94 @@
1
+ import { useState, useEffect } from "react";
2
+ import { readColumnsEntry, writeColumnsEntry, detailColumnsEntryKey } from "./dataTableColumnsStore.js";
3
+ const getFixedEndColumns = (columns) => (columns ?? []).filter((column) => column.type === "actions");
4
+ const getFixedStartColumns = (columns) => (columns ?? []).filter((column) => column.type !== "actions" && column.hideable === false);
5
+ const getReorderableColumns = (columns) => (columns ?? []).filter((column) => column.type !== "actions" && column.hideable !== false);
6
+ const mergeReorderableOrder = (reorderableIds, persistedIds) => {
7
+ const defaultIndexById = new Map(reorderableIds.map((id, index) => [id, index]));
8
+ const result = persistedIds.filter((id) => defaultIndexById.has(id));
9
+ const persistedSet = new Set(result);
10
+ for (const id of reorderableIds) {
11
+ if (persistedSet.has(id)) continue;
12
+ const defaultIndex = defaultIndexById.get(id) ?? 0;
13
+ const insertAt = result.findIndex((existingId) => (defaultIndexById.get(existingId) ?? 0) > defaultIndex);
14
+ if (insertAt === -1) result.push(id);
15
+ else result.splice(insertAt, 0, id);
16
+ }
17
+ return result;
18
+ };
19
+ const buildDefaultColumnOrder = (columns) => [
20
+ ...getFixedStartColumns(columns).map((column) => column.id),
21
+ ...getReorderableColumns(columns).map((column) => column.id),
22
+ ...getFixedEndColumns(columns).map((column) => column.id)
23
+ ];
24
+ const resolveColumnOrder = (storageKey, columns) => {
25
+ const reorderableIds = getReorderableColumns(columns).map((column) => column.id);
26
+ const persisted = readColumnsEntry(storageKey).order;
27
+ const mergedReorderable = persisted ? mergeReorderableOrder(reorderableIds, persisted) : reorderableIds;
28
+ return [
29
+ ...getFixedStartColumns(columns).map((column) => column.id),
30
+ ...mergedReorderable,
31
+ ...getFixedEndColumns(columns).map((column) => column.id)
32
+ ];
33
+ };
34
+ const reconcileColumnOrder = (previous, columns) => {
35
+ const reorderableIds = getReorderableColumns(columns).map((column) => column.id);
36
+ const reorderableIdSet = new Set(reorderableIds);
37
+ const previousReorderable = previous.filter((id) => reorderableIdSet.has(id));
38
+ const next = [
39
+ ...getFixedStartColumns(columns).map((column) => column.id),
40
+ ...mergeReorderableOrder(reorderableIds, previousReorderable),
41
+ ...getFixedEndColumns(columns).map((column) => column.id)
42
+ ];
43
+ return next.length === previous.length && next.every((id, index) => id === previous[index]) ? previous : next;
44
+ };
45
+ const useColumnOrder = (config) => {
46
+ const [columnOrder, setColumnOrder] = useState(
47
+ () => resolveColumnOrder(config.entityKey, config.columns)
48
+ );
49
+ const onColumnOrderChange = (updater) => {
50
+ setColumnOrder((previous) => typeof updater === "function" ? updater(previous) : updater);
51
+ };
52
+ const resetColumnOrder = () => {
53
+ setColumnOrder(buildDefaultColumnOrder(config.columns));
54
+ };
55
+ const columnIdsSignature = config.columns.map((column) => column.id).join("|");
56
+ useEffect(() => {
57
+ setColumnOrder((previous) => reconcileColumnOrder(previous, config.columns));
58
+ }, [columnIdsSignature]);
59
+ useEffect(() => {
60
+ writeColumnsEntry(config.entityKey, { order: columnOrder });
61
+ }, [config.entityKey, columnOrder]);
62
+ return { columnOrder, onColumnOrderChange, resetColumnOrder };
63
+ };
64
+ const useDetailColumnOrder = (entityKey, columns) => {
65
+ const [detailColumnOrder, setDetailColumnOrder] = useState(
66
+ () => columns ? resolveColumnOrder(detailColumnsEntryKey(entityKey), columns) : []
67
+ );
68
+ const onDetailColumnOrderChange = (updater) => {
69
+ setDetailColumnOrder((previous) => typeof updater === "function" ? updater(previous) : updater);
70
+ };
71
+ const resetDetailColumnOrder = () => {
72
+ if (columns) setDetailColumnOrder(buildDefaultColumnOrder(columns));
73
+ };
74
+ const hasDetailColumns = !!columns;
75
+ const detailColumnIdsSignature = (columns ?? []).map((column) => column.id).join("|");
76
+ useEffect(() => {
77
+ if (!columns) return;
78
+ setDetailColumnOrder((previous) => reconcileColumnOrder(previous, columns));
79
+ }, [detailColumnIdsSignature, hasDetailColumns]);
80
+ useEffect(() => {
81
+ if (!hasDetailColumns) return;
82
+ writeColumnsEntry(detailColumnsEntryKey(entityKey), { order: detailColumnOrder });
83
+ }, [entityKey, hasDetailColumns, detailColumnOrder]);
84
+ return { detailColumnOrder, onDetailColumnOrderChange, resetDetailColumnOrder };
85
+ };
86
+ export {
87
+ getFixedEndColumns,
88
+ getFixedStartColumns,
89
+ getReorderableColumns,
90
+ resolveColumnOrder,
91
+ useColumnOrder,
92
+ useDetailColumnOrder
93
+ };
94
+ //# sourceMappingURL=useColumnOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnOrder.js","sources":["../../../../src/components/UI/DataTable/useColumnOrder.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Updater } from '@tanstack/react-table';\n\nimport { detailColumnsEntryKey, readColumnsEntry, writeColumnsEntry } from './dataTableColumnsStore';\nimport type { IDataTableColumnConfig, IDataTableConfig, IDataTableRow } from './types';\n\n// Fixed columns never enter the drag list. Identity/first columns (`hideable:\n// false`) stay pinned to the start; the `actions` column stays pinned to the\n// end. Only the middle columns are reorderable. `actions` is checked first so a\n// column that is both non-hideable and `actions` lands at the end, not the start.\nexport const getFixedEndColumns = <T extends IDataTableRow>(\n columns: Array<IDataTableColumnConfig<T>>,\n): Array<IDataTableColumnConfig<T>> => (columns ?? []).filter((column) => column.type === 'actions');\n\nexport const getFixedStartColumns = <T extends IDataTableRow>(\n columns: Array<IDataTableColumnConfig<T>>,\n): Array<IDataTableColumnConfig<T>> =>\n (columns ?? []).filter((column) => column.type !== 'actions' && column.hideable === false);\n\nexport const getReorderableColumns = <T extends IDataTableRow>(\n columns: Array<IDataTableColumnConfig<T>>,\n): Array<IDataTableColumnConfig<T>> =>\n (columns ?? []).filter((column) => column.type !== 'actions' && column.hideable !== false);\n\n// Reconcile the persisted reorderable ids with the current config:\n// - keep saved ids that are still reorderable, in the saved order;\n// - drop obsolete ids silently (they are absent from the current config);\n// - insert reorderable ids missing from persistence at their default config\n// position (relative to the other reorderable columns).\nconst mergeReorderableOrder = (reorderableIds: Array<string>, persistedIds: Array<string>): Array<string> => {\n const defaultIndexById = new Map(reorderableIds.map((id, index) => [id, index]));\n\n const result = persistedIds.filter((id) => defaultIndexById.has(id));\n const persistedSet = new Set(result);\n\n for (const id of reorderableIds) {\n if (persistedSet.has(id)) continue;\n\n const defaultIndex = defaultIndexById.get(id) ?? 0;\n const insertAt = result.findIndex((existingId) => (defaultIndexById.get(existingId) ?? 0) > defaultIndex);\n\n if (insertAt === -1) result.push(id);\n else result.splice(insertAt, 0, id);\n }\n\n return result;\n};\n\nconst buildDefaultColumnOrder = <R extends IDataTableRow>(columns: Array<IDataTableColumnConfig<R>>): Array<string> => [\n ...getFixedStartColumns(columns).map((column) => column.id),\n ...getReorderableColumns(columns).map((column) => column.id),\n ...getFixedEndColumns(columns).map((column) => column.id),\n];\n\n// Full column order = fixed start + (persisted-merged) reorderable + fixed end.\n// Fixed columns are always re-anchored from the current config, so a column that\n// changed to fixed since the order was saved lands in the right bucket.\nexport const resolveColumnOrder = <R extends IDataTableRow>(\n storageKey: string,\n columns: Array<IDataTableColumnConfig<R>>,\n): Array<string> => {\n const reorderableIds = getReorderableColumns(columns).map((column) => column.id);\n const persisted = readColumnsEntry(storageKey).order;\n const mergedReorderable = persisted ? mergeReorderableOrder(reorderableIds, persisted) : reorderableIds;\n\n return [\n ...getFixedStartColumns(columns).map((column) => column.id),\n ...mergedReorderable,\n ...getFixedEndColumns(columns).map((column) => column.id),\n ];\n};\n\ninterface IUseColumnOrderResult {\n columnOrder: Array<string>;\n onColumnOrderChange: (updater: Updater<Array<string>>) => void;\n resetColumnOrder: () => void;\n}\n\n// Reconcile a stateful order with the CURRENT config columns. Columns that\n// appeared since the state was built (async/dynamic columns) land at their\n// config position instead of being appended by TanStack; columns that left are\n// dropped; the user's order of surviving reorderable columns is preserved.\n// Returns the previous array identity when nothing changed, so the sync effect\n// below never loops.\nconst reconcileColumnOrder = <R extends IDataTableRow>(\n previous: Array<string>,\n columns: Array<IDataTableColumnConfig<R>>,\n): Array<string> => {\n const reorderableIds = getReorderableColumns(columns).map((column) => column.id);\n const reorderableIdSet = new Set(reorderableIds);\n const previousReorderable = previous.filter((id) => reorderableIdSet.has(id));\n\n const next = [\n ...getFixedStartColumns(columns).map((column) => column.id),\n ...mergeReorderableOrder(reorderableIds, previousReorderable),\n ...getFixedEndColumns(columns).map((column) => column.id),\n ];\n\n return next.length === previous.length && next.every((id, index) => id === previous[index]) ? previous : next;\n};\n\nexport const useColumnOrder = <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(\n config: IDataTableConfig<T, C>,\n): IUseColumnOrderResult => {\n const [columnOrder, setColumnOrder] = useState<Array<string>>(() =>\n resolveColumnOrder(config.entityKey, config.columns),\n );\n\n const onColumnOrderChange = (updater: Updater<Array<string>>) => {\n setColumnOrder((previous) => (typeof updater === 'function' ? updater(previous) : updater));\n };\n\n const resetColumnOrder = () => {\n setColumnOrder(buildDefaultColumnOrder(config.columns));\n };\n\n // Config columns can change while mounted (columns fetched async, dynamic\n // catalogs). Re-anchor the order so new ids take their config position.\n const columnIdsSignature = config.columns.map((column) => column.id).join('|');\n useEffect(() => {\n setColumnOrder((previous) => reconcileColumnOrder(previous, config.columns));\n }, [columnIdsSignature]);\n\n useEffect(() => {\n writeColumnsEntry(config.entityKey, { order: columnOrder });\n }, [config.entityKey, columnOrder]);\n\n return { columnOrder, onColumnOrderChange, resetColumnOrder };\n};\n\ninterface IUseDetailColumnOrderResult {\n detailColumnOrder: Array<string>;\n onDetailColumnOrderChange: (updater: Updater<Array<string>>) => void;\n resetDetailColumnOrder: () => void;\n}\n\n/**\n * Column order for the nested detail table of a `detailTable` expansion.\n * Same reconcile/persist semantics as the parent order, stored under the\n * detail entry (`${entityKey}:detail`). Pass `null` columns for tables without\n * a detailTable expansion: the hook is inert then.\n */\nexport const useDetailColumnOrder = <C extends IDataTableRow>(\n entityKey: string,\n columns: Array<IDataTableColumnConfig<C>> | null,\n): IUseDetailColumnOrderResult => {\n const [detailColumnOrder, setDetailColumnOrder] = useState<Array<string>>(() =>\n columns ? resolveColumnOrder(detailColumnsEntryKey(entityKey), columns) : [],\n );\n\n const onDetailColumnOrderChange = (updater: Updater<Array<string>>) => {\n setDetailColumnOrder((previous) => (typeof updater === 'function' ? updater(previous) : updater));\n };\n\n const resetDetailColumnOrder = () => {\n if (columns) setDetailColumnOrder(buildDefaultColumnOrder(columns));\n };\n\n const hasDetailColumns = !!columns;\n\n // Same re-anchoring as the parent order when the detail columns change while mounted.\n const detailColumnIdsSignature = (columns ?? []).map((column) => column.id).join('|');\n useEffect(() => {\n if (!columns) return;\n setDetailColumnOrder((previous) => reconcileColumnOrder(previous, columns));\n }, [detailColumnIdsSignature, hasDetailColumns]);\n\n useEffect(() => {\n if (!hasDetailColumns) return;\n writeColumnsEntry(detailColumnsEntryKey(entityKey), { order: detailColumnOrder });\n }, [entityKey, hasDetailColumns, detailColumnOrder]);\n\n return { detailColumnOrder, onDetailColumnOrderChange, resetDetailColumnOrder };\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ColumnSizingState, Updater } from '@tanstack/react-table';
2
+ import { IDataTableConfig, IDataTableRow } from './types';
3
+ interface IUseColumnSizingResult {
4
+ columnSizing: ColumnSizingState;
5
+ onColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;
6
+ resetColumnSizing: () => void;
7
+ }
8
+ export declare const useColumnSizing: <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(config: IDataTableConfig<T, C>) => IUseColumnSizingResult;
9
+ export {};
@@ -0,0 +1,21 @@
1
+ import { useState, useEffect } from "react";
2
+ import { readColumnsEntry, writeColumnsEntry } from "./dataTableColumnsStore.js";
3
+ const useColumnSizing = (config) => {
4
+ const [columnSizing, setColumnSizing] = useState(
5
+ () => readColumnsEntry(config.entityKey).sizing ?? {}
6
+ );
7
+ const onColumnSizingChange = (updater) => {
8
+ setColumnSizing((previous) => typeof updater === "function" ? updater(previous) : updater);
9
+ };
10
+ const resetColumnSizing = () => {
11
+ setColumnSizing({});
12
+ };
13
+ useEffect(() => {
14
+ writeColumnsEntry(config.entityKey, { sizing: columnSizing });
15
+ }, [config.entityKey, columnSizing]);
16
+ return { columnSizing, onColumnSizingChange, resetColumnSizing };
17
+ };
18
+ export {
19
+ useColumnSizing
20
+ };
21
+ //# sourceMappingURL=useColumnSizing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnSizing.js","sources":["../../../../src/components/UI/DataTable/useColumnSizing.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { ColumnSizingState, Updater } from '@tanstack/react-table';\n\nimport { readColumnsEntry, writeColumnsEntry } from './dataTableColumnsStore';\nimport type { IDataTableConfig, IDataTableRow } from './types';\n\ninterface IUseColumnSizingResult {\n columnSizing: ColumnSizingState;\n onColumnSizingChange: (updater: Updater<ColumnSizingState>) => void;\n resetColumnSizing: () => void;\n}\n\n// An empty sizing map means \"use the seeded default widths\", so appearance is\n// preserved until the user drags a column edge. Persisted widths (per column id)\n// override the seed. Mirrors useColumnVisibility/useColumnOrder: state seeded\n// from the shared columns entry and written back on every change.\nexport const useColumnSizing = <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(\n config: IDataTableConfig<T, C>,\n): IUseColumnSizingResult => {\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>(\n () => readColumnsEntry(config.entityKey).sizing ?? {},\n );\n\n const onColumnSizingChange = (updater: Updater<ColumnSizingState>) => {\n setColumnSizing((previous) => (typeof updater === 'function' ? updater(previous) : updater));\n };\n\n const resetColumnSizing = () => {\n setColumnSizing({});\n };\n\n useEffect(() => {\n writeColumnsEntry(config.entityKey, { sizing: columnSizing });\n }, [config.entityKey, columnSizing]);\n\n return { columnSizing, onColumnSizingChange, resetColumnSizing };\n};\n"],"names":[],"mappings":";;AAiBO,MAAM,kBAAkB,CAC7B,WAC2B;AAC3B,QAAM,CAAC,cAAc,eAAe,IAAI;AAAA,IACtC,MAAM,iBAAiB,OAAO,SAAS,EAAE,UAAU,CAAA;AAAA,EAAC;AAGtD,QAAM,uBAAuB,CAAC,YAAwC;AACpE,oBAAgB,CAAC,aAAc,OAAO,YAAY,aAAa,QAAQ,QAAQ,IAAI,OAAQ;AAAA,EAC7F;AAEA,QAAM,oBAAoB,MAAM;AAC9B,oBAAgB,CAAA,CAAE;AAAA,EACpB;AAEA,YAAU,MAAM;AACd,sBAAkB,OAAO,WAAW,EAAE,QAAQ,cAAc;AAAA,EAC9D,GAAG,CAAC,OAAO,WAAW,YAAY,CAAC;AAEnC,SAAO,EAAE,cAAc,sBAAsB,kBAAA;AAC/C;"}
@@ -0,0 +1,19 @@
1
+ import { Updater, VisibilityState } from '@tanstack/react-table';
2
+ import { IDataTableColumnConfig, IDataTableConfig, IDataTableRow } from './types';
3
+ interface IUseColumnVisibilityResult {
4
+ columnVisibility: VisibilityState;
5
+ onColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;
6
+ }
7
+ export declare const useColumnVisibility: <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(config: IDataTableConfig<T, C>) => IUseColumnVisibilityResult;
8
+ interface IUseDetailColumnVisibilityResult {
9
+ detailColumnVisibility: VisibilityState;
10
+ toggleDetailColumn: (columnId: string) => void;
11
+ }
12
+ /**
13
+ * Visibility state for the nested detail table of a `detailTable` expansion.
14
+ * Lives at the DataTable level (not per expanded row) so every open detail
15
+ * table shares one state and one persisted entry. Pass `null` columns for
16
+ * tables without a detailTable expansion: the hook is inert then.
17
+ */
18
+ export declare const useDetailColumnVisibility: <C extends IDataTableRow>(entityKey: string, columns: Array<IDataTableColumnConfig<C>> | null) => IUseDetailColumnVisibilityResult;
19
+ export {};
@@ -0,0 +1,47 @@
1
+ import { useState, useEffect } from "react";
2
+ import { writeColumnsEntry, detailColumnsEntryKey, readColumnsEntry } from "./dataTableColumnsStore.js";
3
+ const resolveInitialColumnVisibility = (storageKey, columns) => {
4
+ const visibility = {};
5
+ for (const column of columns) {
6
+ if (column.hideable === false) continue;
7
+ if (column.defaultHidden) visibility[column.id] = false;
8
+ }
9
+ const persisted = readColumnsEntry(storageKey).visibility;
10
+ if (!persisted) return visibility;
11
+ for (const column of columns) {
12
+ if (column.hideable === false) continue;
13
+ if (typeof persisted[column.id] === "boolean") visibility[column.id] = persisted[column.id];
14
+ }
15
+ return visibility;
16
+ };
17
+ const useColumnVisibility = (config) => {
18
+ const [columnVisibility, setColumnVisibility] = useState(
19
+ () => resolveInitialColumnVisibility(config.entityKey, config.columns)
20
+ );
21
+ const onColumnVisibilityChange = (updater) => {
22
+ setColumnVisibility((previous) => typeof updater === "function" ? updater(previous) : updater);
23
+ };
24
+ useEffect(() => {
25
+ writeColumnsEntry(config.entityKey, { visibility: columnVisibility });
26
+ }, [config.entityKey, columnVisibility]);
27
+ return { columnVisibility, onColumnVisibilityChange };
28
+ };
29
+ const useDetailColumnVisibility = (entityKey, columns) => {
30
+ const [detailColumnVisibility, setDetailColumnVisibility] = useState(
31
+ () => columns ? resolveInitialColumnVisibility(detailColumnsEntryKey(entityKey), columns) : {}
32
+ );
33
+ const toggleDetailColumn = (columnId) => {
34
+ setDetailColumnVisibility((previous) => ({ ...previous, [columnId]: !(previous[columnId] ?? true) }));
35
+ };
36
+ const hasDetailColumns = !!columns;
37
+ useEffect(() => {
38
+ if (!hasDetailColumns) return;
39
+ writeColumnsEntry(detailColumnsEntryKey(entityKey), { visibility: detailColumnVisibility });
40
+ }, [entityKey, hasDetailColumns, detailColumnVisibility]);
41
+ return { detailColumnVisibility, toggleDetailColumn };
42
+ };
43
+ export {
44
+ useColumnVisibility,
45
+ useDetailColumnVisibility
46
+ };
47
+ //# sourceMappingURL=useColumnVisibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnVisibility.js","sources":["../../../../src/components/UI/DataTable/useColumnVisibility.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Updater, VisibilityState } from '@tanstack/react-table';\n\nimport { detailColumnsEntryKey, readColumnsEntry, writeColumnsEntry } from './dataTableColumnsStore';\nimport type { IDataTableColumnConfig, IDataTableConfig, IDataTableRow } from './types';\n\n// Non-hideable columns are always forced visible. The persisted map only ever\n// stores the state of hideable columns, so it can never blank out the table.\nconst resolveInitialColumnVisibility = <R extends IDataTableRow>(\n storageKey: string,\n columns: Array<IDataTableColumnConfig<R>>,\n): VisibilityState => {\n const visibility: VisibilityState = {};\n\n for (const column of columns) {\n if (column.hideable === false) continue;\n if (column.defaultHidden) visibility[column.id] = false;\n }\n\n const persisted = readColumnsEntry(storageKey).visibility;\n if (!persisted) return visibility;\n\n for (const column of columns) {\n if (column.hideable === false) continue;\n if (typeof persisted[column.id] === 'boolean') visibility[column.id] = persisted[column.id];\n }\n\n return visibility;\n};\n\ninterface IUseColumnVisibilityResult {\n columnVisibility: VisibilityState;\n onColumnVisibilityChange: (updater: Updater<VisibilityState>) => void;\n}\n\nexport const useColumnVisibility = <T extends IDataTableRow, C extends IDataTableRow = IDataTableRow>(\n config: IDataTableConfig<T, C>,\n): IUseColumnVisibilityResult => {\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(() =>\n resolveInitialColumnVisibility(config.entityKey, config.columns),\n );\n\n const onColumnVisibilityChange = (updater: Updater<VisibilityState>) => {\n setColumnVisibility((previous) => (typeof updater === 'function' ? updater(previous) : updater));\n };\n\n useEffect(() => {\n writeColumnsEntry(config.entityKey, { visibility: columnVisibility });\n }, [config.entityKey, columnVisibility]);\n\n return { columnVisibility, onColumnVisibilityChange };\n};\n\ninterface IUseDetailColumnVisibilityResult {\n detailColumnVisibility: VisibilityState;\n toggleDetailColumn: (columnId: string) => void;\n}\n\n/**\n * Visibility state for the nested detail table of a `detailTable` expansion.\n * Lives at the DataTable level (not per expanded row) so every open detail\n * table shares one state and one persisted entry. Pass `null` columns for\n * tables without a detailTable expansion: the hook is inert then.\n */\nexport const useDetailColumnVisibility = <C extends IDataTableRow>(\n entityKey: string,\n columns: Array<IDataTableColumnConfig<C>> | null,\n): IUseDetailColumnVisibilityResult => {\n const [detailColumnVisibility, setDetailColumnVisibility] = useState<VisibilityState>(() =>\n columns ? resolveInitialColumnVisibility(detailColumnsEntryKey(entityKey), columns) : {},\n );\n\n const toggleDetailColumn = (columnId: string) => {\n setDetailColumnVisibility((previous) => ({ ...previous, [columnId]: !(previous[columnId] ?? true) }));\n };\n\n const hasDetailColumns = !!columns;\n\n useEffect(() => {\n if (!hasDetailColumns) return;\n writeColumnsEntry(detailColumnsEntryKey(entityKey), { visibility: detailColumnVisibility });\n }, [entityKey, hasDetailColumns, detailColumnVisibility]);\n\n return { detailColumnVisibility, toggleDetailColumn };\n};\n"],"names":[],"mappings":";;AASA,MAAM,iCAAiC,CACrC,YACA,YACoB;AACpB,QAAM,aAA8B,CAAA;AAEpC,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,aAAa,MAAO;AAC/B,QAAI,OAAO,cAAe,YAAW,OAAO,EAAE,IAAI;AAAA,EACpD;AAEA,QAAM,YAAY,iBAAiB,UAAU,EAAE;AAC/C,MAAI,CAAC,UAAW,QAAO;AAEvB,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,aAAa,MAAO;AAC/B,QAAI,OAAO,UAAU,OAAO,EAAE,MAAM,UAAW,YAAW,OAAO,EAAE,IAAI,UAAU,OAAO,EAAE;AAAA,EAC5F;AAEA,SAAO;AACT;AAOO,MAAM,sBAAsB,CACjC,WAC+B;AAC/B,QAAM,CAAC,kBAAkB,mBAAmB,IAAI;AAAA,IAA0B,MACxE,+BAA+B,OAAO,WAAW,OAAO,OAAO;AAAA,EAAA;AAGjE,QAAM,2BAA2B,CAAC,YAAsC;AACtE,wBAAoB,CAAC,aAAc,OAAO,YAAY,aAAa,QAAQ,QAAQ,IAAI,OAAQ;AAAA,EACjG;AAEA,YAAU,MAAM;AACd,sBAAkB,OAAO,WAAW,EAAE,YAAY,kBAAkB;AAAA,EACtE,GAAG,CAAC,OAAO,WAAW,gBAAgB,CAAC;AAEvC,SAAO,EAAE,kBAAkB,yBAAA;AAC7B;AAaO,MAAM,4BAA4B,CACvC,WACA,YACqC;AACrC,QAAM,CAAC,wBAAwB,yBAAyB,IAAI;AAAA,IAA0B,MACpF,UAAU,+BAA+B,sBAAsB,SAAS,GAAG,OAAO,IAAI,CAAA;AAAA,EAAC;AAGzF,QAAM,qBAAqB,CAAC,aAAqB;AAC/C,8BAA0B,CAAC,cAAc,EAAE,GAAG,UAAU,CAAC,QAAQ,GAAG,EAAE,SAAS,QAAQ,KAAK,QAAQ;AAAA,EACtG;AAEA,QAAM,mBAAmB,CAAC,CAAC;AAE3B,YAAU,MAAM;AACd,QAAI,CAAC,iBAAkB;AACvB,sBAAkB,sBAAsB,SAAS,GAAG,EAAE,YAAY,wBAAwB;AAAA,EAC5F,GAAG,CAAC,WAAW,kBAAkB,sBAAsB,CAAC;AAExD,SAAO,EAAE,wBAAwB,mBAAA;AACnC;"}
@@ -0,0 +1,69 @@
1
+ import { IDataTableFillChange, IDataTableRow } from './types';
2
+ export type TDataTableCommitStatus = 'pending' | 'saving' | 'saved' | 'error';
3
+ export interface IDataTableCommitItem<T extends IDataTableRow> {
4
+ row: T;
5
+ /** Accumulated values for that row, keyed by column id. */
6
+ changes: Record<string, unknown>;
7
+ }
8
+ /**
9
+ * Per-row outcome of a batch save. Returning it lets an endpoint with partial
10
+ * success mark only the rows that actually failed, instead of the whole batch.
11
+ */
12
+ export interface IDataTableCommitRowResult {
13
+ rowId: string;
14
+ ok: boolean;
15
+ message?: string;
16
+ }
17
+ interface IUseDataTableCommitQueueParams<T extends IDataTableRow> {
18
+ rows: Array<T>;
19
+ /** One call per row, run with limited concurrency. The common case. */
20
+ saveRow?: (item: IDataTableCommitItem<T>) => Promise<void>;
21
+ /**
22
+ * One call for everything, for hosts that own a bulk endpoint. Wins over
23
+ * `saveRow`. Return per-row results to report partial success; returning
24
+ * nothing means every row saved.
25
+ */
26
+ saveBatch?: (items: Array<IDataTableCommitItem<T>>) => Promise<void | Array<IDataTableCommitRowResult>>;
27
+ /**
28
+ * Writes an edited value onto the row for the optimistic overlay. The default
29
+ * assigns the column id as a top-level key, which only holds when the column id
30
+ * IS the row field: a column reading `row.productReferenceId` (or a dotted path)
31
+ * must provide this, or the save succeeds and the screen never changes.
32
+ */
33
+ applyChange?: (row: T, columnId: string, value: unknown) => T;
34
+ debounceMs?: number;
35
+ concurrency?: number;
36
+ /** `false` keeps every change pending until `flush()` (an explicit save button). */
37
+ autoFlush?: boolean;
38
+ }
39
+ export interface IUseDataTableCommitQueueResult<T extends IDataTableRow> {
40
+ /** `rows` with every applied edit merged in, so the cells show what was typed. */
41
+ mergedRows: Array<T>;
42
+ onCellChange: (row: T, columnId: string, value: unknown) => void;
43
+ /** Whole fill range in one update: one render, one flush, one request per row. */
44
+ onFillCells: (changes: Array<IDataTableFillChange<T>>) => void;
45
+ flush: () => Promise<void>;
46
+ retryFailed: () => Promise<void>;
47
+ statuses: ReadonlyMap<string, TDataTableCommitStatus>;
48
+ isDirty: boolean;
49
+ isSaving: boolean;
50
+ pendingCount: number;
51
+ errorCount: number;
52
+ }
53
+ /**
54
+ * The single persistence path for inline editing. It replaces the fire-and-forget
55
+ * buffer with a queue that:
56
+ *
57
+ * - deduplicates by (row, column), so typing three times in a cell sends one value;
58
+ * - stamps every change with a sequence number, so a slow response can never mark
59
+ * a newer value as saved (and never overwrites it);
60
+ * - runs one request per row with a concurrency cap, instead of `Promise.all` over
61
+ * everything (a 40-row fill would otherwise open 40 sockets at once);
62
+ * - keeps the optimistic overlay until the cell is actually saved, so a refetch
63
+ * arriving mid-flight no longer wipes what the user typed;
64
+ * - flushes on unmount and warns on tab close, so leaving the page does not
65
+ * silently discard pending edits;
66
+ * - exposes a per-cell status the table paints (saving / saved / error).
67
+ */
68
+ export declare function useDataTableCommitQueue<T extends IDataTableRow>({ rows, saveRow, saveBatch, applyChange, debounceMs, concurrency, autoFlush, }: IUseDataTableCommitQueueParams<T>): IUseDataTableCommitQueueResult<T>;
69
+ export {};
@@ -0,0 +1,220 @@
1
+ import { useRef, useState, useCallback, useEffect, useMemo } from "react";
2
+ import { uiLogger } from "../../../helpers/uiLogger.js";
3
+ import { buildGridCellKey } from "./grid/gridTypes.js";
4
+ const DEFAULT_DEBOUNCE_MS = 800;
5
+ const DEFAULT_CONCURRENCY = 4;
6
+ const runWithConcurrency = async (items, limit, worker) => {
7
+ let nextIndex = 0;
8
+ const runners = Array.from({ length: Math.max(1, Math.min(limit, items.length)) }, async () => {
9
+ while (nextIndex < items.length) {
10
+ const item = items[nextIndex];
11
+ nextIndex += 1;
12
+ if (item !== void 0) await worker(item);
13
+ }
14
+ });
15
+ await Promise.all(runners);
16
+ };
17
+ function useDataTableCommitQueue({
18
+ rows,
19
+ saveRow,
20
+ saveBatch,
21
+ applyChange,
22
+ debounceMs = DEFAULT_DEBOUNCE_MS,
23
+ concurrency = DEFAULT_CONCURRENCY,
24
+ autoFlush = true
25
+ }) {
26
+ const overlayRef = useRef(/* @__PURE__ */ new Map());
27
+ const pendingRef = useRef(/* @__PURE__ */ new Map());
28
+ const inFlightRef = useRef(/* @__PURE__ */ new Map());
29
+ const statusesRef = useRef(/* @__PURE__ */ new Map());
30
+ const sequenceRef = useRef(0);
31
+ const timeoutRef = useRef(null);
32
+ const isSavingRef = useRef(false);
33
+ const rowsRef = useRef(rows);
34
+ rowsRef.current = rows;
35
+ const saveRowRef = useRef(saveRow);
36
+ saveRowRef.current = saveRow;
37
+ const saveBatchRef = useRef(saveBatch);
38
+ saveBatchRef.current = saveBatch;
39
+ const applyChangeRef = useRef(applyChange);
40
+ applyChangeRef.current = applyChange;
41
+ const [version, setVersion] = useState(0);
42
+ const publish = useCallback(() => setVersion((current) => current + 1), []);
43
+ const flushRef = useRef(async () => void 0);
44
+ const flush = useCallback(async () => {
45
+ if (timeoutRef.current) {
46
+ clearTimeout(timeoutRef.current);
47
+ timeoutRef.current = null;
48
+ }
49
+ if (pendingRef.current.size === 0) return;
50
+ const outgoing = Array.from(pendingRef.current.values());
51
+ pendingRef.current.clear();
52
+ const rowById = new Map(rowsRef.current.map((row) => [row.id, row]));
53
+ const itemsByRowId = /* @__PURE__ */ new Map();
54
+ outgoing.forEach((change) => {
55
+ const cellKey = buildGridCellKey(change.rowId, change.columnId);
56
+ inFlightRef.current.set(cellKey, change.sequence);
57
+ statusesRef.current.set(cellKey, "saving");
58
+ const row = rowById.get(change.rowId);
59
+ if (!row) return;
60
+ const item = itemsByRowId.get(change.rowId) ?? { row, changes: {} };
61
+ item.changes[change.columnId] = change.value;
62
+ itemsByRowId.set(change.rowId, item);
63
+ });
64
+ isSavingRef.current = true;
65
+ publish();
66
+ const settleRow = (rowChanges, succeeded) => {
67
+ rowChanges.forEach((change) => {
68
+ const cellKey = buildGridCellKey(change.rowId, change.columnId);
69
+ if (inFlightRef.current.get(cellKey) !== change.sequence) return;
70
+ inFlightRef.current.delete(cellKey);
71
+ statusesRef.current.set(cellKey, succeeded ? "saved" : "error");
72
+ if (!succeeded) pendingRef.current.set(cellKey, change);
73
+ });
74
+ };
75
+ const changesByRowId = /* @__PURE__ */ new Map();
76
+ outgoing.forEach((change) => {
77
+ const list = changesByRowId.get(change.rowId) ?? [];
78
+ list.push(change);
79
+ changesByRowId.set(change.rowId, list);
80
+ });
81
+ const items = Array.from(itemsByRowId.values());
82
+ try {
83
+ if (saveBatchRef.current) {
84
+ try {
85
+ const rowResults = await saveBatchRef.current(items);
86
+ const failedRowIds = new Set(
87
+ (Array.isArray(rowResults) ? rowResults : []).filter((result) => !result.ok).map((result) => result.rowId)
88
+ );
89
+ changesByRowId.forEach((rowChanges, rowId) => settleRow(rowChanges, !failedRowIds.has(rowId)));
90
+ } catch (error) {
91
+ uiLogger.error("DataTable batch save failed", error);
92
+ changesByRowId.forEach((rowChanges) => settleRow(rowChanges, false));
93
+ }
94
+ } else if (saveRowRef.current) {
95
+ await runWithConcurrency(items, concurrency, async (item) => {
96
+ const rowChanges = changesByRowId.get(item.row.id) ?? [];
97
+ try {
98
+ await saveRowRef.current?.(item);
99
+ settleRow(rowChanges, true);
100
+ } catch (error) {
101
+ uiLogger.error("DataTable row save failed", error);
102
+ settleRow(rowChanges, false);
103
+ }
104
+ });
105
+ }
106
+ } finally {
107
+ isSavingRef.current = false;
108
+ publish();
109
+ }
110
+ }, [concurrency, publish]);
111
+ flushRef.current = flush;
112
+ const scheduleFlush = useCallback(() => {
113
+ if (!autoFlush) return;
114
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
115
+ timeoutRef.current = setTimeout(() => {
116
+ void flushRef.current();
117
+ }, debounceMs);
118
+ }, [autoFlush, debounceMs]);
119
+ const applyChanges = useCallback(
120
+ (changes) => {
121
+ changes.forEach(({ rowId, columnId, value }) => {
122
+ sequenceRef.current += 1;
123
+ const rowOverlay = { ...overlayRef.current.get(rowId) ?? {}, [columnId]: value };
124
+ overlayRef.current.set(rowId, rowOverlay);
125
+ const cellKey = buildGridCellKey(rowId, columnId);
126
+ pendingRef.current.set(cellKey, { rowId, columnId, value, sequence: sequenceRef.current });
127
+ statusesRef.current.set(cellKey, "pending");
128
+ });
129
+ publish();
130
+ scheduleFlush();
131
+ },
132
+ [publish, scheduleFlush]
133
+ );
134
+ const onCellChange = useCallback(
135
+ (row, columnId, value) => applyChanges([{ rowId: row.id, columnId, value }]),
136
+ [applyChanges]
137
+ );
138
+ const onFillCells = useCallback(
139
+ (changes) => applyChanges(
140
+ (changes ?? []).map((change) => ({ rowId: change.row.id, columnId: change.columnId, value: change.value }))
141
+ ),
142
+ [applyChanges]
143
+ );
144
+ const retryFailed = useCallback(async () => {
145
+ const failedKeys = Array.from(statusesRef.current.entries()).filter(([, status]) => status === "error").map(([cellKey]) => cellKey);
146
+ if (failedKeys.length === 0) return;
147
+ failedKeys.forEach((cellKey) => statusesRef.current.set(cellKey, "pending"));
148
+ await flush();
149
+ }, [flush]);
150
+ const previousRowsRef = useRef(rows);
151
+ useEffect(() => {
152
+ if (previousRowsRef.current === rows) return;
153
+ previousRowsRef.current = rows;
154
+ let changed = false;
155
+ overlayRef.current.forEach((rowOverlay, rowId) => {
156
+ Object.keys(rowOverlay).forEach((columnId) => {
157
+ const cellKey = buildGridCellKey(rowId, columnId);
158
+ if (statusesRef.current.get(cellKey) !== "saved") return;
159
+ delete rowOverlay[columnId];
160
+ statusesRef.current.delete(cellKey);
161
+ changed = true;
162
+ });
163
+ if (Object.keys(rowOverlay).length === 0) overlayRef.current.delete(rowId);
164
+ });
165
+ if (changed) publish();
166
+ }, [rows, publish]);
167
+ useEffect(
168
+ () => () => {
169
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
170
+ void flushRef.current();
171
+ },
172
+ []
173
+ );
174
+ const hasUnsavedWork = pendingRef.current.size > 0 || inFlightRef.current.size > 0;
175
+ useEffect(() => {
176
+ if (!hasUnsavedWork) return void 0;
177
+ const handleBeforeUnload = (event) => {
178
+ void flushRef.current();
179
+ event.preventDefault();
180
+ event.returnValue = "";
181
+ };
182
+ window.addEventListener("beforeunload", handleBeforeUnload);
183
+ return () => window.removeEventListener("beforeunload", handleBeforeUnload);
184
+ }, [hasUnsavedWork]);
185
+ const mergedRows = useMemo(() => {
186
+ const safeRows = rows ?? [];
187
+ if (overlayRef.current.size === 0) return safeRows;
188
+ const applyToRow = applyChangeRef.current ?? ((row, columnId, value) => ({
189
+ ...row,
190
+ [columnId]: value
191
+ }));
192
+ return safeRows.map((row) => {
193
+ const rowOverlay = overlayRef.current.get(row.id);
194
+ if (!rowOverlay || Object.keys(rowOverlay).length === 0) return row;
195
+ return Object.entries(rowOverlay).reduce(
196
+ (current, [columnId, value]) => applyToRow(current, columnId, value),
197
+ row
198
+ );
199
+ });
200
+ }, [rows, version]);
201
+ const statuses = useMemo(() => new Map(statusesRef.current), [version]);
202
+ const pendingCount = pendingRef.current.size + inFlightRef.current.size;
203
+ const errorCount = Array.from(statusesRef.current.values()).filter((status) => status === "error").length;
204
+ return {
205
+ mergedRows,
206
+ onCellChange,
207
+ onFillCells,
208
+ flush,
209
+ retryFailed,
210
+ statuses,
211
+ isDirty: pendingCount > 0,
212
+ isSaving: isSavingRef.current,
213
+ pendingCount,
214
+ errorCount
215
+ };
216
+ }
217
+ export {
218
+ useDataTableCommitQueue
219
+ };
220
+ //# sourceMappingURL=useDataTableCommitQueue.js.map
@@ -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 {};