@decisiv/ui-components 2.0.1-alpha.8 → 2.0.1-alpha.97

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 (297) hide show
  1. package/lib/atoms/BaseButton/index.d.ts.map +1 -1
  2. package/lib/atoms/BaseButton/index.js +1 -1
  3. package/lib/atoms/BooleanInput/index.d.ts.map +1 -1
  4. package/lib/atoms/BooleanInput/index.js +19 -2
  5. package/lib/atoms/BooleanInput/index.test.js +17 -6
  6. package/lib/atoms/BooleanInput/types.d.ts +2 -0
  7. package/lib/atoms/BooleanInput/types.d.ts.map +1 -1
  8. package/lib/atoms/BooleanInput/types.js +5 -1
  9. package/lib/atoms/Calendar/hooks/useCalendar/index.d.ts.map +1 -1
  10. package/lib/atoms/Calendar/hooks/useCalendar/index.js +2 -1
  11. package/lib/atoms/Calendar/hooks/useCalendar/index.test.js +5 -6
  12. package/lib/atoms/Calendar/index.d.ts.map +1 -1
  13. package/lib/atoms/Calendar/index.js +8 -1
  14. package/lib/atoms/Calendar/index.test.js +70 -40
  15. package/lib/atoms/Calendar/types.js +5 -1
  16. package/lib/atoms/InputField/Containers.d.ts +11 -6
  17. package/lib/atoms/InputField/Containers.d.ts.map +1 -1
  18. package/lib/atoms/InputField/Containers.js +6 -6
  19. package/lib/atoms/InputField/InputLabel.d.ts +1 -0
  20. package/lib/atoms/InputField/InputLabel.d.ts.map +1 -1
  21. package/lib/atoms/InputField/InputLabel.js +2 -1
  22. package/lib/atoms/InputField/index.d.ts +5 -0
  23. package/lib/atoms/InputField/index.d.ts.map +1 -1
  24. package/lib/atoms/InputField/index.js +21 -7
  25. package/lib/atoms/InputField/index.test.js +91 -0
  26. package/lib/atoms/InputField/schema.d.ts.map +1 -1
  27. package/lib/atoms/InputField/schema.js +1 -0
  28. package/lib/atoms/OptionsList/Category.d.ts +1 -1
  29. package/lib/atoms/OptionsList/Category.d.ts.map +1 -1
  30. package/lib/atoms/OptionsList/Category.js +4 -2
  31. package/lib/atoms/OptionsList/Footer.d.ts +8 -0
  32. package/lib/atoms/OptionsList/Footer.d.ts.map +1 -0
  33. package/lib/atoms/OptionsList/Footer.js +72 -0
  34. package/lib/atoms/OptionsList/Option.d.ts.map +1 -1
  35. package/lib/atoms/OptionsList/Option.js +8 -5
  36. package/lib/atoms/OptionsList/index.d.ts.map +1 -1
  37. package/lib/atoms/OptionsList/index.js +43 -16
  38. package/lib/atoms/OptionsList/index.test.js +107 -11
  39. package/lib/atoms/OptionsList/schema.d.ts.map +1 -1
  40. package/lib/atoms/OptionsList/schema.js +4 -0
  41. package/lib/atoms/OptionsList/types.d.ts +14 -0
  42. package/lib/atoms/OptionsList/types.d.ts.map +1 -1
  43. package/lib/atoms/OptionsList/types.js +5 -1
  44. package/lib/atoms/RequiredIcon.d.ts +9 -0
  45. package/lib/atoms/RequiredIcon.d.ts.map +1 -0
  46. package/lib/atoms/{InputField/RequiredIcon.js → RequiredIcon.js} +7 -3
  47. package/lib/components/Accordion/types.js +5 -1
  48. package/lib/components/Accordion/useAccordion/types.js +5 -1
  49. package/lib/components/Avatar/types.js +5 -1
  50. package/lib/components/Badge/constants.d.ts +2 -0
  51. package/lib/components/Badge/constants.d.ts.map +1 -0
  52. package/lib/components/Badge/constants.js +29 -0
  53. package/lib/components/Badge/index.d.ts.map +1 -1
  54. package/lib/components/Badge/index.js +12 -23
  55. package/lib/components/Badge/index.test.js +51 -8
  56. package/lib/components/Badge/schema.js +1 -1
  57. package/lib/components/Badge/types.d.ts +1 -1
  58. package/lib/components/Badge/types.d.ts.map +1 -1
  59. package/lib/components/Badge/types.js +7 -3
  60. package/lib/components/Breadcrumbs/types.js +5 -1
  61. package/lib/components/Button/schema.d.ts +6 -1
  62. package/lib/components/Button/schema.d.ts.map +1 -1
  63. package/lib/components/Button/schema.js +9 -4
  64. package/lib/components/Button/types.js +5 -1
  65. package/lib/components/Checkbox/index.d.ts.map +1 -1
  66. package/lib/components/Checkbox/index.js +3 -1
  67. package/lib/components/Checkbox/schema.d.ts.map +1 -1
  68. package/lib/components/Checkbox/schema.js +2 -0
  69. package/lib/components/Combobox/Target.d.ts.map +1 -1
  70. package/lib/components/Combobox/Target.js +45 -14
  71. package/lib/components/Combobox/index.d.ts.map +1 -1
  72. package/lib/components/Combobox/index.js +193 -65
  73. package/lib/components/Combobox/index.test.js +358 -135
  74. package/lib/components/Combobox/schema.d.ts.map +1 -1
  75. package/lib/components/Combobox/schema.js +9 -2
  76. package/lib/components/Combobox/types.d.ts +12 -3
  77. package/lib/components/Combobox/types.d.ts.map +1 -1
  78. package/lib/components/Combobox/types.js +5 -1
  79. package/lib/components/DropdownList/index.d.ts +4 -0
  80. package/lib/components/DropdownList/index.d.ts.map +1 -1
  81. package/lib/components/DropdownList/index.js +76 -11
  82. package/lib/components/DropdownList/propTypes.d.ts +4 -0
  83. package/lib/components/DropdownList/propTypes.d.ts.map +1 -0
  84. package/lib/components/DropdownList/propTypes.js +42 -0
  85. package/lib/components/DropdownList/schema.d.ts.map +1 -1
  86. package/lib/components/DropdownList/schema.js +5 -0
  87. package/lib/components/DropdownList/types.d.ts +4 -1
  88. package/lib/components/DropdownList/types.d.ts.map +1 -1
  89. package/lib/components/Filter/IconWrapper/index.d.ts +197 -0
  90. package/lib/components/Filter/IconWrapper/index.d.ts.map +1 -0
  91. package/lib/components/Filter/IconWrapper/index.js +35 -0
  92. package/lib/components/Filter/SimplePrimary/index.d.ts +31 -0
  93. package/lib/components/Filter/SimplePrimary/index.d.ts.map +1 -0
  94. package/lib/components/Filter/SimplePrimary/index.js +58 -0
  95. package/lib/components/Filter/SimplePrimary/index.test.js +34 -0
  96. package/lib/components/Filter/StyledFilter.d.ts +4 -0
  97. package/lib/components/Filter/StyledFilter.d.ts.map +1 -0
  98. package/lib/components/Filter/StyledFilter.js +39 -0
  99. package/lib/components/Filter/StyledLabel/index.d.ts +8 -0
  100. package/lib/components/Filter/StyledLabel/index.d.ts.map +1 -0
  101. package/lib/components/Filter/StyledLabel/index.js +30 -0
  102. package/lib/components/Filter/index.d.ts +27 -0
  103. package/lib/components/Filter/index.d.ts.map +1 -0
  104. package/lib/components/Filter/index.js +95 -0
  105. package/lib/components/Filter/index.test.js +41 -0
  106. package/lib/components/Filter/kind.d.ts +6 -0
  107. package/lib/components/Filter/kind.d.ts.map +1 -0
  108. package/lib/components/Filter/kind.js +45 -0
  109. package/lib/components/Filter/schema.d.ts +9 -0
  110. package/lib/components/Filter/schema.d.ts.map +1 -0
  111. package/lib/components/Filter/schema.js +32 -0
  112. package/lib/components/Filter/types.d.ts +17 -0
  113. package/lib/components/Filter/types.d.ts.map +1 -0
  114. package/lib/components/Filter/types.js +5 -0
  115. package/lib/components/JumpTo/JumpToMenu.d.ts +2 -2
  116. package/lib/components/JumpTo/JumpToMenu.d.ts.map +1 -1
  117. package/lib/components/JumpTo/JumpToMenu.js +3 -3
  118. package/lib/components/JumpTo/types.js +5 -1
  119. package/lib/components/LeftNav/Item/ClickArea.d.ts.map +1 -1
  120. package/lib/components/LeftNav/Item/ClickArea.js +2 -2
  121. package/lib/components/LeftNav/Item/ItemWrapper.d.ts.map +1 -1
  122. package/lib/components/LeftNav/Item/ItemWrapper.js +3 -3
  123. package/lib/components/LeftNav/Item/MenuItemWrapper.d.ts +7 -0
  124. package/lib/components/LeftNav/Item/MenuItemWrapper.d.ts.map +1 -0
  125. package/lib/components/LeftNav/Item/MenuItemWrapper.js +20 -0
  126. package/lib/components/LeftNav/Item/NavCollapsedXItem/index.d.ts.map +1 -1
  127. package/lib/components/LeftNav/Item/NavCollapsedXItem/index.js +7 -5
  128. package/lib/components/LeftNav/Item/NavExpandedItem/index.d.ts.map +1 -1
  129. package/lib/components/LeftNav/Item/NavExpandedItem/index.js +24 -13
  130. package/lib/components/LeftNav/Item/types.d.ts +1 -1
  131. package/lib/components/LeftNav/Item/types.d.ts.map +1 -1
  132. package/lib/components/LeftNav/Item/types.js +5 -1
  133. package/lib/components/LeftNav/index.test.js +13 -3
  134. package/lib/components/LeftNav/schema.d.ts.map +1 -1
  135. package/lib/components/LeftNav/schema.js +2 -0
  136. package/lib/components/LeftNav/types.d.ts +1 -0
  137. package/lib/components/LeftNav/types.d.ts.map +1 -1
  138. package/lib/components/LeftNav/types.js +5 -1
  139. package/lib/components/Link/index.d.ts +2 -2
  140. package/lib/components/Link/index.d.ts.map +1 -1
  141. package/lib/components/Link/index.js +1 -1
  142. package/lib/components/Link/index.test.js +8 -0
  143. package/lib/components/Link/schema.d.ts.map +1 -1
  144. package/lib/components/Link/schema.js +1 -1
  145. package/lib/components/Menu/index.d.ts.map +1 -1
  146. package/lib/components/Menu/index.js +3 -1
  147. package/lib/components/Menu/types.d.ts +2 -0
  148. package/lib/components/Menu/types.d.ts.map +1 -1
  149. package/lib/components/Menu/types.js +5 -1
  150. package/lib/components/Modal/components.d.ts +2 -2
  151. package/lib/components/Modal/index.d.ts.map +1 -1
  152. package/lib/components/Modal/index.js +5 -5
  153. package/lib/components/Modal/index.test.js +32 -0
  154. package/lib/components/Modal/schema.d.ts.map +1 -1
  155. package/lib/components/Modal/schema.js +2 -2
  156. package/lib/components/Modal/types.d.ts +2 -2
  157. package/lib/components/Modal/types.d.ts.map +1 -1
  158. package/lib/components/Modal/types.js +5 -1
  159. package/lib/components/Notifications/Notification/components.d.ts +3 -3
  160. package/lib/components/Notifications/Notification/components.d.ts.map +1 -1
  161. package/lib/components/Notifications/Notification/components.js +12 -6
  162. package/lib/components/Notifications/Notification/index.d.ts +3 -6
  163. package/lib/components/Notifications/Notification/index.d.ts.map +1 -1
  164. package/lib/components/Notifications/Notification/index.js +19 -12
  165. package/lib/components/Notifications/Notification/index.test.js +38 -19
  166. package/lib/components/Notifications/NotificationsPanel/index.d.ts +2 -1
  167. package/lib/components/Notifications/NotificationsPanel/index.d.ts.map +1 -1
  168. package/lib/components/Notifications/NotificationsPanel/index.js +44 -21
  169. package/lib/components/Notifications/NotificationsPanel/schema.js +1 -1
  170. package/lib/components/Notifications/Notifier.test.js +79 -10
  171. package/lib/components/Notifications/constants.d.ts +2 -0
  172. package/lib/components/Notifications/constants.d.ts.map +1 -0
  173. package/lib/components/Notifications/constants.js +16 -0
  174. package/lib/components/Notifications/schema.d.ts.map +1 -1
  175. package/lib/components/Notifications/schema.js +2 -1
  176. package/lib/components/Notifications/useNotifications.d.ts +1 -0
  177. package/lib/components/Notifications/useNotifications.d.ts.map +1 -1
  178. package/lib/components/Notifications/useNotifications.js +3 -3
  179. package/lib/components/Notifications/useNotifications.test.js +7 -4
  180. package/lib/components/Pagination/Pagination.d.ts +1 -1
  181. package/lib/components/Pagination/Pagination.d.ts.map +1 -1
  182. package/lib/components/Pagination/Pagination.js +1 -0
  183. package/lib/components/Pagination/Pagination.test.js +9 -0
  184. package/lib/components/Pagination/types.js +5 -1
  185. package/lib/components/Popover/utils.d.ts +1 -1
  186. package/lib/components/Select/Target.js +1 -1
  187. package/lib/components/Select/index.d.ts.map +1 -1
  188. package/lib/components/Select/index.js +37 -1
  189. package/lib/components/Select/index.test.js +82 -23
  190. package/lib/components/Select/schema.d.ts.map +1 -1
  191. package/lib/components/Select/schema.js +7 -0
  192. package/lib/components/Select/types.d.ts +4 -1
  193. package/lib/components/Select/types.d.ts.map +1 -1
  194. package/lib/components/Select/types.js +5 -1
  195. package/lib/components/SelectDate/Target.js +1 -1
  196. package/lib/components/SelectDate/index.d.ts.map +1 -1
  197. package/lib/components/SelectDate/index.js +28 -1
  198. package/lib/components/SelectDate/index.test.js +108 -51
  199. package/lib/components/SelectDate/schema.d.ts.map +1 -1
  200. package/lib/components/SelectDate/schema.js +2 -0
  201. package/lib/components/SelectDate/types.d.ts +2 -0
  202. package/lib/components/SelectDate/types.d.ts.map +1 -1
  203. package/lib/components/SelectDate/types.js +5 -1
  204. package/lib/components/SelectDateRange/index.d.ts.map +1 -1
  205. package/lib/components/SelectDateRange/index.js +28 -1
  206. package/lib/components/SelectDateRange/index.test.js +115 -58
  207. package/lib/components/SelectDateRange/schema.d.ts.map +1 -1
  208. package/lib/components/SelectDateRange/schema.js +2 -0
  209. package/lib/components/SelectDateRange/types.js +5 -1
  210. package/lib/components/SelectMenu/index.d.ts +5 -0
  211. package/lib/components/SelectMenu/index.d.ts.map +1 -1
  212. package/lib/components/SelectMenu/index.js +27 -3
  213. package/lib/components/SelectMenu/schema.d.ts.map +1 -1
  214. package/lib/components/SelectMenu/schema.js +4 -0
  215. package/lib/components/Table/Body.d.ts.map +1 -1
  216. package/lib/components/Table/Body.js +182 -38
  217. package/lib/components/Table/Container.d.ts.map +1 -1
  218. package/lib/components/Table/Container.js +2 -2
  219. package/lib/components/Table/DataRow.d.ts.map +1 -1
  220. package/lib/components/Table/DataRow.js +43 -16
  221. package/lib/components/Table/DraggableWrapper.d.ts +5 -0
  222. package/lib/components/Table/DraggableWrapper.d.ts.map +1 -0
  223. package/lib/components/Table/DraggableWrapper.js +38 -0
  224. package/lib/components/Table/Grip.d.ts +4 -0
  225. package/lib/components/Table/Grip.d.ts.map +1 -0
  226. package/lib/components/Table/Grip.js +30 -0
  227. package/lib/components/Table/Head.d.ts +1 -1
  228. package/lib/components/Table/Head.d.ts.map +1 -1
  229. package/lib/components/Table/Head.js +11 -5
  230. package/lib/components/Table/HeaderCell/index.d.ts.map +1 -1
  231. package/lib/components/Table/HeaderCell/index.js +22 -8
  232. package/lib/components/Table/HeaderCell/types.d.ts +6 -1
  233. package/lib/components/Table/HeaderCell/types.d.ts.map +1 -1
  234. package/lib/components/Table/HeaderCell/types.js +5 -1
  235. package/lib/components/Table/Provider.d.ts +13 -4
  236. package/lib/components/Table/Provider.d.ts.map +1 -1
  237. package/lib/components/Table/Provider.js +45 -5
  238. package/lib/components/Table/index.d.ts.map +1 -1
  239. package/lib/components/Table/index.js +112 -18
  240. package/lib/components/Table/index.test.js +330 -84
  241. package/lib/components/Table/schema.columns.d.ts.map +1 -1
  242. package/lib/components/Table/schema.columns.js +6 -4
  243. package/lib/components/Table/schema.d.ts.map +1 -1
  244. package/lib/components/Table/schema.js +8 -6
  245. package/lib/components/Table/types.d.ts +34 -4
  246. package/lib/components/Table/types.d.ts.map +1 -1
  247. package/lib/components/Table/utils.d.ts +2 -8
  248. package/lib/components/Table/utils.d.ts.map +1 -1
  249. package/lib/components/Table/utils.js +21 -20
  250. package/lib/components/Tabs/types.js +5 -1
  251. package/lib/components/Tag/types.d.ts +1 -1
  252. package/lib/components/Tag/types.d.ts.map +1 -1
  253. package/lib/components/Tag/types.js +5 -1
  254. package/lib/components/TextArea/TextArea.d.ts.map +1 -1
  255. package/lib/components/TextArea/TextArea.js +1 -1
  256. package/lib/components/TextArea/index.js +1 -0
  257. package/lib/components/TextArea/index.test.js +5 -0
  258. package/lib/components/TextField/Input.js +1 -1
  259. package/lib/components/TextField/index.test.js +5 -0
  260. package/lib/components/Toggle/index.d.ts.map +1 -1
  261. package/lib/components/Toggle/index.js +4 -0
  262. package/lib/components/Toggle/index.test.js +39 -10
  263. package/lib/components/Toggle/types.js +5 -1
  264. package/lib/components/TopNav/BrandInfo/index.d.ts +2 -1
  265. package/lib/components/TopNav/BrandInfo/index.d.ts.map +1 -1
  266. package/lib/components/TopNav/BrandInfo/index.js +9 -1
  267. package/lib/components/TopNav/BrandInfo/schema.d.ts.map +1 -1
  268. package/lib/components/TopNav/BrandInfo/schema.js +4 -1
  269. package/lib/components/TopNav/index.test.js +28 -0
  270. package/lib/components/index.d.ts +1 -0
  271. package/lib/components/index.d.ts.map +1 -1
  272. package/lib/components/index.js +9 -0
  273. package/lib/providers/ConfigProvider/index.d.ts.map +1 -1
  274. package/lib/providers/ConfigProvider/index.js +5 -1
  275. package/lib/providers/ConfigProvider/utils/context.d.ts +1 -1
  276. package/lib/providers/ConfigProvider/utils/context.d.ts.map +1 -1
  277. package/lib/providers/ConfigProvider/utils/normalizer.d.ts.map +1 -1
  278. package/lib/providers/ConfigProvider/utils/normalizer.js +1 -1
  279. package/lib/providers/ConfigProvider/utils/translations.d.ts +1 -1
  280. package/lib/providers/ConfigProvider/utils/translations.js +1 -1
  281. package/lib/providers/NotificationsProvider/index.d.ts +6 -5
  282. package/lib/providers/NotificationsProvider/index.d.ts.map +1 -1
  283. package/lib/providers/NotificationsProvider/index.js +47 -28
  284. package/lib/providers/NotificationsProvider/types.d.ts +4 -1
  285. package/lib/providers/NotificationsProvider/types.d.ts.map +1 -1
  286. package/lib/utils/joinClassnames.d.ts +3 -0
  287. package/lib/utils/joinClassnames.d.ts.map +1 -0
  288. package/lib/utils/joinClassnames.js +26 -0
  289. package/lib/utils/useFirstMount.d.ts +2 -0
  290. package/lib/utils/useFirstMount.d.ts.map +1 -0
  291. package/lib/utils/useFirstMount.js +19 -0
  292. package/lib/utils/useUpdateEffect.d.ts +4 -0
  293. package/lib/utils/useUpdateEffect.d.ts.map +1 -0
  294. package/lib/utils/useUpdateEffect.js +28 -0
  295. package/package.json +4 -2
  296. package/lib/atoms/InputField/RequiredIcon.d.ts +0 -4
  297. package/lib/atoms/InputField/RequiredIcon.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/index.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAO,sBAAsB,EAAc,MAAM,OAAO,CAAC;AAGvE,OAAqB,EACnB,KAAK,IAAI,UAAU,EACnB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,oBAAY,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAQ7C,QAAA,MAAM,eAAe,EAAE,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAEhE,CAAC;AAiBF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/index.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAO,sBAAsB,EAAc,MAAM,OAAO,CAAC;AAGvE,OAAqB,EACnB,KAAK,IAAI,UAAU,EACnB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAElC,oBAAY,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAQ7C,QAAA,MAAM,eAAe,EAAE,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAEhE,CAAC;AAmBF,eAAe,eAAe,CAAC"}
