@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,387 @@
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { useState, useMemo, useRef, useCallback, useEffect } from "react";
3
+ import { parse } from "date-fns";
4
+ import { useTranslation } from "react-i18next";
5
+ import DatePicker from "../../DateTime/DatePicker.js";
6
+ import DateRangePicker from "../../DateTime/DateRangePicker.js";
7
+ import ControlledCheckbox from "../../Form/ControlledCheckbox.js";
8
+ import ControlledInput from "../../Form/ControlledInput.js";
9
+ import { ControlledSelect } from "../../Form/ControlledSelect.js";
10
+ import ControlledSwitch from "../../Form/ControlledSwitch.js";
11
+ import OutlinedChip from "../../UI/Chips/OutlinedChip.js";
12
+ import NoDataFound from "../../UI/NoDataFound/index.js";
13
+ import SkeletonLoading from "../../UI/SkeletonLoading.js";
14
+ import { uiLogger } from "../../../helpers/uiLogger.js";
15
+ const asString = (value) => typeof value === "string" ? value : "";
16
+ const asStringArray = (value) => Array.isArray(value) ? value.map(String) : [];
17
+ const TextControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
18
+ ControlledInput,
19
+ {
20
+ label: field.title,
21
+ placeholder: field.placeholder,
22
+ value: asString(value),
23
+ disabled,
24
+ onChange: (event) => onChange(event.target.value)
25
+ }
26
+ );
27
+ const NumberControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
28
+ ControlledInput,
29
+ {
30
+ type: "number",
31
+ label: field.title,
32
+ placeholder: field.placeholder,
33
+ min: field.min,
34
+ max: field.max,
35
+ value: value === void 0 || value === null ? "" : String(value),
36
+ disabled,
37
+ onChange: (event) => onChange(event.target.value)
38
+ }
39
+ );
40
+ const SelectControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
41
+ ControlledSelect,
42
+ {
43
+ label: field.title,
44
+ options: field.options ?? [],
45
+ selectedValue: asString(value),
46
+ searchable: field.searchable,
47
+ clearable: field.clearable ?? true,
48
+ disabled,
49
+ onChangeHook: (selected) => onChange(Array.isArray(selected) ? selected[0] ?? "" : selected)
50
+ }
51
+ );
52
+ const MultiSelectControl = ({
53
+ field,
54
+ value,
55
+ onChange,
56
+ disabled
57
+ }) => /* @__PURE__ */ jsx(
58
+ ControlledSelect,
59
+ {
60
+ multiple: true,
61
+ inFieldChips: true,
62
+ label: field.title,
63
+ options: field.options ?? [],
64
+ selectedValue: asStringArray(value),
65
+ searchable: field.searchable,
66
+ clearable: field.clearable ?? true,
67
+ disabled,
68
+ onChangeHook: (selected) => onChange(Array.isArray(selected) ? selected : [selected])
69
+ }
70
+ );
71
+ const AsyncSelectControl = ({
72
+ field,
73
+ value,
74
+ values,
75
+ onChange,
76
+ disabled
77
+ }) => {
78
+ const { t } = useTranslation("ui");
79
+ const [options, setOptions] = useState(field.initialOptions ?? []);
80
+ const [hasMore, setHasMore] = useState(false);
81
+ const [loading, setLoading] = useState(false);
82
+ const [failed, setFailed] = useState(false);
83
+ const pageRef = useRef(1);
84
+ const requestSeqRef = useRef(0);
85
+ const valuesRef = useRef(values);
86
+ valuesRef.current = values;
87
+ const loadPage = useCallback(
88
+ async (page, search, append) => {
89
+ const requestSeq = ++requestSeqRef.current;
90
+ setLoading(true);
91
+ setFailed(false);
92
+ try {
93
+ const result = await field.loadOptions({ page, search, values: valuesRef.current });
94
+ if (requestSeq !== requestSeqRef.current) return [];
95
+ const nextOptions = result?.options ?? [];
96
+ pageRef.current = page;
97
+ setHasMore(Boolean(result?.hasMore));
98
+ setOptions((previous) => append ? [...previous, ...nextOptions] : nextOptions);
99
+ return nextOptions;
100
+ } catch (error) {
101
+ if (requestSeq === requestSeqRef.current) {
102
+ uiLogger.error(`[FilterFieldControl] Failed to load options for "${field.key}"`, error);
103
+ setFailed(true);
104
+ }
105
+ return [];
106
+ } finally {
107
+ if (requestSeq === requestSeqRef.current) setLoading(false);
108
+ }
109
+ },
110
+ [field]
111
+ );
112
+ const dependencyKey = (field.dependsOn ?? []).map((key) => JSON.stringify(values?.[key])).join("|");
113
+ useEffect(() => {
114
+ let cancelled = false;
115
+ const run = async () => {
116
+ const loaded = await loadPage(1, void 0, false);
117
+ if (cancelled || loaded.length === 0) return;
118
+ };
119
+ void run();
120
+ return () => {
121
+ cancelled = true;
122
+ };
123
+ }, [dependencyKey, loadPage]);
124
+ const fetchMoreOptions = useCallback(
125
+ async ({ search, reset }) => {
126
+ const term = search.trim() === "" ? void 0 : search;
127
+ await loadPage(reset ? 1 : pageRef.current + 1, term, !reset);
128
+ },
129
+ [loadPage]
130
+ );
131
+ const selectedValue = field.multiple ? asStringArray(value) : asString(value);
132
+ if (failed) {
133
+ return /* @__PURE__ */ jsx(
134
+ NoDataFound,
135
+ {
136
+ size: "inline",
137
+ variant: "error",
138
+ message: t("filters.optionsError", { field: field.title }),
139
+ action: { label: t("actions.tryAgain"), onClick: () => void loadPage(1, void 0, false), icon: "refresh" }
140
+ }
141
+ );
142
+ }
143
+ return /* @__PURE__ */ jsx(
144
+ ControlledSelect,
145
+ {
146
+ label: field.title,
147
+ options,
148
+ selectedValue,
149
+ multiple: field.multiple,
150
+ inFieldChips: field.multiple,
151
+ searchable: field.searchable ?? true,
152
+ clearable: field.clearable ?? true,
153
+ disabled,
154
+ loading,
155
+ infiniteScroll: true,
156
+ hasMoreOptions: hasMore,
157
+ fetchMoreOptions,
158
+ onChangeHook: (selected) => onChange(
159
+ field.multiple ? Array.isArray(selected) ? selected : [selected] : Array.isArray(selected) ? selected[0] ?? "" : selected
160
+ )
161
+ }
162
+ );
163
+ };
164
+ const parseIsoDate = (value) => {
165
+ if (!value) return void 0;
166
+ const parsed = parse(value, "yyyy-MM-dd", /* @__PURE__ */ new Date());
167
+ return Number.isNaN(parsed.getTime()) ? void 0 : parsed;
168
+ };
169
+ const DateControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
170
+ DatePicker,
171
+ {
172
+ label: field.title,
173
+ minDate: field.minDate,
174
+ maxDate: field.maxDate,
175
+ disabled,
176
+ startValue: parseIsoDate(asString(value)),
177
+ onUpdate: (next) => onChange(next ?? "")
178
+ }
179
+ );
180
+ const DateRangeControl = ({
181
+ field,
182
+ value,
183
+ onChange,
184
+ disabled
185
+ }) => {
186
+ const range = value ?? {};
187
+ const from = parseIsoDate(range.from);
188
+ const to = parseIsoDate(range.to);
189
+ return /* @__PURE__ */ jsx(
190
+ DateRangePicker,
191
+ {
192
+ label: field.title,
193
+ minDate: field.minDate,
194
+ maxDate: field.maxDate,
195
+ disabled,
196
+ startValue: from ? { from, to } : void 0,
197
+ onUpdate: (next) => onChange({ from: next.from, to: next.to })
198
+ }
199
+ );
200
+ };
201
+ const RangeControl = ({ field, value, onChange, disabled }) => {
202
+ const { t } = useTranslation("ui");
203
+ const range = value ?? {};
204
+ const update = (bound, raw) => {
205
+ const parsed = raw === "" ? void 0 : Number(raw);
206
+ onChange({ ...range, [bound]: Number.isNaN(parsed) ? void 0 : parsed });
207
+ };
208
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-1.5", children: [
209
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground-muted", children: field.title }),
210
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2", children: [
211
+ /* @__PURE__ */ jsx(
212
+ ControlledInput,
213
+ {
214
+ type: "number",
215
+ label: t("filters.rangeMin"),
216
+ min: field.min,
217
+ max: field.max,
218
+ disabled,
219
+ value: range.min === void 0 ? "" : String(range.min),
220
+ onChange: (event) => update("min", event.target.value)
221
+ }
222
+ ),
223
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs text-foreground-faint", children: t("filters.rangeSeparator") }),
224
+ /* @__PURE__ */ jsx(
225
+ ControlledInput,
226
+ {
227
+ type: "number",
228
+ label: t("filters.rangeMax"),
229
+ min: field.min,
230
+ max: field.max,
231
+ disabled,
232
+ value: range.max === void 0 ? "" : String(range.max),
233
+ onChange: (event) => update("max", event.target.value)
234
+ }
235
+ )
236
+ ] })
237
+ ] });
238
+ };
239
+ const BooleanControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(
240
+ ControlledSwitch,
241
+ {
242
+ checked: value === true,
243
+ disabled,
244
+ label: field.label ?? field.title,
245
+ onChange: (checked) => onChange(checked)
246
+ }
247
+ );
248
+ const CheckboxGroupControl = ({
249
+ field,
250
+ value,
251
+ onChange,
252
+ disabled
253
+ }) => {
254
+ const { t } = useTranslation("ui");
255
+ const [search, setSearch] = useState("");
256
+ const selected = asStringArray(value);
257
+ const options = useMemo(() => {
258
+ const list = field.options ?? [];
259
+ if (!field.searchable || search.trim().length === 0) return list;
260
+ const term = search.trim().toLowerCase();
261
+ return list.filter((option) => option.label.toLowerCase().includes(term));
262
+ }, [field.options, field.searchable, search]);
263
+ const toggle = (optionValue) => {
264
+ onChange(
265
+ selected.includes(optionValue) ? selected.filter((entry) => entry !== optionValue) : [...selected, optionValue]
266
+ );
267
+ };
268
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
269
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground-muted", children: field.title }),
270
+ field.searchable && /* @__PURE__ */ jsx(
271
+ ControlledInput,
272
+ {
273
+ label: t("filters.searchOptions"),
274
+ value: search,
275
+ disabled,
276
+ onChange: (event) => setSearch(event.target.value)
277
+ }
278
+ ),
279
+ /* @__PURE__ */ jsx("div", { className: "flex max-h-56 flex-col gap-y-1 overflow-y-auto", children: options.length === 0 ? /* @__PURE__ */ jsx(NoDataFound, { size: "inline", variant: "search", message: t("filters.noOptions") }) : options.map((option) => /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-x-2", children: [
280
+ /* @__PURE__ */ jsx(
281
+ ControlledCheckbox,
282
+ {
283
+ checked: selected.includes(option.value),
284
+ disabled,
285
+ label: option.label,
286
+ onChange: () => toggle(option.value)
287
+ }
288
+ ),
289
+ option.secondaryLabel && /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-foreground-faint", children: option.secondaryLabel }),
290
+ option.swatch && /* @__PURE__ */ jsx(
291
+ "span",
292
+ {
293
+ className: "size-3 shrink-0 rounded-full border border-surface shadow-sm ring-1 ring-border",
294
+ style: { backgroundColor: option.swatch }
295
+ }
296
+ )
297
+ ] }, option.value)) })
298
+ ] });
299
+ };
300
+ const RadioControl = ({ field, value, onChange, disabled }) => {
301
+ const selected = asString(value);
302
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
303
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground-muted", children: field.title }),
304
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: (field.options ?? []).map((option) => /* @__PURE__ */ jsx(
305
+ OutlinedChip,
306
+ {
307
+ label: option.label,
308
+ preserveLabelCase: true,
309
+ tone: selected === option.value ? "purple" : "neutral",
310
+ variant: selected === option.value ? "solid" : "outlined",
311
+ size: "sm",
312
+ disabled,
313
+ onClick: () => onChange(selected === option.value ? "" : option.value)
314
+ },
315
+ option.value
316
+ )) })
317
+ ] });
318
+ };
319
+ const TagsControl = ({ field, value, onChange, disabled }) => {
320
+ const selected = asStringArray(value);
321
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
322
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-foreground-muted", children: field.title }),
323
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: (field.options ?? []).map((option) => {
324
+ const isSelected = selected.includes(option.value);
325
+ return /* @__PURE__ */ jsx(
326
+ OutlinedChip,
327
+ {
328
+ label: option.label,
329
+ preserveLabelCase: true,
330
+ tone: isSelected ? "purple" : "neutral",
331
+ variant: isSelected ? "solid" : "outlined",
332
+ size: "sm",
333
+ disabled,
334
+ onClick: () => onChange(isSelected ? selected.filter((entry) => entry !== option.value) : [...selected, option.value])
335
+ },
336
+ option.value
337
+ );
338
+ }) })
339
+ ] });
340
+ };
341
+ const CustomControl = ({ field, value, onChange, disabled }) => /* @__PURE__ */ jsx(Fragment, { children: field.render({ value, onChange, disabled }) });
342
+ const FILTER_CONTROL_REGISTRY = {
343
+ text: TextControl,
344
+ number: NumberControl,
345
+ select: SelectControl,
346
+ multiselect: MultiSelectControl,
347
+ "async-select": AsyncSelectControl,
348
+ date: DateControl,
349
+ "date-range": DateRangeControl,
350
+ range: RangeControl,
351
+ boolean: BooleanControl,
352
+ "checkbox-group": CheckboxGroupControl,
353
+ radio: RadioControl,
354
+ tags: TagsControl,
355
+ custom: CustomControl
356
+ };
357
+ const FilterFieldControl = ({
358
+ field,
359
+ value,
360
+ values,
361
+ onChange,
362
+ disabled,
363
+ loading
364
+ }) => {
365
+ if (loading) return /* @__PURE__ */ jsx(SkeletonLoading, { className: "h-10 w-full rounded-lg" });
366
+ const Control = FILTER_CONTROL_REGISTRY[field.kind];
367
+ if (!Control) return null;
368
+ const control = /* @__PURE__ */ jsx(
369
+ Control,
370
+ {
371
+ field,
372
+ value,
373
+ values,
374
+ onChange,
375
+ disabled: disabled || field.disabled
376
+ }
377
+ );
378
+ if (!field.description) return control;
379
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-1", children: [
380
+ control,
381
+ /* @__PURE__ */ jsx("span", { className: "px-1 text-xs text-foreground-faint", children: field.description })
382
+ ] });
383
+ };
384
+ export {
385
+ FilterFieldControl as default
386
+ };
387
+ //# sourceMappingURL=FilterFieldControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterFieldControl.js","sources":["../../../../src/components/Search/filters/FilterFieldControl.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { parse } from 'date-fns';\nimport { useTranslation } from 'react-i18next';\n\nimport DatePicker from '@/components/DateTime/DatePicker';\nimport DateRangePicker from '@/components/DateTime/DateRangePicker';\nimport ControlledCheckbox from '@/components/Form/ControlledCheckbox';\nimport ControlledInput from '@/components/Form/ControlledInput';\nimport { ControlledSelect, IControlledSelectFetchParams } from '@/components/Form/ControlledSelect';\nimport ControlledSwitch from '@/components/Form/ControlledSwitch';\nimport OutlinedChip from '@/components/UI/Chips/OutlinedChip';\nimport NoDataFound from '@/components/UI/NoDataFound';\nimport SkeletonLoading from '@/components/UI/SkeletonLoading';\nimport { uiLogger } from '@/helpers/uiLogger';\nimport { IFilterOption } from '@/interfaces/IFilterOption';\n\nimport {\n IFilterAsyncSelectField,\n IFilterBooleanField,\n IFilterCheckboxGroupField,\n IFilterCustomField,\n IFilterDateField,\n IFilterDateRangeField,\n IFilterDateRangeValue,\n IFilterMultiSelectField,\n IFilterNumberField,\n IFilterRadioField,\n IFilterRangeField,\n IFilterRangeValue,\n IFilterSelectField,\n IFilterTagsField,\n IFilterTextField,\n TFilterField,\n TFilterValues,\n} from './filterTypes';\n\nexport interface IFilterControlProps<TField extends TFilterField> {\n field: TField;\n value: unknown;\n values: TFilterValues;\n onChange: (value: unknown) => void;\n disabled?: boolean;\n}\n\nconst asString = (value: unknown): string => (typeof value === 'string' ? value : '');\nconst asStringArray = (value: unknown): Array<string> => (Array.isArray(value) ? value.map(String) : []);\n\n// ───── text / number ────────────────────────────────────────────────\n\nconst TextControl: React.FC<IFilterControlProps<IFilterTextField>> = ({ field, value, onChange, disabled }) => (\n <ControlledInput\n label={field.title}\n placeholder={field.placeholder}\n value={asString(value)}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n />\n);\n\nconst NumberControl: React.FC<IFilterControlProps<IFilterNumberField>> = ({ field, value, onChange, disabled }) => (\n <ControlledInput\n type=\"number\"\n label={field.title}\n placeholder={field.placeholder}\n min={field.min}\n max={field.max}\n value={value === undefined || value === null ? '' : String(value)}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n />\n);\n\n// ───── select family ────────────────────────────────────────────────\n\nconst SelectControl: React.FC<IFilterControlProps<IFilterSelectField>> = ({ field, value, onChange, disabled }) => (\n <ControlledSelect\n label={field.title}\n options={field.options ?? []}\n selectedValue={asString(value)}\n searchable={field.searchable}\n clearable={field.clearable ?? true}\n disabled={disabled}\n onChangeHook={(selected) => onChange(Array.isArray(selected) ? (selected[0] ?? '') : selected)}\n />\n);\n\nconst MultiSelectControl: React.FC<IFilterControlProps<IFilterMultiSelectField>> = ({\n field,\n value,\n onChange,\n disabled,\n}) => (\n <ControlledSelect\n multiple\n inFieldChips\n label={field.title}\n options={field.options ?? []}\n selectedValue={asStringArray(value)}\n searchable={field.searchable}\n clearable={field.clearable ?? true}\n disabled={disabled}\n onChangeHook={(selected) => onChange(Array.isArray(selected) ? selected : [selected])}\n />\n);\n\n/**\n * Owns paging, search and the option cache so consumers only answer\n * \"give me page N\". Previously every screen reimplemented this with its own\n * page counter, metadata state and loaded-once ref.\n */\nconst AsyncSelectControl: React.FC<IFilterControlProps<IFilterAsyncSelectField>> = ({\n field,\n value,\n values,\n onChange,\n disabled,\n}) => {\n const { t } = useTranslation('ui');\n const [options, setOptions] = useState<Array<IFilterOption>>(field.initialOptions ?? []);\n const [hasMore, setHasMore] = useState(false);\n const [loading, setLoading] = useState(false);\n const [failed, setFailed] = useState(false);\n const pageRef = useRef(1);\n // Discards responses that resolve after a newer request started (a search reset racing a\n // page append), so stale pages never overwrite fresher data.\n const requestSeqRef = useRef(0);\n const valuesRef = useRef(values);\n valuesRef.current = values;\n\n const loadPage = useCallback(\n async (page: number, search: string | undefined, append: boolean): Promise<Array<IFilterOption>> => {\n const requestSeq = ++requestSeqRef.current;\n setLoading(true);\n setFailed(false);\n try {\n const result = await field.loadOptions({ page, search, values: valuesRef.current });\n if (requestSeq !== requestSeqRef.current) return [];\n\n const nextOptions = result?.options ?? [];\n pageRef.current = page;\n setHasMore(Boolean(result?.hasMore));\n setOptions((previous) => (append ? [...previous, ...nextOptions] : nextOptions));\n\n return nextOptions;\n } catch (error) {\n if (requestSeq === requestSeqRef.current) {\n uiLogger.error(`[FilterFieldControl] Failed to load options for \"${field.key}\"`, error);\n setFailed(true);\n }\n\n return [];\n } finally {\n if (requestSeq === requestSeqRef.current) setLoading(false);\n }\n },\n [field],\n );\n\n const dependencyKey = (field.dependsOn ?? []).map((key) => JSON.stringify(values?.[key])).join('|');\n\n useEffect(() => {\n let cancelled = false;\n const run = async () => {\n const loaded = await loadPage(1, undefined, false);\n if (cancelled || loaded.length === 0) return;\n };\n void run();\n\n return () => {\n cancelled = true;\n };\n }, [dependencyKey, loadPage]);\n\n const fetchMoreOptions = useCallback(\n async ({ search, reset }: IControlledSelectFetchParams): Promise<void> => {\n const term = search.trim() === '' ? undefined : search;\n await loadPage(reset ? 1 : pageRef.current + 1, term, !reset);\n },\n [loadPage],\n );\n\n const selectedValue = field.multiple ? asStringArray(value) : asString(value);\n\n if (failed) {\n return (\n <NoDataFound\n size=\"inline\"\n variant=\"error\"\n message={t('filters.optionsError', { field: field.title })}\n action={{ label: t('actions.tryAgain'), onClick: () => void loadPage(1, undefined, false), icon: 'refresh' }}\n />\n );\n }\n\n return (\n <ControlledSelect\n label={field.title}\n options={options}\n selectedValue={selectedValue}\n multiple={field.multiple}\n inFieldChips={field.multiple}\n searchable={field.searchable ?? true}\n clearable={field.clearable ?? true}\n disabled={disabled}\n loading={loading}\n infiniteScroll\n hasMoreOptions={hasMore}\n fetchMoreOptions={fetchMoreOptions}\n onChangeHook={(selected) =>\n onChange(\n field.multiple\n ? Array.isArray(selected)\n ? selected\n : [selected]\n : Array.isArray(selected)\n ? (selected[0] ?? '')\n : selected,\n )\n }\n />\n );\n};\n\n// ───── dates ────────────────────────────────────────────────────────\n\nconst parseIsoDate = (value: string | undefined): Date | undefined => {\n if (!value) return undefined;\n const parsed = parse(value, 'yyyy-MM-dd', new Date());\n\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n};\n\nconst DateControl: React.FC<IFilterControlProps<IFilterDateField>> = ({ field, value, onChange, disabled }) => (\n <DatePicker\n label={field.title}\n minDate={field.minDate}\n maxDate={field.maxDate}\n disabled={disabled}\n startValue={parseIsoDate(asString(value))}\n onUpdate={(next) => onChange(next ?? '')}\n />\n);\n\nconst DateRangeControl: React.FC<IFilterControlProps<IFilterDateRangeField>> = ({\n field,\n value,\n onChange,\n disabled,\n}) => {\n const range = (value ?? {}) as IFilterDateRangeValue;\n const from = parseIsoDate(range.from);\n const to = parseIsoDate(range.to);\n\n return (\n <DateRangePicker\n label={field.title}\n minDate={field.minDate}\n maxDate={field.maxDate}\n disabled={disabled}\n startValue={from ? { from, to } : undefined}\n onUpdate={(next) => onChange({ from: next.from, to: next.to })}\n />\n );\n};\n\n// ───── range ────────────────────────────────────────────────────────\n\nconst RangeControl: React.FC<IFilterControlProps<IFilterRangeField>> = ({ field, value, onChange, disabled }) => {\n const { t } = useTranslation('ui');\n const range = (value ?? {}) as IFilterRangeValue;\n\n const update = (bound: 'min' | 'max', raw: string) => {\n const parsed = raw === '' ? undefined : Number(raw);\n onChange({ ...range, [bound]: Number.isNaN(parsed as number) ? undefined : parsed });\n };\n\n return (\n <div className=\"flex flex-col gap-y-1.5\">\n <span className=\"text-xs font-medium text-foreground-muted\">{field.title}</span>\n <div className=\"flex items-center gap-x-2\">\n <ControlledInput\n type=\"number\"\n label={t('filters.rangeMin')}\n min={field.min}\n max={field.max}\n disabled={disabled}\n value={range.min === undefined ? '' : String(range.min)}\n onChange={(event) => update('min', event.target.value)}\n />\n <span className=\"shrink-0 text-xs text-foreground-faint\">{t('filters.rangeSeparator')}</span>\n <ControlledInput\n type=\"number\"\n label={t('filters.rangeMax')}\n min={field.min}\n max={field.max}\n disabled={disabled}\n value={range.max === undefined ? '' : String(range.max)}\n onChange={(event) => update('max', event.target.value)}\n />\n </div>\n </div>\n );\n};\n\n// ───── boolean / checkbox / radio / tags ────────────────────────────\n\nconst BooleanControl: React.FC<IFilterControlProps<IFilterBooleanField>> = ({ field, value, onChange, disabled }) => (\n <ControlledSwitch\n checked={value === true}\n disabled={disabled}\n label={field.label ?? field.title}\n onChange={(checked) => onChange(checked)}\n />\n);\n\nconst CheckboxGroupControl: React.FC<IFilterControlProps<IFilterCheckboxGroupField>> = ({\n field,\n value,\n onChange,\n disabled,\n}) => {\n const { t } = useTranslation('ui');\n const [search, setSearch] = useState('');\n const selected = asStringArray(value);\n const options = useMemo(() => {\n const list = field.options ?? [];\n if (!field.searchable || search.trim().length === 0) return list;\n const term = search.trim().toLowerCase();\n\n return list.filter((option) => option.label.toLowerCase().includes(term));\n }, [field.options, field.searchable, search]);\n\n const toggle = (optionValue: string) => {\n onChange(\n selected.includes(optionValue) ? selected.filter((entry) => entry !== optionValue) : [...selected, optionValue],\n );\n };\n\n return (\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"text-xs font-medium text-foreground-muted\">{field.title}</span>\n {field.searchable && (\n <ControlledInput\n label={t('filters.searchOptions')}\n value={search}\n disabled={disabled}\n onChange={(event) => setSearch(event.target.value)}\n />\n )}\n <div className=\"flex max-h-56 flex-col gap-y-1 overflow-y-auto\">\n {options.length === 0 ? (\n <NoDataFound size=\"inline\" variant=\"search\" message={t('filters.noOptions')} />\n ) : (\n options.map((option) => (\n <div key={option.value} className=\"flex min-w-0 items-center gap-x-2\">\n <ControlledCheckbox\n checked={selected.includes(option.value)}\n disabled={disabled}\n label={option.label}\n onChange={() => toggle(option.value)}\n />\n {option.secondaryLabel && (\n <span className=\"shrink-0 text-xs tabular-nums text-foreground-faint\">{option.secondaryLabel}</span>\n )}\n {option.swatch && (\n <span\n className=\"size-3 shrink-0 rounded-full border border-surface shadow-sm ring-1 ring-border\"\n style={{ backgroundColor: option.swatch }}\n />\n )}\n </div>\n ))\n )}\n </div>\n </div>\n );\n};\n\nconst RadioControl: React.FC<IFilterControlProps<IFilterRadioField>> = ({ field, value, onChange, disabled }) => {\n const selected = asString(value);\n\n return (\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"text-xs font-medium text-foreground-muted\">{field.title}</span>\n <div className=\"flex flex-wrap gap-2\">\n {(field.options ?? []).map((option) => (\n <OutlinedChip\n key={option.value}\n label={option.label}\n preserveLabelCase\n tone={selected === option.value ? 'purple' : 'neutral'}\n variant={selected === option.value ? 'solid' : 'outlined'}\n size=\"sm\"\n disabled={disabled}\n onClick={() => onChange(selected === option.value ? '' : option.value)}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst TagsControl: React.FC<IFilterControlProps<IFilterTagsField>> = ({ field, value, onChange, disabled }) => {\n const selected = asStringArray(value);\n\n return (\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"text-xs font-medium text-foreground-muted\">{field.title}</span>\n <div className=\"flex flex-wrap gap-2\">\n {(field.options ?? []).map((option) => {\n const isSelected = selected.includes(option.value);\n\n return (\n <OutlinedChip\n key={option.value}\n label={option.label}\n preserveLabelCase\n tone={isSelected ? 'purple' : 'neutral'}\n variant={isSelected ? 'solid' : 'outlined'}\n size=\"sm\"\n disabled={disabled}\n onClick={() =>\n onChange(isSelected ? selected.filter((entry) => entry !== option.value) : [...selected, option.value])\n }\n />\n );\n })}\n </div>\n </div>\n );\n};\n\nconst CustomControl: React.FC<IFilterControlProps<IFilterCustomField>> = ({ field, value, onChange, disabled }) => (\n <>{field.render({ value, onChange, disabled })}</>\n);\n\n// ───── registry ─────────────────────────────────────────────────────\n\ntype TFilterControl = React.FC<IFilterControlProps<never>>;\n\nconst FILTER_CONTROL_REGISTRY: Record<TFilterField['kind'], TFilterControl> = {\n text: TextControl as TFilterControl,\n number: NumberControl as TFilterControl,\n select: SelectControl as TFilterControl,\n multiselect: MultiSelectControl as TFilterControl,\n 'async-select': AsyncSelectControl as TFilterControl,\n date: DateControl as TFilterControl,\n 'date-range': DateRangeControl as TFilterControl,\n range: RangeControl as TFilterControl,\n boolean: BooleanControl as TFilterControl,\n 'checkbox-group': CheckboxGroupControl as TFilterControl,\n radio: RadioControl as TFilterControl,\n tags: TagsControl as TFilterControl,\n custom: CustomControl as TFilterControl,\n};\n\ninterface IFilterFieldControlProps {\n field: TFilterField;\n value: unknown;\n values: TFilterValues;\n onChange: (value: unknown) => void;\n disabled?: boolean;\n loading?: boolean;\n}\n\nconst FilterFieldControl: React.FC<IFilterFieldControlProps> = ({\n field,\n value,\n values,\n onChange,\n disabled,\n loading,\n}) => {\n if (loading) return <SkeletonLoading className=\"h-10 w-full rounded-lg\" />;\n\n const Control = FILTER_CONTROL_REGISTRY[field.kind];\n if (!Control) return null;\n\n const control = (\n <Control\n field={field as never}\n value={value}\n values={values}\n onChange={onChange}\n disabled={disabled || field.disabled}\n />\n );\n\n if (!field.description) return control;\n\n return (\n <div className=\"flex flex-col gap-y-1\">\n {control}\n <span className=\"px-1 text-xs text-foreground-faint\">{field.description}</span>\n </div>\n );\n};\n\nexport default FilterFieldControl;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { IFiltersButtonSummaryItem } from './filterTypes';
2
+ export type { IFiltersButtonSummaryItem };
3
+ export interface IFiltersButtonProps {
4
+ onClick?: () => void;
5
+ activeCount?: number;
6
+ /** Applied filters listed on hover. Complements the permanent count badge. */
7
+ activeFilters?: Array<IFiltersButtonSummaryItem>;
8
+ loading?: boolean;
9
+ disabled?: boolean;
10
+ label?: string;
11
+ /**
12
+ * Match the buttons standing next to it: `sm` next to a search field or in a
13
+ * dense toolbar, `md` when the neighbours are full-size page actions.
14
+ */
15
+ size?: 'sm' | 'md';
16
+ className?: string;
17
+ }
18
+ /**
19
+ * The one trigger for every filter surface. Geometry matches the button the app
20
+ * has always used; the applied state is carried by colour and the count badge,
21
+ * so a filter is visible without hovering, and the hover adds the detail.
22
+ */
23
+ declare const FiltersButton: import('react').ForwardRefExoticComponent<IFiltersButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
24
+ export default FiltersButton;
@@ -0,0 +1,52 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import classNames from "classnames";
4
+ import { useTranslation } from "react-i18next";
5
+ import ControlledButton from "../../Form/ControlledButton.js";
6
+ import LoadingSpinner from "../../UI/LoadingSpinner.js";
7
+ import { MaterialSymbol } from "../../UI/MaterialSymbol/index.js";
8
+ import FiltersSummaryTooltip from "./FiltersSummaryTooltip.js";
9
+ const FiltersButton = forwardRef(
10
+ ({ onClick, activeCount = 0, activeFilters, loading, disabled, label, size = "sm", className, ...rest }, ref) => {
11
+ const { t } = useTranslation("ui");
12
+ const hasActiveFilters = activeCount > 0;
13
+ const trigger = /* @__PURE__ */ jsxs("span", { className: "relative inline-block", children: [
14
+ /* @__PURE__ */ jsxs(
15
+ ControlledButton,
16
+ {
17
+ ...rest,
18
+ ref,
19
+ onClick,
20
+ disabled: disabled || loading,
21
+ variant: "outlined",
22
+ tone: "neutral",
23
+ size,
24
+ className: classNames(
25
+ "flex flex-row items-center justify-center gap-x-1 capitalize",
26
+ size === "sm" && "max-w-28",
27
+ hasActiveFilters && "border-brand-border bg-brand-soft text-brand-emphasis hover:bg-brand-soft",
28
+ className
29
+ ),
30
+ children: [
31
+ loading ? /* @__PURE__ */ jsx(LoadingSpinner, { size: 5 }) : /* @__PURE__ */ jsx(MaterialSymbol, { icon: "filter_list_alt", size: 20 }),
32
+ label ?? t("actions.filter")
33
+ ]
34
+ }
35
+ ),
36
+ hasActiveFilters && /* @__PURE__ */ jsx("span", { className: "absolute -right-2 -top-2 flex size-5 cursor-default items-center justify-center rounded-full bg-brand text-xs text-brand-fg", children: activeCount })
37
+ ] });
38
+ return /* @__PURE__ */ jsx(
39
+ FiltersSummaryTooltip,
40
+ {
41
+ items: activeFilters ?? [],
42
+ fallback: hasActiveFilters ? t("filters.appliedCount", { count: activeCount }) : void 0,
43
+ children: trigger
44
+ }
45
+ );
46
+ }
47
+ );
48
+ FiltersButton.displayName = "FiltersButton";
49
+ export {
50
+ FiltersButton as default
51
+ };
52
+ //# sourceMappingURL=FiltersButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FiltersButton.js","sources":["../../../../src/components/Search/filters/FiltersButton.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport classNames from 'classnames';\nimport { useTranslation } from 'react-i18next';\n\nimport ControlledButton from '@/components/Form/ControlledButton';\nimport LoadingSpinner from '@/components/UI/LoadingSpinner';\nimport { MaterialSymbol } from '@/components/UI/MaterialSymbol';\n\nimport FiltersSummaryTooltip from './FiltersSummaryTooltip';\nimport { IFiltersButtonSummaryItem } from './filterTypes';\n\nexport type { IFiltersButtonSummaryItem };\n\nexport interface IFiltersButtonProps {\n onClick?: () => void;\n activeCount?: number;\n /** Applied filters listed on hover. Complements the permanent count badge. */\n activeFilters?: Array<IFiltersButtonSummaryItem>;\n loading?: boolean;\n disabled?: boolean;\n label?: string;\n /**\n * Match the buttons standing next to it: `sm` next to a search field or in a\n * dense toolbar, `md` when the neighbours are full-size page actions.\n */\n size?: 'sm' | 'md';\n className?: string;\n}\n\n/**\n * The one trigger for every filter surface. Geometry matches the button the app\n * has always used; the applied state is carried by colour and the count badge,\n * so a filter is visible without hovering, and the hover adds the detail.\n */\nconst FiltersButton = forwardRef<HTMLButtonElement, IFiltersButtonProps>(\n ({ onClick, activeCount = 0, activeFilters, loading, disabled, label, size = 'sm', className, ...rest }, ref) => {\n const { t } = useTranslation('ui');\n const hasActiveFilters = activeCount > 0;\n\n const trigger = (\n <span className=\"relative inline-block\">\n <ControlledButton\n {...rest}\n ref={ref}\n onClick={onClick}\n disabled={disabled || loading}\n variant=\"outlined\"\n tone=\"neutral\"\n size={size}\n className={classNames(\n 'flex flex-row items-center justify-center gap-x-1 capitalize',\n size === 'sm' && 'max-w-28',\n hasActiveFilters && 'border-brand-border bg-brand-soft text-brand-emphasis hover:bg-brand-soft',\n className,\n )}\n >\n {loading ? <LoadingSpinner size={5} /> : <MaterialSymbol icon=\"filter_list_alt\" size={20} />}\n {label ?? t('actions.filter')}\n </ControlledButton>\n\n {hasActiveFilters && (\n <span className=\"absolute -right-2 -top-2 flex size-5 cursor-default items-center justify-center rounded-full bg-brand text-xs text-brand-fg\">\n {activeCount}\n </span>\n )}\n </span>\n );\n\n return (\n <FiltersSummaryTooltip\n items={activeFilters ?? []}\n fallback={hasActiveFilters ? t('filters.appliedCount', { count: activeCount }) : undefined}\n >\n {trigger}\n </FiltersSummaryTooltip>\n );\n },\n);\n\nFiltersButton.displayName = 'FiltersButton';\n\nexport default FiltersButton;\n"],"names":[],"mappings":";;;;;;;;AAkCA,MAAM,gBAAgB;AAAA,EACpB,CAAC,EAAE,SAAS,cAAc,GAAG,eAAe,SAAS,UAAU,OAAO,OAAO,MAAM,WAAW,GAAG,KAAA,GAAQ,QAAQ;AAC/G,UAAM,EAAE,EAAA,IAAM,eAAe,IAAI;AACjC,UAAM,mBAAmB,cAAc;AAEvC,UAAM,UACJ,qBAAC,QAAA,EAAK,WAAU,yBACd,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA;AAAA,UACA,UAAU,YAAY;AAAA,UACtB,SAAQ;AAAA,UACR,MAAK;AAAA,UACL;AAAA,UACA,WAAW;AAAA,YACT;AAAA,YACA,SAAS,QAAQ;AAAA,YACjB,oBAAoB;AAAA,YACpB;AAAA,UAAA;AAAA,UAGD,UAAA;AAAA,YAAA,UAAU,oBAAC,gBAAA,EAAe,MAAM,EAAA,CAAG,wBAAM,gBAAA,EAAe,MAAK,mBAAkB,MAAM,GAAA,CAAI;AAAA,YACzF,SAAS,EAAE,gBAAgB;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAG7B,oBACC,oBAAC,QAAA,EAAK,WAAU,+HACb,UAAA,YAAA,CACH;AAAA,IAAA,GAEJ;AAGF,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,iBAAiB,CAAA;AAAA,QACxB,UAAU,mBAAmB,EAAE,wBAAwB,EAAE,OAAO,YAAA,CAAa,IAAI;AAAA,QAEhF,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEA,cAAc,cAAc;"}
@@ -0,0 +1,18 @@
1
+ import { IFilterGroup, TFilterField, TFilterValues } from './filterTypes';
2
+ import * as React from 'react';
3
+ export interface IFiltersFormProps {
4
+ fields: Array<TFilterField>;
5
+ groups?: Array<IFilterGroup>;
6
+ values: TFilterValues;
7
+ onValueChange: (key: string, value: unknown) => void;
8
+ disabled?: boolean;
9
+ loading?: boolean;
10
+ emptyMessage?: string;
11
+ className?: string;
12
+ }
13
+ /**
14
+ * Renders a schema. Knows nothing about drawers, so the same form powers the
15
+ * side panel, an inline bar and a popover.
16
+ */
17
+ declare const FiltersForm: React.FC<IFiltersFormProps>;
18
+ export default FiltersForm;
@@ -0,0 +1,112 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useState } from "react";
3
+ import classNames from "classnames";
4
+ import { useTranslation } from "react-i18next";
5
+ import ControlledButton from "../../Form/ControlledButton.js";
6
+ import ControlledTooltip from "../../UI/ControlledTooltip.js";
7
+ import { MaterialSymbol } from "../../UI/MaterialSymbol/index.js";
8
+ import NoDataFound from "../../UI/NoDataFound/index.js";
9
+ import FilterFieldControl from "./FilterFieldControl.js";
10
+ import { getVisibleFilterFields } from "./filterValues.js";
11
+ const UNGROUPED = "__ungrouped";
12
+ const FiltersForm = ({
13
+ fields,
14
+ groups,
15
+ values,
16
+ onValueChange,
17
+ disabled,
18
+ loading,
19
+ emptyMessage,
20
+ className
21
+ }) => {
22
+ const { t } = useTranslation("ui");
23
+ const visibleFields = useMemo(() => getVisibleFilterFields(fields ?? [], values ?? {}), [fields, values]);
24
+ const renderableGroups = useMemo(() => {
25
+ const declared = groups ?? [];
26
+ if (declared.length === 0) return [{ group: null, fields: visibleFields }];
27
+ const byGroup = /* @__PURE__ */ new Map();
28
+ visibleFields.forEach((field) => {
29
+ const groupId = field.group ?? UNGROUPED;
30
+ byGroup.set(groupId, [...byGroup.get(groupId) ?? [], field]);
31
+ });
32
+ const result = [];
33
+ const ungrouped = byGroup.get(UNGROUPED) ?? [];
34
+ if (ungrouped.length > 0) result.push({ group: null, fields: ungrouped });
35
+ declared.forEach((group) => {
36
+ const groupFields = byGroup.get(group.id) ?? [];
37
+ if (groupFields.length > 0) result.push({ group, fields: groupFields });
38
+ });
39
+ return result;
40
+ }, [groups, visibleFields]);
41
+ const [collapsed, setCollapsed] = useState(() => {
42
+ const initial = {};
43
+ (groups ?? []).forEach((group) => {
44
+ if (group.collapsible && group.defaultOpen === false) initial[group.id] = true;
45
+ });
46
+ return initial;
47
+ });
48
+ if (visibleFields.length === 0 && !loading) {
49
+ return /* @__PURE__ */ jsx(NoDataFound, { size: "sm", variant: "empty", message: emptyMessage ?? t("filters.noFields") });
50
+ }
51
+ const renderField = (field) => {
52
+ const control = /* @__PURE__ */ jsx(
53
+ FilterFieldControl,
54
+ {
55
+ field,
56
+ value: values?.[field.key],
57
+ values: values ?? {},
58
+ onChange: (next) => onValueChange(field.key, next),
59
+ disabled,
60
+ loading
61
+ }
62
+ );
63
+ if (!field.disabled || !field.disabledReason) return /* @__PURE__ */ jsx("div", { children: control }, field.key);
64
+ return /* @__PURE__ */ jsx(ControlledTooltip, { className: "z-[9999]", content: field.disabledReason, children: /* @__PURE__ */ jsx("div", { children: control }) }, field.key);
65
+ };
66
+ return /* @__PURE__ */ jsx("div", { className: classNames("flex flex-col gap-y-4", className), children: renderableGroups.map(({ group, fields: groupFields }) => {
67
+ if (!group) {
68
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-y-4", children: groupFields.map(renderField) }, UNGROUPED);
69
+ }
70
+ const isCollapsed = Boolean(collapsed[group.id]);
71
+ return /* @__PURE__ */ jsxs(
72
+ "section",
73
+ {
74
+ className: "flex flex-col gap-y-3 border-t border-border-subtle pt-4 first:border-t-0 first:pt-0",
75
+ children: [
76
+ /* @__PURE__ */ jsxs(
77
+ ControlledButton,
78
+ {
79
+ defaultHtmlButton: true,
80
+ disabled: !group.collapsible,
81
+ onClick: () => group.collapsible && setCollapsed((prev) => ({ ...prev, [group.id]: !prev[group.id] })),
82
+ className: "flex w-full items-center justify-between gap-x-2 text-left",
83
+ children: [
84
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-x-2", children: [
85
+ group.icon && /* @__PURE__ */ jsx(MaterialSymbol, { icon: group.icon, size: 16, className: "text-brand-emphasis" }),
86
+ /* @__PURE__ */ jsxs("span", { className: "flex flex-col", children: [
87
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold uppercase tracking-wide text-foreground-subtle", children: group.title }),
88
+ group.description && /* @__PURE__ */ jsx("span", { className: "text-xs text-foreground-faint", children: group.description })
89
+ ] })
90
+ ] }),
91
+ group.collapsible && /* @__PURE__ */ jsx(
92
+ MaterialSymbol,
93
+ {
94
+ icon: isCollapsed ? "expand_more" : "expand_less",
95
+ size: 18,
96
+ className: "text-foreground-faint"
97
+ }
98
+ )
99
+ ]
100
+ }
101
+ ),
102
+ !isCollapsed && /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-y-4", children: groupFields.map(renderField) })
103
+ ]
104
+ },
105
+ group.id
106
+ );
107
+ }) });
108
+ };
109
+ export {
110
+ FiltersForm as default
111
+ };
112
+ //# sourceMappingURL=FiltersForm.js.map