@laerdal/life-react-components 1.0.1-dev.22.full → 1.0.1-dev.29.full

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 (176) hide show
  1. package/dist/esm/Banners/Banner.js +11 -8
  2. package/dist/esm/Banners/Banner.js.map +1 -1
  3. package/dist/esm/Button/Anchor.js +76 -0
  4. package/dist/esm/Button/Anchor.js.map +1 -0
  5. package/dist/esm/Button/BackButton.js +1 -1
  6. package/dist/esm/Button/BackButton.js.map +1 -1
  7. package/dist/esm/Button/Button.js +46 -19
  8. package/dist/esm/Button/Button.js.map +1 -1
  9. package/dist/esm/Button/DualFunctionButton.js +111 -0
  10. package/dist/esm/Button/DualFunctionButton.js.map +1 -0
  11. package/dist/esm/Button/Iconbutton.js +21 -1
  12. package/dist/esm/Button/Iconbutton.js.map +1 -1
  13. package/dist/esm/Button/__tests__/Button.test.js +2 -1
  14. package/dist/esm/Button/__tests__/Button.test.js.map +1 -1
  15. package/dist/esm/Button/index.js +1 -0
  16. package/dist/esm/Button/index.js.map +1 -1
  17. package/dist/esm/Dropdown/BasicDropdown.js +60 -127
  18. package/dist/esm/Dropdown/BasicDropdown.js.map +1 -1
  19. package/dist/esm/Dropdown/ChipDropdownInput.js +41 -132
  20. package/dist/esm/Dropdown/ChipDropdownInput.js.map +1 -1
  21. package/dist/esm/Dropdown/CommonStyling.js +20 -15
  22. package/dist/esm/Dropdown/CommonStyling.js.map +1 -1
  23. package/dist/esm/Dropdown/DropdownButton.js +2 -2
  24. package/dist/esm/Dropdown/DropdownButton.js.map +1 -1
  25. package/dist/esm/Dropdown/DropdownContent.js +424 -0
  26. package/dist/esm/Dropdown/DropdownContent.js.map +1 -0
  27. package/dist/esm/Dropdown/DropdownFilter.js +42 -151
  28. package/dist/esm/Dropdown/DropdownFilter.js.map +1 -1
  29. package/dist/esm/GlobalNavigationBar/UserMenu/UserMenu.js +15 -17
  30. package/dist/esm/GlobalNavigationBar/UserMenu/UserMenu.js.map +1 -1
  31. package/dist/esm/InputFields/Checkbox.js +19 -10
  32. package/dist/esm/InputFields/Checkbox.js.map +1 -1
  33. package/dist/esm/InputFields/QuickSearch.js +22 -12
  34. package/dist/esm/InputFields/QuickSearch.js.map +1 -1
  35. package/dist/esm/InputFields/RadioButton.js +18 -11
  36. package/dist/esm/InputFields/RadioButton.js.map +1 -1
  37. package/dist/esm/InputFields/components/SearchBarInput.js +1 -1
  38. package/dist/esm/InputFields/components/SearchBarInput.js.map +1 -1
  39. package/dist/esm/Modals/ModalDialog.js +14 -14
  40. package/dist/esm/Modals/ModalDialog.js.map +1 -1
  41. package/dist/esm/Modals/ModalStyles.js +3 -2
  42. package/dist/esm/Modals/ModalStyles.js.map +1 -1
  43. package/dist/esm/Paginator/Paginator.js +18 -8
  44. package/dist/esm/Paginator/Paginator.js.map +1 -1
  45. package/dist/esm/Paginator/__tests__/Paginator.test.js +1 -1
  46. package/dist/esm/Paginator/__tests__/Paginator.test.js.map +1 -1
  47. package/dist/esm/Table/Table.js +2 -1
  48. package/dist/esm/Table/Table.js.map +1 -1
  49. package/dist/esm/Tabs/TabLink.js +1 -1
  50. package/dist/esm/Tabs/TabLink.js.map +1 -1
  51. package/dist/esm/Toasters/Toast.js +2 -1
  52. package/dist/esm/Toasters/Toast.js.map +1 -1
  53. package/dist/esm/types.js +8 -0
  54. package/dist/esm/types.js.map +1 -1
  55. package/dist/js/Banners/Banner.js +13 -11
  56. package/dist/js/Banners/Banner.js.map +1 -1
  57. package/dist/js/Button/Anchor.d.ts +7 -0
  58. package/dist/js/Button/Anchor.js +66 -0
  59. package/dist/js/Button/Anchor.js.map +1 -0
  60. package/dist/js/Button/BackButton.js +1 -1
  61. package/dist/js/Button/BackButton.js.map +1 -1
  62. package/dist/js/Button/Button.d.ts +4 -1
  63. package/dist/js/Button/Button.js +44 -18
  64. package/dist/js/Button/Button.js.map +1 -1
  65. package/dist/js/Button/DualFunctionButton.d.ts +12 -0
  66. package/dist/js/Button/DualFunctionButton.js +148 -0
  67. package/dist/js/Button/DualFunctionButton.js.map +1 -0
  68. package/dist/js/Button/Iconbutton.d.ts +1 -0
  69. package/dist/js/Button/Iconbutton.js +23 -3
  70. package/dist/js/Button/Iconbutton.js.map +1 -1
  71. package/dist/js/Button/__tests__/Button.test.js +3 -1
  72. package/dist/js/Button/__tests__/Button.test.js.map +1 -1
  73. package/dist/js/Button/index.d.ts +1 -0
  74. package/dist/js/Button/index.js +8 -0
  75. package/dist/js/Button/index.js.map +1 -1
  76. package/dist/js/Dropdown/BasicDropdown.d.ts +9 -2
  77. package/dist/js/Dropdown/BasicDropdown.js +67 -133
  78. package/dist/js/Dropdown/BasicDropdown.js.map +1 -1
  79. package/dist/js/Dropdown/ChipDropdownInput.js +45 -138
  80. package/dist/js/Dropdown/ChipDropdownInput.js.map +1 -1
  81. package/dist/js/Dropdown/CommonStyling.d.ts +6 -2
  82. package/dist/js/Dropdown/CommonStyling.js +17 -6
  83. package/dist/js/Dropdown/CommonStyling.js.map +1 -1
  84. package/dist/js/Dropdown/DropdownButton.js +1 -1
  85. package/dist/js/Dropdown/DropdownButton.js.map +1 -1
  86. package/dist/js/Dropdown/DropdownContent.d.ts +45 -0
  87. package/dist/js/Dropdown/DropdownContent.js +476 -0
  88. package/dist/js/Dropdown/DropdownContent.js.map +1 -0
  89. package/dist/js/Dropdown/DropdownFilter.js +59 -186
  90. package/dist/js/Dropdown/DropdownFilter.js.map +1 -1
  91. package/dist/js/GlobalNavigationBar/UserMenu/UserMenu.js +7 -17
  92. package/dist/js/GlobalNavigationBar/UserMenu/UserMenu.js.map +1 -1
  93. package/dist/js/InputFields/Checkbox.d.ts +5 -3
  94. package/dist/js/InputFields/Checkbox.js +16 -9
  95. package/dist/js/InputFields/Checkbox.js.map +1 -1
  96. package/dist/js/InputFields/QuickSearch.js +24 -6
  97. package/dist/js/InputFields/QuickSearch.js.map +1 -1
  98. package/dist/js/InputFields/RadioButton.d.ts +4 -2
  99. package/dist/js/InputFields/RadioButton.js +15 -10
  100. package/dist/js/InputFields/RadioButton.js.map +1 -1
  101. package/dist/js/InputFields/components/SearchBarInput.js +1 -1
  102. package/dist/js/InputFields/components/SearchBarInput.js.map +1 -1
  103. package/dist/js/Modals/ModalDialog.d.ts +2 -1
  104. package/dist/js/Modals/ModalDialog.js +15 -14
  105. package/dist/js/Modals/ModalDialog.js.map +1 -1
  106. package/dist/js/Modals/ModalStyles.d.ts +4 -3
  107. package/dist/js/Modals/ModalStyles.js +4 -2
  108. package/dist/js/Modals/ModalStyles.js.map +1 -1
  109. package/dist/js/Paginator/Paginator.js +7 -5
  110. package/dist/js/Paginator/Paginator.js.map +1 -1
  111. package/dist/js/Paginator/__tests__/Paginator.test.js +1 -1
  112. package/dist/js/Paginator/__tests__/Paginator.test.js.map +1 -1
  113. package/dist/js/Table/Table.js +3 -1
  114. package/dist/js/Table/Table.js.map +1 -1
  115. package/dist/js/Tabs/TabLink.js +1 -1
  116. package/dist/js/Tabs/TabLink.js.map +1 -1
  117. package/dist/js/Toasters/Toast.js +1 -1
  118. package/dist/js/Toasters/Toast.js.map +1 -1
  119. package/dist/js/types.d.ts +5 -0
  120. package/dist/js/types.js +10 -1
  121. package/dist/js/types.js.map +1 -1
  122. package/dist/umd/Banners/Banner.js +11 -8
  123. package/dist/umd/Banners/Banner.js.map +1 -1
  124. package/dist/umd/Button/Anchor.js +201 -0
  125. package/dist/umd/Button/Anchor.js.map +1 -0
  126. package/dist/umd/Button/BackButton.js +1 -1
  127. package/dist/umd/Button/BackButton.js.map +1 -1
  128. package/dist/umd/Button/Button.js +48 -22
  129. package/dist/umd/Button/Button.js.map +1 -1
  130. package/dist/umd/Button/DualFunctionButton.js +237 -0
  131. package/dist/umd/Button/DualFunctionButton.js.map +1 -0
  132. package/dist/umd/Button/Iconbutton.js +21 -1
  133. package/dist/umd/Button/Iconbutton.js.map +1 -1
  134. package/dist/umd/Button/__tests__/Button.test.js +5 -5
  135. package/dist/umd/Button/__tests__/Button.test.js.map +1 -1
  136. package/dist/umd/Button/index.js +10 -4
  137. package/dist/umd/Button/index.js.map +1 -1
  138. package/dist/umd/Dropdown/BasicDropdown.js +64 -131
  139. package/dist/umd/Dropdown/BasicDropdown.js.map +1 -1
  140. package/dist/umd/Dropdown/ChipDropdownInput.js +44 -134
  141. package/dist/umd/Dropdown/ChipDropdownInput.js.map +1 -1
  142. package/dist/umd/Dropdown/CommonStyling.js +23 -19
  143. package/dist/umd/Dropdown/CommonStyling.js.map +1 -1
  144. package/dist/umd/Dropdown/DropdownButton.js +1 -1
  145. package/dist/umd/Dropdown/DropdownButton.js.map +1 -1
  146. package/dist/umd/Dropdown/DropdownContent.js +458 -0
  147. package/dist/umd/Dropdown/DropdownContent.js.map +1 -0
  148. package/dist/umd/Dropdown/DropdownFilter.js +47 -155
  149. package/dist/umd/Dropdown/DropdownFilter.js.map +1 -1
  150. package/dist/umd/GlobalNavigationBar/UserMenu/UserMenu.js +18 -21
  151. package/dist/umd/GlobalNavigationBar/UserMenu/UserMenu.js.map +1 -1
  152. package/dist/umd/InputFields/Checkbox.js +22 -14
  153. package/dist/umd/InputFields/Checkbox.js.map +1 -1
  154. package/dist/umd/InputFields/QuickSearch.js +22 -12
  155. package/dist/umd/InputFields/QuickSearch.js.map +1 -1
  156. package/dist/umd/InputFields/RadioButton.js +21 -15
  157. package/dist/umd/InputFields/RadioButton.js.map +1 -1
  158. package/dist/umd/InputFields/components/SearchBarInput.js +1 -1
  159. package/dist/umd/InputFields/components/SearchBarInput.js.map +1 -1
  160. package/dist/umd/Modals/ModalDialog.js +17 -18
  161. package/dist/umd/Modals/ModalDialog.js.map +1 -1
  162. package/dist/umd/Modals/ModalStyles.js +6 -6
  163. package/dist/umd/Modals/ModalStyles.js.map +1 -1
  164. package/dist/umd/Paginator/Paginator.js +18 -8
  165. package/dist/umd/Paginator/Paginator.js.map +1 -1
  166. package/dist/umd/Paginator/__tests__/Paginator.test.js +1 -1
  167. package/dist/umd/Paginator/__tests__/Paginator.test.js.map +1 -1
  168. package/dist/umd/Table/Table.js +5 -5
  169. package/dist/umd/Table/Table.js.map +1 -1
  170. package/dist/umd/Tabs/TabLink.js +1 -1
  171. package/dist/umd/Tabs/TabLink.js.map +1 -1
  172. package/dist/umd/Toasters/Toast.js +1 -1
  173. package/dist/umd/Toasters/Toast.js.map +1 -1
  174. package/dist/umd/types.js +8 -0
  175. package/dist/umd/types.js.map +1 -1
  176. package/package.json +1 -1
