@addev-be/ui 0.14.5 → 0.15.1

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 (215) hide show
  1. package/assets/icons/arrow-down-1-9.svg +1 -1
  2. package/assets/icons/arrow-down-a-z.svg +1 -1
  3. package/assets/icons/arrow-up-z-a.svg +1 -1
  4. package/assets/icons/check.svg +1 -1
  5. package/assets/icons/circle-check.svg +1 -1
  6. package/assets/icons/down.svg +1 -1
  7. package/assets/icons/filter-full.svg +1 -1
  8. package/assets/icons/filter.svg +1 -1
  9. package/assets/icons/hashtag.svg +1 -1
  10. package/assets/icons/image-slash.svg +1 -1
  11. package/assets/icons/left.svg +1 -1
  12. package/assets/icons/magnifier.svg +1 -1
  13. package/assets/icons/phone.svg +1 -1
  14. package/assets/icons/right.svg +1 -1
  15. package/assets/icons/sort-calendar-ascending.svg +5 -5
  16. package/assets/icons/spinner-third.svg +1 -1
  17. package/assets/icons/table-columns.svg +1 -1
  18. package/assets/icons/table-footer-slash.svg +4 -4
  19. package/assets/icons/table-footer.svg +3 -3
  20. package/assets/icons/up.svg +1 -1
  21. package/assets/icons/user-tie.svg +1 -1
  22. package/assets/icons/x-bar.svg +3 -3
  23. package/dist/components/auth/LoginForm.js +0 -1
  24. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +10 -0
  25. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +173 -0
  26. package/dist/components/data/DataGrid/FilterValuesScroller.d.ts +13 -0
  27. package/dist/components/data/DataGrid/FilterValuesScroller.js +73 -0
  28. package/dist/components/data/DataGrid/VirtualScroller.d.ts +11 -0
  29. package/dist/components/data/DataGrid/VirtualScroller.js +41 -0
  30. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +12 -0
  31. package/dist/components/data/DataGrid/helpers/advancedRequests.js +53 -0
  32. package/dist/components/data/DataGrid/helpers.d.ts +28 -0
  33. package/dist/components/data/DataGrid/helpers.js +436 -0
  34. package/dist/config/types.d.ts +11 -0
  35. package/dist/config/types.js +2 -0
  36. package/dist/providers/AuthenticationProvider/index.d.ts +0 -1
  37. package/dist/providers/AuthenticationProvider/index.js +14 -28
  38. package/dist/services/advancedRequests.d.ts +1 -1
  39. package/dist/services/requests/userPermissions.d.ts +4 -0
  40. package/dist/services/requests/userPermissions.js +20 -0
  41. package/dist/services/sqlRequests.d.ts +1 -1
  42. package/package.json +1 -1
  43. package/src/Icons.tsx +134 -134
  44. package/src/components/auth/LoginForm.tsx +84 -84
  45. package/src/components/auth/LoginPage.tsx +32 -32
  46. package/src/components/auth/PasswordRecoveryForm.tsx +52 -52
  47. package/src/components/auth/PasswordResetForm.tsx +112 -112
  48. package/src/components/auth/index.ts +4 -4
  49. package/src/components/auth/styles.ts +14 -14
  50. package/src/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.ts +93 -93
  51. package/src/components/data/AdvancedRequestDataGrid/helpers/columns.tsx +262 -262
  52. package/src/components/data/AdvancedRequestDataGrid/helpers/index.ts +2 -2
  53. package/src/components/data/AdvancedRequestDataGrid/index.tsx +267 -267
  54. package/src/components/data/AdvancedRequestDataGrid/types.ts +47 -47
  55. package/src/components/data/DataGrid/DataGridCell.tsx +83 -77
  56. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +9 -9
  57. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +59 -59
  58. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +182 -182
  59. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +104 -104
  60. package/src/components/data/DataGrid/DataGridEditableCell/CheckboxEditableCell.tsx +38 -38
  61. package/src/components/data/DataGrid/DataGridEditableCell/DateEditableCell.tsx +39 -39
  62. package/src/components/data/DataGrid/DataGridEditableCell/NumberEditableCell.tsx +68 -68
  63. package/src/components/data/DataGrid/DataGridEditableCell/TextEditableCell.tsx +38 -38
  64. package/src/components/data/DataGrid/DataGridEditableCell/index.tsx +106 -60
  65. package/src/components/data/DataGrid/DataGridEditableCell/styles.ts +35 -0
  66. package/src/components/data/DataGrid/DataGridEditableCell/types.ts +17 -14
  67. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +131 -131
  68. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +81 -81
  69. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +376 -376
  70. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +97 -97
  71. package/src/components/data/DataGrid/DataGridFooter.tsx +45 -45
  72. package/src/components/data/DataGrid/DataGridHeader.tsx +173 -173
  73. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +115 -115
  74. package/src/components/data/DataGrid/DataGridRowTemplate.tsx +80 -78
  75. package/src/components/data/DataGrid/FilterModalContent/index.tsx +136 -136
  76. package/src/components/data/DataGrid/FilterModalContent/styles.ts +22 -22
  77. package/src/components/data/DataGrid/constants.ts +6 -6
  78. package/src/components/data/DataGrid/helpers/columns.tsx +384 -383
  79. package/src/components/data/DataGrid/helpers/filters.ts +287 -287
  80. package/src/components/data/DataGrid/helpers/index.ts +2 -2
  81. package/src/components/data/DataGrid/hooks/index.ts +29 -29
  82. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +378 -411
  83. package/src/components/data/DataGrid/hooks/useDataGridChangedRows.ts +56 -56
  84. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +174 -174
  85. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +48 -48
  86. package/src/components/data/DataGrid/index.tsx +110 -110
  87. package/src/components/data/DataGrid/styles.ts +369 -390
  88. package/src/components/data/DataGrid/types.ts +367 -355
  89. package/src/components/data/SmartQueryDataGrid/helpers/columns.tsx +333 -333
  90. package/src/components/data/SmartQueryDataGrid/helpers/hooks.ts +41 -41
  91. package/src/components/data/SmartQueryDataGrid/helpers/index.ts +2 -2
  92. package/src/components/data/SmartQueryDataGrid/helpers/smartQueries.ts +17 -17
  93. package/src/components/data/SmartQueryDataGrid/hooks.ts +75 -75
  94. package/src/components/data/SmartQueryDataGrid/index.tsx +338 -338
  95. package/src/components/data/SmartQueryDataGrid/types.ts +45 -45
  96. package/src/components/data/SqlRequestDataGrid/SqlRequestForeignListEditableCell.tsx +16 -0
  97. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +478 -366
  98. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +2 -2
  99. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +16 -16
  100. package/src/components/data/SqlRequestDataGrid/index.tsx +402 -402
  101. package/src/components/data/SqlRequestDataGrid/styles.ts +15 -15
  102. package/src/components/data/SqlRequestDataGrid/types.ts +74 -63
  103. package/src/components/data/SqlRequestForeignList/index.tsx +259 -157
  104. package/src/components/data/SqlRequestForeignList/styles.ts +42 -38
  105. package/src/components/data/SqlRequestForeignList/types.ts +34 -0
  106. package/src/components/data/SqlRequestGrid/filters/FiltersSidebar.tsx +110 -110
  107. package/src/components/data/SqlRequestGrid/filters/styles.ts +88 -88
  108. package/src/components/data/SqlRequestGrid/helpers/index.ts +1 -1
  109. package/src/components/data/SqlRequestGrid/helpers/sqlRequests.ts +16 -16
  110. package/src/components/data/SqlRequestGrid/index.tsx +316 -316
  111. package/src/components/data/SqlRequestGrid/styles.ts +20 -20
  112. package/src/components/data/SqlRequestGrid/types.ts +75 -75
  113. package/src/components/data/VirtualScroller/hooks.ts +71 -71
  114. package/src/components/data/VirtualScroller/index.tsx +91 -89
  115. package/src/components/data/VirtualScroller/styles.ts +58 -58
  116. package/src/components/data/VirtualScroller/types.ts +12 -12
  117. package/src/components/data/index.ts +23 -23
  118. package/src/components/forms/AutoTextArea.tsx +41 -41
  119. package/src/components/forms/Button.tsx +133 -133
  120. package/src/components/forms/Form/Checkbox.tsx +13 -13
  121. package/src/components/forms/Form/FormGroup.tsx +27 -27
  122. package/src/components/forms/Form/Input.tsx +13 -13
  123. package/src/components/forms/Form/InputWithLabel.tsx +18 -18
  124. package/src/components/forms/Form/Select.tsx +76 -65
  125. package/src/components/forms/Form/TextArea.tsx +13 -13
  126. package/src/components/forms/Form/index.tsx +37 -37
  127. package/src/components/forms/Form/styles.ts +101 -101
  128. package/src/components/forms/Form/types.ts +7 -7
  129. package/src/components/forms/IconButton.tsx +57 -57
  130. package/src/components/forms/IndeterminateCheckbox.tsx +46 -46
  131. package/src/components/forms/Select.tsx +35 -35
  132. package/src/components/forms/VerticalLabel.tsx +20 -20
  133. package/src/components/forms/index.ts +8 -8
  134. package/src/components/forms/styles.ts +31 -31
  135. package/src/components/index.ts +6 -6
  136. package/src/components/layout/Columns.ts +20 -20
  137. package/src/components/layout/Dropdown/index.tsx +113 -112
  138. package/src/components/layout/Dropdown/styles.ts +45 -45
  139. package/src/components/layout/Grid/index.tsx +8 -8
  140. package/src/components/layout/Grid/styles.ts +34 -34
  141. package/src/components/layout/Loading/index.tsx +29 -29
  142. package/src/components/layout/Loading/styles.ts +29 -29
  143. package/src/components/layout/Masonry/index.tsx +29 -29
  144. package/src/components/layout/Masonry/styles.ts +20 -20
  145. package/src/components/layout/Modal/index.tsx +51 -51
  146. package/src/components/layout/Modal/styles.ts +121 -121
  147. package/src/components/layout/index.ts +6 -6
  148. package/src/components/search/HighlightedText.tsx +37 -37
  149. package/src/components/search/QuickSearchBar.tsx +86 -86
  150. package/src/components/search/QuickSearchResults.tsx +86 -86
  151. package/src/components/search/index.ts +9 -9
  152. package/src/components/search/styles.ts +96 -96
  153. package/src/components/search/types.ts +26 -26
  154. package/src/components/ui/Avatar/index.tsx +54 -54
  155. package/src/components/ui/Card/index.tsx +14 -14
  156. package/src/components/ui/Card/styles.ts +37 -37
  157. package/src/components/ui/ContextMenu/index.tsx +79 -79
  158. package/src/components/ui/ContextMenu/styles.ts +119 -119
  159. package/src/components/ui/Ellipsis.tsx +32 -0
  160. package/src/components/ui/Label.tsx +90 -90
  161. package/src/components/ui/Message/index.tsx +57 -57
  162. package/src/components/ui/Message/styles.ts +40 -40
  163. package/src/components/ui/index.ts +6 -5
  164. package/src/config/index.ts +14 -14
  165. package/src/helpers/dates.ts +17 -17
  166. package/src/helpers/getScrollbarSize.ts +14 -14
  167. package/src/helpers/index.ts +3 -3
  168. package/src/helpers/numbers.ts +63 -63
  169. package/src/helpers/text.ts +13 -13
  170. package/src/hooks/index.ts +3 -3
  171. package/src/hooks/useElementSize.ts +24 -24
  172. package/src/hooks/useShowArchived.ts +28 -28
  173. package/src/hooks/useWindowSize.ts +20 -20
  174. package/src/index.ts +9 -9
  175. package/src/providers/AuthenticationProvider/helpers.ts +3 -3
  176. package/src/providers/AuthenticationProvider/index.tsx +243 -243
  177. package/src/providers/LoadingProvider/index.tsx +47 -47
  178. package/src/providers/PortalsProvider/index.tsx +54 -54
  179. package/src/providers/PortalsProvider/styles.ts +31 -31
  180. package/src/providers/SettingsProvider/index.tsx +70 -70
  181. package/src/providers/ThemeProvider/ThemeProvider.ts +63 -63
  182. package/src/providers/ThemeProvider/defaultTheme.ts +457 -457
  183. package/src/providers/ThemeProvider/helpers.ts +11 -11
  184. package/src/providers/ThemeProvider/index.ts +4 -4
  185. package/src/providers/ThemeProvider/types.ts +131 -131
  186. package/src/providers/TrackingProvider/index.tsx +71 -71
  187. package/src/providers/UiProviders/index.tsx +68 -68
  188. package/src/providers/UiProviders/styles.ts +10 -10
  189. package/src/providers/hooks.ts +12 -12
  190. package/src/providers/index.ts +8 -8
  191. package/src/services/HttpService.ts +92 -92
  192. package/src/services/WebSocketService.ts +137 -137
  193. package/src/services/advancedRequests.ts +102 -102
  194. package/src/services/base.ts +23 -23
  195. package/src/services/globalSearch.ts +29 -29
  196. package/src/services/hooks.ts +44 -44
  197. package/src/services/index.ts +21 -21
  198. package/src/services/requests/auth.ts +44 -44
  199. package/src/services/requests/generic.ts +62 -62
  200. package/src/services/requests/tracking.ts +12 -12
  201. package/src/services/requests/userProfiles.ts +35 -35
  202. package/src/services/requests/users.ts +28 -28
  203. package/src/services/smartQueries.ts +122 -122
  204. package/src/services/sqlRequests.ts +111 -111
  205. package/src/services/types/auth.ts +131 -131
  206. package/src/services/types/base.ts +10 -10
  207. package/src/services/types/generic.ts +96 -96
  208. package/src/services/types/tracking.ts +39 -39
  209. package/src/services/types/userProfiles.ts +107 -107
  210. package/src/services/types/users.ts +106 -106
  211. package/src/services/updateSqlRequests.ts +34 -34
  212. package/src/styles/animations.scss +30 -30
  213. package/src/styles/index.scss +42 -42
  214. package/src/typings.d.ts +13 -13
  215. package/tsconfig.json +18 -18
