@umodeapporg/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. package/dist/assets/images/common-pngs/sparkles.png.js +5 -0
  2. package/dist/assets/images/common-pngs/sparkles.png.js.map +1 -0
  3. package/dist/assets/umode-ui.css +182 -0
  4. package/dist/components/DateTime/DatePicker.d.ts +19 -0
  5. package/dist/components/DateTime/DatePicker.js +121 -0
  6. package/dist/components/DateTime/DatePicker.js.map +1 -0
  7. package/dist/components/DateTime/DateRangePicker.d.ts +19 -0
  8. package/dist/components/DateTime/DateRangePicker.js +205 -0
  9. package/dist/components/DateTime/DateRangePicker.js.map +1 -0
  10. package/dist/components/Form/ControlledButton.d.ts +13 -0
  11. package/dist/components/Form/ControlledButton.js +68 -0
  12. package/dist/components/Form/ControlledButton.js.map +1 -0
  13. package/dist/components/Form/ControlledCheckbox.d.ts +12 -0
  14. package/dist/components/Form/ControlledCheckbox.js +101 -0
  15. package/dist/components/Form/ControlledCheckbox.js.map +1 -0
  16. package/dist/components/Form/ControlledDialog.d.ts +44 -0
  17. package/dist/components/Form/ControlledDialog.js +185 -0
  18. package/dist/components/Form/ControlledDialog.js.map +1 -0
  19. package/dist/components/Form/ControlledDialogPrimitives.d.ts +30 -0
  20. package/dist/components/Form/ControlledDialogPrimitives.js +121 -0
  21. package/dist/components/Form/ControlledDialogPrimitives.js.map +1 -0
  22. package/dist/components/Form/ControlledDrawer.d.ts +37 -0
  23. package/dist/components/Form/ControlledDrawer.js +237 -0
  24. package/dist/components/Form/ControlledDrawer.js.map +1 -0
  25. package/dist/components/Form/ControlledForm/InputField.d.ts +11 -0
  26. package/dist/components/Form/ControlledForm/InputField.js +75 -0
  27. package/dist/components/Form/ControlledForm/InputField.js.map +1 -0
  28. package/dist/components/Form/ControlledForm/index.d.ts +27 -0
  29. package/dist/components/Form/ControlledForm/index.js +113 -0
  30. package/dist/components/Form/ControlledForm/index.js.map +1 -0
  31. package/dist/components/Form/ControlledImage/Img.d.ts +11 -0
  32. package/dist/components/Form/ControlledImage/Img.js +29 -0
  33. package/dist/components/Form/ControlledImage/Img.js.map +1 -0
  34. package/dist/components/Form/ControlledImage/index.d.ts +30 -0
  35. package/dist/components/Form/ControlledImage/index.js +107 -0
  36. package/dist/components/Form/ControlledImage/index.js.map +1 -0
  37. package/dist/components/Form/ControlledImage/useImage.d.ts +9 -0
  38. package/dist/components/Form/ControlledImage/useImage.js +110 -0
  39. package/dist/components/Form/ControlledImage/useImage.js.map +1 -0
  40. package/dist/components/Form/ControlledInput.d.ts +23 -0
  41. package/dist/components/Form/ControlledInput.js +52 -0
  42. package/dist/components/Form/ControlledInput.js.map +1 -0
  43. package/dist/components/Form/ControlledRadio.d.ts +15 -0
  44. package/dist/components/Form/ControlledRadio.js +91 -0
  45. package/dist/components/Form/ControlledRadio.js.map +1 -0
  46. package/dist/components/Form/ControlledSelect.d.ts +44 -0
  47. package/dist/components/Form/ControlledSelect.js +545 -0
  48. package/dist/components/Form/ControlledSelect.js.map +1 -0
  49. package/dist/components/Form/ControlledSwitch.d.ts +14 -0
  50. package/dist/components/Form/ControlledSwitch.js +88 -0
  51. package/dist/components/Form/ControlledSwitch.js.map +1 -0
  52. package/dist/components/Form/ControlledTabs.d.ts +70 -0
  53. package/dist/components/Form/ControlledTabs.js +470 -0
  54. package/dist/components/Form/ControlledTabs.js.map +1 -0
  55. package/dist/components/Form/ControlledTabsPrimitives.d.ts +43 -0
  56. package/dist/components/Form/ControlledTabsPrimitives.js +47 -0
  57. package/dist/components/Form/ControlledTabsPrimitives.js.map +1 -0
  58. package/dist/components/Form/ControlledTextarea.d.ts +22 -0
  59. package/dist/components/Form/ControlledTextarea.js +46 -0
  60. package/dist/components/Form/ControlledTextarea.js.map +1 -0
  61. package/dist/components/Form/ControlledTimeline.d.ts +26 -0
  62. package/dist/components/Form/ControlledTimeline.js +57 -0
  63. package/dist/components/Form/ControlledTimeline.js.map +1 -0
  64. package/dist/components/Form/ControlledViewToggle.d.ts +74 -0
  65. package/dist/components/Form/ControlledViewToggle.js +157 -0
  66. package/dist/components/Form/ControlledViewToggle.js.map +1 -0
  67. package/dist/components/Form/ControlledVoiceTextarea.d.ts +11 -0
  68. package/dist/components/Form/ControlledVoiceTextarea.js +88 -0
  69. package/dist/components/Form/ControlledVoiceTextarea.js.map +1 -0
  70. package/dist/components/Form/CurrencyInput.d.ts +8 -0
  71. package/dist/components/Form/CurrencyInput.js +17 -0
  72. package/dist/components/Form/CurrencyInput.js.map +1 -0
  73. package/dist/components/Form/RichTextEditor.d.ts +80 -0
  74. package/dist/components/Form/RichTextEditor.js +546 -0
  75. package/dist/components/Form/RichTextEditor.js.map +1 -0
  76. package/dist/components/Form/attachments/AttachmentPreviewList.d.ts +8 -0
  77. package/dist/components/Form/attachments/AttachmentPreviewList.js +71 -0
  78. package/dist/components/Form/attachments/AttachmentPreviewList.js.map +1 -0
  79. package/dist/components/Form/attachments/FileDropzone.d.ts +12 -0
  80. package/dist/components/Form/attachments/FileDropzone.js +84 -0
  81. package/dist/components/Form/attachments/FileDropzone.js.map +1 -0
  82. package/dist/components/Navigation/ControlledBreadcrumb.d.ts +13 -0
  83. package/dist/components/Navigation/ControlledBreadcrumb.js +23 -0
  84. package/dist/components/Navigation/ControlledBreadcrumb.js.map +1 -0
  85. package/dist/components/Navigation/ErrorPage.d.ts +2 -0
  86. package/dist/components/Navigation/ErrorPage.js +27 -0
  87. package/dist/components/Navigation/ErrorPage.js.map +1 -0
  88. package/dist/components/Navigation/PageTitle.d.ts +41 -0
  89. package/dist/components/Navigation/PageTitle.js +147 -0
  90. package/dist/components/Navigation/PageTitle.js.map +1 -0
  91. package/dist/components/Navigation/PageTitleNavigationContext.d.ts +21 -0
  92. package/dist/components/Navigation/PageTitleNavigationContext.js +17 -0
  93. package/dist/components/Navigation/PageTitleNavigationContext.js.map +1 -0
  94. package/dist/components/Search/UnifiedSearchBar.d.ts +31 -0
  95. package/dist/components/Search/UnifiedSearchBar.js +167 -0
  96. package/dist/components/Search/UnifiedSearchBar.js.map +1 -0
  97. package/dist/components/Search/filters/ActiveFiltersBar.d.ts +15 -0
  98. package/dist/components/Search/filters/ActiveFiltersBar.js +48 -0
  99. package/dist/components/Search/filters/ActiveFiltersBar.js.map +1 -0
  100. package/dist/components/Search/filters/FilterChipsRow.d.ts +17 -0
  101. package/dist/components/Search/filters/FilterChipsRow.js +113 -0
  102. package/dist/components/Search/filters/FilterChipsRow.js.map +1 -0
  103. package/dist/components/Search/filters/FilterFieldControl.d.ts +19 -0
  104. package/dist/components/Search/filters/FilterFieldControl.js +387 -0
  105. package/dist/components/Search/filters/FilterFieldControl.js.map +1 -0
  106. package/dist/components/Search/filters/FiltersButton.d.ts +24 -0
  107. package/dist/components/Search/filters/FiltersButton.js +52 -0
  108. package/dist/components/Search/filters/FiltersButton.js.map +1 -0
  109. package/dist/components/Search/filters/FiltersForm.d.ts +18 -0
  110. package/dist/components/Search/filters/FiltersForm.js +112 -0
  111. package/dist/components/Search/filters/FiltersForm.js.map +1 -0
  112. package/dist/components/Search/filters/FiltersPanel.d.ts +32 -0
  113. package/dist/components/Search/filters/FiltersPanel.js +264 -0
  114. package/dist/components/Search/filters/FiltersPanel.js.map +1 -0
  115. package/dist/components/Search/filters/FiltersSummaryTooltip.d.ts +20 -0
  116. package/dist/components/Search/filters/FiltersSummaryTooltip.js +26 -0
  117. package/dist/components/Search/filters/FiltersSummaryTooltip.js.map +1 -0
  118. package/dist/components/Search/filters/filterTypes.d.ts +162 -0
  119. package/dist/components/Search/filters/filterTypes.js +2 -0
  120. package/dist/components/Search/filters/filterTypes.js.map +1 -0
  121. package/dist/components/Search/filters/filterValues.d.ts +22 -0
  122. package/dist/components/Search/filters/filterValues.js +91 -0
  123. package/dist/components/Search/filters/filterValues.js.map +1 -0
  124. package/dist/components/Search/filters/filtersLayout.d.ts +4 -0
  125. package/dist/components/Search/filters/filtersLayout.js +18 -0
  126. package/dist/components/Search/filters/filtersLayout.js.map +1 -0
  127. package/dist/components/Search/filters/index.d.ts +11 -0
  128. package/dist/components/Search/filters/index.js +32 -0
  129. package/dist/components/Search/filters/index.js.map +1 -0
  130. package/dist/components/Search/filters/useFilters.d.ts +33 -0
  131. package/dist/components/Search/filters/useFilters.js +162 -0
  132. package/dist/components/Search/filters/useFilters.js.map +1 -0
  133. package/dist/components/Search/index.d.ts +2 -0
  134. package/dist/components/Search/index.js +34 -0
  135. package/dist/components/Search/index.js.map +1 -0
  136. package/dist/components/UI/AccordionIcon.d.ts +10 -0
  137. package/dist/components/UI/AccordionIcon.js +22 -0
  138. package/dist/components/UI/AccordionIcon.js.map +1 -0
  139. package/dist/components/UI/AlertInfo/dismissedAlertsStore.d.ts +2 -0
  140. package/dist/components/UI/AlertInfo/dismissedAlertsStore.js +22 -0
  141. package/dist/components/UI/AlertInfo/dismissedAlertsStore.js.map +1 -0
  142. package/dist/components/UI/AlertInfo/index.d.ts +30 -0
  143. package/dist/components/UI/AlertInfo/index.js +78 -0
  144. package/dist/components/UI/AlertInfo/index.js.map +1 -0
  145. package/dist/components/UI/BaseDataCard.d.ts +25 -0
  146. package/dist/components/UI/BaseDataCard.js +163 -0
  147. package/dist/components/UI/BaseDataCard.js.map +1 -0
  148. package/dist/components/UI/BulkActionBar.d.ts +35 -0
  149. package/dist/components/UI/BulkActionBar.js +125 -0
  150. package/dist/components/UI/BulkActionBar.js.map +1 -0
  151. package/dist/components/UI/Chips/OutlinedChip.d.ts +42 -0
  152. package/dist/components/UI/Chips/OutlinedChip.js +183 -0
  153. package/dist/components/UI/Chips/OutlinedChip.js.map +1 -0
  154. package/dist/components/UI/Chips/StatusChip.d.ts +8 -0
  155. package/dist/components/UI/Chips/StatusChip.js +33 -0
  156. package/dist/components/UI/Chips/StatusChip.js.map +1 -0
  157. package/dist/components/UI/Chips/chipTones.d.ts +6 -0
  158. package/dist/components/UI/Chips/chipTones.js +53 -0
  159. package/dist/components/UI/Chips/chipTones.js.map +1 -0
  160. package/dist/components/UI/ColorSwatch.d.ts +30 -0
  161. package/dist/components/UI/ColorSwatch.js +53 -0
  162. package/dist/components/UI/ColorSwatch.js.map +1 -0
  163. package/dist/components/UI/Colors.d.ts +10 -0
  164. package/dist/components/UI/Colors.js +41 -0
  165. package/dist/components/UI/Colors.js.map +1 -0
  166. package/dist/components/UI/ControlledAccordion.d.ts +38 -0
  167. package/dist/components/UI/ControlledAccordion.js +89 -0
  168. package/dist/components/UI/ControlledAccordion.js.map +1 -0
  169. package/dist/components/UI/ControlledCollapse.d.ts +13 -0
  170. package/dist/components/UI/ControlledCollapse.js +32 -0
  171. package/dist/components/UI/ControlledCollapse.js.map +1 -0
  172. package/dist/components/UI/ControlledMenu.d.ts +73 -0
  173. package/dist/components/UI/ControlledMenu.js +231 -0
  174. package/dist/components/UI/ControlledMenu.js.map +1 -0
  175. package/dist/components/UI/ControlledPopover.d.ts +44 -0
  176. package/dist/components/UI/ControlledPopover.js +144 -0
  177. package/dist/components/UI/ControlledPopover.js.map +1 -0
  178. package/dist/components/UI/ControlledProgress.d.ts +13 -0
  179. package/dist/components/UI/ControlledProgress.js +46 -0
  180. package/dist/components/UI/ControlledProgress.js.map +1 -0
  181. package/dist/components/UI/ControlledSlider.d.ts +13 -0
  182. package/dist/components/UI/ControlledSlider.js +29 -0
  183. package/dist/components/UI/ControlledSlider.js.map +1 -0
  184. package/dist/components/UI/ControlledTooltip.d.ts +21 -0
  185. package/dist/components/UI/ControlledTooltip.js +140 -0
  186. package/dist/components/UI/ControlledTooltip.js.map +1 -0
  187. package/dist/components/UI/CustomBadge.d.ts +15 -0
  188. package/dist/components/UI/CustomBadge.js +34 -0
  189. package/dist/components/UI/CustomBadge.js.map +1 -0
  190. package/dist/components/UI/CustomCard.d.ts +13 -0
  191. package/dist/components/UI/CustomCard.js +36 -0
  192. package/dist/components/UI/CustomCard.js.map +1 -0
  193. package/dist/components/UI/CustomChart.d.ts +21 -0
  194. package/dist/components/UI/CustomChart.js +108 -0
  195. package/dist/components/UI/CustomChart.js.map +1 -0
  196. package/dist/components/UI/DataTable/DataTable.d.ts +100 -0
  197. package/dist/components/UI/DataTable/DataTable.js +546 -0
  198. package/dist/components/UI/DataTable/DataTable.js.map +1 -0
  199. package/dist/components/UI/DataTable/DataTableAutoCard.d.ts +20 -0
  200. package/dist/components/UI/DataTable/DataTableAutoCard.js +39 -0
  201. package/dist/components/UI/DataTable/DataTableAutoCard.js.map +1 -0
  202. package/dist/components/UI/DataTable/DataTableBody.d.ts +29 -0
  203. package/dist/components/UI/DataTable/DataTableBody.js +243 -0
  204. package/dist/components/UI/DataTable/DataTableBody.js.map +1 -0
  205. package/dist/components/UI/DataTable/DataTableBodyCell.d.ts +21 -0
  206. package/dist/components/UI/DataTable/DataTableBodyCell.js +77 -0
  207. package/dist/components/UI/DataTable/DataTableBodyCell.js.map +1 -0
  208. package/dist/components/UI/DataTable/DataTableBulkEditButton.d.ts +11 -0
  209. package/dist/components/UI/DataTable/DataTableBulkEditButton.js +24 -0
  210. package/dist/components/UI/DataTable/DataTableBulkEditButton.js.map +1 -0
  211. package/dist/components/UI/DataTable/DataTableBulkEditDialog.d.ts +25 -0
  212. package/dist/components/UI/DataTable/DataTableBulkEditDialog.js +251 -0
  213. package/dist/components/UI/DataTable/DataTableBulkEditDialog.js.map +1 -0
  214. package/dist/components/UI/DataTable/DataTableColumnToggle.d.ts +34 -0
  215. package/dist/components/UI/DataTable/DataTableColumnToggle.js +168 -0
  216. package/dist/components/UI/DataTable/DataTableColumnToggle.js.map +1 -0
  217. package/dist/components/UI/DataTable/DataTableDetailModal.d.ts +17 -0
  218. package/dist/components/UI/DataTable/DataTableDetailModal.js +109 -0
  219. package/dist/components/UI/DataTable/DataTableDetailModal.js.map +1 -0
  220. package/dist/components/UI/DataTable/DataTableDetailPanel.d.ts +21 -0
  221. package/dist/components/UI/DataTable/DataTableDetailPanel.js +51 -0
  222. package/dist/components/UI/DataTable/DataTableDetailPanel.js.map +1 -0
  223. package/dist/components/UI/DataTable/DataTableDetailTable.d.ts +35 -0
  224. package/dist/components/UI/DataTable/DataTableDetailTable.js +129 -0
  225. package/dist/components/UI/DataTable/DataTableDetailTable.js.map +1 -0
  226. package/dist/components/UI/DataTable/DataTableEditModeButton.d.ts +12 -0
  227. package/dist/components/UI/DataTable/DataTableEditModeButton.js +29 -0
  228. package/dist/components/UI/DataTable/DataTableEditModeButton.js.map +1 -0
  229. package/dist/components/UI/DataTable/DataTableFilters.d.ts +20 -0
  230. package/dist/components/UI/DataTable/DataTableFilters.js +64 -0
  231. package/dist/components/UI/DataTable/DataTableFilters.js.map +1 -0
  232. package/dist/components/UI/DataTable/DataTableHead.d.ts +27 -0
  233. package/dist/components/UI/DataTable/DataTableHead.js +198 -0
  234. package/dist/components/UI/DataTable/DataTableHead.js.map +1 -0
  235. package/dist/components/UI/DataTable/DataTablePagination.d.ts +15 -0
  236. package/dist/components/UI/DataTable/DataTablePagination.js +145 -0
  237. package/dist/components/UI/DataTable/DataTablePagination.js.map +1 -0
  238. package/dist/components/UI/DataTable/DataTableSaveButton.d.ts +13 -0
  239. package/dist/components/UI/DataTable/DataTableSaveButton.js +21 -0
  240. package/dist/components/UI/DataTable/DataTableSaveButton.js.map +1 -0
  241. package/dist/components/UI/DataTable/DataTableSegmentedTabs.d.ts +8 -0
  242. package/dist/components/UI/DataTable/DataTableSegmentedTabs.js +35 -0
  243. package/dist/components/UI/DataTable/DataTableSegmentedTabs.js.map +1 -0
  244. package/dist/components/UI/DataTable/DataTableStates.d.ts +17 -0
  245. package/dist/components/UI/DataTable/DataTableStates.js +59 -0
  246. package/dist/components/UI/DataTable/DataTableStates.js.map +1 -0
  247. package/dist/components/UI/DataTable/DataTableToolbar.d.ts +28 -0
  248. package/dist/components/UI/DataTable/DataTableToolbar.js +109 -0
  249. package/dist/components/UI/DataTable/DataTableToolbar.js.map +1 -0
  250. package/dist/components/UI/DataTable/applyDataTableFilters.d.ts +16 -0
  251. package/dist/components/UI/DataTable/applyDataTableFilters.js +53 -0
  252. package/dist/components/UI/DataTable/applyDataTableFilters.js.map +1 -0
  253. package/dist/components/UI/DataTable/cells/DataTableActionsCell.d.ts +7 -0
  254. package/dist/components/UI/DataTable/cells/DataTableActionsCell.js +55 -0
  255. package/dist/components/UI/DataTable/cells/DataTableActionsCell.js.map +1 -0
  256. package/dist/components/UI/DataTable/cells/DataTableCell.d.ts +15 -0
  257. package/dist/components/UI/DataTable/cells/DataTableCell.js +63 -0
  258. package/dist/components/UI/DataTable/cells/DataTableCell.js.map +1 -0
  259. package/dist/components/UI/DataTable/cells/DataTableCodeCell.d.ts +6 -0
  260. package/dist/components/UI/DataTable/cells/DataTableCodeCell.js +7 -0
  261. package/dist/components/UI/DataTable/cells/DataTableCodeCell.js.map +1 -0
  262. package/dist/components/UI/DataTable/cells/DataTableColorCell.d.ts +7 -0
  263. package/dist/components/UI/DataTable/cells/DataTableColorCell.js +10 -0
  264. package/dist/components/UI/DataTable/cells/DataTableColorCell.js.map +1 -0
  265. package/dist/components/UI/DataTable/cells/DataTableCountCell.d.ts +5 -0
  266. package/dist/components/UI/DataTable/cells/DataTableCountCell.js +7 -0
  267. package/dist/components/UI/DataTable/cells/DataTableCountCell.js.map +1 -0
  268. package/dist/components/UI/DataTable/cells/DataTableDateCell.d.ts +5 -0
  269. package/dist/components/UI/DataTable/cells/DataTableDateCell.js +12 -0
  270. package/dist/components/UI/DataTable/cells/DataTableDateCell.js.map +1 -0
  271. package/dist/components/UI/DataTable/cells/DataTableEditableCell.d.ts +23 -0
  272. package/dist/components/UI/DataTable/cells/DataTableEditableCell.js +242 -0
  273. package/dist/components/UI/DataTable/cells/DataTableEditableCell.js.map +1 -0
  274. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.d.ts +10 -0
  275. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js +7 -0
  276. package/dist/components/UI/DataTable/cells/DataTableEmpenhoCell.js.map +1 -0
  277. package/dist/components/UI/DataTable/cells/DataTableOriginCell.d.ts +6 -0
  278. package/dist/components/UI/DataTable/cells/DataTableOriginCell.js +25 -0
  279. package/dist/components/UI/DataTable/cells/DataTableOriginCell.js.map +1 -0
  280. package/dist/components/UI/DataTable/cells/DataTableStatusCell.d.ts +6 -0
  281. package/dist/components/UI/DataTable/cells/DataTableStatusCell.js +24 -0
  282. package/dist/components/UI/DataTable/cells/DataTableStatusCell.js.map +1 -0
  283. package/dist/components/UI/DataTable/cells/DataTableTagCell.d.ts +6 -0
  284. package/dist/components/UI/DataTable/cells/DataTableTagCell.js +25 -0
  285. package/dist/components/UI/DataTable/cells/DataTableTagCell.js.map +1 -0
  286. package/dist/components/UI/DataTable/cells/DataTableTextCell.d.ts +6 -0
  287. package/dist/components/UI/DataTable/cells/DataTableTextCell.js +7 -0
  288. package/dist/components/UI/DataTable/cells/DataTableTextCell.js.map +1 -0
  289. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.d.ts +6 -0
  290. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js +10 -0
  291. package/dist/components/UI/DataTable/cells/DataTableThumbnailCell.js.map +1 -0
  292. package/dist/components/UI/DataTable/dataTableClasses.d.ts +12 -0
  293. package/dist/components/UI/DataTable/dataTableClasses.js +29 -0
  294. package/dist/components/UI/DataTable/dataTableClasses.js.map +1 -0
  295. package/dist/components/UI/DataTable/dataTableColumnWidths.d.ts +15 -0
  296. package/dist/components/UI/DataTable/dataTableColumnWidths.js +153 -0
  297. package/dist/components/UI/DataTable/dataTableColumnWidths.js.map +1 -0
  298. package/dist/components/UI/DataTable/dataTableColumnsStore.d.ts +12 -0
  299. package/dist/components/UI/DataTable/dataTableColumnsStore.js +68 -0
  300. package/dist/components/UI/DataTable/dataTableColumnsStore.js.map +1 -0
  301. package/dist/components/UI/DataTable/dataTableMotion.d.ts +6 -0
  302. package/dist/components/UI/DataTable/dataTableMotion.js +15 -0
  303. package/dist/components/UI/DataTable/dataTableMotion.js.map +1 -0
  304. package/dist/components/UI/DataTable/grid/GridFillHandle.d.ts +8 -0
  305. package/dist/components/UI/DataTable/grid/GridFillHandle.js +70 -0
  306. package/dist/components/UI/DataTable/grid/GridFillHandle.js.map +1 -0
  307. package/dist/components/UI/DataTable/grid/GridProvider.d.ts +31 -0
  308. package/dist/components/UI/DataTable/grid/GridProvider.js +85 -0
  309. package/dist/components/UI/DataTable/grid/GridProvider.js.map +1 -0
  310. package/dist/components/UI/DataTable/grid/fill/fillStrategies.d.ts +19 -0
  311. package/dist/components/UI/DataTable/grid/fill/fillStrategies.js +73 -0
  312. package/dist/components/UI/DataTable/grid/fill/fillStrategies.js.map +1 -0
  313. package/dist/components/UI/DataTable/grid/gridStore.d.ts +69 -0
  314. package/dist/components/UI/DataTable/grid/gridStore.js +219 -0
  315. package/dist/components/UI/DataTable/grid/gridStore.js.map +1 -0
  316. package/dist/components/UI/DataTable/grid/gridTypes.d.ts +47 -0
  317. package/dist/components/UI/DataTable/grid/gridTypes.js +27 -0
  318. package/dist/components/UI/DataTable/grid/gridTypes.js.map +1 -0
  319. package/dist/components/UI/DataTable/grid/useGridFillApply.d.ts +18 -0
  320. package/dist/components/UI/DataTable/grid/useGridFillApply.js +74 -0
  321. package/dist/components/UI/DataTable/grid/useGridFillApply.js.map +1 -0
  322. package/dist/components/UI/DataTable/grid/useGridInstance.d.ts +27 -0
  323. package/dist/components/UI/DataTable/grid/useGridInstance.js +41 -0
  324. package/dist/components/UI/DataTable/grid/useGridInstance.js.map +1 -0
  325. package/dist/components/UI/DataTable/grid/useGridKeyboard.d.ts +17 -0
  326. package/dist/components/UI/DataTable/grid/useGridKeyboard.js +114 -0
  327. package/dist/components/UI/DataTable/grid/useGridKeyboard.js.map +1 -0
  328. package/dist/components/UI/DataTable/index.d.ts +19 -0
  329. package/dist/components/UI/DataTable/index.js +34 -0
  330. package/dist/components/UI/DataTable/index.js.map +1 -0
  331. package/dist/components/UI/DataTable/types.d.ts +513 -0
  332. package/dist/components/UI/DataTable/types.js +13 -0
  333. package/dist/components/UI/DataTable/types.js.map +1 -0
  334. package/dist/components/UI/DataTable/useCellEditingState.d.ts +20 -0
  335. package/dist/components/UI/DataTable/useCellEditingState.js +33 -0
  336. package/dist/components/UI/DataTable/useCellEditingState.js.map +1 -0
  337. package/dist/components/UI/DataTable/useColumnOrder.d.ts +25 -0
  338. package/dist/components/UI/DataTable/useColumnOrder.js +94 -0
  339. package/dist/components/UI/DataTable/useColumnOrder.js.map +1 -0
  340. package/dist/components/UI/DataTable/useColumnSizing.d.ts +9 -0
  341. package/dist/components/UI/DataTable/useColumnSizing.js +21 -0
  342. package/dist/components/UI/DataTable/useColumnSizing.js.map +1 -0
  343. package/dist/components/UI/DataTable/useColumnVisibility.d.ts +19 -0
  344. package/dist/components/UI/DataTable/useColumnVisibility.js +47 -0
  345. package/dist/components/UI/DataTable/useColumnVisibility.js.map +1 -0
  346. package/dist/components/UI/DataTable/useDataTableCommitQueue.d.ts +69 -0
  347. package/dist/components/UI/DataTable/useDataTableCommitQueue.js +220 -0
  348. package/dist/components/UI/DataTable/useDataTableCommitQueue.js.map +1 -0
  349. package/dist/components/UI/DataTable/useDataTableEditBuffer.d.ts +36 -0
  350. package/dist/components/UI/DataTable/useDataTableEditBuffer.js +29 -0
  351. package/dist/components/UI/DataTable/useDataTableEditBuffer.js.map +1 -0
  352. package/dist/components/UI/DataTable/useDataTableInstance.d.ts +65 -0
  353. package/dist/components/UI/DataTable/useDataTableInstance.js +306 -0
  354. package/dist/components/UI/DataTable/useDataTableInstance.js.map +1 -0
  355. package/dist/components/UI/DataTable/useDataTableSource.d.ts +85 -0
  356. package/dist/components/UI/DataTable/useDataTableSource.js +199 -0
  357. package/dist/components/UI/DataTable/useDataTableSource.js.map +1 -0
  358. package/dist/components/UI/DataTable/useFlipRows.d.ts +22 -0
  359. package/dist/components/UI/DataTable/useFlipRows.js +90 -0
  360. package/dist/components/UI/DataTable/useFlipRows.js.map +1 -0
  361. package/dist/components/UI/ErrorBoundary.d.ts +20 -0
  362. package/dist/components/UI/ErrorBoundary.js +36 -0
  363. package/dist/components/UI/ErrorBoundary.js.map +1 -0
  364. package/dist/components/UI/GeneratedByAI.d.ts +2 -0
  365. package/dist/components/UI/GeneratedByAI.js +12 -0
  366. package/dist/components/UI/GeneratedByAI.js.map +1 -0
  367. package/dist/components/UI/HorizontalScrollArea.d.ts +22 -0
  368. package/dist/components/UI/HorizontalScrollArea.js +73 -0
  369. package/dist/components/UI/HorizontalScrollArea.js.map +1 -0
  370. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.d.ts +15 -0
  371. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js +144 -0
  372. package/dist/components/UI/ImageAiAdjust/ImageAiAdjustDialog.js.map +1 -0
  373. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.d.ts +29 -0
  374. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js +84 -0
  375. package/dist/components/UI/ImageAiAdjust/useImageAiAdjust.js.map +1 -0
  376. package/dist/components/UI/ImageAnnotator/AnnotationEditor.d.ts +12 -0
  377. package/dist/components/UI/ImageAnnotator/AnnotationEditor.js +267 -0
  378. package/dist/components/UI/ImageAnnotator/AnnotationEditor.js.map +1 -0
  379. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.d.ts +13 -0
  380. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js +58 -0
  381. package/dist/components/UI/ImageAnnotator/ImageAnnotationDialog.js.map +1 -0
  382. package/dist/components/UI/ImageAnnotator/annotationStyle.d.ts +28 -0
  383. package/dist/components/UI/ImageAnnotator/annotationStyle.js +56 -0
  384. package/dist/components/UI/ImageAnnotator/annotationStyle.js.map +1 -0
  385. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.d.ts +17 -0
  386. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js +329 -0
  387. package/dist/components/UI/ImageAnnotator/canvas/AnnotationElementNode.js.map +1 -0
  388. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.d.ts +10 -0
  389. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js +125 -0
  390. package/dist/components/UI/ImageAnnotator/canvas/AnnotationSelection.js.map +1 -0
  391. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.d.ts +19 -0
  392. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js +216 -0
  393. package/dist/components/UI/ImageAnnotator/canvas/AnnotationStage.js.map +1 -0
  394. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.d.ts +15 -0
  395. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js +77 -0
  396. package/dist/components/UI/ImageAnnotator/components/AnnotationActionBar.js.map +1 -0
  397. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.d.ts +11 -0
  398. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js +69 -0
  399. package/dist/components/UI/ImageAnnotator/components/AnnotationColorPopover.js.map +1 -0
  400. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.d.ts +8 -0
  401. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js +58 -0
  402. package/dist/components/UI/ImageAnnotator/components/AnnotationElementActions.js.map +1 -0
  403. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.d.ts +13 -0
  404. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js +183 -0
  405. package/dist/components/UI/ImageAnnotator/components/AnnotationStyleBar.js.map +1 -0
  406. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.d.ts +15 -0
  407. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js +78 -0
  408. package/dist/components/UI/ImageAnnotator/components/AnnotationTextOverlay.js.map +1 -0
  409. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.d.ts +15 -0
  410. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js +46 -0
  411. package/dist/components/UI/ImageAnnotator/components/AnnotationToolButton.js.map +1 -0
  412. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.d.ts +10 -0
  413. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js +80 -0
  414. package/dist/components/UI/ImageAnnotator/components/AnnotationToolbar.js.map +1 -0
  415. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.d.ts +21 -0
  416. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js +45 -0
  417. package/dist/components/UI/ImageAnnotator/helpers/annotationCanvas.js.map +1 -0
  418. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.d.ts +15 -0
  419. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js +165 -0
  420. package/dist/components/UI/ImageAnnotator/helpers/annotationElements.js.map +1 -0
  421. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.d.ts +15 -0
  422. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js +23 -0
  423. package/dist/components/UI/ImageAnnotator/helpers/annotationExport.js.map +1 -0
  424. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.d.ts +8 -0
  425. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js +10 -0
  426. package/dist/components/UI/ImageAnnotator/helpers/konvaFullBuild.js.map +1 -0
  427. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.d.ts +9 -0
  428. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js +56 -0
  429. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationBaseImage.js.map +1 -0
  430. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.d.ts +27 -0
  431. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js +149 -0
  432. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationDocument.js.map +1 -0
  433. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.d.ts +14 -0
  434. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js +79 -0
  435. package/dist/components/UI/ImageAnnotator/hooks/useAnnotationShortcuts.js.map +1 -0
  436. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.d.ts +5 -0
  437. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js +23 -0
  438. package/dist/components/UI/ImageAnnotator/hooks/useCoarsePointer.js.map +1 -0
  439. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.d.ts +2 -0
  440. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js +27 -0
  441. package/dist/components/UI/ImageAnnotator/hooks/useHtmlImage.js.map +1 -0
  442. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.d.ts +89 -0
  443. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js +13 -0
  444. package/dist/components/UI/ImageAnnotator/interfaces/annotationDocument.js.map +1 -0
  445. package/dist/components/UI/ImagePlaceholder.d.ts +24 -0
  446. package/dist/components/UI/ImagePlaceholder.js +26 -0
  447. package/dist/components/UI/ImagePlaceholder.js.map +1 -0
  448. package/dist/components/UI/ImageZoomOverlay.d.ts +7 -0
  449. package/dist/components/UI/ImageZoomOverlay.js +49 -0
  450. package/dist/components/UI/ImageZoomOverlay.js.map +1 -0
  451. package/dist/components/UI/InformationCard.d.ts +26 -0
  452. package/dist/components/UI/InformationCard.js +89 -0
  453. package/dist/components/UI/InformationCard.js.map +1 -0
  454. package/dist/components/UI/Kanban/KanbanBoard.d.ts +26 -0
  455. package/dist/components/UI/Kanban/KanbanBoard.js +89 -0
  456. package/dist/components/UI/Kanban/KanbanBoard.js.map +1 -0
  457. package/dist/components/UI/Kanban/KanbanCard.d.ts +22 -0
  458. package/dist/components/UI/Kanban/KanbanCard.js +47 -0
  459. package/dist/components/UI/Kanban/KanbanCard.js.map +1 -0
  460. package/dist/components/UI/Kanban/KanbanLane.d.ts +37 -0
  461. package/dist/components/UI/Kanban/KanbanLane.js +77 -0
  462. package/dist/components/UI/Kanban/KanbanLane.js.map +1 -0
  463. package/dist/components/UI/Kanban/index.d.ts +4 -0
  464. package/dist/components/UI/Kanban/index.js +11 -0
  465. package/dist/components/UI/Kanban/index.js.map +1 -0
  466. package/dist/components/UI/Kanban/kanbanBoardContext.d.ts +13 -0
  467. package/dist/components/UI/Kanban/kanbanBoardContext.js +13 -0
  468. package/dist/components/UI/Kanban/kanbanBoardContext.js.map +1 -0
  469. package/dist/components/UI/LazyMarkdown.d.ts +5 -0
  470. package/dist/components/UI/LazyMarkdown.js +8 -0
  471. package/dist/components/UI/LazyMarkdown.js.map +1 -0
  472. package/dist/components/UI/LoadingPage.d.ts +2 -0
  473. package/dist/components/UI/LoadingPage.js +13 -0
  474. package/dist/components/UI/LoadingPage.js.map +1 -0
  475. package/dist/components/UI/LoadingSpinner.d.ts +14 -0
  476. package/dist/components/UI/LoadingSpinner.js +32 -0
  477. package/dist/components/UI/LoadingSpinner.js.map +1 -0
  478. package/dist/components/UI/MaterialSymbol/consts.d.ts +2 -0
  479. package/dist/components/UI/MaterialSymbol/consts.js +3472 -0
  480. package/dist/components/UI/MaterialSymbol/consts.js.map +1 -0
  481. package/dist/components/UI/MaterialSymbol/index.d.ts +18 -0
  482. package/dist/components/UI/MaterialSymbol/index.js +46 -0
  483. package/dist/components/UI/MaterialSymbol/index.js.map +1 -0
  484. package/dist/components/UI/MaterialSymbol/types.d.ts +37 -0
  485. package/dist/components/UI/MaterialSymbol/types.js +2 -0
  486. package/dist/components/UI/MaterialSymbol/types.js.map +1 -0
  487. package/dist/components/UI/NoDataFound/index.d.ts +31 -0
  488. package/dist/components/UI/NoDataFound/index.js +215 -0
  489. package/dist/components/UI/NoDataFound/index.js.map +1 -0
  490. package/dist/components/UI/NoDataFound/noDataFoundPresets.d.ts +31 -0
  491. package/dist/components/UI/NoDataFound/noDataFoundPresets.js +99 -0
  492. package/dist/components/UI/NoDataFound/noDataFoundPresets.js.map +1 -0
  493. package/dist/components/UI/ReferenceCard.d.ts +16 -0
  494. package/dist/components/UI/ReferenceCard.js +59 -0
  495. package/dist/components/UI/ReferenceCard.js.map +1 -0
  496. package/dist/components/UI/RichTextContent.d.ts +14 -0
  497. package/dist/components/UI/RichTextContent.js +28 -0
  498. package/dist/components/UI/RichTextContent.js.map +1 -0
  499. package/dist/components/UI/SkeletonLoading.d.ts +9 -0
  500. package/dist/components/UI/SkeletonLoading.js +20 -0
  501. package/dist/components/UI/SkeletonLoading.js.map +1 -0
  502. package/dist/components/UI/ThreeDots.d.ts +11 -0
  503. package/dist/components/UI/ThreeDots.js +18 -0
  504. package/dist/components/UI/ThreeDots.js.map +1 -0
  505. package/dist/components/UI/Toast.d.ts +16 -0
  506. package/dist/components/UI/Toast.js +81 -0
  507. package/dist/components/UI/Toast.js.map +1 -0
  508. package/dist/components/UI/ToastHost.d.ts +2 -0
  509. package/dist/components/UI/ToastHost.js +25 -0
  510. package/dist/components/UI/ToastHost.js.map +1 -0
  511. package/dist/components/UI/TypingEffect.d.ts +10 -0
  512. package/dist/components/UI/TypingEffect.js +31 -0
  513. package/dist/components/UI/TypingEffect.js.map +1 -0
  514. package/dist/components/UI/UmodeLogo.d.ts +10 -0
  515. package/dist/components/UI/UmodeLogo.js +128 -0
  516. package/dist/components/UI/UmodeLogo.js.map +1 -0
  517. package/dist/components/UI/UsersAvatar.d.ts +7 -0
  518. package/dist/components/UI/UsersAvatar.js +29 -0
  519. package/dist/components/UI/UsersAvatar.js.map +1 -0
  520. package/dist/components/UI/access/UiAccessContext.d.ts +21 -0
  521. package/dist/components/UI/access/UiAccessContext.js +14 -0
  522. package/dist/components/UI/access/UiAccessContext.js.map +1 -0
  523. package/dist/components/UI/cells/ArrayCell.d.ts +5 -0
  524. package/dist/components/UI/cells/ArrayCell.js +25 -0
  525. package/dist/components/UI/cells/ArrayCell.js.map +1 -0
  526. package/dist/components/UI/cells/BooleanCell.d.ts +5 -0
  527. package/dist/components/UI/cells/BooleanCell.js +22 -0
  528. package/dist/components/UI/cells/BooleanCell.js.map +1 -0
  529. package/dist/components/UI/cells/DetailsTableCell.d.ts +7 -0
  530. package/dist/components/UI/cells/DetailsTableCell.js +30 -0
  531. package/dist/components/UI/cells/DetailsTableCell.js.map +1 -0
  532. package/dist/components/UI/cells/ProductImageCell.d.ts +5 -0
  533. package/dist/components/UI/cells/ProductImageCell.js +21 -0
  534. package/dist/components/UI/cells/ProductImageCell.js.map +1 -0
  535. package/dist/components/UI/cells/UrlLinkCell.d.ts +6 -0
  536. package/dist/components/UI/cells/UrlLinkCell.js +19 -0
  537. package/dist/components/UI/cells/UrlLinkCell.js.map +1 -0
  538. package/dist/components/Upload/SimpleUploaderComponent.d.ts +9 -0
  539. package/dist/components/Upload/SimpleUploaderComponent.js +72 -0
  540. package/dist/components/Upload/SimpleUploaderComponent.js.map +1 -0
  541. package/dist/components/Upload/UploaderComponent.d.ts +29 -0
  542. package/dist/components/Upload/UploaderComponent.js +241 -0
  543. package/dist/components/Upload/UploaderComponent.js.map +1 -0
  544. package/dist/components/Upload/XlsExportButton.d.ts +13 -0
  545. package/dist/components/Upload/XlsExportButton.js +47 -0
  546. package/dist/components/Upload/XlsExportButton.js.map +1 -0
  547. package/dist/helpers/composeRefs.d.ts +7 -0
  548. package/dist/helpers/composeRefs.js +14 -0
  549. package/dist/helpers/composeRefs.js.map +1 -0
  550. package/dist/helpers/dateHelpers.d.ts +47 -0
  551. package/dist/helpers/dateHelpers.js +69 -0
  552. package/dist/helpers/dateHelpers.js.map +1 -0
  553. package/dist/helpers/fileAttachments.d.ts +3 -0
  554. package/dist/helpers/fileAttachments.js +17 -0
  555. package/dist/helpers/fileAttachments.js.map +1 -0
  556. package/dist/helpers/formatHelpers.d.ts +36 -0
  557. package/dist/helpers/formatHelpers.js +65 -0
  558. package/dist/helpers/formatHelpers.js.map +1 -0
  559. package/dist/helpers/imageCompression.d.ts +5 -0
  560. package/dist/helpers/imageCompression.js +49 -0
  561. package/dist/helpers/imageCompression.js.map +1 -0
  562. package/dist/helpers/imageFile.d.ts +16 -0
  563. package/dist/helpers/imageFile.js +59 -0
  564. package/dist/helpers/imageFile.js.map +1 -0
  565. package/dist/helpers/layeredSurfaces.d.ts +10 -0
  566. package/dist/helpers/layeredSurfaces.js +14 -0
  567. package/dist/helpers/layeredSurfaces.js.map +1 -0
  568. package/dist/helpers/mathHelpers.d.ts +14 -0
  569. package/dist/helpers/mathHelpers.js +13 -0
  570. package/dist/helpers/mathHelpers.js.map +1 -0
  571. package/dist/helpers/mergeClasses.d.ts +6 -0
  572. package/dist/helpers/mergeClasses.js +12 -0
  573. package/dist/helpers/mergeClasses.js.map +1 -0
  574. package/dist/helpers/moduleLoadErrorHelpers.d.ts +1 -0
  575. package/dist/helpers/moduleLoadErrorHelpers.js +25 -0
  576. package/dist/helpers/moduleLoadErrorHelpers.js.map +1 -0
  577. package/dist/helpers/objectHelpers.d.ts +13 -0
  578. package/dist/helpers/objectHelpers.js +60 -0
  579. package/dist/helpers/objectHelpers.js.map +1 -0
  580. package/dist/helpers/richText.d.ts +37 -0
  581. package/dist/helpers/richText.js +171 -0
  582. package/dist/helpers/richText.js.map +1 -0
  583. package/dist/helpers/stringHelpers.d.ts +45 -0
  584. package/dist/helpers/stringHelpers.js +57 -0
  585. package/dist/helpers/stringHelpers.js.map +1 -0
  586. package/dist/helpers/themeTokens.d.ts +28 -0
  587. package/dist/helpers/themeTokens.js +33 -0
  588. package/dist/helpers/themeTokens.js.map +1 -0
  589. package/dist/helpers/uiErrorPresenter.d.ts +21 -0
  590. package/dist/helpers/uiErrorPresenter.js +10 -0
  591. package/dist/helpers/uiErrorPresenter.js.map +1 -0
  592. package/dist/helpers/uiLogger.d.ts +8 -0
  593. package/dist/helpers/uiLogger.js +16 -0
  594. package/dist/helpers/uiLogger.js.map +1 -0
  595. package/dist/helpers/uiPreferences.d.ts +13 -0
  596. package/dist/helpers/uiPreferences.js +35 -0
  597. package/dist/helpers/uiPreferences.js.map +1 -0
  598. package/dist/helpers/urlParamSync.d.ts +19 -0
  599. package/dist/helpers/urlParamSync.js +54 -0
  600. package/dist/helpers/urlParamSync.js.map +1 -0
  601. package/dist/helpers/utilityHelpers.d.ts +81 -0
  602. package/dist/helpers/utilityHelpers.js +133 -0
  603. package/dist/helpers/utilityHelpers.js.map +1 -0
  604. package/dist/helpers/validationHelpers.d.ts +36 -0
  605. package/dist/helpers/validationHelpers.js +44 -0
  606. package/dist/helpers/validationHelpers.js.map +1 -0
  607. package/dist/hooks/useAnchoredFloating.d.ts +22 -0
  608. package/dist/hooks/useAnchoredFloating.js +59 -0
  609. package/dist/hooks/useAnchoredFloating.js.map +1 -0
  610. package/dist/hooks/useBreakpoint.d.ts +16 -0
  611. package/dist/hooks/useBreakpoint.js +47 -0
  612. package/dist/hooks/useBreakpoint.js.map +1 -0
  613. package/dist/hooks/useDebounce.d.ts +8 -0
  614. package/dist/hooks/useDebounce.js +36 -0
  615. package/dist/hooks/useDebounce.js.map +1 -0
  616. package/dist/hooks/useFileAttachments.d.ts +43 -0
  617. package/dist/hooks/useFileAttachments.js +158 -0
  618. package/dist/hooks/useFileAttachments.js.map +1 -0
  619. package/dist/hooks/useHoverCapable.d.ts +6 -0
  620. package/dist/hooks/useHoverCapable.js +28 -0
  621. package/dist/hooks/useHoverCapable.js.map +1 -0
  622. package/dist/hooks/useInlineEditor.d.ts +5 -0
  623. package/dist/hooks/useInlineEditor.js +41 -0
  624. package/dist/hooks/useInlineEditor.js.map +1 -0
  625. package/dist/hooks/useMobile.d.ts +7 -0
  626. package/dist/hooks/useMobile.js +8 -0
  627. package/dist/hooks/useMobile.js.map +1 -0
  628. package/dist/hooks/useNotification.d.ts +38 -0
  629. package/dist/hooks/useNotification.js +39 -0
  630. package/dist/hooks/useNotification.js.map +1 -0
  631. package/dist/hooks/useResolvedTheme.d.ts +7 -0
  632. package/dist/hooks/useResolvedTheme.js +15 -0
  633. package/dist/hooks/useResolvedTheme.js.map +1 -0
  634. package/dist/hooks/useVoiceTranscription.d.ts +25 -0
  635. package/dist/hooks/useVoiceTranscription.js +106 -0
  636. package/dist/hooks/useVoiceTranscription.js.map +1 -0
  637. package/dist/index.d.ts +50 -0
  638. package/dist/index.js +125 -0
  639. package/dist/index.js.map +1 -0
  640. package/dist/interfaces/IFileAttachment.d.ts +18 -0
  641. package/dist/interfaces/IFileAttachment.js +2 -0
  642. package/dist/interfaces/IFileAttachment.js.map +1 -0
  643. package/dist/interfaces/IFilterOption.d.ts +10 -0
  644. package/dist/interfaces/IFilterOption.js +2 -0
  645. package/dist/interfaces/IFilterOption.js.map +1 -0
  646. package/dist/locales/en/ui.json.d.ts +470 -0
  647. package/dist/locales/en/ui.json.js +99 -0
  648. package/dist/locales/en/ui.json.js.map +1 -0
  649. package/dist/locales/index.d.ts +938 -0
  650. package/dist/locales/index.js +7 -0
  651. package/dist/locales/index.js.map +1 -0
  652. package/dist/locales/pt/ui.json.d.ts +470 -0
  653. package/dist/locales/pt/ui.json.js +99 -0
  654. package/dist/locales/pt/ui.json.js.map +1 -0
  655. package/dist/motion/index.d.ts +2 -0
  656. package/dist/motion/index.js +17 -0
  657. package/dist/motion/index.js.map +1 -0
  658. package/dist/motion/motionPresets.d.ts +44 -0
  659. package/dist/motion/motionPresets.js +67 -0
  660. package/dist/motion/motionPresets.js.map +1 -0
  661. package/dist/motion/motionTokens.d.ts +40 -0
  662. package/dist/motion/motionTokens.js +29 -0
  663. package/dist/motion/motionTokens.js.map +1 -0
  664. package/package.json +174 -0
  665. package/src/assets/styles/theme.css +381 -0
  666. package/tailwind-plugins/glass.js +167 -0
  667. package/tailwind.preset.js +367 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"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';\nimport { useLocation, useSearchParams } from 'react-router-dom';\n\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\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 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 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\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 = useLocation();\n const [searchParams, setSearchParams] = useSearchParams();\n const urlParamOwnerIdRef = useRef<object>({});\n const scrollRef = useRef<HTMLDivElement>(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 const [clippedTabValues, setClippedTabValues] = useState<Array<string>>([]);\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?.ignoreActiveTab === true) 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 const EDGE_TOLERANCE = 1;\n const containerRect = container.getBoundingClientRect();\n const clipped: Array<string> = [];\n container.querySelectorAll('[data-value]').forEach((node) => {\n const element = node as HTMLElement;\n const value = element.getAttribute('data-value');\n if (!value || value === activeTab) return;\n const rect = element.getBoundingClientRect();\n const crossesLeftEdge =\n rect.left < containerRect.left - EDGE_TOLERANCE && rect.right > containerRect.left + EDGE_TOLERANCE;\n const crossesRightEdge =\n rect.right > containerRect.right + EDGE_TOLERANCE && rect.left < containerRect.right - EDGE_TOLERANCE;\n if (crossesLeftEdge || crossesRightEdge) clipped.push(value);\n });\n setClippedTabValues((prev) =>\n prev.length === clipped.length && prev.every((value, index) => value === clipped[index]) ? prev : clipped,\n );\n }, [activeTab]);\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 useEffect(() => {\n if (!scrollableHeader) return;\n updateOverflow();\n const onResize = () => updateOverflow();\n window.addEventListener('resize', onResize);\n return () => window.removeEventListener('resize', onResize);\n }, [scrollableHeader, tabs, updateOverflow]);\n\n const scrollByStep = (direction: number) => {\n const container = scrollRef.current;\n if (!container) return;\n const EDGE_TOLERANCE = 1;\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 + EDGE_TOLERANCE,\n );\n if (!nextHidden) return;\n container.scrollBy({ left: nextHidden.getBoundingClientRect().left - containerRect.left, behavior: 'smooth' });\n return;\n }\n\n const previousHidden = [...nodes]\n .reverse()\n .find((node) => node.getBoundingClientRect().left < containerRect.left - EDGE_TOLERANCE);\n if (!previousHidden) return;\n container.scrollBy({\n left: previousHidden.getBoundingClientRect().right - containerRect.right,\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.\n if ((event.target as HTMLElement).closest('input')) {\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 ['invisible']: clippedTabValues.includes(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>\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 const scrollArrowClass =\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=\"flex min-w-0 flex-1 items-center gap-1 border-b border-border-subtle\">\n <ControlledButton\n defaultHtmlButton\n onClick={() => scrollByStep(-1)}\n disabled={!canScrollLeft}\n className={classNames(scrollArrowClass, { ['pointer-events-none opacity-0']: !canScrollLeft })}\n tabIndex={-1}\n >\n <MaterialSymbol icon=\"chevron_left\" size={20} />\n </ControlledButton>\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 <ControlledButton\n defaultHtmlButton\n onClick={() => scrollByStep(1)}\n disabled={!canScrollRight}\n className={classNames(scrollArrowClass, { ['pointer-events-none opacity-0']: !canScrollRight })}\n tabIndex={-1}\n >\n <MaterialSymbol icon=\"chevron_right\" size={20} />\n </ControlledButton>\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"],"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 {};