@@ -0,0 +1,424 @@
1
+ import _pt from "prop-types";
2
+ import React, { useLayoutEffect, createRef } from 'react';
3
+ import styled from 'styled-components';
4
+ import Button from '../Button/Button';
5
+ import { Size } from '../types';
6
+ import { ButtonDropdownContentStyling, DropdownButton } from './CommonStyling';
7
+ import { COLORS } from '../styles';
8
+ import { Checkbox, RadioButton } from '../InputFields';
9
+ export const DDContainer = styled.div`
10
+ display: none;
11
+ position: absolute;
12
+ background-color: ${COLORS.white};
13
+ width: 100%;
14
+ z-index: 1;
15
+ margin-top: ${props => props.isButton ? '-4px' : '2px'};
16
+
17
+ &.show {
18
+ display: flex;
19
+ flex-direction: column;
20
+ justify-content: center;
21
+ }
22
+
23
+ &.up {
24
+ top: auto;
25
+ bottom: 100%;
26
+ }
27
+
28
+ ${props => props.alignLeft ? 'left: 0px;' : ''}
29
+
30
+ ${props => props.isButton ? ButtonDropdownContentStyling : ''};
31
+
32
+ border: 1px solid ${COLORS.neutral_100};
33
+ box-sizing: border-box;
34
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);
35
+ padding: 4px 0;
36
+
37
+ min-width: ${props => props.size == Size.Large ? '320px' : props.size == Size.Medium ? '280px' : '240px'};
38
+ border-radius: ${props => props.size == Size.Large ? '10px' : props.size == Size.Medium ? '8px' : '6px'};
39
+
40
+ max-height: ${props => !props.scrollable ? 'auto' : props.maxHeight ? props.maxHeight : props.size == Size.Large ? '320px' : props.size == Size.Medium ? '280px' : '240px'};
41
+ `;
42
+ const ListContainer = styled.div`
43
+ ${props => props.scrollable ? 'overflow-y: scroll;' : ''}
44
+ ${props => props.itemsType != 'normal' ? 'margin: 2px 6px 0 16px;' : ''}
45
+
46
+ div {
47
+ padding-top: ${props => props.size == Size.Large ? '8px' : props.size == Size.Medium ? '4px' : '0px'};
48
+ padding-bottom: ${props => props.size == Size.Large ? '8px' : props.size == Size.Medium ? '4px' : '0px'};
49
+ }
50
+
51
+ /* width */
52
+ ::-webkit-scrollbar {
53
+ width: 4px;
54
+ cursor: pointer;
55
+ }
56
+
57
+ /* Track */
58
+ ::-webkit-scrollbar-track {
59
+ background: ${COLORS.neutral_100};
60
+ }
61
+
62
+ /* Handle */
63
+ ::-webkit-scrollbar-thumb {
64
+ background: ${COLORS.neutral_300};
65
+ border-radius: 8px;
66
+ }
67
+
68
+ /* Handle on hover */
69
+ ::-webkit-scrollbar-thumb:hover {
70
+ background: ${COLORS.neutral_500};
71
+ }
72
+ `;
73
+ const ItemsContainer = styled.div`
74
+ padding: 4px;
75
+ `;
76
+ const TopItemContainer = styled.div`
77
+ border-bottom-style: solid;
78
+ border-bottom-color: ${COLORS.neutral_200};
79
+ border-bottom-width: 1px;
80
+ margin-right: 22px;
81
+ padding-left: 4px;
82
+ `;
83
+ const ActionButtonContainer = styled.div`
84
+ border-top-style: solid;
85
+ border-top-color: ${COLORS.neutral_200};
86
+ border-top-width: 1px;
87
+ padding: 0px 16px 4px 16px;
88
+
89
+ button {
90
+ width: 100%;
91
+ }
92
+ `;
93
+ const MAX_MENU_HEIGHT = 240;
94
+ const AVG_OPTION_HEIGHT = 48;
95
+
96
+ const DropdownContent = ({
97
+ id,
98
+ customizationProps,
99
+ alignLeft,
100
+ isButton,
101
+ size,
102
+ isOpen,
103
+ hideOnClickOutside,
104
+ setIsOpen,
105
+ filter,
106
+ selectedValues,
107
+ setSelectedValues,
108
+ messageOnNoResults
109
+ }) => {
110
+ const [focused, setFocused] = React.useState(null);
111
+ const [isUp, setIsUp] = React.useState(false);
112
+ const dropdownContentRef = React.useRef(null);
113
+ const itemsListRef = React.useRef(null);
114
+ React.useEffect(() => {
115
+ determineDropUp();
116
+ }, [isOpen]);
117
+
118
+ const determineDropUp = () => {
119
+ const options = customizationProps.items;
120
+ const node = dropdownContentRef.current;
121
+ if (!node) return;
122
+ const windowHeight = window.innerHeight;
123
+ const menuHeight = Math.min(MAX_MENU_HEIGHT, options.length * AVG_OPTION_HEIGHT);
124
+ const instOffsetWithMenu = node.getBoundingClientRect().top + menuHeight;
125
+ setIsUp(instOffsetWithMenu >= windowHeight);
126
+ };
127
+
128
+ const setNewFocusedElement = index => {
129
+ const newFocusedElement = elRefs[index];
130
+
131
+ if (newFocusedElement) {
132
+ setFocused(index);
133
+ newFocusedElement?.current?.focus();
134
+ }
135
+ };
136
+
137
+ const handleKeyDown = e => {
138
+ if (isOpen) {
139
+ if (e.keyCode === 38) {
140
+ e.preventDefault();
141
+ var focusedNow = focused;
142
+
143
+ if (focusedNow !== undefined && focusedNow !== null && focusedNow > 0) {
144
+ focusedNow -= 1;
145
+ setNewFocusedElement(focusedNow);
146
+ }
147
+ } else if (e.keyCode === 40) {
148
+ e.preventDefault();
149
+ var focusedNow = focused;
150
+
151
+ if (focusedNow !== undefined && focusedNow !== null) {
152
+ focusedNow++;
153
+ } else {
154
+ focusedNow = 0;
155
+ }
156
+
157
+ setNewFocusedElement(focusedNow);
158
+ } else if (e.keyCode === 9) {
159
+ e.preventDefault();
160
+ var focusedNow = focused;
161
+
162
+ if (focusedNow !== undefined && focusedNow !== null) {
163
+ focusedNow++;
164
+ const newFocusedElement = document.getElementById(`${id}_${focusedNow}`);
165
+
166
+ if (!newFocusedElement) {
167
+ setNewFocusedElement(0);
168
+ } else {
169
+ setNewFocusedElement(focusedNow);
170
+ }
171
+ } else {
172
+ setNewFocusedElement(0);
173
+ }
174
+ } else if (e.keyCode === 27) {
175
+ setIsOpen(false);
176
+ setNewFocusedElement(0); //TODO: add onEscapehandler
177
+
178
+ /*
179
+ if (!list.includes(input)) {
180
+ setInput('');
181
+ setPlaceholderSearch(placeholder || '');
182
+ }
183
+ styledFieldRef.current?.focus(); */
184
+ }
185
+ }
186
+ };
187
+
188
+ const handleClickOutside = e => {
189
+ if (hideOnClickOutside && dropdownContentRef?.current && !dropdownContentRef.current.contains(e.target) && !elRefs.some(x => x?.current?.contains(e.target))) {
190
+ if (isOpen) {
191
+ setIsOpen(false);
192
+ setFocused(null);
193
+ }
194
+ }
195
+ };
196
+
197
+ React.useEffect(() => {
198
+ document.addEventListener('keydown', handleKeyDown);
199
+ document.addEventListener('click', handleClickOutside);
200
+ return () => {
201
+ document.removeEventListener('keydown', handleKeyDown);
202
+ document.removeEventListener('click', handleClickOutside);
203
+ };
204
+ });
205
+ const scrollPosition = React.useRef(0);
206
+
207
+ const handleScroll = () => {
208
+ scrollPosition.current = itemsListRef.current?.scrollTop;
209
+ };
210
+
211
+ useLayoutEffect(() => {
212
+ if (itemsListRef.current) itemsListRef.current.scrollTop = scrollPosition.current ?? 0;
213
+ }, [selectedValues]);
214
+
215
+ const getFilteredItems = () => {
216
+ const filtrationString = (filter ?? '').toUpperCase();
217
+ return customizationProps.items.filter(x => x?.value?.toUpperCase().includes(filtrationString) || x?.displayLabel?.toUpperCase().includes(filtrationString));
218
+ };
219
+
220
+ const getCorrectRef = ref => {
221
+ switch (customizationProps.itemsType) {
222
+ case 'normal':
223
+ return ref || /*#__PURE__*/createRef();
224
+
225
+ default:
226
+ return ref || /*#__PURE__*/createRef();
227
+ }
228
+ };
229
+
230
+ const arrLength = getFilteredItems().length;
231
+ const [elRefs, setElRefs] = React.useState([]);
232
+ React.useEffect(() => {
233
+ setElRefs(elRefs => Array(arrLength + 1).fill(null).map((_, i) => getCorrectRef(elRefs[i])));
234
+ }, [arrLength, selectedValues]);
235
+
236
+ const getTopItem = () => {
237
+ if (!customizationProps.pinTopItem) return;
238
+ const visibleItems = getFilteredItems();
239
+ const allSelected = selectedValues?.filter(x => visibleItems.some(y => y.value == x)).length == visibleItems.length;
240
+ let showTopItem = false;
241
+ const suggestions = getFilteredItems().filter(x => x.suggestion);
242
+ if (customizationProps.itemsType == 'radio' && selectedValues && selectedValues?.length > 0) showTopItem = true;else if (customizationProps.itemsType == 'checkbox' && (customizationProps.multiSelect || selectedValues?.length > 0)) showTopItem = true;else if (customizationProps.itemsType == 'normal' && suggestions.length > 0) showTopItem = true;
243
+ if (!showTopItem) return;
244
+ return /*#__PURE__*/React.createElement(TopItemContainer, null, customizationProps.itemsType == 'radio' && /*#__PURE__*/React.createElement(RadioButton, {
245
+ ref: elRefs[0],
246
+ iconPointerEventsTransparent: true,
247
+ select: () => {},
248
+ size: size,
249
+ id: `${id}_topitem`,
250
+ label: selectedValues[0],
251
+ selected: true
252
+ }), customizationProps.itemsType == 'checkbox' && /*#__PURE__*/React.createElement(Checkbox, {
253
+ ref: elRefs[0],
254
+ select: selected => {
255
+ if (!customizationProps.multiSelect) return;
256
+ const newValues = selected ? visibleItems.map(x => x.value) : [];
257
+ setSelectedValues(newValues);
258
+ customizationProps.onValueUpdate && customizationProps.onValueUpdate(newValues);
259
+ },
260
+ iconPointerEventsTransparent: true,
261
+ semiSelected: customizationProps.multiSelect && !allSelected && selectedValues?.length > 0,
262
+ size: size,
263
+ id: `${id}_checkbox_selectall`,
264
+ label: customizationProps.multiSelect ? 'Select all' : selectedValues[0],
265
+ selected: !customizationProps.multiSelect || allSelected
266
+ }), customizationProps.itemsType == 'normal' && /*#__PURE__*/React.createElement(React.Fragment, null, suggestions.map(x => /*#__PURE__*/React.createElement(DropdownButton, {
267
+ ref: elRefs[0],
268
+ type: "button",
269
+ id: `${id}_topitem`,
270
+ onClick: e => {
271
+ customizationProps.onValueUpdate([x.value]);
272
+ setSelectedValues([x.value]);
273
+ setIsOpen(false);
274
+ setFocused(null);
275
+ }
276
+ }, /*#__PURE__*/React.createElement("div", {
277
+ className: "item-content"
278
+ }, x?.icon && /*#__PURE__*/React.createElement("div", {
279
+ className: "item-icon"
280
+ }, x?.icon), /*#__PURE__*/React.createElement("div", {
281
+ className: "item-label"
282
+ }, x?.displayLabel ?? x?.value, x?.noteLabel && /*#__PURE__*/React.createElement("div", {
283
+ style: {
284
+ fontSize: '12px'
285
+ }
286
+ }, x.noteLabel)))))));
287
+ };
288
+
289
+ const getElements = () => {
290
+ if (getFilteredItems().length === 0) {
291
+ return /*#__PURE__*/React.createElement(ItemsContainer, null, /*#__PURE__*/React.createElement(DropdownButton, {
292
+ disabled: true
293
+ }, /*#__PURE__*/React.createElement("span", null, messageOnNoResults)));
294
+ }
295
+
296
+ let number = 0;
297
+ return /*#__PURE__*/React.createElement(ItemsContainer, null, getFilteredItems().filter(x => x && (customizationProps.itemsType != 'normal' || !x.suggestion)).map(item => {
298
+ return /*#__PURE__*/React.createElement(React.Fragment, null, customizationProps.itemsType == 'radio' && /*#__PURE__*/React.createElement(RadioButton, {
299
+ select: selected => {
300
+ if (!selected) return;
301
+ customizationProps.onValueUpdate && customizationProps.onValueUpdate([item.value]);
302
+ setSelectedValues([item.value]);
303
+ },
304
+ ref: elRefs[number + 1],
305
+ size: size,
306
+ iconPointerEventsTransparent: true,
307
+ disabled: item?.disabled,
308
+ key: `key_${id}_${number++}`,
309
+ id: `${id}_${number + 1}`,
310
+ label: item.value,
311
+ selected: selectedValues?.includes(item.value)
312
+ }), customizationProps.itemsType == 'checkbox' && /*#__PURE__*/React.createElement(Checkbox, {
313
+ select: selected => {
314
+ let newValue = [];
315
+
316
+ if (customizationProps.multiSelect) {
317
+ if (selected) newValue = [...selectedValues, item.value];else newValue = selectedValues.filter(x => x != item.value);
318
+ } else newValue = selected ? [item.value] : [];
319
+
320
+ setSelectedValues(newValue);
321
+ customizationProps.onValueUpdate(newValue);
322
+ },
323
+ iconPointerEventsTransparent: true,
324
+ disabled: item?.disabled,
325
+ ref: elRefs[number + 1],
326
+ size: size,
327
+ key: `key_${id}_${number++}`,
328
+ id: `${id}_${number + 1}`,
329
+ label: item.value,
330
+ selected: selectedValues?.includes(item.value)
331
+ }), (customizationProps.itemsType == 'normal' || !customizationProps.itemsType) && /*#__PURE__*/React.createElement(DropdownButton, {
332
+ type: "button",
333
+ size: size,
334
+ disabled: item?.disabled,
335
+ ref: elRefs[number + 1],
336
+ onClick: e => {
337
+ customizationProps.onValueUpdate([item.value]);
338
+ setSelectedValues([item.value]);
339
+ setIsOpen(false);
340
+ setFocused(null);
341
+ },
342
+ className: selectedValues?.includes(item.value) ? 'active' : '',
343
+ key: `key_${id}_${number++}`,
344
+ id: `${id}_${number + 1}`
345
+ }, /*#__PURE__*/React.createElement("div", {
346
+ className: "item-content"
347
+ }, item.icon && /*#__PURE__*/React.createElement("div", {
348
+ className: "item-icon"
349
+ }, item.icon), /*#__PURE__*/React.createElement("div", {
350
+ className: "item-label"
351
+ }, item.displayLabel ?? item.value, item.noteLabel && /*#__PURE__*/React.createElement("div", {
352
+ style: {
353
+ fontSize: '12px'
354
+ }
355
+ }, item.noteLabel)))));
356
+ }));
357
+ };
358
+
359
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(DDContainer, {
360
+ ref: dropdownContentRef,
361
+ size: size,
362
+ isButton: isButton,
363
+ alignLeft: alignLeft,
364
+ scrollable: customizationProps.scrollable,
365
+ maxHeight: customizationProps.maxHeight,
366
+ className: [isOpen && 'show', isUp && 'up'].filter(e => !!e).join(' ')
367
+ }, /*#__PURE__*/React.createElement(ListContainer, {
368
+ size: size,
369
+ itemsType: customizationProps.itemsType,
370
+ onScroll: handleScroll,
371
+ ref: itemsListRef,
372
+ scrollable: customizationProps.scrollable
373
+ }, customizationProps.pinTopItem && getTopItem(), getElements()), customizationProps.action && customizationProps.actionLabel && /*#__PURE__*/React.createElement(ActionButtonContainer, null, /*#__PURE__*/React.createElement(Button, {
374
+ width: "100%",
375
+ variant: "primary",
376
+ size: size,
377
+ onClick: () => customizationProps.action()
378
+ }, customizationProps.actionLabel))));
379
+ /* ),
380
+ {
381
+ handleClickOutside: () => () => {
382
+ if (isOpen) {
383
+ setIsOpen(false);
384
+ setFocused(null);
385
+ }
386
+ },
387
+ },
388
+ );
389
+ return <Wrapped />; */
390
+ };
391
+
392
+ DropdownContent.propTypes = {
393
+ isButton: _pt.bool.isRequired,
394
+ customizationProps: _pt.shape({
395
+ itemsType: _pt.oneOf(['radio', 'checkbox', 'normal']),
396
+ scrollable: _pt.bool,
397
+ multiSelect: _pt.bool,
398
+ maxHeight: _pt.string,
399
+ actionLabel: _pt.string,
400
+ action: _pt.func.isRequired,
401
+ pinTopItem: _pt.bool,
402
+ isButton: _pt.bool.isRequired,
403
+ onValueUpdate: _pt.func.isRequired,
404
+ items: _pt.arrayOf(_pt.shape({
405
+ value: _pt.string.isRequired,
406
+ displayLabel: _pt.string,
407
+ noteLabel: _pt.string,
408
+ suggestion: _pt.bool,
409
+ disabled: _pt.bool,
410
+ icon: _pt.node
411
+ })).isRequired
412
+ }).isRequired,
413
+ alignLeft: _pt.bool,
414
+ isOpen: _pt.bool.isRequired,
415
+ setIsOpen: _pt.func.isRequired,
416
+ id: _pt.string.isRequired,
417
+ filter: _pt.string.isRequired,
418
+ hideOnClickOutside: _pt.bool.isRequired,
419
+ selectedValues: _pt.arrayOf(_pt.string).isRequired,
420
+ setSelectedValues: _pt.func.isRequired,
421
+ messageOnNoResults: _pt.string.isRequired
422
+ };
423
+ export default DropdownContent;
424
+ //# sourceMappingURL=DropdownContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/Dropdown/DropdownContent.tsx"],"names":["React","useLayoutEffect","createRef","styled","Button","Size","ButtonDropdownContentStyling","DropdownButton","COLORS","Checkbox","RadioButton","DDContainer","div","white","props","isButton","alignLeft","neutral_100","size","Large","Medium","scrollable","maxHeight","ListContainer","itemsType","neutral_300","neutral_500","ItemsContainer","TopItemContainer","neutral_200","ActionButtonContainer","MAX_MENU_HEIGHT","AVG_OPTION_HEIGHT","DropdownContent","id","customizationProps","isOpen","hideOnClickOutside","setIsOpen","filter","selectedValues","setSelectedValues","messageOnNoResults","focused","setFocused","useState","isUp","setIsUp","dropdownContentRef","useRef","itemsListRef","useEffect","determineDropUp","options","items","node","current","windowHeight","window","innerHeight","menuHeight","Math","min","length","instOffsetWithMenu","getBoundingClientRect","top","setNewFocusedElement","index","newFocusedElement","elRefs","focus","handleKeyDown","e","keyCode","preventDefault","focusedNow","undefined","document","getElementById","handleClickOutside","contains","target","some","x","addEventListener","removeEventListener","scrollPosition","handleScroll","scrollTop","getFilteredItems","filtrationString","toUpperCase","value","includes","displayLabel","getCorrectRef","ref","arrLength","setElRefs","Array","fill","map","_","i","getTopItem","pinTopItem","visibleItems","allSelected","y","showTopItem","suggestions","suggestion","multiSelect","selected","newValues","onValueUpdate","icon","noteLabel","fontSize","getElements","number","item","disabled","newValue","join","action","actionLabel"],"mappings":";AAAA,OAAOA,KAAP,IAAgBC,eAAhB,EAA0CC,SAA1C,QAA2D,OAA3D;AACA,OAAOC,MAAP,MAA4B,mBAA5B;AAEA,OAAOC,MAAP,MAAmB,kBAAnB;AACA,SAASC,IAAT,QAAqB,UAArB;AACA,SAASC,4BAAT,EAAuCC,cAAvC,QAA6D,iBAA7D;AACA,SAAsBC,MAAtB,QAAoC,WAApC;AACA,SAASC,QAAT,EAAmBC,WAAnB,QAAsC,gBAAtC;AAEA,OAAO,MAAMC,WAAW,GAAGR,MAAM,CAACS,GAAuG;AACzI;AACA;AACA,sBAAsBJ,MAAM,CAACK,KAAM;AACnC;AACA;AACA,gBAAgBC,KAAK,IAAKA,KAAK,CAACC,QAAN,GAAiB,MAAjB,GAA0B,KAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAID,KAAK,IAAKA,KAAK,CAACE,SAAN,GAAkB,YAAlB,GAAiC,EAAI;AACnD;AACA,IAAIF,KAAK,IAAKA,KAAK,CAACC,QAAN,GAAiBT,4BAAjB,GAAgD,EAAI;AAClE;AACA,sBAAsBE,MAAM,CAACS,WAAY;AACzC;AACA;AACA;AACA;AACA,eAAeH,KAAK,IAAKA,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACc,KAAnB,GAA2B,OAA3B,GAAqCL,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACe,MAAnB,GAA4B,OAA5B,GAAsC,OAAS;AAC7G,mBAAmBN,KAAK,IAAKA,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACc,KAAnB,GAA2B,MAA3B,GAAoCL,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACe,MAAnB,GAA4B,KAA5B,GAAoC,KAAO;AAC5G;AACA,gBAAgBN,KAAK,IAAK,CAACA,KAAK,CAACO,UAAP,GAAoB,MAApB,GAA6BP,KAAK,CAACQ,SAAN,GAAkBR,KAAK,CAACQ,SAAxB,GAAoCR,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACc,KAAnB,GAA2B,OAA3B,GAAqCL,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACe,MAAnB,GAA4B,OAA5B,GAAsC,OAAS;AAC/K,CAhCO;AAkCP,MAAMG,aAAa,GAAGpB,MAAM,CAACS,GAAgE;AAC7F,IAAIE,KAAK,IAAKA,KAAK,CAACO,UAAN,GAAmB,qBAAnB,GAA2C,EAAI;AAC7D,IAAIP,KAAK,IAAKA,KAAK,CAACU,SAAN,IAAmB,QAAnB,GAA8B,yBAA9B,GAA0D,EAAI;AAC5E;AACA;AACA,mBAAmBV,KAAK,IAAIA,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACc,KAAnB,GAA2B,KAA3B,GAAmCL,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACe,MAAnB,GAA4B,KAA5B,GAAoC,KAAO;AAC1G,sBAAsBN,KAAK,IAAIA,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACc,KAAnB,GAA2B,KAA3B,GAAmCL,KAAK,CAACI,IAAN,IAAcb,IAAI,CAACe,MAAnB,GAA4B,KAA5B,GAAoC,KAAO;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkBZ,MAAM,CAACS,WAAY;AACrC;AACA;AACA;AACA;AACA,kBAAkBT,MAAM,CAACiB,WAAY;AACrC;AACA;AACA;AACA;AACA;AACA,kBAAkBjB,MAAM,CAACkB,WAAY;AACrC;AACA,CA9BA;AAgCA,MAAMC,cAAc,GAAGxB,MAAM,CAACS,GAAI;AAClC;AACA,CAFA;AAKA,MAAMgB,gBAAgB,GAAGzB,MAAM,CAACS,GAAI;AACpC;AACA,yBAAyBJ,MAAM,CAACqB,WAAY;AAC5C;AACA;AACA;AACA,CANA;AAQA,MAAMC,qBAAqB,GAAG3B,MAAM,CAACS,GAAI;AACzC;AACA,sBAAsBJ,MAAM,CAACqB,WAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,CATA;AAWA,MAAME,eAAe,GAAG,GAAxB;AACA,MAAMC,iBAAiB,GAAG,EAA1B;;AAuCA,MAAMC,eAAuD,GAAG,CAAC;AAC/DC,EAAAA,EAD+D;AAE/DC,EAAAA,kBAF+D;AAG/DnB,EAAAA,SAH+D;AAI/DD,EAAAA,QAJ+D;AAK/DG,EAAAA,IAL+D;AAM/DkB,EAAAA,MAN+D;AAO/DC,EAAAA,kBAP+D;AAQ/DC,EAAAA,SAR+D;AAS/DC,EAAAA,MAT+D;AAU/DC,EAAAA,cAV+D;AAW/DC,EAAAA,iBAX+D;AAY/DC,EAAAA;AAZ+D,CAAD,KAa1D;AACJ,QAAM,CAACC,OAAD,EAAUC,UAAV,IAAwB5C,KAAK,CAAC6C,QAAN,CAA8B,IAA9B,CAA9B;AACA,QAAM,CAACC,IAAD,EAAOC,OAAP,IAAkB/C,KAAK,CAAC6C,QAAN,CAAwB,KAAxB,CAAxB;AACA,QAAMG,kBAAkB,GAAGhD,KAAK,CAACiD,MAAN,CAA6B,IAA7B,CAA3B;AAEA,QAAMC,YAAY,GAAGlD,KAAK,CAACiD,MAAN,CAA6B,IAA7B,CAArB;AAEAjD,EAAAA,KAAK,CAACmD,SAAN,CAAgB,MAAM;AACpBC,IAAAA,eAAe;AAChB,GAFD,EAEG,CAAChB,MAAD,CAFH;;AAIA,QAAMgB,eAAe,GAAG,MAAM;AAC5B,UAAMC,OAAO,GAAGlB,kBAAkB,CAACmB,KAAnC;AACA,UAAMC,IAAI,GAAGP,kBAAkB,CAACQ,OAAhC;AAEA,QAAI,CAACD,IAAL,EAAW;AAEX,UAAME,YAAY,GAAGC,MAAM,CAACC,WAA5B;AACA,UAAMC,UAAU,GAAGC,IAAI,CAACC,GAAL,CAAS/B,eAAT,EAA0BsB,OAAO,CAACU,MAAR,GAAiB/B,iBAA3C,CAAnB;AACA,UAAMgC,kBAAkB,GAAGT,IAAI,CAACU,qBAAL,GAA6BC,GAA7B,GAAmCN,UAA9D;AACAb,IAAAA,OAAO,CAACiB,kBAAkB,IAAIP,YAAvB,CAAP;AACD,GAVD;;AAYA,QAAMU,oBAAoB,GAAIC,KAAD,IAAmB;AAC9C,UAAMC,iBAAiB,GAAGC,MAAM,CAACF,KAAD,CAAhC;;AACA,QAAIC,iBAAJ,EAAuB;AACrBzB,MAAAA,UAAU,CAACwB,KAAD,CAAV;AACAC,MAAAA,iBAAiB,EAAEb,OAAnB,EAA4Be,KAA5B;AACD;AACF,GAND;;AAQA,QAAMC,aAAa,GAAIC,CAAD,IAAY;AAChC,QAAIrC,MAAJ,EAAY;AACV,UAAIqC,CAAC,CAACC,OAAF,KAAc,EAAlB,EAAsB;AACpBD,QAAAA,CAAC,CAACE,cAAF;AACA,YAAIC,UAAU,GAAGjC,OAAjB;;AACA,YAAIiC,UAAU,KAAKC,SAAf,IAA4BD,UAAU,KAAK,IAA3C,IAAmDA,UAAU,GAAG,CAApE,EAAuE;AACrEA,UAAAA,UAAU,IAAI,CAAd;AACAT,UAAAA,oBAAoB,CAACS,UAAD,CAApB;AACD;AACF,OAPD,MAOO,IAAIH,CAAC,CAACC,OAAF,KAAc,EAAlB,EAAsB;AAC3BD,QAAAA,CAAC,CAACE,cAAF;AACA,YAAIC,UAAU,GAAGjC,OAAjB;;AACA,YAAIiC,UAAU,KAAKC,SAAf,IAA4BD,UAAU,KAAK,IAA/C,EAAqD;AACnDA,UAAAA,UAAU;AACX,SAFD,MAEO;AACLA,UAAAA,UAAU,GAAG,CAAb;AACD;;AACDT,QAAAA,oBAAoB,CAACS,UAAD,CAApB;AACD,OATM,MASA,IAAIH,CAAC,CAACC,OAAF,KAAc,CAAlB,EAAqB;AAC1BD,QAAAA,CAAC,CAACE,cAAF;AACA,YAAIC,UAAU,GAAGjC,OAAjB;;AACA,YAAIiC,UAAU,KAAKC,SAAf,IAA4BD,UAAU,KAAK,IAA/C,EAAqD;AACnDA,UAAAA,UAAU;AACV,gBAAMP,iBAAiB,GAAGS,QAAQ,CAACC,cAAT,CAAyB,GAAE7C,EAAG,IAAG0C,UAAW,EAA5C,CAA1B;;AACA,cAAI,CAACP,iBAAL,EAAwB;AACtBF,YAAAA,oBAAoB,CAAC,CAAD,CAApB;AACD,WAFD,MAEO;AACLA,YAAAA,oBAAoB,CAACS,UAAD,CAApB;AACD;AACF,SARD,MAQO;AACLT,UAAAA,oBAAoB,CAAC,CAAD,CAApB;AACD;AACF,OAdM,MAcA,IAAIM,CAAC,CAACC,OAAF,KAAc,EAAlB,EAAsB;AAC3BpC,QAAAA,SAAS,CAAC,KAAD,CAAT;AACA6B,QAAAA,oBAAoB,CAAC,CAAD,CAApB,CAF2B,CAI3B;;AACA;AACR;AACA;AACA;AACA;AACA;AACO;AACF;AACF,GA7CD;;AA+CA,QAAMa,kBAAkB,GAAIP,CAAD,IAAY;AACrC,QAAIpC,kBAAkB,IAAIW,kBAAkB,EAAEQ,OAA1C,IAAqD,CAACR,kBAAkB,CAACQ,OAAnB,CAA2ByB,QAA3B,CAAoCR,CAAC,CAACS,MAAtC,CAAtD,IAAuG,CAACZ,MAAM,CAACa,IAAP,CAAYC,CAAC,IAAIA,CAAC,EAAE5B,OAAH,EAAYyB,QAAZ,CAAqBR,CAAC,CAACS,MAAvB,CAAjB,CAA5G,EAA8J;AAC5J,UAAI9C,MAAJ,EAAY;AACVE,QAAAA,SAAS,CAAC,KAAD,CAAT;AACAM,QAAAA,UAAU,CAAC,IAAD,CAAV;AACD;AACF;AACF,GAPD;;AASA5C,EAAAA,KAAK,CAACmD,SAAN,CAAgB,MAAM;AACpB2B,IAAAA,QAAQ,CAACO,gBAAT,CAA0B,SAA1B,EAAqCb,aAArC;AACAM,IAAAA,QAAQ,CAACO,gBAAT,CAA0B,OAA1B,EAAmCL,kBAAnC;AACA,WAAO,MAAM;AACXF,MAAAA,QAAQ,CAACQ,mBAAT,CAA6B,SAA7B,EAAwCd,aAAxC;AACAM,MAAAA,QAAQ,CAACQ,mBAAT,CAA6B,OAA7B,EAAsCN,kBAAtC;AACD,KAHD;AAID,GAPD;AASA,QAAMO,cAAc,GAAGvF,KAAK,CAACiD,MAAN,CAAiC,CAAjC,CAAvB;;AACA,QAAMuC,YAAY,GAAG,MAAM;AACzBD,IAAAA,cAAc,CAAC/B,OAAf,GAAyBN,YAAY,CAACM,OAAb,EAAsBiC,SAA/C;AACD,GAFD;;AAGAxF,EAAAA,eAAe,CAAC,MAAM;AACpB,QAAIiD,YAAY,CAACM,OAAjB,EAA0BN,YAAY,CAACM,OAAb,CAAqBiC,SAArB,GAAiCF,cAAc,CAAC/B,OAAf,IAA0B,CAA3D;AAC3B,GAFc,EAEZ,CAAChB,cAAD,CAFY,CAAf;;AAIA,QAAMkD,gBAAgB,GAAG,MAAM;AAC7B,UAAMC,gBAAgB,GAAG,CAACpD,MAAM,IAAI,EAAX,EAAeqD,WAAf,EAAzB;AACA,WAAOzD,kBAAkB,CAACmB,KAAnB,CACLf,MADK,CACE6C,CAAC,IAAIA,CAAC,EAAES,KAAH,EAAUD,WAAV,GAAwBE,QAAxB,CAAiCH,gBAAjC,KAAqDP,CAAC,EAAEW,YAAH,EAAiBH,WAAjB,GAA+BE,QAA/B,CAAwCH,gBAAxC,CAD5D,CAAP;AAED,GAJD;;AAMA,QAAMK,aAAa,GAAIC,GAAD,IAAqE;AACzF,YAAO9D,kBAAkB,CAACX,SAA1B;AAEE,WAAK,QAAL;AACE,eAAOyE,GAAG,iBAA0C/F,SAAS,EAA7D;;AACF;AACE,eAAO+F,GAAG,iBAAuC/F,SAAS,EAA1D;AALJ;AAOD,GARD;;AAUA,QAAMgG,SAAS,GAAGR,gBAAgB,GAAG3B,MAArC;AACA,QAAM,CAACO,MAAD,EAAS6B,SAAT,IAAsBnG,KAAK,CAAC6C,QAAN,CAA+C,EAA/C,CAA5B;AAEA7C,EAAAA,KAAK,CAACmD,SAAN,CAAgB,MAAM;AACpBgD,IAAAA,SAAS,CAAC7B,MAAM,IACd8B,KAAK,CAACF,SAAS,GAAG,CAAb,CAAL,CAAqBG,IAArB,CAA0B,IAA1B,EACGC,GADH,CACO,CAACC,CAAD,EAAIC,CAAJ,KAAUR,aAAa,CAAC1B,MAAM,CAACkC,CAAD,CAAP,CAD9B,CADO,CAAT;AAGD,GAJD,EAIG,CAACN,SAAD,EAAY1D,cAAZ,CAJH;;AAOA,QAAMiE,UAAU,GAAG,MAAM;AACvB,QAAI,CAACtE,kBAAkB,CAACuE,UAAxB,EAAoC;AACpC,UAAMC,YAAY,GAAGjB,gBAAgB,EAArC;AACA,UAAMkB,WAAW,GAAGpE,cAAc,EAAED,MAAhB,CAAuB6C,CAAC,IAAIuB,YAAY,CAACxB,IAAb,CAAkB0B,CAAC,IAAIA,CAAC,CAAChB,KAAF,IAAWT,CAAlC,CAA5B,EAAkErB,MAAlE,IAA4E4C,YAAY,CAAC5C,MAA7G;AACA,QAAI+C,WAAW,GAAG,KAAlB;AACA,UAAMC,WAAW,GAAGrB,gBAAgB,GAAGnD,MAAnB,CAA0B6C,CAAC,IAAIA,CAAC,CAAC4B,UAAjC,CAApB;AAEA,QAAI7E,kBAAkB,CAACX,SAAnB,IAAgC,OAAhC,IAA2CgB,cAA3C,IAA6DA,cAAc,EAAEuB,MAAhB,GAAyB,CAA1F,EAA6F+C,WAAW,GAAG,IAAd,CAA7F,KACK,IAAI3E,kBAAkB,CAACX,SAAnB,IAAgC,UAAhC,KAA+CW,kBAAkB,CAAC8E,WAAnB,IAAkCzE,cAAc,EAAEuB,MAAhB,GAAyB,CAA1G,CAAJ,EAAkH+C,WAAW,GAAG,IAAd,CAAlH,KACA,IAAI3E,kBAAkB,CAACX,SAAnB,IAAgC,QAAhC,IAA4CuF,WAAW,CAAChD,MAAZ,GAAqB,CAArE,EAAwE+C,WAAW,GAAG,IAAd;AAE7E,QAAI,CAACA,WAAL,EAAkB;AAElB,wBACE,oBAAC,gBAAD,QACG3E,kBAAkB,CAACX,SAAnB,IAAgC,OAAhC,iBACC,oBAAC,WAAD;AACE,MAAA,GAAG,EAAE8C,MAAM,CAAC,CAAD,CADb;AAEE,MAAA,4BAA4B,EAAE,IAFhC;AAGE,MAAA,MAAM,EAAE,MAAM,CAAE,CAHlB;AAGoB,MAAA,IAAI,EAAEpD,IAH1B;AAGgC,MAAA,EAAE,EAAG,GAAEgB,EAAG,UAH1C;AAGqD,MAAA,KAAK,EAAEM,cAAc,CAAC,CAAD,CAH1E;AAG+E,MAAA,QAAQ,EAAE;AAHzF,MAFJ,EAOGL,kBAAkB,CAACX,SAAnB,IAAgC,UAAhC,iBACC,oBAAC,QAAD;AACE,MAAA,GAAG,EAAE8C,MAAM,CAAC,CAAD,CADb;AAEE,MAAA,MAAM,EAAG4C,QAAD,IAAuB;AAC7B,YAAI,CAAC/E,kBAAkB,CAAC8E,WAAxB,EAAqC;AAErC,cAAME,SAAS,GAAGD,QAAQ,GAAGP,YAAY,CAACL,GAAb,CAAiBlB,CAAC,IAAIA,CAAC,CAACS,KAAxB,CAAH,GAAoC,EAA9D;AACApD,QAAAA,iBAAiB,CAAC0E,SAAD,CAAjB;AACAhF,QAAAA,kBAAkB,CAACiF,aAAnB,IAAoCjF,kBAAkB,CAACiF,aAAnB,CAAiCD,SAAjC,CAApC;AACD,OARH;AASE,MAAA,4BAA4B,EAAE,IAThC;AAUE,MAAA,YAAY,EAAEhF,kBAAkB,CAAC8E,WAAnB,IAAkC,CAACL,WAAnC,IAAkDpE,cAAc,EAAEuB,MAAhB,GAAyB,CAV3F;AAWE,MAAA,IAAI,EAAE7C,IAXR;AAYE,MAAA,EAAE,EAAG,GAAEgB,EAAG,qBAZZ;AAaE,MAAA,KAAK,EAAEC,kBAAkB,CAAC8E,WAAnB,GAAiC,YAAjC,GAAgDzE,cAAc,CAAC,CAAD,CAbvE;AAcE,MAAA,QAAQ,EAAE,CAACL,kBAAkB,CAAC8E,WAApB,IAAmCL;AAd/C,MARJ,EAyBGzE,kBAAkB,CAACX,SAAnB,IAAgC,QAAhC,iBACC,0CACCuF,WAAW,CAACT,GAAZ,CAAgBlB,CAAC,iBAChB,oBAAC,cAAD;AAAgB,MAAA,GAAG,EAAEd,MAAM,CAAC,CAAD,CAA3B;AAAsE,MAAA,IAAI,EAAC,QAA3E;AAAoF,MAAA,EAAE,EAAG,GAAEpC,EAAG,UAA9F;AACE,MAAA,OAAO,EAAGuC,CAAD,IAAY;AACnBtC,QAAAA,kBAAkB,CAACiF,aAAnB,CAAiC,CAAChC,CAAC,CAACS,KAAH,CAAjC;AACApD,QAAAA,iBAAiB,CAAC,CAAC2C,CAAC,CAACS,KAAH,CAAD,CAAjB;AACAvD,QAAAA,SAAS,CAAC,KAAD,CAAT;AACAM,QAAAA,UAAU,CAAC,IAAD,CAAV;AACD;AANH,oBAOE;AAAK,MAAA,SAAS,EAAC;AAAf,OACGwC,CAAC,EAAEiC,IAAH,iBAAW;AAAK,MAAA,SAAS,EAAC;AAAf,OAA4BjC,CAAC,EAAEiC,IAA/B,CADd,eAEE;AAAK,MAAA,SAAS,EAAC;AAAf,OACGjC,CAAC,EAAEW,YAAH,IAAmBX,CAAC,EAAES,KADzB,EAEGT,CAAC,EAAEkC,SAAH,iBAAgB;AAAK,MAAA,KAAK,EAAE;AAACC,QAAAA,QAAQ,EAAE;AAAX;AAAZ,OAAiCnC,CAAC,CAACkC,SAAnC,CAFnB,CAFF,CAPF,CADD,CADD,CA1BJ,CADF;AAgDD,GA7DD;;AA+DA,QAAME,WAAW,GAAG,MAAM;AACxB,QAAI9B,gBAAgB,GAAG3B,MAAnB,KAA8B,CAAlC,EAAqC;AACnC,0BACE,oBAAC,cAAD,qBACE,oBAAC,cAAD;AAAgB,QAAA,QAAQ;AAAxB,sBACE,kCAAOrB,kBAAP,CADF,CADF,CADF;AAOD;;AACD,QAAI+E,MAAM,GAAG,CAAb;AACA,wBACE,oBAAC,cAAD,QACG/B,gBAAgB,GAAGnD,MAAnB,CAA0B6C,CAAC,IAAIA,CAAC,KAAKjD,kBAAkB,CAACX,SAAnB,IAAgC,QAAhC,IAA4C,CAAC4D,CAAC,CAAC4B,UAApD,CAAhC,EAAiGV,GAAjG,CAAqGoB,IAAI,IAAI;AAC5G,0BACE,0CACGvF,kBAAkB,CAACX,SAAnB,IAAgC,OAAhC,iBACC,oBAAC,WAAD;AACE,QAAA,MAAM,EAAG0F,QAAD,IAAuB;AAC7B,cAAI,CAACA,QAAL,EAAe;AACf/E,UAAAA,kBAAkB,CAACiF,aAAnB,IAAoCjF,kBAAkB,CAACiF,aAAnB,CAAiC,CAACM,IAAI,CAAC7B,KAAN,CAAjC,CAApC;AACApD,UAAAA,iBAAiB,CAAC,CAACiF,IAAI,CAAC7B,KAAN,CAAD,CAAjB;AACD,SALH;AAME,QAAA,GAAG,EAAEvB,MAAM,CAACmD,MAAM,GAAG,CAAV,CANb;AAOE,QAAA,IAAI,EAAEvG,IAPR;AAQE,QAAA,4BAA4B,EAAE,IARhC;AASE,QAAA,QAAQ,EAAEwG,IAAI,EAAEC,QATlB;AAUE,QAAA,GAAG,EAAG,OAAMzF,EAAG,IAAGuF,MAAM,EAAG,EAV7B;AAWE,QAAA,EAAE,EAAG,GAAEvF,EAAG,IAAGuF,MAAM,GAAG,CAAE,EAX1B;AAYE,QAAA,KAAK,EAAEC,IAAI,CAAC7B,KAZd;AAaE,QAAA,QAAQ,EAAErD,cAAc,EAAEsD,QAAhB,CAAyB4B,IAAI,CAAC7B,KAA9B;AAbZ,QAFJ,EAkBG1D,kBAAkB,CAACX,SAAnB,IAAgC,UAAhC,iBACC,oBAAC,QAAD;AACE,QAAA,MAAM,EAAG0F,QAAD,IAAuB;AAC7B,cAAIU,QAAkB,GAAG,EAAzB;;AACA,cAAIzF,kBAAkB,CAAC8E,WAAvB,EAAoC;AAClC,gBAAIC,QAAJ,EAAcU,QAAQ,GAAG,CAAC,GAAGpF,cAAJ,EAAoBkF,IAAI,CAAC7B,KAAzB,CAAX,CAAd,KACK+B,QAAQ,GAAGpF,cAAc,CAACD,MAAf,CAAsB6C,CAAC,IAAIA,CAAC,IAAIsC,IAAI,CAAC7B,KAArC,CAAX;AACN,WAHD,MAGO+B,QAAQ,GAAGV,QAAQ,GAAG,CAACQ,IAAI,CAAC7B,KAAN,CAAH,GAAkB,EAArC;;AAEPpD,UAAAA,iBAAiB,CAACmF,QAAD,CAAjB;AACAzF,UAAAA,kBAAkB,CAACiF,aAAnB,CAAiCQ,QAAjC;AACD,SAVH;AAWE,QAAA,4BAA4B,EAAE,IAXhC;AAYE,QAAA,QAAQ,EAAEF,IAAI,EAAEC,QAZlB;AAaE,QAAA,GAAG,EAAErD,MAAM,CAACmD,MAAM,GAAG,CAAV,CAbb;AAcE,QAAA,IAAI,EAAEvG,IAdR;AAeE,QAAA,GAAG,EAAG,OAAMgB,EAAG,IAAGuF,MAAM,EAAG,EAf7B;AAgBE,QAAA,EAAE,EAAG,GAAEvF,EAAG,IAAGuF,MAAM,GAAG,CAAE,EAhB1B;AAiBE,QAAA,KAAK,EAAEC,IAAI,CAAC7B,KAjBd;AAkBE,QAAA,QAAQ,EAAErD,cAAc,EAAEsD,QAAhB,CAAyB4B,IAAI,CAAC7B,KAA9B;AAlBZ,QAnBJ,EAwCG,CAAC1D,kBAAkB,CAACX,SAAnB,IAAgC,QAAhC,IAA4C,CAACW,kBAAkB,CAACX,SAAjE,kBACG,oBAAC,cAAD;AACE,QAAA,IAAI,EAAC,QADP;AAEE,QAAA,IAAI,EAAEN,IAFR;AAGE,QAAA,QAAQ,EAAEwG,IAAI,EAAEC,QAHlB;AAIE,QAAA,GAAG,EAAErD,MAAM,CAACmD,MAAM,GAAG,CAAV,CAJb;AAKE,QAAA,OAAO,EAAGhD,CAAD,IAAY;AACnBtC,UAAAA,kBAAkB,CAACiF,aAAnB,CAAiC,CAACM,IAAI,CAAC7B,KAAN,CAAjC;AACApD,UAAAA,iBAAiB,CAAC,CAACiF,IAAI,CAAC7B,KAAN,CAAD,CAAjB;AACAvD,UAAAA,SAAS,CAAC,KAAD,CAAT;AACAM,UAAAA,UAAU,CAAC,IAAD,CAAV;AACD,SAVH;AAWE,QAAA,SAAS,EAAEJ,cAAc,EAAEsD,QAAhB,CAAyB4B,IAAI,CAAC7B,KAA9B,IAAuC,QAAvC,GAAkD,EAX/D;AAYE,QAAA,GAAG,EAAG,OAAM3D,EAAG,IAAGuF,MAAM,EAAG,EAZ7B;AAaE,QAAA,EAAE,EAAG,GAAEvF,EAAG,IAAGuF,MAAM,GAAG,CAAE;AAb1B,sBAcI;AAAK,QAAA,SAAS,EAAC;AAAf,SACGC,IAAI,CAACL,IAAL,iBAAa;AAAK,QAAA,SAAS,EAAC;AAAf,SAA4BK,IAAI,CAACL,IAAjC,CADhB,eAEE;AAAK,QAAA,SAAS,EAAC;AAAf,SACGK,IAAI,CAAC3B,YAAL,IAAqB2B,IAAI,CAAC7B,KAD7B,EAEG6B,IAAI,CAACJ,SAAL,iBAAkB;AAAK,QAAA,KAAK,EAAE;AAACC,UAAAA,QAAQ,EAAE;AAAX;AAAZ,SAAiCG,IAAI,CAACJ,SAAtC,CAFrB,CAFF,CAdJ,CAzCN,CADF;AAmED,KApEA,CADH,CADF;AAyED,GApFD;;AAsFA,sBAAO,8CACD,oBAAC,WAAD;AACE,IAAA,GAAG,EAAEtE,kBADP;AAEE,IAAA,IAAI,EAAE9B,IAFR;AAGE,IAAA,QAAQ,EAAEH,QAHZ;AAIE,IAAA,SAAS,EAAEC,SAJb;AAKE,IAAA,UAAU,EAAEmB,kBAAkB,CAACd,UALjC;AAME,IAAA,SAAS,EAAEc,kBAAkB,CAACb,SANhC;AAOE,IAAA,SAAS,EAAE,CAACc,MAAM,IAAI,MAAX,EAAmBU,IAAI,IAAI,IAA3B,EAAiCP,MAAjC,CAAwCkC,CAAC,IAAI,CAAC,CAACA,CAA/C,EAAkDoD,IAAlD,CAAuD,GAAvD;AAPb,kBAQE,oBAAC,aAAD;AAAe,IAAA,IAAI,EAAE3G,IAArB;AAA2B,IAAA,SAAS,EAAEiB,kBAAkB,CAACX,SAAzD;AAAoE,IAAA,QAAQ,EAAEgE,YAA9E;AAA4F,IAAA,GAAG,EAAEtC,YAAjG;AAA+G,IAAA,UAAU,EAAEf,kBAAkB,CAACd;AAA9I,KACGc,kBAAkB,CAACuE,UAAnB,IAAiCD,UAAU,EAD9C,EAEGe,WAAW,EAFd,CARF,EAYGrF,kBAAkB,CAAC2F,MAAnB,IAA6B3F,kBAAkB,CAAC4F,WAAhD,iBACC,oBAAC,qBAAD,qBACE,oBAAC,MAAD;AAAQ,IAAA,KAAK,EAAC,MAAd;AAAqB,IAAA,OAAO,EAAC,SAA7B;AAAuC,IAAA,IAAI,EAAE7G,IAA7C;AAAmD,IAAA,OAAO,EAAE,MAAMiB,kBAAkB,CAAC2F,MAAnB;AAAlE,KACG3F,kBAAkB,CAAC4F,WADtB,CADF,CAbJ,CADC,CAAP;AAsBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEC,CAtUD;;;AAdEhH,EAAAA,Q;AACAoB,EAAAA,kB;AAdAX,IAAAA,S,aAAY,O,EAAU,U,EAAa,Q;AACnCH,IAAAA,U;AACA4F,IAAAA,W;AACA3F,IAAAA,S;AACAyG,IAAAA,W;AACAD,IAAAA,M;AACApB,IAAAA,U;AACA3F,IAAAA,Q;AACAqG,IAAAA,a;AACA9D,IAAAA,K;AAlBAuC,MAAAA,K;AACAE,MAAAA,Y;AACAuB,MAAAA,S;AACAN,MAAAA,U;AACAW,MAAAA,Q;AACAN,MAAAA,I;;;AAmBArG,EAAAA,S;AACAoB,EAAAA,M;AACAE,EAAAA,S;AAEAJ,EAAAA,E;AACAK,EAAAA,M;AACAF,EAAAA,kB;AACAG,EAAAA,c;AACAC,EAAAA,iB;AACAC,EAAAA,kB;;AA2UF,eAAeT,eAAf","sourcesContent":["import React, { useLayoutEffect, useMemo, createRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport { CommonInteractionStyling } from '../common';\nimport Button from '../Button/Button';\nimport { Size } from '../types';\nimport { ButtonDropdownContentStyling, DropdownButton } from './CommonStyling';\nimport { BREAKPOINTS, COLORS } from '../styles';\nimport { Checkbox, RadioButton } from '../InputFields';\n\nexport const DDContainer = styled.div<{ isButton: boolean; alignLeft?: boolean; size?: Size; scrollable?: boolean; maxHeight?: string }>`\n display: none;\n position: absolute;\n background-color: ${COLORS.white};\n width: 100%;\n z-index: 1;\n margin-top: ${props => (props.isButton ? '-4px' : '2px')};\n\n &.show {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n &.up {\n top: auto;\n bottom: 100%;\n }\n\n ${props => (props.alignLeft ? 'left: 0px;' : '')}\n\n ${props => (props.isButton ? ButtonDropdownContentStyling : '')};\n\n border: 1px solid ${COLORS.neutral_100};\n box-sizing: border-box;\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);\n padding: 4px 0;\n\n min-width: ${props => (props.size == Size.Large ? '320px' : props.size == Size.Medium ? '280px' : '240px')};\n border-radius: ${props => (props.size == Size.Large ? '10px' : props.size == Size.Medium ? '8px' : '6px')};\n\n max-height: ${props => (!props.scrollable ? 'auto' : props.maxHeight ? props.maxHeight : props.size == Size.Large ? '320px' : props.size == Size.Medium ? '280px' : '240px')};\n`;\n\nconst ListContainer = styled.div<{ scrollable?: boolean, size? : Size, itemsType?: string }>`\n ${props => (props.scrollable ? 'overflow-y: scroll;' : '')}\n ${props => (props.itemsType != 'normal' ? 'margin: 2px 6px 0 16px;' : '')}\n\n div {\n padding-top: ${props => props.size == Size.Large ? '8px' : props.size == Size.Medium ? '4px' : '0px' };\n padding-bottom: ${props => props.size == Size.Large ? '8px' : props.size == Size.Medium ? '4px' : '0px' };\n }\n\n /* width */\n ::-webkit-scrollbar {\n width: 4px;\n cursor: pointer;\n }\n\n /* Track */\n ::-webkit-scrollbar-track {\n background: ${COLORS.neutral_100};\n }\n\n /* Handle */\n ::-webkit-scrollbar-thumb {\n background: ${COLORS.neutral_300};\n border-radius: 8px;\n }\n\n /* Handle on hover */\n ::-webkit-scrollbar-thumb:hover {\n background: ${COLORS.neutral_500};\n }\n`;\n\nconst ItemsContainer = styled.div`\n padding: 4px;\n`;\n\n\nconst TopItemContainer = styled.div`\n border-bottom-style: solid;\n border-bottom-color: ${COLORS.neutral_200};\n border-bottom-width: 1px;\n margin-right: 22px;\n padding-left: 4px;\n`;\n\nconst ActionButtonContainer = styled.div`\n border-top-style: solid;\n border-top-color: ${COLORS.neutral_200};\n border-top-width: 1px;\n padding: 0px 16px 4px 16px;\n\n button {\n width: 100%;\n }\n`;\n\nconst MAX_MENU_HEIGHT = 240;\nconst AVG_OPTION_HEIGHT = 48;\n\nexport interface DropdownItem {\n value: string;\n displayLabel?: string;\n noteLabel?: string;\n suggestion?: boolean;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\nexport interface DropdownCustomizationProps {\n itemsType?: 'radio' | 'checkbox' | 'normal';\n scrollable?: boolean;\n multiSelect?: boolean;\n maxHeight?: string;\n actionLabel?: string;\n action: () => void;\n pinTopItem?: boolean;\n isButton: boolean;\n onValueUpdate: (values: string[]) => void;\n items: DropdownItem[];\n}\n\nexport interface DropdownProps {\n isButton: boolean;\n customizationProps: DropdownCustomizationProps;\n alignLeft?: boolean;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n size?: Size;\n id: string;\n filter: string;\n hideOnClickOutside: boolean;\n selectedValues: string[];\n setSelectedValues: (val: string[]) => void;\n messageOnNoResults: string;\n}\n\nconst DropdownContent: React.FunctionComponent<DropdownProps> = ({\n id,\n customizationProps,\n alignLeft,\n isButton,\n size,\n isOpen,\n hideOnClickOutside,\n setIsOpen,\n filter,\n selectedValues,\n setSelectedValues,\n messageOnNoResults,\n}) => {\n const [focused, setFocused] = React.useState<number | null>(null);\n const [isUp, setIsUp] = React.useState<boolean>(false);\n const dropdownContentRef = React.useRef<HTMLDivElement>(null);\n\n const itemsListRef = React.useRef<HTMLDivElement>(null);\n \n React.useEffect(() => {\n determineDropUp();\n }, [isOpen]);\n\n const determineDropUp = () => {\n const options = customizationProps.items;\n const node = dropdownContentRef.current;\n\n if (!node) return;\n\n const windowHeight = window.innerHeight;\n const menuHeight = Math.min(MAX_MENU_HEIGHT, options.length * AVG_OPTION_HEIGHT);\n const instOffsetWithMenu = node.getBoundingClientRect().top + menuHeight;\n setIsUp(instOffsetWithMenu >= windowHeight);\n };\n\n const setNewFocusedElement = (index: number) => {\n const newFocusedElement = elRefs[index];\n if (newFocusedElement) {\n setFocused(index);\n newFocusedElement?.current?.focus();\n }\n };\n \n const handleKeyDown = (e: any) => {\n if (isOpen) {\n if (e.keyCode === 38) {\n e.preventDefault();\n var focusedNow = focused;\n if (focusedNow !== undefined && focusedNow !== null && focusedNow > 0) {\n focusedNow -= 1;\n setNewFocusedElement(focusedNow);\n }\n } else if (e.keyCode === 40) {\n e.preventDefault();\n var focusedNow = focused;\n if (focusedNow !== undefined && focusedNow !== null) {\n focusedNow++;\n } else {\n focusedNow = 0;\n }\n setNewFocusedElement(focusedNow);\n } else if (e.keyCode === 9) {\n e.preventDefault();\n var focusedNow = focused;\n if (focusedNow !== undefined && focusedNow !== null) {\n focusedNow++;\n const newFocusedElement = document.getElementById(`${id}_${focusedNow}`);\n if (!newFocusedElement) {\n setNewFocusedElement(0);\n } else {\n setNewFocusedElement(focusedNow);\n }\n } else {\n setNewFocusedElement(0);\n }\n } else if (e.keyCode === 27) {\n setIsOpen(false);\n setNewFocusedElement(0);\n\n //TODO: add onEscapehandler\n /*\n if (!list.includes(input)) {\n setInput('');\n setPlaceholderSearch(placeholder || '');\n }\n styledFieldRef.current?.focus(); */\n }\n }\n };\n\n const handleClickOutside = (e: any) => {\n if (hideOnClickOutside && dropdownContentRef?.current && !dropdownContentRef.current.contains(e.target) && !elRefs.some(x => x?.current?.contains(e.target))) {\n if (isOpen) {\n setIsOpen(false);\n setFocused(null);\n }\n }\n };\n\n React.useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('click', handleClickOutside);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('click', handleClickOutside);\n };\n });\n\n const scrollPosition = React.useRef<number | undefined>(0); \n const handleScroll = () => {\n scrollPosition.current = itemsListRef.current?.scrollTop;\n }\n useLayoutEffect(() => {\n if (itemsListRef.current) itemsListRef.current.scrollTop = scrollPosition.current ?? 0;\n }, [selectedValues]);\n\n const getFilteredItems = () => {\n const filtrationString = (filter ?? '').toUpperCase();\n return customizationProps.items.\n filter(x => x?.value?.toUpperCase().includes(filtrationString) ||x?.displayLabel?.toUpperCase().includes(filtrationString));\n };\n\n const getCorrectRef = (ref: React.RefObject<HTMLElement>): React.RefObject<HTMLElement> => {\n switch(customizationProps.itemsType)\n {\n case 'normal':\n return ref as React.RefObject<HTMLButtonElement> || createRef<HTMLButtonElement>();\n default:\n return ref as React.RefObject<HTMLDivElement> || createRef<HTMLDivElement>();\n }\n }\n\n const arrLength = getFilteredItems().length;\n const [elRefs, setElRefs] = React.useState<React.RefObject<HTMLElement>[]>([]);\n\n React.useEffect(() => {\n setElRefs(elRefs => \n Array(arrLength + 1).fill(null)\n .map((_, i) => getCorrectRef(elRefs[i])));\n }, [arrLength, selectedValues]);\n\n\n const getTopItem = () => {\n if (!customizationProps.pinTopItem) return;\n const visibleItems = getFilteredItems();\n const allSelected = selectedValues?.filter(x => visibleItems.some(y => y.value == x)).length == visibleItems.length;\n let showTopItem = false;\n const suggestions = getFilteredItems().filter(x => x.suggestion);\n\n if (customizationProps.itemsType == 'radio' && selectedValues && selectedValues?.length > 0) showTopItem = true;\n else if (customizationProps.itemsType == 'checkbox' && (customizationProps.multiSelect || selectedValues?.length > 0)) showTopItem = true;\n else if (customizationProps.itemsType == 'normal' && suggestions.length > 0) showTopItem = true;\n\n if (!showTopItem) return;\n \n return (\n <TopItemContainer>\n {customizationProps.itemsType == 'radio' && (\n <RadioButton\n ref={elRefs[0] as React.RefObject<HTMLDivElement>}\n iconPointerEventsTransparent={true}\n select={() => {}} size={size} id={`${id}_topitem`} label={selectedValues[0]} selected={true} />\n )}\n {customizationProps.itemsType == 'checkbox' && (\n <Checkbox\n ref={elRefs[0] as React.RefObject<HTMLDivElement>}\n select={(selected: boolean) => {\n if (!customizationProps.multiSelect) return;\n\n const newValues = selected ? visibleItems.map(x => x.value) : [];\n setSelectedValues(newValues);\n customizationProps.onValueUpdate && customizationProps.onValueUpdate(newValues);\n }}\n iconPointerEventsTransparent={true}\n semiSelected={customizationProps.multiSelect && !allSelected && selectedValues?.length > 0}\n size={size}\n id={`${id}_checkbox_selectall`}\n label={customizationProps.multiSelect ? 'Select all' : selectedValues[0]}\n selected={!customizationProps.multiSelect || allSelected}\n />\n )}\n {customizationProps.itemsType == 'normal' && (\n <>\n {suggestions.map(x => \n <DropdownButton ref={elRefs[0] as React.RefObject<HTMLButtonElement>} type=\"button\" id={`${id}_topitem`}\n onClick={(e: any) => {\n customizationProps.onValueUpdate([x.value]);\n setSelectedValues([x.value]);\n setIsOpen(false);\n setFocused(null);\n }}>\n <div className=\"item-content\">\n {x?.icon && <div className=\"item-icon\">{x?.icon}</div>}\n <div className=\"item-label\">\n {x?.displayLabel ?? x?.value}\n {x?.noteLabel && <div style={{fontSize: '12px'}}>{x.noteLabel}</div>}\n </div>\n </div>\n </DropdownButton>)}\n </>\n )}\n </TopItemContainer>\n );\n };\n\n const getElements = () => {\n if (getFilteredItems().length === 0) {\n return (\n <ItemsContainer>\n <DropdownButton disabled>\n <span>{messageOnNoResults}</span>\n </DropdownButton>\n </ItemsContainer>\n );\n }\n let number = 0;\n return (\n <ItemsContainer>\n {getFilteredItems().filter(x => x && (customizationProps.itemsType != 'normal' || !x.suggestion)).map(item => {\n return (\n <>\n {customizationProps.itemsType == 'radio' && (\n <RadioButton\n select={(selected: boolean) => {\n if (!selected) return;\n customizationProps.onValueUpdate && customizationProps.onValueUpdate([item.value]);\n setSelectedValues([item.value]);\n }}\n ref={elRefs[number + 1] as React.RefObject<HTMLDivElement>}\n size={size}\n iconPointerEventsTransparent={true}\n disabled={item?.disabled}\n key={`key_${id}_${number++}`}\n id={`${id}_${number + 1}`}\n label={item.value}\n selected={selectedValues?.includes(item.value)}\n />\n )}\n {customizationProps.itemsType == 'checkbox' && (\n <Checkbox\n select={(selected: boolean) => {\n let newValue: string[] = [];\n if (customizationProps.multiSelect) {\n if (selected) newValue = [...selectedValues, item.value];\n else newValue = selectedValues.filter(x => x != item.value);\n } else newValue = selected ? [item.value] : [];\n\n setSelectedValues(newValue);\n customizationProps.onValueUpdate(newValue);\n }}\n iconPointerEventsTransparent={true}\n disabled={item?.disabled} \n ref={elRefs[number + 1] as React.RefObject<HTMLDivElement>}\n size={size}\n key={`key_${id}_${number++}`}\n id={`${id}_${number + 1}`}\n label={item.value}\n selected={selectedValues?.includes(item.value)}\n />\n )}\n {(customizationProps.itemsType == 'normal' || !customizationProps.itemsType) && (\n <DropdownButton\n type=\"button\"\n size={size}\n disabled={item?.disabled}\n ref={elRefs[number + 1] as React.RefObject<HTMLButtonElement>}\n onClick={(e: any) => {\n customizationProps.onValueUpdate([item.value]);\n setSelectedValues([item.value]);\n setIsOpen(false);\n setFocused(null);\n }}\n className={selectedValues?.includes(item.value) ? 'active' : ''}\n key={`key_${id}_${number++}`}\n id={`${id}_${number + 1}`}>\n <div className=\"item-content\">\n {item.icon && <div className=\"item-icon\">{item.icon}</div>}\n <div className=\"item-label\">\n {item.displayLabel ?? item.value}\n {item.noteLabel && <div style={{fontSize: '12px'}}>{item.noteLabel}</div>}\n </div>\n </div>\n </DropdownButton>\n )}\n </>\n );\n })}\n </ItemsContainer>\n );\n };\n\n return <div>\n <DDContainer\n ref={dropdownContentRef}\n size={size}\n isButton={isButton}\n alignLeft={alignLeft}\n scrollable={customizationProps.scrollable}\n maxHeight={customizationProps.maxHeight}\n className={[isOpen && 'show', isUp && 'up'].filter(e => !!e).join(' ')}>\n <ListContainer size={size} itemsType={customizationProps.itemsType} onScroll={handleScroll} ref={itemsListRef} scrollable={customizationProps.scrollable}>\n {customizationProps.pinTopItem && getTopItem()}\n {getElements()}\n </ListContainer>\n {customizationProps.action && customizationProps.actionLabel && (\n <ActionButtonContainer>\n <Button width=\"100%\" variant=\"primary\" size={size} onClick={() => customizationProps.action()}>\n {customizationProps.actionLabel}\n </Button>\n </ActionButtonContainer>\n )}\n </DDContainer>\n </div>;\n /* ),\n {\n handleClickOutside: () => () => {\n if (isOpen) {\n setIsOpen(false);\n setFocused(null);\n }\n },\n },\n );\n\n return <Wrapped />; */\n};\n\nexport default DropdownContent;\n"],"file":"DropdownContent.js"}