@@ -1,31 +1,31 @@
1
- import styled, { css } from 'styled-components';
2
-
3
- export const inputStyle = css`
4
- font-family: inherit;
5
- font-size: inherit;
6
- color: inherit;
7
- border: 1px solid var(--color-gray-300);
8
- border-radius: var(--rounded-md);
9
- padding: var(--space-1);
10
- width: 100%;
11
- box-sizing: border-box;
12
-
13
- &:focus {
14
- outline: 2px solid var(--color-primary-500);
15
- }
16
- `;
17
-
18
- export const Input = styled.input.attrs({
19
- className: 'Input',
20
- })`
21
- ${inputStyle}
22
- `;
23
-
24
- export const StackedLabelContainer = styled.div.attrs({
25
- className: 'StackedLabelContainer',
26
- })`
27
- display: flex;
28
- flex-direction: column;
29
- gap: var(--space-1);
30
- color: var(--color-gray-900);
31
- `;
1
+ import styled, { css } from 'styled-components';
2
+
3
+ export const inputStyle = css`
4
+ font-family: inherit;
5
+ font-size: inherit;
6
+ color: inherit;
7
+ border: 1px solid var(--color-gray-300);
8
+ border-radius: var(--rounded-md);
9
+ padding: var(--space-1);
10
+ width: 100%;
11
+ box-sizing: border-box;
12
+
13
+ &:focus {
14
+ outline: 2px solid var(--color-primary-500);
15
+ }
16
+ `;
17
+
18
+ export const Input = styled.input.attrs({
19
+ className: 'Input',
20
+ })`
21
+ ${inputStyle}
22
+ `;
23
+
24
+ export const StackedLabelContainer = styled.div.attrs({
25
+ className: 'StackedLabelContainer',
26
+ })`
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: var(--space-1);
30
+ color: var(--color-gray-900);
31
+ `;
@@ -1,6 +1,6 @@
1
- export * from './auth';
2
- export * from './data';
3
- export * from './forms';
4
- export * from './layout';
5
- export * from './search';
6
- export * from './ui';
1
+ export * from './auth';
2
+ export * from './data';
3
+ export * from './forms';
4
+ export * from './layout';
5
+ export * from './search';
6
+ export * from './ui';
@@ -1,20 +1,20 @@
1
- import styled from 'styled-components';
2
-
3
- export type ColumnsProps = {
4
- columns?: number | string[];
5
- };
6
-
7
- export const Columns = styled.div<ColumnsProps>`
8
- display: grid;
9
- grid-gap: var(--space-2);
10
- grid-template-columns: ${({ columns }) =>
11
- typeof columns === 'number'
12
- ? `repeat(${columns}, 1fr)`
13
- : columns?.join(' ') || 'none'};
14
- `;
15
-
16
- export const Column = styled.div`
17
- display: flex;
18
- flex-direction: column;
19
- gap: var(--space-2);
20
- `;
1
+ import styled from 'styled-components';
2
+
3
+ export type ColumnsProps = {
4
+ columns?: number | string[];
5
+ };
6
+
7
+ export const Columns = styled.div<ColumnsProps>`
8
+ display: grid;
9
+ grid-gap: var(--space-2);
10
+ grid-template-columns: ${({ columns }) =>
11
+ typeof columns === 'number'
12
+ ? `repeat(${columns}, 1fr)`
13
+ : columns?.join(' ') || 'none'};
14
+ `;
15
+
16
+ export const Column = styled.div`
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: var(--space-2);
20
+ `;
@@ -1,112 +1,113 @@
1
- import * as styles from './styles';
2
-
3
- import {
4
- CSSProperties,
5
- FC,
6
- PropsWithChildren,
7
- useCallback,
8
- useEffect,
9
- useMemo,
10
- useRef,
11
- } from 'react';
12
-
13
- import { usePortals } from '../../../providers';
14
-
15
- type DropdownProps = PropsWithChildren<
16
- styles.DropdownContainerProps & {
17
- $sourceRect: DOMRect;
18
- $autoPositionX?: boolean;
19
- $autoPositionY?: boolean;
20
- onClose?: () => void;
21
- style?: CSSProperties;
22
- }
23
- >;
24
-
25
- const getDropdownStyle = (dropdown: DropdownProps): CSSProperties => {
26
- const minHeight = Array.isArray(dropdown.$height)
27
- ? dropdown.$height[0]
28
- : dropdown.$height;
29
- const maxHeight = Array.isArray(dropdown.$height)
30
- ? dropdown.$height[1]
31
- : dropdown.$height;
32
- const bottomSpace = document.body.scrollHeight - dropdown.$sourceRect.bottom;
33
- const topSpace = dropdown.$sourceRect.top;
34
- const isDropdownBelow =
35
- !dropdown.$autoPositionY ||
36
- bottomSpace > topSpace ||
37
- bottomSpace >= minHeight;
38
- const height = Math.max(
39
- Math.min(maxHeight, isDropdownBelow ? bottomSpace : topSpace),
40
- minHeight
41
- );
42
-
43
- const rightSpace = document.body.scrollWidth - dropdown.$sourceRect.right;
44
- const leftSpace = dropdown.$sourceRect.left;
45
- const isDropdownRight =
46
- !dropdown.$autoPositionX ||
47
- rightSpace > leftSpace ||
48
- rightSpace >= dropdown.$width;
49
-
50
- const dropdownStyle: CSSProperties = {
51
- ...(isDropdownBelow
52
- ? { top: topSpace + dropdown.$sourceRect.height }
53
- : { bottom: bottomSpace + dropdown.$sourceRect.height }),
54
- ...(isDropdownRight ? { left: leftSpace } : { right: rightSpace }),
55
- width: dropdown.$width,
56
- height,
57
- minHeight,
58
- maxHeight,
59
- boxSizing: 'border-box',
60
- ...dropdown.style,
61
- };
62
- return dropdownStyle;
63
- };
64
-
65
- export const Dropdown: FC<DropdownProps> = ({
66
- children,
67
- onClose,
68
- ...props
69
- }) => {
70
- const { createPortal } = usePortals();
71
-
72
- const firstClick = useRef(true);
73
- const containerRef = useRef<HTMLDivElement | null>(null);
74
- const style = useMemo(() => getDropdownStyle(props), [props]);
75
-
76
- const onDocumentClick = useCallback(
77
- (ev: MouseEvent) => {
78
- if (firstClick.current) {
79
- firstClick.current = false;
80
- return;
81
- }
82
- if (
83
- containerRef.current &&
84
- !containerRef.current.contains(ev.target as Node)
85
- ) {
86
- return onClose?.();
87
- }
88
- },
89
- [onClose]
90
- );
91
-
92
- useEffect(() => {
93
- if (containerRef.current) {
94
- document.addEventListener('click', onDocumentClick);
95
- return () => {
96
- document.removeEventListener('click', onDocumentClick);
97
- };
98
- }
99
- }, [onDocumentClick]);
100
-
101
- const modalPortal = useMemo(
102
- () =>
103
- createPortal(
104
- <styles.DropdownContainer ref={containerRef} {...props} style={style}>
105
- {children}
106
- </styles.DropdownContainer>
107
- ),
108
- [children, createPortal, props, style]
109
- );
110
-
111
- return <>{modalPortal}</>;
112
- };
1
+ import * as styles from './styles';
2
+
3
+ import {
4
+ CSSProperties,
5
+ FC,
6
+ PropsWithChildren,
7
+ useCallback,
8
+ useEffect,
9
+ useMemo,
10
+ useRef,
11
+ } from 'react';
12
+
13
+ import { usePortals } from '../../../providers';
14
+
15
+ type DropdownProps = PropsWithChildren<
16
+ styles.DropdownContainerProps & {
17
+ $sourceRect: DOMRect;
18
+ $autoPositionX?: boolean;
19
+ $autoPositionY?: boolean;
20
+ onClose?: () => void;
21
+ usePortal?: boolean;
22
+ style?: CSSProperties;
23
+ }
24
+ >;
25
+
26
+ const getDropdownStyle = (dropdown: DropdownProps): CSSProperties => {
27
+ const minHeight = Array.isArray(dropdown.$height)
28
+ ? dropdown.$height[0]
29
+ : dropdown.$height;
30
+ const maxHeight = Array.isArray(dropdown.$height)
31
+ ? dropdown.$height[1]
32
+ : dropdown.$height;
33
+ const bottomSpace = document.body.scrollHeight - dropdown.$sourceRect.bottom;
34
+ const topSpace = dropdown.$sourceRect.top;
35
+ const isDropdownBelow =
36
+ !dropdown.$autoPositionY ||
37
+ bottomSpace > topSpace ||
38
+ bottomSpace >= minHeight;
39
+ const height = Math.max(
40
+ Math.min(maxHeight, isDropdownBelow ? bottomSpace : topSpace),
41
+ minHeight
42
+ );
43
+
44
+ const rightSpace = document.body.scrollWidth - dropdown.$sourceRect.right;
45
+ const leftSpace = dropdown.$sourceRect.left;
46
+ const isDropdownRight =
47
+ !dropdown.$autoPositionX ||
48
+ rightSpace > leftSpace ||
49
+ rightSpace >= dropdown.$width;
50
+
51
+ const dropdownStyle: CSSProperties = {
52
+ ...(isDropdownBelow
53
+ ? { top: topSpace + dropdown.$sourceRect.height }
54
+ : { bottom: bottomSpace + dropdown.$sourceRect.height }),
55
+ ...(isDropdownRight ? { left: leftSpace } : { right: rightSpace }),
56
+ width: dropdown.$width,
57
+ height,
58
+ minHeight,
59
+ maxHeight,
60
+ boxSizing: 'border-box',
61
+ ...dropdown.style,
62
+ };
63
+ return dropdownStyle;
64
+ };
65
+
66
+ export const Dropdown: FC<DropdownProps> = ({
67
+ children,
68
+ onClose,
69
+ usePortal = true,
70
+ ...props
71
+ }) => {
72
+ const { createPortal } = usePortals();
73
+
74
+ const firstClick = useRef(true);
75
+ const containerRef = useRef<HTMLDivElement | null>(null);
76
+ const style = useMemo(() => getDropdownStyle(props), [props]);
77
+
78
+ const onDocumentClick = useCallback(
79
+ (ev: MouseEvent) => {
80
+ if (firstClick.current) {
81
+ firstClick.current = false;
82
+ return;
83
+ }
84
+ if (
85
+ containerRef.current &&
86
+ !containerRef.current.contains(ev.target as Node)
87
+ ) {
88
+ return onClose?.();
89
+ }
90
+ },
91
+ [onClose]
92
+ );
93
+
94
+ useEffect(() => {
95
+ if (containerRef.current) {
96
+ document.addEventListener('click', onDocumentClick);
97
+ return () => {
98
+ document.removeEventListener('click', onDocumentClick);
99
+ };
100
+ }
101
+ }, [onDocumentClick]);
102
+
103
+ const modalPortal = useMemo(() => {
104
+ const content = (
105
+ <styles.DropdownContainer ref={containerRef} {...props} style={style}>
106
+ {children}
107
+ </styles.DropdownContainer>
108
+ );
109
+ return usePortal ? createPortal(content) : content;
110
+ }, [children, createPortal, props, style, usePortal]);
111
+
112
+ return <>{modalPortal}</>;
113
+ };
@@ -1,45 +1,45 @@
1
- import styled, { css } from 'styled-components';
2
-
3
- export const DropdownBackdrop = styled.div.attrs<{ $alpha?: number }>({
4
- className: 'DropdownBackdrop',
5
- })`
6
- position: absolute;
7
- z-index: 1000;
8
- top: 0;
9
- left: 0;
10
- right: 0;
11
- bottom: 0;
12
- background: rgba(0, 0, 0, ${({ $alpha = 0.5 }) => $alpha});
13
- display: flex;
14
- justify-content: center;
15
- align-items: center;
16
- `;
17
-
18
- export type DropdownContainerProps = {
19
- $width: number;
20
- $height: number | number[];
21
- $zIndex?: number;
22
- $backdropAlpha?: number;
23
- };
24
-
25
- export const DropdownContainer = styled.div.attrs({
26
- className: 'DropdownContainer',
27
- })<DropdownContainerProps>`
28
- background: var(--color-neutral-0);
29
- border-radius: var(--rounded-md);
30
- box-shadow: var(--shadow-lg);
31
- outline: 1px solid var(--color-neutral-200);
32
-
33
- position: absolute;
34
- z-index: 1001;
35
- ${({ $width }) => ($width ? `${$width}px` : 'auto')};
36
- ${({ $height }) =>
37
- Array.isArray($height)
38
- ? css`
39
- min-height: ${$height[0]}px;
40
- max-height: ${$height[1]}px;
41
- `
42
- : css`
43
- height: ${$height ? `${$height}px` : 'auto'};
44
- `}
45
- `;
1
+ import styled, { css } from 'styled-components';
2
+
3
+ export const DropdownBackdrop = styled.div.attrs<{ $alpha?: number }>({
4
+ className: 'DropdownBackdrop',
5
+ })`
6
+ position: absolute;
7
+ z-index: 1000;
8
+ top: 0;
9
+ left: 0;
10
+ right: 0;
11
+ bottom: 0;
12
+ background: rgba(0, 0, 0, ${({ $alpha = 0.5 }) => $alpha});
13
+ display: flex;
14
+ justify-content: center;
15
+ align-items: center;
16
+ `;
17
+
18
+ export type DropdownContainerProps = {
19
+ $width: number;
20
+ $height: number | number[];
21
+ $zIndex?: number;
22
+ $backdropAlpha?: number;
23
+ };
24
+
25
+ export const DropdownContainer = styled.div.attrs({
26
+ className: 'DropdownContainer',
27
+ })<DropdownContainerProps>`
28
+ background: var(--color-neutral-0);
29
+ border-radius: var(--rounded-md);
30
+ box-shadow: var(--shadow-lg);
31
+ outline: 1px solid var(--color-neutral-200);
32
+
33
+ position: absolute;
34
+ z-index: 1001;
35
+ ${({ $width }) => ($width ? `${$width}px` : 'auto')};
36
+ ${({ $height }) =>
37
+ Array.isArray($height)
38
+ ? css`
39
+ min-height: ${$height[0]}px;
40
+ max-height: ${$height[1]}px;
41
+ `
42
+ : css`
43
+ height: ${$height ? `${$height}px` : 'auto'};
44
+ `}
45
+ `;
@@ -1,8 +1,8 @@
1
- import { GridContainer, GridItemContainer } from './styles';
2
-
3
- type GridFC = typeof GridContainer & {
4
- Item: typeof GridItemContainer;
5
- };
6
-
7
- export const Grid = GridContainer as GridFC;
8
- Grid.Item = GridItemContainer;
1
+ import { GridContainer, GridItemContainer } from './styles';
2
+
3
+ type GridFC = typeof GridContainer & {
4
+ Item: typeof GridItemContainer;
5
+ };
6
+
7
+ export const Grid = GridContainer as GridFC;
8
+ Grid.Item = GridItemContainer;
@@ -1,34 +1,34 @@
1
- import styled from 'styled-components';
2
-
3
- type GridProps = {
4
- columns?: number;
5
- };
6
-
7
- export const GridContainer = styled.div<GridProps>`
8
- display: grid;
9
- grid-template-columns: repeat(
10
- ${({ columns = 12 }) => columns},
11
- minmax(0, 1fr)
12
- );
13
- grid-template-rows: masonry;
14
- `;
15
-
16
- type GridItemProps = {
17
- row?: number;
18
- col?: number;
19
- rowSpan?: number;
20
- colSpan?: number;
21
- };
22
-
23
- export const GridItemContainer = styled.div.attrs<GridItemProps>(
24
- ({ col, colSpan, row, rowSpan }) => ({
25
- style: {
26
- gridColumn: [col, !!colSpan && `span ${colSpan}`]
27
- .filter(Boolean)
28
- .join(' / '),
29
- gridRow: [row, !!rowSpan && `span ${rowSpan}`]
30
- .filter(Boolean)
31
- .join(' / '),
32
- },
33
- })
34
- )``;
1
+ import styled from 'styled-components';
2
+
3
+ type GridProps = {
4
+ columns?: number;
5
+ };
6
+
7
+ export const GridContainer = styled.div<GridProps>`
8
+ display: grid;
9
+ grid-template-columns: repeat(
10
+ ${({ columns = 12 }) => columns},
11
+ minmax(0, 1fr)
12
+ );
13
+ grid-template-rows: masonry;
14
+ `;
15
+
16
+ type GridItemProps = {
17
+ row?: number;
18
+ col?: number;
19
+ rowSpan?: number;
20
+ colSpan?: number;
21
+ };
22
+
23
+ export const GridItemContainer = styled.div.attrs<GridItemProps>(
24
+ ({ col, colSpan, row, rowSpan }) => ({
25
+ style: {
26
+ gridColumn: [col, !!colSpan && `span ${colSpan}`]
27
+ .filter(Boolean)
28
+ .join(' / '),
29
+ gridRow: [row, !!rowSpan && `span ${rowSpan}`]
30
+ .filter(Boolean)
31
+ .join(' / '),
32
+ },
33
+ })
34
+ )``;
@@ -1,29 +1,29 @@
1
- import * as styles from './styles';
2
-
3
- import { FC, PropsWithChildren, useMemo } from 'react';
4
-
5
- import { LoadingIcon } from '../../../Icons';
6
- import { usePortals } from '../../../providers';
7
-
8
- type LoadingProps = PropsWithChildren<{
9
- visible?: boolean;
10
- }>;
11
-
12
- export const Loading: FC<LoadingProps> = ({ visible, children }) => {
13
- const { createPortal } = usePortals();
14
- const loadingPortal = useMemo(
15
- () =>
16
- visible
17
- ? createPortal(
18
- <styles.LoadingBackdrop>
19
- <LoadingIcon />
20
- <styles.LoadingContainer>
21
- {children || 'Loading ...'}
22
- </styles.LoadingContainer>
23
- </styles.LoadingBackdrop>
24
- )
25
- : null,
26
- [children, createPortal, visible]
27
- );
28
- return <>{loadingPortal}</>;
29
- };
1
+ import * as styles from './styles';
2
+
3
+ import { FC, PropsWithChildren, useMemo } from 'react';
4
+
5
+ import { LoadingIcon } from '../../../Icons';
6
+ import { usePortals } from '../../../providers';
7
+
8
+ type LoadingProps = PropsWithChildren<{
9
+ visible?: boolean;
10
+ }>;
11
+
12
+ export const Loading: FC<LoadingProps> = ({ visible, children }) => {
13
+ const { createPortal } = usePortals();
14
+ const loadingPortal = useMemo(
15
+ () =>
16
+ visible
17
+ ? createPortal(
18
+ <styles.LoadingBackdrop>
19
+ <LoadingIcon />
20
+ <styles.LoadingContainer>
21
+ {children || 'Loading ...'}
22
+ </styles.LoadingContainer>
23
+ </styles.LoadingBackdrop>
24
+ )
25
+ : null,
26
+ [children, createPortal, visible]
27
+ );
28
+ return <>{loadingPortal}</>;
29
+ };
@@ -1,29 +1,29 @@
1
- import styled from 'styled-components';
2
-
3
- export const LoadingContainer = styled.div.attrs({
4
- className: 'LoadingContent',
5
- })`
6
- padding: var(--space-4);
7
- `;
8
-
9
- export const LoadingBackdrop = styled.div.attrs({
10
- className: 'LoadingBackdrop',
11
- })`
12
- position: fixed;
13
- z-index: 1100;
14
- top: 0;
15
- left: 0;
16
- right: 0;
17
- bottom: 0;
18
- background-color: rgba(0, 0, 0, 0.5);
19
- display: flex;
20
- flex-direction: column;
21
- justify-content: center;
22
- align-items: center;
23
- color: var(--color-gray-50);
24
- fill: var(--color-gray-50);
25
- & > svg {
26
- width: var(--space-8);
27
- height: var(--space-8);
28
- }
29
- `;
1
+ import styled from 'styled-components';
2
+
3
+ export const LoadingContainer = styled.div.attrs({
4
+ className: 'LoadingContent',
5
+ })`
6
+ padding: var(--space-4);
7
+ `;
8
+
9
+ export const LoadingBackdrop = styled.div.attrs({
10
+ className: 'LoadingBackdrop',
11
+ })`
12
+ position: fixed;
13
+ z-index: 1100;
14
+ top: 0;
15
+ left: 0;
16
+ right: 0;
17
+ bottom: 0;
18
+ background-color: rgba(0, 0, 0, 0.5);
19
+ display: flex;
20
+ flex-direction: column;
21
+ justify-content: center;
22
+ align-items: center;
23
+ color: var(--color-gray-50);
24
+ fill: var(--color-gray-50);
25
+ & > svg {
26
+ width: var(--space-8);
27
+ height: var(--space-8);
28
+ }
29
+ `;