@umodeapporg/ui 0.0.0-canary.ca10e69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (845) hide show
  1. package/README.md +78 -0
  2. package/dist/assets/images/common-pngs/sparkles.png.js +5 -0
  3. package/dist/assets/images/common-pngs/sparkles.png.js.map +1 -0
  4. package/dist/assets/umode-ui.css +467 -0
  5. package/dist/components/DateTime/DatePicker.d.ts +21 -0
  6. package/dist/components/DateTime/DatePicker.js +124 -0
  7. package/dist/components/DateTime/DatePicker.js.map +1 -0
  8. package/dist/components/DateTime/DateRangePicker.d.ts +21 -0
  9. package/dist/components/DateTime/DateRangePicker.js +208 -0
  10. package/dist/components/DateTime/DateRangePicker.js.map +1 -0
  11. package/dist/components/Form/ControlledButton.d.ts +25 -0
  12. package/dist/components/Form/ControlledButton.js +73 -0
  13. package/dist/components/Form/ControlledButton.js.map +1 -0
  14. package/dist/components/Form/ControlledCheckbox.d.ts +16 -0
  15. package/dist/components/Form/ControlledCheckbox.js +115 -0
  16. package/dist/components/Form/ControlledCheckbox.js.map +1 -0
  17. package/dist/components/Form/ControlledDialog.d.ts +51 -0
  18. package/dist/components/Form/ControlledDialog.js +191 -0
  19. package/dist/components/Form/ControlledDialog.js.map +1 -0
  20. package/dist/components/Form/ControlledDialogPrimitives.d.ts +53 -0
  21. package/dist/components/Form/ControlledDialogPrimitives.js +245 -0
  22. package/dist/components/Form/ControlledDialogPrimitives.js.map +1 -0
  23. package/dist/components/Form/ControlledDrawer.d.ts +37 -0
  24. package/dist/components/Form/ControlledDrawer.js +241 -0
  25. package/dist/components/Form/ControlledDrawer.js.map +1 -0
  26. package/dist/components/Form/ControlledForm/InputField.d.ts +11 -0
  27. package/dist/components/Form/ControlledForm/InputField.js +75 -0
  28. package/dist/components/Form/ControlledForm/InputField.js.map +1 -0
  29. package/dist/components/Form/ControlledForm/index.d.ts +27 -0
  30. package/dist/components/Form/ControlledForm/index.js +113 -0
  31. package/dist/components/Form/ControlledForm/index.js.map +1 -0
  32. package/dist/components/Form/ControlledImage/Img.d.ts +11 -0
  33. package/dist/components/Form/ControlledImage/Img.js +29 -0
  34. package/dist/components/Form/ControlledImage/Img.js.map +1 -0
  35. package/dist/components/Form/ControlledImage/index.d.ts +33 -0
  36. package/dist/components/Form/ControlledImage/index.js +110 -0
  37. package/dist/components/Form/ControlledImage/index.js.map +1 -0
  38. package/dist/components/Form/ControlledImage/useImage.d.ts +9 -0
  39. package/dist/components/Form/ControlledImage/useImage.js +110 -0
  40. package/dist/components/Form/ControlledImage/useImage.js.map +1 -0
  41. package/dist/components/Form/ControlledInput.d.ts +23 -0
  42. package/dist/components/Form/ControlledInput.js +52 -0
  43. package/dist/components/Form/ControlledInput.js.map +1 -0
  44. package/dist/components/Form/ControlledRadio.d.ts +15 -0
  45. package/dist/components/Form/ControlledRadio.js +91 -0
  46. package/dist/components/Form/ControlledRadio.js.map +1 -0
  47. package/dist/components/Form/ControlledSelect.d.ts +53 -0
  48. package/dist/components/Form/ControlledSelect.js +797 -0
  49. package/dist/components/Form/ControlledSelect.js.map +1 -0
  50. package/dist/components/Form/ControlledSwitch.d.ts +21 -0
  51. package/dist/components/Form/ControlledSwitch.js +107 -0
  52. package/dist/components/Form/ControlledSwitch.js.map +1 -0
  53. package/dist/components/Form/ControlledTabs.d.ts +75 -0
  54. package/dist/components/Form/ControlledTabs.js +515 -0
  55. package/dist/components/Form/ControlledTabs.js.map +1 -0
  56. package/dist/components/Form/ControlledTabsPrimitives.d.ts +43 -0
  57. package/dist/components/Form/ControlledTabsPrimitives.js +48 -0
  58. package/dist/components/Form/ControlledTabsPrimitives.js.map +1 -0
  59. package/dist/components/Form/ControlledTextarea.d.ts +22 -0
  60. package/dist/components/Form/ControlledTextarea.js +46 -0
  61. package/dist/components/Form/ControlledTextarea.js.map +1 -0
  62. package/dist/components/Form/ControlledTimeline.d.ts +26 -0
  63. package/dist/components/Form/ControlledTimeline.js +60 -0
  64. package/dist/components/Form/ControlledTimeline.js.map +1 -0
  65. package/dist/components/Form/ControlledViewToggle.d.ts +74 -0
  66. package/dist/components/Form/ControlledViewToggle.js +157 -0
  67. package/dist/components/Form/ControlledViewToggle.js.map +1 -0
  68. package/dist/components/Form/ControlledVoiceTextarea.d.ts +13 -0
  69. package/dist/components/Form/ControlledVoiceTextarea.js +99 -0
  70. package/dist/components/Form/ControlledVoiceTextarea.js.map +1 -0
  71. package/dist/components/Form/CurrencyInput.d.ts +8 -0
  72. package/dist/components/Form/CurrencyInput.js +17 -0
  73. package/dist/components/Form/CurrencyInput.js.map +1 -0
  74. package/dist/components/Form/FieldLabel.d.ts +16 -0
  75. package/dist/components/Form/FieldLabel.js +7 -0
  76. package/dist/components/Form/FieldLabel.js.map +1 -0
  77. package/dist/components/Form/RichTextEditor.d.ts +86 -0
  78. package/dist/components/Form/RichTextEditor.js +581 -0
  79. package/dist/components/Form/RichTextEditor.js.map +1 -0
  80. package/dist/components/Form/attachments/AttachmentPreviewList.d.ts +22 -0
  81. package/dist/components/Form/attachments/AttachmentPreviewList.js +95 -0
  82. package/dist/components/Form/attachments/AttachmentPreviewList.js.map +1 -0
  83. package/dist/components/Form/attachments/FileDropzone.d.ts +12 -0
  84. package/dist/components/Form/attachments/FileDropzone.js +84 -0
  85. package/dist/components/Form/attachments/FileDropzone.js.map +1 -0
  86. package/dist/components/Navigation/ControlledBreadcrumb.d.ts +13 -0
  87. package/dist/components/Navigation/ControlledBreadcrumb.js +24 -0
  88. package/dist/components/Navigation/ControlledBreadcrumb.js.map +1 -0
  89. package/dist/components/Navigation/ErrorPage.d.ts +2 -0
  90. package/dist/components/Navigation/ErrorPage.js +27 -0
  91. package/dist/components/Navigation/ErrorPage.js.map +1 -0
  92. package/dist/components/Navigation/LinkButton.d.ts +26 -0
  93. package/dist/components/Navigation/LinkButton.js +82 -0
  94. package/dist/components/Navigation/LinkButton.js.map +1 -0
  95. package/dist/components/Navigation/PageTitle.d.ts +95 -0
  96. package/dist/components/Navigation/PageTitle.js +241 -0
  97. package/dist/components/Navigation/PageTitle.js.map +1 -0
  98. package/dist/components/Navigation/PageTitleCollapseContext.d.ts +13 -0
  99. package/dist/components/Navigation/PageTitleCollapseContext.js +9 -0
  100. package/dist/components/Navigation/PageTitleCollapseContext.js.map +1 -0
  101. package/dist/components/Navigation/PageTitleNavigationContext.d.ts +21 -0
  102. package/dist/components/Navigation/PageTitleNavigationContext.js +17 -0
  103. package/dist/components/Navigation/PageTitleNavigationContext.js.map +1 -0
  104. package/dist/components/Navigation/ReactRouterNavigationAdapter.d.ts +7 -0
  105. package/dist/components/Navigation/ReactRouterNavigationAdapter.js +27 -0
  106. package/dist/components/Navigation/ReactRouterNavigationAdapter.js.map +1 -0
  107. package/dist/components/Navigation/UiNavigationContext.d.ts +38 -0
  108. package/dist/components/Navigation/UiNavigationContext.js +44 -0
  109. package/dist/components/Navigation/UiNavigationContext.js.map +1 -0
  110. package/dist/components/Search/UnifiedSearchBar.d.ts +31 -0
  111. package/dist/components/Search/UnifiedSearchBar.js +167 -0
  112. package/dist/components/Search/UnifiedSearchBar.js.map +1 -0
  113. package/dist/components/Search/filters/ActiveFiltersBar.d.ts +15 -0
  114. package/dist/components/Search/filters/ActiveFiltersBar.js +48 -0
  115. package/dist/components/Search/filters/ActiveFiltersBar.js.map +1 -0
  116. package/dist/components/Search/filters/FilterChipsRow.d.ts +17 -0
  117. package/dist/components/Search/filters/FilterChipsRow.js +113 -0
  118. package/dist/components/Search/filters/FilterChipsRow.js.map +1 -0
  119. package/dist/components/Search/filters/FilterFieldControl.d.ts +19 -0
  120. package/dist/components/Search/filters/FilterFieldControl.js +390 -0
  121. package/dist/components/Search/filters/FilterFieldControl.js.map +1 -0
  122. package/dist/components/Search/filters/FiltersButton.d.ts +24 -0
  123. package/dist/components/Search/filters/FiltersButton.js +52 -0
  124. package/dist/components/Search/filters/FiltersButton.js.map +1 -0
  125. package/dist/components/Search/filters/FiltersForm.d.ts +18 -0
  126. package/dist/components/Search/filters/FiltersForm.js +112 -0
  127. package/dist/components/Search/filters/FiltersForm.js.map +1 -0
  128. package/dist/components/Search/filters/FiltersPanel.d.ts +32 -0
  129. package/dist/components/Search/filters/FiltersPanel.js +266 -0
  130. package/dist/components/Search/filters/FiltersPanel.js.map +1 -0
  131. package/dist/components/Search/filters/FiltersSummaryTooltip.d.ts +20 -0
  132. package/dist/components/Search/filters/FiltersSummaryTooltip.js +26 -0
  133. package/dist/components/Search/filters/FiltersSummaryTooltip.js.map +1 -0
  134. package/dist/components/Search/filters/filterTypes.d.ts +162 -0
  135. package/dist/components/Search/filters/filterTypes.js +2 -0
  136. package/dist/components/Search/filters/filterTypes.js.map +1 -0
  137. package/dist/components/Search/filters/filterValues.d.ts +22 -0
  138. package/dist/components/Search/filters/filterValues.js +91 -0
  139. package/dist/components/Search/filters/filterValues.js.map +1 -0
  140. package/dist/components/Search/filters/filtersLayout.d.ts +4 -0
  141. package/dist/components/Search/filters/filtersLayout.js +18 -0
  142. package/dist/components/Search/filters/filtersLayout.js.map +1 -0
  143. package/dist/components/Search/filters/index.d.ts +11 -0
  144. package/dist/components/Search/filters/index.js +32 -0
  145. package/dist/components/Search/filters/index.js.map +1 -0
  146. package/dist/components/Search/filters/useFilters.d.ts +33 -0
  147. package/dist/components/Search/filters/useFilters.js +162 -0
  148. package/dist/components/Search/filters/useFilters.js.map +1 -0
  149. package/dist/components/Search/index.d.ts +2 -0
  150. package/dist/components/Search/index.js +34 -0
  151. package/dist/components/Search/index.js.map +1 -0
  152. package/dist/components/Shell/AppHeader.d.ts +25 -0
  153. package/dist/components/Shell/AppHeader.js +69 -0
  154. package/dist/components/Shell/AppHeader.js.map +1 -0
  155. package/dist/components/Shell/AppShell.d.ts +22 -0
  156. package/dist/components/Shell/AppShell.js +146 -0
  157. package/dist/components/Shell/AppShell.js.map +1 -0
  158. package/dist/components/Shell/AppSidebar.d.ts +20 -0
  159. package/dist/components/Shell/AppSidebar.js +93 -0
  160. package/dist/components/Shell/AppSidebar.js.map +1 -0
  161. package/dist/components/Shell/LanguageToggle.d.ts +8 -0
  162. package/dist/components/Shell/LanguageToggle.js +59 -0
  163. package/dist/components/Shell/LanguageToggle.js.map +1 -0
  164. package/dist/components/Shell/PumpkinGlyph.d.ts +13 -0
  165. package/dist/components/Shell/PumpkinGlyph.js +29 -0
  166. package/dist/components/Shell/PumpkinGlyph.js.map +1 -0
  167. package/dist/components/Shell/SidebarMenu.d.ts +29 -0
  168. package/dist/components/Shell/SidebarMenu.js +254 -0
  169. package/dist/components/Shell/SidebarMenu.js.map +1 -0
  170. package/dist/components/Shell/ThemeToggle.d.ts +18 -0
  171. package/dist/components/Shell/ThemeToggle.js +68 -0
  172. package/dist/components/Shell/ThemeToggle.js.map +1 -0
  173. package/dist/components/Shell/headerControlStyles.d.ts +10 -0
  174. package/dist/components/Shell/headerControlStyles.js +11 -0
  175. package/dist/components/Shell/headerControlStyles.js.map +1 -0
  176. package/dist/components/Shell/sidebarFavorites.d.ts +21 -0
  177. package/dist/components/Shell/sidebarFavorites.js +69 -0
  178. package/dist/components/Shell/sidebarFavorites.js.map +1 -0
  179. package/dist/components/Shell/useSidebarState.d.ts +14 -0
  180. package/dist/components/Shell/useSidebarState.js +106 -0
  181. package/dist/components/Shell/useSidebarState.js.map +1 -0
  182. package/dist/components/UI/AccordionIcon.d.ts +10 -0
  183. package/dist/components/UI/AccordionIcon.js +22 -0
  184. package/dist/components/UI/AccordionIcon.js.map +1 -0
  185. package/dist/components/UI/AlertInfo/dismissedAlertsStore.d.ts +2 -0
  186. package/dist/components/UI/AlertInfo/dismissedAlertsStore.js +22 -0
  187. package/dist/components/UI/AlertInfo/dismissedAlertsStore.js.map +1 -0
  188. package/dist/components/UI/AlertInfo/index.d.ts +30 -0
  189. package/dist/components/UI/AlertInfo/index.js +78 -0
  190. package/dist/components/UI/AlertInfo/index.js.map +1 -0
  191. package/dist/components/UI/BaseDataCard.d.ts +27 -0
  192. package/dist/components/UI/BaseDataCard.js +170 -0
  193. package/dist/components/UI/BaseDataCard.js.map +1 -0
  194. package/dist/components/UI/BulkActionBar.d.ts +35 -0
  195. package/dist/components/UI/BulkActionBar.js +127 -0
  196. package/dist/components/UI/BulkActionBar.js.map +1 -0
  197. package/dist/components/UI/Chips/OutlinedChip.d.ts +42 -0
  198. package/dist/components/UI/Chips/OutlinedChip.js +190 -0
  199. package/dist/components/UI/Chips/OutlinedChip.js.map +1 -0
  200. package/dist/components/UI/Chips/StatusChip.d.ts +8 -0
  201. package/dist/components/UI/Chips/StatusChip.js +33 -0
  202. package/dist/components/UI/Chips/StatusChip.js.map +1 -0
  203. package/dist/components/UI/Chips/chipTones.d.ts +6 -0
  204. package/dist/components/UI/Chips/chipTones.js +53 -0
  205. package/dist/components/UI/Chips/chipTones.js.map +1 -0
  206. package/dist/components/UI/ColorSwatch.d.ts +30 -0
  207. package/dist/components/UI/ColorSwatch.js +53 -0
  208. package/dist/components/UI/ColorSwatch.js.map +1 -0
  209. package/dist/components/UI/Colors.d.ts +10 -0
  210. package/dist/components/UI/Colors.js +41 -0
  211. package/dist/components/UI/Colors.js.map +1 -0
  212. package/dist/components/UI/ControlledAccordion.d.ts +38 -0
  213. package/dist/components/UI/ControlledAccordion.js +95 -0
  214. package/dist/components/UI/ControlledAccordion.js.map +1 -0
  215. package/dist/components/UI/ControlledCollapse.d.ts +18 -0
  216. package/dist/components/UI/ControlledCollapse.js +40 -0
  217. package/dist/components/UI/ControlledCollapse.js.map +1 -0
  218. package/dist/components/UI/ControlledMenu.d.ts +79 -0
  219. package/dist/components/UI/ControlledMenu.js +234 -0
  220. package/dist/components/UI/ControlledMenu.js.map +1 -0
  221. package/dist/components/UI/ControlledPopover.d.ts +59 -0
  222. package/dist/components/UI/ControlledPopover.js +189 -0
  223. package/dist/components/UI/ControlledPopover.js.map +1 -0
  224. package/dist/components/UI/ControlledProgress.d.ts +13 -0
  225. package/dist/components/UI/ControlledProgress.js +46 -0
  226. package/dist/components/UI/ControlledProgress.js.map +1 -0
  227. package/dist/components/UI/ControlledSlider.d.ts +15 -0
  228. package/dist/components/UI/ControlledSlider.js +34 -0
  229. package/dist/components/UI/ControlledSlider.js.map +1 -0
  230. package/dist/components/UI/ControlledTooltip.d.ts +21 -0
  231. package/dist/components/UI/ControlledTooltip.js +146 -0
  232. package/dist/components/UI/ControlledTooltip.js.map +1 -0
  233. package/dist/components/UI/CustomBadge.d.ts +15 -0
  234. package/dist/components/UI/CustomBadge.js +34 -0
  235. package/dist/components/UI/CustomBadge.js.map +1 -0
  236. package/dist/components/UI/CustomCard.d.ts +13 -0
  237. package/dist/components/UI/CustomCard.js +36 -0
  238. package/dist/components/UI/CustomCard.js.map +1 -0
  239. package/dist/components/UI/CustomChart.d.ts +21 -0
  240. package/dist/components/UI/CustomChart.js +108 -0
  241. package/dist/components/UI/CustomChart.js.map +1 -0
  242. package/dist/components/UI/DataTable/DataTable.d.ts +108 -0
  243. package/dist/components/UI/DataTable/DataTable.js +606 -0
  244. package/dist/components/UI/DataTable/DataTable.js.map +1 -0
  245. package/dist/components/UI/DataTable/DataTableAutoCard.d.ts +20 -0
  246. package/dist/components/UI/DataTable/DataTableAutoCard.js +39 -0
  247. package/dist/components/UI/DataTable/DataTableAutoCard.js.map +1 -0
  248. package/dist/components/UI/DataTable/DataTableBody.d.ts +33 -0
  249. package/dist/components/UI/DataTable/DataTableBody.js +260 -0
  250. package/dist/components/UI/DataTable/DataTableBody.js.map +1 -0
  251. package/dist/components/UI/DataTable/DataTableBodyCell.d.ts +21 -0
  252. package/dist/components/UI/DataTable/DataTableBodyCell.js +88 -0
  253. package/dist/components/UI/DataTable/DataTableBodyCell.js.map +1 -0
  254. package/dist/components/UI/DataTable/DataTableBulkEditButton.d.ts +11 -0
  255. package/dist/components/UI/DataTable/DataTableBulkEditButton.js +24 -0
  256. package/dist/components/UI/DataTable/DataTableBulkEditButton.js.map +1 -0
  257. package/dist/components/UI/DataTable/DataTableBulkEditDialog.d.ts +25 -0
  258. package/dist/components/UI/DataTable/DataTableBulkEditDialog.js +282 -0
  259. package/dist/components/UI/DataTable/DataTableBulkEditDialog.js.map +1 -0
  260. package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.d.ts +13 -0
  261. package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.js +95 -0
  262. package/dist/components/UI/DataTable/DataTableBulkEditRowsPicker.js.map +1 -0
  263. package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.d.ts +20 -0
  264. package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.js +94 -0
  265. package/dist/components/UI/DataTable/DataTableBulkEditValueEditor.js.map +1 -0
  266. package/dist/components/UI/DataTable/DataTableColumnToggle.d.ts +34 -0
  267. package/dist/components/UI/DataTable/DataTableColumnToggle.js +170 -0
  268. package/dist/components/UI/DataTable/DataTableColumnToggle.js.map +1 -0
  269. package/dist/components/UI/DataTable/DataTableDetailModal.d.ts +17 -0
  270. package/dist/components/UI/DataTable/DataTableDetailModal.js +109 -0
  271. package/dist/components/UI/DataTable/DataTableDetailModal.js.map +1 -0
  272. package/dist/components/UI/DataTable/DataTableDetailPanel.d.ts +21 -0
  273. package/dist/components/UI/DataTable/DataTableDetailPanel.js +51 -0
  274. package/dist/components/UI/DataTable/DataTableDetailPanel.js.map +1 -0
  275. package/dist/components/UI/DataTable/DataTableDetailTable.d.ts +35 -0
  276. package/dist/components/UI/DataTable/DataTableDetailTable.js +129 -0
  277. package/dist/components/UI/DataTable/DataTableDetailTable.js.map +1 -0
  278. package/dist/components/UI/DataTable/DataTableEditModeButton.d.ts +12 -0
  279. package/dist/components/UI/DataTable/DataTableEditModeButton.js +29 -0
  280. package/dist/components/UI/DataTable/DataTableEditModeButton.js.map +1 -0
  281. package/dist/components/UI/DataTable/DataTableFilters.d.ts +20 -0
  282. package/dist/components/UI/DataTable/DataTableFilters.js +65 -0
  283. package/dist/components/UI/DataTable/DataTableFilters.js.map +1 -0
  284. package/dist/components/UI/DataTable/DataTableHead.d.ts +27 -0
  285. package/dist/components/UI/DataTable/DataTableHead.js +198 -0
  286. package/dist/components/UI/DataTable/DataTableHead.js.map +1 -0
  287. package/dist/components/UI/DataTable/DataTablePagination.d.ts +15 -0
  288. package/dist/components/UI/DataTable/DataTablePagination.js +149 -0
  289. package/dist/components/UI/DataTable/DataTablePagination.js.map +1 -0
  290. package/dist/components/UI/DataTable/DataTableSaveButton.d.ts +13 -0
  291. package/dist/components/UI/DataTable/DataTableSaveButton.js +21 -0
  292. package/dist/components/UI/DataTable/DataTableSaveButton.js.map +1 -0
  293. package/dist/components/UI/DataTable/DataTableSegmentedTabs.d.ts +8 -0
  294. package/dist/components/UI/DataTable/DataTableSegmentedTabs.js +35 -0
  295. package/dist/components/UI/DataTable/DataTableSegmentedTabs.js.map +1 -0
  296. package/dist/components/UI/DataTable/DataTableStates.d.ts +17 -0
  297. package/dist/components/UI/DataTable/DataTableStates.js +59 -0
  298. package/dist/components/UI/DataTable/DataTableStates.js.map +1 -0
  299. package/dist/components/UI/DataTable/DataTableToolbar.d.ts +28 -0
  300. package/dist/components/UI/DataTable/DataTableToolbar.js +110 -0
  301. package/dist/components/UI/DataTable/DataTableToolbar.js.map +1 -0
  302. package/dist/components/UI/DataTable/applyDataTableFilters.d.ts +16 -0
  303. package/dist/components/UI/DataTable/applyDataTableFilters.js +54 -0
  304. package/dist/components/UI/DataTable/applyDataTableFilters.js.map +1 -0
  305. package/dist/components/UI/DataTable/bulkEditValues.d.ts +8 -0
  306. package/dist/components/UI/DataTable/bulkEditValues.js +13 -0
  307. package/dist/components/UI/DataTable/bulkEditValues.js.map +1 -0
  308. package/dist/components/UI/DataTable/cells/DataTableActionsCell.d.ts +7 -0
  309. package/dist/components/UI/DataTable/cells/DataTableActionsCell.js +55 -0
  310. package/dist/components/UI/DataTable/cells/DataTableActionsCell.js.map +1 -0
  311. package/dist/components/UI/DataTable/cells/DataTableCell.d.ts +15 -0
  312. package/dist/components/UI/DataTable/cells/DataTableCell.js +63 -0
  313. package/dist/components/UI/DataTable/cells/DataTableCell.js.map +1 -0
  314. package/dist/components/UI/DataTable/cells/DataTableCodeCell.d.ts +6 -0
  315. package/dist/components/UI/DataTable/cells/DataTableCodeCell.js +7 -0
  316. package/dist/components/UI/DataTable/cells/DataTableCodeCell.js.map +1 -0
  317. package/dist/components/UI/DataTable/cells/DataTableColorCell.d.ts +7 -0
  318. package/dist/components/UI/DataTable/cells/DataTableColorCell.js +10 -0
  319. package/dist/components/UI/DataTable/cells/DataTableColorCell.js.map +1 -0
  320. package/dist/components/UI/DataTable/cells/DataTableCountCell.d.ts +5 -0
  321. package/dist/components/UI/DataTable/cells/DataTableCountCell.js +7 -0
  322. package/dist/components/UI/DataTable/cells/DataTableCountCell.js.map +1 -0
  323. package/dist/components/UI/DataTable/cells/DataTableDateCell.d.ts +5 -0
  324. package/dist/components/UI/DataTable/cells/DataTableDateCell.js +12 -0
  325. package/dist/components/UI/DataTable/cells/DataTableDateCell.js.map +1 -0
  326. package/dist/components/UI/DataTable/cells/DataTableEditableCell.d.ts +23 -0
  327. package/dist/components/UI/DataTable/cells/DataTableEditableCell.js +242 -0
  328. package/dist/components/UI/DataTable/cells/DataTableEditableCell.js.map +1 -0
  329. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.d.ts +10 -0
  330. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js +7 -0
  331. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js.map +1 -0
  332. package/dist/components/UI/DataTable/cells/DataTableOriginCell.d.ts +6 -0
  333. package/dist/components/UI/DataTable/cells/DataTableOriginCell.js +25 -0
  334. package/dist/components/UI/DataTable/cells/DataTableOriginCell.js.map +1 -0
  335. package/dist/components/UI/DataTable/cells/DataTableStatusCell.d.ts +6 -0
  336. package/dist/components/UI/DataTable/cells/DataTableStatusCell.js +24 -0
  337. package/dist/components/UI/DataTable/cells/DataTableStatusCell.js.map +1 -0
  338. package/dist/components/UI/DataTable/cells/DataTableTagCell.d.ts +6 -0
  339. package/dist/components/UI/DataTable/cells/DataTableTagCell.js +25 -0
  340. package/dist/components/UI/DataTable/cells/DataTableTagCell.js.map +1 -0
  341. package/dist/components/UI/DataTable/cells/DataTableTextCell.d.ts +6 -0
  342. package/dist/components/UI/DataTable/cells/DataTableTextCell.js +7 -0
  343. package/dist/components/UI/DataTable/cells/DataTableTextCell.js.map +1 -0
  344. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.d.ts +6 -0
  345. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js +10 -0
  346. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js.map +1 -0
  347. package/dist/components/UI/DataTable/dataTableClasses.d.ts +12 -0
  348. package/dist/components/UI/DataTable/dataTableClasses.js +29 -0
  349. package/dist/components/UI/DataTable/dataTableClasses.js.map +1 -0
  350. package/dist/components/UI/DataTable/dataTableColumnWidths.d.ts +15 -0
  351. package/dist/components/UI/DataTable/dataTableColumnWidths.js +153 -0
  352. package/dist/components/UI/DataTable/dataTableColumnWidths.js.map +1 -0
  353. package/dist/components/UI/DataTable/dataTableColumnsStore.d.ts +12 -0
  354. package/dist/components/UI/DataTable/dataTableColumnsStore.js +68 -0
  355. package/dist/components/UI/DataTable/dataTableColumnsStore.js.map +1 -0
  356. package/dist/components/UI/DataTable/dataTableMotion.d.ts +6 -0
  357. package/dist/components/UI/DataTable/dataTableMotion.js +15 -0
  358. package/dist/components/UI/DataTable/dataTableMotion.js.map +1 -0
  359. package/dist/components/UI/DataTable/grid/GridFillHandle.d.ts +8 -0
  360. package/dist/components/UI/DataTable/grid/GridFillHandle.js +70 -0
  361. package/dist/components/UI/DataTable/grid/GridFillHandle.js.map +1 -0
  362. package/dist/components/UI/DataTable/grid/GridProvider.d.ts +36 -0
  363. package/dist/components/UI/DataTable/grid/GridProvider.js +128 -0
  364. package/dist/components/UI/DataTable/grid/GridProvider.js.map +1 -0
  365. package/dist/components/UI/DataTable/grid/fill/fillStrategies.d.ts +19 -0
  366. package/dist/components/UI/DataTable/grid/fill/fillStrategies.js +73 -0
  367. package/dist/components/UI/DataTable/grid/fill/fillStrategies.js.map +1 -0
  368. package/dist/components/UI/DataTable/grid/gridStore.d.ts +82 -0
  369. package/dist/components/UI/DataTable/grid/gridStore.js +259 -0
  370. package/dist/components/UI/DataTable/grid/gridStore.js.map +1 -0
  371. package/dist/components/UI/DataTable/grid/gridTypes.d.ts +59 -0
  372. package/dist/components/UI/DataTable/grid/gridTypes.js +27 -0
  373. package/dist/components/UI/DataTable/grid/gridTypes.js.map +1 -0
  374. package/dist/components/UI/DataTable/grid/useGridFillApply.d.ts +18 -0
  375. package/dist/components/UI/DataTable/grid/useGridFillApply.js +74 -0
  376. package/dist/components/UI/DataTable/grid/useGridFillApply.js.map +1 -0
  377. package/dist/components/UI/DataTable/grid/useGridInstance.d.ts +27 -0
  378. package/dist/components/UI/DataTable/grid/useGridInstance.js +41 -0
  379. package/dist/components/UI/DataTable/grid/useGridInstance.js.map +1 -0
  380. package/dist/components/UI/DataTable/grid/useGridKeyboard.d.ts +25 -0
  381. package/dist/components/UI/DataTable/grid/useGridKeyboard.js +135 -0
  382. package/dist/components/UI/DataTable/grid/useGridKeyboard.js.map +1 -0
  383. package/dist/components/UI/DataTable/index.d.ts +19 -0
  384. package/dist/components/UI/DataTable/index.js +34 -0
  385. package/dist/components/UI/DataTable/index.js.map +1 -0
  386. package/dist/components/UI/DataTable/types.d.ts +535 -0
  387. package/dist/components/UI/DataTable/types.js +13 -0
  388. package/dist/components/UI/DataTable/types.js.map +1 -0
  389. package/dist/components/UI/DataTable/useCellEditingState.d.ts +20 -0
  390. package/dist/components/UI/DataTable/useCellEditingState.js +33 -0
  391. package/dist/components/UI/DataTable/useCellEditingState.js.map +1 -0
  392. package/dist/components/UI/DataTable/useColumnOrder.d.ts +25 -0
  393. package/dist/components/UI/DataTable/useColumnOrder.js +94 -0
  394. package/dist/components/UI/DataTable/useColumnOrder.js.map +1 -0
  395. package/dist/components/UI/DataTable/useColumnSizing.d.ts +9 -0
  396. package/dist/components/UI/DataTable/useColumnSizing.js +21 -0
  397. package/dist/components/UI/DataTable/useColumnSizing.js.map +1 -0
  398. package/dist/components/UI/DataTable/useColumnVisibility.d.ts +19 -0
  399. package/dist/components/UI/DataTable/useColumnVisibility.js +47 -0
  400. package/dist/components/UI/DataTable/useColumnVisibility.js.map +1 -0
  401. package/dist/components/UI/DataTable/useDataTableCommitQueue.d.ts +69 -0
  402. package/dist/components/UI/DataTable/useDataTableCommitQueue.js +220 -0
  403. package/dist/components/UI/DataTable/useDataTableCommitQueue.js.map +1 -0
  404. package/dist/components/UI/DataTable/useDataTableEditBuffer.d.ts +36 -0
  405. package/dist/components/UI/DataTable/useDataTableEditBuffer.js +29 -0
  406. package/dist/components/UI/DataTable/useDataTableEditBuffer.js.map +1 -0
  407. package/dist/components/UI/DataTable/useDataTableInstance.d.ts +65 -0
  408. package/dist/components/UI/DataTable/useDataTableInstance.js +336 -0
  409. package/dist/components/UI/DataTable/useDataTableInstance.js.map +1 -0
  410. package/dist/components/UI/DataTable/useDataTableSource.d.ts +85 -0
  411. package/dist/components/UI/DataTable/useDataTableSource.js +199 -0
  412. package/dist/components/UI/DataTable/useDataTableSource.js.map +1 -0
  413. package/dist/components/UI/DataTable/useDataTableUndoHistory.d.ts +30 -0
  414. package/dist/components/UI/DataTable/useDataTableUndoHistory.js +130 -0
  415. package/dist/components/UI/DataTable/useDataTableUndoHistory.js.map +1 -0
  416. package/dist/components/UI/DataTable/useFlipRows.d.ts +22 -0
  417. package/dist/components/UI/DataTable/useFlipRows.js +90 -0
  418. package/dist/components/UI/DataTable/useFlipRows.js.map +1 -0
  419. package/dist/components/UI/ErrorBoundary.d.ts +20 -0
  420. package/dist/components/UI/ErrorBoundary.js +36 -0
  421. package/dist/components/UI/ErrorBoundary.js.map +1 -0
  422. package/dist/components/UI/Flow/FlowAnnotationDraftPreview.d.ts +6 -0
  423. package/dist/components/UI/Flow/FlowAnnotationDraftPreview.js +65 -0
  424. package/dist/components/UI/Flow/FlowAnnotationDraftPreview.js.map +1 -0
  425. package/dist/components/UI/Flow/FlowAnnotationNode.d.ts +34 -0
  426. package/dist/components/UI/Flow/FlowAnnotationNode.js +231 -0
  427. package/dist/components/UI/Flow/FlowAnnotationNode.js.map +1 -0
  428. package/dist/components/UI/Flow/FlowAnnotationToolbar.d.ts +32 -0
  429. package/dist/components/UI/Flow/FlowAnnotationToolbar.js +298 -0
  430. package/dist/components/UI/Flow/FlowAnnotationToolbar.js.map +1 -0
  431. package/dist/components/UI/Flow/FlowBlockNode.d.ts +35 -0
  432. package/dist/components/UI/Flow/FlowBlockNode.js +91 -0
  433. package/dist/components/UI/Flow/FlowBlockNode.js.map +1 -0
  434. package/dist/components/UI/Flow/FlowCanvas.d.ts +23 -0
  435. package/dist/components/UI/Flow/FlowCanvas.js +559 -0
  436. package/dist/components/UI/Flow/FlowCanvas.js.map +1 -0
  437. package/dist/components/UI/Flow/FlowConnectionEdge.d.ts +18 -0
  438. package/dist/components/UI/Flow/FlowConnectionEdge.js +116 -0
  439. package/dist/components/UI/Flow/FlowConnectionEdge.js.map +1 -0
  440. package/dist/components/UI/Flow/FlowEditorProvider.d.ts +17 -0
  441. package/dist/components/UI/Flow/FlowEditorProvider.js +27 -0
  442. package/dist/components/UI/Flow/FlowEditorProvider.js.map +1 -0
  443. package/dist/components/UI/Flow/FlowInspector.d.ts +11 -0
  444. package/dist/components/UI/Flow/FlowInspector.js +131 -0
  445. package/dist/components/UI/Flow/FlowInspector.js.map +1 -0
  446. package/dist/components/UI/Flow/FlowIssueList.d.ts +8 -0
  447. package/dist/components/UI/Flow/FlowIssueList.js +55 -0
  448. package/dist/components/UI/Flow/FlowIssueList.js.map +1 -0
  449. package/dist/components/UI/Flow/FlowLaneMap.d.ts +30 -0
  450. package/dist/components/UI/Flow/FlowLaneMap.js +206 -0
  451. package/dist/components/UI/Flow/FlowLaneMap.js.map +1 -0
  452. package/dist/components/UI/Flow/FlowNodeShell.d.ts +20 -0
  453. package/dist/components/UI/Flow/FlowNodeShell.js +81 -0
  454. package/dist/components/UI/Flow/FlowNodeShell.js.map +1 -0
  455. package/dist/components/UI/Flow/FlowResizablePanel.d.ts +20 -0
  456. package/dist/components/UI/Flow/FlowResizablePanel.js +118 -0
  457. package/dist/components/UI/Flow/FlowResizablePanel.js.map +1 -0
  458. package/dist/components/UI/Flow/FlowSelectionBar.d.ts +10 -0
  459. package/dist/components/UI/Flow/FlowSelectionBar.js +56 -0
  460. package/dist/components/UI/Flow/FlowSelectionBar.js.map +1 -0
  461. package/dist/components/UI/Flow/FlowZoomControls.d.ts +12 -0
  462. package/dist/components/UI/Flow/FlowZoomControls.js +54 -0
  463. package/dist/components/UI/Flow/FlowZoomControls.js.map +1 -0
  464. package/dist/components/UI/Flow/flowAnnotations.d.ts +38 -0
  465. package/dist/components/UI/Flow/flowAnnotations.js +123 -0
  466. package/dist/components/UI/Flow/flowAnnotations.js.map +1 -0
  467. package/dist/components/UI/Flow/flowBlockRegistry.d.ts +12 -0
  468. package/dist/components/UI/Flow/flowBlockRegistry.js +20 -0
  469. package/dist/components/UI/Flow/flowBlockRegistry.js.map +1 -0
  470. package/dist/components/UI/Flow/flowEditorStore.d.ts +73 -0
  471. package/dist/components/UI/Flow/flowEditorStore.js +402 -0
  472. package/dist/components/UI/Flow/flowEditorStore.js.map +1 -0
  473. package/dist/components/UI/Flow/flowGraph.d.ts +32 -0
  474. package/dist/components/UI/Flow/flowGraph.js +157 -0
  475. package/dist/components/UI/Flow/flowGraph.js.map +1 -0
  476. package/dist/components/UI/Flow/flowTypes.d.ts +104 -0
  477. package/dist/components/UI/Flow/flowTypes.js +2 -0
  478. package/dist/components/UI/Flow/flowTypes.js.map +1 -0
  479. package/dist/components/UI/Flow/flowViewport.d.ts +25 -0
  480. package/dist/components/UI/Flow/flowViewport.js +31 -0
  481. package/dist/components/UI/Flow/flowViewport.js.map +1 -0
  482. package/dist/components/UI/Flow/index.d.ts +13 -0
  483. package/dist/components/UI/Flow/index.js +44 -0
  484. package/dist/components/UI/Flow/index.js.map +1 -0
  485. package/dist/components/UI/Flow/useFlowAnnotationDrawing.d.ts +25 -0
  486. package/dist/components/UI/Flow/useFlowAnnotationDrawing.js +117 -0
  487. package/dist/components/UI/Flow/useFlowAnnotationDrawing.js.map +1 -0
  488. package/dist/components/UI/Flow/useFlowLabels.d.ts +10 -0
  489. package/dist/components/UI/Flow/useFlowLabels.js +51 -0
  490. package/dist/components/UI/Flow/useFlowLabels.js.map +1 -0
  491. package/dist/components/UI/GeneratedByAI.d.ts +2 -0
  492. package/dist/components/UI/GeneratedByAI.js +12 -0
  493. package/dist/components/UI/GeneratedByAI.js.map +1 -0
  494. package/dist/components/UI/HorizontalScrollArea.d.ts +22 -0
  495. package/dist/components/UI/HorizontalScrollArea.js +74 -0
  496. package/dist/components/UI/HorizontalScrollArea.js.map +1 -0
  497. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.d.ts +21 -0
  498. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js +235 -0
  499. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js.map +1 -0
  500. package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.d.ts +8 -0
  501. package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.js +67 -0
  502. package/dist/components/UI/ImageAiAdjust/ImageAiDiscardReasonDialog.js.map +1 -0
  503. package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.d.ts +8 -0
  504. package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.js +39 -0
  505. package/dist/components/UI/ImageAiAdjust/ImageAiVerificationNotice.js.map +1 -0
  506. package/dist/components/UI/ImageAiAdjust/imageAiReview.d.ts +22 -0
  507. package/dist/components/UI/ImageAiAdjust/imageAiReview.js +37 -0
  508. package/dist/components/UI/ImageAiAdjust/imageAiReview.js.map +1 -0
  509. package/dist/components/UI/ImageAiAdjust/imageAiVerification.d.ts +19 -0
  510. package/dist/components/UI/ImageAiAdjust/imageAiVerification.js +25 -0
  511. package/dist/components/UI/ImageAiAdjust/imageAiVerification.js.map +1 -0
  512. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.d.ts +52 -0
  513. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js +109 -0
  514. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js.map +1 -0
  515. package/dist/components/UI/ImageAnnotator/AnnotationEditor.d.ts +13 -0
  516. package/dist/components/UI/ImageAnnotator/AnnotationEditor.js +362 -0
  517. package/dist/components/UI/ImageAnnotator/AnnotationEditor.js.map +1 -0
  518. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.d.ts +15 -0
  519. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js +61 -0
  520. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js.map +1 -0
  521. package/dist/components/UI/ImageAnnotator/annotationStyle.d.ts +28 -0
  522. package/dist/components/UI/ImageAnnotator/annotationStyle.js +56 -0
  523. package/dist/components/UI/ImageAnnotator/annotationStyle.js.map +1 -0
  524. package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.d.ts +16 -0
  525. package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.js +156 -0
  526. package/dist/components/UI/ImageAnnotator/canvas/AnnotationCropFrame.js.map +1 -0
  527. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.d.ts +17 -0
  528. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js +329 -0
  529. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js.map +1 -0
  530. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.d.ts +10 -0
  531. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js +127 -0
  532. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js.map +1 -0
  533. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.d.ts +26 -0
  534. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js +241 -0
  535. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js.map +1 -0
  536. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.d.ts +15 -0
  537. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js +77 -0
  538. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js.map +1 -0
  539. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.d.ts +11 -0
  540. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js +70 -0
  541. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js.map +1 -0
  542. package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.d.ts +12 -0
  543. package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.js +89 -0
  544. package/dist/components/UI/ImageAnnotator/components/AnnotationCropBar.js.map +1 -0
  545. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.d.ts +8 -0
  546. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js +58 -0
  547. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js.map +1 -0
  548. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.d.ts +13 -0
  549. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js +183 -0
  550. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js.map +1 -0
  551. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.d.ts +17 -0
  552. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js +79 -0
  553. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js.map +1 -0
  554. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.d.ts +15 -0
  555. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js +46 -0
  556. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js.map +1 -0
  557. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.d.ts +10 -0
  558. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js +91 -0
  559. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js.map +1 -0
  560. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.d.ts +21 -0
  561. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js +45 -0
  562. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js.map +1 -0
  563. package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.d.ts +12 -0
  564. package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.js +64 -0
  565. package/dist/components/UI/ImageAnnotator/helpers/annotationCrop.js.map +1 -0
  566. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.d.ts +15 -0
  567. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js +165 -0
  568. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js.map +1 -0
  569. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.d.ts +15 -0
  570. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js +23 -0
  571. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js.map +1 -0
  572. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.d.ts +8 -0
  573. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js +10 -0
  574. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js.map +1 -0
  575. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.d.ts +9 -0
  576. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js +56 -0
  577. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js.map +1 -0
  578. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.d.ts +29 -0
  579. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js +160 -0
  580. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js.map +1 -0
  581. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.d.ts +14 -0
  582. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js +80 -0
  583. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js.map +1 -0
  584. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.d.ts +5 -0
  585. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js +23 -0
  586. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js.map +1 -0
  587. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.d.ts +2 -0
  588. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js +27 -0
  589. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js.map +1 -0
  590. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.d.ts +98 -0
  591. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js +13 -0
  592. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js.map +1 -0
  593. package/dist/components/UI/ImageMaskPainter/index.d.ts +24 -0
  594. package/dist/components/UI/ImageMaskPainter/index.js +284 -0
  595. package/dist/components/UI/ImageMaskPainter/index.js.map +1 -0
  596. package/dist/components/UI/ImageMaskPainter/maskStrokes.d.ts +19 -0
  597. package/dist/components/UI/ImageMaskPainter/maskStrokes.js +71 -0
  598. package/dist/components/UI/ImageMaskPainter/maskStrokes.js.map +1 -0
  599. package/dist/components/UI/ImagePlaceholder.d.ts +24 -0
  600. package/dist/components/UI/ImagePlaceholder.js +29 -0
  601. package/dist/components/UI/ImagePlaceholder.js.map +1 -0
  602. package/dist/components/UI/ImageZoomOverlay.d.ts +7 -0
  603. package/dist/components/UI/ImageZoomOverlay.js +53 -0
  604. package/dist/components/UI/ImageZoomOverlay.js.map +1 -0
  605. package/dist/components/UI/InformationCard.d.ts +26 -0
  606. package/dist/components/UI/InformationCard.js +89 -0
  607. package/dist/components/UI/InformationCard.js.map +1 -0
  608. package/dist/components/UI/Kanban/KanbanBoard.d.ts +26 -0
  609. package/dist/components/UI/Kanban/KanbanBoard.js +91 -0
  610. package/dist/components/UI/Kanban/KanbanBoard.js.map +1 -0
  611. package/dist/components/UI/Kanban/KanbanCard.d.ts +22 -0
  612. package/dist/components/UI/Kanban/KanbanCard.js +47 -0
  613. package/dist/components/UI/Kanban/KanbanCard.js.map +1 -0
  614. package/dist/components/UI/Kanban/KanbanLane.d.ts +37 -0
  615. package/dist/components/UI/Kanban/KanbanLane.js +77 -0
  616. package/dist/components/UI/Kanban/KanbanLane.js.map +1 -0
  617. package/dist/components/UI/Kanban/index.d.ts +4 -0
  618. package/dist/components/UI/Kanban/index.js +11 -0
  619. package/dist/components/UI/Kanban/index.js.map +1 -0
  620. package/dist/components/UI/Kanban/kanbanBoardContext.d.ts +13 -0
  621. package/dist/components/UI/Kanban/kanbanBoardContext.js +13 -0
  622. package/dist/components/UI/Kanban/kanbanBoardContext.js.map +1 -0
  623. package/dist/components/UI/LazyMarkdown.d.ts +5 -0
  624. package/dist/components/UI/LazyMarkdown.js +8 -0
  625. package/dist/components/UI/LazyMarkdown.js.map +1 -0
  626. package/dist/components/UI/LoadingPage.d.ts +2 -0
  627. package/dist/components/UI/LoadingPage.js +13 -0
  628. package/dist/components/UI/LoadingPage.js.map +1 -0
  629. package/dist/components/UI/LoadingSpinner.d.ts +14 -0
  630. package/dist/components/UI/LoadingSpinner.js +32 -0
  631. package/dist/components/UI/LoadingSpinner.js.map +1 -0
  632. package/dist/components/UI/MaterialSymbol/consts.d.ts +2 -0
  633. package/dist/components/UI/MaterialSymbol/consts.js +3472 -0
  634. package/dist/components/UI/MaterialSymbol/consts.js.map +1 -0
  635. package/dist/components/UI/MaterialSymbol/index.d.ts +18 -0
  636. package/dist/components/UI/MaterialSymbol/index.js +51 -0
  637. package/dist/components/UI/MaterialSymbol/index.js.map +1 -0
  638. package/dist/components/UI/MaterialSymbol/types.d.ts +37 -0
  639. package/dist/components/UI/MaterialSymbol/types.js +2 -0
  640. package/dist/components/UI/MaterialSymbol/types.js.map +1 -0
  641. package/dist/components/UI/NoDataFound/index.d.ts +31 -0
  642. package/dist/components/UI/NoDataFound/index.js +215 -0
  643. package/dist/components/UI/NoDataFound/index.js.map +1 -0
  644. package/dist/components/UI/NoDataFound/noDataFoundPresets.d.ts +31 -0
  645. package/dist/components/UI/NoDataFound/noDataFoundPresets.js +99 -0
  646. package/dist/components/UI/NoDataFound/noDataFoundPresets.js.map +1 -0
  647. package/dist/components/UI/ReferenceCard.d.ts +16 -0
  648. package/dist/components/UI/ReferenceCard.js +59 -0
  649. package/dist/components/UI/ReferenceCard.js.map +1 -0
  650. package/dist/components/UI/RichTextContent.d.ts +14 -0
  651. package/dist/components/UI/RichTextContent.js +30 -0
  652. package/dist/components/UI/RichTextContent.js.map +1 -0
  653. package/dist/components/UI/SkeletonLoading.d.ts +9 -0
  654. package/dist/components/UI/SkeletonLoading.js +20 -0
  655. package/dist/components/UI/SkeletonLoading.js.map +1 -0
  656. package/dist/components/UI/ThreeDots.d.ts +11 -0
  657. package/dist/components/UI/ThreeDots.js +22 -0
  658. package/dist/components/UI/ThreeDots.js.map +1 -0
  659. package/dist/components/UI/Toast.d.ts +16 -0
  660. package/dist/components/UI/Toast.js +81 -0
  661. package/dist/components/UI/Toast.js.map +1 -0
  662. package/dist/components/UI/ToastHost.d.ts +2 -0
  663. package/dist/components/UI/ToastHost.js +25 -0
  664. package/dist/components/UI/ToastHost.js.map +1 -0
  665. package/dist/components/UI/TypingEffect.d.ts +10 -0
  666. package/dist/components/UI/TypingEffect.js +31 -0
  667. package/dist/components/UI/TypingEffect.js.map +1 -0
  668. package/dist/components/UI/UmodeLogo.d.ts +10 -0
  669. package/dist/components/UI/UmodeLogo.js +128 -0
  670. package/dist/components/UI/UmodeLogo.js.map +1 -0
  671. package/dist/components/UI/UserMenu.d.ts +50 -0
  672. package/dist/components/UI/UserMenu.js +212 -0
  673. package/dist/components/UI/UserMenu.js.map +1 -0
  674. package/dist/components/UI/UsersAvatar.d.ts +7 -0
  675. package/dist/components/UI/UsersAvatar.js +29 -0
  676. package/dist/components/UI/UsersAvatar.js.map +1 -0
  677. package/dist/components/UI/access/UiAccessContext.d.ts +21 -0
  678. package/dist/components/UI/access/UiAccessContext.js +14 -0
  679. package/dist/components/UI/access/UiAccessContext.js.map +1 -0
  680. package/dist/components/UI/cells/ArrayCell.d.ts +5 -0
  681. package/dist/components/UI/cells/ArrayCell.js +25 -0
  682. package/dist/components/UI/cells/ArrayCell.js.map +1 -0
  683. package/dist/components/UI/cells/BooleanCell.d.ts +5 -0
  684. package/dist/components/UI/cells/BooleanCell.js +22 -0
  685. package/dist/components/UI/cells/BooleanCell.js.map +1 -0
  686. package/dist/components/UI/cells/DetailsTableCell.d.ts +7 -0
  687. package/dist/components/UI/cells/DetailsTableCell.js +30 -0
  688. package/dist/components/UI/cells/DetailsTableCell.js.map +1 -0
  689. package/dist/components/UI/cells/ProductImageCell.d.ts +5 -0
  690. package/dist/components/UI/cells/ProductImageCell.js +21 -0
  691. package/dist/components/UI/cells/ProductImageCell.js.map +1 -0
  692. package/dist/components/UI/cells/UrlLinkCell.d.ts +6 -0
  693. package/dist/components/UI/cells/UrlLinkCell.js +19 -0
  694. package/dist/components/UI/cells/UrlLinkCell.js.map +1 -0
  695. package/dist/components/Upload/SimpleUploaderComponent.d.ts +9 -0
  696. package/dist/components/Upload/SimpleUploaderComponent.js +72 -0
  697. package/dist/components/Upload/SimpleUploaderComponent.js.map +1 -0
  698. package/dist/components/Upload/UploaderComponent.d.ts +29 -0
  699. package/dist/components/Upload/UploaderComponent.js +241 -0
  700. package/dist/components/Upload/UploaderComponent.js.map +1 -0
  701. package/dist/components/Upload/XlsExportButton.d.ts +13 -0
  702. package/dist/components/Upload/XlsExportButton.js +47 -0
  703. package/dist/components/Upload/XlsExportButton.js.map +1 -0
  704. package/dist/helpers/composeRefs.d.ts +7 -0
  705. package/dist/helpers/composeRefs.js +14 -0
  706. package/dist/helpers/composeRefs.js.map +1 -0
  707. package/dist/helpers/dateHelpers.d.ts +47 -0
  708. package/dist/helpers/dateHelpers.js +69 -0
  709. package/dist/helpers/dateHelpers.js.map +1 -0
  710. package/dist/helpers/fileAttachments.d.ts +3 -0
  711. package/dist/helpers/fileAttachments.js +17 -0
  712. package/dist/helpers/fileAttachments.js.map +1 -0
  713. package/dist/helpers/formatHelpers.d.ts +36 -0
  714. package/dist/helpers/formatHelpers.js +65 -0
  715. package/dist/helpers/formatHelpers.js.map +1 -0
  716. package/dist/helpers/iconFont.d.ts +9 -0
  717. package/dist/helpers/iconFont.js +37 -0
  718. package/dist/helpers/iconFont.js.map +1 -0
  719. package/dist/helpers/imageCompression.d.ts +5 -0
  720. package/dist/helpers/imageCompression.js +49 -0
  721. package/dist/helpers/imageCompression.js.map +1 -0
  722. package/dist/helpers/imageFile.d.ts +32 -0
  723. package/dist/helpers/imageFile.js +108 -0
  724. package/dist/helpers/imageFile.js.map +1 -0
  725. package/dist/helpers/layeredSurfaces.d.ts +28 -0
  726. package/dist/helpers/layeredSurfaces.js +19 -0
  727. package/dist/helpers/layeredSurfaces.js.map +1 -0
  728. package/dist/helpers/mathHelpers.d.ts +14 -0
  729. package/dist/helpers/mathHelpers.js +13 -0
  730. package/dist/helpers/mathHelpers.js.map +1 -0
  731. package/dist/helpers/mergeClasses.d.ts +10 -0
  732. package/dist/helpers/mergeClasses.js +34 -0
  733. package/dist/helpers/mergeClasses.js.map +1 -0
  734. package/dist/helpers/moduleLoadErrorHelpers.d.ts +1 -0
  735. package/dist/helpers/moduleLoadErrorHelpers.js +25 -0
  736. package/dist/helpers/moduleLoadErrorHelpers.js.map +1 -0
  737. package/dist/helpers/objectHelpers.d.ts +13 -0
  738. package/dist/helpers/objectHelpers.js +59 -0
  739. package/dist/helpers/objectHelpers.js.map +1 -0
  740. package/dist/helpers/portalHost.d.ts +10 -0
  741. package/dist/helpers/portalHost.js +7 -0
  742. package/dist/helpers/portalHost.js.map +1 -0
  743. package/dist/helpers/richText.d.ts +46 -0
  744. package/dist/helpers/richText.js +197 -0
  745. package/dist/helpers/richText.js.map +1 -0
  746. package/dist/helpers/stringHelpers.d.ts +45 -0
  747. package/dist/helpers/stringHelpers.js +57 -0
  748. package/dist/helpers/stringHelpers.js.map +1 -0
  749. package/dist/helpers/themeSkins.d.ts +12 -0
  750. package/dist/helpers/themeSkins.js +13 -0
  751. package/dist/helpers/themeSkins.js.map +1 -0
  752. package/dist/helpers/themeTokens.d.ts +28 -0
  753. package/dist/helpers/themeTokens.js +35 -0
  754. package/dist/helpers/themeTokens.js.map +1 -0
  755. package/dist/helpers/uiErrorPresenter.d.ts +21 -0
  756. package/dist/helpers/uiErrorPresenter.js +10 -0
  757. package/dist/helpers/uiErrorPresenter.js.map +1 -0
  758. package/dist/helpers/uiLogger.d.ts +8 -0
  759. package/dist/helpers/uiLogger.js +16 -0
  760. package/dist/helpers/uiLogger.js.map +1 -0
  761. package/dist/helpers/uiPreferences.d.ts +13 -0
  762. package/dist/helpers/uiPreferences.js +35 -0
  763. package/dist/helpers/uiPreferences.js.map +1 -0
  764. package/dist/helpers/urlParamSync.d.ts +19 -0
  765. package/dist/helpers/urlParamSync.js +54 -0
  766. package/dist/helpers/urlParamSync.js.map +1 -0
  767. package/dist/helpers/utilityHelpers.d.ts +81 -0
  768. package/dist/helpers/utilityHelpers.js +133 -0
  769. package/dist/helpers/utilityHelpers.js.map +1 -0
  770. package/dist/helpers/validationHelpers.d.ts +36 -0
  771. package/dist/helpers/validationHelpers.js +44 -0
  772. package/dist/helpers/validationHelpers.js.map +1 -0
  773. package/dist/hooks/useAnchoredFloating.d.ts +22 -0
  774. package/dist/hooks/useAnchoredFloating.js +59 -0
  775. package/dist/hooks/useAnchoredFloating.js.map +1 -0
  776. package/dist/hooks/useBreakpoint.d.ts +16 -0
  777. package/dist/hooks/useBreakpoint.js +47 -0
  778. package/dist/hooks/useBreakpoint.js.map +1 -0
  779. package/dist/hooks/useDebounce.d.ts +8 -0
  780. package/dist/hooks/useDebounce.js +36 -0
  781. package/dist/hooks/useDebounce.js.map +1 -0
  782. package/dist/hooks/useFileAttachments.d.ts +43 -0
  783. package/dist/hooks/useFileAttachments.js +158 -0
  784. package/dist/hooks/useFileAttachments.js.map +1 -0
  785. package/dist/hooks/useHoverCapable.d.ts +6 -0
  786. package/dist/hooks/useHoverCapable.js +28 -0
  787. package/dist/hooks/useHoverCapable.js.map +1 -0
  788. package/dist/hooks/useInlineEditor.d.ts +5 -0
  789. package/dist/hooks/useInlineEditor.js +42 -0
  790. package/dist/hooks/useInlineEditor.js.map +1 -0
  791. package/dist/hooks/useMobile.d.ts +7 -0
  792. package/dist/hooks/useMobile.js +8 -0
  793. package/dist/hooks/useMobile.js.map +1 -0
  794. package/dist/hooks/useNotification.d.ts +38 -0
  795. package/dist/hooks/useNotification.js +39 -0
  796. package/dist/hooks/useNotification.js.map +1 -0
  797. package/dist/hooks/useResolvedTheme.d.ts +7 -0
  798. package/dist/hooks/useResolvedTheme.js +15 -0
  799. package/dist/hooks/useResolvedTheme.js.map +1 -0
  800. package/dist/hooks/useThemeSkin.d.ts +7 -0
  801. package/dist/hooks/useThemeSkin.js +19 -0
  802. package/dist/hooks/useThemeSkin.js.map +1 -0
  803. package/dist/hooks/useVoiceTranscription.d.ts +29 -0
  804. package/dist/hooks/useVoiceTranscription.js +208 -0
  805. package/dist/hooks/useVoiceTranscription.js.map +1 -0
  806. package/dist/index.d.ts +63 -0
  807. package/dist/index.js +157 -0
  808. package/dist/index.js.map +1 -0
  809. package/dist/interfaces/IFileAttachment.d.ts +18 -0
  810. package/dist/interfaces/IFileAttachment.js +2 -0
  811. package/dist/interfaces/IFileAttachment.js.map +1 -0
  812. package/dist/interfaces/IFilterOption.d.ts +12 -0
  813. package/dist/interfaces/IFilterOption.js +2 -0
  814. package/dist/interfaces/IFilterOption.js.map +1 -0
  815. package/dist/locales/en/ui.json.d.ts +682 -0
  816. package/dist/locales/en/ui.json.js +120 -0
  817. package/dist/locales/en/ui.json.js.map +1 -0
  818. package/dist/locales/index.d.ts +1362 -0
  819. package/dist/locales/index.js +7 -0
  820. package/dist/locales/index.js.map +1 -0
  821. package/dist/locales/pt/ui.json.d.ts +682 -0
  822. package/dist/locales/pt/ui.json.js +120 -0
  823. package/dist/locales/pt/ui.json.js.map +1 -0
  824. package/dist/motion/index.d.ts +2 -0
  825. package/dist/motion/index.js +17 -0
  826. package/dist/motion/index.js.map +1 -0
  827. package/dist/motion/motionPresets.d.ts +44 -0
  828. package/dist/motion/motionPresets.js +67 -0
  829. package/dist/motion/motionPresets.js.map +1 -0
  830. package/dist/motion/motionTokens.d.ts +40 -0
  831. package/dist/motion/motionTokens.js +29 -0
  832. package/dist/motion/motionTokens.js.map +1 -0
  833. package/package.json +245 -0
  834. package/src/assets/fonts/LICENSE-Inter.txt +92 -0
  835. package/src/assets/fonts/LICENSE-MaterialSymbols.txt +202 -0
  836. package/src/assets/fonts/LICENSE-Virgil.txt +45 -0
  837. package/src/assets/fonts/inter-latin-ext.woff2 +0 -0
  838. package/src/assets/fonts/inter-latin.woff2 +0 -0
  839. package/src/assets/fonts/material-symbols-outlined.woff2 +0 -0
  840. package/src/assets/fonts/virgil.woff2 +0 -0
  841. package/src/assets/styles/base.css +585 -0
  842. package/src/assets/styles/index.css +1 -0
  843. package/src/assets/styles/theme.css +453 -0
  844. package/tailwind-plugins/glass.js +162 -0
  845. package/tailwind.preset.js +392 -0
