@onewelcome/react-lib-components 6.5.0 → 6.7.0

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 (347) hide show
  1. package/dist/cjs/DataGrid/DataGrid.module.cjs.js +1 -1
  2. package/dist/cjs/DataGrid/DataGridBody/DataGridCell.cjs.js +1 -1
  3. package/dist/cjs/DataGrid/DataGridBody/DataGridCell.cjs.js.map +1 -1
  4. package/dist/cjs/DataGrid/DataGridBody/DataGridCell.module.cjs.js +1 -1
  5. package/dist/cjs/DataGrid/DataGridBody/DataGridRow.module.cjs.js +1 -1
  6. package/dist/cjs/DataGrid/DataGridHeader/DataGridHeader.cjs.js +1 -1
  7. package/dist/cjs/DataGrid/DataGridHeader/DataGridHeader.cjs.js.map +1 -1
  8. package/dist/cjs/DataGrid/DataGridHeader/DataGridHeader.module.cjs.js +1 -1
  9. package/dist/cjs/DataGrid/DataGridHeader/DataGridHeaderCell.module.cjs.js +1 -1
  10. package/dist/cjs/Form/FileUpload/FileItem/FileItem.cjs.js +1 -1
  11. package/dist/cjs/Form/FileUpload/FileItem/FileItem.cjs.js.map +1 -1
  12. package/dist/cjs/Form/FileUpload/FileItem/FileItem.module.cjs.js +1 -1
  13. package/dist/cjs/Form/FileUpload/FileUpload.cjs.js +1 -1
  14. package/dist/cjs/Form/FileUpload/FileUpload.cjs.js.map +1 -1
  15. package/dist/cjs/Form/FileUpload/FileUpload.module.cjs.js +1 -1
  16. package/dist/cjs/Form/Select/MultiSelect/MultiOption.cjs.js +1 -1
  17. package/dist/cjs/Form/Select/MultiSelect/MultiOption.cjs.js.map +1 -1
  18. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +1 -1
  19. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -1
  20. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.cjs.js +1 -1
  21. package/dist/cjs/Form/Select/MultiSelect/SelectButton.cjs.js +1 -1
  22. package/dist/cjs/Form/Select/MultiSelect/SelectButton.cjs.js.map +1 -1
  23. package/dist/cjs/Form/Select/MultiSelect/SelectButton.module.cjs.js +1 -1
  24. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.cjs.js +1 -1
  25. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.cjs.js.map +1 -1
  26. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js +2 -0
  27. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js.map +1 -0
  28. package/dist/cjs/Form/Select/MultiSelect/useSearch.cjs.js +2 -0
  29. package/dist/cjs/Form/Select/MultiSelect/useSearch.cjs.js.map +1 -0
  30. package/dist/cjs/Form/Select/SingleSelect/Option.cjs.js +1 -1
  31. package/dist/cjs/Form/Select/SingleSelect/Option.cjs.js.map +1 -1
  32. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +1 -1
  33. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -1
  34. package/dist/cjs/Form/Select/SingleSelect/Select.module.cjs.js +1 -1
  35. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js +2 -0
  36. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js.map +1 -0
  37. package/dist/cjs/Form/Select/SingleSelect/useSearch.cjs.js +2 -0
  38. package/dist/cjs/Form/Select/SingleSelect/useSearch.cjs.js.map +1 -0
  39. package/dist/cjs/Form/Select/useAddNewBtn.cjs.js +1 -1
  40. package/dist/cjs/Form/Select/useAddNewBtn.cjs.js.map +1 -1
  41. package/dist/cjs/Form/Select/useAddNewBtn.module.cjs.js +1 -1
  42. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js +2 -0
  43. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js.map +1 -0
  44. package/dist/cjs/Icon/Icon.cjs.js +1 -1
  45. package/dist/cjs/Icon/Icon.cjs.js.map +1 -1
  46. package/dist/cjs/Icon/Icon.module.cjs.js +1 -1
  47. package/dist/cjs/Layout/ContentHeader/ContentHeader.cjs.js +2 -0
  48. package/dist/cjs/Layout/ContentHeader/ContentHeader.cjs.js.map +1 -0
  49. package/dist/cjs/Layout/ContentHeader/ContentHeader.module.cjs.js +2 -0
  50. package/dist/cjs/Layout/ContentHeader/ContentHeader.module.cjs.js.map +1 -0
  51. package/dist/cjs/Layout/FormPage/FormWithStepper/FormSection/FormSection.cjs.js +2 -0
  52. package/dist/cjs/Layout/FormPage/FormWithStepper/FormSection/FormSection.cjs.js.map +1 -0
  53. package/dist/cjs/Layout/FormPage/FormWithStepper/FormSection/FormSection.module.cjs.js +2 -0
  54. package/dist/cjs/Layout/FormPage/FormWithStepper/FormSection/FormSection.module.cjs.js.map +1 -0
  55. package/dist/cjs/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.cjs.js +2 -0
  56. package/dist/cjs/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.cjs.js.map +1 -0
  57. package/dist/cjs/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.module.cjs.js +2 -0
  58. package/dist/cjs/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.module.cjs.js.map +1 -0
  59. package/dist/cjs/Layout/FormPage/FormWithStepper/FormWithStepper.cjs.js +2 -0
  60. package/dist/cjs/Layout/FormPage/FormWithStepper/FormWithStepper.cjs.js.map +1 -0
  61. package/dist/cjs/Layout/FormPage/FormWithStepper/FormWithStepper.module.cjs.js +2 -0
  62. package/dist/cjs/Layout/FormPage/FormWithStepper/FormWithStepper.module.cjs.js.map +1 -0
  63. package/dist/cjs/Notifications/Alert/AlertContainer/AlertContainer.cjs.js +2 -0
  64. package/dist/cjs/Notifications/Alert/AlertContainer/AlertContainer.cjs.js.map +1 -0
  65. package/dist/cjs/Notifications/Alert/AlertContainer/AlertContainer.module.cjs.js +2 -0
  66. package/dist/cjs/Notifications/Alert/AlertContainer/AlertContainer.module.cjs.js.map +1 -0
  67. package/dist/cjs/Notifications/Alert/AlertContainer/useAlertContainerHeightAnimation.cjs.js +2 -0
  68. package/dist/cjs/Notifications/Alert/AlertContainer/useAlertContainerHeightAnimation.cjs.js.map +1 -0
  69. package/dist/cjs/Notifications/Alert/AlertItem/AlertItem.cjs.js +2 -0
  70. package/dist/cjs/Notifications/Alert/AlertItem/AlertItem.cjs.js.map +1 -0
  71. package/dist/cjs/Notifications/Alert/AlertItem/AlertItem.module.cjs.js +2 -0
  72. package/dist/cjs/Notifications/Alert/AlertItem/AlertItem.module.cjs.js.map +1 -0
  73. package/dist/cjs/Notifications/Alert/AlertProvider/AlertContext.cjs.js +2 -0
  74. package/dist/cjs/Notifications/Alert/AlertProvider/AlertContext.cjs.js.map +1 -0
  75. package/dist/cjs/Notifications/Alert/AlertProvider/AlertProvider.cjs.js +2 -0
  76. package/dist/cjs/Notifications/Alert/AlertProvider/AlertProvider.cjs.js.map +1 -0
  77. package/dist/cjs/Notifications/Alert/useAlert.cjs.js +2 -0
  78. package/dist/cjs/Notifications/Alert/useAlert.cjs.js.map +1 -0
  79. package/dist/cjs/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.cjs.js.map +1 -1
  80. package/dist/cjs/Notifications/Snackbar/SnackbarItem/SnackbarItem.cjs.js.map +1 -1
  81. package/dist/cjs/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.cjs.js.map +1 -1
  82. package/dist/cjs/Notifications/Snackbar/SnackbarProvider/SnackbarStateProvider.cjs.js.map +1 -1
  83. package/dist/cjs/Notifications/Snackbar/interfaces.cjs.js.map +1 -1
  84. package/dist/cjs/Notifications/Snackbar/useSnackbar.cjs.js.map +1 -1
  85. package/dist/cjs/Pagination/Pagination.cjs.js +1 -1
  86. package/dist/cjs/Pagination/Pagination.cjs.js.map +1 -1
  87. package/dist/cjs/Pagination/Pagination.module.cjs.js +1 -1
  88. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js +1 -1
  89. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js.map +1 -1
  90. package/dist/cjs/src/components/Form/FileUpload/FileItem/FileItem.d.ts +10 -0
  91. package/dist/cjs/src/components/Form/FileUpload/FileUpload.d.ts +3 -0
  92. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelect.test.d.ts +63 -1
  93. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelectKeyboardNavigation.test.d.ts +1 -0
  94. package/dist/cjs/src/components/Form/Select/MultiSelect/SelectedOptions.d.ts +2 -1
  95. package/dist/cjs/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +16 -0
  96. package/dist/cjs/src/components/Form/Select/MultiSelect/useSearch.d.ts +34 -0
  97. package/dist/cjs/src/components/Form/Select/Select.interfaces.d.ts +1 -0
  98. package/dist/cjs/src/components/Form/Select/SingleSelect/Option.d.ts +1 -0
  99. package/dist/cjs/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +5 -0
  100. package/dist/cjs/src/components/Form/Select/{useSearch.d.ts → SingleSelect/useSearch.d.ts} +2 -1
  101. package/dist/cjs/src/components/Form/Select/useAddNewBtn.d.ts +10 -3
  102. package/dist/cjs/src/components/Form/Select/useSelectPositionList.d.ts +12 -0
  103. package/dist/cjs/src/components/Icon/Icon.d.ts +5 -1
  104. package/dist/cjs/src/components/Layout/ContentHeader/ContentHeader.d.ts +10 -0
  105. package/dist/cjs/src/components/Layout/ContentHeader/ContentHeader.test.d.ts +1 -0
  106. package/dist/cjs/src/components/Layout/FormPage/FormWithStepper/FormSection/FormSection.d.ts +7 -0
  107. package/dist/cjs/src/components/Layout/FormPage/FormWithStepper/FormSection/FormSection.test.d.ts +1 -0
  108. package/dist/cjs/src/components/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.d.ts +10 -0
  109. package/dist/cjs/src/components/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.test.d.ts +1 -0
  110. package/dist/cjs/src/components/Layout/FormPage/FormWithStepper/FormWithStepper.d.ts +6 -0
  111. package/dist/cjs/src/components/Layout/FormPage/FormWithStepper/FormWithStepper.test.d.ts +1 -0
  112. package/dist/cjs/src/components/Notifications/Alert/AlertContainer/AlertContainer.d.ts +12 -0
  113. package/dist/cjs/src/components/Notifications/Alert/AlertContainer/AlertContainer.test.d.ts +1 -0
  114. package/dist/cjs/src/components/Notifications/Alert/AlertContainer/useAlertContainerHeightAnimation.d.ts +4 -0
  115. package/dist/cjs/src/components/Notifications/Alert/AlertItem/AlertItem.d.ts +22 -0
  116. package/dist/cjs/src/components/Notifications/Alert/AlertItem/AlertItem.test.d.ts +1 -0
  117. package/dist/cjs/src/components/Notifications/Alert/AlertProvider/AlertContext.d.ts +13 -0
  118. package/dist/cjs/src/components/Notifications/Alert/AlertProvider/AlertProvider.d.ts +22 -0
  119. package/dist/cjs/src/components/Notifications/Alert/AlertProvider/AlertProvider.test.d.ts +1 -0
  120. package/dist/cjs/src/components/Notifications/Alert/useAlert.d.ts +7 -0
  121. package/dist/cjs/src/components/Notifications/Alert/useAlert.test.d.ts +1 -0
  122. package/dist/cjs/src/components/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.d.ts +9 -0
  123. package/dist/cjs/src/components/Notifications/Snackbar/SnackbarItem/SnackbarItem.d.ts +6 -0
  124. package/dist/cjs/src/components/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.d.ts +9 -0
  125. package/dist/cjs/src/components/Notifications/Snackbar/SnackbarProvider/SnackbarStateProvider.d.ts +9 -0
  126. package/dist/cjs/src/components/Notifications/Snackbar/interfaces.d.ts +18 -0
  127. package/dist/cjs/src/components/Notifications/Snackbar/useSnackbar.d.ts +3 -0
  128. package/dist/cjs/src/components/_BaseStyling_/BaseStyling.d.ts +40 -0
  129. package/dist/cjs/src/components/admin/layout/MicrofrontendContainer/MicrofrontendContainer.d.ts +8 -0
  130. package/dist/cjs/src/index.cjs.js +1 -1
  131. package/dist/cjs/src/index.d.ts +15 -0
  132. package/dist/cjs/src/util/helper.cjs.js +1 -1
  133. package/dist/cjs/src/util/helper.cjs.js.map +1 -1
  134. package/dist/cjs/src/util/helper.d.ts +1 -0
  135. package/dist/esm/DataGrid/DataGrid.module.esm.js +1 -1
  136. package/dist/esm/DataGrid/DataGridBody/DataGridCell.esm.js +1 -1
  137. package/dist/esm/DataGrid/DataGridBody/DataGridCell.esm.js.map +1 -1
  138. package/dist/esm/DataGrid/DataGridBody/DataGridCell.module.esm.js +1 -1
  139. package/dist/esm/DataGrid/DataGridBody/DataGridRow.module.esm.js +1 -1
  140. package/dist/esm/DataGrid/DataGridHeader/DataGridHeader.esm.js +1 -1
  141. package/dist/esm/DataGrid/DataGridHeader/DataGridHeader.esm.js.map +1 -1
  142. package/dist/esm/DataGrid/DataGridHeader/DataGridHeader.module.esm.js +1 -1
  143. package/dist/esm/DataGrid/DataGridHeader/DataGridHeaderCell.module.esm.js +1 -1
  144. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js +1 -1
  145. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js.map +1 -1
  146. package/dist/esm/Form/FileUpload/FileItem/FileItem.module.esm.js +1 -1
  147. package/dist/esm/Form/FileUpload/FileUpload.esm.js +1 -1
  148. package/dist/esm/Form/FileUpload/FileUpload.esm.js.map +1 -1
  149. package/dist/esm/Form/FileUpload/FileUpload.module.esm.js +1 -1
  150. package/dist/esm/Form/Select/MultiSelect/MultiOption.esm.js +1 -1
  151. package/dist/esm/Form/Select/MultiSelect/MultiOption.esm.js.map +1 -1
  152. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +1 -1
  153. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -1
  154. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.esm.js +1 -1
  155. package/dist/esm/Form/Select/MultiSelect/SelectButton.esm.js +1 -1
  156. package/dist/esm/Form/Select/MultiSelect/SelectButton.esm.js.map +1 -1
  157. package/dist/esm/Form/Select/MultiSelect/SelectButton.module.esm.js +1 -1
  158. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.esm.js +1 -1
  159. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.esm.js.map +1 -1
  160. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js +2 -0
  161. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js.map +1 -0
  162. package/dist/esm/Form/Select/MultiSelect/useSearch.esm.js +2 -0
  163. package/dist/esm/Form/Select/MultiSelect/useSearch.esm.js.map +1 -0
  164. package/dist/esm/Form/Select/SingleSelect/Option.esm.js +1 -1
  165. package/dist/esm/Form/Select/SingleSelect/Option.esm.js.map +1 -1
  166. package/dist/esm/Form/Select/SingleSelect/Select.esm.js +1 -1
  167. package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -1
  168. package/dist/esm/Form/Select/SingleSelect/Select.module.esm.js +1 -1
  169. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js +2 -0
  170. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js.map +1 -0
  171. package/dist/esm/Form/Select/SingleSelect/useSearch.esm.js +2 -0
  172. package/dist/esm/Form/Select/SingleSelect/useSearch.esm.js.map +1 -0
  173. package/dist/esm/Form/Select/useAddNewBtn.esm.js +1 -1
  174. package/dist/esm/Form/Select/useAddNewBtn.esm.js.map +1 -1
  175. package/dist/esm/Form/Select/useAddNewBtn.module.esm.js +1 -1
  176. package/dist/esm/Form/Select/useSelectPositionList.esm.js +2 -0
  177. package/dist/esm/Form/Select/useSelectPositionList.esm.js.map +1 -0
  178. package/dist/esm/Icon/Icon.esm.js +1 -1
  179. package/dist/esm/Icon/Icon.esm.js.map +1 -1
  180. package/dist/esm/Icon/Icon.module.esm.js +1 -1
  181. package/dist/esm/Layout/ContentHeader/ContentHeader.esm.js +2 -0
  182. package/dist/esm/Layout/ContentHeader/ContentHeader.esm.js.map +1 -0
  183. package/dist/esm/Layout/ContentHeader/ContentHeader.module.esm.js +2 -0
  184. package/dist/esm/Layout/ContentHeader/ContentHeader.module.esm.js.map +1 -0
  185. package/dist/esm/Layout/FormPage/FormWithStepper/FormSection/FormSection.esm.js +2 -0
  186. package/dist/esm/Layout/FormPage/FormWithStepper/FormSection/FormSection.esm.js.map +1 -0
  187. package/dist/esm/Layout/FormPage/FormWithStepper/FormSection/FormSection.module.esm.js +2 -0
  188. package/dist/esm/Layout/FormPage/FormWithStepper/FormSection/FormSection.module.esm.js.map +1 -0
  189. package/dist/esm/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.esm.js +2 -0
  190. package/dist/esm/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.esm.js.map +1 -0
  191. package/dist/esm/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.module.esm.js +2 -0
  192. package/dist/esm/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.module.esm.js.map +1 -0
  193. package/dist/esm/Layout/FormPage/FormWithStepper/FormWithStepper.esm.js +2 -0
  194. package/dist/esm/Layout/FormPage/FormWithStepper/FormWithStepper.esm.js.map +1 -0
  195. package/dist/esm/Layout/FormPage/FormWithStepper/FormWithStepper.module.esm.js +2 -0
  196. package/dist/esm/Layout/FormPage/FormWithStepper/FormWithStepper.module.esm.js.map +1 -0
  197. package/dist/esm/Notifications/Alert/AlertContainer/AlertContainer.esm.js +2 -0
  198. package/dist/esm/Notifications/Alert/AlertContainer/AlertContainer.esm.js.map +1 -0
  199. package/dist/esm/Notifications/Alert/AlertContainer/AlertContainer.module.esm.js +2 -0
  200. package/dist/esm/Notifications/Alert/AlertContainer/AlertContainer.module.esm.js.map +1 -0
  201. package/dist/esm/Notifications/Alert/AlertContainer/useAlertContainerHeightAnimation.esm.js +2 -0
  202. package/dist/esm/Notifications/Alert/AlertContainer/useAlertContainerHeightAnimation.esm.js.map +1 -0
  203. package/dist/esm/Notifications/Alert/AlertItem/AlertItem.esm.js +2 -0
  204. package/dist/esm/Notifications/Alert/AlertItem/AlertItem.esm.js.map +1 -0
  205. package/dist/esm/Notifications/Alert/AlertItem/AlertItem.module.esm.js +2 -0
  206. package/dist/esm/Notifications/Alert/AlertItem/AlertItem.module.esm.js.map +1 -0
  207. package/dist/esm/Notifications/Alert/AlertProvider/AlertContext.esm.js +2 -0
  208. package/dist/esm/Notifications/Alert/AlertProvider/AlertContext.esm.js.map +1 -0
  209. package/dist/esm/Notifications/Alert/AlertProvider/AlertProvider.esm.js +2 -0
  210. package/dist/esm/Notifications/Alert/AlertProvider/AlertProvider.esm.js.map +1 -0
  211. package/dist/esm/Notifications/Alert/useAlert.esm.js +2 -0
  212. package/dist/esm/Notifications/Alert/useAlert.esm.js.map +1 -0
  213. package/dist/esm/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.esm.js.map +1 -1
  214. package/dist/esm/Notifications/Snackbar/SnackbarItem/SnackbarItem.esm.js.map +1 -1
  215. package/dist/esm/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.esm.js.map +1 -1
  216. package/dist/esm/Notifications/Snackbar/SnackbarProvider/SnackbarStateProvider.esm.js.map +1 -1
  217. package/dist/esm/Notifications/Snackbar/interfaces.esm.js.map +1 -1
  218. package/dist/esm/Notifications/Snackbar/useSnackbar.esm.js.map +1 -1
  219. package/dist/esm/Pagination/Pagination.esm.js +1 -1
  220. package/dist/esm/Pagination/Pagination.esm.js.map +1 -1
  221. package/dist/esm/Pagination/Pagination.module.esm.js +1 -1
  222. package/dist/esm/_BaseStyling_/BaseStyling.esm.js +1 -1
  223. package/dist/esm/_BaseStyling_/BaseStyling.esm.js.map +1 -1
  224. package/dist/esm/src/components/Form/FileUpload/FileItem/FileItem.d.ts +10 -0
  225. package/dist/esm/src/components/Form/FileUpload/FileUpload.d.ts +3 -0
  226. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.test.d.ts +63 -1
  227. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelectKeyboardNavigation.test.d.ts +1 -0
  228. package/dist/esm/src/components/Form/Select/MultiSelect/SelectedOptions.d.ts +2 -1
  229. package/dist/esm/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +16 -0
  230. package/dist/esm/src/components/Form/Select/MultiSelect/useSearch.d.ts +34 -0
  231. package/dist/esm/src/components/Form/Select/Select.interfaces.d.ts +1 -0
  232. package/dist/esm/src/components/Form/Select/SingleSelect/Option.d.ts +1 -0
  233. package/dist/esm/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +5 -0
  234. package/dist/esm/src/components/Form/Select/{useSearch.d.ts → SingleSelect/useSearch.d.ts} +2 -1
  235. package/dist/esm/src/components/Form/Select/useAddNewBtn.d.ts +10 -3
  236. package/dist/esm/src/components/Form/Select/useSelectPositionList.d.ts +12 -0
  237. package/dist/esm/src/components/Icon/Icon.d.ts +5 -1
  238. package/dist/esm/src/components/Layout/ContentHeader/ContentHeader.d.ts +10 -0
  239. package/dist/esm/src/components/Layout/ContentHeader/ContentHeader.test.d.ts +1 -0
  240. package/dist/esm/src/components/Layout/FormPage/FormWithStepper/FormSection/FormSection.d.ts +7 -0
  241. package/dist/esm/src/components/Layout/FormPage/FormWithStepper/FormSection/FormSection.test.d.ts +1 -0
  242. package/dist/esm/src/components/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.d.ts +10 -0
  243. package/dist/esm/src/components/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.test.d.ts +1 -0
  244. package/dist/esm/src/components/Layout/FormPage/FormWithStepper/FormWithStepper.d.ts +6 -0
  245. package/dist/esm/src/components/Layout/FormPage/FormWithStepper/FormWithStepper.test.d.ts +1 -0
  246. package/dist/esm/src/components/Notifications/Alert/AlertContainer/AlertContainer.d.ts +12 -0
  247. package/dist/esm/src/components/Notifications/Alert/AlertContainer/AlertContainer.test.d.ts +1 -0
  248. package/dist/esm/src/components/Notifications/Alert/AlertContainer/useAlertContainerHeightAnimation.d.ts +4 -0
  249. package/dist/esm/src/components/Notifications/Alert/AlertItem/AlertItem.d.ts +22 -0
  250. package/dist/esm/src/components/Notifications/Alert/AlertItem/AlertItem.test.d.ts +1 -0
  251. package/dist/esm/src/components/Notifications/Alert/AlertProvider/AlertContext.d.ts +13 -0
  252. package/dist/esm/src/components/Notifications/Alert/AlertProvider/AlertProvider.d.ts +22 -0
  253. package/dist/esm/src/components/Notifications/Alert/AlertProvider/AlertProvider.test.d.ts +1 -0
  254. package/dist/esm/src/components/Notifications/Alert/useAlert.d.ts +7 -0
  255. package/dist/esm/src/components/Notifications/Alert/useAlert.test.d.ts +1 -0
  256. package/dist/esm/src/components/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.d.ts +9 -0
  257. package/dist/esm/src/components/Notifications/Snackbar/SnackbarItem/SnackbarItem.d.ts +6 -0
  258. package/dist/esm/src/components/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.d.ts +9 -0
  259. package/dist/esm/src/components/Notifications/Snackbar/SnackbarProvider/SnackbarStateProvider.d.ts +9 -0
  260. package/dist/esm/src/components/Notifications/Snackbar/interfaces.d.ts +18 -0
  261. package/dist/esm/src/components/Notifications/Snackbar/useSnackbar.d.ts +3 -0
  262. package/dist/esm/src/components/_BaseStyling_/BaseStyling.d.ts +40 -0
  263. package/dist/esm/src/components/admin/layout/MicrofrontendContainer/MicrofrontendContainer.d.ts +8 -0
  264. package/dist/esm/src/index.d.ts +15 -0
  265. package/dist/esm/src/index.esm.js +1 -1
  266. package/dist/esm/src/util/helper.d.ts +1 -0
  267. package/dist/esm/src/util/helper.esm.js +1 -1
  268. package/dist/esm/src/util/helper.esm.js.map +1 -1
  269. package/package.json +6 -6
  270. package/src/components/DataGrid/DataGrid.module.scss +2 -2
  271. package/src/components/DataGrid/DataGridBody/DataGridCell.module.scss +7 -2
  272. package/src/components/DataGrid/DataGridBody/DataGridCell.tsx +1 -1
  273. package/src/components/DataGrid/DataGridBody/DataGridRow.module.scss +10 -0
  274. package/src/components/DataGrid/DataGridBody/__snapshots__/DataGridBody.test.tsx.snap +16 -16
  275. package/src/components/DataGrid/DataGridHeader/DataGridHeader.module.scss +0 -10
  276. package/src/components/DataGrid/DataGridHeader/DataGridHeader.tsx +1 -1
  277. package/src/components/DataGrid/DataGridHeader/DataGridHeaderCell.module.scss +3 -3
  278. package/src/components/Form/FileUpload/FileItem/FileItem.module.scss +114 -3
  279. package/src/components/Form/FileUpload/FileItem/FileItem.tsx +154 -47
  280. package/src/components/Form/FileUpload/FileUpload.module.scss +73 -16
  281. package/src/components/Form/FileUpload/FileUpload.tsx +82 -53
  282. package/src/components/Form/FormSection/FormSection.module.scss +12 -0
  283. package/src/components/Form/Select/MultiSelect/MultiOption.tsx +36 -3
  284. package/src/components/Form/Select/MultiSelect/MultiSelect.module.scss +29 -19
  285. package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +85 -62
  286. package/src/components/Form/Select/MultiSelect/SelectButton.module.scss +1 -1
  287. package/src/components/Form/Select/MultiSelect/SelectButton.tsx +1 -1
  288. package/src/components/Form/Select/MultiSelect/SelectedOptions.tsx +5 -4
  289. package/src/components/Form/Select/MultiSelect/useArrowNavigation.ts +128 -0
  290. package/src/components/Form/Select/MultiSelect/useSearch.tsx +126 -0
  291. package/src/components/Form/Select/Select.interfaces.ts +1 -0
  292. package/src/components/Form/Select/SingleSelect/Option.tsx +15 -4
  293. package/src/components/Form/Select/SingleSelect/Select.module.scss +13 -2
  294. package/src/components/Form/Select/SingleSelect/Select.tsx +7 -3
  295. package/src/components/Form/Select/{SelectService.ts → SingleSelect/useArrowNavigation.ts} +1 -101
  296. package/src/components/Form/Select/{useSearch.tsx → SingleSelect/useSearch.tsx} +3 -2
  297. package/src/components/Form/Select/useAddNewBtn.module.scss +18 -4
  298. package/src/components/Form/Select/useAddNewBtn.tsx +42 -8
  299. package/src/components/Form/Select/useSelectPositionList.ts +113 -0
  300. package/src/components/Icon/Icon.module.scss +16 -1
  301. package/src/components/Icon/Icon.tsx +5 -1
  302. package/src/components/Layout/ContentHeader/ContentHeader.module.scss +44 -0
  303. package/src/components/Layout/ContentHeader/ContentHeader.tsx +70 -0
  304. package/src/components/Layout/FormPage/FormWithStepper/FormSection/FormSection.module.scss +12 -0
  305. package/src/components/Layout/FormPage/FormWithStepper/FormSection/FormSection.tsx +53 -0
  306. package/src/components/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.module.scss +25 -0
  307. package/src/components/Layout/FormPage/FormWithStepper/FormStepper/FormStepper.tsx +54 -0
  308. package/src/components/Layout/FormPage/FormWithStepper/FormWithStepper.module.scss +39 -0
  309. package/src/components/Layout/FormPage/FormWithStepper/FormWithStepper.tsx +34 -0
  310. package/src/components/Notifications/Alert/AlertContainer/AlertContainer.module.scss +56 -0
  311. package/src/components/Notifications/Alert/AlertContainer/AlertContainer.tsx +52 -0
  312. package/src/components/Notifications/Alert/AlertContainer/useAlertContainerHeightAnimation.ts +47 -0
  313. package/src/components/Notifications/Alert/AlertItem/AlertItem.module.scss +277 -0
  314. package/src/components/Notifications/Alert/AlertItem/AlertItem.tsx +214 -0
  315. package/src/components/Notifications/Alert/AlertProvider/AlertContext.ts +42 -0
  316. package/src/components/Notifications/Alert/AlertProvider/AlertProvider.tsx +173 -0
  317. package/src/components/Notifications/Alert/useAlert.ts +30 -0
  318. package/src/components/Notifications/Snackbar/SnackbarContainer/SnackbarContainer.tsx +9 -0
  319. package/src/components/Notifications/Snackbar/SnackbarItem/SnackbarItem.tsx +6 -0
  320. package/src/components/Notifications/Snackbar/SnackbarProvider/SnackbarProvider.tsx +9 -0
  321. package/src/components/Notifications/Snackbar/SnackbarProvider/SnackbarStateProvider.tsx +9 -0
  322. package/src/components/Notifications/Snackbar/interfaces.ts +18 -0
  323. package/src/components/Notifications/Snackbar/useSnackbar.ts +3 -0
  324. package/src/components/Pagination/Pagination.module.scss +4 -6
  325. package/src/components/Pagination/Pagination.tsx +3 -1
  326. package/src/components/_BaseStyling_/BaseStyling.tsx +78 -1
  327. package/src/components/admin/layout/MicrofrontendContainer/MicrofrontendContainer.module.scss +25 -0
  328. package/src/components/admin/layout/MicrofrontendContainer/MicrofrontendContainer.tsx +47 -0
  329. package/src/font/icomoon.eot +0 -0
  330. package/src/font/icomoon.svg +3 -0
  331. package/src/font/icomoon.ttf +0 -0
  332. package/src/font/icomoon.woff +0 -0
  333. package/src/font/selection.json +1 -1
  334. package/src/index.ts +21 -0
  335. package/src/mixins.module.scss +7 -0
  336. package/src/util/helper.tsx +2 -0
  337. package/src/variables.scss +1 -0
  338. package/dist/cjs/Form/Select/SelectService.cjs.js +0 -2
  339. package/dist/cjs/Form/Select/SelectService.cjs.js.map +0 -1
  340. package/dist/cjs/Form/Select/useSearch.cjs.js +0 -2
  341. package/dist/cjs/Form/Select/useSearch.cjs.js.map +0 -1
  342. package/dist/cjs/src/components/Form/Select/SelectService.d.ts +0 -17
  343. package/dist/esm/Form/Select/SelectService.esm.js +0 -2
  344. package/dist/esm/Form/Select/SelectService.esm.js.map +0 -1
  345. package/dist/esm/Form/Select/useSearch.esm.js +0 -2
  346. package/dist/esm/Form/Select/useSearch.esm.js.map +0 -1
  347. package/dist/esm/src/components/Form/Select/SelectService.d.ts +0 -17