@@ -33,13 +33,15 @@ CheckboxWithRef.propTypes = {
33
33
  label: _propTypes.default.string,
34
34
  disabled: _propTypes.default.bool,
35
35
  readOnly: _propTypes.default.bool,
36
+ required: _propTypes.default.bool,
36
37
  size: _propTypes.default.oneOf(['normal', 'small']),
37
38
  status: _propTypes.default.oneOf(['normal', 'warning']),
38
39
  warningMessage: _propTypes.default.string
39
40
  };
40
41
  CheckboxWithRef.defaultProps = {
41
42
  size: 'normal',
42
- status: 'normal'
43
+ status: 'normal',
44
+ required: false
43
45
  };
44
46
  var _default = CheckboxWithRef;
45
47
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/schema.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,KAAwC,CAAC;AAgDrD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/schema.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,KAAwC,CAAC;AA4DrD,eAAe,MAAM,CAAC"}
@@ -18,6 +18,8 @@ schema.propTypes = {
18
18
  defaultChecked: _reactDesc.PropTypes.bool.description('Whether or not the checkbox is initially checked. Use if you do not want to manually control the state.').defaultValue('false'),
19
19
  disabled: _reactDesc.PropTypes.bool.description('If the checkbox should be disabled and ignore user interactions.').defaultValue('false'),
20
20
  readOnly: _reactDesc.PropTypes.bool.description('Ignore user interactions, but still display the label in a readable manner.').defaultValue('false'),
21
+ required: _reactDesc.PropTypes.bool.description('Whether or not the checkbox should be required. Renders an indicator if true.').defaultValue('false'),
22
+ requiredMessage: _reactDesc.PropTypes.string.description('The text to display in the tooltip when hovering over the required icon. It displays "Required" by default').defaultValue('Required'),
21
23
  size: _reactDesc.PropTypes.oneOf(['normal', 'small']).description('Controls the size of the checkbox and label.').defaultValue('normal'),
22
24
  status: _reactDesc.PropTypes.oneOf(['normal', 'warning']).description('Whether or not to render the warning state.').defaultValue('normal'),
23
25
  warningMessage: _reactDesc.PropTypes.string.description('The warning message to display below the checkbox. If provided, the `status` prop is automatically set to `warning`.')
@@ -1 +1 @@
1
- {"version":3,"file":"Target.d.ts","sourceRoot":"","sources":["../../../src/components/Combobox/Target.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAO,sBAAsB,EAAc,MAAM,OAAO,CAAC;AAgBvE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA0HtC,QAAA,MAAM,aAAa,EAAE,sBAAsB,CACzC,gBAAgB,EAChB,WAAW,CACS,CAAC;AAGvB,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"Target.d.ts","sourceRoot":"","sources":["../../../src/components/Combobox/Target.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAO,sBAAsB,EAAc,MAAM,OAAO,CAAC;AAkBvE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAiLtC,QAAA,MAAM,aAAa,EAAE,sBAAsB,CACzC,gBAAgB,EAChB,WAAW,CACS,CAAC;AAGvB,eAAe,aAAa,CAAC"}
@@ -31,6 +31,8 @@ var _Button = _interopRequireDefault(require("../Button"));
31
31
 
32
32
  var _Flex = _interopRequireDefault(require("../Flex"));
33
33
 
34
+ var _Tag = _interopRequireDefault(require("../Tag"));
35
+
34
36
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
35
37
 
36
38
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -44,21 +46,23 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
44
46
  var TargetContainer = _styledComponents.default.div.withConfig({
45
47
  displayName: "Target__TargetContainer",
46
48
  componentId: "sc-1obpsql-0"
47
- })(["align-items:center;display:flex;justify-content:space-between;position:relative;width:100%;"]);
49
+ })(["align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start;width:100%;padding-right:15px;", ""], (0, _styleModifiers.when)('hasExpandIndicator', (0, _styledComponents.css)(["padding-right:45px;"])));
48
50
 
49
51
  var Input = _styledComponents.default.input.withConfig({
50
52
  displayName: "Target__Input",
51
53
  componentId: "sc-1obpsql-1"
52
- })(["font-family:", ";font-size:", ";font-weight:", ";overflow:visible;&::-moz-focus-inner{border:0;padding:0;margin:0;}background-color:inherit;border:transparent;display:block;line-height:140%;padding:1px 10px 6px 1px;width:100%;&:active,&:focus{outline:none;}"], _designTokens.typography.typeface.default, (0, _rem.default)(_designTokens.typography.size.alias.default), _designTokens.typography.weight.alias.default);
54
+ })(["font-family:", ";font-size:", ";font-weight:", ";overflow:visible;&::-moz-focus-inner{border:0;padding:0;margin:0;}background-color:inherit;border:transparent;display:block;line-height:140%;padding:0 10px 5px 1px;flex-grow:100;&:active,&:focus{outline:none;}"], _designTokens.typography.typeface.default, (0, _rem.default)(_designTokens.typography.size.alias.default), _designTokens.typography.weight.alias.default);
53
55
 