@@ -0,0 +1,47 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { createContext, forwardRef, useContext } from "react";
3
+ import classNames from "classnames";
4
+ import { twMerge } from "tailwind-merge";
5
+ const TabsContext = createContext({ active: "" });
6
+ const TabsRoot = ({ value, children, className }) => /* @__PURE__ */ jsx(TabsContext.Provider, { value: { active: value }, children: /* @__PURE__ */ jsx("div", { className: twMerge("block", className), children }) });
7
+ const TabsHeader = ({ children, className }) => /* @__PURE__ */ jsx("div", { role: "tablist", className: twMerge("relative flex", className), children });
8
+ const Tab = forwardRef(
9
+ ({ value, disabled = false, className, children, ...rest }, ref) => {
10
+ const { active } = useContext(TabsContext);
11
+ const isActive = active === value;
12
+ return /* @__PURE__ */ jsx(
13
+ "div",
14
+ {
15
+ ref,
16
+ role: "tab",
17
+ "aria-selected": isActive,
18
+ tabIndex: disabled ? -1 : 0,
19
+ className: twMerge(
20
+ classNames(
21
+ "relative flex cursor-pointer select-none items-center justify-center border-b-2 py-2 text-sm transition-interactive",
22
+ isActive ? "border-brand" : "border-transparent",
23
+ { "pointer-events-none opacity-50": disabled }
24
+ ),
25
+ className
26
+ ),
27
+ ...rest,
28
+ children
29
+ }
30
+ );
31
+ }
32
+ );
33
+ Tab.displayName = "Tab";
34
+ const TabsBody = ({ children, className }) => /* @__PURE__ */ jsx("div", { className: twMerge("block w-full", className), children });
35
+ const TabPanel = ({ value, children, className }) => {
36
+ const { active } = useContext(TabsContext);
37
+ const isActive = active === value;
38
+ return /* @__PURE__ */ jsx("div", { role: "tabpanel", hidden: !isActive, className: twMerge(className, classNames({ "!hidden": !isActive })), children });
39
+ };
40
+ export {
41
+ Tab,
42
+ TabPanel,
43
+ TabsBody,
44
+ TabsHeader,
45
+ TabsRoot
46
+ };
47
+ //# sourceMappingURL=ControlledTabsPrimitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlledTabsPrimitives.js","sources":["../../../src/components/Form/ControlledTabsPrimitives.tsx"],"sourcesContent":["import React, { createContext, forwardRef, useContext } from 'react';\nimport classNames from 'classnames';\nimport { twMerge } from 'tailwind-merge';\n\ninterface ITabsContext {\n active: string;\n}\n\nconst TabsContext = createContext<ITabsContext>({ active: '' });\n\ninterface ITabsRootProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TabsRoot: React.FC<ITabsRootProps> = ({ value, children, className }) => (\n <TabsContext.Provider value={{ active: value }}>\n <div className={twMerge('block', className)}>{children}</div>\n </TabsContext.Provider>\n);\n\ninterface ITabsHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TabsHeader: React.FC<ITabsHeaderProps> = ({ children, className }) => (\n <div role=\"tablist\" className={twMerge('relative flex', className)}>\n {children}\n </div>\n);\n\ninterface ITabProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'className'> {\n value: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\n/**\n * Rendered as a div with role=\"tab\", not a native button: a tab can carry its own controls\n * (inline rename, visibility toggle, drag handle), and a button inside a button is invalid\n * HTML that silently breaks the inner controls.\n *\n * The active underline lives on the tab itself rather than on a separate sliding indicator,\n * so no measurement is needed and reordering or horizontal scrolling cannot desynchronise it.\n */\nexport const Tab = forwardRef<HTMLDivElement, ITabProps>(\n ({ value, disabled = false, className, children, ...rest }, ref) => {\n const { active } = useContext(TabsContext);\n const isActive = active === value;\n\n return (\n <div\n ref={ref}\n role=\"tab\"\n aria-selected={isActive}\n tabIndex={disabled ? -1 : 0}\n className={twMerge(\n classNames(\n 'relative flex cursor-pointer select-none items-center justify-center border-b-2 py-2 text-sm transition-interactive',\n isActive ? 'border-brand' : 'border-transparent',\n { 'pointer-events-none opacity-50': disabled },\n ),\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nTab.displayName = 'Tab';\n\ninterface ITabsBodyProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const TabsBody: React.FC<ITabsBodyProps> = ({ children, className }) => (\n <div className={twMerge('block w-full', className)}>{children}</div>\n);\n\ninterface ITabPanelProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Inactive panels stay MOUNTED and hidden. Unmounting them would discard the state, focus\n * and scroll position of every tab the user is not looking at.\n */\nexport const TabPanel: React.FC<ITabPanelProps> = ({ value, children, className }) => {\n const { active } = useContext(TabsContext);\n const isActive = active === value;\n\n // `hidden` goes AFTER the consumer classes on purpose: a `tabPanelClassName` such as\n // `flex flex-col` is a display utility too, so merged the other way round it would win over\n // `hidden` and every inactive panel would render stacked under the active one.\n return (\n <div role=\"tabpanel\" hidden={!isActive} className={twMerge(className, classNames({ '!hidden': !isActive }))}>\n {children}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AAQA,MAAM,cAAc,cAA4B,EAAE,QAAQ,IAAI;AAQvD,MAAM,WAAqC,CAAC,EAAE,OAAO,UAAU,gBACpE,oBAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,QAAQ,MAAA,GACrC,UAAA,oBAAC,OAAA,EAAI,WAAW,QAAQ,SAAS,SAAS,GAAI,SAAA,CAAS,EAAA,CACzD;AAQK,MAAM,aAAyC,CAAC,EAAE,UAAU,gBACjE,oBAAC,OAAA,EAAI,MAAK,WAAU,WAAW,QAAQ,iBAAiB,SAAS,GAC9D,SAAA,CACH;AAkBK,MAAM,MAAM;AAAA,EACjB,CAAC,EAAE,OAAO,WAAW,OAAO,WAAW,UAAU,GAAG,KAAA,GAAQ,QAAQ;AAClE,UAAM,EAAE,OAAA,IAAW,WAAW,WAAW;AACzC,UAAM,WAAW,WAAW;AAE5B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,iBAAe;AAAA,QACf,UAAU,WAAW,KAAK;AAAA,QAC1B,WAAW;AAAA,UACT;AAAA,YACE;AAAA,YACA,WAAW,iBAAiB;AAAA,YAC5B,EAAE,kCAAkC,SAAA;AAAA,UAAS;AAAA,UAE/C;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,QAEH;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEA,IAAI,cAAc;AAOX,MAAM,WAAqC,CAAC,EAAE,UAAU,UAAA,MAC7D,oBAAC,OAAA,EAAI,WAAW,QAAQ,gBAAgB,SAAS,GAAI,SAAA,CAAS;AAazD,MAAM,WAAqC,CAAC,EAAE,OAAO,UAAU,gBAAgB;AACpF,QAAM,EAAE,OAAA,IAAW,WAAW,WAAW;AACzC,QAAM,WAAW,WAAW;AAK5B,6BACG,OAAA,EAAI,MAAK,YAAW,QAAQ,CAAC,UAAU,WAAW,QAAQ,WAAW,WAAW,EAAE,WAAW,CAAC,UAAU,CAAC,GACvG,UACH;AAEJ;"}
@@ -0,0 +1,22 @@
1
+ import { default as React } from 'react';
2
+ export type TTextareaResize = 'none' | 'vertical';
3
+ interface IControlledTextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'className' | 'style'> {
4
+ label?: string;
5
+ error?: boolean;
6
+ errorMessage?: string;
7
+ resize?: TTextareaResize;
8
+ className?: string;
9
+ containerClassName?: string;
10
+ /** Reaches the native textarea, for hosts that must focus or measure it imperatively. */
11
+ textareaRef?: React.Ref<HTMLTextAreaElement>;
12
+ }
13
+ /**
14
+ * The label is rendered as the placeholder and as the accessible name, mirroring
15
+ * ControlledInput: a floating label animates onto the border and relies on pseudo-element
16
+ * border segments to cut a notch, which breaks wherever the border is overridden.
17
+ *
18
+ * Background, border and focus ring come from the form base layer in index.css, so this
19
+ * component names no colour for them.
20
+ */
21
+ declare const ControlledTextarea: React.FC<IControlledTextareaProps>;
22
+ export default ControlledTextarea;
@@ -0,0 +1,46 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import classNames from "classnames";
3
+ import { twMerge } from "tailwind-merge";
4
+ const RESIZE_CLASS = {
5
+ none: "resize-none",
6
+ vertical: "resize-y"
7
+ };
8
+ const ControlledTextarea = ({
9
+ label,
10
+ error = false,
11
+ errorMessage,
12
+ resize = "vertical",
13
+ className,
14
+ containerClassName,
15
+ textareaRef,
16
+ rows = 4,
17
+ placeholder,
18
+ "aria-label": ariaLabel,
19
+ ...rest
20
+ }) => /* @__PURE__ */ jsxs("div", { className: classNames("w-full", containerClassName), children: [
21
+ /* @__PURE__ */ jsx(
22
+ "textarea",
23
+ {
24
+ ref: textareaRef,
25
+ rows,
26
+ placeholder: placeholder ?? label,
27
+ "aria-label": ariaLabel ?? label,
28
+ "aria-invalid": error || void 0,
29
+ className: twMerge(
30
+ classNames(
31
+ "w-full rounded-lg border px-3 py-2.5 text-sm text-foreground transition-colors",
32
+ "placeholder:text-foreground-faint disabled:cursor-not-allowed disabled:bg-muted",
33
+ RESIZE_CLASS[resize],
34
+ { "border-danger focus:border-danger": error }
35
+ ),
36
+ className
37
+ ),
38
+ ...rest
39
+ }
40
+ ),
41
+ error && errorMessage && /* @__PURE__ */ jsx("div", { className: "mt-1 text-xs text-danger-emphasis", children: errorMessage })
42
+ ] });
43
+ export {
44
+ ControlledTextarea as default
45
+ };
46
+ //# sourceMappingURL=ControlledTextarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlledTextarea.js","sources":["../../../src/components/Form/ControlledTextarea.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { twMerge } from 'tailwind-merge';\n\nexport type TTextareaResize = 'none' | 'vertical';\n\ninterface IControlledTextareaProps extends Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'className' | 'style'\n> {\n label?: string;\n error?: boolean;\n errorMessage?: string;\n resize?: TTextareaResize;\n className?: string;\n containerClassName?: string;\n /** Reaches the native textarea, for hosts that must focus or measure it imperatively. */\n textareaRef?: React.Ref<HTMLTextAreaElement>;\n}\n\nconst RESIZE_CLASS: Record<TTextareaResize, string> = {\n none: 'resize-none',\n vertical: 'resize-y',\n};\n\n/**\n * The label is rendered as the placeholder and as the accessible name, mirroring\n * ControlledInput: a floating label animates onto the border and relies on pseudo-element\n * border segments to cut a notch, which breaks wherever the border is overridden.\n *\n * Background, border and focus ring come from the form base layer in index.css, so this\n * component names no colour for them.\n */\nconst ControlledTextarea: React.FC<IControlledTextareaProps> = ({\n label,\n error = false,\n errorMessage,\n resize = 'vertical',\n className,\n containerClassName,\n textareaRef,\n rows = 4,\n placeholder,\n 'aria-label': ariaLabel,\n ...rest\n}) => (\n <div className={classNames('w-full', containerClassName)}>\n <textarea\n ref={textareaRef}\n rows={rows}\n placeholder={placeholder ?? label}\n aria-label={ariaLabel ?? label}\n aria-invalid={error || undefined}\n className={twMerge(\n classNames(\n 'w-full rounded-lg border px-3 py-2.5 text-sm text-foreground transition-colors',\n 'placeholder:text-foreground-faint disabled:cursor-not-allowed disabled:bg-muted',\n RESIZE_CLASS[resize],\n { 'border-danger focus:border-danger': error },\n ),\n className,\n )}\n {...rest}\n />\n\n {error && errorMessage && <div className=\"mt-1 text-xs text-danger-emphasis\">{errorMessage}</div>}\n </div>\n);\n\nexport default ControlledTextarea;\n"],"names":[],"mappings":";;;AAoBA,MAAM,eAAgD;AAAA,EACpD,MAAM;AAAA,EACN,UAAU;AACZ;AAUA,MAAM,qBAAyD,CAAC;AAAA,EAC9D;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,cAAc;AAAA,EACd,GAAG;AACL,2BACG,OAAA,EAAI,WAAW,WAAW,UAAU,kBAAkB,GACrD,UAAA;AAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,aAAa,eAAe;AAAA,MAC5B,cAAY,aAAa;AAAA,MACzB,gBAAc,SAAS;AAAA,MACvB,WAAW;AAAA,QACT;AAAA,UACE;AAAA,UACA;AAAA,UACA,aAAa,MAAM;AAAA,UACnB,EAAE,qCAAqC,MAAA;AAAA,QAAM;AAAA,QAE/C;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAAA,EAGL,SAAS,gBAAgB,oBAAC,OAAA,EAAI,WAAU,qCAAqC,UAAA,aAAA,CAAa;AAAA,EAAA,CAC7F;"}
@@ -0,0 +1,26 @@
1
+ import { default as React } from 'react';
2
+ interface ITimelineSectionProps {
3
+ children?: React.ReactNode;
4
+ className?: string;
5
+ }
6
+ export declare const ControlledTimelineRoot: React.FC<ITimelineSectionProps>;
7
+ interface IControlledTimelineItemProps extends ITimelineSectionProps {
8
+ /** Width of the icon column the connector line centres itself in. */
9
+ railWidth?: string;
10
+ }
11
+ export declare const ControlledTimelineItem: React.FC<IControlledTimelineItemProps>;
12
+ /**
13
+ * Spans the item and centres itself in the icon column, whose width comes from the item's
14
+ * `--timeline-rail`. That keeps the line under icons of different sizes without measuring.
15
+ */
16
+ export declare const ControlledTimelineConnector: React.FC<ITimelineSectionProps>;
17
+ export declare const ControlledTimelineHeader: React.FC<ITimelineSectionProps>;
18
+ export declare const ControlledTimelineIcon: React.FC<ITimelineSectionProps>;
19
+ export declare const ControlledTimelineBody: React.FC<ITimelineSectionProps>;
20
+ interface IControlledTimelineProps {
21
+ title: string;
22
+ description: React.ReactNode;
23
+ iconColor?: string;
24
+ }
25
+ declare const ControlledTimeline: React.FC<IControlledTimelineProps>;
26
+ export default ControlledTimeline;
@@ -0,0 +1,57 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { twMerge } from "tailwind-merge";
3
+ const DEFAULT_RAIL_WIDTH = "1.75rem";
4
+ const ControlledTimelineRoot = ({ children, className }) => /* @__PURE__ */ jsx("div", { className: twMerge("flex w-full flex-col", className), children });
5
+ const ControlledTimelineItem = ({
6
+ children,
7
+ className,
8
+ railWidth = DEFAULT_RAIL_WIDTH
9
+ }) => /* @__PURE__ */ jsx(
10
+ "div",
11
+ {
12
+ style: { "--timeline-rail": railWidth },
13
+ className: twMerge("relative flex flex-col gap-2", className),
14
+ children
15
+ }
16
+ );
17
+ const ControlledTimelineConnector = ({ children, className }) => /* @__PURE__ */ jsxs(
18
+ "div",
19
+ {
20
+ "aria-hidden": true,
21
+ className: twMerge("absolute left-0 top-0 flex h-full w-[var(--timeline-rail,1.75rem)] justify-center", className),
22
+ children: [
23
+ /* @__PURE__ */ jsx("span", { className: "h-full w-0.5 bg-border" }),
24
+ children
25
+ ]
26
+ }
27
+ );
28
+ const ControlledTimelineHeader = ({ children, className }) => /* @__PURE__ */ jsx("div", { className: twMerge("relative flex items-center gap-4", className), children });
29
+ const ControlledTimelineIcon = ({ children, className }) => /* @__PURE__ */ jsx(
30
+ "div",
31
+ {
32
+ className: twMerge(
33
+ "relative z-[2] flex w-[var(--timeline-rail,1.75rem)] shrink-0 items-center justify-center rounded-full",
34
+ className
35
+ ),
36
+ children
37
+ }
38
+ );
39
+ const ControlledTimelineBody = ({ children, className }) => /* @__PURE__ */ jsx("div", { className: twMerge("flex gap-4 pl-[var(--timeline-rail,1.75rem)]", className), children });
40
+ const ControlledTimeline = ({ title, description, iconColor = "bg-scrim" }) => /* @__PURE__ */ jsx(ControlledTimelineRoot, { children: /* @__PURE__ */ jsxs(ControlledTimelineItem, { railWidth: "0.75rem", children: [
41
+ /* @__PURE__ */ jsx(ControlledTimelineConnector, {}),
42
+ /* @__PURE__ */ jsxs(ControlledTimelineHeader, { className: "h-3", children: [
43
+ /* @__PURE__ */ jsx(ControlledTimelineIcon, { className: twMerge("aspect-square", iconColor) }),
44
+ /* @__PURE__ */ jsx("span", { className: "text-base font-semibold text-foreground", children: title })
45
+ ] }),
46
+ /* @__PURE__ */ jsx(ControlledTimelineBody, { className: "pb-8", children: description })
47
+ ] }) });
48
+ export {
49
+ ControlledTimelineBody,
50
+ ControlledTimelineConnector,
51
+ ControlledTimelineHeader,
52
+ ControlledTimelineIcon,
53
+ ControlledTimelineItem,
54
+ ControlledTimelineRoot,
55
+ ControlledTimeline as default
56
+ };
57
+ //# sourceMappingURL=ControlledTimeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlledTimeline.js","sources":["../../../src/components/Form/ControlledTimeline.tsx"],"sourcesContent":["import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nconst DEFAULT_RAIL_WIDTH = '1.75rem';\n\ninterface ITimelineSectionProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport const ControlledTimelineRoot: React.FC<ITimelineSectionProps> = ({ children, className }) => (\n <div className={twMerge('flex w-full flex-col', className)}>{children}</div>\n);\n\ninterface IControlledTimelineItemProps extends ITimelineSectionProps {\n /** Width of the icon column the connector line centres itself in. */\n railWidth?: string;\n}\n\nexport const ControlledTimelineItem: React.FC<IControlledTimelineItemProps> = ({\n children,\n className,\n railWidth = DEFAULT_RAIL_WIDTH,\n}) => (\n <div\n style={{ '--timeline-rail': railWidth } as React.CSSProperties}\n className={twMerge('relative flex flex-col gap-2', className)}\n >\n {children}\n </div>\n);\n\n/**\n * Spans the item and centres itself in the icon column, whose width comes from the item's\n * `--timeline-rail`. That keeps the line under icons of different sizes without measuring.\n */\nexport const ControlledTimelineConnector: React.FC<ITimelineSectionProps> = ({ children, className }) => (\n <div\n aria-hidden\n className={twMerge('absolute left-0 top-0 flex h-full w-[var(--timeline-rail,1.75rem)] justify-center', className)}\n >\n <span className=\"h-full w-0.5 bg-border\" />\n {children}\n </div>\n);\n\nexport const ControlledTimelineHeader: React.FC<ITimelineSectionProps> = ({ children, className }) => (\n <div className={twMerge('relative flex items-center gap-4', className)}>{children}</div>\n);\n\nexport const ControlledTimelineIcon: React.FC<ITimelineSectionProps> = ({ children, className }) => (\n <div\n className={twMerge(\n 'relative z-[2] flex w-[var(--timeline-rail,1.75rem)] shrink-0 items-center justify-center rounded-full',\n className,\n )}\n >\n {children}\n </div>\n);\n\nexport const ControlledTimelineBody: React.FC<ITimelineSectionProps> = ({ children, className }) => (\n <div className={twMerge('flex gap-4 pl-[var(--timeline-rail,1.75rem)]', className)}>{children}</div>\n);\n\ninterface IControlledTimelineProps {\n title: string;\n description: React.ReactNode;\n iconColor?: string;\n}\n\nconst ControlledTimeline: React.FC<IControlledTimelineProps> = ({ title, description, iconColor = 'bg-scrim' }) => (\n <ControlledTimelineRoot>\n <ControlledTimelineItem railWidth=\"0.75rem\">\n <ControlledTimelineConnector />\n <ControlledTimelineHeader className=\"h-3\">\n <ControlledTimelineIcon className={twMerge('aspect-square', iconColor)} />\n <span className=\"text-base font-semibold text-foreground\">{title}</span>\n </ControlledTimelineHeader>\n <ControlledTimelineBody className=\"pb-8\">{description}</ControlledTimelineBody>\n </ControlledTimelineItem>\n </ControlledTimelineRoot>\n);\n\nexport default ControlledTimeline;\n"],"names":[],"mappings":";;AAGA,MAAM,qBAAqB;AAOpB,MAAM,yBAA0D,CAAC,EAAE,UAAU,UAAA,MAClF,oBAAC,OAAA,EAAI,WAAW,QAAQ,wBAAwB,SAAS,GAAI,SAAA,CAAS;AAQjE,MAAM,yBAAiE,CAAC;AAAA,EAC7E;AAAA,EACA;AAAA,EACA,YAAY;AACd,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAO,EAAE,mBAAmB,UAAA;AAAA,IAC5B,WAAW,QAAQ,gCAAgC,SAAS;AAAA,IAE3D;AAAA,EAAA;AACH;AAOK,MAAM,8BAA+D,CAAC,EAAE,UAAU,gBACvF;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAW;AAAA,IACX,WAAW,QAAQ,qFAAqF,SAAS;AAAA,IAEjH,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,yBAAA,CAAyB;AAAA,MACxC;AAAA,IAAA;AAAA,EAAA;AACH;AAGK,MAAM,2BAA4D,CAAC,EAAE,UAAU,UAAA,MACpF,oBAAC,OAAA,EAAI,WAAW,QAAQ,oCAAoC,SAAS,GAAI,SAAA,CAAS;AAG7E,MAAM,yBAA0D,CAAC,EAAE,UAAU,gBAClF;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAGD;AAAA,EAAA;AACH;AAGK,MAAM,yBAA0D,CAAC,EAAE,UAAU,UAAA,MAClF,oBAAC,OAAA,EAAI,WAAW,QAAQ,gDAAgD,SAAS,GAAI,SAAA,CAAS;AAShG,MAAM,qBAAyD,CAAC,EAAE,OAAO,aAAa,YAAY,WAAA,MAChG,oBAAC,wBAAA,EACC,UAAA,qBAAC,wBAAA,EAAuB,WAAU,WAChC,UAAA;AAAA,EAAA,oBAAC,6BAAA,EAA4B;AAAA,EAC7B,qBAAC,0BAAA,EAAyB,WAAU,OAClC,UAAA;AAAA,IAAA,oBAAC,wBAAA,EAAuB,WAAW,QAAQ,iBAAiB,SAAS,GAAG;AAAA,IACxE,oBAAC,QAAA,EAAK,WAAU,2CAA2C,UAAA,MAAA,CAAM;AAAA,EAAA,GACnE;AAAA,EACA,oBAAC,wBAAA,EAAuB,WAAU,QAAQ,UAAA,YAAA,CAAY;AAAA,EAAA,CACxD,EAAA,CACF;"}
@@ -0,0 +1,74 @@
1
+ import { SymbolCodepoints } from '../UI/MaterialSymbol';
2
+ export type TControlledViewToggleSize = 'sm' | 'md';
3
+ export interface IControlledViewToggleOption<V extends string = string> {
4
+ value: V;
5
+ /** Optional icon; options without one render their label as text instead. */
6
+ icon?: SymbolCodepoints;
7
+ /**
8
+ * Option name. Rendered as visible text when the option has no icon or when
9
+ * `showLabels` is on; otherwise shown as the option's tooltip.
10
+ */
11
+ label: string;
12
+ /**
13
+ * Replaces the label in the tooltip when the option needs to explain itself, not just be named.
14
+ * The label stays the accessible name, so it must remain short.
15
+ */
16
+ tooltip?: string;
17
+ /** Counter badge next to the label, as in ControlledTabs. Hidden when null/undefined. */
18
+ count?: number | null;
19
+ /** Replaces the counter badge with a spinner while this option's data loads. */
20
+ loading?: boolean;
21
+ }
22
+ interface IControlledViewToggleBaseProps<V extends string = string> {
23
+ options: Array<IControlledViewToggleOption<V>>;
24
+ /** Renders every option's label as visible text next to its icon. */
25
+ showLabels?: boolean;
26
+ /** `md` (default) pairs with page-level controls; `sm` matches compact filter bars. */
27
+ size?: TControlledViewToggleSize;
28
+ /** Disables every option, keeping the current selection visible. */
29
+ disabled?: boolean;
30
+ /**
31
+ * Mirrors the selection in the URL, on by default like `ControlledTabs`. Turn it off for toggles
32
+ * that hold form state (a weekday picker, an AND/OR combinator) or that live inside a drawer,
33
+ * where the selection is not page state and should not reach the URL.
34
+ */
35
+ syncWithUrl?: boolean;
36
+ /**
37
+ * Query param used when `syncWithUrl` is on, defaults to `view`. A page holding more than one
38
+ * synced toggle must give each a unique key: the first one mounted keeps the param and the others
39
+ * stop writing (with a warning in development) instead of overwriting each other.
40
+ *
41
+ * Lifecycle mirrors `ControlledTabs`: on mount an existing valid param wins over `value` and is
42
+ * pushed to the host through `onChange`; with no param (or an invalid one) the current value is
43
+ * stamped into the URL right away. From there on the host selection is the authority and every
44
+ * change rewrites the param, always preserving the other params and replacing the history entry.
45
+ * In `multiple` mode values are comma separated and an empty selection removes the param.
46
+ */
47
+ urlParamKey?: string;
48
+ className?: string;
49
+ }
50
+ interface IControlledViewToggleSingleProps<V extends string = string> extends IControlledViewToggleBaseProps<V> {
51
+ multiple?: false;
52
+ value: V;
53
+ onChange: (value: V) => void;
54
+ }
55
+ interface IControlledViewToggleMultipleProps<V extends string = string> extends IControlledViewToggleBaseProps<V> {
56
+ multiple: true;
57
+ value: Array<V>;
58
+ /** Receives the whole next selection, which may be empty. */
59
+ onChange: (values: Array<V>) => void;
60
+ }
61
+ export type TControlledViewToggleProps<V extends string = string> = IControlledViewToggleSingleProps<V> | IControlledViewToggleMultipleProps<V>;
62
+ /**
63
+ * Segmented toggle for switching between visualization modes (e.g. cards /
64
+ * list / grouped). Options can be icon-only, text-only or icon + text, and the
65
+ * component is generic over the option value union so hosts keep their own mode
66
+ * types. Clicking the already-active option fires `onChange` again, letting
67
+ * hosts react to re-selection (e.g. reopening a configuration dialog).
68
+ *
69
+ * With `multiple`, it becomes a segmented multi-select: `value` is the selected
70
+ * array, clicking an option adds or removes it, and `onChange` receives the
71
+ * whole next selection, which may be empty.
72
+ */
73
+ declare const ControlledViewToggle: <V extends string = string>(props: TControlledViewToggleProps<V>) => import("react").JSX.Element;
74
+ export default ControlledViewToggle;
@@ -0,0 +1,157 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useRef, useEffect, Fragment } from "react";
3
+ import classNames from "classnames";
4
+ import { useSearchParams } from "react-router-dom";
5
+ import ControlledButton from "./ControlledButton.js";
6
+ import ControlledTooltip from "../UI/ControlledTooltip.js";
7
+ import LoadingSpinner from "../UI/LoadingSpinner.js";
8
+ import { MaterialSymbol } from "../UI/MaterialSymbol/index.js";
9
+ import { formatNumber } from "../../helpers/formatHelpers.js";
10
+ import { uiLogger } from "../../helpers/uiLogger.js";
11
+ import { TABS_URL_PARAM, claimUrlParam, URL_PARAM_PRIORITY, releaseUrlParam, ownsUrlParam, queueUrlParamUpdate } from "../../helpers/urlParamSync.js";
12
+ const DEFAULT_URL_PARAM_KEY = "view";
13
+ const SIZE_STYLES = {
14
+ sm: {
15
+ // Inner radius mirrors the container radius minus its padding, so the active
16
+ // segment stays concentric with the outer border.
17
+ container: "h-9 gap-1 rounded-xl",
18
+ button: "h-7 rounded-lg px-2.5",
19
+ textClass: "text-xs",
20
+ // One step darker than md so the segments match the neighbouring controls
21
+ // in the compact filter bars this size is used by.
22
+ inactive: "text-foreground-muted hover:bg-muted-hover hover:text-foreground",
23
+ icon: 16
24
+ },
25
+ // leading-[18px] matches the icon height so icon-only, text-only and
26
+ // icon + text options all keep the same button height.
27
+ md: {
28
+ container: "gap-1 rounded-lg shadow-sm",
29
+ button: "rounded-md px-2.5 py-1.5",
30
+ textClass: "text-sm leading-[18px]",
31
+ inactive: "text-foreground-subtle hover:bg-muted-hover hover:text-foreground-muted",
32
+ icon: 18
33
+ }
34
+ };
35
+ const ControlledViewToggle = (props) => {
36
+ const {
37
+ options,
38
+ showLabels = false,
39
+ size = "md",
40
+ disabled = false,
41
+ syncWithUrl = true,
42
+ urlParamKey = DEFAULT_URL_PARAM_KEY,
43
+ className
44
+ } = props;
45
+ const styles = SIZE_STYLES[size];
46
+ const [searchParams, setSearchParams] = useSearchParams();
47
+ const safeOptions = useMemo(() => Array.isArray(options) ? options : [], [options]);
48
+ const selectedValues = props.multiple ? Array.isArray(props.value) ? props.value : [] : [props.value];
49
+ const serializedValue = selectedValues.join(",");
50
+ const hasReadUrlSelectionRef = useRef(false);
51
+ const pendingUrlSelectionRef = useRef(null);
52
+ const ownerIdRef = useRef({});
53
+ const isUrlParamReserved = urlParamKey === TABS_URL_PARAM;
54
+ const isUrlSyncEnabled = syncWithUrl && !isUrlParamReserved;
55
+ useEffect(() => {
56
+ if (!syncWithUrl) return;
57
+ if (isUrlParamReserved) {
58
+ uiLogger.warn(
59
+ `[ControlledViewToggle] "${TABS_URL_PARAM}" belongs to ControlledTabs. Give this toggle its own urlParamKey: it will not write to the URL.`
60
+ );
61
+ return;
62
+ }
63
+ const ownerId = ownerIdRef.current;
64
+ if (!claimUrlParam(urlParamKey, ownerId, URL_PARAM_PRIORITY.viewToggle)) {
65
+ uiLogger.warn(
66
+ `[ControlledViewToggle] More than one control syncs "${urlParamKey}". Give each one a unique urlParamKey: this instance will not write to the URL.`
67
+ );
68
+ }
69
+ return () => releaseUrlParam(urlParamKey, ownerId);
70
+ }, [syncWithUrl, isUrlParamReserved, urlParamKey]);
71
+ useEffect(() => {
72
+ if (!isUrlSyncEnabled || !ownsUrlParam(urlParamKey, ownerIdRef.current)) return;
73
+ const rawParam = searchParams.get(urlParamKey) ?? "";
74
+ if (pendingUrlSelectionRef.current !== null) {
75
+ if (serializedValue === pendingUrlSelectionRef.current) pendingUrlSelectionRef.current = null;
76
+ return;
77
+ }
78
+ if (!hasReadUrlSelectionRef.current) {
79
+ hasReadUrlSelectionRef.current = true;
80
+ const optionValues = new Set(safeOptions.map((option) => option.value));
81
+ const urlValues = rawParam.split(",").map((rawValue) => rawValue.trim()).filter((rawValue) => optionValues.has(rawValue));
82
+ if (urlValues.length) {
83
+ const urlSelection = urlValues.join(",");
84
+ if (urlSelection !== serializedValue) {
85
+ pendingUrlSelectionRef.current = urlSelection;
86
+ if (props.multiple) props.onChange(urlValues);
87
+ else props.onChange(urlValues[0]);
88
+ }
89
+ return;
90
+ }
91
+ }
92
+ if (rawParam === serializedValue) return;
93
+ queueUrlParamUpdate(urlParamKey, serializedValue, setSearchParams);
94
+ }, [isUrlSyncEnabled, urlParamKey, searchParams, safeOptions, serializedValue, setSearchParams, props]);
95
+ const handleSelectOption = (optionValue) => {
96
+ if (!props.multiple) {
97
+ props.onChange(optionValue);
98
+ return;
99
+ }
100
+ const currentValues = Array.isArray(props.value) ? props.value : [];
101
+ props.onChange(
102
+ currentValues.includes(optionValue) ? currentValues.filter((selectedValue) => selectedValue !== optionValue) : [...currentValues, optionValue]
103
+ );
104
+ };
105
+ const renderOptionCounter = (option, isActive) => {
106
+ if (option.loading) return /* @__PURE__ */ jsx(LoadingSpinner, { size: 3 });
107
+ if (option.count === void 0 || option.count === null) return null;
108
+ return /* @__PURE__ */ jsx(
109
+ "span",
110
+ {
111
+ className: classNames(
112
+ "inline-flex min-w-[18px] items-center justify-center rounded-full px-1.5 py-px text-[11px] font-medium leading-none",
113
+ isActive ? "bg-glass/25 text-white" : "bg-muted-hover text-foreground-subtle"
114
+ ),
115
+ children: formatNumber(option.count)
116
+ }
117
+ );
118
+ };
119
+ return /* @__PURE__ */ jsx(
120
+ "div",
121
+ {
122
+ className: classNames(
123
+ "inline-flex shrink-0 items-center border border-border bg-surface p-1",
124
+ styles.container,
125
+ className
126
+ ),
127
+ children: safeOptions.map((option) => {
128
+ const isActive = selectedValues.includes(option.value);
129
+ const showText = showLabels || !option.icon;
130
+ const button = /* @__PURE__ */ jsxs(
131
+ ControlledButton,
132
+ {
133
+ defaultHtmlButton: true,
134
+ "aria-pressed": isActive,
135
+ disabled,
136
+ onClick: () => handleSelectOption(option.value),
137
+ className: classNames(
138
+ "flex items-center justify-center gap-1.5 outline-none transition-colors focus-visible:ring-2 focus-visible:ring-brand-border disabled:cursor-not-allowed",
139
+ styles.button,
140
+ isActive ? "bg-brand text-brand-fg shadow-sm" : styles.inactive
141
+ ),
142
+ children: [
143
+ option.icon && /* @__PURE__ */ jsx(MaterialSymbol, { icon: option.icon, size: styles.icon }),
144
+ showText && /* @__PURE__ */ jsx("span", { className: classNames("whitespace-nowrap font-medium", styles.textClass), children: option.label }),
145
+ renderOptionCounter(option, isActive)
146
+ ]
147
+ }
148
+ );
149
+ return showText ? /* @__PURE__ */ jsx(Fragment, { children: button }, option.value) : /* @__PURE__ */ jsx(ControlledTooltip, { content: option.tooltip ?? option.label, children: button }, option.value);
150
+ })
151
+ }
152
+ );
153
+ };
154
+ export {
155
+ ControlledViewToggle as default
156
+ };
157
+ //# sourceMappingURL=ControlledViewToggle.js.map