@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,458 @@
1
+ (function (global, factory) {
2
+ if (typeof define === "function" && define.amd) {
3
+ define(["exports", "prop-types", "react", "styled-components", "../Button/Button", "../types", "./CommonStyling", "../styles", "../InputFields"], factory);
4
+ } else if (typeof exports !== "undefined") {
5
+ factory(exports, require("prop-types"), require("react"), require("styled-components"), require("../Button/Button"), require("../types"), require("./CommonStyling"), require("../styles"), require("../InputFields"));
6
+ } else {
7
+ var mod = {
8
+ exports: {}
9
+ };
10
+ factory(mod.exports, global.propTypes, global.react, global.styledComponents, global.Button, global.types, global.CommonStyling, global.styles, global.InputFields);
11
+ global.undefined = mod.exports;
12
+ }
13
+ })(this, function (exports, _propTypes, _react, _styledComponents, _Button, _types, _CommonStyling, _styles, _InputFields) {
14
+ "use strict";
15
+
16
+ Object.defineProperty(exports, "__esModule", {
17
+ value: true
18
+ });
19
+ exports.DDContainer = undefined;
20
+
21
+ var _propTypes2 = _interopRequireDefault(_propTypes);
22
+
23
+ var _react2 = _interopRequireDefault(_react);
24
+
25
+ var _styledComponents2 = _interopRequireDefault(_styledComponents);
26
+
27
+ var _Button2 = _interopRequireDefault(_Button);
28
+
29
+ function _interopRequireDefault(obj) {
30
+ return obj && obj.__esModule ? obj : {
31
+ default: obj
32
+ };
33
+ }
34
+
35
+ const DDContainer = exports.DDContainer = _styledComponents2.default.div`
36
+ display: none;
37
+ position: absolute;
38
+ background-color: ${_styles.COLORS.white};
39
+ width: 100%;
40
+ z-index: 1;
41
+ margin-top: ${props => props.isButton ? '-4px' : '2px'};
42
+
43
+ &.show {
44
+ display: flex;
45
+ flex-direction: column;
46
+ justify-content: center;
47
+ }
48
+
49
+ &.up {
50
+ top: auto;
51
+ bottom: 100%;
52
+ }
53
+
54
+ ${props => props.alignLeft ? 'left: 0px;' : ''}
55
+
56
+ ${props => props.isButton ? _CommonStyling.ButtonDropdownContentStyling : ''};
57
+
58
+ border: 1px solid ${_styles.COLORS.neutral_100};
59
+ box-sizing: border-box;
60
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);
61
+ padding: 4px 0;
62
+
63
+ min-width: ${props => props.size == _types.Size.Large ? '320px' : props.size == _types.Size.Medium ? '280px' : '240px'};
64
+ border-radius: ${props => props.size == _types.Size.Large ? '10px' : props.size == _types.Size.Medium ? '8px' : '6px'};
65
+
66
+ max-height: ${props => !props.scrollable ? 'auto' : props.maxHeight ? props.maxHeight : props.size == _types.Size.Large ? '320px' : props.size == _types.Size.Medium ? '280px' : '240px'};
67
+ `;
68
+ const ListContainer = _styledComponents2.default.div`
69
+ ${props => props.scrollable ? 'overflow-y: scroll;' : ''}
70
+ ${props => props.itemsType != 'normal' ? 'margin: 2px 6px 0 16px;' : ''}
71
+
72
+ div {
73
+ padding-top: ${props => props.size == _types.Size.Large ? '8px' : props.size == _types.Size.Medium ? '4px' : '0px'};
74
+ padding-bottom: ${props => props.size == _types.Size.Large ? '8px' : props.size == _types.Size.Medium ? '4px' : '0px'};
75
+ }
76
+
77
+ /* width */
78
+ ::-webkit-scrollbar {
79
+ width: 4px;
80
+ cursor: pointer;
81
+ }
82
+
83
+ /* Track */
84
+ ::-webkit-scrollbar-track {
85
+ background: ${_styles.COLORS.neutral_100};
86
+ }
87
+
88
+ /* Handle */
89
+ ::-webkit-scrollbar-thumb {
90
+ background: ${_styles.COLORS.neutral_300};
91
+ border-radius: 8px;
92
+ }
93
+
94
+ /* Handle on hover */
95
+ ::-webkit-scrollbar-thumb:hover {
96
+ background: ${_styles.COLORS.neutral_500};
97
+ }
98
+ `;
99
+ const ItemsContainer = _styledComponents2.default.div`
100
+ padding: 4px;
101
+ `;
102
+ const TopItemContainer = _styledComponents2.default.div`
103
+ border-bottom-style: solid;
104
+ border-bottom-color: ${_styles.COLORS.neutral_200};
105
+ border-bottom-width: 1px;
106
+ margin-right: 22px;
107
+ padding-left: 4px;
108
+ `;
109
+ const ActionButtonContainer = _styledComponents2.default.div`
110
+ border-top-style: solid;
111
+ border-top-color: ${_styles.COLORS.neutral_200};
112
+ border-top-width: 1px;
113
+ padding: 0px 16px 4px 16px;
114
+
115
+ button {
116
+ width: 100%;
117
+ }
118
+ `;
119
+ const MAX_MENU_HEIGHT = 240;
120
+ const AVG_OPTION_HEIGHT = 48;
121
+
122
+ const DropdownContent = ({
123
+ id,
124
+ customizationProps,
125
+ alignLeft,
126
+ isButton,
127
+ size,
128
+ isOpen,
129
+ hideOnClickOutside,
130
+ setIsOpen,
131
+ filter,
132
+ selectedValues,
133
+ setSelectedValues,
134
+ messageOnNoResults
135
+ }) => {
136
+ const [focused, setFocused] = _react2.default.useState(null);
137
+
138
+ const [isUp, setIsUp] = _react2.default.useState(false);
139
+
140
+ const dropdownContentRef = _react2.default.useRef(null);
141
+
142
+ const itemsListRef = _react2.default.useRef(null);
143
+
144
+ _react2.default.useEffect(() => {
145
+ determineDropUp();
146
+ }, [isOpen]);
147
+
148
+ const determineDropUp = () => {
149
+ const options = customizationProps.items;
150
+ const node = dropdownContentRef.current;
151
+ if (!node) return;
152
+ const windowHeight = window.innerHeight;
153
+ const menuHeight = Math.min(MAX_MENU_HEIGHT, options.length * AVG_OPTION_HEIGHT);
154
+ const instOffsetWithMenu = node.getBoundingClientRect().top + menuHeight;
155
+ setIsUp(instOffsetWithMenu >= windowHeight);
156
+ };
157
+
158
+ const setNewFocusedElement = index => {
159
+ const newFocusedElement = elRefs[index];
160
+
161
+ if (newFocusedElement) {
162
+ setFocused(index);
163
+ newFocusedElement?.current?.focus();
164
+ }
165
+ };
166
+
167
+ const handleKeyDown = e => {
168
+ if (isOpen) {
169
+ if (e.keyCode === 38) {
170
+ e.preventDefault();
171
+ var focusedNow = focused;
172
+
173
+ if (focusedNow !== undefined && focusedNow !== null && focusedNow > 0) {
174
+ focusedNow -= 1;
175
+ setNewFocusedElement(focusedNow);
176
+ }
177
+ } else if (e.keyCode === 40) {
178
+ e.preventDefault();
179
+ var focusedNow = focused;
180
+
181
+ if (focusedNow !== undefined && focusedNow !== null) {
182
+ focusedNow++;
183
+ } else {
184
+ focusedNow = 0;
185
+ }
186
+
187
+ setNewFocusedElement(focusedNow);
188
+ } else if (e.keyCode === 9) {
189
+ e.preventDefault();
190
+ var focusedNow = focused;
191
+
192
+ if (focusedNow !== undefined && focusedNow !== null) {
193
+ focusedNow++;
194
+ const newFocusedElement = document.getElementById(`${id}_${focusedNow}`);
195
+
196
+ if (!newFocusedElement) {
197
+ setNewFocusedElement(0);
198
+ } else {
199
+ setNewFocusedElement(focusedNow);
200
+ }
201
+ } else {
202
+ setNewFocusedElement(0);
203
+ }
204
+ } else if (e.keyCode === 27) {
205
+ setIsOpen(false);
206
+ setNewFocusedElement(0); //TODO: add onEscapehandler
207
+
208
+ /*
209
+ if (!list.includes(input)) {
210
+ setInput('');
211
+ setPlaceholderSearch(placeholder || '');
212
+ }
213
+ styledFieldRef.current?.focus(); */
214
+ }
215
+ }
216
+ };
217
+
218
+ const handleClickOutside = e => {
219
+ if (hideOnClickOutside && dropdownContentRef?.current && !dropdownContentRef.current.contains(e.target) && !elRefs.some(x => x?.current?.contains(e.target))) {
220
+ if (isOpen) {
221
+ setIsOpen(false);
222
+ setFocused(null);
223
+ }
224
+ }
225
+ };
226
+
227
+ _react2.default.useEffect(() => {
228
+ document.addEventListener('keydown', handleKeyDown);
229
+ document.addEventListener('click', handleClickOutside);
230
+ return () => {
231
+ document.removeEventListener('keydown', handleKeyDown);
232
+ document.removeEventListener('click', handleClickOutside);
233
+ };
234
+ });
235
+
236
+ const scrollPosition = _react2.default.useRef(0);
237
+
238
+ const handleScroll = () => {
239
+ scrollPosition.current = itemsListRef.current?.scrollTop;
240
+ };
241
+
242
+ (0, _react.useLayoutEffect)(() => {
243
+ if (itemsListRef.current) itemsListRef.current.scrollTop = scrollPosition.current ?? 0;
244
+ }, [selectedValues]);
245
+
246
+ const getFilteredItems = () => {
247
+ const filtrationString = (filter ?? '').toUpperCase();
248
+ return customizationProps.items.filter(x => x?.value?.toUpperCase().includes(filtrationString) || x?.displayLabel?.toUpperCase().includes(filtrationString));
249
+ };
250
+
251
+ const getCorrectRef = ref => {
252
+ switch (customizationProps.itemsType) {
253
+ case 'normal':
254
+ return ref || /*#__PURE__*/(0, _react.createRef)();
255
+
256
+ default:
257
+ return ref || /*#__PURE__*/(0, _react.createRef)();
258
+ }
259
+ };
260
+
261
+ const arrLength = getFilteredItems().length;
262
+
263
+ const [elRefs, setElRefs] = _react2.default.useState([]);
264
+
265
+ _react2.default.useEffect(() => {
266
+ setElRefs(elRefs => Array(arrLength + 1).fill(null).map((_, i) => getCorrectRef(elRefs[i])));
267
+ }, [arrLength, selectedValues]);
268
+
269
+ const getTopItem = () => {
270
+ if (!customizationProps.pinTopItem) return;
271
+ const visibleItems = getFilteredItems();
272
+ const allSelected = selectedValues?.filter(x => visibleItems.some(y => y.value == x)).length == visibleItems.length;
273
+ let showTopItem = false;
274
+ const suggestions = getFilteredItems().filter(x => x.suggestion);
275
+ 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;
276
+ if (!showTopItem) return;
277
+ return /*#__PURE__*/_react2.default.createElement(TopItemContainer, null, customizationProps.itemsType == 'radio' && /*#__PURE__*/_react2.default.createElement(_InputFields.RadioButton, {
278
+ ref: elRefs[0],
279
+ iconPointerEventsTransparent: true,
280
+ select: () => {},
281
+ size: size,
282
+ id: `${id}_topitem`,
283
+ label: selectedValues[0],
284
+ selected: true
285
+ }), customizationProps.itemsType == 'checkbox' && /*#__PURE__*/_react2.default.createElement(_InputFields.Checkbox, {
286
+ ref: elRefs[0],
287
+ select: selected => {
288
+ if (!customizationProps.multiSelect) return;
289
+ const newValues = selected ? visibleItems.map(x => x.value) : [];
290
+ setSelectedValues(newValues);
291
+ customizationProps.onValueUpdate && customizationProps.onValueUpdate(newValues);
292
+ },
293
+ iconPointerEventsTransparent: true,
294
+ semiSelected: customizationProps.multiSelect && !allSelected && selectedValues?.length > 0,
295
+ size: size,
296
+ id: `${id}_checkbox_selectall`,
297
+ label: customizationProps.multiSelect ? 'Select all' : selectedValues[0],
298
+ selected: !customizationProps.multiSelect || allSelected
299
+ }), customizationProps.itemsType == 'normal' && /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, suggestions.map(x => /*#__PURE__*/_react2.default.createElement(_CommonStyling.DropdownButton, {
300
+ ref: elRefs[0],
301
+ type: "button",
302
+ id: `${id}_topitem`,
303
+ onClick: e => {
304
+ customizationProps.onValueUpdate([x.value]);
305
+ setSelectedValues([x.value]);
306
+ setIsOpen(false);
307
+ setFocused(null);
308
+ }
309
+ }, /*#__PURE__*/_react2.default.createElement("div", {
310
+ className: "item-content"
311
+ }, x?.icon && /*#__PURE__*/_react2.default.createElement("div", {
312
+ className: "item-icon"
313
+ }, x?.icon), /*#__PURE__*/_react2.default.createElement("div", {
314
+ className: "item-label"
315
+ }, x?.displayLabel ?? x?.value, x?.noteLabel && /*#__PURE__*/_react2.default.createElement("div", {
316
+ style: {
317
+ fontSize: '12px'
318
+ }
319
+ }, x.noteLabel)))))));
320
+ };
321
+
322
+ const getElements = () => {
323
+ if (getFilteredItems().length === 0) {
324
+ return /*#__PURE__*/_react2.default.createElement(ItemsContainer, null, /*#__PURE__*/_react2.default.createElement(_CommonStyling.DropdownButton, {
325
+ disabled: true
326
+ }, /*#__PURE__*/_react2.default.createElement("span", null, messageOnNoResults)));
327
+ }
328
+
329
+ let number = 0;
330
+ return /*#__PURE__*/_react2.default.createElement(ItemsContainer, null, getFilteredItems().filter(x => x && (customizationProps.itemsType != 'normal' || !x.suggestion)).map(item => {
331
+ return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, customizationProps.itemsType == 'radio' && /*#__PURE__*/_react2.default.createElement(_InputFields.RadioButton, {
332
+ select: selected => {
333
+ if (!selected) return;
334
+ customizationProps.onValueUpdate && customizationProps.onValueUpdate([item.value]);
335
+ setSelectedValues([item.value]);
336
+ },
337
+ ref: elRefs[number + 1],
338
+ size: size,
339
+ iconPointerEventsTransparent: true,
340
+ disabled: item?.disabled,
341
+ key: `key_${id}_${number++}`,
342
+ id: `${id}_${number + 1}`,
343
+ label: item.value,
344
+ selected: selectedValues?.includes(item.value)
345
+ }), customizationProps.itemsType == 'checkbox' && /*#__PURE__*/_react2.default.createElement(_InputFields.Checkbox, {
346
+ select: selected => {
347
+ let newValue = [];
348
+
349
+ if (customizationProps.multiSelect) {
350
+ if (selected) newValue = [...selectedValues, item.value];else newValue = selectedValues.filter(x => x != item.value);
351
+ } else newValue = selected ? [item.value] : [];
352
+
353
+ setSelectedValues(newValue);
354
+ customizationProps.onValueUpdate(newValue);
355
+ },
356
+ iconPointerEventsTransparent: true,
357
+ disabled: item?.disabled,
358
+ ref: elRefs[number + 1],
359
+ size: size,
360
+ key: `key_${id}_${number++}`,
361
+ id: `${id}_${number + 1}`,
362
+ label: item.value,
363
+ selected: selectedValues?.includes(item.value)
364
+ }), (customizationProps.itemsType == 'normal' || !customizationProps.itemsType) && /*#__PURE__*/_react2.default.createElement(_CommonStyling.DropdownButton, {
365
+ type: "button",
366
+ size: size,
367
+ disabled: item?.disabled,
368
+ ref: elRefs[number + 1],
369
+ onClick: e => {
370
+ customizationProps.onValueUpdate([item.value]);
371
+ setSelectedValues([item.value]);
372
+ setIsOpen(false);
373
+ setFocused(null);
374
+ },
375
+ className: selectedValues?.includes(item.value) ? 'active' : '',
376
+ key: `key_${id}_${number++}`,
377
+ id: `${id}_${number + 1}`
378
+ }, /*#__PURE__*/_react2.default.createElement("div", {
379
+ className: "item-content"
380
+ }, item.icon && /*#__PURE__*/_react2.default.createElement("div", {
381
+ className: "item-icon"
382
+ }, item.icon), /*#__PURE__*/_react2.default.createElement("div", {
383
+ className: "item-label"
384
+ }, item.displayLabel ?? item.value, item.noteLabel && /*#__PURE__*/_react2.default.createElement("div", {
385
+ style: {
386
+ fontSize: '12px'
387
+ }
388
+ }, item.noteLabel)))));
389
+ }));
390
+ };
391
+
392
+ return /*#__PURE__*/_react2.default.createElement("div", null, /*#__PURE__*/_react2.default.createElement(DDContainer, {
393
+ ref: dropdownContentRef,
394
+ size: size,
395
+ isButton: isButton,
396
+ alignLeft: alignLeft,
397
+ scrollable: customizationProps.scrollable,
398
+ maxHeight: customizationProps.maxHeight,
399
+ className: [isOpen && 'show', isUp && 'up'].filter(e => !!e).join(' ')
400
+ }, /*#__PURE__*/_react2.default.createElement(ListContainer, {
401
+ size: size,
402
+ itemsType: customizationProps.itemsType,
403
+ onScroll: handleScroll,
404
+ ref: itemsListRef,
405
+ scrollable: customizationProps.scrollable
406
+ }, customizationProps.pinTopItem && getTopItem(), getElements()), customizationProps.action && customizationProps.actionLabel && /*#__PURE__*/_react2.default.createElement(ActionButtonContainer, null, /*#__PURE__*/_react2.default.createElement(_Button2.default, {
407
+ width: "100%",
408
+ variant: "primary",
409
+ size: size,
410
+ onClick: () => customizationProps.action()
411
+ }, customizationProps.actionLabel))));
412
+ /* ),
413
+ {
414
+ handleClickOutside: () => () => {
415
+ if (isOpen) {
416
+ setIsOpen(false);
417
+ setFocused(null);
418
+ }
419
+ },
420
+ },
421
+ );
422
+ return <Wrapped />; */
423
+ };
424
+
425
+ DropdownContent.propTypes = {
426
+ isButton: _propTypes2.default.bool.isRequired,
427
+ customizationProps: _propTypes2.default.shape({
428
+ itemsType: _propTypes2.default.oneOf(['radio', 'checkbox', 'normal']),
429
+ scrollable: _propTypes2.default.bool,
430
+ multiSelect: _propTypes2.default.bool,
431
+ maxHeight: _propTypes2.default.string,
432
+ actionLabel: _propTypes2.default.string,
433
+ action: _propTypes2.default.func.isRequired,
434
+ pinTopItem: _propTypes2.default.bool,
435
+ isButton: _propTypes2.default.bool.isRequired,
436
+ onValueUpdate: _propTypes2.default.func.isRequired,
437
+ items: _propTypes2.default.arrayOf(_propTypes2.default.shape({
438
+ value: _propTypes2.default.string.isRequired,
439
+ displayLabel: _propTypes2.default.string,
440
+ noteLabel: _propTypes2.default.string,
441
+ suggestion: _propTypes2.default.bool,
442
+ disabled: _propTypes2.default.bool,
443
+ icon: _propTypes2.default.node
444
+ })).isRequired
445
+ }).isRequired,
446
+ alignLeft: _propTypes2.default.bool,
447
+ isOpen: _propTypes2.default.bool.isRequired,
448
+ setIsOpen: _propTypes2.default.func.isRequired,
449
+ id: _propTypes2.default.string.isRequired,
450
+ filter: _propTypes2.default.string.isRequired,
451
+ hideOnClickOutside: _propTypes2.default.bool.isRequired,
452
+ selectedValues: _propTypes2.default.arrayOf(_propTypes2.default.string).isRequired,
453
+ setSelectedValues: _propTypes2.default.func.isRequired,
454
+ messageOnNoResults: _propTypes2.default.string.isRequired
455
+ };
456
+ exports.default = DropdownContent;
457
+ });
458
+ //# sourceMappingURL=DropdownContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/Dropdown/DropdownContent.tsx"],"names":["DDContainer","styled","div","COLORS","white","props","neutral_100","Size","ListContainer","neutral_300","neutral_500","ItemsContainer","TopItemContainer","neutral_200","ActionButtonContainer","MAX_MENU_HEIGHT","AVG_OPTION_HEIGHT","value","displayLabel","noteLabel","suggestion","disabled","icon","itemsType","scrollable","multiSelect","maxHeight","actionLabel","action","pinTopItem","isButton","onValueUpdate","items","customizationProps","alignLeft","isOpen","setIsOpen","id","filter","hideOnClickOutside","selectedValues","setSelectedValues","messageOnNoResults","DropdownContent","React","dropdownContentRef","itemsListRef","determineDropUp","options","node","windowHeight","window","menuHeight","Math","instOffsetWithMenu","setIsUp","setNewFocusedElement","index","newFocusedElement","elRefs","setFocused","handleKeyDown","e","focusedNow","document","handleClickOutside","x","scrollPosition","handleScroll","useLayoutEffect","getFilteredItems","filtrationString","getCorrectRef","ref","arrLength","setElRefs","Array","getTopItem","visibleItems","allSelected","y","showTopItem","suggestions","selected","newValues","fontSize","getElements","number","item","newValue","isUp"],"mappings":"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","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"}