@inceptionbg/iui 2.0.25 → 2.0.27

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 (202) hide show
  1. package/dist/icons/index.d.ts +3 -1
  2. package/dist/icons/index.js +1 -1
  3. package/dist/index.d.ts +45 -31
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/iui.css +1 -1
  7. package/package.json +1 -1
  8. package/src/assets/icons/duotone/faBell.ts +17 -17
  9. package/src/assets/icons/duotone/faCircleUser.ts +17 -17
  10. package/src/assets/icons/index.ts +26 -25
  11. package/src/assets/icons/light/faArrowDownShortWide.ts +15 -15
  12. package/src/assets/icons/light/faArrowDownWideShort.ts +15 -15
  13. package/src/assets/icons/light/faArrowLeft.ts +15 -15
  14. package/src/assets/icons/light/faArrowRight.ts +15 -15
  15. package/src/assets/icons/light/faArrowUpArrowDown.ts +15 -15
  16. package/src/assets/icons/light/faArrowUpRightFromSquare.ts +15 -15
  17. package/src/assets/icons/light/faArrowsToLine.ts +15 -15
  18. package/src/assets/icons/light/faArrowsUpDown.ts +15 -15
  19. package/src/assets/icons/light/faBell.ts +15 -15
  20. package/src/assets/icons/light/faBookmark.ts +15 -15
  21. package/src/assets/icons/light/faBookmarkSlash.ts +15 -15
  22. package/src/assets/icons/light/faCalendarPlus.ts +15 -15
  23. package/src/assets/icons/light/faCheck.ts +15 -15
  24. package/src/assets/icons/light/faChevronDown.ts +15 -15
  25. package/src/assets/icons/light/faChevronRight.ts +15 -15
  26. package/src/assets/icons/light/faCircleCheck.ts +15 -0
  27. package/src/assets/icons/light/faCircleInfo.ts +15 -15
  28. package/src/assets/icons/light/faCircleXmark.ts +15 -15
  29. package/src/assets/icons/light/faClipboardCheck.ts +15 -15
  30. package/src/assets/icons/light/faClockRotateLeft.ts +15 -15
  31. package/src/assets/icons/light/faEllipsisVertical.ts +15 -15
  32. package/src/assets/icons/light/faEnvelope.ts +15 -15
  33. package/src/assets/icons/light/faEye.ts +15 -15
  34. package/src/assets/icons/light/faEyeSlash.ts +15 -15
  35. package/src/assets/icons/light/faFilter.ts +15 -15
  36. package/src/assets/icons/light/faGear.ts +15 -15
  37. package/src/assets/icons/light/faHouse.ts +15 -15
  38. package/src/assets/icons/light/faIdBadge.ts +15 -15
  39. package/src/assets/icons/light/faLineColumns.ts +15 -15
  40. package/src/assets/icons/light/faLink.ts +15 -15
  41. package/src/assets/icons/light/faMagnifyingGlass.ts +15 -15
  42. package/src/assets/icons/light/faPen.ts +15 -15
  43. package/src/assets/icons/light/faPrint.ts +15 -15
  44. package/src/assets/icons/light/faQuestion.ts +15 -15
  45. package/src/assets/icons/light/faRotateRight.ts +15 -15
  46. package/src/assets/icons/light/faTrashCan.ts +15 -15
  47. package/src/assets/icons/light/faTriangleExclamation.ts +15 -15
  48. package/src/assets/icons/light/faXmark.ts +15 -15
  49. package/src/assets/icons/regular/faArrowLeft.ts +15 -15
  50. package/src/assets/icons/regular/faArrowRightArrowLeft.ts +15 -15
  51. package/src/assets/icons/regular/faCircleCheck.ts +15 -15
  52. package/src/assets/icons/regular/faCircleExclamation.ts +15 -15
  53. package/src/assets/icons/regular/faCircleInfo.ts +15 -15
  54. package/src/assets/icons/regular/faFileArrowDown.ts +15 -15
  55. package/src/assets/icons/regular/faFilterCircleXmark.ts +15 -15
  56. package/src/assets/icons/regular/faTriangleExclamation.ts +15 -15
  57. package/src/assets/icons/solid/faAngleLeft.ts +15 -15
  58. package/src/assets/icons/solid/faAngleRight.ts +15 -15
  59. package/src/assets/icons/solid/faArrowDownWideShort.ts +15 -15
  60. package/src/assets/icons/solid/faCaretDown.ts +15 -15
  61. package/src/assets/icons/solid/faCheck.ts +15 -15
  62. package/src/assets/icons/solid/faEllipsisVertical.ts +15 -15
  63. package/src/assets/icons/solid/faEnvelopeDot.ts +15 -15
  64. package/src/assets/icons/solid/faFilter.ts +15 -15
  65. package/src/assets/icons/solid/faFloppyDisk.ts +15 -15
  66. package/src/assets/icons/solid/faGripDotsVertical.ts +15 -15
  67. package/src/assets/icons/solid/faListUl.ts +15 -15
  68. package/src/assets/icons/solid/faMinus.ts +15 -15
  69. package/src/assets/icons/solid/faPlus.ts +15 -15
  70. package/src/assets/icons/solid/faPrint.ts +15 -15
  71. package/src/assets/icons/solid/faRotateRight.ts +15 -15
  72. package/src/assets/icons/solid/faXmark.ts +15 -15
  73. package/src/components/Accordions/Accordions.tsx +75 -75
  74. package/src/components/Alert/Alert.tsx +31 -31
  75. package/src/components/Badge/DotBadge.tsx +16 -16
  76. package/src/components/Badge/NotificationBadge.tsx +29 -29
  77. package/src/components/Badge/PillBadge.tsx +13 -13
  78. package/src/components/Button/Button.tsx +56 -56
  79. package/src/components/Button/IconButton.tsx +51 -51
  80. package/src/components/Button/SplitButton.tsx +91 -91
  81. package/src/components/Dashboard/Dashboard.tsx +9 -9
  82. package/src/components/Dashboard/DashboardWidget.tsx +44 -44
  83. package/src/components/Dashboard/FastLinksWidget/FastLinksWidget.tsx +37 -37
  84. package/src/components/Dialog/Dialog.tsx +166 -166
  85. package/src/components/Dialog/components/DialogFooter.tsx +100 -100
  86. package/src/components/Header/Components/EnvBadge.tsx +17 -17
  87. package/src/components/Header/Components/ModuleSelect.tsx +68 -68
  88. package/src/components/Header/Components/Notifications.tsx +202 -202
  89. package/src/components/Header/Components/UserMenu.tsx +52 -52
  90. package/src/components/Header/Header.tsx +45 -37
  91. package/src/components/Helper/Collapse.tsx +53 -53
  92. package/src/components/Inputs/Checkbox.tsx +53 -53
  93. package/src/components/Inputs/CurrencyInput.tsx +124 -124
  94. package/src/components/Inputs/DateInput/DateInput.tsx +184 -184
  95. package/src/components/Inputs/DateInput/components/DatePartInput.tsx +159 -159
  96. package/src/components/Inputs/InputWrapper.tsx +95 -95
  97. package/src/components/Inputs/NumberInput.tsx +86 -86
  98. package/src/components/Inputs/PasswordInput.tsx +40 -40
  99. package/src/components/Inputs/PhoneInput/PhoneInput.tsx +108 -108
  100. package/src/components/Inputs/PhoneInput/utils/countryCode.ts +20 -20
  101. package/src/components/Inputs/Radio.tsx +59 -59
  102. package/src/components/Inputs/RadioGroup.tsx +48 -48
  103. package/src/components/Inputs/RadioLarge.tsx +39 -39
  104. package/src/components/Inputs/SearchInput.tsx +46 -46
  105. package/src/components/Inputs/Selects/Select.tsx +17 -17
  106. package/src/components/Inputs/Selects/components/CustomSelectComponents.tsx +19 -19
  107. package/src/components/Inputs/Selects/components/SelectWrapper.tsx +118 -118
  108. package/src/components/Inputs/Selects/utils/selectStyles.ts +101 -101
  109. package/src/components/Inputs/TextAreaInput.tsx +68 -68
  110. package/src/components/Inputs/TextInput.tsx +100 -100
  111. package/src/components/Inputs/TimeInput/TimeInput.tsx +81 -81
  112. package/src/components/List/List.tsx +21 -21
  113. package/src/components/List/ListItem.tsx +70 -70
  114. package/src/components/Loader/Loader.tsx +59 -59
  115. package/src/components/Loader/ProgressBar.tsx +41 -41
  116. package/src/components/Menu/Menu.tsx +81 -81
  117. package/src/components/Menu/MenuItem.tsx +46 -46
  118. package/src/components/Menu/NewMenu.tsx +63 -63
  119. package/src/components/Menu/hooks/useMenuPosition.tsx +116 -116
  120. package/src/components/PageComponents/ScrollableContent.tsx +11 -0
  121. package/src/components/Pullover/Pullover.tsx +197 -197
  122. package/src/components/Router/Router.tsx +52 -52
  123. package/src/components/Sidebar/AddButton.tsx +22 -22
  124. package/src/components/Sidebar/Sidebar.tsx +85 -85
  125. package/src/components/Sidebar/SidebarItem.tsx +84 -84
  126. package/src/components/Sidebar/types/ISidebar.ts +28 -28
  127. package/src/components/Table/Table.tsx +261 -259
  128. package/src/components/Table/components/columns/ColumnsList.tsx +60 -60
  129. package/src/components/Table/components/columns/TableColumnsEdit.tsx +114 -114
  130. package/src/components/Table/components/edit/TableEditRow.tsx +78 -78
  131. package/src/components/Table/components/filters/FilterItem.tsx +15 -15
  132. package/src/components/Table/components/filters/TableFilters.tsx +126 -126
  133. package/src/components/Table/components/footer/TableFooter.tsx +126 -126
  134. package/src/components/Table/components/header/TableHeader.tsx +40 -40
  135. package/src/components/Table/components/header/TableHeaderRow.tsx +57 -57
  136. package/src/components/Table/components/items/TableItemActions.tsx +78 -78
  137. package/src/components/Table/components/print/TablePrint.tsx +200 -200
  138. package/src/components/Table/components/select/TableSelect.tsx +50 -50
  139. package/src/components/Table/components/sort/TableSort.tsx +73 -73
  140. package/src/components/Table/components/templates/CreateTemplateDialog.tsx +58 -58
  141. package/src/components/Table/components/templates/TableTemplates.tsx +65 -65
  142. package/src/components/Table/components/templates/TemplatesPullover.tsx +88 -88
  143. package/src/components/Table/contexts/TableContext.tsx +117 -116
  144. package/src/components/Table/hooks/localHooks/useLocalTableColumns.tsx +70 -70
  145. package/src/components/Table/hooks/localHooks/useLocalTableData.tsx +82 -84
  146. package/src/components/Table/hooks/localHooks/useLocalTableKeyboard.ts +175 -176
  147. package/src/components/Table/hooks/localHooks/useLocalTablePagination.ts +12 -12
  148. package/src/components/Table/hooks/useTableColumns.ts +34 -34
  149. package/src/components/Table/hooks/useTableEdit.tsx +140 -140
  150. package/src/components/Table/hooks/useTableFilterFields.tsx +150 -150
  151. package/src/components/Table/hooks/useTablePagination.ts +19 -19
  152. package/src/components/Table/hooks/useTablePrint.ts +83 -83
  153. package/src/components/Table/hooks/useTableSearch.ts +31 -31
  154. package/src/components/Table/hooks/useTableSelect.ts +19 -19
  155. package/src/components/Table/hooks/useTableSort.ts +8 -8
  156. package/src/components/Tabs/Tabs.tsx +68 -68
  157. package/src/components/Tooltip/Tooltip.tsx +191 -191
  158. package/src/components/Tree/Tree.tsx +22 -22
  159. package/src/components/Tree/TreeItem.tsx +57 -57
  160. package/src/components/Wrappers/AppLayout.tsx +17 -17
  161. package/src/components/Wrappers/ConditionalWrapper.tsx +10 -10
  162. package/src/components/Wrappers/FormWrapper.tsx +84 -84
  163. package/src/components/Wrappers/PageLayout.tsx +164 -156
  164. package/src/hooks/useBackgroundClose.ts +19 -19
  165. package/src/hooks/useGetFocusableElements.ts +43 -43
  166. package/src/hooks/useIsMenuOpen.ts +11 -11
  167. package/src/hooks/useLocalPopoverControl.ts +32 -32
  168. package/src/hooks/usePopupControl.ts +22 -22
  169. package/src/hooks/useZendesk.ts +21 -21
  170. package/src/index.ts +381 -379
  171. package/src/pages/NoAccessPage.tsx +27 -27
  172. package/src/pages/NotFoundPage.tsx +26 -26
  173. package/src/styles/common/helpers/_color.scss +3 -0
  174. package/src/styles/components/_page.scss +0 -13
  175. package/src/types/IBasic.ts +32 -32
  176. package/src/types/IHeader.ts +40 -40
  177. package/src/types/IInfo.ts +1 -1
  178. package/src/types/IKeyboard.ts +33 -33
  179. package/src/types/IMenu.ts +19 -19
  180. package/src/types/INotifications.ts +15 -15
  181. package/src/types/IPopup.ts +17 -17
  182. package/src/types/IRouter.ts +6 -6
  183. package/src/types/ISelect.ts +54 -54
  184. package/src/types/ITab.ts +10 -10
  185. package/src/types/ITable.ts +291 -290
  186. package/src/utils/InputPatternValidation.ts +12 -12
  187. package/src/utils/dateUtils.ts +32 -32
  188. package/src/utils/fileUtils.ts +177 -177
  189. package/src/utils/i18n/i18nIUICyrilic.ts +119 -119
  190. package/src/utils/i18n/i18nIUILatin.ts +120 -120
  191. package/src/utils/i18n/i18nIUIMe.ts +118 -118
  192. package/src/utils/icons.ts +13 -13
  193. package/src/utils/localStorageHelper.ts +24 -24
  194. package/src/utils/logoUtils.ts +7 -7
  195. package/src/utils/numberUtils.ts +21 -21
  196. package/src/utils/objectUtils.ts +114 -114
  197. package/src/utils/popupUtils.ts +82 -82
  198. package/src/utils/rootDir.ts +1 -1
  199. package/src/utils/stringUtils.ts +18 -18
  200. package/src/utils/tableUtils.ts +130 -130
  201. package/src/utils/toasts.ts +6 -6
  202. package/src/utils/urlUtils.ts +4 -4
