@povio/ui 0.0.2 → 0.0.3

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 (485) hide show
  1. package/package.json +67 -10
  2. package/src/assets/icons/AlignCenter.tsx +16 -0
  3. package/src/assets/icons/AlignLeft.tsx +16 -0
  4. package/src/assets/icons/AlignLeftRight.tsx +16 -0
  5. package/src/assets/icons/AlignRight.tsx +16 -0
  6. package/src/assets/icons/ArrowDropDown.tsx +16 -0
  7. package/src/assets/icons/ArrowDropUp.tsx +16 -0
  8. package/src/assets/icons/ArrowLeft.tsx +16 -0
  9. package/src/assets/icons/ArrowRight.tsx +16 -0
  10. package/src/assets/icons/Bold.tsx +16 -0
  11. package/src/assets/icons/BulletedList.tsx +16 -0
  12. package/src/assets/icons/Calendar.tsx +18 -0
  13. package/src/assets/icons/Check.tsx +18 -0
  14. package/src/assets/icons/CheckCircle.tsx +16 -0
  15. package/src/assets/icons/CheckboxCheckmark.tsx +19 -0
  16. package/src/assets/icons/CheckboxIndeterminate.tsx +19 -0
  17. package/src/assets/icons/ChevronDown.tsx +18 -0
  18. package/src/assets/icons/ChevronLeft.tsx +18 -0
  19. package/src/assets/icons/ChevronRight.tsx +18 -0
  20. package/src/assets/icons/ChevronUp.tsx +18 -0
  21. package/src/assets/icons/ChevronsLeft.tsx +24 -0
  22. package/src/assets/icons/ChevronsRight.tsx +24 -0
  23. package/src/assets/icons/Clock.tsx +16 -0
  24. package/src/assets/icons/Close.tsx +16 -0
  25. package/src/assets/icons/DateTime.tsx +20 -0
  26. package/src/assets/icons/Drag.tsx +16 -0
  27. package/src/assets/icons/File.tsx +18 -0
  28. package/src/assets/icons/Highlight.tsx +16 -0
  29. package/src/assets/icons/HighlightOn.tsx +26 -0
  30. package/src/assets/icons/Info.tsx +24 -0
  31. package/src/assets/icons/Italic.tsx +16 -0
  32. package/src/assets/icons/Link.tsx +16 -0
  33. package/src/assets/icons/Menu.tsx +18 -0
  34. package/src/assets/icons/NumberedList.tsx +16 -0
  35. package/src/assets/icons/PointerHorizontal.tsx +16 -0
  36. package/src/assets/icons/PointerVertical.tsx +16 -0
  37. package/src/assets/icons/Send.tsx +18 -0
  38. package/src/assets/icons/Strikethrough.tsx +16 -0
  39. package/src/assets/icons/TextColor.tsx +24 -0
  40. package/src/assets/icons/Today.tsx +16 -0
  41. package/src/assets/icons/Underlined.tsx +18 -0
  42. package/src/assets/icons/Upload.tsx +20 -0
  43. package/src/assets/icons/View.tsx +16 -0
  44. package/src/assets/icons/ViewOff.tsx +16 -0
  45. package/src/assets/icons/Warningfilled.tsx +18 -0
  46. package/src/assets/locales/en/translation.json +156 -0
  47. package/src/assets/locales/sl/translation.json +152 -0
  48. package/src/components/Menu/Menu.tsx +29 -0
  49. package/src/components/Menu/MenuDesktop.tsx +68 -0
  50. package/src/components/Menu/MenuItem.tsx +33 -0
  51. package/src/components/Menu/MenuMobile.tsx +81 -0
  52. package/src/components/Menu/MenuPopover.tsx +45 -0
  53. package/src/components/buttons/Button/Button.tsx +108 -0
  54. package/src/components/buttons/Button/button.cva.ts +678 -0
  55. package/src/components/buttons/IconButton/IconButton.tsx +25 -0
  56. package/src/components/buttons/InlineIconButton/InlineIconButton.tsx +27 -0
  57. package/src/components/buttons/PillButton/PillButton.tsx +70 -0
  58. package/src/components/buttons/PillButton/pillButton.cva.ts +88 -0
  59. package/src/components/buttons/SplitButton/SplitButton.tsx +61 -0
  60. package/src/components/buttons/TextButton/TextButton.tsx +29 -0
  61. package/src/components/buttons/ToggleButton/ToggleButton.tsx +28 -0
  62. package/src/components/buttons/shared/ButtonContent.tsx +61 -0
  63. package/src/components/buttons/shared/buttonContent.cva.ts +18 -0
  64. package/src/components/inputs/Checkbox/Checkbox.tsx +101 -0
  65. package/src/components/inputs/Checkbox/CheckboxCheckmark.tsx +47 -0
  66. package/src/components/inputs/Checkbox/checkbox.cva.ts +51 -0
  67. package/src/components/inputs/DateTime/DatePicker/DatePicker.tsx +269 -0
  68. package/src/components/inputs/DateTime/DateRangePicker/DateRangePicker.tsx +808 -0
  69. package/src/components/inputs/DateTime/DateTimePicker/DateTimePicker.tsx +291 -0
  70. package/src/components/inputs/DateTime/TimePicker/TimePicker.tsx +255 -0
  71. package/src/components/inputs/DateTime/shared/Calendar.tsx +104 -0
  72. package/src/components/inputs/DateTime/shared/CalendarCell.tsx +247 -0
  73. package/src/components/inputs/DateTime/shared/CalendarGrid.tsx +102 -0
  74. package/src/components/inputs/DateTime/shared/CalendarHeader.tsx +110 -0
  75. package/src/components/inputs/DateTime/shared/CalendarSelectHeader.tsx +228 -0
  76. package/src/components/inputs/DateTime/shared/DateField.tsx +83 -0
  77. package/src/components/inputs/DateTime/shared/DatePickerInput.tsx +170 -0
  78. package/src/components/inputs/DateTime/shared/DateSegmentItem.tsx +65 -0
  79. package/src/components/inputs/DateTime/shared/DateTimeDialog.tsx +87 -0
  80. package/src/components/inputs/DateTime/shared/DateTimeDialogFooter.tsx +42 -0
  81. package/src/components/inputs/DateTime/shared/MonthPicker.tsx +91 -0
  82. package/src/components/inputs/DateTime/shared/RangeCalendar.tsx +160 -0
  83. package/src/components/inputs/DateTime/shared/TimeField.tsx +36 -0
  84. package/src/components/inputs/DateTime/shared/TimePickerForm.tsx +222 -0
  85. package/src/components/inputs/DateTime/shared/TimePickerInput.tsx +114 -0
  86. package/src/components/inputs/DateTime/shared/YearPicker.tsx +100 -0
  87. package/src/components/inputs/File/FileUpload.tsx +285 -0
  88. package/src/components/inputs/File/FileUploadContainer.tsx +16 -0
  89. package/src/components/inputs/File/InputUpload.tsx +196 -0
  90. package/src/components/inputs/File/fileUpload.types.ts +100 -0
  91. package/src/components/inputs/File/index.ts +15 -0
  92. package/src/components/inputs/File/inputUpload.types.ts +41 -0
  93. package/src/components/inputs/File/shared/FileCard.tsx +72 -0
  94. package/src/components/inputs/File/shared/FileCardList.tsx +30 -0
  95. package/src/components/inputs/File/shared/FileProgressBar.tsx +25 -0
  96. package/src/components/inputs/File/shared/FileUploadContent.tsx +99 -0
  97. package/src/components/inputs/File/shared/FileUploadContentEmpty.tsx +94 -0
  98. package/src/components/inputs/File/shared/FileUploadContentError.tsx +170 -0
  99. package/src/components/inputs/File/shared/FileUploadContentFilled.tsx +179 -0
  100. package/src/components/inputs/File/shared/FileUploadContentLoading.tsx +115 -0
  101. package/src/components/inputs/File/shared/InputUploadContent.tsx +68 -0
  102. package/src/components/inputs/File/shared/InputUploadFilled.tsx +32 -0
  103. package/src/components/inputs/File/shared/fileUpload.cva.ts +59 -0
  104. package/src/components/inputs/File/shared/inputUploadButton.cva.ts +48 -0
  105. package/src/components/inputs/FormField/FormField.tsx +69 -0
  106. package/src/components/inputs/FormField/FormFieldError.tsx +21 -0
  107. package/src/components/inputs/FormField/FormFieldHeader.tsx +75 -0
  108. package/src/components/inputs/FormField/FormFieldHeaderClose.tsx +23 -0
  109. package/src/components/inputs/FormField/FormFieldLabel.tsx +41 -0
  110. package/src/components/inputs/Input/NumberInput/NumberInput.tsx +180 -0
  111. package/src/components/inputs/Input/PasswordInput/PasswordInput.tsx +34 -0
  112. package/src/components/inputs/Input/TextArea/TextArea.tsx +166 -0
  113. package/src/components/inputs/Input/TextInput/TextInput.tsx +181 -0
  114. package/src/components/inputs/Input/shared/InputContent.tsx +154 -0
  115. package/src/components/inputs/Inputs/Form.tsx +129 -0
  116. package/src/components/inputs/Inputs/InputItem.tsx +127 -0
  117. package/src/components/inputs/Inputs/Inputs.tsx +43 -0
  118. package/src/components/inputs/RadioGroup/RadioGroup.tsx +139 -0
  119. package/src/components/inputs/RadioGroup/radio.cva.ts +51 -0
  120. package/src/components/inputs/Selection/Autocomplete/Autocomplete.tsx +61 -0
  121. package/src/components/inputs/Selection/Autocomplete/QueryAutocomplete.tsx +58 -0
  122. package/src/components/inputs/Selection/Select/Select.tsx +59 -0
  123. package/src/components/inputs/Selection/shared/SelectBase.tsx +69 -0
  124. package/src/components/inputs/Selection/shared/SelectDesktop.tsx +236 -0
  125. package/src/components/inputs/Selection/shared/SelectInput.tsx +278 -0
  126. package/src/components/inputs/Selection/shared/SelectListBox.tsx +121 -0
  127. package/src/components/inputs/Selection/shared/SelectListBoxItem.tsx +79 -0
  128. package/src/components/inputs/Selection/shared/SelectListBoxItemSelectAll.tsx +40 -0
  129. package/src/components/inputs/Selection/shared/SelectListBoxLoadingItem.tsx +52 -0
  130. package/src/components/inputs/Selection/shared/SelectListBoxSelectionBar.tsx +39 -0
  131. package/src/components/inputs/Selection/shared/SelectMobile.tsx +169 -0
  132. package/src/components/inputs/Selection/shared/select.context.tsx +316 -0
  133. package/src/components/inputs/Selection/shared/select.types.ts +75 -0
  134. package/src/components/inputs/Selection/shared/useSelectItems.tsx +127 -0
  135. package/src/components/inputs/Slider/Slider.tsx +174 -0
  136. package/src/components/inputs/TextEditor/TextEditor.tsx +239 -0
  137. package/src/components/inputs/TextEditor/Toolbar/ColorPicker.tsx +34 -0
  138. package/src/components/inputs/TextEditor/Toolbar/ColorPickerDropdown.tsx +74 -0
  139. package/src/components/inputs/TextEditor/Toolbar/HyperlinkAction.tsx +87 -0
  140. package/src/components/inputs/TextEditor/Toolbar/TextAlignSelect.tsx +64 -0
  141. package/src/components/inputs/TextEditor/Toolbar/TextColorSelect.tsx +30 -0
  142. package/src/components/inputs/TextEditor/Toolbar/TextEditorToolbar.tsx +40 -0
  143. package/src/components/inputs/TextEditor/Toolbar/TextHighlightSelect.tsx +39 -0
  144. package/src/components/inputs/TextEditor/Toolbar/TextListActions.tsx +57 -0
  145. package/src/components/inputs/TextEditor/Toolbar/TextMarksActions.tsx +79 -0
  146. package/src/components/inputs/TextEditor/Toolbar/TextStyleSelect.tsx +73 -0
  147. package/src/components/inputs/TextEditor/textEditor.types.ts +43 -0
  148. package/src/components/inputs/Toggle/Toggle.tsx +80 -0
  149. package/src/components/inputs/Toggle/toggle.cva.ts +48 -0
  150. package/src/components/inputs/shared/CheckContent.tsx +26 -0
  151. package/src/components/inputs/shared/InputClear.tsx +29 -0
  152. package/src/components/inputs/shared/form.types.ts +28 -0
  153. package/src/components/inputs/shared/input.cva.ts +182 -0
  154. package/src/components/inputs/shared/label.cva.ts +146 -0
  155. package/src/components/outline.clsx.ts +9 -0
  156. package/src/components/overlays/ActionModal/ActionModal.tsx +93 -0
  157. package/src/components/overlays/BottomSheet/BottomSheet.tsx +270 -0
  158. package/src/components/overlays/Drawer/Drawer.tsx +93 -0
  159. package/src/components/overlays/Modal/Modal.tsx +63 -0
  160. package/src/components/overlays/Modal/modal.cva.ts +55 -0
  161. package/src/components/overlays/ResponsivePopover/ResponsivePopover.tsx +77 -0
  162. package/src/components/overlays/Tooltip/Tooltip.tsx +47 -0
  163. package/src/components/overlays/Tooltip/TooltipEllipsis.tsx +35 -0
  164. package/src/components/segment/Segment.tsx +121 -0
  165. package/src/components/segment/SegmentItem.tsx +41 -0
  166. package/src/components/segment/segment.types.ts +44 -0
  167. package/src/components/shared/pagination/Pagination.tsx +75 -0
  168. package/src/components/shared/pagination/PaginationList.tsx +174 -0
  169. package/src/components/shared/pagination/minWidth.cva.ts +13 -0
  170. package/src/components/status/Alert/Alert.tsx +58 -0
  171. package/src/components/status/Alert/alert.cva.ts +66 -0
  172. package/src/components/status/Loader/Loader.tsx +32 -0
  173. package/src/components/status/Loader/loader.cva.ts +29 -0
  174. package/src/components/status/Toast/Toast.tsx +86 -0
  175. package/src/components/status/Toast/toast.cva.ts +154 -0
  176. package/src/components/status/Toast/useToast.tsx +77 -0
  177. package/src/components/status/shared/status.cva.ts +60 -0
  178. package/src/components/table/CellText.tsx +23 -0
  179. package/src/components/table/ColumnConfig.tsx +145 -0
  180. package/src/components/table/HeaderText.tsx +18 -0
  181. package/src/components/table/InfiniteTable.tsx +51 -0
  182. package/src/components/table/PaginatedTable.tsx +38 -0
  183. package/src/components/table/Table.tsx +456 -0
  184. package/src/components/table/table.cva.ts +47 -0
  185. package/src/components/text/Link/Link.tsx +21 -0
  186. package/src/components/text/Link/link.cva.ts +21 -0
  187. package/src/components/text/Tag/Tag.tsx +59 -0
  188. package/src/components/text/Tag/tag.cva.ts +62 -0
  189. package/src/components/text/Typography/Typography.tsx +33 -0
  190. package/src/components/text/Typography/typography.cva.ts +102 -0
  191. package/src/config/confirmation.context.tsx +133 -0
  192. package/src/config/i18n.ts +12 -0
  193. package/src/config/router.context.tsx +66 -0
  194. package/src/config/uiConfig.context.tsx +89 -0
  195. package/src/config/uiStyle.context.tsx +100 -0
  196. package/src/helpers/dynamicColumns.ts +567 -0
  197. package/src/helpers/dynamicInputs.ts +392 -0
  198. package/src/hooks/useAutosave.ts +109 -0
  199. package/src/hooks/useBreakpoint.ts +26 -0
  200. package/src/hooks/useDebounceCallback.ts +35 -0
  201. package/src/hooks/useDeepCompare.ts +27 -0
  202. package/src/hooks/useFilters.ts +154 -0
  203. package/src/hooks/useForm.ts +54 -0
  204. package/src/hooks/useFormAutosave.ts +100 -0
  205. package/src/hooks/useIntersectionObserver.ts +33 -0
  206. package/src/hooks/useLocalStorage.ts +81 -0
  207. package/src/hooks/useLongPressRepeat.ts +40 -0
  208. package/src/hooks/usePagination.ts +41 -0
  209. package/src/hooks/useScrollableListBox.ts +35 -0
  210. package/src/hooks/useSingletonMutation.ts +30 -0
  211. package/src/hooks/useSorting.ts +39 -0
  212. package/src/hooks/useStateAndRef.ts +20 -0
  213. package/src/hooks/useTableColumnConfig.ts +86 -0
  214. package/src/hooks/useTableNav.ts +615 -0
  215. package/src/hooks/useTranslationMemo.ts +17 -0
  216. package/src/index.ts +252 -0
  217. package/src/types/{common.d.ts → common.ts} +15 -4
  218. package/src/types/i18next.d.ts +11 -0
  219. package/src/types/react-query.ts +48 -0
  220. package/src/types/table.d.ts +17 -0
  221. package/src/utils/array.utils.spec.ts +16 -0
  222. package/src/utils/array.utils.ts +9 -0
  223. package/src/utils/compoundMapper.spec.ts +91 -0
  224. package/src/utils/compoundMapper.ts +42 -0
  225. package/src/utils/date-time.utils.spec.ts +48 -0
  226. package/src/utils/date-time.utils.ts +85 -0
  227. package/src/utils/date.utils.spec.ts +12 -0
  228. package/src/utils/date.utils.ts +9 -0
  229. package/src/utils/dom.utils.ts +16 -0
  230. package/src/utils/file.utils.ts +73 -0
  231. package/src/utils/isEqual.ts +153 -0
  232. package/src/utils/logger.ts +19 -0
  233. package/src/utils/object.utils.ts +62 -0
  234. package/src/utils/queries.utils.ts +10 -0
  235. package/src/utils/rest/interceptors/logging.interceptor.ts +16 -0
  236. package/src/utils/rest/interceptors/response.interceptor.ts +27 -0
  237. package/src/utils/rest/interceptors/rest-interceptor.ts +22 -0
  238. package/src/utils/rest/rest-client.ts +125 -0
  239. package/src/utils/rest/rest.utils.ts +65 -0
  240. package/src/utils/routing.utils.ts +12 -0
  241. package/src/utils/string.utils.ts +9 -0
  242. package/src/utils/vendor/error-handling.ts +170 -0
  243. package/src/utils/zod.utils.ts +95 -0
  244. package/index.js +0 -61206
  245. package/povio-ui-0.0.2.tgz +0 -0
  246. package/src/assets/icons/AlignCenter.d.ts +0 -2
  247. package/src/assets/icons/AlignLeft.d.ts +0 -2
  248. package/src/assets/icons/AlignLeftRight.d.ts +0 -2
  249. package/src/assets/icons/AlignRight.d.ts +0 -2
  250. package/src/assets/icons/ArrowDropDown.d.ts +0 -2
  251. package/src/assets/icons/ArrowDropUp.d.ts +0 -2
  252. package/src/assets/icons/ArrowLeft.d.ts +0 -2
  253. package/src/assets/icons/ArrowRight.d.ts +0 -2
  254. package/src/assets/icons/Bold.d.ts +0 -2
  255. package/src/assets/icons/BulletedList.d.ts +0 -2
  256. package/src/assets/icons/Calendar.d.ts +0 -2
  257. package/src/assets/icons/Check.d.ts +0 -2
  258. package/src/assets/icons/CheckCircle.d.ts +0 -2
  259. package/src/assets/icons/CheckboxCheckmark.d.ts +0 -2
  260. package/src/assets/icons/CheckboxIndeterminate.d.ts +0 -2
  261. package/src/assets/icons/ChevronDown.d.ts +0 -2
  262. package/src/assets/icons/ChevronLeft.d.ts +0 -2
  263. package/src/assets/icons/ChevronRight.d.ts +0 -2
  264. package/src/assets/icons/ChevronUp.d.ts +0 -2
  265. package/src/assets/icons/ChevronsLeft.d.ts +0 -2
  266. package/src/assets/icons/ChevronsRight.d.ts +0 -2
  267. package/src/assets/icons/Clock.d.ts +0 -2
  268. package/src/assets/icons/Close.d.ts +0 -2
  269. package/src/assets/icons/DateTime.d.ts +0 -2
  270. package/src/assets/icons/Drag.d.ts +0 -2
  271. package/src/assets/icons/File.d.ts +0 -2
  272. package/src/assets/icons/Highlight.d.ts +0 -2
  273. package/src/assets/icons/HighlightOn.d.ts +0 -6
  274. package/src/assets/icons/Info.d.ts +0 -2
  275. package/src/assets/icons/Italic.d.ts +0 -2
  276. package/src/assets/icons/Link.d.ts +0 -2
  277. package/src/assets/icons/Menu.d.ts +0 -2
  278. package/src/assets/icons/NumberedList.d.ts +0 -2
  279. package/src/assets/icons/PointerHorizontal.d.ts +0 -2
  280. package/src/assets/icons/PointerVertical.d.ts +0 -2
  281. package/src/assets/icons/Send.d.ts +0 -2
  282. package/src/assets/icons/Strikethrough.d.ts +0 -2
  283. package/src/assets/icons/TextColor.d.ts +0 -6
  284. package/src/assets/icons/Today.d.ts +0 -2
  285. package/src/assets/icons/Underlined.d.ts +0 -2
  286. package/src/assets/icons/Upload.d.ts +0 -2
  287. package/src/assets/icons/View.d.ts +0 -2
  288. package/src/assets/icons/ViewOff.d.ts +0 -2
  289. package/src/assets/icons/Warningfilled.d.ts +0 -2
  290. package/src/components/Menu/Menu.d.ts +0 -14
  291. package/src/components/Menu/MenuDesktop.d.ts +0 -2
  292. package/src/components/Menu/MenuItem.d.ts +0 -5
  293. package/src/components/Menu/MenuMobile.d.ts +0 -2
  294. package/src/components/Menu/MenuPopover.d.ts +0 -5
  295. package/src/components/buttons/Button/Button.d.ts +0 -27
  296. package/src/components/buttons/Button/button.cva.d.ts +0 -30
  297. package/src/components/buttons/IconButton/IconButton.d.ts +0 -10
  298. package/src/components/buttons/InlineIconButton/InlineIconButton.d.ts +0 -11
  299. package/src/components/buttons/PillButton/PillButton.d.ts +0 -11
  300. package/src/components/buttons/PillButton/pillButton.cva.d.ts +0 -14
  301. package/src/components/buttons/SplitButton/SplitButton.d.ts +0 -10
  302. package/src/components/buttons/TextButton/TextButton.d.ts +0 -11
  303. package/src/components/buttons/ToggleButton/ToggleButton.d.ts +0 -9
  304. package/src/components/buttons/shared/ButtonContent.d.ts +0 -16
  305. package/src/components/buttons/shared/buttonContent.cva.d.ts +0 -6
  306. package/src/components/inputs/Checkbox/Checkbox.d.ts +0 -17
  307. package/src/components/inputs/Checkbox/CheckboxCheckmark.d.ts +0 -9
  308. package/src/components/inputs/Checkbox/checkbox.cva.d.ts +0 -11
  309. package/src/components/inputs/DateTime/DatePicker/DatePicker.d.ts +0 -24
  310. package/src/components/inputs/DateTime/DateRangePicker/DateRangePicker.d.ts +0 -32
  311. package/src/components/inputs/DateTime/DateTimePicker/DateTimePicker.d.ts +0 -22
  312. package/src/components/inputs/DateTime/TimePicker/TimePicker.d.ts +0 -20
  313. package/src/components/inputs/DateTime/shared/Calendar.d.ts +0 -20
  314. package/src/components/inputs/DateTime/shared/CalendarCell.d.ts +0 -20
  315. package/src/components/inputs/DateTime/shared/CalendarGrid.d.ts +0 -25
  316. package/src/components/inputs/DateTime/shared/CalendarHeader.d.ts +0 -16
  317. package/src/components/inputs/DateTime/shared/CalendarSelectHeader.d.ts +0 -17
  318. package/src/components/inputs/DateTime/shared/DateField.d.ts +0 -12
  319. package/src/components/inputs/DateTime/shared/DatePickerInput.d.ts +0 -20
  320. package/src/components/inputs/DateTime/shared/DateSegmentItem.d.ts +0 -11
  321. package/src/components/inputs/DateTime/shared/DateTimeDialog.d.ts +0 -15
  322. package/src/components/inputs/DateTime/shared/DateTimeDialogFooter.d.ts +0 -7
  323. package/src/components/inputs/DateTime/shared/MonthPicker.d.ts +0 -7
  324. package/src/components/inputs/DateTime/shared/RangeCalendar.d.ts +0 -26
  325. package/src/components/inputs/DateTime/shared/TimeField.d.ts +0 -12
  326. package/src/components/inputs/DateTime/shared/TimePickerForm.d.ts +0 -10
  327. package/src/components/inputs/DateTime/shared/TimePickerInput.d.ts +0 -18
  328. package/src/components/inputs/DateTime/shared/YearPicker.d.ts +0 -8
  329. package/src/components/inputs/File/FileUpload.d.ts +0 -4
  330. package/src/components/inputs/File/FileUploadContainer.d.ts +0 -3
  331. package/src/components/inputs/File/InputUpload.d.ts +0 -4
  332. package/src/components/inputs/File/fileUpload.types.d.ts +0 -79
  333. package/src/components/inputs/File/index.d.ts +0 -9
  334. package/src/components/inputs/File/inputUpload.types.d.ts +0 -30
  335. package/src/components/inputs/File/shared/FileCard.d.ts +0 -9
  336. package/src/components/inputs/File/shared/FileCardList.d.ts +0 -9
  337. package/src/components/inputs/File/shared/FileProgressBar.d.ts +0 -3
  338. package/src/components/inputs/File/shared/FileUploadContent.d.ts +0 -10
  339. package/src/components/inputs/File/shared/FileUploadContentEmpty.d.ts +0 -9
  340. package/src/components/inputs/File/shared/FileUploadContentError.d.ts +0 -11
  341. package/src/components/inputs/File/shared/FileUploadContentFilled.d.ts +0 -11
  342. package/src/components/inputs/File/shared/FileUploadContentLoading.d.ts +0 -9
  343. package/src/components/inputs/File/shared/InputUploadContent.d.ts +0 -8
  344. package/src/components/inputs/File/shared/InputUploadFilled.d.ts +0 -7
  345. package/src/components/inputs/File/shared/fileUpload.cva.d.ts +0 -11
  346. package/src/components/inputs/File/shared/inputUploadButton.cva.d.ts +0 -10
  347. package/src/components/inputs/FormField/FormField.d.ts +0 -17
  348. package/src/components/inputs/FormField/FormFieldError.d.ts +0 -7
  349. package/src/components/inputs/FormField/FormFieldHeader.d.ts +0 -14
  350. package/src/components/inputs/FormField/FormFieldHeaderClose.d.ts +0 -5
  351. package/src/components/inputs/FormField/FormFieldLabel.d.ts +0 -11
  352. package/src/components/inputs/Input/NumberInput/NumberInput.d.ts +0 -18
  353. package/src/components/inputs/Input/PasswordInput/PasswordInput.d.ts +0 -7
  354. package/src/components/inputs/Input/TextArea/TextArea.d.ts +0 -17
  355. package/src/components/inputs/Input/TextInput/TextInput.d.ts +0 -19
  356. package/src/components/inputs/Input/shared/InputContent.d.ts +0 -27
  357. package/src/components/inputs/Inputs/Form.d.ts +0 -26
  358. package/src/components/inputs/Inputs/InputItem.d.ts +0 -73
  359. package/src/components/inputs/Inputs/Inputs.d.ts +0 -10
  360. package/src/components/inputs/RadioGroup/RadioGroup.d.ts +0 -18
  361. package/src/components/inputs/RadioGroup/radio.cva.d.ts +0 -11
  362. package/src/components/inputs/Selection/Autocomplete/Autocomplete.d.ts +0 -8
  363. package/src/components/inputs/Selection/Autocomplete/QueryAutocomplete.d.ts +0 -19
  364. package/src/components/inputs/Selection/Select/Select.d.ts +0 -8
  365. package/src/components/inputs/Selection/shared/SelectBase.d.ts +0 -24
  366. package/src/components/inputs/Selection/shared/SelectDesktop.d.ts +0 -5
  367. package/src/components/inputs/Selection/shared/SelectInput.d.ts +0 -15
  368. package/src/components/inputs/Selection/shared/SelectListBox.d.ts +0 -9
  369. package/src/components/inputs/Selection/shared/SelectListBoxItem.d.ts +0 -8
  370. package/src/components/inputs/Selection/shared/SelectListBoxItemSelectAll.d.ts +0 -4
  371. package/src/components/inputs/Selection/shared/SelectListBoxLoadingItem.d.ts +0 -6
  372. package/src/components/inputs/Selection/shared/SelectListBoxSelectionBar.d.ts +0 -5
  373. package/src/components/inputs/Selection/shared/SelectMobile.d.ts +0 -5
  374. package/src/components/inputs/Selection/shared/select.context.d.ts +0 -30
  375. package/src/components/inputs/Selection/shared/select.types.d.ts +0 -55
  376. package/src/components/inputs/Selection/shared/useSelectItems.d.ts +0 -23
  377. package/src/components/inputs/Slider/Slider.d.ts +0 -18
  378. package/src/components/inputs/TextEditor/TextEditor.d.ts +0 -20
  379. package/src/components/inputs/TextEditor/Toolbar/ColorPicker.d.ts +0 -7
  380. package/src/components/inputs/TextEditor/Toolbar/ColorPickerDropdown.d.ts +0 -10
  381. package/src/components/inputs/TextEditor/Toolbar/HyperlinkAction.d.ts +0 -2
  382. package/src/components/inputs/TextEditor/Toolbar/TextAlignSelect.d.ts +0 -2
  383. package/src/components/inputs/TextEditor/Toolbar/TextColorSelect.d.ts +0 -2
  384. package/src/components/inputs/TextEditor/Toolbar/TextEditorToolbar.d.ts +0 -6
  385. package/src/components/inputs/TextEditor/Toolbar/TextHighlightSelect.d.ts +0 -2
  386. package/src/components/inputs/TextEditor/Toolbar/TextListActions.d.ts +0 -2
  387. package/src/components/inputs/TextEditor/Toolbar/TextMarksActions.d.ts +0 -2
  388. package/src/components/inputs/TextEditor/Toolbar/TextStyleSelect.d.ts +0 -2
  389. package/src/components/inputs/TextEditor/textEditor.types.d.ts +0 -5
  390. package/src/components/inputs/Toggle/Toggle.d.ts +0 -14
  391. package/src/components/inputs/Toggle/toggle.cva.d.ts +0 -10
  392. package/src/components/inputs/shared/CheckContent.d.ts +0 -7
  393. package/src/components/inputs/shared/InputClear.d.ts +0 -6
  394. package/src/components/inputs/shared/form.types.d.ts +0 -12
  395. package/src/components/inputs/shared/input.cva.d.ts +0 -22
  396. package/src/components/inputs/shared/label.cva.d.ts +0 -10
  397. package/src/components/outline.clsx.d.ts +0 -2
  398. package/src/components/overlays/ActionModal/ActionModal.d.ts +0 -19
  399. package/src/components/overlays/BottomSheet/BottomSheet.d.ts +0 -21
  400. package/src/components/overlays/Drawer/Drawer.d.ts +0 -13
  401. package/src/components/overlays/Modal/Modal.d.ts +0 -11
  402. package/src/components/overlays/Modal/modal.cva.d.ts +0 -12
  403. package/src/components/overlays/ResponsivePopover/ResponsivePopover.d.ts +0 -10
  404. package/src/components/overlays/Tooltip/Tooltip.d.ts +0 -9
  405. package/src/components/overlays/Tooltip/TooltipEllipsis.d.ts +0 -7
  406. package/src/components/segment/Segment.d.ts +0 -4
  407. package/src/components/segment/SegmentItem.d.ts +0 -2
  408. package/src/components/segment/segment.types.d.ts +0 -34
  409. package/src/components/shared/pagination/Pagination.d.ts +0 -9
  410. package/src/components/shared/pagination/PaginationList.d.ts +0 -15
  411. package/src/components/shared/pagination/minWidth.cva.d.ts +0 -3
  412. package/src/components/status/Alert/Alert.d.ts +0 -11
  413. package/src/components/status/Alert/alert.cva.d.ts +0 -7
  414. package/src/components/status/Loader/Loader.d.ts +0 -5
  415. package/src/components/status/Loader/loader.cva.d.ts +0 -9
  416. package/src/components/status/Toast/Toast.d.ts +0 -14
  417. package/src/components/status/Toast/toast.cva.d.ts +0 -18
  418. package/src/components/status/Toast/useToast.d.ts +0 -12
  419. package/src/components/status/shared/status.cva.d.ts +0 -8
  420. package/src/components/table/CellText.d.ts +0 -7
  421. package/src/components/table/ColumnConfig.d.ts +0 -10
  422. package/src/components/table/HeaderText.d.ts +0 -5
  423. package/src/components/table/InfiniteTable.d.ts +0 -9
  424. package/src/components/table/PaginatedTable.d.ts +0 -11
  425. package/src/components/table/Table.d.ts +0 -37
  426. package/src/components/table/table.cva.d.ts +0 -15
  427. package/src/components/text/Link/Link.d.ts +0 -7
  428. package/src/components/text/Link/link.cva.d.ts +0 -6
  429. package/src/components/text/Tag/Tag.d.ts +0 -10
  430. package/src/components/text/Tag/tag.cva.d.ts +0 -6
  431. package/src/components/text/Typography/Typography.d.ts +0 -11
  432. package/src/components/text/Typography/typography.cva.d.ts +0 -8
  433. package/src/config/confirmation.context.d.ts +0 -20
  434. package/src/config/i18n.d.ts +0 -315
  435. package/src/config/router.context.d.ts +0 -20
  436. package/src/config/uiConfig.context.d.ts +0 -28
  437. package/src/config/uiStyle.context.d.ts +0 -84
  438. package/src/helpers/dynamicColumns.d.ts +0 -44
  439. package/src/helpers/dynamicInputs.d.ts +0 -83
  440. package/src/hooks/useAutosave.d.ts +0 -9
  441. package/src/hooks/useBreakpoint.d.ts +0 -3
  442. package/src/hooks/useDebounceCallback.d.ts +0 -6
  443. package/src/hooks/useDeepCompare.d.ts +0 -4
  444. package/src/hooks/useFilters.d.ts +0 -7
  445. package/src/hooks/useForm.d.ts +0 -18
  446. package/src/hooks/useFormAutosave.d.ts +0 -13
  447. package/src/hooks/useIntersectionObserver.d.ts +0 -7
  448. package/src/hooks/useLocalStorage.d.ts +0 -13
  449. package/src/hooks/useLongPressRepeat.d.ts +0 -9
  450. package/src/hooks/usePagination.d.ts +0 -7
  451. package/src/hooks/useScrollableListBox.d.ts +0 -3
  452. package/src/hooks/useSingletonMutation.d.ts +0 -2
  453. package/src/hooks/useSorting.d.ts +0 -6
  454. package/src/hooks/useStateAndRef.d.ts +0 -4
  455. package/src/hooks/useTableColumnConfig.d.ts +0 -16
  456. package/src/hooks/useTableNav.d.ts +0 -84
  457. package/src/hooks/useTranslationMemo.d.ts +0 -4
  458. package/src/index.d.ts +0 -205
  459. package/src/types/react-query.d.ts +0 -6
  460. package/src/utils/array.utils.d.ts +0 -3
  461. package/src/utils/array.utils.spec.d.ts +0 -1
  462. package/src/utils/compoundMapper.d.ts +0 -19
  463. package/src/utils/compoundMapper.spec.d.ts +0 -1
  464. package/src/utils/date-time.utils.d.ts +0 -14
  465. package/src/utils/date-time.utils.spec.d.ts +0 -1
  466. package/src/utils/date.utils.d.ts +0 -3
  467. package/src/utils/date.utils.spec.d.ts +0 -1
  468. package/src/utils/dom.utils.d.ts +0 -5
  469. package/src/utils/file.utils.d.ts +0 -9
  470. package/src/utils/isEqual.d.ts +0 -1
  471. package/src/utils/logger.d.ts +0 -7
  472. package/src/utils/object.utils.d.ts +0 -10
  473. package/src/utils/queries.utils.d.ts +0 -4
  474. package/src/utils/rest/interceptors/logging.interceptor.d.ts +0 -2
  475. package/src/utils/rest/interceptors/response.interceptor.d.ts +0 -2
  476. package/src/utils/rest/interceptors/rest-interceptor.d.ts +0 -8
  477. package/src/utils/rest/rest-client.d.ts +0 -29
  478. package/src/utils/rest/rest.utils.d.ts +0 -10
  479. package/src/utils/routing.utils.d.ts +0 -3
  480. package/src/utils/string.utils.d.ts +0 -4
  481. package/src/utils/vendor/error-handling.d.ts +0 -21
  482. package/src/utils/zod.utils.d.ts +0 -19
  483. package/vite.config.d.ts +0 -2
  484. /package/{styles → src/styles}/editor.css +0 -0
  485. /package/{styles → src/styles}/index.css +0 -0