@@ -17,28 +17,35 @@
17
17
  import classes from "./MultiSelect.module.scss";
18
18
 
19
19
  import React, {
20
- createRef,
21
20
  ForwardRefRenderFunction,
22
21
  Fragment,
23
22
  ReactElement,
23
+ createRef,
24
24
  useEffect,
25
25
  useRef,
26
26
  useState
27
27
  } from "react";
28
- import { Icon, Icons } from "../../../Icon/Icon";
29
28
  import { useBodyClick } from "../../../../hooks/useBodyClick";
30
- import readyclasses from "../../../../readyclasses.module.scss";
31
- import { filterProps } from "../../../../util/helper";
32
- import { useArrowNavigation, useSelectPositionList } from "../SelectService";
33
29
  import { useDetermineStatusIcon } from "../../../../hooks/useDetermineStatusIcon";
34
- import { SelectedOptions, Display } from "./SelectedOptions";
35
- import { SelectButton } from "./SelectButton";
30
+ import readyclasses from "../../../../readyclasses.module.scss";
31
+ import { escapeRegExp, filterProps, generateID } from "../../../../util/helper";
32
+ import { Icon, Icons } from "../../../Icon/Icon";
36
33
  import { MultiSelectProps } from "../Select.interfaces";
37
- import { useSearch } from "../useSearch";
38
34
  import { useAddNewBtn } from "../useAddNewBtn";