@@ -1,114 +1,114 @@
1
- import type { TFunction } from 'i18next';
2
- import type { IBooleanObject } from '../types/IBasic';
3
- import type { INotification } from '../types/INotifications';
4
- import { formatDate, formatDateAndTime } from './dateUtils';
5
-
6
- export const hasValue = (value: any) => ![null, undefined, ''].includes(value);
7
-
8
- export const deleteProps = <T extends Record<string, any>>(
9
- obj: T,
10
- props: (keyof T)[]
11
- ) => {
12
- const newObj = { ...obj };
13
- props.forEach(prop => delete newObj[prop]);
14
- return newObj as Partial<T>;
15
- };
16
-
17
- export const deletePropsThatEndsWith = <T>(obj: T, endsWith: string) => {
18
- const newObj = { ...obj };
19
- for (const prop in newObj) {
20
- if (prop.endsWith(endsWith)) {
21
- delete newObj[prop];
22
- }
23
- }
24
- return newObj as Partial<T>;
25
- };
26
-
27
- export const deleteEmptyProps = <T extends Record<string, any>>(obj: T): T =>
28
- Object.entries(obj).reduce(
29
- (updatedObj, [key, value]) =>
30
- hasValue(value) ? ((updatedObj[key as keyof T] = value), updatedObj) : updatedObj,
31
- {} as T
32
- );
33
-
34
- export const deleteEmptyPropsIncludingArray = <T extends Record<string, any>>(
35
- obj: T
36
- ): T =>
37
- Object.entries(obj).reduce(
38
- (updatedObj, [key, value]) =>
39
- !hasValue(value) || (Array.isArray(value) && !value.length)
40
- ? updatedObj
41
- : ((updatedObj[key as keyof T] = value), updatedObj),
42
- {} as T
43
- );
44
-
45
- export const convertBooleanObjectToArray = (obj: IBooleanObject) =>
46
- Object.keys(obj).filter(key => obj[key]);
47
-
48
- export const convertArrayToBooleanObject = (arr?: string[]) =>
49
- arr ? arr.reduce((acc: IBooleanObject, item) => ({ ...acc, [item]: true }), {}) : {};
50
-
51
- export const deepCopy = (el: any[] | object) => JSON.parse(JSON.stringify(el));
52
-
53
- export const areStringArraysEqual = (arr1: string[], arr2: string[]) =>
54
- JSON.stringify(arr1) === JSON.stringify(arr2);
55
-
56
- export const compareArrayItemsIndex = <T>(
57
- array: T[] | readonly T[],
58
- item1: T,
59
- comparison: 'greaterThan' | 'greaterThanOrEqualTo' | 'lessThan' | 'lessThanOrEqualTo',
60
- item2: T
61
- ): boolean => {
62
- const index1 = array.indexOf(item1);
63
- const index2 = array.indexOf(item2);
64
- return (
65
- // Check if items exist in array
66
- index1 >= 0 &&
67
- index2 >= 0 &&
68
- // Compare items location in the array
69
- (comparison === 'greaterThan'
70
- ? index1 > index2
71
- : comparison === 'greaterThanOrEqualTo'
72
- ? index1 >= index2
73
- : comparison === 'lessThan'
74
- ? index1 < index2
75
- : index1 <= index2)
76
- );
77
- };
78
-
79
- export const intersectArrays = <T>(
80
- arr1: any[] | readonly T[],
81
- arr2: any[] | readonly T[]
82
- ) => {
83
- const set2 = new Set(arr2);
84
- return (arr1 as T[]).filter(item => set2.has(item));
85
- };
86
-
87
- export const getNotificationValues = (
88
- t: TFunction,
89
- notificationValues?: INotification['values']
90
- ) =>
91
- notificationValues?.reduce((obj, item) => {
92
- let processedValue = item.value;
93
- if (item.format === 'TRANSLATE') {
94
- processedValue = t(processedValue);
95
- } else if (item.format === 'DATE') {
96
- processedValue = formatDate(processedValue);
97
- } else if (item.format === 'DATE_TIME') {
98
- processedValue = formatDateAndTime(processedValue);
99
- }
100
- return { ...obj, [item.key]: processedValue };
101
- }, {});
102
-
103
- export const flattenTreeForSelect = (items: any[], depth = 0, maxDepth = 5): any[] => {
104
- if (!Array.isArray(items)) return [];
105
- const indent = '\u00A0'.repeat(Math.min(depth, maxDepth) * 3);
106
- return items.flatMap(node => [
107
- {
108
- value: node.uuid,
109
- label: `${indent}${node.code ? node.code + ' - ' : ''}${node.name}`,
110
- disabled: node.active === false || node.hasUserAccess === false,
111
- },
112
- ...(node.children ? flattenTreeForSelect(node.children, depth + 1, maxDepth) : []),
113
- ]);
114
- };
1
+ import type { TFunction } from 'i18next';
2
+ import type { IBooleanObject } from '../types/IBasic';
3
+ import type { INotification } from '../types/INotifications';
4
+ import { formatDate, formatDateAndTime } from './dateUtils';
5
+
6
+ export const hasValue = (value: any) => ![null, undefined, ''].includes(value);
7
+
8
+ export const deleteProps = <T extends Record<string, any>>(
9
+ obj: T,
10
+ props: (keyof T)[]
11
+ ) => {
12
+ const newObj = { ...obj };
13
+ props.forEach(prop => delete newObj[prop]);
14
+ return newObj as Partial<T>;
15
+ };
16
+
17
+ export const deletePropsThatEndsWith = <T>(obj: T, endsWith: string) => {
18
+ const newObj = { ...obj };
19
+ for (const prop in newObj) {
20
+ if (prop.endsWith(endsWith)) {
21
+ delete newObj[prop];
22
+ }
23
+ }
24
+ return newObj as Partial<T>;
25
+ };
26
+
27
+ export const deleteEmptyProps = <T extends Record<string, any>>(obj: T): T =>
28
+ Object.entries(obj).reduce(
29
+ (updatedObj, [key, value]) =>
30
+ hasValue(value) ? ((updatedObj[key as keyof T] = value), updatedObj) : updatedObj,
31
+ {} as T
32
+ );
33
+
34
+ export const deleteEmptyPropsIncludingArray = <T extends Record<string, any>>(
35
+ obj: T
36
+ ): T =>
37
+ Object.entries(obj).reduce(
38
+ (updatedObj, [key, value]) =>
39
+ !hasValue(value) || (Array.isArray(value) && !value.length)
40
+ ? updatedObj
41
+ : ((updatedObj[key as keyof T] = value), updatedObj),
42
+ {} as T
43
+ );
44
+
45
+ export const convertBooleanObjectToArray = (obj: IBooleanObject) =>
46
+ Object.keys(obj).filter(key => obj[key]);
47
+
48
+ export const convertArrayToBooleanObject = (arr?: string[]) =>
49
+ arr ? arr.reduce((acc: IBooleanObject, item) => ({ ...acc, [item]: true }), {}) : {};
50
+
51
+ export const deepCopy = (el: any[] | object) => JSON.parse(JSON.stringify(el));
52
+
53
+ export const areStringArraysEqual = (arr1: string[], arr2: string[]) =>
54
+ JSON.stringify(arr1) === JSON.stringify(arr2);
55
+
56
+ export const compareArrayItemsIndex = <T>(
57
+ array: T[] | readonly T[],
58
+ item1: T,
59
+ comparison: 'greaterThan' | 'greaterThanOrEqualTo' | 'lessThan' | 'lessThanOrEqualTo',
60
+ item2: T
61
+ ): boolean => {
62
+ const index1 = array.indexOf(item1);
63
+ const index2 = array.indexOf(item2);
64
+ return (
65
+ // Check if items exist in array
66
+ index1 >= 0 &&
67
+ index2 >= 0 &&
68
+ // Compare items location in the array
69
+ (comparison === 'greaterThan'
70
+ ? index1 > index2
71
+ : comparison === 'greaterThanOrEqualTo'
72
+ ? index1 >= index2
73
+ : comparison === 'lessThan'
74
+ ? index1 < index2
75
+ : index1 <= index2)
76
+ );
77
+ };
78
+
79
+ export const intersectArrays = <T>(
80
+ arr1: any[] | readonly T[],
81
+ arr2: any[] | readonly T[]
82
+ ) => {
83
+ const set2 = new Set(arr2);
84
+ return (arr1 as T[]).filter(item => set2.has(item));
85
+ };
86
+
87
+ export const getNotificationValues = (
88
+ t: TFunction,
89
+ notificationValues?: INotification['values']
90
+ ) =>
91
+ notificationValues?.reduce((obj, item) => {
92
+ let processedValue = item.value;
93
+ if (item.format === 'TRANSLATE') {
94
+ processedValue = t(processedValue);
95
+ } else if (item.format === 'DATE') {
96
+ processedValue = formatDate(processedValue);
97
+ } else if (item.format === 'DATE_TIME') {
98
+ processedValue = formatDateAndTime(processedValue);
99
+ }
100
+ return { ...obj, [item.key]: processedValue };
101
+ }, {});
102
+
103
+ export const flattenTreeForSelect = (items: any[], depth = 0, maxDepth = 5): any[] => {
104
+ if (!Array.isArray(items)) return [];
105
+ const indent = '\u00A0'.repeat(Math.min(depth, maxDepth) * 3);
106
+ return items.flatMap(node => [
107
+ {
108
+ value: node.uuid,
109
+ label: `${indent}${node.code ? node.code + ' - ' : ''}${node.name}`,
110
+ disabled: node.active === false || node.hasUserAccess === false,
111
+ },
112
+ ...(node.children ? flattenTreeForSelect(node.children, depth + 1, maxDepth) : []),
113
+ ]);
114
+ };
@@ -1,82 +1,82 @@
1
- import type { KeyboardEvent } from 'react';
2
- import type { IKeyboardAction } from '../types/IKeyboard';
3
-
4
- export const onPopupKeyDown = (
5
- event: KeyboardEvent<HTMLDivElement>,
6
- {
7
- onClose,
8
- enter,
9
- search,
10
- focusableElements,
11
- }: {
12
- onClose: () => void;
13
- enter?: {
14
- onAction: () => void;
15
- disabled?: boolean;
16
- };
17
- search?: {
18
- onAction: () => void;
19
- disabled?: boolean;
20
- };
21
- focusableElements?: HTMLElement[];
22
- }
23
- ) => {
24
- event.stopPropagation();
25
- const actions: IKeyboardAction[] = [
26
- {
27
- code: 'Enter',
28
- onAction: () => enter?.onAction(),
29
- disabled: !enter || !!enter.disabled,
30
- },
31
- { code: 'Escape', onAction: onClose },
32
- {
33
- code: 'KeyF',
34
- ctrl: true,
35
- onAction: () => {
36
- event.preventDefault();
37
- search?.onAction();
38
- },
39
- disabled: !search || !!search.disabled,
40
- },
41
- {
42
- code: 'Tab',
43
- onAction: () => {
44
- if (focusableElements?.length) {
45
- const first = focusableElements[0];
46
- const last = focusableElements[focusableElements.length - 1];
47
- if (document.activeElement === last) {
48
- event.preventDefault();
49
- first.focus();
50
- }
51
- }
52
- },
53
- disabled: !focusableElements?.length,
54
- },
55
- {
56
- code: 'Tab',
57
- shift: true,
58
- onAction: () => {
59
- if (focusableElements?.length) {
60
- const first = focusableElements[0];
61
- const last = focusableElements[focusableElements.length - 1];
62
- if (document.activeElement === first) {
63
- event.preventDefault();
64
- last.focus();
65
- }
66
- }
67
- },
68
- disabled: !focusableElements?.length,
69
- },
70
- ];
71
-
72
- actions.forEach(item => {
73
- if (
74
- !item.disabled &&
75
- item.code === event.code &&
76
- !!item.shift === event.shiftKey &&
77
- !!item.ctrl === (event.ctrlKey || event.metaKey)
78
- ) {
79
- item.onAction();
80
- }
81
- });
82
- };
1
+ import type { KeyboardEvent } from 'react';
2
+ import type { IKeyboardAction } from '../types/IKeyboard';
3
+
4
+ export const onPopupKeyDown = (
5
+ event: KeyboardEvent<HTMLDivElement>,
6
+ {
7
+ onClose,
8
+ enter,
9
+ search,
10
+ focusableElements,
11
+ }: {
12
+ onClose: () => void;
13
+ enter?: {
14
+ onAction: () => void;
15
+ disabled?: boolean;
16
+ };
17
+ search?: {
18
+ onAction: () => void;
19
+ disabled?: boolean;
20
+ };
21
+ focusableElements?: HTMLElement[];
22
+ }
23
+ ) => {
24
+ event.stopPropagation();
25
+ const actions: IKeyboardAction[] = [
26
+ {
27
+ code: 'Enter',
28
+ onAction: () => enter?.onAction(),
29
+ disabled: !enter || !!enter.disabled,
30
+ },
31
+ { code: 'Escape', onAction: onClose },
32
+ {
33
+ code: 'KeyF',
34
+ ctrl: true,
35
+ onAction: () => {
36
+ event.preventDefault();
37
+ search?.onAction();
38
+ },
39
+ disabled: !search || !!search.disabled,
40
+ },
41
+ {
42
+ code: 'Tab',
43
+ onAction: () => {
44
+ if (focusableElements?.length) {
45
+ const first = focusableElements[0];
46
+ const last = focusableElements[focusableElements.length - 1];
47
+ if (document.activeElement === last) {
48
+ event.preventDefault();
49
+ first.focus();
50
+ }
51
+ }
52
+ },
53
+ disabled: !focusableElements?.length,
54
+ },
55
+ {
56
+ code: 'Tab',
57
+ shift: true,
58
+ onAction: () => {
59
+ if (focusableElements?.length) {
60
+ const first = focusableElements[0];
61
+ const last = focusableElements[focusableElements.length - 1];
62
+ if (document.activeElement === first) {
63
+ event.preventDefault();
64
+ last.focus();
65
+ }
66
+ }
67
+ },
68
+ disabled: !focusableElements?.length,
69
+ },
70
+ ];
71
+
72
+ actions.forEach(item => {
73
+ if (
74
+ !item.disabled &&
75
+ item.code === event.code &&
76
+ !!item.shift === event.shiftKey &&
77
+ !!item.ctrl === (event.ctrlKey || event.metaKey)
78
+ ) {
79
+ item.onAction();
80
+ }
81
+ });
82
+ };
@@ -1 +1 @@
1
- export const rootDir = (document.getElementById('root') as HTMLElement) ?? document.body;
1
+ export const rootDir = (document.getElementById('root') as HTMLElement) ?? document.body;
@@ -1,18 +1,18 @@
1
- export const maxChar = (str = '', maxLength = 30) =>
2
- str.length > maxLength ? `${str.substring(0, maxLength)}...` : str;
3
-
4
- export const getInputHelperText = (
5
- t: any,
6
- min?: string | number,
7
- max?: string | number
8
- ) =>
9
- max
10
- ? min === max
11
- ? t('CharNumber', { number: min })
12
- : t('CharRange', { from: min || 1, to: max })
13
- : min
14
- ? t('CharMin', { from: min })
15
- : undefined;
16
-
17
- export const getInputMinMaxPattern = (min?: string | number, max?: string | number) =>
18
- `^.{${min || 0},${max || ''}}$`;
1
+ export const maxChar = (str = '', maxLength = 30) =>
2
+ str.length > maxLength ? `${str.substring(0, maxLength)}...` : str;
3
+
4
+ export const getInputHelperText = (
5
+ t: any,
6
+ min?: string | number,
7
+ max?: string | number
8
+ ) =>
9
+ max
10
+ ? min === max
11
+ ? t('CharNumber', { number: min })
12
+ : t('CharRange', { from: min || 1, to: max })
13
+ : min
14
+ ? t('CharMin', { from: min })
15
+ : undefined;
16
+
17
+ export const getInputMinMaxPattern = (min?: string | number, max?: string | number) =>
18
+ `^.{${min || 0},${max || ''}}$`;