56
+ var ClearButtonContainer = (0, _styledComponents.default)(_Flex.default).withConfig({
57
+ displayName: "Target__ClearButtonContainer",
58
+ componentId: "sc-1obpsql-2"
59
+ })(["position:absolute;bottom:0;right:0;padding-bottom:2px;padding-left:10px;padding-right:10px;", ""], (0, _styleModifiers.when)('hasExpandIndicator', (0, _styledComponents.css)(["right:20px;"])));
54
60
  var ExpandedIndicatorContainer = (0, _styledComponents.default)(_Flex.default).attrs({
55
- alignItems: 'center',
56
- paddingBottom: 0.2,
57
- paddingRight: 1
61
+ alignItems: 'center'
58
62
  }).withConfig({
59
63
  displayName: "Target__ExpandedIndicatorContainer",
60
- componentId: "sc-1obpsql-2"
61
- })(["color:", ";&:hover{color:", ";}", ";"], (0, _toColorString.default)(_color.default.interaction.pacificOcean), (0, _toColorString.default)(_color.default.interaction.indianOcean), (0, _styleModifiers.when)('disabled', (0, _styledComponents.css)(["color:", ";&:hover{color:", ";}"], (0, _toColorString.default)(_color.default.opacity.charcoal40), (0, _toColorString.default)(_color.default.opacity.charcoal40))));
64
+ componentId: "sc-1obpsql-3"
65
+ })(["position:absolute;bottom:2px;right:10px;color:", ";&:hover{color:", ";}", ";"], (0, _toColorString.default)(_color.default.interaction.pacificOcean), (0, _toColorString.default)(_color.default.interaction.indianOcean), (0, _styleModifiers.when)('disabled', (0, _styledComponents.css)(["color:", ";&:hover{color:", ";}"], (0, _toColorString.default)(_color.default.opacity.charcoal40), (0, _toColorString.default)(_color.default.opacity.charcoal40))));
62
66
 