35
+ import { useSelectPositionList } from "../useSelectPositionList";
36
+ import { SelectButton } from "./SelectButton";
37
+ import { Display, SelectedOptions } from "./SelectedOptions";
38
+ import { useArrowNavigation } from "./useArrowNavigation";
39
+ import { useSearch } from "./useSearch";
40
+
41
+ const getOptionId = (multiSelectId: string, optionIndex: number) =>
42
+ `${multiSelectId}_option${optionIndex}`;
43
+
44
+ const getListboxId = (multiSelectId: string) => `${multiSelectId}_listbox`;
39
45
 
40
46
  const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSelectProps> = (
41
47
  {
48
+ id,
42
49
  children,
43
50
  name,
44
51
  disabled = false,
@@ -56,42 +63,51 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
56
63
  noResultsLabel = "No results found",
57
64
  onChange,
58
65
  addNew,
59
- search,
66
+ search = { enabled: true, renderThreshold: 0 },
60
67
  ...rest
61
68
  }: MultiSelectProps,
62
69
  ref
63
70
  ) => {
71
+ const multiSelectId = useRef(id ?? generateID(20));
64
72
  const [expanded, setExpanded] = useState(false);
65
- const [display, setDisplay] = useState<Record<string, Display>>({});
73
+ const [display, setDisplay] = useState<Display[]>([]);
66
74
  const containerReference = useRef<HTMLDivElement>(null);
67
75
  const optionListReference = useRef<HTMLDivElement>(null);
68
- const [focusedSelectItem, setFocusedSelectItem] = useState(-1);
76
+ const [focusedSelectItem, setFocusedSelectItem] = useState(0);
69
77
  const [shouldClick, setShouldClick] =
70
78
  useState(
71
79
  false
72
80
  ); /** We need this, because whenever we use the arrow keys to select the select item, and we focus the currently selected item it fires the "click" listener in Option component. Instead, we only want this to fire if we press "enter" or "spacebar" so we set this to true whenever that is the case, and back to false when it has been executed. */
73
81
  const [shouldFocusButtonAfterClose, setShouldFocusButtonAfterClose] = useState(false);
74
- const optionsVisibleCount = React.Children.count(children) - Object.keys(display).length;
75
- const {
76
- filter,
77
- isSearching,
78
- renderSearch,
79
- searchInputRef,
80
- setIsSearching,
81
- searchThreshold,
82
- searchVisible
83
- } = useSearch({
82
+ const [optionsVisibleCount, setOptionsVisibleCount] = useState(
83
+ React.Children.count(children) - display.length
84
+ );
85
+ const { filter, renderSearch, searchInputRef, resetSearchState, searchVisible } = useSearch({
86
+ selectId: multiSelectId.current,
84
87
  expanded,
85
88
  search,
86
89
  searchInputClassName: classes["select-search"],
87
90
  optionsCount: optionsVisibleCount,
91
+ focusedSelectItem,
88
92
  setFocusedSelectItem,
89
93
  searchInputProps,
90
- searchPlaceholder
94
+ searchPlaceholder,
95
+ describedBy,
96
+ getOptionId,
97
+ getListboxId
91
98
  });
92
99
  const { addBtnRef, addNewBtnOptionsContainerClassName, renderAddNew } = useAddNewBtn({
100
+ id: getOptionId(multiSelectId.current, optionsVisibleCount),
93
101
  addNew,
94
- filter
102
+ filter,
103
+ focusedSelectItem,
104
+ optionsCount: optionsVisibleCount,
105
+ searchInputRef,
106
+ shouldClick,
107
+ onClickCallback: () => {
108
+ setShouldClick(false);
109
+ resetSearchState();
110
+ }
95
111
  });
96
112
 
97
113
  const nativeSelect = (ref as React.RefObject<HTMLSelectElement>) || createRef();
@@ -110,8 +126,8 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
110
126
  });
111
127
  nativeSelect.current.dispatchEvent(new Event("change", { bubbles: true }));
112
128
  }