@@ -0,0 +1,515 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { forwardRef, useMemo, useRef, useState, useImperativeHandle, useEffect, useCallback } from "react";
3
+ import classNames from "classnames";
4
+ import { useTranslation } from "react-i18next";
5
+ import { useUiNavigation } from "../Navigation/UiNavigationContext.js";
6
+ import { useUiAccess } from "../UI/access/UiAccessContext.js";
7
+ import ControlledTooltip from "../UI/ControlledTooltip.js";
8
+ import { formatNumber } from "../../helpers/formatHelpers.js";
9
+ import { claimUrlParam, URL_PARAM_PRIORITY, TABS_URL_PARAM, releaseUrlParam, queueUrlParamUpdate } from "../../helpers/urlParamSync.js";
10
+ import LoadingSpinner from "../UI/LoadingSpinner.js";
11
+ import { MaterialSymbol } from "../UI/MaterialSymbol/index.js";
12
+ import ControlledButton from "./ControlledButton.js";
13
+ import { Tab, TabsRoot, TabsHeader, TabsBody, TabPanel } from "./ControlledTabsPrimitives.js";
14
+ const EDGE_TOLERANCE = 1;
15
+ const ARROW_ROOM = 40;
16
+ const distanceToReveal = (container, tab) => {
17
+ const strip = container.getBoundingClientRect();
18
+ const rect = tab.getBoundingClientRect();
19
+ const pastStart = rect.left - strip.left - ARROW_ROOM;
20
+ const pastEnd = rect.right - strip.right + ARROW_ROOM;
21
+ if (pastEnd > EDGE_TOLERANCE) return Math.min(pastEnd, pastStart);
22
+ if (pastStart < -EDGE_TOLERANCE && container.scrollLeft > 0) return Math.max(pastStart, -container.scrollLeft);
23
+ return 0;
24
+ };
25
+ const EditableTabLabel = ({
26
+ label,
27
+ count,
28
+ loading,
29
+ isVisible = true,
30
+ canToggleVisibility = true,
31
+ onRename,
32
+ onToggleVisibility
33
+ }) => {
34
+ const { t } = useTranslation("ui");
35
+ const [editing, setEditing] = useState(false);
36
+ const [draft, setDraft] = useState(label);
37
+ const inputRef = useRef(null);
38
+ useEffect(() => {
39
+ if (editing) {
40
+ inputRef.current?.focus();
41
+ inputRef.current?.select();
42
+ }
43
+ }, [editing]);
44
+ const handleEditClick = (e) => {
45
+ e.stopPropagation();
46
+ setDraft(label);
47
+ setEditing(true);
48
+ };
49
+ const commit = () => {
50
+ const trimmed = draft.trim();
51
+ if (trimmed && trimmed !== label) onRename(trimmed);
52
+ setEditing(false);
53
+ };
54
+ const handleKeyDown = (e) => {
55
+ if (e.key === "Enter") {
56
+ e.preventDefault();
57
+ commit();
58
+ }
59
+ if (e.key === "Escape") {
60
+ setEditing(false);
61
+ setDraft(label);
62
+ }
63
+ e.stopPropagation();
64
+ };
65
+ if (editing) {
66
+ return /* @__PURE__ */ jsx("div", { className: "flex items-center", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx(
67
+ "input",
68
+ {
69
+ ref: inputRef,
70
+ value: draft,
71
+ onChange: (e) => setDraft(e.target.value),
72
+ onBlur: commit,
73
+ onKeyDown: handleKeyDown,
74
+ style: { width: `${Math.max(draft.length + 2, 6)}ch` },
75
+ className: "border-b border-brand-border bg-transparent px-0 py-0.5 text-sm font-medium leading-none focus:outline-none"
76
+ }
77
+ ) });
78
+ }
79
+ return /* @__PURE__ */ jsxs("div", { className: "group/tab flex items-center gap-x-1.5 align-bottom", children: [
80
+ /* @__PURE__ */ jsx("span", { children: label }),
81
+ count !== void 0 && (loading ? /* @__PURE__ */ jsx(LoadingSpinner, { size: 3 }) : /* @__PURE__ */ jsx("span", { className: "inline-flex min-w-[18px] items-center justify-center rounded-full bg-muted-hover px-1.5 py-px text-[11px] font-medium leading-none text-foreground-subtle", children: formatNumber(count) })),
82
+ /* @__PURE__ */ jsx(ControlledTooltip, { content: t("controlledTabs.renameTab"), children: /* @__PURE__ */ jsx(
83
+ ControlledButton,
84
+ {
85
+ "aria-label": t("controlledTabs.renameTab"),
86
+ defaultHtmlButton: true,
87
+ onClick: handleEditClick,
88
+ className: "ml-0.5 flex items-center text-foreground-faint transition-colors hover:text-brand-emphasis",
89
+ tabIndex: -1,
90
+ children: /* @__PURE__ */ jsx(MaterialSymbol, { icon: "edit", size: 14 })
91
+ }
92
+ ) }),
93
+ onToggleVisibility && /* @__PURE__ */ jsx(
94
+ ControlledTooltip,
95
+ {
96
+ content: !canToggleVisibility ? t("controlledTabs.mustKeepOneEnabled") : isVisible ? t("controlledTabs.disableTab") : t("controlledTabs.enableTabShort"),
97
+ children: /* @__PURE__ */ jsx(
98
+ ControlledButton,
99
+ {
100
+ "aria-label": isVisible ? t("controlledTabs.disableTab") : t("controlledTabs.enableTabShort"),
101
+ defaultHtmlButton: true,
102
+ onClick: (e) => {
103
+ e.stopPropagation();
104
+ if (canToggleVisibility) onToggleVisibility();
105
+ },
106
+ className: classNames("ml-0.5 flex items-center transition-colors", {
107
+ ["text-foreground-faint hover:text-warning-emphasis"]: isVisible && canToggleVisibility,
108
+ ["text-warning-emphasis hover:text-success-emphasis"]: !isVisible,
109
+ ["cursor-not-allowed text-foreground-faint"]: isVisible && !canToggleVisibility
110
+ }),
111
+ tabIndex: -1,
112
+ children: /* @__PURE__ */ jsx(MaterialSymbol, { icon: isVisible ? "visibility" : "visibility_off", size: 14 })
113
+ }
114
+ )
115
+ }
116
+ )
117
+ ] });
118
+ };
119
+ const ControlledTabs = forwardRef(
120
+ ({
121
+ initialActiveTab,
122
+ activeTab: controlledActiveTab,
123
+ tabs: tabsProp,
124
+ dataTabs: dataTabsProp,
125
+ loading = false,
126
+ disabled = false,
127
+ handleActiveTabChildren,
128
+ useRenderValidation = false,
129
+ onTabChange,
130
+ beforeTabChange,
131
+ tabsBodyClassName,
132
+ tabPanelClassName,
133
+ rootClassName,
134
+ tabClassName,
135
+ headerSlot,
136
+ actionsSlot,
137
+ onRenameTab,
138
+ onToggleTabVisibility,
139
+ onReorderTab,
140
+ scrollableHeader = false,
141
+ stickyHeader = false,
142
+ syncWithUrl = true
143
+ }, ref) => {
144
+ const { t } = useTranslation("ui");
145
+ const { check } = useUiAccess();
146
+ const deniedTabValues = useMemo(
147
+ () => new Set(tabsProp.filter((tab) => tab.capability && !check(tab.capability)).map((tab) => tab.value)),
148
+ [tabsProp, check]
149
+ );
150
+ const tabs = useMemo(() => tabsProp.filter((tab) => !deniedTabValues.has(tab.value)), [tabsProp, deniedTabValues]);
151
+ const dataTabs = useMemo(
152
+ () => dataTabsProp.filter((tabPanel) => !deniedTabValues.has(tabPanel.key)),
153
+ [dataTabsProp, deniedTabValues]
154
+ );
155
+ const { location, searchParams, setSearchParams } = useUiNavigation();
156
+ const urlParamOwnerIdRef = useRef({});
157
+ const scrollRef = useRef(null);
158
+ const revealedTabRef = useRef(null);
159
+ const stickySentinelRef = useRef(null);
160
+ const stickyBarRef = useRef(null);
161
+ const [canScrollLeft, setCanScrollLeft] = useState(false);
162
+ const [canScrollRight, setCanScrollRight] = useState(false);
163
+ const [isStuck, setIsStuck] = useState(false);
164
+ const dragTabValueRef = useRef(null);
165
+ const [draggingTabValue, setDraggingTabValue] = useState(null);
166
+ const [dragOverTabValue, setDragOverTabValue] = useState(null);
167
+ const resolveInitialActiveTab = () => {
168
+ const fallbackTab = tabs.some((tab) => tab.value === initialActiveTab) ? initialActiveTab : tabs[0]?.value ?? initialActiveTab;
169
+ if (!syncWithUrl) return fallbackTab;
170
+ if (location.state?.ignoreActiveTab === true)
171
+ return fallbackTab;
172
+ const urlActiveTab = searchParams.get(TABS_URL_PARAM);
173
+ const isValidUrlTab = urlActiveTab != null && tabs.some((tab) => tab.value === urlActiveTab);
174
+ return isValidUrlTab ? urlActiveTab : fallbackTab;
175
+ };
176
+ const [internalActiveTab, setInternalActiveTab] = useState(resolveInitialActiveTab);
177
+ const isControlled = controlledActiveTab !== void 0;
178
+ const activeTab = isControlled ? controlledActiveTab : internalActiveTab;
179
+ const handleActiveTab = (tab) => {
180
+ if (disabled) return;
181
+ if (beforeTabChange && !beforeTabChange(activeTab, tab)) {
182
+ if (!isControlled) {
183
+ setInternalActiveTab(activeTab);
184
+ }
185
+ return;
186
+ }
187
+ if (handleActiveTabChildren) {
188
+ handleActiveTabChildren();
189
+ }
190
+ if (!isControlled) {
191
+ setInternalActiveTab(tab);
192
+ }
193
+ if (onTabChange) {
194
+ onTabChange(tab);
195
+ }
196
+ if (syncWithUrl) {
197
+ queueUrlParamUpdate(TABS_URL_PARAM, tab, setSearchParams);
198
+ }
199
+ };
200
+ useImperativeHandle(ref, () => ({
201
+ activeTab,
202
+ setActiveTab: handleActiveTab
203
+ }));
204
+ const handleToggleTabVisibility = (value) => {
205
+ const visibleCount = tabs.filter((t2) => t2.isVisible !== false).length;
206
+ const isCurrentlyVisible = tabs.find((t2) => t2.value === value)?.isVisible !== false;
207
+ if (isCurrentlyVisible && visibleCount <= 1) return;
208
+ onToggleTabVisibility?.(value);
209
+ };
210
+ useEffect(() => {
211
+ if (!syncWithUrl) return;
212
+ const ownerId = urlParamOwnerIdRef.current;
213
+ claimUrlParam(TABS_URL_PARAM, ownerId, URL_PARAM_PRIORITY.tabs);
214
+ return () => releaseUrlParam(TABS_URL_PARAM, ownerId);
215
+ }, [syncWithUrl]);
216
+ useEffect(() => {
217
+ if (syncWithUrl && searchParams.get(TABS_URL_PARAM) !== activeTab) {
218
+ queueUrlParamUpdate(TABS_URL_PARAM, activeTab, setSearchParams);
219
+ }
220
+ const tabButton = document.querySelector(`li[data-value=${activeTab}]`);
221
+ if (tabButton) {
222
+ tabButton.click();
223
+ }
224
+ }, [activeTab]);
225
+ const updateOverflow = useCallback(() => {
226
+ const container = scrollRef.current;
227
+ if (!container) return;
228
+ setCanScrollLeft(container.scrollLeft > 4);
229
+ setCanScrollRight(container.scrollLeft + container.clientWidth < container.scrollWidth - 4);
230
+ }, []);
231
+ useEffect(() => {
232
+ if (!stickyHeader) return;
233
+ const sentinel = stickySentinelRef.current;
234
+ if (!sentinel || typeof IntersectionObserver === "undefined") return;
235
+ let scrollParent = sentinel.parentElement;
236
+ while (scrollParent) {
237
+ const overflowY = getComputedStyle(scrollParent).overflowY;
238
+ if (overflowY === "auto" || overflowY === "scroll") break;
239
+ scrollParent = scrollParent.parentElement;
240
+ }
241
+ const observer = new IntersectionObserver(([entry]) => setIsStuck(!entry.isIntersecting), {
242
+ root: scrollParent ?? null,
243
+ threshold: 0
244
+ });
245
+ observer.observe(sentinel);
246
+ return () => observer.disconnect();
247
+ }, [stickyHeader]);
248
+ useEffect(() => {
249
+ if (!stickyHeader) return;
250
+ const bar = stickyBarRef.current;
251
+ if (!bar) return;
252
+ let scrollParent = bar.parentElement;
253
+ while (scrollParent) {
254
+ const overflowY = getComputedStyle(scrollParent).overflowY;
255
+ if (overflowY === "auto" || overflowY === "scroll") break;
256
+ scrollParent = scrollParent.parentElement;
257
+ }
258
+ if (!scrollParent) return;
259
+ const target = scrollParent;
260
+ let rafId = 0;
261
+ let lastHeight = -1;
262
+ const publishHeight = () => {
263
+ const height = bar.offsetHeight;
264
+ if (height === lastHeight) return;
265
+ lastHeight = height;
266
+ target.style.setProperty("--sticky-tabs-height", `${height}px`);
267
+ };
268
+ publishHeight();
269
+ if (typeof ResizeObserver === "undefined") return;
270
+ const observer = new ResizeObserver(() => {
271
+ cancelAnimationFrame(rafId);
272
+ rafId = requestAnimationFrame(publishHeight);
273
+ });
274
+ observer.observe(bar);
275
+ return () => {
276
+ cancelAnimationFrame(rafId);
277
+ observer.disconnect();
278
+ target.style.removeProperty("--sticky-tabs-height");
279
+ };
280
+ }, [stickyHeader]);
281
+ const revealActiveTab = useCallback(
282
+ (behavior) => {
283
+ const container = scrollRef.current;
284
+ if (!container?.clientWidth) return false;
285
+ const tab = Array.from(container.querySelectorAll("[data-value]")).find(
286
+ (node) => node.getAttribute("data-value") === activeTab
287
+ );
288
+ if (!tab) return false;
289
+ const distance = distanceToReveal(container, tab);
290
+ if (distance !== 0) container.scrollBy({ left: distance, behavior });
291
+ return true;
292
+ },
293
+ [activeTab]
294
+ );
295
+ useEffect(() => {
296
+ if (!scrollableHeader) return;
297
+ if (revealedTabRef.current !== activeTab) {
298
+ const behavior = revealedTabRef.current === null ? "auto" : "smooth";
299
+ if (revealActiveTab(behavior)) revealedTabRef.current = activeTab;
300
+ }
301
+ updateOverflow();
302
+ const onResize = () => {
303
+ revealActiveTab("auto");
304
+ updateOverflow();
305
+ };
306
+ window.addEventListener("resize", onResize);
307
+ const scroller = scrollRef.current;
308
+ const observer = scroller && typeof ResizeObserver !== "undefined" ? new ResizeObserver(onResize) : null;
309
+ if (scroller && observer) {
310
+ observer.observe(scroller);
311
+ if (scroller.firstElementChild) observer.observe(scroller.firstElementChild);
312
+ }
313
+ return () => {
314
+ window.removeEventListener("resize", onResize);
315
+ observer?.disconnect();
316
+ };
317
+ }, [scrollableHeader, tabs, updateOverflow, revealActiveTab, activeTab]);
318
+ const scrollByStep = (direction) => {
319
+ const container = scrollRef.current;
320
+ if (!container) return;
321
+ const containerRect = container.getBoundingClientRect();
322
+ const nodes = Array.from(container.querySelectorAll("[data-value]"));
323
+ if (direction > 0) {
324
+ const nextHidden = nodes.find(
325
+ (node) => node.getBoundingClientRect().right > containerRect.right - ARROW_ROOM + EDGE_TOLERANCE
326
+ );
327
+ if (!nextHidden) return;
328
+ const distance2 = nextHidden.getBoundingClientRect().left - containerRect.left - ARROW_ROOM;
329
+ container.scrollBy({ left: Math.max(distance2, ARROW_ROOM), behavior: "smooth" });
330
+ return;
331
+ }
332
+ const previousHidden = [...nodes].reverse().find((node) => node.getBoundingClientRect().left < containerRect.left + ARROW_ROOM - EDGE_TOLERANCE);
333
+ if (!previousHidden) return;
334
+ const distance = previousHidden.getBoundingClientRect().right - containerRect.right + ARROW_ROOM;
335
+ container.scrollBy({
336
+ left: Math.min(distance, -ARROW_ROOM),
337
+ behavior: "smooth"
338
+ });
339
+ };
340
+ const tabLabel = (label, count, alertCount) => {
341
+ const showCount = count !== void 0;
342
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-1.5 align-bottom", children: [
343
+ label,
344
+ loading && showCount ? /* @__PURE__ */ jsx(LoadingSpinner, { size: 3 }) : showCount ? /* @__PURE__ */ jsx("span", { className: "inline-flex min-w-[18px] items-center justify-center rounded-full bg-muted-hover px-1.5 py-px text-[11px] font-medium leading-none text-foreground-subtle", children: formatNumber(count) }) : null,
345
+ Boolean(alertCount) && /* @__PURE__ */ jsx("span", { className: "inline-flex min-w-[18px] items-center justify-center rounded-full bg-warning-soft px-1.5 py-px text-[11px] font-semibold leading-none text-warning-emphasis", children: formatNumber(alertCount) })
346
+ ] });
347
+ };
348
+ const handleTabDragEnd = () => {
349
+ const from = dragTabValueRef.current;
350
+ const to = dragOverTabValue;
351
+ if (from && to && from !== to) {
352
+ onReorderTab?.(from, to);
353
+ }
354
+ dragTabValueRef.current = null;
355
+ setDraggingTabValue(null);
356
+ setDragOverTabValue(null);
357
+ };
358
+ const tabElements = tabs.map((tab, index) => {
359
+ const isActive = activeTab === tab.value && tab.isVisible !== false;
360
+ const isInactive = activeTab !== tab.value && tab.isVisible !== false;
361
+ const isTabDropTarget = Boolean(draggingTabValue) && dragOverTabValue === tab.value && draggingTabValue !== tab.value;
362
+ const tabDragProps = onReorderTab ? {
363
+ draggable: true,
364
+ onDragStart: (event) => {
365
+ if (event.target.closest("input, [data-tab-trailing-slot]")) {
366
+ event.preventDefault();
367
+ return;
368
+ }
369
+ event.dataTransfer.effectAllowed = "move";
370
+ dragTabValueRef.current = tab.value;
371
+ setDraggingTabValue(tab.value);
372
+ },
373
+ onDragEnter: (event) => {
374
+ event.preventDefault();
375
+ if (dragTabValueRef.current) setDragOverTabValue(tab.value);
376
+ },
377
+ onDragOver: (event) => event.preventDefault(),
378
+ onDragEnd: handleTabDragEnd
379
+ } : {};
380
+ return /* @__PURE__ */ jsxs(
381
+ Tab,
382
+ {
383
+ value: tab.value,
384
+ style: { zIndex: 2 },
385
+ disabled: loading,
386
+ onClick: () => handleActiveTab(tab.value),
387
+ ...tabDragProps,
388
+ className: classNames(
389
+ "max-w-fit px-4",
390
+ tabClassName,
391
+ // Acabamento mais delicado quando a barra é sticky: pill sutil no hover das abas
392
+ // inativas e peso de fonte mais leve ao trocar de aba.
393
+ stickyHeader && "rounded-md transition-interactive duration-fast",
394
+ {
395
+ [stickyHeader ? "font-medium text-brand-emphasis" : "text-brand-emphasis"]: isActive,
396
+ [stickyHeader ? "font-normal opacity-70 hover:bg-muted-hover hover:opacity-100" : "opacity-70"]: isInactive,
397
+ ["!text-foreground-faint line-through opacity-60 hover:!text-foreground-faint"]: tab.isVisible === false,
398
+ ["cursor-grab active:cursor-grabbing"]: Boolean(onReorderTab),
399
+ ["rounded-md bg-brand-soft !opacity-100 ring-1 ring-brand-border"]: isTabDropTarget,
400
+ ["opacity-40"]: draggingTabValue === tab.value
401
+ }
402
+ ),
403
+ children: [
404
+ onRenameTab && tab.editable !== false ? /* @__PURE__ */ jsx(
405
+ EditableTabLabel,
406
+ {
407
+ label: tab.label,
408
+ count: tab.count,
409
+ loading,
410
+ isVisible: tab.isVisible !== false,
411
+ canToggleVisibility: tab.isVisible === false || tabs.filter((t2) => t2.isVisible !== false).length > 1,
412
+ onRename: (newLabel) => onRenameTab(tab.value, newLabel),
413
+ onToggleVisibility: onToggleTabVisibility ? () => handleToggleTabVisibility(tab.value) : void 0
414
+ }
415
+ ) : tab.tooltip ? /* @__PURE__ */ jsx(ControlledTooltip, { content: tab.tooltip, className: "max-w-60", children: tabLabel(tab.label, tab.count, tab.alertCount) }) : tabLabel(tab.label, tab.count, tab.alertCount),
416
+ tab.trailingSlot && /* @__PURE__ */ jsx(
417
+ "span",
418
+ {
419
+ "data-tab-trailing-slot": true,
420
+ className: "ml-1 flex items-center",
421
+ onClick: (event) => event.stopPropagation(),
422
+ onMouseDown: (event) => event.stopPropagation(),
423
+ onPointerDown: (event) => event.stopPropagation(),
424
+ onKeyDown: (event) => event.stopPropagation(),
425
+ children: tab.trailingSlot
426
+ }
427
+ )
428
+ ]
429
+ },
430
+ `controlled-tab-${index}-${tab.value}`
431
+ );
432
+ });
433
+ const scrollArrowClass = (
434
+ // Centred with margins: a product may scale a pressed button, and that would drop a translate.
435
+ "absolute inset-y-0 z-10 my-auto bg-surface shadow-xs flex size-8 shrink-0 items-center justify-center rounded-full text-foreground-subtle transition-colors hover:bg-brand-soft hover:text-brand-emphasis"
436
+ );
437
+ return /* @__PURE__ */ jsxs(TabsRoot, { value: activeTab, className: classNames("!overflow-visible", rootClassName), children: [
438
+ stickyHeader && /* @__PURE__ */ jsx("div", { ref: stickySentinelRef, className: "h-px", "aria-hidden": true }),
439
+ /* @__PURE__ */ jsxs(
440
+ "div",
441
+ {
442
+ ref: stickyBarRef,
443
+ className: classNames(
444
+ "flex shrink-0 items-center",
445
+ // Com header rolável a barra é sempre UMA linha (nowrap): as abas cedem e viram scroll
446
+ // horizontal, enquanto as ações (shrink-0 + ml-auto) permanecem pinadas à direita e nunca
447
+ // caem para baixo. Sem header rolável, mantém o comportamento antigo de wrap.
448
+ scrollableHeader ? "flex-nowrap gap-x-3" : actionsSlot ? "flex-wrap gap-x-3 gap-y-2" : "gap-1",
449
+ // Gruda logo abaixo do header do produto: fundo sólido para tapar o conteúdo que
450
+ // rola por baixo e sombra sutil só depois que a barra encosta no topo.
451
+ stickyHeader && "sticky top-0 z-20 bg-surface transition-shadow duration-fast",
452
+ stickyHeader && isStuck && "shadow-elevation1",
453
+ disabled && "pointer-events-none select-none opacity-50"
454
+ ),
455
+ children: [
456
+ headerSlot && /* @__PURE__ */ jsx(Fragment, { children: headerSlot }),
457
+ scrollableHeader ? /* @__PURE__ */ jsxs("div", { className: "relative flex min-w-0 flex-1 items-center border-b border-border-subtle", children: [
458
+ canScrollLeft && /* @__PURE__ */ jsx(
459
+ ControlledButton,
460
+ {
461
+ "aria-label": t("controlledTabs.scrollLeft"),
462
+ defaultHtmlButton: true,
463
+ onClick: () => scrollByStep(-1),
464
+ className: classNames(scrollArrowClass, "left-0"),
465
+ tabIndex: -1,
466
+ children: /* @__PURE__ */ jsx(MaterialSymbol, { icon: "chevron_left", size: 20 })
467
+ }
468
+ ),
469
+ /* @__PURE__ */ jsx("div", { ref: scrollRef, onScroll: updateOverflow, className: "scrollbar-hide min-w-0 flex-1 overflow-x-auto", children: /* @__PURE__ */ jsx(TabsHeader, { className: "flex w-max flex-nowrap items-center gap-1 rounded-none border-b-0 border-border-subtle bg-transparent p-0", children: tabElements }) }),
470
+ canScrollRight && /* @__PURE__ */ jsx(
471
+ ControlledButton,
472
+ {
473
+ "aria-label": t("controlledTabs.scrollRight"),
474
+ defaultHtmlButton: true,
475
+ onClick: () => scrollByStep(1),
476
+ className: classNames(scrollArrowClass, "right-0"),
477
+ tabIndex: -1,
478
+ children: /* @__PURE__ */ jsx(MaterialSymbol, { icon: "chevron_right", size: 20 })
479
+ }
480
+ )
481
+ ] }) : /* @__PURE__ */ jsx(TabsHeader, { className: "flex flex-1 flex-wrap items-center gap-1 rounded-none border-b-0 border-border-subtle bg-transparent p-0", children: tabElements }),
482
+ actionsSlot && /* @__PURE__ */ jsx("div", { className: "ml-auto flex shrink-0 items-center", children: actionsSlot })
483
+ ]
484
+ }
485
+ ),
486
+ /* @__PURE__ */ jsx(TabsBody, { className: tabsBodyClassName, children: dataTabs.map((tabPanel) => {
487
+ const isTabVisible = tabs.find((t2) => t2.value === tabPanel.key)?.isVisible !== false;
488
+ return /* @__PURE__ */ jsx(TabPanel, { value: tabPanel.key, className: classNames("size-full", tabPanelClassName), children: /* @__PURE__ */ jsxs("div", { className: classNames("relative size-full", { ["pointer-events-none"]: !isTabVisible }), children: [
489
+ useRenderValidation ? activeTab === tabPanel.key && /* @__PURE__ */ jsx("div", { className: "size-full animate-fade-in transition-interactive duration-slow ease-standard", children: tabPanel.element }) : tabPanel.element,
490
+ !isTabVisible && /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-10 flex flex-col items-center justify-center gap-2 rounded-lg bg-muted-hover/70 glass-veil", children: [
491
+ /* @__PURE__ */ jsx(MaterialSymbol, { icon: "visibility_off", size: 32, className: "text-foreground-faint" }),
492
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-foreground-subtle", children: t("controlledTabs.tabDisabled") }),
493
+ onToggleTabVisibility && /* @__PURE__ */ jsxs(
494
+ ControlledButton,
495
+ {
496
+ size: "sm",
497
+ variant: "outlined",
498
+ className: "pointer-events-auto mt-1 flex items-center gap-x-1",
499
+ onClick: () => onToggleTabVisibility(tabPanel.key),
500
+ children: [
501
+ /* @__PURE__ */ jsx(MaterialSymbol, { icon: "visibility", size: 16 }),
502
+ t("controlledTabs.enableTab")
503
+ ]
504
+ }
505
+ )
506
+ ] })
507
+ ] }) }, tabPanel.key);
508
+ }) })
509
+ ] });
510
+ }
511
+ );
512
+ export {
513
+ ControlledTabs as default
514
+ };
515
+ //# sourceMappingURL=ControlledTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlledTabs.js","sources":["../../../src/components/Form/ControlledTabs.tsx"],"sourcesContent":["import { forwardRef, ReactNode, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { useTranslation } from 'react-i18next';\n\nimport { useUiNavigation } from '@/components/Navigation/UiNavigationContext';\nimport { TUiCapability, useUiAccess } from '@/components/UI/access/UiAccessContext';\nimport ControlledTooltip from '@/components/UI/ControlledTooltip';\nimport { formatNumber } from '@/helpers/formatHelpers';\nimport {\n claimUrlParam,\n queueUrlParamUpdate,\n releaseUrlParam,\n TABS_URL_PARAM,\n URL_PARAM_PRIORITY,\n} from '@/helpers/urlParamSync';\n\nimport LoadingSpinner from '../UI/LoadingSpinner';\nimport { MaterialSymbol } from '../UI/MaterialSymbol';\n\nimport ControlledButton from './ControlledButton';\nimport { Tab, TabPanel, TabsBody, TabsHeader, TabsRoot } from './ControlledTabsPrimitives';\n\nconst EDGE_TOLERANCE = 1;\n// The arrows lie over the strip: a tab under one is not in view, and landing there would hide it.\nconst ARROW_ROOM = 40;\n\n/** How far the strip has to move to show a tab clear of both arrows; 0 when it already is. */\nconst distanceToReveal = (container: HTMLElement, tab: HTMLElement): number => {\n const strip = container.getBoundingClientRect();\n const rect = tab.getBoundingClientRect();\n const pastStart = rect.left - strip.left - ARROW_ROOM;\n const pastEnd = rect.right - strip.right + ARROW_ROOM;\n if (pastEnd > EDGE_TOLERANCE) return Math.min(pastEnd, pastStart);\n if (pastStart < -EDGE_TOLERANCE && container.scrollLeft > 0) return Math.max(pastStart, -container.scrollLeft);\n return 0;\n};\n\ninterface IEditableTabLabelProps {\n label: string;\n count?: number;\n loading?: boolean;\n isVisible?: boolean;\n canToggleVisibility?: boolean;\n onRename: (newLabel: string) => void;\n onToggleVisibility?: () => void;\n}\n\nconst EditableTabLabel = ({\n label,\n count,\n loading,\n isVisible = true,\n canToggleVisibility = true,\n onRename,\n onToggleVisibility,\n}: IEditableTabLabelProps) => {\n const { t } = useTranslation('ui');\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(label);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (editing) {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n }, [editing]);\n\n const handleEditClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n setDraft(label);\n setEditing(true);\n };\n\n const commit = () => {\n const trimmed = draft.trim();\n if (trimmed && trimmed !== label) onRename(trimmed);\n setEditing(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n commit();\n }\n if (e.key === 'Escape') {\n setEditing(false);\n setDraft(label);\n }\n e.stopPropagation();\n };\n\n if (editing) {\n return (\n <div className=\"flex items-center\" onClick={(e) => e.stopPropagation()}>\n <input\n ref={inputRef}\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={commit}\n onKeyDown={handleKeyDown}\n style={{ width: `${Math.max(draft.length + 2, 6)}ch` }}\n className=\"border-b border-brand-border bg-transparent px-0 py-0.5 text-sm font-medium leading-none focus:outline-none\"\n />\n </div>\n );\n }\n\n return (\n <div className=\"group/tab flex items-center gap-x-1.5 align-bottom\">\n <span>{label}</span>\n {count !== undefined &&\n (loading ? (\n <LoadingSpinner size={3} />\n ) : (\n <span className=\"inline-flex min-w-[18px] items-center justify-center rounded-full bg-muted-hover px-1.5 py-px text-[11px] font-medium leading-none text-foreground-subtle\">\n {formatNumber(count)}\n </span>\n ))}\n <ControlledTooltip content={t('controlledTabs.renameTab')}>\n <ControlledButton\n aria-label={t('controlledTabs.renameTab')}\n defaultHtmlButton\n onClick={handleEditClick}\n className=\"ml-0.5 flex items-center text-foreground-faint transition-colors hover:text-brand-emphasis\"\n tabIndex={-1}\n >\n <MaterialSymbol icon=\"edit\" size={14} />\n </ControlledButton>\n </ControlledTooltip>\n {onToggleVisibility && (\n <ControlledTooltip\n content={\n !canToggleVisibility\n ? t('controlledTabs.mustKeepOneEnabled')\n : isVisible\n ? t('controlledTabs.disableTab')\n : t('controlledTabs.enableTabShort')\n }\n >\n <ControlledButton\n aria-label={isVisible ? t('controlledTabs.disableTab') : t('controlledTabs.enableTabShort')}\n defaultHtmlButton\n onClick={(e) => {\n e.stopPropagation();\n if (canToggleVisibility) onToggleVisibility();\n }}\n className={classNames('ml-0.5 flex items-center transition-colors', {\n ['text-foreground-faint hover:text-warning-emphasis']: isVisible && canToggleVisibility,\n ['text-warning-emphasis hover:text-success-emphasis']: !isVisible,\n ['cursor-not-allowed text-foreground-faint']: isVisible && !canToggleVisibility,\n })}\n tabIndex={-1}\n >\n <MaterialSymbol icon={isVisible ? 'visibility' : 'visibility_off'} size={14} />\n </ControlledButton>\n </ControlledTooltip>\n )}\n </div>\n );\n};\n\nexport interface ITabInfo {\n label: string;\n value: string;\n /** Missing capability removes the tab and never mounts its panel, so no protected request runs. */\n capability?: TUiCapability | Array<TUiCapability>;\n count?: number;\n /** Pendências/alertas da aba — badge âmbar ao lado do nome (oculto quando 0/ausente). */\n alertCount?: number;\n tooltip?: string;\n status?: number | string;\n isVisible?: boolean;\n /** When false, the tab keeps a plain label in the bar: no inline rename pencil and no visibility eye (e.g. aggregate tabs). */\n editable?: boolean;\n /**\n * Content rendered after the label, inside the tab (a per-tab actions menu, a status icon). Presses\n * on it never select or drag the tab, so a menu trigger placed here opens without switching tabs.\n */\n trailingSlot?: ReactNode;\n}\n\nexport interface IDataTab {\n key: string;\n element: ReactNode;\n}\n\ninterface IControlledTabsProps {\n initialActiveTab: string;\n activeTab?: string;\n tabs: Array<ITabInfo>;\n dataTabs: Array<IDataTab>;\n loading?: boolean;\n /** Blocks tab switching and dims the header, e.g. while a blocking operation runs in the active tab. */\n disabled?: boolean;\n handleActiveTabChildren?: () => void;\n useRenderValidation?: boolean;\n onTabChange?: (tab: string) => void;\n beforeTabChange?: (from: string, to: string) => boolean;\n tabsBodyClassName?: string;\n tabPanelClassName?: string;\n\n rootClassName?: string;\n /** Classes extras aplicadas a cada aba (ex.: reduzir o padding vertical em telas específicas). */\n tabClassName?: string;\n headerSlot?: ReactNode;\n /** Conteúdo fixo alinhado à direita do cabeçalho das abas (ex.: botão de ação principal). */\n actionsSlot?: ReactNode;\n onRenameTab?: (value: string, newLabel: string) => void;\n onToggleTabVisibility?: (value: string) => void;\n /**\n * Habilita arrastar-e-soltar das abas no cabeçalho (mesmo molde do drag nativo dos\n * campos do construtor de fichas). Recebe os values da aba arrastada e da aba alvo;\n * o consumidor decide como persistir a nova ordem (ex.: tabOrderPriority).\n */\n onReorderTab?: (fromValue: string, toValue: string) => void;\n /**\n * Renders the tab header as a single horizontally-scrollable line (browser-tab style)\n * with navigation arrows and a \"+N\" overflow menu, instead of wrapping onto several lines.\n */\n scrollableHeader?: boolean;\n /**\n * Faz o cabeçalho das abas grudar no topo do container rolável (`position: sticky`), com\n * fundo sólido e uma sombra sutil que aparece só ao rolar, além de um acabamento mais\n * delicado nas abas (pill no hover, sublinhado fino e transição suave). Use quando a barra\n * precisa ficar visível durante todo o scroll (ex.: ficha técnica do produto).\n */\n stickyHeader?: boolean;\n /**\n * Sincroniza a aba ativa com o query param `activeTab` da URL (ler no mount e\n * escrever a cada troca). Default `true`. Use `false` em abas dentro de modais/\n * dialogs, cujo estado é efêmero e não deve poluir a URL da página nem competir\n * com abas de nível de página que já usam `activeTab`.\n */\n syncWithUrl?: boolean;\n}\n\nconst ControlledTabs = forwardRef<unknown, IControlledTabsProps>(\n (\n {\n initialActiveTab,\n activeTab: controlledActiveTab,\n tabs: tabsProp,\n dataTabs: dataTabsProp,\n loading = false,\n disabled = false,\n handleActiveTabChildren,\n useRenderValidation = false,\n onTabChange,\n beforeTabChange,\n tabsBodyClassName,\n tabPanelClassName,\n rootClassName,\n tabClassName,\n headerSlot,\n actionsSlot,\n onRenameTab,\n onToggleTabVisibility,\n onReorderTab,\n scrollableHeader = false,\n stickyHeader = false,\n syncWithUrl = true,\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const { check } = useUiAccess();\n\n const deniedTabValues = useMemo(\n () => new Set(tabsProp.filter((tab) => tab.capability && !check(tab.capability)).map((tab) => tab.value)),\n [tabsProp, check],\n );\n\n const tabs = useMemo(() => tabsProp.filter((tab) => !deniedTabValues.has(tab.value)), [tabsProp, deniedTabValues]);\n\n const dataTabs = useMemo(\n () => dataTabsProp.filter((tabPanel) => !deniedTabValues.has(tabPanel.key)),\n [dataTabsProp, deniedTabValues],\n );\n\n const { location, searchParams, setSearchParams } = useUiNavigation();\n const urlParamOwnerIdRef = useRef<object>({});\n const scrollRef = useRef<HTMLDivElement>(null);\n const revealedTabRef = useRef<string | null>(null);\n const stickySentinelRef = useRef<HTMLDivElement>(null);\n const stickyBarRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n // Abas que cruzam uma borda da área rolável (visíveis só pela metade). Ficam invisíveis para\n // que na borda só apareça aba inteira ou espaço vazio, nunca um pedaço de texto cortado.\n // Barra sticky: detecta quando a barra \"grudou\" (usuário já rolou) para só então mostrar a sombra.\n const [isStuck, setIsStuck] = useState(false);\n // Drag nativo das abas (opt-in via onReorderTab), mesmo molde dos campos do construtor.\n const dragTabValueRef = useRef<string | null>(null);\n const [draggingTabValue, setDraggingTabValue] = useState<string | null>(null);\n const [dragOverTabValue, setDragOverTabValue] = useState<string | null>(null);\n\n const resolveInitialActiveTab = () => {\n const fallbackTab = tabs.some((tab) => tab.value === initialActiveTab)\n ? initialActiveTab\n : (tabs[0]?.value ?? initialActiveTab);\n\n if (!syncWithUrl) return fallbackTab;\n if ((location.state as { ignoreActiveTab?: boolean } | null | undefined)?.ignoreActiveTab === true)\n return fallbackTab;\n const urlActiveTab = searchParams.get(TABS_URL_PARAM);\n const isValidUrlTab = urlActiveTab != null && tabs.some((tab) => tab.value === urlActiveTab);\n return isValidUrlTab ? urlActiveTab : fallbackTab;\n };\n\n const [internalActiveTab, setInternalActiveTab] = useState(resolveInitialActiveTab);\n const isControlled = controlledActiveTab !== undefined;\n const activeTab = isControlled ? controlledActiveTab : internalActiveTab;\n\n const handleActiveTab = (tab: string) => {\n if (disabled) return;\n if (beforeTabChange && !beforeTabChange(activeTab, tab)) {\n if (!isControlled) {\n setInternalActiveTab(activeTab);\n }\n return;\n }\n if (handleActiveTabChildren) {\n handleActiveTabChildren();\n }\n if (!isControlled) {\n setInternalActiveTab(tab);\n }\n if (onTabChange) {\n onTabChange(tab);\n }\n\n if (syncWithUrl) {\n queueUrlParamUpdate(TABS_URL_PARAM, tab, setSearchParams);\n }\n };\n\n useImperativeHandle(ref, () => ({\n activeTab,\n setActiveTab: handleActiveTab,\n }));\n\n const handleToggleTabVisibility = (value: string) => {\n const visibleCount = tabs.filter((t) => t.isVisible !== false).length;\n const isCurrentlyVisible = tabs.find((t) => t.value === value)?.isVisible !== false;\n if (isCurrentlyVisible && visibleCount <= 1) return;\n onToggleTabVisibility?.(value);\n };\n\n // As abas são o topo da hierarquia de parâmetros: assumem `activeTab` mesmo montando depois de\n // um controle que já o tivesse reivindicado, e o liberam ao desmontar.\n useEffect(() => {\n if (!syncWithUrl) return;\n\n const ownerId = urlParamOwnerIdRef.current;\n claimUrlParam(TABS_URL_PARAM, ownerId, URL_PARAM_PRIORITY.tabs);\n\n return () => releaseUrlParam(TABS_URL_PARAM, ownerId);\n }, [syncWithUrl]);\n\n useEffect(() => {\n if (syncWithUrl && searchParams.get(TABS_URL_PARAM) !== activeTab) {\n queueUrlParamUpdate(TABS_URL_PARAM, activeTab, setSearchParams);\n }\n const tabButton = document.querySelector(`li[data-value=${activeTab}]`) as HTMLElement | null;\n if (tabButton) {\n tabButton.click();\n }\n }, [activeTab]);\n\n const updateOverflow = useCallback(() => {\n const container = scrollRef.current;\n if (!container) return;\n\n setCanScrollLeft(container.scrollLeft > 4);\n setCanScrollRight(container.scrollLeft + container.clientWidth < container.scrollWidth - 4);\n }, []);\n\n useEffect(() => {\n if (!stickyHeader) return;\n const sentinel = stickySentinelRef.current;\n if (!sentinel || typeof IntersectionObserver === 'undefined') return;\n // Descobre o ancestral rolável para observar o sentinela em relação a ele. Quando o sentinela\n // (logo acima da barra) sai do topo do container, a barra grudou e ligamos a sombra.\n let scrollParent = sentinel.parentElement;\n while (scrollParent) {\n const overflowY = getComputedStyle(scrollParent).overflowY;\n if (overflowY === 'auto' || overflowY === 'scroll') break;\n scrollParent = scrollParent.parentElement;\n }\n const observer = new IntersectionObserver(([entry]) => setIsStuck(!entry.isIntersecting), {\n root: scrollParent ?? null,\n threshold: 0,\n });\n observer.observe(sentinel);\n return () => observer.disconnect();\n }, [stickyHeader]);\n\n // Publica a altura da barra fixa como `--sticky-tabs-height` no container rolável, para\n // que conteúdo sticky mais abaixo (ex.: cabeçalho de material da ficha) possa grudar logo\n // abaixo da barra em vez de ficar escondido atrás dela.\n useEffect(() => {\n if (!stickyHeader) return;\n const bar = stickyBarRef.current;\n if (!bar) return;\n let scrollParent = bar.parentElement;\n while (scrollParent) {\n const overflowY = getComputedStyle(scrollParent).overflowY;\n if (overflowY === 'auto' || overflowY === 'scroll') break;\n scrollParent = scrollParent.parentElement;\n }\n if (!scrollParent) return;\n const target = scrollParent;\n let rafId = 0;\n let lastHeight = -1;\n // Escreve a variável só quando a altura muda de fato, e fora do ciclo de entrega do\n // ResizeObserver (via rAF): escrever um valor que afeta layout dentro do callback dispara\n // \"ResizeObserver loop completed with undelivered notifications\".\n const publishHeight = () => {\n const height = bar.offsetHeight;\n if (height === lastHeight) return;\n lastHeight = height;\n target.style.setProperty('--sticky-tabs-height', `${height}px`);\n };\n publishHeight();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(publishHeight);\n });\n observer.observe(bar);\n return () => {\n cancelAnimationFrame(rafId);\n observer.disconnect();\n target.style.removeProperty('--sticky-tabs-height');\n };\n }, [stickyHeader]);\n\n /** False while the strip or the tab is not laid out yet, so the caller tries again later. */\n const revealActiveTab = useCallback(\n (behavior: ScrollBehavior): boolean => {\n const container = scrollRef.current;\n if (!container?.clientWidth) return false;\n const tab = Array.from(container.querySelectorAll<HTMLElement>('[data-value]')).find(\n (node) => node.getAttribute('data-value') === activeTab,\n );\n if (!tab) return false;\n const distance = distanceToReveal(container, tab);\n if (distance !== 0) container.scrollBy({ left: distance, behavior });\n return true;\n },\n [activeTab],\n );\n\n useEffect(() => {\n if (!scrollableHeader) return;\n // Once per tab, so a new render never undoes the person's own scrolling. A page opened on a far\n // tab simply starts there; after that the strip travels, as it does with the arrows.\n if (revealedTabRef.current !== activeTab) {\n const behavior = revealedTabRef.current === null ? 'auto' : 'smooth';\n if (revealActiveTab(behavior)) revealedTabRef.current = activeTab;\n }\n updateOverflow();\n const onResize = () => {\n revealActiveTab('auto');\n updateOverflow();\n };\n window.addEventListener('resize', onResize);\n\n // The strip also changes size with no window resize: a side panel opening, the web font\n // arriving, the arrows themselves appearing.\n const scroller = scrollRef.current;\n const observer = scroller && typeof ResizeObserver !== 'undefined' ? new ResizeObserver(onResize) : null;\n if (scroller && observer) {\n observer.observe(scroller);\n if (scroller.firstElementChild) observer.observe(scroller.firstElementChild);\n }\n\n return () => {\n window.removeEventListener('resize', onResize);\n observer?.disconnect();\n };\n }, [scrollableHeader, tabs, updateOverflow, revealActiveTab, activeTab]);\n\n const scrollByStep = (direction: number) => {\n const container = scrollRef.current;\n if (!container) return;\n const containerRect = container.getBoundingClientRect();\n const nodes = Array.from(container.querySelectorAll('[data-value]')) as Array<HTMLElement>;\n\n if (direction > 0) {\n const nextHidden = nodes.find(\n (node) => node.getBoundingClientRect().right > containerRect.right - ARROW_ROOM + EDGE_TOLERANCE,\n );\n if (!nextHidden) return;\n const distance = nextHidden.getBoundingClientRect().left - containerRect.left - ARROW_ROOM;\n container.scrollBy({ left: Math.max(distance, ARROW_ROOM), behavior: 'smooth' });\n return;\n }\n\n const previousHidden = [...nodes]\n .reverse()\n .find((node) => node.getBoundingClientRect().left < containerRect.left + ARROW_ROOM - EDGE_TOLERANCE);\n if (!previousHidden) return;\n const distance = previousHidden.getBoundingClientRect().right - containerRect.right + ARROW_ROOM;\n container.scrollBy({\n left: Math.min(distance, -ARROW_ROOM),\n behavior: 'smooth',\n });\n };\n\n const tabLabel = (label: string, count?: number, alertCount?: number) => {\n const showCount = count !== undefined;\n return (\n <div className=\"flex items-center gap-x-1.5 align-bottom\">\n {label}\n {loading && showCount ? (\n <LoadingSpinner size={3} />\n ) : showCount ? (\n <span className=\"inline-flex min-w-[18px] items-center justify-center rounded-full bg-muted-hover px-1.5 py-px text-[11px] font-medium leading-none text-foreground-subtle\">\n {formatNumber(count)}\n </span>\n ) : null}\n {Boolean(alertCount) && (\n <span className=\"inline-flex min-w-[18px] items-center justify-center rounded-full bg-warning-soft px-1.5 py-px text-[11px] font-semibold leading-none text-warning-emphasis\">\n {formatNumber(alertCount as number)}\n </span>\n )}\n </div>\n );\n };\n\n const handleTabDragEnd = () => {\n const from = dragTabValueRef.current;\n const to = dragOverTabValue;\n\n if (from && to && from !== to) {\n onReorderTab?.(from, to);\n }\n\n dragTabValueRef.current = null;\n setDraggingTabValue(null);\n setDragOverTabValue(null);\n };\n\n const tabElements = tabs.map((tab, index) => {\n const isActive = activeTab === tab.value && tab.isVisible !== false;\n const isInactive = activeTab !== tab.value && tab.isVisible !== false;\n const isTabDropTarget =\n Boolean(draggingTabValue) && dragOverTabValue === tab.value && draggingTabValue !== tab.value;\n const tabDragProps = onReorderTab\n ? {\n draggable: true,\n onDragStart: (event: React.DragEvent) => {\n // Arrastar a partir do input de renomear deve selecionar texto, não mover a aba; e a\n // partir do slot de ações (menu da aba) não deve mover nada.\n if ((event.target as HTMLElement).closest('input, [data-tab-trailing-slot]')) {\n event.preventDefault();\n return;\n }\n event.dataTransfer.effectAllowed = 'move';\n dragTabValueRef.current = tab.value;\n setDraggingTabValue(tab.value);\n },\n onDragEnter: (event: React.DragEvent) => {\n event.preventDefault();\n if (dragTabValueRef.current) setDragOverTabValue(tab.value);\n },\n onDragOver: (event: React.DragEvent) => event.preventDefault(),\n onDragEnd: handleTabDragEnd,\n }\n : {};\n return (\n <Tab\n key={`controlled-tab-${index}-${tab.value}`}\n value={tab.value}\n style={{ zIndex: 2 }}\n disabled={loading}\n onClick={() => handleActiveTab(tab.value)}\n {...tabDragProps}\n className={classNames(\n 'max-w-fit px-4',\n tabClassName,\n // Acabamento mais delicado quando a barra é sticky: pill sutil no hover das abas\n // inativas e peso de fonte mais leve ao trocar de aba.\n stickyHeader && 'rounded-md transition-interactive duration-fast',\n {\n [stickyHeader ? 'font-medium text-brand-emphasis' : 'text-brand-emphasis']: isActive,\n [stickyHeader ? 'font-normal opacity-70 hover:bg-muted-hover hover:opacity-100' : 'opacity-70']:\n isInactive,\n ['!text-foreground-faint line-through opacity-60 hover:!text-foreground-faint']: tab.isVisible === false,\n ['cursor-grab active:cursor-grabbing']: Boolean(onReorderTab),\n ['rounded-md bg-brand-soft !opacity-100 ring-1 ring-brand-border']: isTabDropTarget,\n ['opacity-40']: draggingTabValue === tab.value,\n },\n )}\n >\n {onRenameTab && tab.editable !== false ? (\n <EditableTabLabel\n label={tab.label}\n count={tab.count}\n loading={loading}\n isVisible={tab.isVisible !== false}\n canToggleVisibility={tab.isVisible === false || tabs.filter((t) => t.isVisible !== false).length > 1}\n onRename={(newLabel) => onRenameTab(tab.value, newLabel)}\n onToggleVisibility={onToggleTabVisibility ? () => handleToggleTabVisibility(tab.value) : undefined}\n />\n ) : tab.tooltip ? (\n <ControlledTooltip content={tab.tooltip} className=\"max-w-60\">\n {tabLabel(tab.label, tab.count, tab.alertCount)}\n </ControlledTooltip>\n ) : (\n tabLabel(tab.label, tab.count, tab.alertCount)\n )}\n {tab.trailingSlot && (\n <span\n data-tab-trailing-slot\n className=\"ml-1 flex items-center\"\n onClick={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n {tab.trailingSlot}\n </span>\n )}\n </Tab>\n );\n });\n\n // Sublinhado fino (2px). Na barra sticky mantemos a animação de deslize nativa (transform) com\n // transição suave de ~120ms; nas demais telas o indicador segue estático como antes.\n\n // Each arrow lies over the strip and only exists while there is something to reach on its side:\n // the strip keeps its width either way, so the first tab lines up with the content at the start\n // and the tabs never jump under the pointer.\n const scrollArrowClass =\n // Centred with margins: a product may scale a pressed button, and that would drop a translate.\n 'absolute inset-y-0 z-10 my-auto bg-surface shadow-xs ' +\n 'flex size-8 shrink-0 items-center justify-center rounded-full text-foreground-subtle transition-colors hover:bg-brand-soft hover:text-brand-emphasis';\n\n return (\n <TabsRoot value={activeTab} className={classNames('!overflow-visible', rootClassName)}>\n {/* Sentinela de 1px: quando sai do topo do container rolável a barra já grudou e acende a sombra. */}\n {stickyHeader && <div ref={stickySentinelRef} className=\"h-px\" aria-hidden />}\n <div\n ref={stickyBarRef}\n className={classNames(\n 'flex shrink-0 items-center',\n // Com header rolável a barra é sempre UMA linha (nowrap): as abas cedem e viram scroll\n // horizontal, enquanto as ações (shrink-0 + ml-auto) permanecem pinadas à direita e nunca\n // caem para baixo. Sem header rolável, mantém o comportamento antigo de wrap.\n scrollableHeader ? 'flex-nowrap gap-x-3' : actionsSlot ? 'flex-wrap gap-x-3 gap-y-2' : 'gap-1',\n // Gruda logo abaixo do header do produto: fundo sólido para tapar o conteúdo que\n // rola por baixo e sombra sutil só depois que a barra encosta no topo.\n stickyHeader && 'sticky top-0 z-20 bg-surface transition-shadow duration-fast',\n stickyHeader && isStuck && 'shadow-elevation1',\n disabled && 'pointer-events-none select-none opacity-50',\n )}\n >\n {headerSlot && <>{headerSlot}</>}\n {scrollableHeader ? (\n <div className=\"relative flex min-w-0 flex-1 items-center border-b border-border-subtle\">\n {canScrollLeft && (\n <ControlledButton\n aria-label={t('controlledTabs.scrollLeft')}\n defaultHtmlButton\n onClick={() => scrollByStep(-1)}\n className={classNames(scrollArrowClass, 'left-0')}\n tabIndex={-1}\n >\n <MaterialSymbol icon=\"chevron_left\" size={20} />\n </ControlledButton>\n )}\n\n <div ref={scrollRef} onScroll={updateOverflow} className=\"scrollbar-hide min-w-0 flex-1 overflow-x-auto\">\n <TabsHeader className=\"flex w-max flex-nowrap items-center gap-1 rounded-none border-b-0 border-border-subtle bg-transparent p-0\">\n {tabElements}\n </TabsHeader>\n </div>\n\n {canScrollRight && (\n <ControlledButton\n aria-label={t('controlledTabs.scrollRight')}\n defaultHtmlButton\n onClick={() => scrollByStep(1)}\n className={classNames(scrollArrowClass, 'right-0')}\n tabIndex={-1}\n >\n <MaterialSymbol icon=\"chevron_right\" size={20} />\n </ControlledButton>\n )}\n </div>\n ) : (\n <TabsHeader className=\"flex flex-1 flex-wrap items-center gap-1 rounded-none border-b-0 border-border-subtle bg-transparent p-0\">\n {tabElements}\n </TabsHeader>\n )}\n {actionsSlot && <div className=\"ml-auto flex shrink-0 items-center\">{actionsSlot}</div>}\n </div>\n\n <TabsBody className={tabsBodyClassName}>\n {dataTabs.map((tabPanel) => {\n const isTabVisible = tabs.find((t) => t.value === tabPanel.key)?.isVisible !== false;\n return (\n <TabPanel key={tabPanel.key} value={tabPanel.key} className={classNames('size-full', tabPanelClassName)}>\n <div className={classNames('relative size-full', { ['pointer-events-none']: !isTabVisible })}>\n {useRenderValidation\n ? activeTab === tabPanel.key && (\n <div className=\"size-full animate-fade-in transition-interactive duration-slow ease-standard\">\n {tabPanel.element}\n </div>\n )\n : tabPanel.element}\n {!isTabVisible && (\n <div className=\"absolute inset-0 z-10 flex flex-col items-center justify-center gap-2 rounded-lg bg-muted-hover/70 glass-veil\">\n <MaterialSymbol icon=\"visibility_off\" size={32} className=\"text-foreground-faint\" />\n <span className=\"text-sm font-medium text-foreground-subtle\">\n {t('controlledTabs.tabDisabled')}\n </span>\n {onToggleTabVisibility && (\n <ControlledButton\n size=\"sm\"\n variant=\"outlined\"\n className=\"pointer-events-auto mt-1 flex items-center gap-x-1\"\n onClick={() => onToggleTabVisibility(tabPanel.key)}\n >\n <MaterialSymbol icon=\"visibility\" size={16} />\n {t('controlledTabs.enableTab')}\n </ControlledButton>\n )}\n </div>\n )}\n </div>\n </TabPanel>\n );\n })}\n </TabsBody>\n </TabsRoot>\n );\n },\n);\n\nexport default ControlledTabs;\n"],"names":["t","distance"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { default as React } from 'react';
2
+ interface ITabsRootProps {
3
+ value: string;
4
+ children: React.ReactNode;
5
+ className?: string;
6
+ }
7
+ export declare const TabsRoot: React.FC<ITabsRootProps>;
8
+ interface ITabsHeaderProps {
9
+ children: React.ReactNode;
10
+ className?: string;
11
+ }
12
+ export declare const TabsHeader: React.FC<ITabsHeaderProps>;
13
+ interface ITabProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'className'> {
14
+ value: string;
15
+ disabled?: boolean;
16
+ className?: string;
17
+ children: React.ReactNode;
18
+ }
19
+ /**
20
+ * Rendered as a div with role="tab", not a native button: a tab can carry its own controls
21
+ * (inline rename, visibility toggle, drag handle), and a button inside a button is invalid
22
+ * HTML that silently breaks the inner controls.
23
+ *
24
+ * The active underline lives on the tab itself rather than on a separate sliding indicator,
25
+ * so no measurement is needed and reordering or horizontal scrolling cannot desynchronise it.
26
+ */
27
+ export declare const Tab: React.ForwardRefExoticComponent<ITabProps & React.RefAttributes<HTMLDivElement>>;
28
+ interface ITabsBodyProps {
29
+ children: React.ReactNode;
30
+ className?: string;
31
+ }
32
+ export declare const TabsBody: React.FC<ITabsBodyProps>;
33
+ interface ITabPanelProps {
34
+ value: string;
35
+ children: React.ReactNode;
36
+ className?: string;
37
+ }
38
+ /**
39
+ * Inactive panels stay MOUNTED and hidden. Unmounting them would discard the state, focus
40
+ * and scroll position of every tab the user is not looking at.
41
+ */
42
+ export declare const TabPanel: React.FC<ITabPanelProps>;
43
+ export {};