63
67
  function Target(_ref, ref) {
64
68
  var clearButtonLabel = _ref.clearButtonLabel,
@@ -67,19 +71,46 @@ function Target(_ref, ref) {
67
71
  inputFieldLabel = _ref.inputFieldLabel,
68
72
  isPopoverVisible = _ref.isPopoverVisible,
69
73
  onClear = _ref.onClear,
74
+ multiple = _ref.multiple,
75
+ selectedValues = _ref.selectedValues,
76
+ removeSelected = _ref.removeSelected,
70
77
  readOnly = _ref.readOnly,
71
78
  variant = _ref.variant,
72
79
  toggleIsPopoverVisible = _ref.toggleIsPopoverVisible,
73
- rest = _objectWithoutProperties(_ref, ["clearButtonLabel", "disabled", "hasClearButton", "inputFieldLabel", "isPopoverVisible", "onClear", "readOnly", "variant", "toggleIsPopoverVisible"]);
80
+ autoComplete = _ref.autoComplete,
81
+ rest = _objectWithoutProperties(_ref, ["clearButtonLabel", "disabled", "hasClearButton", "inputFieldLabel", "isPopoverVisible", "onClear", "multiple", "selectedValues", "removeSelected", "readOnly", "variant", "toggleIsPopoverVisible", "autoComplete"]);
74
82
 
75
83
  var translate = (0, _useTranslations.default)();
76
- return _react.default.createElement(TargetContainer, null, _react.default.createElement(Input, _extends({}, rest, {
77
- autoComplete: "false",
84
+ var hasExpandIndicator = !readOnly && variant === 'sync';
85
+ return _react.default.createElement(TargetContainer, {
86
+ hasExpandIndicator: hasExpandIndicator
87
+ }, multiple && selectedValues && selectedValues.map(function (_ref2) {
88
+ var id = _ref2.id,
89
+ label = _ref2.label;
90
+ return _react.default.createElement(_Tag.default, {
91
+ key: id,
92
+ text: label,
93
+ style: {
94
+ margin: '2px'
95
+ },
96
+ action: function action(e) {
97
+ e.preventDefault();
98
+ e.stopPropagation();
99
+ removeSelected(id);
100
+ },
101
+ color: 'licoriceMousse',
102
+ actionIntent: "danger",
103
+ actionIcon: _Times.default,
104
+ actionAttributes: {
105
+ 'aria-label': 'Delete'
106
+ }
107
+ });
108
+ }), _react.default.createElement(Input, _extends({
109
+ autoComplete: autoComplete || 'off',
78
110
  disabled: disabled,
79
111
  ref: ref
80
- })), hasClearButton && !readOnly && _react.default.createElement(_Flex.default, {
81
- paddingBottom: 0.2,
82
- paddingX: 1
112
+ }, rest)), hasClearButton && !readOnly && _react.default.createElement(ClearButtonContainer, {
113
+ hasExpandIndicator: hasExpandIndicator
83
114
  }, _react.default.createElement(_Button.default, {
84
115
  "aria-label": translate(clearButtonLabel, 'combobox.clearButtonLabel', {
85
116
  label: inputFieldLabel
@@ -97,7 +128,7 @@ function Target(_ref, ref) {
97
128
  },
98
129
  size: "small",
99
130
  variant: "ghost"
100
- })), !readOnly && variant === 'sync' && _react.default.createElement(ExpandedIndicatorContainer, {
131
+ })), hasExpandIndicator && _react.default.createElement(ExpandedIndicatorContainer, {
101
132
  disabled: disabled
102
133
  }, _react.default.createElement(_Button.default, {
103
134
  variant: "ghost",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Combobox/index.tsx"],"names":[],"mappings":"AAMA,OAAc,EAGZ,sBAAsB,EAQvB,MAAM,OAAO,CAAC;AA0Bf,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAQ,MAAM,SAAS,CAAC;AA0ahE,QAAA,MAAM,eAAe,EAAE,sBAAsB,CAC3C,gBAAgB,EAChB,aAAa,CACS,CAAC;AAIzB,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Combobox/index.tsx"],"names":[],"mappings":"AASA,OAAc,EAGZ,sBAAsB,EAQvB,MAAM,OAAO,CAAC;AA2Bf,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAQ,MAAM,SAAS,CAAC;AAqiBhE,QAAA,MAAM,eAAe,EAAE,sBAAsB,CAC3C,gBAAgB,EAChB,aAAa,CACS,CAAC;AAOzB,eAAe,eAAe,CAAC"}
@@ -11,10 +11,18 @@ var _findIndex = _interopRequireDefault(require("lodash/findIndex"));
11
11
 
12
12
  var _get = _interopRequireDefault(require("lodash/get"));
13
13
 
14
+ var _union = _interopRequireDefault(require("lodash/union"));
15
+
16
+ var _isArray = _interopRequireDefault(require("lodash/isArray"));
17
+
14
18
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
15
19
 
20
+ var _last = _interopRequireDefault(require("lodash/last"));
21
+
16
22
  var _rem = _interopRequireDefault(require("polished/lib/helpers/rem"));
17
23
 
24
+ var _propTypes = _interopRequireDefault(require("prop-types"));
25
+
18
26
  var _react = _interopRequireWildcard(require("react"));
19
27
 
20
28
  var _breakpointObserver = require("@decisiv/breakpoint-observer");
@@ -25,6 +33,8 @@ var _Question = _interopRequireDefault(require("@decisiv/iconix/lib/components/Q
25
33
 
26
34
  var _composeReactRefs = _interopRequireDefault(require("@seznam/compose-react-refs"));
27
35
 
36
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
37
+
28
38
  var _InputField = _interopRequireDefault(require("../../atoms/InputField"));
29
39
 
30
40
  var _useClickOutside = _interopRequireDefault(require("../../utils/useClickOutside"));
@@ -49,12 +59,22 @@ var _schema = _interopRequireDefault(require("./schema"));
49
59
 
50
60
  var _utils = require("./utils");
51
61
 
62
+ var _usePrevious = _interopRequireDefault(require("../../utils/usePrevious"));
63
+
52
64
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
53
65
 
54
66
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
55
67
 
68
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { keys.push.apply(keys, Object.getOwnPropertySymbols(object)); } if (enumerableOnly) keys = keys.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); return keys; }
69
+
70
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
71
+
72
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
73
+
56
74
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
57
75
 
76
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
77
+
58
78
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
59
79
 
60
80
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
@@ -71,6 +91,14 @@ function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d =
71
91
 
72
92
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
73
93
 
94
+ var StyledInputDiv = _styledComponents.default.div.withConfig({
95
+ displayName: "Combobox__StyledInputDiv",
96
+ componentId: "zvfxxj-0"
97
+ })(["position:relative;width:100%;max-width:", ";"], function (_ref) {
98
+ var maxWidth = _ref.maxWidth;
99
+ return maxWidth;
100
+ });
101
+
74
102
  function Combobox(props, ref) {
75
103
  var clearButtonLabel = props.clearButtonLabel,
76
104
  defaultValue = props.defaultValue,
@@ -78,17 +106,22 @@ function Combobox(props, ref) {
78
106
  inputContainerRef = props.inputContainerRef,
79
107
  label = props.label,
80
108
  loading = props.loading,
109
+ _props$maxWidth = props.maxWidth,
110
+ maxWidth = _props$maxWidth === void 0 ? '100%' : _props$maxWidth,
111
+ multiple = props.multiple,
81
112
  name = props.name,
82
113
  onChangeValue = props.onChangeValue,
83
114
  onClick = props.onClick,
84
115
  onFocus = props.onFocus,
116
+ onHide = props.onHide,
85
117
  onKeyDown = props.onKeyDown,
118
+ onShow = props.onShow,
86
119
  _props$options = props.options,
87
120
  options = _props$options === void 0 ? [] : _props$options,
121
+ renderOptionLabel = props.renderOptionLabel,
88
122
  propValue = props.value,
89
123
  _props$variant = props.variant,
90
124
  variant = _props$variant === void 0 ? 'sync' : _props$variant,
91
- renderOptionLabel = props.renderOptionLabel,
92
125
  zIndex = props.zIndex;
93
126
 
94
127
  var _useCombobox = (0, _useCombobox2.default)(props),
@@ -123,24 +156,77 @@ function Combobox(props, ref) {
123
156
  var _useState5 = (0, _react.useState)(false),
124
157
  _useState6 = _slicedToArray(_useState5, 2),
125
158
  isPopoverVisible = _useState6[0],
126
- setIsPopoverVisible = _useState6[1];
159
+ setIsPopoverVisibleState = _useState6[1];
160
+
161
+ var previousIsPopoverVisible = (0, _usePrevious.default)(isPopoverVisible);
162
+ /**
163
+ * Combobox controls the Popover instead of relying on the Popover's internal state.
164
+ * The Popover's onShow/ onHide handlers only function when the Popover is _not_
165
+ * controlled. This effect watches for a toggled visibility state, and calls the appropriate
166
+ * event handler.
167
+ */
127
168
 
128
169
  (0, _react.useEffect)(function () {
129
- // Set the "default" active ID to the first, if it exists.
130
- if (!(0, _isEmpty.default)(options) && !activeId) {
131
- setActiveId((0, _get.default)(options, '0.id'));
170
+ if (previousIsPopoverVisible && !isPopoverVisible && onHide) {
171
+ onHide();
172
+ }
173
+
174
+ if (!previousIsPopoverVisible && isPopoverVisible && onShow) {
175
+ onShow();
176
+ }
177
+ }, [isPopoverVisible, previousIsPopoverVisible, onShow, onHide]);
178
+ /**
179
+ * Update the dropdown list visibility.
180
+ */
181
+
182
+ var updateIsPopoverVisible = (0, _react.useCallback)(function (arg) {
183
+ if (arg === true || arg === false) setIsPopoverVisibleState(arg);
184
+ if (arg === 'toggle') setIsPopoverVisibleState(function (old) {
185
+ return !old;
186
+ });
187
+ }, [setIsPopoverVisibleState]);
188
+ /**
189
+ * This generates a flat list of the options (including those in categories)
190
+ * in the order they are presented in the dropdown list. Filtering disabled elements.
191
+ */
192
+
193
+ var flatOptions = (0, _react.useMemo)(function () {
194
+ return options.reduce(function (acc, curr) {
195
+ if ((0, _utils.isCategory)(curr)) {
196
+ var items = (0, _isArray.default)(curr.items) ? curr.items.filter(function (option) {
197
+ return !option.disabled;
198
+ }) : [];
199
+ return acc.concat(items);
200
+ }
201
+
202
+ if (!curr.disabled) {
203
+ return acc.concat(curr);
204
+ }
205
+
206
+ return acc;
207
+ }, []);
208
+ }, [options]);
209
+ (0, _react.useEffect)(function () {
210
+ // Set the "default" active ID to the first in flatOptions, if it exists.
211
+ if (!(0, _isEmpty.default)(flatOptions) && !activeId) {
212
+ setActiveId((0, _get.default)(flatOptions, '0.id'));
132
213
  } // For async comboboxes, if the input is focused, the dropdown should be open.
133
214
 
134
215
 
135
- if (isFocused && variant === 'async') {
136
- setIsPopoverVisible(true);
216
+ if (isFocused && variant === 'async' || multiple && internalInputValue !== '') {
217
+ updateIsPopoverVisible(true);
137
218
  }
138
- }, [activeId, isFocused, options, variant]); // The selectedValue is the id of the selectedOption, or an empty string if none selected.
219
+ }, [activeId, isFocused, flatOptions, variant, multiple, internalInputValue, updateIsPopoverVisible]); // The selectedValue is the id of the selectedOption, or an empty string if none selected.
139
220
 
140
- var _useState7 = (0, _react.useState)(propValue || defaultValue || undefined),
221
+ var _useState7 = (0, _react.useState)(!Array.isArray(propValue) && propValue || !Array.isArray(defaultValue) && defaultValue || undefined),
141
222
  _useState8 = _slicedToArray(_useState7, 2),
142
223
  selectedValue = _useState8[0],
143
224
  setSelectedValue = _useState8[1];
225
+
226
+ var _useState9 = (0, _react.useState)(Array.isArray(propValue) && propValue || undefined),
227
+ _useState10 = _slicedToArray(_useState9, 2),
228
+ selectedValues = _useState10[0],
229
+ setSelectedValues = _useState10[1];
144
230
  /**
145
231
  * The current selected value and current input value are saved independently,
146
232
  * but must be kept in sync. Using a single callback for this keeps it simple(r).
@@ -149,13 +235,51 @@ function Combobox(props, ref) {
149
235
 
150
236
  var updateSelected = (0, _react.useCallback)(function (selectedId) {
151
237
  setSelectedValue(selectedId);
152
- var newSelected = (0, _utils.getOptionFromOptions)(options, selectedId) || {};
153
- setInternalInputValue((0, _get.default)(newSelected, 'label', ''));
238
+ var newSelected = (0, _utils.getOptionFromOptions)(options, selectedId) || null;
239
+
240
+ if (multiple) {
241
+ var index = selectedValues && selectedValues.findIndex(function (_ref2) {
242
+ var itemId = _ref2.id;
243
+ return itemId === selectedId;
244
+ });
245
+
246
+ if (newSelected && (index === undefined || index === -1)) {
247
+ setSelectedValues((0, _union.default)(selectedValues, [newSelected]));
248
+ }
249
+
250
+ setInternalInputValue('');
251
+ setActiveId(undefined);
252
+ } else {
253
+ setInternalInputValue((0, _get.default)(newSelected, 'label', ''));
254
+ }
255
+
256
+ if (onChangeValue) {
257
+ if (selectedId) {
258
+ onChangeValue(selectedId, {
259
+ removed: false
260
+ });
261
+ } else {
262
+ onChangeValue(null, {
263
+ removed: true
264
+ });
265
+ }
266
+ }
267
+ }, [multiple, onChangeValue, options, selectedValues, setInternalInputValue, setSelectedValue, setSelectedValues, setActiveId]);
268
+ var removeSelected = (0, _react.useCallback)(function (selectedId) {
269
+ var newSelectedValues = selectedValues && selectedValues.filter(function (_ref3) {
270
+ var optionId = _ref3.id;
271
+ return selectedId !== optionId;
272
+ });
273
+ setSelectedValues(newSelectedValues);
154
274
 
155
275
  if (onChangeValue) {
156
- onChangeValue(selectedId);
276
+ onChangeValue(selectedId, {
277
+ removed: true
278
+ });
157
279
  }
158
- }, [onChangeValue, options, setInternalInputValue, setSelectedValue]);
280
+
281
+ return undefined;
282
+ }, [onChangeValue, selectedValues, setSelectedValues]);
159
283
  /**
160
284
  * If the value prop changes, it should always override any locally maintained current values.
161
285
  * This allows the component to be controlled.
@@ -166,15 +290,10 @@ function Combobox(props, ref) {
166
290
  setSelectedValue(propValue);
167
291
  var newSelected = (0, _utils.getOptionFromOptions)(options, propValue) || {};
168
292
  setInternalInputValue((0, _get.default)(newSelected, 'label', ''));
293
+ } else if (_typeof(propValue) === 'object' && propValue !== selectedValues) {
294
+ setSelectedValues(propValue);
169
295
  }
170
- }, [options, propValue, selectedValue, setInternalInputValue, updateSelected]);
171
- /**
172
- * Toggle the dropdown list.
173
- */
174
-
175
- var toggleIsPopoverVisible = (0, _react.useCallback)(function () {
176
- setIsPopoverVisible(!isPopoverVisible);
177
- }, [isPopoverVisible]);
296
+ }, [options, propValue, selectedValue, selectedValues, setInternalInputValue, updateSelected]);
178
297
  /**
179
298
  * This handler is called when the "active" item is changed in the DropdownList. That could be
180
299
  * when the user hovers over a new item with the mouse, or when the user navigates through
@@ -190,8 +309,13 @@ function Combobox(props, ref) {
190
309
  */
191
310
 
192
311
  var handleChangeDropdownListValue = (0, _react.useCallback)(function (selectedIds) {
312
+ if (multiple) {
313
+ updateSelected((0, _last.default)(selectedIds));
314
+ return;
315
+ }
316
+
193
317
  updateSelected(selectedIds[0]);
194
- }, [updateSelected]);
318
+ }, [updateSelected, multiple]);
195
319
  /**
196
320
  * Clicking anywhere within the Combobox component (except the clear button) should open
197
321
  * the dropdown list. There is some complex logic here because of the <input> rendered inside
@@ -211,7 +335,7 @@ function Combobox(props, ref) {
211
335
  * tree. Clicking an item in the list will call this click handler on the container.
212
336
  * Usually that's fine. In this case, we don't want that behavior.
213
337
  */
214
- setIsPopoverVisible(false);
338
+ updateIsPopoverVisible(false);
215
339
  } else if (isFocused) {
216
340
  if (variant === 'sync' && finalComboboxRef && // @ts-ignore
217
341
  finalComboboxRef.current === event.target) {
@@ -227,16 +351,16 @@ function Combobox(props, ref) {
227
351
  * This re-opens the popover if you first open it,
228
352
  * then make a selection, then click the <input> again.
229
353
  */
230
- setIsPopoverVisible(true);
354
+ updateIsPopoverVisible(true);
231
355
  }
232
356
  } else {
233
- toggleIsPopoverVisible();
357
+ updateIsPopoverVisible('toggle');
234
358
  }
235
359
  }
236
360
 
237
361
  onClick && onClick(event);
238
362
  }, // eslint-disable-next-line react-hooks/exhaustive-deps
239
- [isFocused, isPopoverVisible, variant, onClick, toggleIsPopoverVisible]);
363
+ [isFocused, isPopoverVisible, variant, onClick, updateIsPopoverVisible]);
240
364
  /**
241
365
  * This focus handler is responsible for opening the dropdown list and tracking focus state.
242
366
  * It's important to do this in the focus handler because the dropdown should open when the
@@ -245,26 +369,12 @@ function Combobox(props, ref) {
245
369
 
246
370
  var handleContainerFocus = (0, _react.useCallback)(function (event) {
247
371
  if (variant === 'sync') {
248
- setIsPopoverVisible(true);
372
+ updateIsPopoverVisible(true);
249
373
  }
250
374
 
251
375
  setIsFocused(true);
252
376
  onFocus && onFocus(event);
253
- }, [onFocus, setIsPopoverVisible, variant]);
254
- /**
255
- * This generates a flat list of the options (including those in categories)
256
- * in the order they are presented in the dropdown list.
257
- */
258
-
259
- var flatOptions = (0, _react.useMemo)(function () {
260
- return options.reduce(function (acc, curr) {
261
- if ((0, _utils.isCategory)(curr)) {
262
- return acc.concat(curr.items);
263
- }
264
-
265
- return acc.concat(curr);
266
- }, []);
267
- }, [options]);
377
+ }, [onFocus, updateIsPopoverVisible, variant]);
268
378
  /**
269
379
  * Pressing certain keys when focused on the Combobox component should trigger some actions.
270
380
  */
@@ -276,10 +386,10 @@ function Combobox(props, ref) {
276
386
  event.preventDefault();
277
387
 
278
388
  if (!isPopoverVisible) {
279
- setIsPopoverVisible(true);
389
+ updateIsPopoverVisible(true);
280
390
  } else {
281
- var currentIndex = (0, _findIndex.default)(flatOptions, function (_ref) {
282
- var optionId = _ref.id;
391
+ var currentIndex = (0, _findIndex.default)(flatOptions, function (_ref4) {
392
+ var optionId = _ref4.id;
283
393
  return optionId === activeId;
284
394
  });
285
395
 
@@ -300,28 +410,28 @@ function Combobox(props, ref) {
300
410
  }
301
411
 
302
412
  if (event.key === 'Enter' && isPopoverVisible) {
303
- setIsPopoverVisible(false);
304
413
  updateSelected(activeId || '');
414
+ updateIsPopoverVisible(false);
305
415
  }
306
416
 
307
417
  if (event.key === 'Escape') {
308
- setIsPopoverVisible(false);
418
+ updateIsPopoverVisible(false);
309
419
  }
310
420
 
311
421
  if (event.key === 'Tab' && isPopoverVisible) {
312
- setIsPopoverVisible(false);
422
+ updateIsPopoverVisible(false);
313
423
  }
314
424
 
315
425
  if (onKeyDown) {
316
426
  onKeyDown(event);
317
427
  }
318
- }, [activeId, flatOptions, isPopoverVisible, onKeyDown, setActiveId, updateSelected]); // When the dropdown is visible, clicking anywhere outside of the dropdown should close it.
428
+ }, [activeId, flatOptions, isPopoverVisible, onKeyDown, updateIsPopoverVisible, updateSelected]); // When the dropdown is visible, clicking anywhere outside of the dropdown should close it.
319
429
 
320
430
  var handleClickOutsideList = (0, _react.useCallback)(function (event) {
321
431
  if (isPopoverVisible) {
322
- setIsPopoverVisible(false);
432
+ updateIsPopoverVisible(false);
323
433
  }
324
- }, [isPopoverVisible]);
434
+ }, [isPopoverVisible, updateIsPopoverVisible]);
325
435
  (0, _useClickOutside.default)([finalComboboxRef, listRef], handleClickOutsideList);
326
436
  /**
327
437
  * The DropdownList accepts a prop called `PanelComponent` that can be used
@@ -368,7 +478,12 @@ function Combobox(props, ref) {
368
478
 
369
479
  return undefined;
370
480
  }, [internalInputValue, loading, options, translate]);
371
- return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_InputField.default, _extends({}, getInputFieldProps(), {
481
+ var selectedValuesIds = selectedValues ? selectedValues.map(function (elem) {
482
+ return elem.id || '';
483
+ }) : undefined;
484
+ return _react.default.createElement(StyledInputDiv, {
485
+ maxWidth: maxWidth
486
+ }, _react.default.createElement(_InputField.default, _extends({}, getInputFieldProps(), {
372
487
  id: inputId,
373
488
  inputContainerRef: finalInputContainerRef,
374
489
  onBlur: function onBlur() {
@@ -378,16 +493,18 @@ function Combobox(props, ref) {
378
493
  onClick: handleContainerClick,
379
494
  onKeyDown: handleContainerKeyDown,
380
495
  ref: finalComboboxRef
381
- }), function (_ref2) {
382
- var ariaLabelledBy = _ref2['aria-labelledby'],
383
- disabled = _ref2.disabled,
384
- targetId = _ref2.id,
385
- onBlurTarget = _ref2.onBlur,
386
- onChangeTargetValue = _ref2.onChange,
387
- onFocusTarget = _ref2.onFocus,
388
- readOnly = _ref2.readOnly,
389
- targetRef = _ref2.ref,
390
- value = _ref2.value;
496
+ }), function (_ref5) {
497
+ var ariaLabelledBy = _ref5['aria-labelledby'],
498
+ disabled = _ref5.disabled,
499
+ targetId = _ref5.id,
500
+ onBlurTarget = _ref5.onBlur,
501
+ onChangeTargetValue = _ref5.onChange,
502
+ onFocusTarget = _ref5.onFocus,
503
+ readOnly = _ref5.readOnly,
504
+ targetRef = _ref5.ref,
505
+ value = _ref5.value,
506
+ autoComplete = _ref5.autoComplete,
507
+ type = _ref5.type;
391
508
  var dropdownListId = "".concat(targetId, "-dropdown-list");
392
509
  return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_Target.default, {
393
510
  "aria-haspopup": "listbox",
@@ -400,6 +517,9 @@ function Combobox(props, ref) {
400
517
  inputFieldLabel: label,
401
518
  isPopoverVisible: isPopoverVisible,
402
519
  name: name,
520
+ multiple: multiple,
521
+ selectedValues: selectedValues,
522
+ removeSelected: removeSelected,
403
523
  onBlur: onBlurTarget,
404
524
  onClear: function onClear() {
405
525
  onChangeTargetValue();
@@ -411,7 +531,11 @@ function Combobox(props, ref) {
411
531
  ref: targetRef,
412
532
  value: value,
413
533
  variant: variant,
414
- toggleIsPopoverVisible: toggleIsPopoverVisible
534
+ toggleIsPopoverVisible: function toggleIsPopoverVisible() {
535
+ return updateIsPopoverVisible('toggle');
536
+ },
537
+ autoComplete: autoComplete,
538
+ type: type
415
539
  }), _react.default.createElement(_DropdownList.default, {
416
540
  PanelComponent: getPanelComponent(),
417
541
  activeId: activeId,
@@ -424,10 +548,12 @@ function Combobox(props, ref) {
424
548
  listRef: listRef,
425
549
  minWidth: "".concat((dimensions.width || 0) + 1, "px"),
426
550
  name: "".concat(name, "_dropdown-list"),
551
+ multiple: multiple,
427
552
  onChange: handleChangeDropdownListValue,
428
553
  onChangeActiveItem: handleChangeDropdownListActiveItem,
429
- selectedIds: selectedValue || '',
554
+ selectedIds: !multiple ? selectedValue || '' : selectedValuesIds,
430
555
  showArrow: false,
556
+ showCheckbox: !multiple,
431
557
  target: popoverTargetRef,
432
558
  visible: Boolean(isPopoverVisible || loading),
433
559
  renderOptionLabel: renderOptionLabel,
@@ -437,6 +563,8 @@ function Combobox(props, ref) {
437
563
  }
438
564
 
439
565
  var ComboboxWithRef = (0, _react.forwardRef)(Combobox);
440
- ComboboxWithRef.propTypes = _schema.default.propTypes;
566
+ ComboboxWithRef.propTypes = _objectSpread({}, _schema.default.propTypes, {
567
+ icon: _propTypes.default.elementType
568
+ });
441
569
  var _default = ComboboxWithRef;
442
570
  exports.default = _default;