113
-
114
129
  setExpanded(false);
130
+ resetSearchState();
115
131
  };
116
132
 
117
133
  const onSelectedOptionRemoveHandler = (value: string) => {
@@ -126,33 +142,24 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
126
142
  const { onArrowNavigation } = useArrowNavigation({
127
143
  expanded,
128
144
  setExpanded,
129
- isSearching,
130
- setIsSearching,
131
145
  setFocusedSelectItem,
132
- onOptionChangeHandler,
133
146
  childrenCount: optionsVisibleCount,
134
147
  setShouldClick,
135
- searchInputRef,
136
148
  addBtnRef,
137
- renderThreshold: searchThreshold
149
+ searchInputRef,
150
+ customSelectButtonRef,
151
+ onClose: resetSearchState
138
152
  });
139
153
 
140
154
  const { listPosition, opacity, optionsListMaxHeight, setListPosition, setOpacity } =
141
155
  useSelectPositionList({ expanded, optionListReference, containerReference, addBtnRef });
142
156
 
143
- const syncDisplayValue = (vals: string[]) => {
144
- const displayArray = React.Children.map(children, child => child).reduce(
145
- (prevOption, curOption) => {
146
- if (vals.includes(curOption.props.value)) {
147
- prevOption[curOption.props.value] = {
148
- label: curOption.props.children,
149
- fixed: curOption.props.fixed
150
- };
151
- }
152
- return prevOption;
153
- },
154
- {} as Record<string, Display>
155
- );
157
+ const syncDisplayValue = (values: string[]) => {
158
+ const options = React.Children.map(children, child => child);
159
+ const displayArray: Display[] = values.map(value => {
160
+ const option = options.find(option => option.props.value === value);
161
+ return { value, label: option?.props.children, fixed: option?.props.fixed };
162
+ });
156
163
  setDisplay(displayArray);
157
164
  };
158
165
 
@@ -177,31 +184,37 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
177
184
  type ReactChildrenType = ReturnType<typeof React.Children.toArray>;
178
185
 
179
186
  const filterOutSelectedChildren = (internalChildren: ReactChildrenType) => {
180
- const selectedValues = Object.keys(display);
181
187
  return internalChildren.filter(
182
188
  child =>
183
189
  typeof child === "object" &&
184
190
  "props" in child &&
185
- !selectedValues.includes(child.props.value as string)
191
+ !display.find(option => option.value === child.props.value)
186
192
  );
187
193
  };
188
194
 
189
- if (isSearching || filter !== "") {
195
+ let results;
196
+ if (filter !== "") {
190
197
  const filteredChildren = React.Children.toArray(children).filter(
191
198
  child =>
192
- (child as ReactElement).props.children.toLowerCase().match(filter.toLowerCase()) !== null
199
+ (child as ReactElement).props.children
200
+ .toLowerCase()
201
+ .match(escapeRegExp(filter.toLowerCase())) !== null
193
202
  );
194
203
 
195
- const internalChildren = _internalRenderChildren(filterOutSelectedChildren(filteredChildren));
204
+ results = _internalRenderChildren(filterOutSelectedChildren(filteredChildren));
205
+ } else {
206
+ results = _internalRenderChildren(
207
+ filterOutSelectedChildren(React.Children.toArray(children))
208
+ );
209
+ }
196
210
 
197
- if (internalChildren.length === 0) {
198
- return <li className={classes["no-results"]}>{noResultsLabel}</li>;
199
- }
211
+ optionsVisibleCount !== results.length && setOptionsVisibleCount(results.length);
200
212
 
201
- return internalChildren;
213
+ if (results.length === 0) {
214
+ return <li className={classes["no-results"]}>{noResultsLabel}</li>;
202
215
  }
203
216
 
204
- return _internalRenderChildren(filterOutSelectedChildren(React.Children.toArray(children)));
217
+ return results;
205
218
 
206
219
  function _internalRenderChildren(internalChildren: ReactChildrenType) {
207
220
  return React.Children.map(internalChildren, (child, index) => {
@@ -211,13 +224,15 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
211
224
  },
212
225
  onOptionSelect: (optionRef: React.RefObject<HTMLLIElement>) => {
213
226
  onOptionChangeHandler(optionRef.current);
227
+ setExpanded(false);
214
228
  setShouldClick(false);
215
229
  },
216
- isSearching: isSearching,
230
+ isSearching: false,
217
231
  selectOpened: expanded,
218
232
  childIndex: index,
219
233
  hasFocus: focusedSelectItem === index,
220
- shouldClick: shouldClick
234
+ shouldClick: shouldClick,
235
+ id: getOptionId(multiSelectId.current, index)
221
236
  });
222
237
  });
223
238
  }