@@ -0,0 +1,85 @@
1
+ import {
2
+ CalendarDate,
3
+ CalendarDateTime,
4
+ type DateValue,
5
+ type ZonedDateTime,
6
+ fromDate,
7
+ getLocalTimeZone,
8
+ parseAbsolute,
9
+ parseAbsoluteToLocal,
10
+ } from "@internationalized/date";
11
+ import { DateTime } from "luxon";
12
+
13
+ export namespace DateTimeUtils {
14
+ export function fromISOtoZonedDateTime(isoString: string): ZonedDateTime {
15
+ return parseAbsoluteToLocal(isoString);
16
+ }
17
+
18
+ export function fromDateValueToISO(dateValue: DateValue): string {
19
+ return dateValue.toDate(getLocalTimeZone()).toISOString();
20
+ }
21
+
22
+ export function fromLocalToZonedDateTime(date: Date): ZonedDateTime {
23
+ return fromDate(date, getLocalTimeZone());
24
+ }
25
+
26
+ export function fromDateValueToLocal(dateValue: DateValue): Date {
27
+ return dateValue.toDate(getLocalTimeZone());
28
+ }
29
+
30
+ export function fromCalendarDateToUTCISO(calendarDate: CalendarDate, options: { endOfDay?: boolean } = {}): string {
31
+ const date = DateTime.fromObject(
32
+ {
33
+ year: calendarDate.year,
34
+ month: calendarDate.month,
35
+ day: calendarDate.day,
36
+ },
37
+ { zone: "utc" },
38
+ );
39
+ if (options.endOfDay) {
40
+ return date.endOf("day").toUTC().toISO() ?? calendarDate.toString();
41
+ }
42
+ return date.toUTC().toISO() ?? calendarDate.toString();
43
+ }
44
+
45
+ export function fromUTCISOToCalendarDate(isoString: string): CalendarDate {
46
+ const date = new Date(isoString);
47
+ return new CalendarDate(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate());
48
+ }
49
+
50
+ export function fromCalendarDateTimeToUTCISO(calendarDateTime: CalendarDateTime): string {
51
+ return calendarDateTime.toDate("UTC").toISOString();
52
+ }
53
+
54
+ export function fromUTCISOToCalendarDateTime(isoString: string): CalendarDateTime {
55
+ const zonedDateTime = parseAbsolute(isoString, "UTC");
56
+ return new CalendarDateTime(
57
+ zonedDateTime.year,
58
+ zonedDateTime.month,
59
+ zonedDateTime.day,
60
+ zonedDateTime.hour,
61
+ zonedDateTime.minute,
62
+ zonedDateTime.second,
63
+ zonedDateTime.millisecond,
64
+ );
65
+ }
66
+
67
+ export function formatTextDateToCalendarDateTime(textDate: string | null): CalendarDateTime | null {
68
+ if (!textDate?.includes("hh")) {
69
+ return null;
70
+ }
71
+
72
+ const datePart = textDate.split(",").at(0)?.trim();
73
+ if (!datePart) {
74
+ return null;
75
+ }
76
+
77
+ const date = new Date(datePart);
78
+ if (!date || date.toString() === "Invalid Date") {
79
+ return null;
80
+ }
81
+
82
+ const zonedDateTime = fromDate(date, getLocalTimeZone());
83
+ return new CalendarDateTime(zonedDateTime.year, zonedDateTime.month, zonedDateTime.day, 0, 0, 0, 0);
84
+ }
85
+ }
@@ -0,0 +1,12 @@
1
+ import { describe, expect, test } from "vitest";
2
+
3
+ import { DateUtils } from "./date.utils";
4
+
5
+ describe("DateUtils", () => {
6
+ test("formatDate", () => {
7
+ const date = new Date(2025, 2, 4);
8
+ const dateString = "04/03/2025";
9
+
10
+ expect(DateUtils.formatDate(date)).toEqual(dateString);
11
+ });
12
+ });
@@ -0,0 +1,9 @@
1
+ import { DateTime } from "luxon";
2
+
3
+ export namespace DateUtils {
4
+ const DATE_FORMAT = "dd/MM/yyyy";
5
+
6
+ export function formatDate(date: Date, format = DATE_FORMAT): string {
7
+ return DateTime.fromJSDate(date).toFormat(format);
8
+ }
9
+ }
@@ -0,0 +1,16 @@
1
+ import type { KeyboardEvent, SyntheticEvent } from "react";
2
+
3
+ export namespace DomUtils {
4
+ const KEYBOARD_INPUTS = ["button", "submit", "checkbox", "file", "image"];
5
+
6
+ export const isKeyboardInput = (elem: Element) => {
7
+ return (
8
+ (elem.tagName === "INPUT" && !KEYBOARD_INPUTS.includes((elem as HTMLInputElement).type)) ||
9
+ elem.hasAttribute("contenteditable")
10
+ );
11
+ };
12
+
13
+ export const isKeyboardEvent = (event: SyntheticEvent): event is KeyboardEvent => {
14
+ return event.nativeEvent instanceof KeyboardEvent;
15
+ };
16
+ }
@@ -0,0 +1,73 @@
1
+ import type { AxiosResponse, AxiosResponseHeaders } from "axios";
2
+
3
+ import { RestUtils } from "#ui/utils/rest/rest.utils";
4
+
5
+ export namespace FileUtils {
6
+ export const getObjectUrl = (data: Blob | AxiosResponse<Blob>, revokeTimeoutMs = 40_000) => {
7
+ const url = URL.createObjectURL(data instanceof Blob ? data : data.data);
8
+ setTimeout(() => URL.revokeObjectURL(url), revokeTimeoutMs);
9
+ return url;
10
+ };
11
+
12
+ export const openFile = (data: Blob | AxiosResponse<Blob>, target = "_blank", revokeTimeoutMs?: number) => {
13
+ const url = getObjectUrl(data, revokeTimeoutMs);
14
+ window.open(url, target);
15
+ };
16
+
17
+ export const downloadFile = (data: Blob | AxiosResponse<Blob>, fileName?: string, revokeTimeoutMs?: number) => {
18
+ const url = getObjectUrl(data, revokeTimeoutMs);
19
+ const contentDispositionFileName =
20
+ data instanceof Blob
21
+ ? undefined
22
+ : RestUtils.extractContentDispositionFilename(data.headers as AxiosResponseHeaders);
23
+
24
+ const a = document.createElement("a");
25
+ a.download = fileName ?? contentDispositionFileName ?? "download";
26
+ a.rel = "noopener";
27
+ a.href = url;
28
+
29
+ setTimeout(() => a.dispatchEvent(new MouseEvent("click")));
30
+ };
31
+
32
+ export const isFileTypeAccepted = (file: File, fileTypes?: readonly string[] | string[]): boolean => {
33
+ if (!fileTypes || fileTypes.length === 0) {
34
+ return true;
35
+ }
36
+
37
+ return fileTypes.some((type) => {
38
+ if (type.includes("/")) {
39
+ return file.type === type || (type.endsWith("/*") && file.type.startsWith(type.slice(0, -1)));
40
+ }
41
+ return file.name.toLowerCase().endsWith(type.toLowerCase());
42
+ });
43
+ };
44
+
45
+ export const getCalculatedFileSize = (file?: File): string => {
46
+ if (!file) {
47
+ return "";
48
+ }
49
+ if (file.size < 1024) {
50
+ return `${file.size} B`;
51
+ }
52
+ if (file.size < 1024 * 1024) {
53
+ return `${(file.size / 1024).toFixed(2)} KB`;
54
+ }
55
+ if (file.size < 1024 * 1024 * 1024) {
56
+ return `${(file.size / 1024 / 1024).toFixed(2)} MB`;
57
+ }
58
+ return `${(file.size / 1024 / 1024 / 1024).toFixed(2)} GB`;
59
+ };
60
+
61
+ export const formatBytes = (size: number, decimals = 2) => {
62
+ if (size < 1024) {
63
+ return `${size} B`;
64
+ }
65
+ if (size < 1024 * 1024) {
66
+ return `${(size / 1024).toFixed(decimals)} KB`;
67
+ }
68
+ if (size < 1024 * 1024 * 1024) {
69
+ return `${(size / 1024 / 1024).toFixed(decimals)} MB`;
70
+ }
71
+ return `${(size / 1024 / 1024 / 1024).toFixed(decimals)} GB`;
72
+ };
73
+ }
@@ -0,0 +1,153 @@
1
+ /* oxlint-disable default-case, no-self-compare, no-param-reassign */
2
+ import { ObjectUtils } from "#ui/utils/object.utils";
3
+
4
+ export const isEqual = (a: any, b: any) => {
5
+ return eq(a, b);
6
+ };
7
+
8
+ // Lodash internal recursive comparison function for `isEqual`.
9
+ const eq = (a: any, b: any, aStack?: any[], bStack?: any[]) => {
10
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
11
+ // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
12
+ if (a === b) {
13
+ return a !== 0 || 1 / a === 1 / b;
14
+ }
15
+
16
+ // A strict comparison is necessary because `null == undefined`.
17
+ if (a == null || b == null) {
18
+ return a === b;
19
+ }
20
+
21
+ // `NaN`s are equivalent, but non-reflexive.
22
+ if (a !== a) {
23
+ return b !== b;
24
+ }
25
+
26
+ // Exhaust primitive checks
27
+ const type = typeof a;
28
+ if (type !== "function" && type !== "object" && typeof b !== "object") {
29
+ return false;
30
+ }
31
+
32
+ return deepEq(a, b, aStack, bStack);
33
+ };
34
+
35
+ // Lodash internal recursive comparison function for `isEqual`.
36
+ const deepEq = (a: any, b: any, aStack?: any[], bStack?: any[]) => {
37
+ // Compare `[[Class]]` names.
38
+ const className = toString.call(a);
39
+ if (className !== toString.call(b)) {
40
+ return false;
41
+ }
42
+
43
+ switch (className) {
44
+ // Strings, numbers, regular expressions, dates, and booleans are compared by value.
45
+ // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
46
+ case "[object RegExp]":
47
+ case "[object String]":
48
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
49
+ // equivalent to `new String("5")`.
50
+ return `${a}` === `${b}`;
51
+ case "[object Number]":
52
+ // `NaN`s are equivalent, but non-reflexive.
53
+ // Object(NaN) is equivalent to NaN.
54
+ if (+a !== +a) {
55
+ return +b !== +b;
56
+ }
57
+ // An `egal` comparison is performed for other numeric values.
58
+ return +a === 0 ? 1 / +a === 1 / b : +a === +b;
59
+ case "[object Date]":
60
+ case "[object Boolean]":
61
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
62
+ // millisecond representations. Note that invalid dates with millisecond representations
63
+ // of `NaN` are not equivalent.
64
+ return +a === +b;
65
+ case "[object Symbol]":
66
+ return Symbol.prototype.valueOf.call(a) === Symbol.prototype.valueOf.call(b);
67
+ }
68
+
69
+ const areArrays = className === "[object Array]";
70
+ if (!areArrays) {
71
+ if (typeof a !== "object" || typeof b !== "object") {
72
+ return false;
73
+ }
74
+
75
+ // Objects with different constructors are not equivalent, but `Object`s or `Array`s
76
+ // from different frames are.
77
+ const aCtor = (a as object).constructor;
78
+ const bCtor = (b as object).constructor;
79
+ if (
80
+ aCtor !== bCtor &&
81
+ !(
82
+ ObjectUtils.isFunction(aCtor) &&
83
+ aCtor instanceof aCtor &&
84
+ ObjectUtils.isFunction(bCtor) &&
85
+ bCtor instanceof bCtor
86
+ ) &&
87
+ "constructor" in a &&
88
+ "constructor" in b
89
+ ) {
90
+ return false;
91
+ }
92
+ }
93
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
94
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
95
+
96
+ // Initializing stack of traversed objects.
97
+ // It's done here since we only need them for objects and arrays comparison.
98
+ aStack = aStack || [];
99
+ bStack = bStack || [];
100
+ let { length } = aStack;
101
+ while (length--) {
102
+ // Linear search. Performance is inversely proportional to the number of
103
+ // unique nested structures.
104
+ if (aStack[length] === a) {
105
+ return bStack[length] === b;
106
+ }
107
+ }
108
+
109
+ // Add the first object to the stack of traversed objects.
110
+ aStack.push(a);
111
+ bStack.push(b);
112
+
113
+ // Recursively compare objects and arrays.
114
+ if (areArrays) {
115
+ // Compare array lengths to determine if a deep comparison is necessary.
116
+ length = (a as any[]).length;
117
+ if (length !== (b as any[]).length) {
118
+ return false;
119
+ }
120
+ // Deep compare the contents, ignoring non-numeric properties.
121
+ while (length--) {
122
+ if (!eq((a as any[])[length], (b as any[])[length], aStack, bStack)) {
123
+ return false;
124
+ }
125
+ }
126
+ } else {
127
+ // Deep compare objects.
128
+ const keys = Object.keys(a as object);
129
+ let key;
130
+ length = keys.length;
131
+ // Ensure that both objects contain the same number of properties before comparing deep equality.
132
+ if (Object.keys(b as object).length !== length) {
133
+ return false;
134
+ }
135
+ while (length--) {
136
+ // Deep compare each member
137
+ key = keys[length];
138
+ if (
139
+ !(
140
+ Object.prototype.hasOwnProperty.call(b, key) &&
141
+ eq((a as Record<string, any>)[key], (b as Record<string, any>)[key], aStack, bStack)
142
+ )
143
+ ) {
144
+ return false;
145
+ }
146
+ }
147
+ }
148
+
149
+ // Remove the first object from the stack of traversed objects.
150
+ aStack.pop();
151
+ bStack.pop();
152
+ return true;
153
+ };
@@ -0,0 +1,19 @@
1
+ import log from "loglevel";
2
+ import prefix from "loglevel-plugin-prefix";
3
+
4
+ prefix.reg(log);
5
+
6
+ prefix.apply(log, {
7
+ template: "[%t] %l:",
8
+ timestampFormatter: (date) => {
9
+ return date.toISOString();
10
+ },
11
+ });
12
+
13
+ export const logger = {
14
+ info: (...args: unknown[]) => log.info(...args),
15
+ debug: (...args: unknown[]) => log.debug(...args),
16
+ warn: (...args: unknown[]) => log.warn(...args),
17
+ error: (...args: unknown[]) => log.error(...args),
18
+ trace: (...args: unknown[]) => log.trace(...args),
19
+ };
@@ -0,0 +1,62 @@
1
+ export namespace ObjectUtils {
2
+ export const isNil = (obj: unknown) => {
3
+ return obj == null;
4
+ };
5
+
6
+ export const isFunction = (obj: unknown) => {
7
+ return typeof obj === "function";
8
+ };
9
+
10
+ export const isObject = (obj: unknown) => {
11
+ return typeof obj === "object" && !!obj;
12
+ };
13
+
14
+ export const isString = (obj: unknown): obj is string => {
15
+ return Object.prototype.toString.call(obj) === "[object String]";
16
+ };
17
+
18
+ export const isDate = (obj: unknown): obj is Date => {
19
+ return Object.prototype.toString.call(obj) === "[object Date]";
20
+ };
21
+
22
+ export const isRegExp = (obj: unknown): obj is RegExp => {
23
+ return Object.prototype.toString.call(obj) === "[object RegExp]";
24
+ };
25
+
26
+ export const isEmpty = (obj: unknown) => {
27
+ if (obj == null) {
28
+ return true;
29
+ }
30
+ if (Array.isArray(obj) || isString(obj)) {
31
+ return obj.length === 0;
32
+ }
33
+ return Object.keys(obj).length === 0;
34
+ };
35
+
36
+ export const deepConditionalMerge = <T extends object>(
37
+ target: Partial<T>,
38
+ source: Partial<T>,
39
+ condition: (value: unknown, key: string) => boolean,
40
+ ): T => {
41
+ const output = { ...target };
42
+
43
+ for (const key in source) {
44
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
45
+ const value = source[key as keyof T];
46
+ if (condition(value, key)) {
47
+ if (typeof value === "object" && !Array.isArray(value)) {
48
+ output[key as keyof T] = deepConditionalMerge(
49
+ output[key as keyof T] as object,
50
+ value as object,
51
+ condition,
52
+ ) as T[keyof T];
53
+ } else {
54
+ output[key as keyof T] = value as T[keyof T];
55
+ }
56
+ }
57
+ }
58
+ }
59
+
60
+ return output as T;
61
+ };
62
+ }
@@ -0,0 +1,10 @@
1
+ import type { QueryClient } from "@tanstack/react-query";
2
+
3
+ export namespace QueriesUtils {
4
+ export const prefetchMultipleQueries = (
5
+ queryClient: QueryClient,
6
+ queries: Array<(queryClient: QueryClient) => Promise<void>>,
7
+ ) => {
8
+ return Promise.all(queries.map((query) => query(queryClient)));
9
+ };
10
+ }
@@ -0,0 +1,16 @@
1
+ import { logger } from "#ui/utils/logger";
2
+
3
+ import { RestInterceptor } from "./rest-interceptor";
4
+
5
+ export const LoggingInterceptor = new RestInterceptor((client) => {
6
+ return client.interceptors.request.use(
7
+ (config) => {
8
+ logger.info("Rest call", config.method, config.url, config.data);
9
+ return config;
10
+ },
11
+ (error) => {
12
+ logger.error("Rest call error", error);
13
+ return Promise.reject(error as Error);
14
+ },
15
+ );
16
+ });
@@ -0,0 +1,27 @@
1
+ import type { AxiosError } from "axios";
2
+
3
+ import { logger } from "#ui/utils/logger";
4
+
5
+ import { RestInterceptor } from "./rest-interceptor";
6
+
7
+ export const ResponseInterceptor = new RestInterceptor((client) => {
8
+ return client.interceptors.response.use(
9
+ (response) => {
10
+ logger.info("Rest response", response.data, response?.config?.url, response?.status);
11
+
12
+ return {
13
+ ...response,
14
+ // oxlint-disable-next-line @typescript-eslint/no-unsafe-assignment
15
+ data: response.data === "" ? undefined : response.data,
16
+ };
17
+ },
18
+ (error: AxiosError) => {
19
+ logger.error(
20
+ `Rest response error: ${error?.response?.config?.url}`,
21
+ error?.response?.data,
22
+ error?.response?.status,
23
+ );
24
+ throw error;
25
+ },
26
+ );
27
+ });
@@ -0,0 +1,22 @@
1
+ import type { AxiosInstance } from "axios";
2
+
3
+ export class RestInterceptor<T extends any[]> {
4
+ private interceptorIdMap: { client: AxiosInstance; interceptorId: number }[] = [];
5
+
6
+ constructor(private applyInterceptor: (client: AxiosInstance, ...args: T) => number) {}
7
+
8
+ public addInterceptor(client: AxiosInstance, ...args: T) {
9
+ this.removeInterceptor(client);
10
+ const interceptorId = this.applyInterceptor(client, ...args);
11
+ this.interceptorIdMap.push({ client, interceptorId });
12
+ }
13
+
14
+ public removeInterceptor(client: AxiosInstance) {
15
+ const interceptorId = this.interceptorIdMap.find((i) => i.client === client)?.interceptorId;
16
+
17
+ if (interceptorId != null) {
18
+ client.interceptors.request.eject(interceptorId);
19
+ this.interceptorIdMap = this.interceptorIdMap.filter((i) => i.client !== client);
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,125 @@
1
+ import axios, {
2
+ type AxiosInstance,
3
+ type AxiosRequestConfig,
4
+ type AxiosResponse,
5
+ type CreateAxiosDefaults,
6
+ } from "axios";
7
+ import { z } from "zod";
8
+
9
+ import { LoggingInterceptor } from "#ui/utils/rest/interceptors/logging.interceptor";
10
+ import { ResponseInterceptor } from "#ui/utils/rest/interceptors/response.interceptor";
11
+ import type { RestInterceptor } from "#ui/utils/rest/interceptors/rest-interceptor";
12
+ import { type ErrorHandler, type GeneralErrorCodes, SharedErrorHandler } from "#ui/utils/vendor/error-handling";
13
+
14
+ interface RequestInfo<ZOutput, ECodes extends string> {
15
+ resSchema: z.ZodType<ZOutput>;
16
+ errorHandler?: ErrorHandler<ECodes>;
17
+ }
18
+
19
+ interface RequestConfig<IsRawRes extends boolean = false> {
20
+ rawResponse?: IsRawRes;
21
+ }
22
+
23
+ type Response<ZOutput, IsRawRes extends boolean = false> = IsRawRes extends true ? AxiosResponse<ZOutput> : ZOutput;
24
+
25
+ export class RestClient {
26
+ protected client: AxiosInstance;
27
+
28
+ constructor({
29
+ config,
30
+ interceptors,
31
+ }: {
32
+ config?: CreateAxiosDefaults;
33
+ interceptors?: RestInterceptor<any[]>[];
34
+ } = {}) {
35
+ this.client = axios.create(config);
36
+
37
+ const defaultInterceptors = [LoggingInterceptor, ResponseInterceptor];
38
+
39
+ this.attachInterceptors(defaultInterceptors);
40
+ this.attachInterceptors(interceptors);
41
+ }
42
+
43
+ public attachInterceptors<T extends any[]>(interceptors?: RestInterceptor<T>[], ...args: T) {
44
+ if (interceptors != null) {
45
+ interceptors.forEach((interceptor) => this.attachInterceptor(interceptor, ...args));
46
+ }
47
+ }
48
+
49
+ public attachInterceptor<T extends any[]>(interceptor: RestInterceptor<T>, ...args: T) {
50
+ interceptor.addInterceptor(this.client, ...args);
51
+ }
52
+
53
+ public ejectInterceptor<T extends any[]>(interceptor: RestInterceptor<T>) {
54
+ interceptor.removeInterceptor(this.client);
55
+ }
56
+
57
+ public async get<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(
58
+ requestInfo: RequestInfo<ZOutput, ECodes>,
59
+ url: string,
60
+ requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>,
61
+ ): Promise<Response<ZOutput, IsRawRes>> {
62
+ return this.makeRequest(requestInfo, { ...requestConfig, method: "get", url });
63
+ }
64
+
65
+ public async post<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(
66
+ requestInfo: RequestInfo<ZOutput, ECodes>,
67
+ url: string,
68
+ data?: any,
69
+ requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>,
70
+ ): Promise<Response<ZOutput, IsRawRes>> {
71
+ return this.makeRequest(requestInfo, { ...requestConfig, method: "post", url, data });
72
+ }
73
+
74
+ public async patch<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(
75
+ requestInfo: RequestInfo<ZOutput, ECodes>,
76
+ url: string,
77
+ data?: any,
78
+ requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>,
79
+ ): Promise<Response<ZOutput, IsRawRes>> {
80
+ return this.makeRequest(requestInfo, { ...requestConfig, method: "patch", url, data });
81
+ }
82
+
83
+ public async put<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(
84
+ requestInfo: RequestInfo<ZOutput, ECodes>,
85
+ url: string,
86
+ data?: any,
87
+ requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>,
88
+ ): Promise<Response<ZOutput, IsRawRes>> {
89
+ return this.makeRequest(requestInfo, { ...requestConfig, method: "put", url, data });
90
+ }
91
+
92
+ public async delete<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(
93
+ requestInfo: RequestInfo<ZOutput, ECodes>,
94
+ url: string,
95
+ data?: any,
96
+ requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>,
97
+ ): Promise<Response<ZOutput, IsRawRes>> {
98
+ return this.makeRequest(requestInfo, { ...requestConfig, method: "delete", url, data });
99
+ }
100
+
101
+ private async makeRequest<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(
102
+ requestInfo: RequestInfo<ZOutput, ECodes>,
103
+ requestConfig: AxiosRequestConfig & RequestConfig<IsRawRes>,
104
+ ): Promise<Response<ZOutput, IsRawRes>> {
105
+ const errorStack = new Error().stack;
106
+
107
+ try {
108
+ const { rawResponse, ...config } = requestConfig;
109
+
110
+ const res = await this.client(config);
111
+
112
+ const resData = requestInfo.resSchema.parse(res.data);
113
+
114
+ return (rawResponse ? { ...res, data: resData } : resData) as Response<ZOutput, IsRawRes>;
115
+ } catch (e) {
116
+ if (e instanceof z.ZodError) {
117
+ e.name = "BE Response schema mismatch - ZodError";
118
+ e.stack = [e.stack, ...(errorStack?.split("\n").slice(2) ?? [])].join("\n");
119
+ }
120
+ const errorHandler = requestInfo.errorHandler ?? SharedErrorHandler;
121
+ errorHandler.rethrowError(e);
122
+ throw e;
123
+ }
124
+ }
125
+ }