@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 @@
1
+ {"version":3,"file":"fillStrategies.js","sources":["../../../../../../src/components/UI/DataTable/grid/fill/fillStrategies.ts"],"sourcesContent":["/**\n * A fill strategy reads the dragged source values and produces the value for each\n * position beyond them. Adding a pattern (weekdays, month steps, text with a\n * trailing counter) is one entry in `GRID_FILL_STRATEGIES`, and no other file in\n * the grid changes.\n */\nexport interface IGridFillStrategy {\n id: string;\n /** Whether this strategy recognizes the source values as its own pattern. */\n detect: (values: Array<unknown>) => boolean;\n /**\n * Value for the target at `offset` (1 = the first cell after the source, in the\n * drag direction). `direction` is 1 downwards and -1 upwards.\n */\n generate: (values: Array<unknown>, offset: number, direction: 1 | -1) => unknown;\n}\n\nconst toFiniteNumber = (value: unknown): number | null => {\n if (typeof value === 'number') return Number.isFinite(value) ? value : null;\n if (typeof value !== 'string' || value.trim() === '') return null;\n\n // pt-BR decimals reach the cell as \"1,5\"; the editors keep the raw string.\n const parsed = Number(value.replace(',', '.'));\n return Number.isFinite(parsed) ? parsed : null;\n};\n\nconst toValidDate = (value: unknown): Date | null => {\n if (typeof value !== 'string' && !(value instanceof Date)) return null;\n\n const date = value instanceof Date ? value : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n};\n\nconst DAY_IN_MS = 24 * 60 * 60 * 1000;\n\n/** Repeats the source cyclically. The fallback, and what a single source cell does. */\nconst constantStrategy: IGridFillStrategy = {\n id: 'constant',\n detect: () => true,\n generate: (values, offset) => {\n if (values.length === 0) return null;\n if (values.length === 1) return values[0];\n\n const index = (offset - 1) % values.length;\n return values[index];\n },\n};\n\n/** Two or more numbers with a constant step continue the progression. */\nconst numericSeriesStrategy: IGridFillStrategy = {\n id: 'numericSeries',\n detect: (values) => {\n if (values.length < 2) return false;\n\n const numbers = values.map(toFiniteNumber);\n if (numbers.some((entry) => entry == null)) return false;\n\n const step = (numbers[1] as number) - (numbers[0] as number);\n return numbers.every((entry, index) => index === 0 || (entry as number) - (numbers[index - 1] as number) === step);\n },\n generate: (values, offset, direction) => {\n const numbers = values.map(toFiniteNumber) as Array<number>;\n const step = numbers[1] - numbers[0];\n const anchor = direction === 1 ? numbers[numbers.length - 1] : numbers[0];\n\n return anchor + step * offset * direction;\n },\n};\n\n/** Two or more dates spaced by whole days continue the sequence. */\nconst dateSeriesStrategy: IGridFillStrategy = {\n id: 'dateSeries',\n detect: (values) => {\n if (values.length < 2) return false;\n\n const dates = values.map(toValidDate);\n if (dates.some((entry) => entry == null)) return false;\n\n const step = (dates[1] as Date).getTime() - (dates[0] as Date).getTime();\n if (step === 0 || step % DAY_IN_MS !== 0) return false;\n\n return dates.every(\n (entry, index) => index === 0 || (entry as Date).getTime() - (dates[index - 1] as Date).getTime() === step,\n );\n },\n generate: (values, offset, direction) => {\n const dates = values.map(toValidDate) as Array<Date>;\n const step = dates[1].getTime() - dates[0].getTime();\n const anchor = direction === 1 ? dates[dates.length - 1] : dates[0];\n const next = new Date(anchor.getTime() + step * offset * direction);\n\n return next.toISOString();\n },\n};\n\n/** Order matters: the first strategy that recognizes the source wins. */\nexport const GRID_FILL_STRATEGIES: Array<IGridFillStrategy> = [\n dateSeriesStrategy,\n numericSeriesStrategy,\n constantStrategy,\n];\n\nexport const resolveFillStrategy = (values: Array<unknown>, preferredId?: string): IGridFillStrategy => {\n const preferred = preferredId ? GRID_FILL_STRATEGIES.find((strategy) => strategy.id === preferredId) : undefined;\n if (preferred) return preferred;\n\n return GRID_FILL_STRATEGIES.find((strategy) => strategy.detect(values)) ?? constantStrategy;\n};\n"],"names":[],"mappings":"AAiBA,MAAM,iBAAiB,CAAC,UAAkC;AACxD,MAAI,OAAO,UAAU,SAAU,QAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE,MAAI,OAAO,UAAU,YAAY,MAAM,KAAA,MAAW,GAAI,QAAO;AAG7D,QAAM,SAAS,OAAO,MAAM,QAAQ,KAAK,GAAG,CAAC;AAC7C,SAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAC5C;AAEA,MAAM,cAAc,CAAC,UAAgC;AACnD,MAAI,OAAO,UAAU,YAAY,EAAE,iBAAiB,MAAO,QAAO;AAElE,QAAM,OAAO,iBAAiB,OAAO,QAAQ,IAAI,KAAK,KAAK;AAC3D,SAAO,OAAO,MAAM,KAAK,QAAA,CAAS,IAAI,OAAO;AAC/C;AAEA,MAAM,YAAY,KAAK,KAAK,KAAK;AAGjC,MAAM,mBAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,QAAQ,MAAM;AAAA,EACd,UAAU,CAAC,QAAQ,WAAW;AAC5B,QAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAI,OAAO,WAAW,EAAG,QAAO,OAAO,CAAC;AAExC,UAAM,SAAS,SAAS,KAAK,OAAO;AACpC,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAGA,MAAM,wBAA2C;AAAA,EAC/C,IAAI;AAAA,EACJ,QAAQ,CAAC,WAAW;AAClB,QAAI,OAAO,SAAS,EAAG,QAAO;AAE9B,UAAM,UAAU,OAAO,IAAI,cAAc;AACzC,QAAI,QAAQ,KAAK,CAAC,UAAU,SAAS,IAAI,EAAG,QAAO;AAEnD,UAAM,OAAQ,QAAQ,CAAC,IAAgB,QAAQ,CAAC;AAChD,WAAO,QAAQ,MAAM,CAAC,OAAO,UAAU,UAAU,KAAM,QAAoB,QAAQ,QAAQ,CAAC,MAAiB,IAAI;AAAA,EACnH;AAAA,EACA,UAAU,CAAC,QAAQ,QAAQ,cAAc;AACvC,UAAM,UAAU,OAAO,IAAI,cAAc;AACzC,UAAM,OAAO,QAAQ,CAAC,IAAI,QAAQ,CAAC;AACnC,UAAM,SAAS,cAAc,IAAI,QAAQ,QAAQ,SAAS,CAAC,IAAI,QAAQ,CAAC;AAExE,WAAO,SAAS,OAAO,SAAS;AAAA,EAClC;AACF;AAGA,MAAM,qBAAwC;AAAA,EAC5C,IAAI;AAAA,EACJ,QAAQ,CAAC,WAAW;AAClB,QAAI,OAAO,SAAS,EAAG,QAAO;AAE9B,UAAM,QAAQ,OAAO,IAAI,WAAW;AACpC,QAAI,MAAM,KAAK,CAAC,UAAU,SAAS,IAAI,EAAG,QAAO;AAEjD,UAAM,OAAQ,MAAM,CAAC,EAAW,YAAa,MAAM,CAAC,EAAW,QAAA;AAC/D,QAAI,SAAS,KAAK,OAAO,cAAc,EAAG,QAAO;AAEjD,WAAO,MAAM;AAAA,MACX,CAAC,OAAO,UAAU,UAAU,KAAM,MAAe,QAAA,IAAa,MAAM,QAAQ,CAAC,EAAW,cAAc;AAAA,IAAA;AAAA,EAE1G;AAAA,EACA,UAAU,CAAC,QAAQ,QAAQ,cAAc;AACvC,UAAM,QAAQ,OAAO,IAAI,WAAW;AACpC,UAAM,OAAO,MAAM,CAAC,EAAE,YAAY,MAAM,CAAC,EAAE,QAAA;AAC3C,UAAM,SAAS,cAAc,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI,MAAM,CAAC;AAClE,UAAM,OAAO,IAAI,KAAK,OAAO,YAAY,OAAO,SAAS,SAAS;AAElE,WAAO,KAAK,YAAA;AAAA,EACd;AACF;AAGO,MAAM,uBAAiD;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,sBAAsB,CAAC,QAAwB,gBAA4C;AACtG,QAAM,YAAY,cAAc,qBAAqB,KAAK,CAAC,aAAa,SAAS,OAAO,WAAW,IAAI;AACvG,MAAI,UAAW,QAAO;AAEtB,SAAO,qBAAqB,KAAK,CAAC,aAAa,SAAS,OAAO,MAAM,CAAC,KAAK;AAC7E;"}
@@ -0,0 +1,69 @@
1
+ import { StoreApi } from 'zustand/vanilla';
2
+ import { IGridCellCoord, TGridSelectionMode } from './gridTypes';
3
+ export interface IGridMatrix {
4
+ rowIds: Array<string>;
5
+ columnIds: Array<string>;
6
+ rowIndexById: Map<string, number>;
7
+ columnIndexById: Map<string, number>;
8
+ }
9
+ export interface IGridSelectionRect {
10
+ rowStart: number;
11
+ rowEnd: number;
12
+ columnStart: number;
13
+ columnEnd: number;
14
+ }
15
+ export interface IGridMoveOptions {
16
+ /** Keeps the selection anchor and stretches the rectangle to the new cell. */
17
+ extend?: boolean;
18
+ /** Tab-style traversal: past the last column continues on the next row. */
19
+ wrap?: boolean;
20
+ }
21
+ export type TGridEditingOutcome = 'commit' | 'cancel';
22
+ export interface IGridState {
23
+ /**
24
+ * Enquanto falso a tabela é uma tabela comum: nenhuma célula é focável, o
25
+ * clique na linha segue sendo do host e nada do grid aparece.
26
+ */
27
+ isEditMode: boolean;
28
+ setEditMode: (isEditMode: boolean) => void;
29
+ selectionMode: TGridSelectionMode;
30
+ matrix: IGridMatrix;
31
+ activeCell: IGridCellCoord | null;
32
+ selectionAnchor: IGridCellCoord | null;
33
+ selectionRect: IGridSelectionRect | null;
34
+ editingCell: IGridCellCoord | null;
35
+ /** How the last edit ended, so the cell knows whether to restore its value. */
36
+ editingOutcome: TGridEditingOutcome | null;
37
+ /** Selection snapshot taken when the fill drag started. */
38
+ fillSourceRect: IGridSelectionRect | null;
39
+ /** Cells the running fill drag would write. Null while the pointer is inside the source. */
40
+ fillTargetRect: IGridSelectionRect | null;
41
+ /** Per-cell persistence state fed by the host's commit queue. */
42
+ cellStatuses: ReadonlyMap<string, string>;
43
+ setCellStatuses: (statuses: ReadonlyMap<string, string>) => void;
44
+ setSelectionMode: (mode: TGridSelectionMode) => void;
45
+ setMatrix: (rowIds: Array<string>, columnIds: Array<string>) => void;
46
+ setActiveCell: (coord: IGridCellCoord, options?: {
47
+ extend?: boolean;
48
+ }) => void;
49
+ /** Returns whether the active cell actually moved, so the host can let Tab leave the grid. */
50
+ moveActiveCell: (rowDelta: number, columnDelta: number, options?: IGridMoveOptions) => boolean;
51
+ moveActiveToEdge: (rowDelta: number, columnDelta: number, options?: {
52
+ extend?: boolean;
53
+ }) => void;
54
+ startEditing: (coord?: IGridCellCoord) => void;
55
+ stopEditing: (outcome?: TGridEditingOutcome) => void;
56
+ clearSelection: () => void;
57
+ startFill: () => void;
58
+ updateFillTarget: (coord: IGridCellCoord) => void;
59
+ /** Clears the drag state and hands back what should be written, if anything. */
60
+ endFill: () => IGridFillResult | null;
61
+ cancelFill: () => void;
62
+ }
63
+ export interface IGridFillResult {
64
+ sourceRect: IGridSelectionRect;
65
+ targetRect: IGridSelectionRect;
66
+ matrix: IGridMatrix;
67
+ }
68
+ export declare const createGridStore: (selectionMode?: TGridSelectionMode, initialEditMode?: boolean) => StoreApi<IGridState>;
69
+ export declare const selectGridCellState: (state: IGridState, rowId: string, columnId: string) => number;
@@ -0,0 +1,219 @@
1
+ import { createStore } from "zustand/vanilla";
2
+ import { buildGridCellKey, GRID_CELL_ACTIVE, GRID_CELL_EDITING, GRID_CELL_SELECTED, GRID_CELL_FILL_HANDLE, GRID_CELL_FILL_PREVIEW, GRID_CELL_SAVING, GRID_CELL_SAVE_ERROR, GRID_CELL_TABBABLE } from "./gridTypes.js";
3
+ const EMPTY_MATRIX = {
4
+ rowIds: [],
5
+ columnIds: [],
6
+ rowIndexById: /* @__PURE__ */ new Map(),
7
+ columnIndexById: /* @__PURE__ */ new Map()
8
+ };
9
+ const sameIds = (current, next) => current.length === next.length && current.every((id, index) => id === next[index]);
10
+ const buildIndex = (ids) => new Map(ids.map((id, index) => [id, index]));
11
+ const buildRect = (matrix, anchor, focus) => {
12
+ if (!anchor || !focus) return null;
13
+ const anchorRow = matrix.rowIndexById.get(anchor.rowId);
14
+ const anchorColumn = matrix.columnIndexById.get(anchor.columnId);
15
+ const focusRow = matrix.rowIndexById.get(focus.rowId);
16
+ const focusColumn = matrix.columnIndexById.get(focus.columnId);
17
+ if (anchorRow == null || anchorColumn == null || focusRow == null || focusColumn == null) return null;
18
+ return {
19
+ rowStart: Math.min(anchorRow, focusRow),
20
+ rowEnd: Math.max(anchorRow, focusRow),
21
+ columnStart: Math.min(anchorColumn, focusColumn),
22
+ columnEnd: Math.max(anchorColumn, focusColumn)
23
+ };
24
+ };
25
+ const coordAt = (matrix, rowIndex, columnIndex) => {
26
+ const rowId = matrix.rowIds[rowIndex];
27
+ const columnId = matrix.columnIds[columnIndex];
28
+ if (rowId == null || columnId == null) return null;
29
+ return { rowId, columnId };
30
+ };
31
+ const isSameCoord = (left, right) => left?.rowId === right?.rowId && left?.columnId === right?.columnId;
32
+ const createGridStore = (selectionMode = "cell", initialEditMode = true) => createStore((set, get) => {
33
+ const focusCoord = (coord, extend) => {
34
+ const { matrix, selectionAnchor, selectionMode: mode, editingCell } = get();
35
+ const anchor = extend && mode === "range" ? selectionAnchor ?? coord : coord;
36
+ set({
37
+ activeCell: coord,
38
+ selectionAnchor: anchor,
39
+ selectionRect: buildRect(matrix, anchor, coord),
40
+ editingCell: null,
41
+ // Moving away from an open editor keeps what was typed: only Escape discards it.
42
+ editingOutcome: editingCell ? "commit" : null
43
+ });
44
+ };
45
+ return {
46
+ isEditMode: initialEditMode,
47
+ selectionMode,
48
+ matrix: EMPTY_MATRIX,
49
+ activeCell: null,
50
+ selectionAnchor: null,
51
+ selectionRect: null,
52
+ editingCell: null,
53
+ editingOutcome: null,
54
+ fillSourceRect: null,
55
+ fillTargetRect: null,
56
+ cellStatuses: /* @__PURE__ */ new Map(),
57
+ setEditMode: (isEditMode) => {
58
+ if (get().isEditMode === isEditMode) return;
59
+ set({
60
+ isEditMode,
61
+ activeCell: null,
62
+ selectionAnchor: null,
63
+ selectionRect: null,
64
+ editingCell: null,
65
+ editingOutcome: null,
66
+ fillSourceRect: null,
67
+ fillTargetRect: null
68
+ });
69
+ },
70
+ setCellStatuses: (statuses) => {
71
+ if (get().cellStatuses === statuses) return;
72
+ set({ cellStatuses: statuses });
73
+ },
74
+ setSelectionMode: (mode) => {
75
+ if (get().selectionMode === mode) return;
76
+ set({ selectionMode: mode });
77
+ },
78
+ setMatrix: (rowIds, columnIds) => {
79
+ const { matrix, activeCell, selectionAnchor, editingCell } = get();
80
+ if (sameIds(matrix.rowIds, rowIds) && sameIds(matrix.columnIds, columnIds)) return;
81
+ const nextMatrix = {
82
+ rowIds,
83
+ columnIds,
84
+ rowIndexById: buildIndex(rowIds),
85
+ columnIndexById: buildIndex(columnIds)
86
+ };
87
+ const stillExists = (coord) => !!coord && nextMatrix.rowIndexById.has(coord.rowId) && nextMatrix.columnIndexById.has(coord.columnId);
88
+ const nextActive = stillExists(activeCell) ? activeCell : null;
89
+ const nextAnchor = stillExists(selectionAnchor) ? selectionAnchor : nextActive;
90
+ set({
91
+ matrix: nextMatrix,
92
+ activeCell: nextActive,
93
+ selectionAnchor: nextAnchor,
94
+ selectionRect: buildRect(nextMatrix, nextAnchor, nextActive),
95
+ editingCell: stillExists(editingCell) ? editingCell : null
96
+ });
97
+ },
98
+ setActiveCell: (coord, options) => {
99
+ const { activeCell, editingCell } = get();
100
+ const extend = options?.extend ?? false;
101
+ if (!extend && isSameCoord(editingCell, coord)) return;
102
+ if (!extend && isSameCoord(activeCell, coord) && !editingCell) return;
103
+ focusCoord(coord, extend);
104
+ },
105
+ moveActiveCell: (rowDelta, columnDelta, options) => {
106
+ const { matrix, activeCell } = get();
107
+ if (matrix.rowIds.length === 0 || matrix.columnIds.length === 0) return false;
108
+ if (!activeCell) {
109
+ const first = coordAt(matrix, 0, 0);
110
+ if (first) focusCoord(first, false);
111
+ return !!first;
112
+ }
113
+ const rowIndex = matrix.rowIndexById.get(activeCell.rowId);
114
+ const columnIndex = matrix.columnIndexById.get(activeCell.columnId);
115
+ if (rowIndex == null || columnIndex == null) return false;
116
+ let nextRow = rowIndex + rowDelta;
117
+ let nextColumn = columnIndex + columnDelta;
118
+ if (options?.wrap && columnDelta !== 0) {
119
+ if (nextColumn >= matrix.columnIds.length) {
120
+ nextColumn = 0;
121
+ nextRow += 1;
122
+ } else if (nextColumn < 0) {
123
+ nextColumn = matrix.columnIds.length - 1;
124
+ nextRow -= 1;
125
+ }
126
+ }
127
+ if (nextRow < 0 || nextRow >= matrix.rowIds.length) return false;
128
+ if (nextColumn < 0 || nextColumn >= matrix.columnIds.length) return false;
129
+ const next = coordAt(matrix, nextRow, nextColumn);
130
+ if (!next) return false;
131
+ focusCoord(next, options?.extend ?? false);
132
+ return true;
133
+ },
134
+ moveActiveToEdge: (rowDelta, columnDelta, options) => {
135
+ const { matrix, activeCell } = get();
136
+ if (matrix.rowIds.length === 0 || matrix.columnIds.length === 0) return;
137
+ const rowIndex = activeCell ? matrix.rowIndexById.get(activeCell.rowId) ?? 0 : 0;
138
+ const columnIndex = activeCell ? matrix.columnIndexById.get(activeCell.columnId) ?? 0 : 0;
139
+ const nextRow = rowDelta === 0 ? rowIndex : rowDelta > 0 ? matrix.rowIds.length - 1 : 0;
140
+ const nextColumn = columnDelta === 0 ? columnIndex : columnDelta > 0 ? matrix.columnIds.length - 1 : 0;
141
+ const next = coordAt(matrix, nextRow, nextColumn);
142
+ if (next) focusCoord(next, options?.extend ?? false);
143
+ },
144
+ startEditing: (coord) => {
145
+ const { activeCell, editingCell } = get();
146
+ const target = coord ?? activeCell;
147
+ if (!target || isSameCoord(editingCell, target)) return;
148
+ set({ activeCell: target, editingCell: target, editingOutcome: null });
149
+ },
150
+ stopEditing: (outcome = "commit") => {
151
+ if (!get().editingCell) return;
152
+ set({ editingCell: null, editingOutcome: outcome });
153
+ },
154
+ clearSelection: () => {
155
+ const { activeCell, matrix } = get();
156
+ set({
157
+ selectionAnchor: activeCell,
158
+ selectionRect: buildRect(matrix, activeCell, activeCell)
159
+ });
160
+ },
161
+ startFill: () => {
162
+ const { selectionRect } = get();
163
+ if (!selectionRect) return;
164
+ set({ fillSourceRect: selectionRect, fillTargetRect: null, editingCell: null });
165
+ },
166
+ updateFillTarget: (coord) => {
167
+ const { fillSourceRect, fillTargetRect, matrix } = get();
168
+ if (!fillSourceRect) return;
169
+ const rowIndex = matrix.rowIndexById.get(coord.rowId);
170
+ if (rowIndex == null) return;
171
+ let nextTarget = null;
172
+ if (rowIndex > fillSourceRect.rowEnd) {
173
+ nextTarget = { ...fillSourceRect, rowStart: fillSourceRect.rowEnd + 1, rowEnd: rowIndex };
174
+ } else if (rowIndex < fillSourceRect.rowStart) {
175
+ nextTarget = { ...fillSourceRect, rowStart: rowIndex, rowEnd: fillSourceRect.rowStart - 1 };
176
+ }
177
+ const isSameTarget = nextTarget?.rowStart === fillTargetRect?.rowStart && nextTarget?.rowEnd === fillTargetRect?.rowEnd;
178
+ if (isSameTarget) return;
179
+ set({ fillTargetRect: nextTarget });
180
+ },
181
+ endFill: () => {
182
+ const { fillSourceRect, fillTargetRect, matrix } = get();
183
+ set({ fillSourceRect: null, fillTargetRect: null });
184
+ if (!fillSourceRect || !fillTargetRect) return null;
185
+ return { sourceRect: fillSourceRect, targetRect: fillTargetRect, matrix };
186
+ },
187
+ cancelFill: () => {
188
+ if (!get().fillSourceRect) return;
189
+ set({ fillSourceRect: null, fillTargetRect: null });
190
+ }
191
+ };
192
+ });
193
+ const isInsideRect = (rect, rowIndex, columnIndex) => !!rect && rowIndex != null && columnIndex != null && rowIndex >= rect.rowStart && rowIndex <= rect.rowEnd && columnIndex >= rect.columnStart && columnIndex <= rect.columnEnd;
194
+ const selectGridCellState = (state, rowId, columnId) => {
195
+ if (!state.isEditMode) return 0;
196
+ let mask = 0;
197
+ if (isSameCoord(state.activeCell, { rowId, columnId })) mask |= GRID_CELL_ACTIVE;
198
+ if (isSameCoord(state.editingCell, { rowId, columnId })) mask |= GRID_CELL_EDITING;
199
+ const rowIndex = state.matrix.rowIndexById.get(rowId);
200
+ const columnIndex = state.matrix.columnIndexById.get(columnId);
201
+ const rect = state.selectionRect;
202
+ if (isInsideRect(rect, rowIndex, columnIndex)) mask |= GRID_CELL_SELECTED;
203
+ if (rect && rowIndex === rect.rowEnd && columnIndex === rect.columnEnd) mask |= GRID_CELL_FILL_HANDLE;
204
+ if (isInsideRect(state.fillTargetRect, rowIndex, columnIndex)) mask |= GRID_CELL_FILL_PREVIEW;
205
+ if (state.cellStatuses.size > 0) {
206
+ const status = state.cellStatuses.get(buildGridCellKey(rowId, columnId));
207
+ if (status === "saving" || status === "pending") mask |= GRID_CELL_SAVING;
208
+ if (status === "error") mask |= GRID_CELL_SAVE_ERROR;
209
+ }
210
+ if (!state.activeCell && state.matrix.rowIds[0] === rowId && state.matrix.columnIds[0] === columnId) {
211
+ mask |= GRID_CELL_TABBABLE;
212
+ }
213
+ return mask;
214
+ };
215
+ export {
216
+ createGridStore,
217
+ selectGridCellState
218
+ };
219
+ //# sourceMappingURL=gridStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridStore.js","sources":["../../../../../src/components/UI/DataTable/grid/gridStore.ts"],"sourcesContent":["import { createStore, type StoreApi } from 'zustand/vanilla';\n\nimport {\n buildGridCellKey,\n GRID_CELL_ACTIVE,\n GRID_CELL_EDITING,\n GRID_CELL_FILL_HANDLE,\n GRID_CELL_FILL_PREVIEW,\n GRID_CELL_SAVE_ERROR,\n GRID_CELL_SAVING,\n GRID_CELL_SELECTED,\n GRID_CELL_TABBABLE,\n type IGridCellCoord,\n type TGridSelectionMode,\n} from './gridTypes';\n\nexport interface IGridMatrix {\n rowIds: Array<string>;\n columnIds: Array<string>;\n rowIndexById: Map<string, number>;\n columnIndexById: Map<string, number>;\n}\n\nexport interface IGridSelectionRect {\n rowStart: number;\n rowEnd: number;\n columnStart: number;\n columnEnd: number;\n}\n\nexport interface IGridMoveOptions {\n /** Keeps the selection anchor and stretches the rectangle to the new cell. */\n extend?: boolean;\n /** Tab-style traversal: past the last column continues on the next row. */\n wrap?: boolean;\n}\n\nexport type TGridEditingOutcome = 'commit' | 'cancel';\n\nexport interface IGridState {\n /**\n * Enquanto falso a tabela é uma tabela comum: nenhuma célula é focável, o\n * clique na linha segue sendo do host e nada do grid aparece.\n */\n isEditMode: boolean;\n setEditMode: (isEditMode: boolean) => void;\n selectionMode: TGridSelectionMode;\n matrix: IGridMatrix;\n activeCell: IGridCellCoord | null;\n selectionAnchor: IGridCellCoord | null;\n selectionRect: IGridSelectionRect | null;\n editingCell: IGridCellCoord | null;\n /** How the last edit ended, so the cell knows whether to restore its value. */\n editingOutcome: TGridEditingOutcome | null;\n /** Selection snapshot taken when the fill drag started. */\n fillSourceRect: IGridSelectionRect | null;\n /** Cells the running fill drag would write. Null while the pointer is inside the source. */\n fillTargetRect: IGridSelectionRect | null;\n /** Per-cell persistence state fed by the host's commit queue. */\n cellStatuses: ReadonlyMap<string, string>;\n setCellStatuses: (statuses: ReadonlyMap<string, string>) => void;\n setSelectionMode: (mode: TGridSelectionMode) => void;\n setMatrix: (rowIds: Array<string>, columnIds: Array<string>) => void;\n setActiveCell: (coord: IGridCellCoord, options?: { extend?: boolean }) => void;\n /** Returns whether the active cell actually moved, so the host can let Tab leave the grid. */\n moveActiveCell: (rowDelta: number, columnDelta: number, options?: IGridMoveOptions) => boolean;\n moveActiveToEdge: (rowDelta: number, columnDelta: number, options?: { extend?: boolean }) => void;\n startEditing: (coord?: IGridCellCoord) => void;\n stopEditing: (outcome?: TGridEditingOutcome) => void;\n clearSelection: () => void;\n startFill: () => void;\n updateFillTarget: (coord: IGridCellCoord) => void;\n /** Clears the drag state and hands back what should be written, if anything. */\n endFill: () => IGridFillResult | null;\n cancelFill: () => void;\n}\n\nexport interface IGridFillResult {\n sourceRect: IGridSelectionRect;\n targetRect: IGridSelectionRect;\n matrix: IGridMatrix;\n}\n\nconst EMPTY_MATRIX: IGridMatrix = {\n rowIds: [],\n columnIds: [],\n rowIndexById: new Map(),\n columnIndexById: new Map(),\n};\n\nconst sameIds = (current: Array<string>, next: Array<string>): boolean =>\n current.length === next.length && current.every((id, index) => id === next[index]);\n\nconst buildIndex = (ids: Array<string>): Map<string, number> => new Map(ids.map((id, index) => [id, index]));\n\nconst buildRect = (\n matrix: IGridMatrix,\n anchor: IGridCellCoord | null,\n focus: IGridCellCoord | null,\n): IGridSelectionRect | null => {\n if (!anchor || !focus) return null;\n\n const anchorRow = matrix.rowIndexById.get(anchor.rowId);\n const anchorColumn = matrix.columnIndexById.get(anchor.columnId);\n const focusRow = matrix.rowIndexById.get(focus.rowId);\n const focusColumn = matrix.columnIndexById.get(focus.columnId);\n\n if (anchorRow == null || anchorColumn == null || focusRow == null || focusColumn == null) return null;\n\n return {\n rowStart: Math.min(anchorRow, focusRow),\n rowEnd: Math.max(anchorRow, focusRow),\n columnStart: Math.min(anchorColumn, focusColumn),\n columnEnd: Math.max(anchorColumn, focusColumn),\n };\n};\n\nconst coordAt = (matrix: IGridMatrix, rowIndex: number, columnIndex: number): IGridCellCoord | null => {\n const rowId = matrix.rowIds[rowIndex];\n const columnId = matrix.columnIds[columnIndex];\n if (rowId == null || columnId == null) return null;\n\n return { rowId, columnId };\n};\n\nconst isSameCoord = (left: IGridCellCoord | null, right: IGridCellCoord | null): boolean =>\n left?.rowId === right?.rowId && left?.columnId === right?.columnId;\n\nexport const createGridStore = (\n selectionMode: TGridSelectionMode = 'cell',\n initialEditMode = true,\n): StoreApi<IGridState> =>\n createStore<IGridState>((set, get) => {\n const focusCoord = (coord: IGridCellCoord, extend: boolean) => {\n const { matrix, selectionAnchor, selectionMode: mode, editingCell } = get();\n const anchor = extend && mode === 'range' ? (selectionAnchor ?? coord) : coord;\n\n set({\n activeCell: coord,\n selectionAnchor: anchor,\n selectionRect: buildRect(matrix, anchor, coord),\n editingCell: null,\n // Moving away from an open editor keeps what was typed: only Escape discards it.\n editingOutcome: editingCell ? 'commit' : null,\n });\n };\n\n return {\n isEditMode: initialEditMode,\n selectionMode,\n matrix: EMPTY_MATRIX,\n activeCell: null,\n selectionAnchor: null,\n selectionRect: null,\n editingCell: null,\n editingOutcome: null,\n fillSourceRect: null,\n fillTargetRect: null,\n cellStatuses: new Map<string, string>(),\n\n setEditMode: (isEditMode) => {\n if (get().isEditMode === isEditMode) return;\n\n // Sair do modo devolve a tabela ao estado neutro: nada selecionado, nada\n // em edição, nenhum arraste pela metade.\n set({\n isEditMode,\n activeCell: null,\n selectionAnchor: null,\n selectionRect: null,\n editingCell: null,\n editingOutcome: null,\n fillSourceRect: null,\n fillTargetRect: null,\n });\n },\n\n setCellStatuses: (statuses) => {\n if (get().cellStatuses === statuses) return;\n set({ cellStatuses: statuses });\n },\n\n setSelectionMode: (mode) => {\n if (get().selectionMode === mode) return;\n set({ selectionMode: mode });\n },\n\n setMatrix: (rowIds, columnIds) => {\n const { matrix, activeCell, selectionAnchor, editingCell } = get();\n if (sameIds(matrix.rowIds, rowIds) && sameIds(matrix.columnIds, columnIds)) return;\n\n const nextMatrix: IGridMatrix = {\n rowIds,\n columnIds,\n rowIndexById: buildIndex(rowIds),\n columnIndexById: buildIndex(columnIds),\n };\n\n // A row or column that left the viewport (pagination, filter, column\n // hidden) takes its active/editing state with it, so the grid never\n // points at a cell the user cannot see.\n const stillExists = (coord: IGridCellCoord | null): coord is IGridCellCoord =>\n !!coord && nextMatrix.rowIndexById.has(coord.rowId) && nextMatrix.columnIndexById.has(coord.columnId);\n\n const nextActive = stillExists(activeCell) ? activeCell : null;\n const nextAnchor = stillExists(selectionAnchor) ? selectionAnchor : nextActive;\n\n set({\n matrix: nextMatrix,\n activeCell: nextActive,\n selectionAnchor: nextAnchor,\n selectionRect: buildRect(nextMatrix, nextAnchor, nextActive),\n editingCell: stillExists(editingCell) ? editingCell : null,\n });\n },\n\n setActiveCell: (coord, options) => {\n const { activeCell, editingCell } = get();\n const extend = options?.extend ?? false;\n\n // Um clique DENTRO da célula que já está sendo editada pertence ao editor,\n // não à navegação: reposicionar o cursor aqui fecharia o editor ainda no\n // mousedown, e um select nunca chegaria a abrir a lista.\n if (!extend && isSameCoord(editingCell, coord)) return;\n if (!extend && isSameCoord(activeCell, coord) && !editingCell) return;\n\n focusCoord(coord, extend);\n },\n\n moveActiveCell: (rowDelta, columnDelta, options) => {\n const { matrix, activeCell } = get();\n if (matrix.rowIds.length === 0 || matrix.columnIds.length === 0) return false;\n\n if (!activeCell) {\n const first = coordAt(matrix, 0, 0);\n if (first) focusCoord(first, false);\n return !!first;\n }\n\n const rowIndex = matrix.rowIndexById.get(activeCell.rowId);\n const columnIndex = matrix.columnIndexById.get(activeCell.columnId);\n if (rowIndex == null || columnIndex == null) return false;\n\n let nextRow = rowIndex + rowDelta;\n let nextColumn = columnIndex + columnDelta;\n\n if (options?.wrap && columnDelta !== 0) {\n if (nextColumn >= matrix.columnIds.length) {\n nextColumn = 0;\n nextRow += 1;\n } else if (nextColumn < 0) {\n nextColumn = matrix.columnIds.length - 1;\n nextRow -= 1;\n }\n }\n\n if (nextRow < 0 || nextRow >= matrix.rowIds.length) return false;\n if (nextColumn < 0 || nextColumn >= matrix.columnIds.length) return false;\n\n const next = coordAt(matrix, nextRow, nextColumn);\n if (!next) return false;\n\n focusCoord(next, options?.extend ?? false);\n return true;\n },\n\n moveActiveToEdge: (rowDelta, columnDelta, options) => {\n const { matrix, activeCell } = get();\n if (matrix.rowIds.length === 0 || matrix.columnIds.length === 0) return;\n\n const rowIndex = activeCell ? (matrix.rowIndexById.get(activeCell.rowId) ?? 0) : 0;\n const columnIndex = activeCell ? (matrix.columnIndexById.get(activeCell.columnId) ?? 0) : 0;\n\n const nextRow = rowDelta === 0 ? rowIndex : rowDelta > 0 ? matrix.rowIds.length - 1 : 0;\n const nextColumn = columnDelta === 0 ? columnIndex : columnDelta > 0 ? matrix.columnIds.length - 1 : 0;\n\n const next = coordAt(matrix, nextRow, nextColumn);\n if (next) focusCoord(next, options?.extend ?? false);\n },\n\n startEditing: (coord) => {\n const { activeCell, editingCell } = get();\n const target = coord ?? activeCell;\n if (!target || isSameCoord(editingCell, target)) return;\n\n set({ activeCell: target, editingCell: target, editingOutcome: null });\n },\n\n stopEditing: (outcome = 'commit') => {\n if (!get().editingCell) return;\n set({ editingCell: null, editingOutcome: outcome });\n },\n\n clearSelection: () => {\n const { activeCell, matrix } = get();\n set({\n selectionAnchor: activeCell,\n selectionRect: buildRect(matrix, activeCell, activeCell),\n });\n },\n\n startFill: () => {\n const { selectionRect } = get();\n if (!selectionRect) return;\n set({ fillSourceRect: selectionRect, fillTargetRect: null, editingCell: null });\n },\n\n updateFillTarget: (coord) => {\n const { fillSourceRect, fillTargetRect, matrix } = get();\n if (!fillSourceRect) return;\n\n const rowIndex = matrix.rowIndexById.get(coord.rowId);\n if (rowIndex == null) return;\n\n // Vertical only for now. The rect shape is already 2D, so a horizontal\n // drag is a second branch here and nothing else in the layer changes.\n let nextTarget: IGridSelectionRect | null = null;\n if (rowIndex > fillSourceRect.rowEnd) {\n nextTarget = { ...fillSourceRect, rowStart: fillSourceRect.rowEnd + 1, rowEnd: rowIndex };\n } else if (rowIndex < fillSourceRect.rowStart) {\n nextTarget = { ...fillSourceRect, rowStart: rowIndex, rowEnd: fillSourceRect.rowStart - 1 };\n }\n\n const isSameTarget =\n nextTarget?.rowStart === fillTargetRect?.rowStart && nextTarget?.rowEnd === fillTargetRect?.rowEnd;\n if (isSameTarget) return;\n\n set({ fillTargetRect: nextTarget });\n },\n\n endFill: () => {\n const { fillSourceRect, fillTargetRect, matrix } = get();\n set({ fillSourceRect: null, fillTargetRect: null });\n if (!fillSourceRect || !fillTargetRect) return null;\n\n return { sourceRect: fillSourceRect, targetRect: fillTargetRect, matrix };\n },\n\n cancelFill: () => {\n if (!get().fillSourceRect) return;\n set({ fillSourceRect: null, fillTargetRect: null });\n },\n };\n });\n\n/**\n * Bitmask of what this cell currently is. A primitive keeps the per-cell\n * subscription cheap: `useSyncExternalStore` compares it by value, so a cell\n * only re-renders when its own state actually changes.\n */\nconst isInsideRect = (rect: IGridSelectionRect | null, rowIndex?: number, columnIndex?: number): boolean =>\n !!rect &&\n rowIndex != null &&\n columnIndex != null &&\n rowIndex >= rect.rowStart &&\n rowIndex <= rect.rowEnd &&\n columnIndex >= rect.columnStart &&\n columnIndex <= rect.columnEnd;\n\nexport const selectGridCellState = (state: IGridState, rowId: string, columnId: string): number => {\n if (!state.isEditMode) return 0;\n\n let mask = 0;\n\n if (isSameCoord(state.activeCell, { rowId, columnId })) mask |= GRID_CELL_ACTIVE;\n if (isSameCoord(state.editingCell, { rowId, columnId })) mask |= GRID_CELL_EDITING;\n\n const rowIndex = state.matrix.rowIndexById.get(rowId);\n const columnIndex = state.matrix.columnIndexById.get(columnId);\n\n const rect = state.selectionRect;\n if (isInsideRect(rect, rowIndex, columnIndex)) mask |= GRID_CELL_SELECTED;\n if (rect && rowIndex === rect.rowEnd && columnIndex === rect.columnEnd) mask |= GRID_CELL_FILL_HANDLE;\n if (isInsideRect(state.fillTargetRect, rowIndex, columnIndex)) mask |= GRID_CELL_FILL_PREVIEW;\n\n if (state.cellStatuses.size > 0) {\n const status = state.cellStatuses.get(buildGridCellKey(rowId, columnId));\n if (status === 'saving' || status === 'pending') mask |= GRID_CELL_SAVING;\n if (status === 'error') mask |= GRID_CELL_SAVE_ERROR;\n }\n\n // Roving tabindex needs an entry point before the first interaction: without\n // an active cell the top-left cell is the one Tab reaches from outside.\n if (!state.activeCell && state.matrix.rowIds[0] === rowId && state.matrix.columnIds[0] === columnId) {\n mask |= GRID_CELL_TABBABLE;\n }\n\n return mask;\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Spreadsheet layer types. The grid coordinates are always the TanStack row id
3
+ * (unique across nesting levels) plus the column id, so navigation never depends
4
+ * on DOM order and stays correct with hidden, reordered and resized columns.
5
+ */
6
+ export interface IGridCellCoord {
7
+ rowId: string;
8
+ columnId: string;
9
+ }
10
+ export type TGridSelectionMode = 'cell' | 'range';
11
+ /**
12
+ * Quando a camada de planilha fica ativa:
13
+ * - `toggle`: o usuário liga pelo botão do toolbar. É o padrão nas tabelas que
14
+ * navegam no clique da linha, onde selecionar uma célula e abrir o registro
15
+ * seriam o mesmo gesto.
16
+ * - `always`: ativa desde a montagem, para tabelas cuja razão de existir é editar.
17
+ */
18
+ export type TGridEditModeBehavior = 'toggle' | 'always';
19
+ /**
20
+ * The part of the spreadsheet config the grid layer itself understands. The
21
+ * row-typed part (fill handlers) lives in `types.ts`, which extends this.
22
+ */
23
+ export interface IGridNavigationConfig {
24
+ /** Arrow/Tab/Enter navigation over an active cell. Defaults to `true`. */
25
+ navigation?: boolean;
26
+ /** `cell` keeps one cell selected; `range` enables Shift+Arrow / Shift+Click rectangles. */
27
+ selection?: TGridSelectionMode;
28
+ /** Invoked by Ctrl/Cmd+S while the grid has focus. */
29
+ onSave?: () => void;
30
+ /** Defaults to `toggle` when the table has `onRowClick`, `always` otherwise. */
31
+ mode?: TGridEditModeBehavior;
32
+ }
33
+ export declare const GRID_CELL_ACTIVE = 1;
34
+ export declare const GRID_CELL_SELECTED = 2;
35
+ export declare const GRID_CELL_EDITING = 4;
36
+ export declare const GRID_CELL_FILL_PREVIEW = 8;
37
+ /** The cell that carries `tabIndex=0` while no cell is active yet. */
38
+ export declare const GRID_CELL_TABBABLE = 16;
39
+ /** Bottom-right corner of the selection: the cell that renders the fill handle. */
40
+ export declare const GRID_CELL_FILL_HANDLE = 32;
41
+ export declare const GRID_CELL_SAVING = 64;
42
+ export declare const GRID_CELL_SAVE_ERROR = 128;
43
+ export declare const buildGridCellKey: (rowId: string, columnId: string) => string;
44
+ /** DOM hook used by the fill drag to resolve which cell is under the pointer. */
45
+ export declare const GRID_CELL_DATA_ATTR = "data-grid-cell";
46
+ export declare const GRID_ROW_DATA_ATTR = "data-grid-row";
47
+ export declare const GRID_COLUMN_DATA_ATTR = "data-grid-column";
@@ -0,0 +1,27 @@
1
+ const GRID_CELL_ACTIVE = 1;
2
+ const GRID_CELL_SELECTED = 2;
3
+ const GRID_CELL_EDITING = 4;
4
+ const GRID_CELL_FILL_PREVIEW = 8;
5
+ const GRID_CELL_TABBABLE = 16;
6
+ const GRID_CELL_FILL_HANDLE = 32;
7
+ const GRID_CELL_SAVING = 64;
8
+ const GRID_CELL_SAVE_ERROR = 128;
9
+ const buildGridCellKey = (rowId, columnId) => `${rowId}::${columnId}`;
10
+ const GRID_CELL_DATA_ATTR = "data-grid-cell";
11
+ const GRID_ROW_DATA_ATTR = "data-grid-row";
12
+ const GRID_COLUMN_DATA_ATTR = "data-grid-column";
13
+ export {
14
+ GRID_CELL_ACTIVE,
15
+ GRID_CELL_DATA_ATTR,
16
+ GRID_CELL_EDITING,
17
+ GRID_CELL_FILL_HANDLE,
18
+ GRID_CELL_FILL_PREVIEW,
19
+ GRID_CELL_SAVE_ERROR,
20
+ GRID_CELL_SAVING,
21
+ GRID_CELL_SELECTED,
22
+ GRID_CELL_TABBABLE,
23
+ GRID_COLUMN_DATA_ATTR,
24
+ GRID_ROW_DATA_ATTR,
25
+ buildGridCellKey
26
+ };
27
+ //# sourceMappingURL=gridTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gridTypes.js","sources":["../../../../../src/components/UI/DataTable/grid/gridTypes.ts"],"sourcesContent":["/**\n * Spreadsheet layer types. The grid coordinates are always the TanStack row id\n * (unique across nesting levels) plus the column id, so navigation never depends\n * on DOM order and stays correct with hidden, reordered and resized columns.\n */\nexport interface IGridCellCoord {\n rowId: string;\n columnId: string;\n}\n\nexport type TGridSelectionMode = 'cell' | 'range';\n\n/**\n * Quando a camada de planilha fica ativa:\n * - `toggle`: o usuário liga pelo botão do toolbar. É o padrão nas tabelas que\n * navegam no clique da linha, onde selecionar uma célula e abrir o registro\n * seriam o mesmo gesto.\n * - `always`: ativa desde a montagem, para tabelas cuja razão de existir é editar.\n */\nexport type TGridEditModeBehavior = 'toggle' | 'always';\n\n/**\n * The part of the spreadsheet config the grid layer itself understands. The\n * row-typed part (fill handlers) lives in `types.ts`, which extends this.\n */\nexport interface IGridNavigationConfig {\n /** Arrow/Tab/Enter navigation over an active cell. Defaults to `true`. */\n navigation?: boolean;\n /** `cell` keeps one cell selected; `range` enables Shift+Arrow / Shift+Click rectangles. */\n selection?: TGridSelectionMode;\n /** Invoked by Ctrl/Cmd+S while the grid has focus. */\n onSave?: () => void;\n /** Defaults to `toggle` when the table has `onRowClick`, `always` otherwise. */\n mode?: TGridEditModeBehavior;\n}\n\nexport const GRID_CELL_ACTIVE = 1;\nexport const GRID_CELL_SELECTED = 2;\nexport const GRID_CELL_EDITING = 4;\nexport const GRID_CELL_FILL_PREVIEW = 8;\n/** The cell that carries `tabIndex=0` while no cell is active yet. */\nexport const GRID_CELL_TABBABLE = 16;\n/** Bottom-right corner of the selection: the cell that renders the fill handle. */\nexport const GRID_CELL_FILL_HANDLE = 32;\nexport const GRID_CELL_SAVING = 64;\nexport const GRID_CELL_SAVE_ERROR = 128;\n\nexport const buildGridCellKey = (rowId: string, columnId: string): string => `${rowId}::${columnId}`;\n\n/** DOM hook used by the fill drag to resolve which cell is under the pointer. */\nexport const GRID_CELL_DATA_ATTR = 'data-grid-cell';\nexport const GRID_ROW_DATA_ATTR = 'data-grid-row';\nexport const GRID_COLUMN_DATA_ATTR = 'data-grid-column';\n"],"names":[],"mappings":"AAoCO,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAC3B,MAAM,oBAAoB;AAC1B,MAAM,yBAAyB;AAE/B,MAAM,qBAAqB;AAE3B,MAAM,wBAAwB;AAC9B,MAAM,mBAAmB;AACzB,MAAM,uBAAuB;AAE7B,MAAM,mBAAmB,CAAC,OAAe,aAA6B,GAAG,KAAK,KAAK,QAAQ;AAG3F,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,wBAAwB;"}
@@ -0,0 +1,18 @@
1
+ import { Row } from '@tanstack/react-table';
2
+ import { IDataTableColumnConfig, IDataTableRow, IDataTableSpreadsheetConfig } from '../types';
3
+ import { IGridFillResult } from './gridStore';
4
+ interface IUseGridFillApplyParams<T extends IDataTableRow> {
5
+ visibleRows: Array<Row<T>>;
6
+ columnConfigById: Map<string, IDataTableColumnConfig<T>>;
7
+ spreadsheet?: IDataTableSpreadsheetConfig<T>;
8
+ onCellChange?: (row: T, columnId: string, value: unknown) => void;
9
+ }
10
+ /**
11
+ * Turns a finished fill drag into cell changes: reads the source values per
12
+ * column, asks the matching strategy for each target value, and hands the whole
13
+ * batch to the host in ONE call (`fill.onFillCells`) so a drag over 40 rows is a
14
+ * single state update instead of 40. Without a batch handler it falls back to the
15
+ * per-cell `editing.onCellChange`.
16
+ */
17
+ export declare const useGridFillApply: <T extends IDataTableRow>({ visibleRows, columnConfigById, spreadsheet, onCellChange, }: IUseGridFillApplyParams<T>) => (result: IGridFillResult) => void;
18
+ export {};
@@ -0,0 +1,74 @@
1
+ import { useRef, useCallback } from "react";
2
+ import { uiLogger } from "../../../../helpers/uiLogger.js";
3
+ import { resolveFillStrategy } from "./fill/fillStrategies.js";
4
+ const DEFAULT_MAX_FILL_CELLS = 500;
5
+ const useGridFillApply = ({
6
+ visibleRows,
7
+ columnConfigById,
8
+ spreadsheet,
9
+ onCellChange
10
+ }) => {
11
+ const visibleRowsRef = useRef(visibleRows);
12
+ visibleRowsRef.current = visibleRows;
13
+ const columnConfigByIdRef = useRef(columnConfigById);
14
+ columnConfigByIdRef.current = columnConfigById;
15
+ const spreadsheetRef = useRef(spreadsheet);
16
+ spreadsheetRef.current = spreadsheet;
17
+ const onCellChangeRef = useRef(onCellChange);
18
+ onCellChangeRef.current = onCellChange;
19
+ return useCallback((result) => {
20
+ const fillConfig = spreadsheetRef.current?.fill;
21
+ if (!fillConfig) return;
22
+ const { sourceRect, targetRect, matrix } = result;
23
+ const rowsById = new Map(visibleRowsRef.current.map((row) => [row.id, row]));
24
+ const maxCells = fillConfig.maxCells ?? DEFAULT_MAX_FILL_CELLS;
25
+ const targetRowCount = targetRect.rowEnd - targetRect.rowStart + 1;
26
+ const targetColumnCount = targetRect.columnEnd - targetRect.columnStart + 1;
27
+ if (targetRowCount * targetColumnCount > maxCells) {
28
+ uiLogger.warn("DataTable fill exceeded maxCells and was ignored", {
29
+ targetRowCount,
30
+ targetColumnCount,
31
+ maxCells
32
+ });
33
+ return;
34
+ }
35
+ const fillsDownwards = targetRect.rowStart > sourceRect.rowEnd;
36
+ const changes = [];
37
+ for (let columnIndex = targetRect.columnStart; columnIndex <= targetRect.columnEnd; columnIndex += 1) {
38
+ const columnId = matrix.columnIds[columnIndex];
39
+ const columnConfig = columnId ? columnConfigByIdRef.current.get(columnId) : void 0;
40
+ const editable = columnConfig?.editable;
41
+ if (!columnId || !editable || editable.fillable === false) continue;
42
+ const sourceValues = [];
43
+ for (let rowIndex = sourceRect.rowStart; rowIndex <= sourceRect.rowEnd; rowIndex += 1) {
44
+ const sourceRow = rowsById.get(matrix.rowIds[rowIndex] ?? "");
45
+ if (sourceRow) sourceValues.push(editable.getValue(sourceRow.original));
46
+ }
47
+ if (sourceValues.length === 0) continue;
48
+ const strategy = resolveFillStrategy(sourceValues, editable.fillStrategy);
49
+ const orderedRowIndexes = [];
50
+ for (let rowIndex = targetRect.rowStart; rowIndex <= targetRect.rowEnd; rowIndex += 1) {
51
+ orderedRowIndexes.push(rowIndex);
52
+ }
53
+ if (!fillsDownwards) orderedRowIndexes.reverse();
54
+ orderedRowIndexes.forEach((rowIndex, offset) => {
55
+ const targetRow = rowsById.get(matrix.rowIds[rowIndex] ?? "");
56
+ if (!targetRow) return;
57
+ if (editable.disabled?.(targetRow.original)) return;
58
+ const value = strategy.generate(sourceValues, offset + 1, fillsDownwards ? 1 : -1);
59
+ if (editable.validate?.(value, targetRow.original)) return;
60
+ changes.push({ row: targetRow.original, columnId, value });
61
+ });
62
+ }
63
+ if (changes.length === 0) return;
64
+ if (fillConfig.onFillCells) {
65
+ fillConfig.onFillCells(changes);
66
+ return;
67
+ }
68
+ changes.forEach((change) => onCellChangeRef.current?.(change.row, change.columnId, change.value));
69
+ }, []);
70
+ };
71
+ export {
72
+ useGridFillApply
73
+ };
74
+ //# sourceMappingURL=useGridFillApply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGridFillApply.js","sources":["../../../../../src/components/UI/DataTable/grid/useGridFillApply.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nimport { uiLogger } from '@/helpers/uiLogger';\nimport { type Row } from '@tanstack/react-table';\n\nimport type {\n IDataTableColumnConfig,\n IDataTableFillChange,\n IDataTableRow,\n IDataTableSpreadsheetConfig,\n} from '../types';\n\nimport { resolveFillStrategy } from './fill/fillStrategies';\nimport { type IGridFillResult } from './gridStore';\n\nconst DEFAULT_MAX_FILL_CELLS = 500;\n\ninterface IUseGridFillApplyParams<T extends IDataTableRow> {\n visibleRows: Array<Row<T>>;\n columnConfigById: Map<string, IDataTableColumnConfig<T>>;\n spreadsheet?: IDataTableSpreadsheetConfig<T>;\n onCellChange?: (row: T, columnId: string, value: unknown) => void;\n}\n\n/**\n * Turns a finished fill drag into cell changes: reads the source values per\n * column, asks the matching strategy for each target value, and hands the whole\n * batch to the host in ONE call (`fill.onFillCells`) so a drag over 40 rows is a\n * single state update instead of 40. Without a batch handler it falls back to the\n * per-cell `editing.onCellChange`.\n */\nexport const useGridFillApply = <T extends IDataTableRow>({\n visibleRows,\n columnConfigById,\n spreadsheet,\n onCellChange,\n}: IUseGridFillApplyParams<T>) => {\n const visibleRowsRef = useRef(visibleRows);\n visibleRowsRef.current = visibleRows;\n const columnConfigByIdRef = useRef(columnConfigById);\n columnConfigByIdRef.current = columnConfigById;\n const spreadsheetRef = useRef(spreadsheet);\n spreadsheetRef.current = spreadsheet;\n const onCellChangeRef = useRef(onCellChange);\n onCellChangeRef.current = onCellChange;\n\n return useCallback((result: IGridFillResult) => {\n const fillConfig = spreadsheetRef.current?.fill;\n if (!fillConfig) return;\n\n const { sourceRect, targetRect, matrix } = result;\n const rowsById = new Map(visibleRowsRef.current.map((row) => [row.id, row]));\n\n const maxCells = fillConfig.maxCells ?? DEFAULT_MAX_FILL_CELLS;\n const targetRowCount = targetRect.rowEnd - targetRect.rowStart + 1;\n const targetColumnCount = targetRect.columnEnd - targetRect.columnStart + 1;\n if (targetRowCount * targetColumnCount > maxCells) {\n uiLogger.warn('DataTable fill exceeded maxCells and was ignored', {\n targetRowCount,\n targetColumnCount,\n maxCells,\n });\n return;\n }\n\n const fillsDownwards = targetRect.rowStart > sourceRect.rowEnd;\n const changes: Array<IDataTableFillChange<T>> = [];\n\n for (let columnIndex = targetRect.columnStart; columnIndex <= targetRect.columnEnd; columnIndex += 1) {\n const columnId = matrix.columnIds[columnIndex];\n const columnConfig = columnId ? columnConfigByIdRef.current.get(columnId) : undefined;\n const editable = columnConfig?.editable;\n if (!columnId || !editable || editable.fillable === false) continue;\n\n const sourceValues: Array<unknown> = [];\n for (let rowIndex = sourceRect.rowStart; rowIndex <= sourceRect.rowEnd; rowIndex += 1) {\n const sourceRow = rowsById.get(matrix.rowIds[rowIndex] ?? '');\n if (sourceRow) sourceValues.push(editable.getValue(sourceRow.original));\n }\n if (sourceValues.length === 0) continue;\n\n const strategy = resolveFillStrategy(sourceValues, editable.fillStrategy);\n // Upwards, the cell nearest the source is the LAST one in the target rect,\n // so the offset counts away from the source in both directions.\n const orderedRowIndexes = [];\n for (let rowIndex = targetRect.rowStart; rowIndex <= targetRect.rowEnd; rowIndex += 1) {\n orderedRowIndexes.push(rowIndex);\n }\n if (!fillsDownwards) orderedRowIndexes.reverse();\n\n orderedRowIndexes.forEach((rowIndex, offset) => {\n const targetRow = rowsById.get(matrix.rowIds[rowIndex] ?? '');\n if (!targetRow) return;\n if (editable.disabled?.(targetRow.original)) return;\n\n const value = strategy.generate(sourceValues, offset + 1, fillsDownwards ? 1 : -1);\n if (editable.validate?.(value, targetRow.original)) return;\n\n changes.push({ row: targetRow.original, columnId, value });\n });\n }\n\n if (changes.length === 0) return;\n\n if (fillConfig.onFillCells) {\n fillConfig.onFillCells(changes);\n return;\n }\n\n changes.forEach((change) => onCellChangeRef.current?.(change.row, change.columnId, change.value));\n }, []);\n};\n"],"names":[],"mappings":";;;AAeA,MAAM,yBAAyB;AAgBxB,MAAM,mBAAmB,CAA0B;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAkC;AAChC,QAAM,iBAAiB,OAAO,WAAW;AACzC,iBAAe,UAAU;AACzB,QAAM,sBAAsB,OAAO,gBAAgB;AACnD,sBAAoB,UAAU;AAC9B,QAAM,iBAAiB,OAAO,WAAW;AACzC,iBAAe,UAAU;AACzB,QAAM,kBAAkB,OAAO,YAAY;AAC3C,kBAAgB,UAAU;AAE1B,SAAO,YAAY,CAAC,WAA4B;AAC9C,UAAM,aAAa,eAAe,SAAS;AAC3C,QAAI,CAAC,WAAY;AAEjB,UAAM,EAAE,YAAY,YAAY,OAAA,IAAW;AAC3C,UAAM,WAAW,IAAI,IAAI,eAAe,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;AAE3E,UAAM,WAAW,WAAW,YAAY;AACxC,UAAM,iBAAiB,WAAW,SAAS,WAAW,WAAW;AACjE,UAAM,oBAAoB,WAAW,YAAY,WAAW,cAAc;AAC1E,QAAI,iBAAiB,oBAAoB,UAAU;AACjD,eAAS,KAAK,oDAAoD;AAAA,QAChE;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AACD;AAAA,IACF;AAEA,UAAM,iBAAiB,WAAW,WAAW,WAAW;AACxD,UAAM,UAA0C,CAAA;AAEhD,aAAS,cAAc,WAAW,aAAa,eAAe,WAAW,WAAW,eAAe,GAAG;AACpG,YAAM,WAAW,OAAO,UAAU,WAAW;AAC7C,YAAM,eAAe,WAAW,oBAAoB,QAAQ,IAAI,QAAQ,IAAI;AAC5E,YAAM,WAAW,cAAc;AAC/B,UAAI,CAAC,YAAY,CAAC,YAAY,SAAS,aAAa,MAAO;AAE3D,YAAM,eAA+B,CAAA;AACrC,eAAS,WAAW,WAAW,UAAU,YAAY,WAAW,QAAQ,YAAY,GAAG;AACrF,cAAM,YAAY,SAAS,IAAI,OAAO,OAAO,QAAQ,KAAK,EAAE;AAC5D,YAAI,UAAW,cAAa,KAAK,SAAS,SAAS,UAAU,QAAQ,CAAC;AAAA,MACxE;AACA,UAAI,aAAa,WAAW,EAAG;AAE/B,YAAM,WAAW,oBAAoB,cAAc,SAAS,YAAY;AAGxE,YAAM,oBAAoB,CAAA;AAC1B,eAAS,WAAW,WAAW,UAAU,YAAY,WAAW,QAAQ,YAAY,GAAG;AACrF,0BAAkB,KAAK,QAAQ;AAAA,MACjC;AACA,UAAI,CAAC,eAAgB,mBAAkB,QAAA;AAEvC,wBAAkB,QAAQ,CAAC,UAAU,WAAW;AAC9C,cAAM,YAAY,SAAS,IAAI,OAAO,OAAO,QAAQ,KAAK,EAAE;AAC5D,YAAI,CAAC,UAAW;AAChB,YAAI,SAAS,WAAW,UAAU,QAAQ,EAAG;AAE7C,cAAM,QAAQ,SAAS,SAAS,cAAc,SAAS,GAAG,iBAAiB,IAAI,EAAE;AACjF,YAAI,SAAS,WAAW,OAAO,UAAU,QAAQ,EAAG;AAEpD,gBAAQ,KAAK,EAAE,KAAK,UAAU,UAAU,UAAU,OAAO;AAAA,MAC3D,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,WAAW,EAAG;AAE1B,QAAI,WAAW,aAAa;AAC1B,iBAAW,YAAY,OAAO;AAC9B;AAAA,IACF;AAEA,YAAQ,QAAQ,CAAC,WAAW,gBAAgB,UAAU,OAAO,KAAK,OAAO,UAAU,OAAO,KAAK,CAAC;AAAA,EAClG,GAAG,CAAA,CAAE;AACP;"}
@@ -0,0 +1,27 @@
1
+ import { StoreApi } from 'zustand/vanilla';
2
+ import { IGridState } from './gridStore';
3
+ import { IGridNavigationConfig } from './gridTypes';
4
+ /**
5
+ * One grid store per table instance, created only when the table opts into the
6
+ * spreadsheet layer. Returning `null` otherwise keeps every read-only table free
7
+ * of the store, the provider and the per-cell subscriptions.
8
+ */
9
+ interface IUseGridInstanceParams {
10
+ spreadsheet?: IGridNavigationConfig;
11
+ /** `false` mounts the store dormant, waiting for the toolbar toggle. */
12
+ startsInEditMode: boolean;
13
+ enabled: boolean;
14
+ }
15
+ export declare const useGridInstance: ({ spreadsheet, startsInEditMode, enabled, }: IUseGridInstanceParams) => StoreApi<IGridState> | null;
16
+ /**
17
+ * Subscrição booleana ao modo de edição. Fica fora do caminho quente: só o
18
+ * cabeçalho da tabela e o corpo reagem, e apenas quando o modo troca.
19
+ */
20
+ export declare const useGridEditMode: (store: StoreApi<IGridState> | null) => boolean;
21
+ /**
22
+ * Feeds the store the visible matrix (TanStack row ids × navigable column ids).
23
+ * The join keys are the dependency so the effect runs when the matrix actually
24
+ * changes, not on every render of the table.
25
+ */
26
+ export declare const useGridMatrixSync: (store: StoreApi<IGridState> | null, rowIds: Array<string>, columnIds: Array<string>) => void;
27
+ export {};
@@ -0,0 +1,41 @@
1
+ import { useSyncExternalStore, useCallback, useRef, useEffect, useMemo } from "react";
2
+ import { createGridStore } from "./gridStore.js";
3
+ const useGridInstance = ({
4
+ spreadsheet,
5
+ startsInEditMode,
6
+ enabled
7
+ }) => {
8
+ const storeRef = useRef(null);
9
+ const isEnabled = enabled && spreadsheet?.navigation !== false;
10
+ if (isEnabled && !storeRef.current) {
11
+ storeRef.current = createGridStore(spreadsheet?.selection ?? "cell", startsInEditMode);
12
+ }
13
+ const store = isEnabled ? storeRef.current : null;
14
+ const selectionMode = spreadsheet?.selection ?? "cell";
15
+ useEffect(() => {
16
+ store?.getState().setSelectionMode(selectionMode);
17
+ }, [store, selectionMode]);
18
+ return store;
19
+ };
20
+ const useGridEditMode = (store) => useSyncExternalStore(
21
+ useCallback((onStoreChange) => store ? store.subscribe(onStoreChange) : () => void 0, [store]),
22
+ () => store?.getState().isEditMode ?? false,
23
+ () => false
24
+ );
25
+ const useGridMatrixSync = (store, rowIds, columnIds) => {
26
+ const rowIdsRef = useRef(rowIds);
27
+ rowIdsRef.current = rowIds;
28
+ const columnIdsRef = useRef(columnIds);
29
+ columnIdsRef.current = columnIds;
30
+ const rowsKey = useMemo(() => rowIds.join("\0"), [rowIds]);
31
+ const columnsKey = useMemo(() => columnIds.join("\0"), [columnIds]);
32
+ useEffect(() => {
33
+ store?.getState().setMatrix(rowIdsRef.current, columnIdsRef.current);
34
+ }, [store, rowsKey, columnsKey]);
35
+ };
36
+ export {
37
+ useGridEditMode,
38
+ useGridInstance,
39
+ useGridMatrixSync
40
+ };
41
+ //# sourceMappingURL=useGridInstance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGridInstance.js","sources":["../../../../../src/components/UI/DataTable/grid/useGridInstance.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from 'react';\nimport { type StoreApi } from 'zustand/vanilla';\n\nimport { createGridStore, type IGridState } from './gridStore';\nimport { type IGridNavigationConfig } from './gridTypes';\n\n/**\n * One grid store per table instance, created only when the table opts into the\n * spreadsheet layer. Returning `null` otherwise keeps every read-only table free\n * of the store, the provider and the per-cell subscriptions.\n */\ninterface IUseGridInstanceParams {\n spreadsheet?: IGridNavigationConfig;\n /** `false` mounts the store dormant, waiting for the toolbar toggle. */\n startsInEditMode: boolean;\n enabled: boolean;\n}\n\nexport const useGridInstance = ({\n spreadsheet,\n startsInEditMode,\n enabled,\n}: IUseGridInstanceParams): StoreApi<IGridState> | null => {\n const storeRef = useRef<StoreApi<IGridState> | null>(null);\n const isEnabled = enabled && spreadsheet?.navigation !== false;\n\n if (isEnabled && !storeRef.current) {\n storeRef.current = createGridStore(spreadsheet?.selection ?? 'cell', startsInEditMode);\n }\n\n const store = isEnabled ? storeRef.current : null;\n const selectionMode = spreadsheet?.selection ?? 'cell';\n\n useEffect(() => {\n store?.getState().setSelectionMode(selectionMode);\n }, [store, selectionMode]);\n\n return store;\n};\n\n/**\n * Subscrição booleana ao modo de edição. Fica fora do caminho quente: só o\n * cabeçalho da tabela e o corpo reagem, e apenas quando o modo troca.\n */\nexport const useGridEditMode = (store: StoreApi<IGridState> | null): boolean =>\n useSyncExternalStore(\n useCallback((onStoreChange: () => void) => (store ? store.subscribe(onStoreChange) : () => undefined), [store]),\n () => store?.getState().isEditMode ?? false,\n () => false,\n );\n\n/**\n * Feeds the store the visible matrix (TanStack row ids × navigable column ids).\n * The join keys are the dependency so the effect runs when the matrix actually\n * changes, not on every render of the table.\n */\nexport const useGridMatrixSync = (\n store: StoreApi<IGridState> | null,\n rowIds: Array<string>,\n columnIds: Array<string>,\n): void => {\n const rowIdsRef = useRef(rowIds);\n rowIdsRef.current = rowIds;\n const columnIdsRef = useRef(columnIds);\n columnIdsRef.current = columnIds;\n\n const rowsKey = useMemo(() => rowIds.join('\u0000'), [rowIds]);\n const columnsKey = useMemo(() => columnIds.join('\u0000'), [columnIds]);\n\n useEffect(() => {\n store?.getState().setMatrix(rowIdsRef.current, columnIdsRef.current);\n }, [store, rowsKey, columnsKey]);\n};\n"],"names":[],"mappings":";;AAkBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,MAA2D;AACzD,QAAM,WAAW,OAAoC,IAAI;AACzD,QAAM,YAAY,WAAW,aAAa,eAAe;AAEzD,MAAI,aAAa,CAAC,SAAS,SAAS;AAClC,aAAS,UAAU,gBAAgB,aAAa,aAAa,QAAQ,gBAAgB;AAAA,EACvF;AAEA,QAAM,QAAQ,YAAY,SAAS,UAAU;AAC7C,QAAM,gBAAgB,aAAa,aAAa;AAEhD,YAAU,MAAM;AACd,WAAO,SAAA,EAAW,iBAAiB,aAAa;AAAA,EAClD,GAAG,CAAC,OAAO,aAAa,CAAC;AAEzB,SAAO;AACT;AAMO,MAAM,kBAAkB,CAAC,UAC9B;AAAA,EACE,YAAY,CAAC,kBAA+B,QAAQ,MAAM,UAAU,aAAa,IAAI,MAAM,QAAY,CAAC,KAAK,CAAC;AAAA,EAC9G,MAAM,OAAO,WAAW,cAAc;AAAA,EACtC,MAAM;AACR;AAOK,MAAM,oBAAoB,CAC/B,OACA,QACA,cACS;AACT,QAAM,YAAY,OAAO,MAAM;AAC/B,YAAU,UAAU;AACpB,QAAM,eAAe,OAAO,SAAS;AACrC,eAAa,UAAU;AAEvB,QAAM,UAAU,QAAQ,MAAM,OAAO,KAAK,IAAG,GAAG,CAAC,MAAM,CAAC;AACxD,QAAM,aAAa,QAAQ,MAAM,UAAU,KAAK,IAAG,GAAG,CAAC,SAAS,CAAC;AAEjE,YAAU,MAAM;AACd,WAAO,WAAW,UAAU,UAAU,SAAS,aAAa,OAAO;AAAA,EACrE,GAAG,CAAC,OAAO,SAAS,UAAU,CAAC;AACjC;"}