@@ -238,16 +253,21 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
238
253
  };
239
254
 
240
255
  useEffect(() => {
241
- if (expanded) {
242
- setFocusedSelectItem(0);
256
+ if (expanded && searchInputRef.current) {
243
257
  setShouldFocusButtonAfterClose(true);
258
+ searchInputRef.current.focus();
244
259
  }
245
260
 
246
261
  if (!expanded && customSelectButtonRef.current && shouldFocusButtonAfterClose) {
247
- customSelectButtonRef.current.focus();
248
262
  setShouldFocusButtonAfterClose(false);
263
+ customSelectButtonRef.current.focus();
249
264
  }
250
- }, [expanded, customSelectButtonRef.current, shouldFocusButtonAfterClose]);
265
+ }, [
266
+ expanded,
267
+ customSelectButtonRef.current,
268
+ shouldFocusButtonAfterClose,
269
+ searchInputRef.current
270
+ ]);
251
271
 
252
272
  useEffect(() => {
253
273
  syncDisplayValue(value);
@@ -272,7 +292,8 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
272
292
  success && additionalClasses.push(classes.success);
273
293
 
274
294
  const onSelectButtonClick = () => {
275
- setExpanded(!expanded);
295
+ setExpanded(expanded => !expanded);
296
+ setShouldClick(false);
276
297
  };
277
298
 
278
299
  /** The native select is purely for external form libraries. We use it to emit an onChange with native select event object so they know exactly what's happening. */
@@ -295,16 +316,16 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
295
316
  </select>
296
317
  <div
297
318
  {...filterProps(rest, /^data-/)}
319
+ id={multiSelectId.current}
298
320
  ref={containerReference}
299
321
  onKeyDown={onArrowNavigation}
300
322
  className={`custom-select ${classes.select} ${additionalClasses.join(" ")} ${
301
323
  className ?? ""
302
324
  }`}
303
325
  >
304
- {searchVisible && renderSearch()}
305
326
  <div
306
327
  className={`${classes["custom-select"]} ${additionalClasses.join(" ")} `}
307
- style={{ display: expanded && searchVisible ? "none" : "flex" }}
328
+ style={{ display: "flex" }}
308
329
  >
309
330
  <div className={classes["display-container"]} data-display>
310
331
  <SelectButton
@@ -331,10 +352,10 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
331
352
  onRemove={onSelectedOptionRemoveHandler}
332
353
  />
333
354
  )}
355
+ {searchVisible && renderSearch()}
334
356
  </div>
335
357
  <div className={classes["status"]}>{icon || renderChevronIcon()}</div>
336
358
  </div>
337
-
338
359
  <div
339
360
  ref={optionListReference}
340
361
  className={`list-wrapper ${classes["list-wrapper"]}`}
@@ -347,8 +368,10 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
347
368
  }}
348
369
  >
349
370
  <ul
371
+ id={getListboxId(multiSelectId.current)}
350
372
  className={addNewBtnOptionsContainerClassName}
351
373
  role="listbox"
374
+ aria-multiselectable="true"
352
375
  style={{ maxHeight: optionsListMaxHeight.list }}
353
376
  >
354
377
  {renderOptions()}
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- .add-btn {
17
+ .btn {
18
18
  position: absolute;
19
19
  top: 0;
20
20
  left: 0;
@@ -26,7 +26,7 @@ const SelectButtonComponent: ForwardRefRenderFunction<HTMLButtonElement, Props>
26
26
  return (
27
27
  <button
28
28
  {...rest}
29
- className={classes["add-btn"]}
29
+ className={classes["btn"]}
30
30
  onClick={onClick}
31
31
  ref={ref}
32
32
  type="button"
@@ -20,12 +20,13 @@ import { Tag } from "../../../Tag/Tag";
20
20
  import classes from "./SelectedOptions.module.scss";
21
21
 
22
22
  export type Display = {
23
+ value: string;
23
24
  label: string;
24
25
  fixed?: boolean;
25
26
  };
26
27
 
27
28
  export interface Props extends ComponentPropsWithRef<"div"> {
28
- display: Record<string, Display>;
29
+ display: Display[];
29
30
  onRemove: (value: string) => void;
30
31
  disabled: boolean;
31
32
  }
@@ -36,9 +37,9 @@ const SelectedOptionsComponent: ForwardRefRenderFunction<HTMLDivElement, Props>
36
37
  ) => {
37
38
  return (
38
39
  <div {...rest} className={classes["options"]} ref={ref}>
39
- {Object.entries(display).map(([value, item]) => (
40
+ {display.map(item => (
40
41
  <Tag
41
- key={value}
42
+ key={item.value}
42
43
  onClick={(e: React.MouseEvent<HTMLDivElement>) => {
43
44
  e.stopPropagation();
44
45
  }}
@@ -48,7 +49,7 @@ const SelectedOptionsComponent: ForwardRefRenderFunction<HTMLDivElement, Props>
48
49
  ? {
49
50
  onRemove: (e: React.MouseEvent<HTMLButtonElement>) => {
50
51
  e.stopPropagation();
51
- onRemove(value);
52
+ onRemove(item.value);
52
53
  },
53
54
  className: classes["remove-btn"]
54
55
  }
@@ -0,0 +1,128 @@
1
+ /*
2
+ * Copyright 2022 OneWelcome B.V.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ interface UseArrowNavigationParams {
18
+ expanded: boolean;
19
+ setExpanded: React.Dispatch<React.SetStateAction<boolean>>;
20
+ setFocusedSelectItem: React.Dispatch<React.SetStateAction<number>>;
21
+ childrenCount: number;
22
+ setShouldClick: React.Dispatch<React.SetStateAction<boolean>>;
23
+ addBtnRef: React.RefObject<HTMLButtonElement>;
24
+ searchInputRef: React.RefObject<HTMLInputElement>;
25
+ customSelectButtonRef: React.RefObject<HTMLButtonElement>;
26
+ onClose: () => void;
27
+ }
28
+
29
+ /** @scope .*/
30
+ export const useArrowNavigation = ({
31
+ expanded,
32
+ setExpanded,
33
+ setFocusedSelectItem,
34
+ childrenCount,
35
+ setShouldClick,
36
+ addBtnRef,
37
+ searchInputRef,
38
+ customSelectButtonRef,
39
+ onClose
40
+ }: UseArrowNavigationParams) => {
41
+ const onArrowNavigation = (event: React.KeyboardEvent) => {
42
+ const codesToPreventDefault = ["ArrowDown", "ArrowUp", "Escape", "End", "Home"];
43
+ const hasAddBtn = !!addBtnRef?.current;
44
+ const childrenCountWithAddButton = childrenCount + (hasAddBtn ? 1 : 0);
45
+ const isSearchEvent = event.target === searchInputRef.current;
46
+ const isSelectButtonEvent = event.target === customSelectButtonRef.current;
47
+ const isSearchOrSelectButtonEvent = isSelectButtonEvent || isSearchEvent;
48
+
49
+ if (expanded) {
50
+ codesToPreventDefault.push("Tab");
51
+ codesToPreventDefault.push("Enter");
52
+ }
53
+
54
+ if (!expanded) {
55
+ codesToPreventDefault.push("Space");
56
+ }
57
+
58
+ if (codesToPreventDefault.includes(event.code) && !event.metaKey) {
59
+ event.preventDefault();
60
+ }
61
+
62
+ switch (event.code) {
63
+ case "ArrowDown":
64
+ if (!expanded) {
65
+ setExpanded(true);
66
+ setFocusedSelectItem(0);
67
+ break;
68
+ }
69
+ setFocusedSelectItem(prevState =>
70
+ prevState + 1 > childrenCountWithAddButton - 1 ? 0 : prevState + 1
71
+ );
72
+ break;
73
+ case "ArrowUp":
74
+ if (!expanded) {
75
+ setExpanded(true);
76
+ setFocusedSelectItem(childrenCountWithAddButton - 1);
77
+ break;
78
+ }
79
+
80
+ setFocusedSelectItem(prevState =>
81
+ prevState - 1 < 0 ? childrenCountWithAddButton - 1 : prevState - 1
82
+ );
83
+ break;
84
+ case "Enter":
85
+ if (expanded) {
86
+ setShouldClick(true);
87
+ } else {
88
+ setFocusedSelectItem(0);
89
+ }
90
+ if (isSearchOrSelectButtonEvent) {
91
+ setExpanded(!expanded);
92
+ }
93
+ break;
94
+ case "Space":
95
+ if (!expanded) {
96
+ setExpanded(true);
97
+ setFocusedSelectItem(0);
98
+ }
99
+ break;
100
+ case "Home":
101
+ setFocusedSelectItem(0);
102
+ break;
103
+ case "Escape":
104
+ if (expanded) {
105
+ setExpanded(false);
106
+ onClose();
107
+ }
108
+ break;
109
+ case "End":
110
+ setFocusedSelectItem(childrenCount - 1);
111
+ break;
112
+ case "ArrowLeft":
113
+ if (event.metaKey && expanded) {
114
+ event.preventDefault();
115
+ setFocusedSelectItem(0);
116
+ }
117
+ break;
118
+ case "ArrowRight":
119
+ if (event.metaKey && expanded) {
120
+ event.preventDefault();
121
+ setFocusedSelectItem(childrenCount - 1);
122
+ }
123
+ break;
124
+ }
125
+ };
126
+
127
+ return { onArrowNavigation };
128
+ };
@@ -0,0 +1,126 @@
1
+ /*
2
+ * Copyright 2022 OneWelcome B.V.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import React, { useEffect, useRef, useState } from "react";
18
+ import { PartialInputProps, SearchProps } from "../Select.interfaces";
19
+
20
+ interface Props {
21
+ selectId: string;
22
+ search?: SearchProps;
23
+ optionsCount: number;
24
+ /**
25
+ * @deprecated
26
+ */
27
+ searchPlaceholder?: string;
28
+ /**
29
+ * @deprecated
30
+ */
31
+ searchInputProps?: PartialInputProps & { reset?: boolean };
32
+ searchInputClassName: string;
33
+ expanded: boolean;
34
+ setFocusedSelectItem: (idx: number) => void;
35
+ focusedSelectItem: number;
36
+ describedBy?: string;
37
+ getOptionId: (multiSelectId: string, optionIndex: number) => string;
38
+ getListboxId: (multiSelectId: string) => string;
39
+ }
40
+
41
+ /** @scope .*/
42
+ export const useSearch = ({
43
+ selectId,
44
+ search,
45
+ optionsCount,
46
+ searchPlaceholder,
47
+ searchInputProps,
48
+ searchInputClassName,
49
+ expanded,
50
+ setFocusedSelectItem,
51
+ focusedSelectItem,
52
+ describedBy,
53
+ getOptionId,
54
+ getListboxId
55
+ }: Props) => {
56
+ const [filter, setFilter] = useState("");
57
+
58
+ const DEFAULT_RENDER_THRESHOLD = 0;
59
+
60
+ const searchInputRef = useRef<HTMLInputElement>(null);
61
+
62
+ const threshold = search?.renderThreshold ?? DEFAULT_RENDER_THRESHOLD;
63
+ const hasEnoughChildren = optionsCount >= threshold;
64
+
65
+ const shouldRenderSearch = () => {
66
+ if (search?.enabled) {
67
+ return hasEnoughChildren;
68
+ }
69
+
70
+ if (search) {
71
+ return search.enabled as boolean;
72
+ }
73
+
74
+ return optionsCount > DEFAULT_RENDER_THRESHOLD;
75
+ };
76
+
77
+ const renderSearch = () => {
78
+ return (
79
+ <input
80
+ {...((search?.searchInputProps as any) ?? searchInputProps ?? {})}
81
+ ref={searchInputRef}
82
+ value={filter}
83
+ onChange={event => setFilter(event.currentTarget.value)}
84
+ className={[searchInputClassName, searchInputProps?.className].join(" ")}
85
+ style={{
86
+ display: expanded ? "block" : "none"
87
+ }}
88
+ type="text"
89
+ name="search-option"
90
+ placeholder={search?.searchPlaceholder ?? searchPlaceholder}
91
+ role="combobox"
92
+ autoComplete="off"
93
+ autoCorrect="off"
94
+ spellCheck={false}
95
+ aria-controls={getListboxId(selectId)}
96
+ aria-describedby={describedBy}
97
+ aria-autocomplete="none"
98
+ aria-expanded={expanded}
99
+ aria-activedescendant={getOptionId(selectId, focusedSelectItem)}
100
+ aria-haspopup={true}
101
+ />
102
+ );
103
+ };
104
+
105
+ const resetSearchState = () => {
106
+ setFilter("");
107
+ setFocusedSelectItem(0);
108
+ };
109
+
110
+ const visible = shouldRenderSearch();
111
+
112
+ useEffect(() => {
113
+ if (search?.searchInputProps?.reset || searchInputProps?.reset) {
114
+ resetSearchState();
115
+ }
116
+ }, [searchInputProps?.reset, search?.searchInputProps?.reset]);
117
+
118
+ return {
119
+ renderSearch,
120
+ resetSearchState,
121
+ searchVisible: visible,
122
+ searchThreshold: threshold,
123
+ searchInputRef,
124
+ filter
125
+ };
126
+ };
@@ -31,6 +31,7 @@ export interface AddNewProps {
31
31
  label: string;
32
32
  onAddNew: (value: string) => void;
33
33
  btnProps?: React.ButtonHTMLAttributes<HTMLButtonElement>;
34
+ alwaysEnabled?: boolean;
34
35
  }
35
36
 
36
37
  export interface SelectProps<V extends string | readonly string[] | undefined>
@@ -20,15 +20,18 @@ import React, {
20
20
  createRef,
21
21
  RefObject,
22
22
  useEffect,
23
- ReactNode
23
+ ReactNode,
24
+ useRef
24
25
  } from "react";
25
26
  import classes from "./Select.module.scss";
27
+ import { generateID } from "../../../../util/helper";
26
28
 
27
29
  export interface Props extends ComponentPropsWithRef<"li"> {
28
30
  children: ReactNode;
29
31
  value: string;
30
32
  disabled?: boolean;
31
33
  isSelected?: boolean;
34
+ disableDefaultSelectedStyle?: boolean;
32
35
  selectOpened?: boolean;
33
36
  hasFocus?: boolean;
34
37
  shouldClick?: boolean;
@@ -42,9 +45,11 @@ export interface Props extends ComponentPropsWithRef<"li"> {
42
45
 
43
46
  const OptionComponent: ForwardRefRenderFunction<HTMLLIElement, Props> = (
44
47
  {
48
+ id,
45
49
  children,
46
50
  className,
47
51
  isSelected = false,
52
+ disableDefaultSelectedStyle,
48
53
  shouldClick,
49
54
  hasFocus,
50
55
  selectOpened,
@@ -59,8 +64,15 @@ const OptionComponent: ForwardRefRenderFunction<HTMLLIElement, Props> = (
59
64
  }: Props,
60
65
  ref
61
66
  ) => {
67
+ const defaultOptionId = useRef(generateID(20));
68
+ const optionId = id ?? defaultOptionId.current;
62
69
  let innerOptionRef = (ref as RefObject<HTMLLIElement>) || createRef<HTMLLIElement>();
63
70
 
71
+ const additionalClasses = [];
72
+ className && additionalClasses.push(className);
73
+ isSelected && !disableDefaultSelectedStyle && additionalClasses.push(classes["selected-option"]);
74
+ disabled && additionalClasses.push(classes["disabled"]);
75
+
64
76
  useEffect(() => {
65
77
  if (isSelected && innerOptionRef.current && shouldClick) {
66
78
  innerOptionRef.current.click();
@@ -79,11 +91,10 @@ const OptionComponent: ForwardRefRenderFunction<HTMLLIElement, Props> = (
79
91
  return (
80
92
  <li
81
93
  {...rest}
94
+ id={optionId}
82
95
  ref={innerOptionRef}
83
96
  data-value={value}
84
- className={`${isSelected ? classes["selected-option"] : ""} ${
85
- disabled ? classes.disabled : ""
86
- } ${className ?? ""}`}
97
+ className={additionalClasses.join(" ")}
87
98
  onClick={onSelectHandler}
88
99
  onKeyDown={event => {
89
100
  if (event.code === "Enter") {